赞
踩
不太能看懂bilstm-crf的code,其实关键是没理解crf, 以例子来讲解crf过程非常容易理解,以下两个是我在网上浏览看到的非常的例子,以免忘记,时常浏览.
example 1:
一,标记问题解决分词:就是将 词语开始和结束的字标记出来,就能对一个句子完成分词,假设使用两个标记B (开始),E(结束)对句子进行处理,如:“民主是普世价值”,民B主E是B普B世E价B值E, 这样标记明确,分词结果就明确了。
二,如何找到最好的标记结果:知道如何用标记的方式解决分词,那么怎么为一个句子找到一个最好的标记序列呢,CRF为这样的问题提供了一个解决方案,对于输入序列
三,解码过程:
这里用一个例子来说明,对于CRF的原理,我不做详述,我是半吊子,怕解释不好,只说一下我理解的解码过程。
CRF的公式:
先说问题:
使用4标记,B-开始,O-单独成词,M-词语中间的字,E-结束,
特征:一元特征,
二元特征,各标记间的转移特征
句子如下:
民 主 是 普 世 价 值
B
O
M
E
Viterbe解码就是在以上由标记组成的 数组中 搜索一条 最优的路径。
对于每一列的每一个标记,我们都要计算到达该标记的分数,这个分数由三部分组成,它本身的一元特征权重W,它前面一个字标记的 路径分数PreScore,前面一个字标记到当前标记转移特征权重TransW,
对于标记B,我们计算它的Score,记为
对于标记,O,M,E,一样要计算
2.对于第二列,首先要计算是每个标记的 一元权重
对于B,到达该标记的最大分数为:
3.一直计算到最后一列,‘值’字的所有标记,得到
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,对所有的特征函数加权求和,必要的话,可以把求和的值转化为一个概率值。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。