条件随机场工具包是日本奈良先端科学技术大学院的工藤拓所开发的CRF++。使用语言是C++
,目前人工智能比较热门,python使用率逐渐高了起来,但是在工业应用开发中还是java和C++使用的更多一些,因为java的垃圾回收机制,所以运行比python更快,故推荐大家如果是开发还是尽量使用java调用CRF的C++代码来训练模型。
下载CRF++0.58,直接解压。
解压之后得到CRF_learn.exe和CRF_test.exe.
第一步,准备训练的语料库my_cws_corpus.txt.tsv
第一列是待分词的句子,第二列是BEMS模型标注。
第二步是需要特征模板cws-template.txt
上面这个模板是用来做特征提取的。
CRF++模板索引方式
用户在该文件内使用指定语法组合输入模板即可产生各种特征。
该语法通过x[t,i]来索引语料表格中的单元,通过第一个下标t表示行号。t=0的行表示当前的输入变量,负数表示之前的变量。所以x[0,0]=和,x[0,-1]=品,x[1,0]=服。
特别的,x[0,0]表示当前字符一元语法特征,为了防止混淆特征CRF++还支持为每种特征编号。比如U01:%x[0,0]和U02:%x[1,0]的编号分别是U01和U02.转移特征用一个英文字符B表示。
第三步:有了语料和模板就可以训练条件随机场了。
CRF++命令为crf_learn,所支持的命令参数如下。
将CRF++.0.58解压之后的learn.exe和crf_test.exe以及libcrfpp.dll放到同一个文件夹下。并通过DOS命令进入此文件夹执行如下命令训练模板。
中文分词,训练命令如为:
crf_learn -f 3 -c 4.0 cws-template.txt my_cws_corpus.txt.tsv crfpp-cws-model -t
生成了二进制文件crfpp-cws-model,已经以文字编码格式的crfpp-cws-model.txt如下。
CRF++模型格式
上述文件的最后为特征函数的权重。
接下来利用CRF++模型格式来测试。
crf_test为测试命令,支持参数如下。
在CMD中执行测试命令
crf_test -m crfpp-cws-model -o cws-output.txt my_cws_corpus.txt.tsv
观察测试输出文件发现,测试结果第三列和我们认为标注的第二列结果相同,所以是正确的。
最后如果大家觉得不错,请点个赞吧。这是为持续更新的动力。