斯坦福NER模型训练

coreNLP是斯坦福大学开发的关于自然语言处理的工具,包含了命名实体识别、词性标注、分词器等等功能,功能强大使用方便。可以在官网上下载coreNLP系列文件:https://stanfordnlp.github.io/CoreNLP/index.html#download
并在本地进行安装,注意需要首先安装java。
可以在网上搜索相关安装教程,本文重点是介绍如何通过stanford NER CRF训练出自己的NER模型。

1.NER简介

命名实体识别(Named Entity Recognition)是自然语言处理中比较常见的功能,使用范围广泛,是信息提取、句法分析、机器翻译等应用领域的基础工具。
命名实体通常指的是文本中具有特殊意义或指代性很强的实体,通常包括人名、地名、机构名、时间日期、专有名词等。NER就是从文本中识别上述实体。斯坦福的NER模型是基于条件随机场(Conditional Random Field, CRF)算法实现的。具体算法实现在另一篇文章中详述。
为了更好地使用斯坦福的NER工具,最好看一下CRFClassifier和NERFeartureFactory两个class的源码。

2. 数据准备

在本文的例子中,原始数据为公司招聘信息文本(JD),目的是抽取其中的“专业”名词,例如“工商管理”、“机械自动化”等等专业名词。选择了文本中的2000行进行手动标注,将其中80%的数据作为训练数据train.tsv,剩下的20%数据作为测试数据test.tsv。
训练数据必须是用tab分隔的多列形式,至少有两列,一列为word,一列为自己手动标注的class labels。你可以使用properties file来给定数据信息,或者通过命令行的arguments。
在数据预处理的过程中,通过一个Python代码进行自动化处理,主要功能是将手动标注后的文本变为单字每行的格式(“专业”名词后标注为Major,其他词汇标注为O)
斯坦福NER模型训练_第1张图片
注意:tsv文件是用tab键进行分隔的,不能用空格代替。另,文件中的空行可以将文件分为多个“document”,以便CRF程序进行处理,每个“document”不应该太大,不然会占用太多内存。

3.模型训练

斯坦福NER允许将所有的指令通过command line进行执行,或者选择更简便的方式:通过一个properties file。在其中指定训练数据trainFile,被训练模型的名字major-ner-model.ser.gz,训练数据结构map=word=0,answer=1,还可以指定其他参数,具体请参照NERFeartureFactory。(数据结构只有两列的话,按如下模板major.prop执行即可,注意所有的文件都需要放在stanford-ner文件夹下)
斯坦福NER模型训练_第2张图片
接下来就是训练模型了。
在command line中输入:
java –cp stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier –prop major.prop

在这里插入图片描述
最后显示:
在这里插入图片描述
表示生成major-ner-model.ser.gz模型成功。

然后可以用test.tsv进行模型测试:
java –cp Stanford-ner.jar edu.stanford.nlp.ie.crf.CRFClassifier –loadClassifier major-ner-model.ser.gz –testFile test.tsv
输出三列数据,前两列是输入的test数据,第三列由训练得到的major-ner-model给出
斯坦福NER模型训练_第3张图片
最后得到的结果:模型标注了1258个字,精确率为0.9643,召回率为0.8852
在这里插入图片描述
注:你也可以使用多列features来标注word,例如你加了第三列,只需要在properties file中将structure of training file改为:map=word=0,answer=1,mySpecialFeature=2。目前大多数自己随意命名的features(例如mySpecialFeature)需要通过修改源码来使其有效。

4.参考资料

stanford NER CRF FAQ: https://nlp.stanford.edu/software/crf-faq.shtml

你可能感兴趣的:(自然语言处理)