CRF++

  CRF++笔记。

NLP引入

NLP流程   句法分析是NLP任务的核心,NER是句法分析的基础。NER任务用于识别文本中的人名(PER)、地名(LOC)等具有特定意义的实体。非实体用O来表示。

CRF

  Conditional Random Field,条件随机场,一种机器学习模型,广泛用于NLP文本标注领域。   应用场景:分词、词性标注、命名实体识别(NER,Named Entity Recognition)等。   命名实体识别的任务是识别出待处理文本中三大类(实体类、时间类和数字类)、七小类(人名、机构名、地名、时间、日期、货币和百分比)命名实体。

  NER是个分类任务,具体称为序列标注任务,即文本中不同的实体对应不同的标签,人名-PER,地名-LOC,等等,相似的序列标注任务还有词性标注、语义角色标注。

  传统解决方法: (1)基于规则 (2)基于统计学   隐马尔可夫(HMM)、条件随机场(CRF)模型和Viterbi算法 (3)神经网络   LSTM+CRF模型

  CRF的基础是马尔科夫随机场(概率无向图)。   CRF可以理解为在给定随机变量X的条件下,随机变量Y的马尔可夫随机场。其中,线性链CRF(一种特殊的CRF)可以用于序列标注问题。CRF模型在训练时,给定训练序列样本集(X,Y),通过极大似然估计、梯度下降等方法确定CRF模型的参数;预测时,给定输入序列X,根据模型,求出P(Y|X)最大的序列y。

CRF分词原理

  CRF把分词当做字的词位分类问题,通常定义字的词位信息如下:   词首,常用B表示   词中,常用M表示   词尾,常用E表示   单子词,常用S表示

  例:   原始例句:他爱上海陆家嘴   CRF标注后:他/S 爱/S 上/B 海/E 陆/B 家/M 嘴/E   分词结果:他/爱/上海/陆家嘴

  用CRF进行命名实体识别属于有监督学习。需要大批已标注的语料对模型参数进行训练。

CRF++

  目前常见的CRF工具包有pocket crf, flexcrf 和CRF++。   CRF++是著名的条件随机场的开源工具,也是目前综合性能最佳的CRF工具。   CRF++官网http://taku910.github.io/crfpp/

安装

  1. 解压
  2. cd 进入解压后的目录,执行‘./configure’命令
  3. make 编译
  4. make install (需先执行“su”获取root用户权限)
  5. make clean 删除安装时产生的临时文件(可不执行)

使用

  两个过程:训练、测试。

数据格式

  训练和测试文件必须包含多个tokens,每个token又包含多个列。token的定义可根据具体的任务,如词、词性等。每个token必须写在一行,且各列之间用空格或制表格间隔。一个token的序列可构成一个sentence,每个sentence之间用一个空行间隔。注意最后一列将是被CRF用来训练的最终标签。

特征模板

  CRF++训练的时候,要求我们自己提供特征模板。   模板文件中的每一行是一个模板。每个模板都是由%x[row,col]来指定输入数据中的一个token。row指定到当前token的行偏移,col指定列位置。

参考文献

用CRF做命名实体识别(三) NLP之CRF++安装及使用

Licensed under CC BY-NC-SA 4.0
最后更新于 0001-01-01 00:00 UTC
使用 Hugo 构建
主题 StackJimmy 设计