一、语料清洗
1,这篇文章以人民日报1998年01月语料库为例子,获取原始语料库 199801.txt :
链接:199801.txt
提取码:k1xi
原始语料库内容截图如下:
2,原始语料需要做如下处理
(1)将语料全角字符(SBC)统一转为半角(DBC)
(2)三空格变双空格
标注和标注之间的间隔规定为双空格,但是会存在一些三空格
(3)单空格变为双空格
标注和标注之间的间隔规定为双空格,但是会存在一些单空格
(4)中括号内容合并
例如,'学生/n ,/w 奔波/v 于/p 两/m 个/q 课堂/n 。/w [上海市/ns 房屋/n 土地/n 管理局/n]nt 为/p'
(5)合并人名
例如,"金/nr 正日/nr" 合并为“金正日/nr”
3,步骤2中的数据清洗整理程序为data_clean.py(python3.5.2)按如方式获取
链接:data_clean.py
提取码:hqlk
input:199801.txt
output:cleaned_data.txt
cleaned_data.txt 部分截图如下:
二、构建训练和测试数据
1,将cleaned_data.txt按照8:2随机分割,作为训练和测试原始语料,分割程序为segment.py,按如下信息获取
链接:segment.py
提取码:yf18
input:cleaned_data.txt
output:train_data.txt 和 test_data.txt
2,构建训练数据集,构建程序train_data.py,按如下信息获取
链接:train_data.py
提取码:8kym
input:train_data.txt
output:labeled_train_data.txt
3,构建训练数据集,构建程序也是train_data.py
input:test_data.txt
output:labeled_test_data.txt
构建好的训练和测试语料,也可以直接按照如下连接下载:
链接:labeled_train_data.txt 提取码:bxsw
链接:labeled_test_data.txt 提取码:njhh
部分labeled_test_data.txt截图如下:
4,标注体系说明
采用“BMEWO”标签体系生成训练数据,具体解释如下
'B':Begin
'M':Middle
'E':End
'W':代表单个实体
'O':Other
识别实体类型和语料词性对应关系:
时间:TIME, /t
人物:PERSON, /nr
地点:LOCATION, /ns
团体组织机关:ORGANIZATION, /nt
三、CRF模型训练
1,回到linux平台,新建文件夹,命名为NER,将训练数据和测试数据上传到NER文件夹下,如下所示
训练指令:../crf_learn –[可选参数] template train.data model [可选参数]
这里模板文件template_file直接借用CRF++自带例子中的./CRF++-0.58/example/seg/template
例如 ../CRF++-0.58/crf_learn -f 2 -c 3.0 /root/CRF++/CRF++-0.58/example/seg/template labeled_train_data.txt model -t
"../CRF++-0.58/crf_learn" 为../CRF++-0.58/crf_learn路径
" -f 2 -c 3.0" 为模型计算参数
"/root/CRF++/CRF++-0.58/example/seg/template" 为template路径
"labeled_train_data.txt" 为训练样本数据
"-t"为输出参数设置
2,训练过程
3,训练结束后模型文件
4,测试过程
测试指令:../crf_test -[可选参数] -m model test.data
例如: ../CRF++-0.58/crf_test -m model labeled_test_data.txt >> testdata.txt
testdata.txt部分截图如下:
5,使用conlleval.pl程序测评
测评指令:perl conlleval.pl 需要安装perl环境并下载conlleval.pl,由于网上诸多下载链接均已失效,这里放弃使用如上评测指令,在下篇文章中讲解如何写测评的py文件。以上展示了使用 CRF++时 数据清洗——构建训练语料——模板文件——训练——测试——精度测评全过程。