CRF++是著名的条件随机场开源工具,也是目前综合性能最佳的CRF工具。本文简要介绍其使用方法。
一、工具包的下载:
a) http://crfpp.sourceforge.net
其中有两种,一种是Linux下(带源码)的,一种是win32的,当然是在什么平台下用就下载什么版本了。
b) http://download.csdn.net/source/1425683
两种版本打成一个包了。
二、安装:
a) Windows版的无须安装,直接解压即可使用;
b) Linux版本的安装方法是:
i. 解压到某目录下
ii. 打开控制台,将当前目录切换到解压目录
iii. 依次输入命令:
./configure
make
su
make install
注:需要root权限才能成功安装。
三、训练语料格式:
a) 训练语料至少应具有两列,列间由空格或制表位间隔,且所有行(空行除外)必须具有相同的列数。句子间使用空行间隔。
b) 一些合法的语料示例:
i. 有两列特征的
太 Sd N
短 Sa N
而 Bu N
已 Eu N
。 Sw N
以 Sp N
家 Bn N
乡 En N
的 Su N
ii. 只有一列特征的
太 N
短 N
而 N
已 N
。 N
以 N
家 N
乡 N
的 N
四、特征的选取及模板的编写:
a) 特征选取的行是相对的,列是绝对的,一般选取相对行前后m行,选取n-1列(假设语料总共有n列),特征表示方法为:%x[行,列],行列的初始位置都为0。例如:
i. 以前面语料为例
“ Sw N
北 Bns B-LOC
京 Mns I-LOC
市 Ens I-LOC
首 Bn N
假设当前行为“京”字这一行,那么特征可以这样选取:
特征模板
|
意义
|
代表特征
|
%x[-2,0]
|
-2行,0列
|
“
|
%x[-1,0]
|
-1行,0列
|
北
|
%x[0,0]
|
0行,0列
|
京
|
%x[1,0]
|
1行,0列
|
市
|
%x[2,0]
|
2行,0列
|
首
|
%x[-2,1]
|
-2行,1列
|
Sw
|
%x[-1,1]
|
-1行,1列
|
Bns
|
%x[0,1]
|
0行,1列
|
Mns
|
%x[1,1]
|
1行,1列
|
Ens
|
%x[2,1]
|
2行,1列
|
Sw
|
%x[-1,0]/%x[0,0]
|
-1行0列与0行0列的组合
|
北/京
|
%x[0,0]/%x[1,0]
|
0行0列与1行0列的组合
|
京/市
|
%x[-2,1]/%x[-1,1]
|
-2行1列与-1行1列的组合
|
Sw/ Bns
|
%x[-1,1]/%x[0,1]
|
-1行1列与0行1列的组合
|
Bns/Mns
|
%x[0,1]/%x[1,1]
|
0行1列与1行1列的组合
|
Mns/Ens
|
%x[1,1]/%x[2,1]
|
1行1列与2行1列的组合
|
Ens/Sw
|
%x[-2,1]/%x[-1,1]/%x[0,1]
|
-2行1列、-1行1列、0行1列的组合
|
Sw/Bns/Mns
|
%x[-1,1]/%x[0,1]/%x[1,1]
|
-1行1列、0行1列、1行1列的组合
|
Bns/Mns/Ens
|
%x[0,1]/%x[1,1]/%x[2,1]
|
0行1列、1行1列、2行1列的组合
|
Mns/Ens/Sw
|
b) 模板制作:模板分为两类:Unigram和Bigram。
其中Unigram/Bigram是指输出token的Unigram/Bigrams,而不是特征。
c) 以前面示例中的特征为特征,制作为Unigram模板如下:
#Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-2,1]
U06:%x[-1,1]
U07:%x[0,1]
U08:%x[1,1]
U09:%x[2,1]
U10:%x[-1,0]/%x[0,0]
U11:%x[0,0]/%x[1,0]
U12:%x[-2,1]/%x[-1,1]
U13:%x[-1,1]/%x[0,1]
U14:%x[0,1]/%x[1,1]
U15:%x[1,1]/%x[2,1]
U16:%x[-2,1]/%x[-1,1]/%x[0,1]
U17:%x[-1,1]/%x[0,1]/%x[1,1]
U18:%x[0,1]/%x[1,1]/%x[2,1]
说明:
i. 其中#开头的行不起作为,为注释;
ii. 行与行之间可以有空行;
iii. Unigram的特征前使用字母U,而Bigram的特征前使用字母B。后面的数字用于区分特征,当然这些数字不是一定要连续。
五、训练方法
a) 语料的训练可以使用命令(在终端或DOS命令行中):crf_learn <模板> <训练语料> <模板文件>
其中模板和训练语料是需要事先准备好的,模板文件在训练完成后生成
注意:
1) 如果提示语料格式错误,则注意检查语料的存储编码,有些编码CRF++是会读取错误的;
2) 文件路径要正确,如果文件没在当前目录,那么要使用绝对路径。
b) 训练中一些参数的说明:
ter:迭代次数
terr:标记错误率
serr:句字错误率
obj:当前对象的值。当这个值收敛到一个确定值的时候,训练完成
diff:与上一个对象值之间的相对差
六、解码方法
a) 可以使用crf_test -m <模板文件> <测试文件1> <测试文件2> ……。
b) 结果会直接输出到屏幕上面,如果想让结果保存到文件中,那么使用重定向,在上面命令后面加上一个开关“>”即可:crf_test -m <模板文件> <测试文件1> > <保存位置>。例如:crf_test -m model test.txt > result.txt
七、评测工具CoNLL 2000的用法
a) 下载:
i.http://download.csdn.net/source/1425687
ii. http://www.cnts.ua.ac.be/conll2000/chunking/output.html
b) 使用它是用来评分,所以要求crf_test一步使用的测试文件中本身带有答案,这样解码后生成的结果会在答案的后一列。比如原来为:
使 En N
、 Sw N
交 Bni B-ORG
通 Mni I-ORG
部 Eni I-ORG
部 Bn N
那么解码后变成:
使 En N N
、 Sw N N
交 Bni B-ORG B-ORG
通 Mni I-ORG I-ORG
部 Eni I-ORG I-ORG
部 Bn N N
CoNLL 2000将把最后一列与倒数第二列进行对比,统计出最后各类的正确率,召回率、F值等。
c) 使用评测工具前要将评测文件中的所有制表位转换成空格,否则评测工具会出错。
d) 评测命令为:perl conlleval.pl < <评测文件>
分享到:
相关推荐
CRF ++是一个简单的,可定制的,开源的条件随机场实现(CRF),用于分段/标记连续数据。应用于各种NLP任务,如命名实体识别,信息提取和文本块。
除了crf+ngram这种基于统计纠错的方法外还有一种基于深度学习的seq2seq方法,有简单的注释,有训练集和测试集数据,属于很基础的模型。
BERT+BiLSTM+CRF NER简单实战
使用tensorflow实现的中文实体识别LSTM+CRF(简单界面)
中文文字标记的CRF简单实现,不同于CRF++,这是Java版本的简单化实现,准确率达88%左右
如何用简单易懂的例子解释条件随机场(CRF)模型 一篇很好的说明(一个网上的问答)
一个简单的CRF层用于tensorflow 2 keras 支持keras遮罩 安装 $ pip install tf2crf 特征 易于使用的带有张量流的CRF层 支持混合精度训练 支持具有DSC丢失的ModelWithCRFLossDSCLoss,这会在数据不平衡的情况下提高...
CRF ++是一个简单的,可定制的,开源的条件随机场实现(CRF),用于分段/标记连续数据。应用于各种NLP任务,如命名实体识别,信息提取和文本块。
华中科技大学-自然语言处理实验-2021 简单搭建一个Bi-LSTM+CRF的中文分词框架,并且利用基于深度学习的方法进行中文命名实体识别。 - 不懂运行,下载完可以私聊问,可远程教学 该资源内项目源码是个人的毕设,代码都...
这个文档是对条件随机场(Condition Random Field)的简单介绍,介绍清晰简单、浅显,易于理解
该库包含一组 Python 工具,用于使用马尔可夫随机场 (MRFS) 和/或条件随机场 (CRF) 执行图像分割。 默认矩阵方向是numberExamples x numberDimensions,符合scikit learn和matlab。 第一个目标是在 MSRC 数据集上...
一个非常简单的 BiLSTM-CRF 模型用于中文命名实体识别 (TensorFlow)
特别是,删除了“得分句”算法中的所有循环,从而极大地提高了训练效果支持CUDA 用于非常简单的API START / STOP标签会自动添加到CRF中包含一个内部线性层,该线性层可从要素空间转换为标签空间专门用于NLP序列标记...
简单CRF 根据以下论文,用于 2D 和 3D 图像分割的条件随机场 (CRF) 和全连接(密集)CRF 的 Matlab 和 Python 包装: [1] Yuri Boykov 和 Vladimir Kolmogorov,“用于视觉能量最小化的最小割/最大流算法的实验比较...
最简单的方法是将项目导入 IDE(推荐使用 Jetbrains IntelliJ Idea),配置并使用 IDE 功能生成 WAR 文件。 build.xml ant 构建文件提供了各种要生成的目标。 因此,您可以利用它并使用 ant 构建文件和ant 工具来...
在自动语音识别(ASR)中已广泛使用了各种体系结构的深度神经网络(DNN),大致可将其分为两种方法-DNN-HMM混合方法和端到端(E2E)方法。 诸如和类的DNN-HMM混合系统在识别精度方面通常达到最先进的性能,通常通过...
解码CRF 这是“基于解码的学习的条件随机场:更简单,更快”论文的实现。引文如果您使用此代码进行研究,请引用该代码基于的论文:: @article{DBLP:journals/corr/Sun15, author = {Xu Sun and Shuming Ma}, title ...
Ansj中文分词是一个完全开源的、基于Google语义模型+条件随机场模型的中文分词的Java实现,具有使用简单、开箱即用等特点。 Ansj分词速度达到每秒钟大约100万字左右(Mac Air下测试),准确率能达到96%以上。 ...
使用帮助 开发文档:, 摘要 这是一个基于n-Gram+CRF+HMM的中文分词的java实现。 分词速度达到每秒钟大约200万字左右(mac air下测试),准确率能达到96%以上。 目前实现了中文分词、中文姓名识别、用户自定义词典、...