Advertisement

CRF做命名实体识别

阅读量:

一、准备工作

1.初始程序下载

crf_learn.exe CRF++的训练程序
crf_test.exe CRF++的预测程序
libcrfpp.dll 训练程序和预测程序需要使用的静态链接库

template
conlleval.pl

2.初始数据准备

人民日报1998年01月原始语料库 199801.txt

数据清洗
全角字符统一转为半角
单空格、三空格变双空格
中括号内容合并
合并人名

data_clean.py
input:199801.txt
output:cleaned_data.txt

分割语料(8:2随机),作为训练和测试原始语料

segment.py
input:cleaned_data.txt
output:train_data.txt 和 test_data.txt

构建训练、测试数据集

train_data.py
input:train_data.txt
output:labeled_train_data
input:test_data.txt
output:labeled_test_data

训练、测试数据集 放入和初始程序一起的文件夹

“BMEWO”标签体系生成训练数据
‘B’:Begin
‘M’:Middle
‘E’:End
‘W’:代表单个实体
‘O’:Other

识别实体类型和语料词性对应关系:
时间:TIME, /t
人物:PERSON, /nr
地点:LOCATION, /ns
团体组织机关:ORGANIZATION, /nt
在这里插入图片描述

二、模型训练与测试

  • 进入放初始程序、训练、测试数据集的文件夹
复制代码
    cd C:\Users\DELL\Desktop\CRF实体识别
  • 训练
复制代码
    crf_learn template labeled_train_data model >>train_output.txt
  • 此时会生成model文件
    有4个主要的参数可以调整:

-a CRF-L2 or CRF-L1
规范化算法选择。默认是CRF-L2.一般来说L2算法效果要比L1算法稍微好一点,虽然L1算法中非零特征的数值要比L2中大幅度的小。
-c float
这个参数设置CRF的hyper-parameter。c的数值越大,CRF拟合训练数据的程度越高。这个参数可以调整过度拟合和不拟合之间的平衡度。这个参数可以通过交叉验证等方法寻找较优的参数。
-f NUM
这个参数设置特征的cut-off threshold。CRF++使用训练数据中至少NUM次出现的特征。默认值为1.当使用CRF++到大规模数据时,只出现一次的特征可能会有几百万,这个选项就会在这样的情况下起到作用。
-p NUM
如果电脑有多个CPU,那么可以通过多线程提升训练速度。NUM是线程数量。
带两个参数的命令行例子:
% crf_learn –f 3 –c 1.5 template_filetrain_file model_file

语料的训练可以使用命令(在终端或DOS命令行中):crf_learn <模板> <训练语料> <模板文件>
其中模板和训练语料是需要事先准备好的,模板文件在训练完成后生成。
注意:
①如果提示语料格式错误,则注意检查语料的存储编码,有些编码CRF++是会读取错误的;
②文件路径要正确,如果文件没在当前目录,那么要使用绝对路径。

训练中一些参数的说明:
iter: 迭代次数
terr:标记错误率
serr:句字错误率
obj:当前对象的值。当这个值收敛到一个确定值的时候,训练完成
diff:与上一个对象值之间的相对差

  • 测试
复制代码
    crf_test –m model labeled_test_data >>test_output.txt

有两个参数-v和-n都是显示信息的,-v可以显示预测标签的概率值,-n可以显示不同可能序列的概率值

  • 制表位转换成空格

打开要测评的txt文件——【编辑】——【替换】——查找内容: (复制制表位);替换为 (空格)。

  • 测评
复制代码
    perl conlleval.pl <test_output.txt

全部评论 (0)

还没有任何评论哟~