ner模型除了用词典规则之外,主要就是特征提取器+crf模型了。
特征提取可以采用onehot、词频向量、w2v、lstm、cnn、bert等其中的一种或者组合。
本人现在在做能源领域的知识图谱,对ner优化有点几点心得,分享给大家,供参考。
心得1:字向量 or 词向量
词向量会存在oov情况,需要人工维护。
字向量可能会学不出来词语的关系,采用带双向功能的特征提取器可缓解此问题,比如bilstm、bert等。
在训练数据质量较差的时候(比如口语化较多,错别字较多,简称缩写较多等),采用字向量的效果好于词向量。
心得2:特征提取的选择
onehot、词频向量几乎不会用了,因为有更好的特征提取器。
句子比较长,bert有优势,选bert。
句子较短,选用lstm、bilstm、cnn。
根据我的经验,在句子不怎么长的情况下,用bilstm+crf模型,总可以优化出一个不错的结果。句子较长的情况下,用bert+crf模型,也同样可以优化出一个不错的结果。
心得3:一个小trick
在训练ner模型时,可以将一类专业名词改写成一个符号表示。
举例来说,我现在做能源电厂设备实体识别,用设备缺陷单记录作为训练数据,
比如:#1机组1A锅炉磨煤机故障,#2机组2C炉磨煤机故障。 实体是磨煤机。
#1机组、#2机组、#3机组...是一类机组名词,可用<Unit>符号表示。
1A锅炉,1A炉,1B炉,1C锅炉...是一类锅炉专业名词,可用<Speciality>符号表示
上面两个句子可改写成:<Unit><Speciality>磨煤机故障,标注:[OOBIIOO]。
在我这个实体识别项目里,改写前,召回率81%,改写后召回率达到了95%。