Python 条件随机场(CRF) 序列标注 介绍及工具简单用法解析

CRF简介

  Conditional Random Field:条件随机场,一种机器学习技术。

  CRF由Lafferty等人于2001年提出,结合了最大熵模型和隐马尔可夫模型的特点,是一种无向图模型,近年来在分词、词性标注和命名实体识别等序列标注任务中取得了很好的效果。条件随机场是一个典型的判别式模型,其联合概率可以写成若干势函数联乘的形式,其中最常用的是线性链条件随机场。

  感兴趣的同学可以去参看此贴,对CRF的原理进行了详细的介绍:
  如何用简单易懂的例子解释条件随机场(CRF)模型?它和HMM有什么区别?

CRF++ 用法介绍

安装

  在Linux或者Mac OS系统下,下载C++源代码安装包(CRF++-0.58.tar.gz)之后,按照如下步骤进行安装:

  • CD命令进入到代码主目录后,依次输入以下命令configuremake(sudo) make install就可以完成C++库的安装。
    注:最后一条需要管理员模式,输入”sudo”进入

  • 再进入到子目录python下,安装python包:

    python setup.py build
    (sudo) python setup.py install
  • 安装完毕之后,可以在python解释器下测试:import CRFPP, 如果不报错,则准备工作就绪。

用法介绍

  在CRF++ 的example目录下有个seg目录,这个seg目录对应的是一个日文分词的样例,我们后续的工作可以按照这个案例来进行。在安装包目录下,执行cd example/seg命令后,切换到seg目录后,发现有4个文件:

exec.sh(执行脚本)
template(特征模板)
test.data(测试集)
train.data(训练集)    

  有了这4个文件,我们可以做得事情就比较简单,只要按测试集,训练集的格式准备数据就可以了,特征模板和执行脚本可以套用,不过这里简单解读一下这几个CRF++文件。首先来看训练集:

毎 k   B
日 k   I
新 k   I
聞 k   I
社 k   I
特 k   B
別 k   I
顧 k   B
問 k   I 

  这里第一列是待分词的日文字,第二列暂且认为是词性标记,第三列是字标注中的2-tag(B, I)标记,这个很重要,对于我们需要准备的训练集,主要是把这一列的标记做好,不过需要注意的是:列与列之间是制表符“\t”隔开的,否则会导致feature_index.cpp(126) [max_size == size] inconsistent column size错误。

  再来看测试集的格式:

よ h   I
っ h   I
て h   I
私 k   B
た h   B
ち h   I
の h   B
世 k   B

  同样也有3列,第一列是日文字,第二列第三列与上面是相似的,不过在测试集里第三列主要是占位作用。事实上,CRF++对于训练集和测试集文件格式的要求是比较灵活的,首先需要多列,但不能不一致,既在一个文件里有的行是两列,有的行是三列;其次第一列代表的是需要标注的“字或词”,最后一列是输出位”标记tag”,如果有额外的特征,例如词性什么的,可以加到中间列里,所以训练集文件最少要有两列
  接下里我们再来详细的分析一下特征模板文件:
  

# Unigram
U00:%x[-2,0]
U01:%x[-1,0]
U02:%x[0
  • 5
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值