CRF++参数调优

1、输入输出文件

  • 每一行称为一个token,每个token包含许多列,一般第0列是词本身,最后一列是输出的标记
  • 中间的列是词的Pos,可以有多个,如词性、类别

2、特征模板(feature template)

举个栗子:

输入:
He        PRP  B-NP
reckons   VBZ  B-VP
the       DT   B-NP << CURRENT TOKEN
current   JJ   I-NP 
account   NN   I-NP
template	    expanded feature
%x[0,0]	            the
%x[0,1]	            DT
%x[-1,0]	    reckons
%x[-2,1]	    PRP
%x[0,0]/%x[0,1]	    the/DT
ABC%x[0,1]123	    ABCDT123
  • 模板由%x[row,col]指定,row表示行偏移,col表示第col列。如,当前元素是the,%x[0,1]表示DT,%x[-1,0]表示reckons

3、模板类型

  • Unigram
  • 如果一个%x[0,1]模板(利用当前词的第一列(词性)去预测最后一列(输出)),会产生如下函数:
func1 = if (output = B-NP and feature="U01:DT") return 1 else return 0
func2 = if (output = I-NP and feature="U01:DT") return 1 else return 0
func3 = if (output = O and feature="U01:DT") return 1  else return 0
....
funcXX = if (output = B-NP and feature="U01:NN") return 1  else return 0
funcXY = if (output = O and feature="U01:NN") return 1  else return 0
...
当前词的U01特征是DT,当前词的输出是B-NP

当前词的U01特征是DT,当前词的输出是I-NP

当前词的U01特征是DT,当前词的输出是O

 

当前词的U01特征是NN,当前词的输出是B-NP

当前词的U01特征是NN,当前词的输出是O

#一行英文对应一行中文解释
  • 一共由L*N个特征函数,L是输出的类别,N是expanded features的数目

###############################

  • Bigram
  • 会自动产生当前特征与前一个特征的合并,一共会有L*L*N个特征函数

Unigram与Bigram的区别:

  1. unigram:| output tag| x |all possible strings expanded with a maro|
  2. bigram:|output tag| x |output tag| x |all possible strings expanded with a macro|

4、CRF++参数

  • iter:迭代次数
  • serr:error rate with respect to sentences(or error sentences of all sentences)
  • obj:current object value.when this value converges to a fixed point,CRF++ stops the iteration
  • diff:relative difference from the previous object value
  • -a CRF-L2 or CRF-L1  :正则化项,L2与L1
  • -c float  : 超参数,C越大,CRF拟合训练数据越好,所以C是一个权衡过拟合和欠拟合的参数
  • -f NUM:参与训练特征的阈值,仅使用出现次数不小于NUM次的特征。默认是1。
  • -p NUM:线程数,CRF++0.58版本中的默认是12线程。

模型训练:

# 3 crf train
crf_train = "/E/home/mayajun/PycharmProjects/CRF++-0.58/crf_learn -f 3 -p 24 
                                -a CRF-L2 -c 1.5 template.txt dg_train.txt dg_model"
os.system(crf_train)

预测:

# 4 crf test
crf_test = "/E/home/mayajun/PycharmProjects/CRF++-0.58/crf_test -m dg_model dg_test.txt
                                                                 -o dg_result.txt"
os.system(crf_test)

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值