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

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

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

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

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

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

E — 代表组块结束

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

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

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

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

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

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

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

 

现在我们开始训练 CRF 模型

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

./configure
make
make install
ldconfig

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

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

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

# Unigram          # 这里定义了一元特征模板
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0,0]
U03:%x[1,0]
U04:%x[2,0]
U05:%x[-1,0]/%x[0,0]
U06:%x[0,0]/%x[1,0]

U10:%x[-2,1]
U11:%x[-1,1]
U12:%x[0,1]
U13:%x[1,1]
U14:%x[2,1]
U15:%x[-2,1]/%x[-1,1]
U16:%x[-1,1]/%x[0,1]
U17:%x[0,1]/%x[1,1]
U18:%x[1,1]/%x[2,1]

U20:%x[-2,1]/%x[-1,1]/%x[0,1]
U21:%x[-1,1]/%x[0,1]/%x[1,1]
U22:%x[0,1]/%x[1,1]/%x[2,1]

# Bigram          # 这里定义了二元特征模板
B

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

海 NR B-NP
浦东 NR I-NP
开发 NN B-NP
与 CC I-NP
法制 NN I-NP
建设 NN I-NP
同步 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显示帮助并退出

执行如下开始训练

# 第一个参数 template 为特征模板文件 第二个参数为训练文件 
# 第三个参数 chunkmodel 为保存的模型文件
../../crf_learn -t template train.data chunkmodel

# 执行后生成 chunkmodel.txt 和 模型文件 chunkmodel

测试模型如下,test 数据为

上海 NR
浦东 NR
啊 N

执行如下进行模型测试

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

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

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
为了训练Albert-BiLSTM-CRF模型,可以按照以下步骤进行: 1. 首先,准备训练数据。根据你的任务类型,将数据标注为不同的标签。确保数据格式符合模型的输入要求。 2. 接下来,根据已有的Albert-CRF模型代码为基础,参考网上的Albert-BiLSTM-CRF模型进行修改。主要修改的地方是数据传递类型,比如将Albert模型训练得到的embedding传入BiLSTM。 3. 使用训练好的Bert/Albert模型作为初始权重,加载预训练的模型参数。这可以帮助提高模型的性能。 4. 定义模型架构。在Albert-BiLSTM-CRF模型中,先通过Albert模型获取词嵌入(embedding),然后将词嵌入输入到BiLSTM层中进行序列建模,最后使用CRF层进行标签预测。 5. 编译模型并设置损失函数和优化器。对于序列标注任务,常用的损失函数是CRF损失函数,常用的优化器是Adam或者SGD。 6. 开始模型训练。将准备好的训练数据输入到模型中,使用反向传播算法更新模型的权重。可以设置合适的批次大小和训练轮数来进行训练。 7. 监控训练过程中的性能指标,比如损失值和准确率。可以使用验证集来评估模型在未见过的数据上的性能。 8. 进行模型调优。根据训练过程中的性能指标,可以尝试调整模型结构、超参数或者训练策略来提高模型的性能。 9. 最后,保存训练好的Albert-BiLSTM-CRF模型,以备后续使用。 请注意,在训练过程中可能需要进行一些调试和优化,例如调整学习率、正则化参数等。同时,合理的数据预处理和特征工程也可以对模型的性能产生影响。因此,根据实际情况进行调整和优化。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [【NLP_命名实体识别】Albert+BiLSTM+CRF模型训练、评估与使用](https://blog.csdn.net/YWP_2016/article/details/114648476)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [程序员5个刷题网站-keras-bert-ner:中文NER任务使用BiLSTM-CRF/BiGRU-CRF/IDCNN-CRF模型和预训练语](https://download.csdn.net/download/weixin_38623366/20060209)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值