条件随机场(CRF)小结

参考原文链接:https://blog.csdn.net/appleml/article/details/78190559  

以例子给出CRF的理解

参考其他crf链接:1、https://blog.csdn.net/qrlhl/article/details/78676503   

Tensorflow1.4.0实现条件随机场(CRF

2、上述代码解释参考链接:https://blog.csdn.net/xierhacker/article/details/78923758

TensorFlow学习(十四):条件随机场CRF


2、https://blog.csdn.net/u014688145/article/details/58055750

 条件随机场学习笔记

3、https://www.jianshu.com/p/55755fc649b1

如何轻松愉快地理解条件随机场(CRF)?

不太能看懂bilstm-crf的code,其实关键是没理解crf, 以例子来讲解crf过程非常容易理解,以下两个是我在网上浏览看到的非常的例子,以免忘记,时常浏览.

example 1: 
一,标记问题解决分词:就是将 词语开始和结束的字标记出来,就能对一个句子完成分词,假设使用两个标记B (开始),E(结束)对句子进行处理,如:“民主是普世价值”,民B主E是B普B世E价B值E, 这样标记明确,分词结果就明确了。

二,如何找到最好的标记结果:知道如何用标记的方式解决分词,那么怎么为一个句子找到一个最好的标记序列呢,CRF为这样的问题提供了一个解决方案,对于输入序列x=(x1,x2,...,xn)x=(x1,x2,...,xn)(对于分词,就是那个句子),求这个输入序列条件下 某个 标记序列y=(y1,y2,...,yn)y=(y1,y2,...,yn)的概率 极值。

三,解码过程: 
这里用一个例子来说明,对于CRF的原理,我不做详述,我是半吊子,怕解释不好,只说一下我理解的解码过程。 
CRF的公式:P(y|x,λ)=Σj(λjFj(y,x))/Z(x)P(y|x,λ)=Σj(λjFj(y,x))/Z(x)

先说问题: 
使用4标记,B-开始,O-单独成词,M-词语中间的字,E-结束, 
特征:一元特征,V1V−1 当前字的前一个字,V0V0当前字,V1V1当前字的后一个字 
二元特征,各标记间的转移特征

句子如下:

民 主 是 普 世 价 值

 B B B BB
 OO O OO
M M M M MM
 E  E  E E E E

Viterbe解码就是在以上由标记组成的 数组中 搜索一条 最优的路径。

对于每一列的每一个标记,我们都要计算到达该标记的分数,这个分数由三部分组成,它本身的一元特征权重W,它前面一个字标记的 路径分数PreScore,前面一个字标记到当前标记转移特征权重TransW,

  1. 计算第一列的分数(score),对于,‘民’来说,我们要算 B,O,M,E的Score,因为是第一列,所以PreSocre和TransW都是0,就不用计算,只需要计算自己的一元特征的权重:

对于标记B,我们计算它的Score,记为S1S1(B)=W1W1B=w(null,民,B)+w(民,B)+w(民,B,主) //这些特征的意思是: (null,民,B),当前字为 ‘民’标记为B,前面一个字为空,(民,B):当前字为‘民’,标记为B,(民,B,主):当前字为’民’,标记为B,当前字的后一个字为‘主’。特征的权重都是在训练时得到的。

对于标记,O,M,E,一样要计算w1Ow1Ow1Mw1Mw1Ew1E,从而得到分数S1(O)S1(O)S1(M)S1(M)S1(E)S1(E)

2.对于第二列,首先要计算是每个标记的 一元权重w2Bw2Bw2Ow2Ow2Mw2Mw2Ew2E.

对于B,到达该标记的最大分数为:S2(B)S2(B)=Max((v(BB)+S1(B)S1(B)),(v(OB)+S1(O)S1(O)),(v(MB)+S1(M)S1(M)),(v(EB)+S1(E)S1(E)))+w2(B)w2(B),其中v(BB)等为B到B的转移特征的权重。这个也是由训练得到的。同样对于第二列的O,M,E也要计算S2(O)S2(O)S2(M)S2(M)S2(E)S2(E)

3.一直计算到最后一列,‘值’字的所有标记,得到S7(B)S7(B)S7(O)S7(O)S7(M)S7(M)S7(E)S7(E).比较这四个值中的最大值,即为最优路径的分数,然后以该值的标记点为始点 回溯得到最优路径(这里在计算过程中,要记录到达该标记的前一个标记,用于回溯)

http://www.52nlp.cn/%E5%88%9D%E5%AD%A6%E8%80%85%E6%8A%A5%E9%81%933-crf-%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E8%A7%A3%E7%A0%81%E8%BF%87%E7%A8%8B%E7%90%86%E8%A7%A3

example2: 
作者:milter 
词性标注问题:就是给一个句子中的每个单词注明词性。比如这句话:“Bob drank coffee at Starbucks”,注明每个单词的词性后是这样的:“Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词)”。 
 
上式中有两个相加,外面的相加用来相加每一个特征函数f_j,里面的相加用来相加句子中每个位置的单词的的特征值。对这个分数进行指数化和标准化,我们就可以得到标注序列l的概率值p(l|s),如下所示: 

几个特征函数的例子前面我们已经举过特征函数的例子,下面我们再看几个具体的例子,帮助增强大家的感性认识。 
 
当l_i是“副词”并且第i个单词以“ly”结尾时,我们就让f1 = 1,其他情况f1为0。不难想到,f1特征函数的权重λ1应当是正的。而且λ1越大,表示我们越倾向于采用那些把以“ly”结尾的单词标注为“副词”的标注序列 
 
如果i=1,l_i=动词,并且句子s是以“?”结尾时,f2=1,其他情况f2=0。同样,λ2应当是正的,并且λ2越大,表示我们越倾向于采用那些把问句的第一个单词标注为“动词”的标注序列。 
 


当l_i-1是介词,l_i是名词时,f3 = 1,其他情况f3=0。λ3也应当是正的,并且λ3越大,说明我们越认为介词后面应当跟一个名词。 

 
如果l_i和l_i-1都是介词,那么f4等于1,其他情况f4=0。这里,我们应当可以想到λ4是负的,并且λ4的绝对值越大,表示我们越不认可介词后面还是介词的标注序列。好了,一个条件随机场就这样建立起来了,让我们总结一下:为了建一个条件随机场,我们首先要定义一个特征函数集,每个特征函数都以整个句子s,当前位置i,位置i和i-1的标签为输入。然后为每一个特征函数赋予一个权重,然后针对每一个标注序列l,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值。

http://www.52nlp.cn/%E5%88%9D%E5%AD%A6%E8%80%85%E6%8A%A5%E9%81%933-crf-%E4%B8%AD%E6%96%87%E5%88%86%E8%AF%8D%E8%A7%A3%E7%A0%81%E8%BF%87%E7%A8%8B%E7%90%86%E8%A7%A3

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值