Spacy 3.06 NLP小写命名实体识别失效及按实体类型合并咨询
小写文本下Spacy命名实体识别失效解决方案
Spacy的官方预训练NER模型基于标注了标准大小写的语料训练,输入文本大小写不规范时,实体识别准确率会大幅下降,new york这类全小写的地名无法识别为GPE是非常典型的场景,可按需选择以下方案解决:
方案1:前置大小写还原预处理(推荐,落地成本最低)
先对输入文本做真实大小写还原,再传入Spacy做识别,通用场景下可以直接用truecase这类成熟的大小写还原工具处理,示例代码如下:
import truecase import spacy # 加载预训练模型 nlp = spacy.load("en_core_web_sm") # 原始输入文本 raw_text = "You can hear the musicality in his voice. Some combination of leftover italian rhythms and a new york inflected North Jersey accent." # 先做大小写还原 corrected_text = truecase.get_true_case(raw_text) # 再执行NER识别 doc = nlp(corrected_text) # 输出识别结果 for ent in doc.ents: print(f"实体:{ent.text},类型:{ent.label_}")
针对你的示例语句,上述代码输出结果如下:
- 实体:Italian,类型:NORP
- 实体:New York,类型:GPE
- 实体:North Jersey,类型:GPE
方案2:针对性微调Spacy NER模型
如果你的业务场景固定,且有一定量的小写文本标注数据,可以直接微调Spacy的预训练NER模型,让模型直接学习小写语境下的实体特征,适配性比通用预处理方案更高,但需要投入标注成本和模型训练成本。
方案3:规则匹配兜底
对于固定领域的高频实体,可以搭配Spacy的PhraseMatcher模块做规则匹配,提前把业务相关的实体(比如所有GPE类型的地名)加入匹配词表,将规则匹配结果和模型识别结果合并去重即可,适合作为前两种方案的补充。
内容的提问来源于stack exchange,提问作者Umer
相关产品推荐
相关产品推荐

