CRF原理和CRF++ 安装与使用

概述

普通的分类问题是把 (x,y) 看做一个样本,序列分类问题是把(x1,…,xt, y1,…,yt) 整体看做一个样本。 比如以前用 svm,输入x输出y是标量,表示类别;现在用crf,输入x输出y是个序列,表示不同位置/时刻的类别。通过训练迭代出各个特征函数的类别。
CRF通过迭代各特征函数的权重使得对状态序列的所有位置的词的所有特征函数加权求和后最大。
下面概率分布函数,表示了给定X序列的情况下,Y序列的概率分布
在这里插CRF概率分布入图片描述
预测时可参照维特比算法,公式如下:
在这里插入图片描述
安装
tar -zxvf CRF+±0.58.tar.gz
基本环境:
gcc:
sudo yum -y install gcc
sudo yum -y install gcc-c++
pip:
curl “https://bootstrap.pypa.io/get-pip.py” -o “get-pip.py
sudo python get-pip.py
python-devel:
sudo yum install python-devel

----------基本环境具备可直接安装-------------
step1 cd CRF+±0.58/
step2 ./configure
step3 sudo make && sudo install

安装python接口(非必须)
sudo vim /etc/ld.so.conf
include /usr/local/lib
sudo /sbin/ldconfig -v
ln -s /usr/local/lib/libcrfpp.so.* /usr/lib64/
sudo python setup.py install

测试
采用CRF++自带的测试例子来确认安装是否成功,采用如下步骤
step1 cd ./CRF+±0.58/example
step2 cd chunking/
step3 训练:sudo …/…/crf_learn -c 4.0 template train.data model -t(-t的目的是记录生成的模型细节到txt文本)
step4 测试: sudo …/…/crf_test -m model test.data

我们需要什么?

一个特征函数集
CRF++ 可以根据模板自动生成特征函数集,其提供两种模板(unigram, bigram)
Unigram生成的特征函数:函数: f(s, o),:
表示只与当前位置对应的标签相关的特征(可能兼顾其在句子中的整体状态),生成所有可能标注对应的特征函数。提供的模板例子:

U01:%x[-1,0] 
U02:%x[0,0] 
U05:%x[-2,0]/%x[-1,0]/%x[0,0] 
……

如U00:%x[-1, 0] , 及序列“CRF”,标签集合B、M、E
当前位置“R”:则可生成 :

func1=if(output=B and feature= ‘U00:C’) return 1 else return 0 
func2=if(output=M and feature= ‘U00:C’) return 1 else return 0 
func3=if(output=E and feature= ‘U00:C’) return 1 else return 0  

下一个位置 “F”:

func1=if(output=B and feature= ‘U00:R’) return 1 else return 0 
func2=if(output=M and feature= ‘U00:R’) return 1 else return 0 
func3=if(output=E and feature= ‘U00:R’) return 1 else return 0  


Unigram 生成的特征函数个数 = |标签数| x |词的个数|

Bigram:函数:f(s’, s, o)其生成的特征函数考虑两个状态的所有可能标签。
如模板:

U00:%x[0,0]
U-1:%x[-1,0]/%x[0,0]
U+1:%x[0,0]/%x[1,0]
B

如U00:%x[-1, 0] , 及序列“CRF”,标签集合B、M、E,当前位置“R”:则可生成 :
func1 = if (prev = B and after = B and feature=B01:“R”) return 1 else return 0
func1 = if (prev = B and after = M and feature=B01:“R”) return 1 else return 0

func1 = if (prev = B and after = E and feature=B01:“R”) return 1 else return 0
……
bigram: |标签数| x |标签数| x |词的个数|
使用CRFPP训练
语料:
在这里插入图片描述
训练集:
cat 语料 | awk ‘{split($0,arr,"\t");print arr[1]"\t"arr[2]}’ > 处理后的语料
在这里插入图片描述

训练:crf_learn -t good/template.bi crfpp_uni_book_train model_560W_bi

一些CRF预测算法

维特比算法实际使用动态规划解CRF条件随机场的预测问题,即用动态规划(Dynamic Programming)求概率最大状态路径(最优路径)。这时一条路径对应一个状态序列。

我们只需要从时刻t=1开始,递推地计算在时刻t状态为i的各条部分路径的最大概率,直至得到时刻t=T状态为i的各条路径的最大概率。时刻t=T的最大概率即为最优路径的概率P*,最优路径的终结点i*T也同时得到。

之后,为了找出最优路径的各个节点,从终结点iT开始,由后向前逐步求得节点iT-1,……,i1,得到最优路径I=(i1, i2, i3,……,iT),这就是维特比算法。

在条件随机场预测问题中,CRF预测问题就成为了求非规范化概率最大的最优路径问题。

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值