当前位置:   article > 正文

以例子给出CRF的理解_crf解码层用公式进行解释

crf解码层用公式进行解释

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

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

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

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

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

句子如下:

民 主 是 普 世 价 值

B B B B BBB
O OO O OOO
M M M M MMM
E E E E E E E

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

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

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

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

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

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

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

3.一直计算到最后一列,‘值’字的所有标记,得到S7(B)S7(O)S7(M)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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/小丑西瓜9/article/detail/349112
推荐阅读
相关标签
  

闽ICP备14008679号