WordEmbedding是NER模型的输入底座,将字或词映射为稠密语义向量;BiLSTM捕获上下文依赖,CRF保障标签序列合理性,三者协同完成实体识别。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

WordEmbedding本身不直接做NER,它是NER模型的“输入底座”——把字或词转成有语义的向量,让BiLSTM能真正读懂上下文。真正完成识别的是BiLSTM捕获序列依赖 + CRF保障标签合理性,而WordEmbedding决定了这个过程的起点有多扎实。
WordEmbedding怎么用在NER里
它不是独立模块,而是嵌入整个流程的第一步:
- 每个字(中文通常按字切分)或词被映射为固定维度的稠密向量,比如96维或300维
- 向量可以随机初始化,也可以加载预训练词向量(如Word2Vec、GloVe、BERT子词向量),后者显著提升泛化能力
- 例如,“安徽”和“江苏”在向量空间中距离近,模型即使只见过“安徽”标为LOC,也能更大概率把“江苏”也识别为地名
- 对于未登录词(如新公司名、生僻地名),<UNK>向量统一兜底,避免模型卡死
BiLSTM-CRF模型的关键分工
WordEmbedding负责“翻译”,后面两层负责“理解”和“决策”:
- BiLSTM层:把词向量序列双向输入,输出每个位置的隐藏状态,融合前后文信息。比如“马云”在“创办阿里巴巴”中是人名,在“马云路”中可能是地名,BiLSTM靠上下文区分
- CRF层:不单独打分每个标签,而是对整条标签序列(如B-PER, I-PER, O, B-ORG...)打总分,强制满足约束:I-PER不能出现在B-PER之前,O后面不能接I-ORG等
- 最终预测不是取每个位置最高分标签,而是用Viterbi算法找全局最优标签路径
实战中几个必须注意的细节
代码跑通容易,效果达标难,这些点常被忽略:
- BIO标注要严格对齐:一个字只能有一个标签,空格、标点、换行符都要参与标注,否则输入长度和标签长度不匹配会报错
-
填充与截断需同步处理:句子过短补
,过长截断,word_ids和tag_ids必须等长,且 对应标签设为特殊值(如-1),CRF计算时主动mask掉 - CRF的转移矩阵要可学习:初始化不能全零,建议用小随机数;训练中它会自动学到“B-PER→I-PER高分、B-PER→B-ORG低分”这类先验
-
评估别只看accuracy:NER关注实体级准确率,要用实体边界+类型双匹配计算F1,scikit-learn的
seqeval库比单纯token-level更可靠
快速启动建议(PyTorch为例)
不用从零写CRF,推荐基于成熟实现迭代:
- 用
torch.nn.Embedding构建词表,word_to_ix和tag_to_ix提前建好 - 参考PyTorch官方NER教程的CRF实现(含
_forward_alg和_viterbi_decode),它已处理LogSumExp防溢出 - 小数据起步:先用CLUE的CLUENER(10类中文NER)或自建500句医疗/客服样本,验证流程闭环
- 调试时打印前3个batch的
logits和viterbi_path,确认CRF是否真在起作用(比如O后不再出现I-ORG)


















