当前位置:   article > 正文

中文 NLP(8) -- 使用 CRF++ 和 BIO 表示法训练模型_bio 分词

bio 分词

一般在训练 NLP 模型,比如分词,词性,组块标注等等时,采用 BIO 表示法,说明如下:

B — 代表当前词是一个组块的开始

I — 代表当前词在一个组块中

O — 代表当前词不在任意组块中 。

如果要求更精确,可以增加两个符号:

E — 代表组块结束

S — 代表当前词是一个组块,该组块只有一个词

以句法组块标注训练为例,我们先将 宾州树 的标注使用 perl 小程序作如下转化,

  1. # 宾州树库格式组块标注
  2. ((IP-HLN (NP-SBJ (NP-PN (NR 上海)
  3. (NR 浦东))
  4. (NP (NN 开发)
  5. (CC 与)
  6. (NN 法制)
  7. (NN 建设)))
  8. (VP (VV 同步))) )

下载 ChunkLinkCTB 小程序:https://github.com/ouprince/ChunklinkCTB ,执行

perl chunklinkctb.pl -fhHct tree.mrg > tree.chunk

将宾州树库格式的组块标注自动转化成 BIO 表示法 的如下格式 tree.chunk 如下

  1. #arguments: IOB tag: Begin, word numbering: file
  2. #columns: file_id sent_id word_id iob_inner pos word
  3. 1 1 0 B-NP NR 上海
  4. 1 1 1 I-NP NR 浦东
  5. 1 1 2 B-NP NN 开发
  6. 1 1 3 I-NP CC 与
  7. 1 1 4 I-NP NN 法制
  8. 1 1 5 I-NP NN 建设
  9. 1 1 6 B-VP VV 同步

 

现在我们开始训练 CRF 模型

下载 CRF++ 工具:链接:https://pan.baidu.com/s/1VC6xtVMUNGXt26cge_hL9Q  提取码:ck3e 
解压后执行如下步骤安装 CRF++

  1. ./configure
  2. make
  3. make install
  4. ldconfig

进入 example 文件夹,里面有 CRF 使用的示范文件,basenp 或者 chunking 可用来参考作为组块标注,seg 是分词标注示范。

  1. 1.在 example 文件夹下建立一个目录 chunktest
  2. 2.复制 chunking 中的模板 template 到此目录下
  3. 3.template 模板中提供了一元特征模板和二元特征模板,需要和实际的训练文件对应

打开 template 文件,里面定义了特征的模板如下:

  1. # Unigram # 这里定义了一元特征模板
  2. U00:%x[-2,0]
  3. U01:%x[-1,0]
  4. U02:%x[0,0]
  5. U03:%x[1,0]
  6. U04:%x[2,0]
  7. U05:%x[-1,0]/%x[0,0]
  8. U06:%x[0,0]/%x[1,0]
  9. U10:%x[-2,1]
  10. U11:%x[-1,1]
  11. U12:%x[0,1]
  12. U13:%x[1,1]
  13. U14:%x[2,1]
  14. U15:%x[-2,1]/%x[-1,1]
  15. U16:%x[-1,1]/%x[0,1]
  16. U17:%x[0,1]/%x[1,1]
  17. U18:%x[1,1]/%x[2,1]
  18. U20:%x[-2,1]/%x[-1,1]/%x[0,1]
  19. U21:%x[-1,1]/%x[0,1]/%x[1,1]
  20. U22:%x[0,1]/%x[1,1]/%x[2,1]
  21. # Bigram # 这里定义了二元特征模板
  22. B

模板的大致内容如下: 训练文件一共有三列,第一列和第二列表示特征,第三列为标签。于是训练文件 train.data 如下

  1. NR B-NP
  2. 浦东 NR I-NP
  3. 开发 NN B-NP
  4. CC I-NP
  5. 法制 NN I-NP
  6. 建设 NN I-NP
  7. 同步 VV B-VP
crf_learn 可选参数表
参数说明
-f, --freq=INT使用出现次数不少于 INT 次的特征(默认为 1)
-m,--maxiter=INT设置INT 为 LBFGS 的最大迭代次数(默认 10k)
-c,--cost=FLOAT设置 FLOAT 为代价参数,越大拟合程度越高(默认 1.0)
-e,--eta=FLOAT设置终止标准 FLOAT(默认 0.0001)
-C,--convert将文本模式转为二进制模式
-t,--textmodel为调试建立文本模型文件
-a,--algorithm=(CRF|MIRA)选择训练算法,默认为 CRF-L2
-p,--thread=INT线程数(默认1),利用多个 CPU 减少训练时间
-H,--shrinking-size=INT设置 INT 为最适宜的迭代变量次数(默认 20)
-v,--version显示版本号并退出
-h,--help显示帮助并退出

执行如下开始训练

  1. # 第一个参数 template 为特征模板文件 第二个参数为训练文件
  2. # 第三个参数 chunkmodel 为保存的模型文件
  3. ../../crf_learn -t template train.data chunkmodel
  4. # 执行后生成 chunkmodel.txt 和 模型文件 chunkmodel

测试模型如下,test 数据为

  1. 上海 NR
  2. 浦东 NR
  3. 啊 N

执行如下进行模型测试

  1. # chunkmodel 为训练的模型, test 为测试数据
  2. ../../crf_test -m chunkmodel test

后面即是模型生成的标签。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/737815
推荐阅读
相关标签
  

闽ICP备14008679号