命名实体识别(NER)怎么做?BiLSTM-CRF 和 BERT-CRF 哪个好?
命名实体识别(Named Entity Recognition,NER)是从文本中抽取出特定类型的实体——人名、地名、机构名、日期等。它是信息抽取的基础:搜索引擎要理解"苹果"是公司还是水果,问答系统要找到答案里的人名和地点,都靠 NER。
NER 怎么定义"实体"
最常用的标注体系是 BIO:B-X 表示实体 X 的开头,I-X 表示实体 X 的内部,O 表示非实体。比如"北京大学位于海淀区"标注为"B-ORG I-ORG I-ORG I-ORG O B-LOC I-LOC I-LOC"。还有 BIOES 体系多了 E(结束)和 S(单字实体),理论上更精确但实际差距不大。
常见实体类型:PER(人名)、LOC(地名)、ORG(机构)、DATE(日期)、MISC(其他)。具体定义取决于业务场景——医疗 NER 需要识别疾病名和药品名,金融 NER 需要识别公司名和指标。
NER 方法演进
规则和词典:正则匹配+实体词典,准确率极高但覆盖率低。电话号码、邮箱这类格式固定的实体用正则就行。但新实体(新人名、新公司名)永远识别不了——这就是规则方法的根本缺陷。
CRF(条件随机场):传统方法的巅峰。它考虑整个序列的标签联合概率,避免"I-ORG"跟在"O"后面这种非法序列。CRF 的关键是特征工程——词性、前后缀、词典匹配、上下文窗口,特征设计得好效果就好。缺点是太依赖人工设计特征。
BiLSTM-CRF:深度学习 NER 的经典架构。BiLSTM 自动学特征(不需要手工设计),CRF 层保证标签合法性。为什么需要 CRF?因为纯 BiLSTM 每个位置独立预测,可能出现"B-PER"后面跟"I-LOC"这种非法序列,CRF 通过学习转移矩阵约束标签之间的关系。
BERT-CRF:用预训练的 BERT 替换 BiLSTM 作为编码器。BERT 自带丰富的语言知识,少量标注数据就能微调出好效果。在 CoNLL-2003 英文 NER 数据集上,BERT-CRF 的 F1 超过 92%,比 BiLSTM-CRF 高 3-5 个点。代价是推理速度慢、显存需求大。
LLM 做 NER:GPT-4、Claude 可以通过 prompt 做 zero-shot NER,不需要训练数据。在通用实体上效果不错,但在专业领域(医疗、法律)和细粒度实体类型上还是微调模型更可靠。实际项目中,LLM 做 NER 的成本也比小模型高 10-100 倍。
NER 的核心评估指标
用精确率(Precision)、召回率(Recall)和 F1 值评估。NER 的"匹配"要求边界和类型都正确——"北京大学"标成 ORG 算对,标成 LOC 算错,只识别出"北京"也算错(边界不对)。实际项目中,精确率和召回率的取舍取决于业务:搜索引擎更重召回(别漏),法律合规更重精确(别标错)。
中文 NER 的特殊挑战
中文没有天然分词边界,"北京大学"可以是三个字也可以是一个实体。字级别的 NER(一个字一个字标注)比词级别更常见,因为避免了分词错误传播的问题——分词错了,NER 肯定跟着错。Lattice LSTM 就是专门解决这个问题的,它把分词信息作为额外路径融入字级别模型。