机器学习 | 条件随机场(二)

机器学习 | 条件随机场(二)

上周我们了解了条件随机场的概念,这周我们通过例子加深对CRF的理解。

例1

一、标记问题解决分词:

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

二、如何找到最好的标记结果:

知道如何用标记的方式解决分词,那么怎么为一个句子找到一个最好的标记序列呢,CRF为这样的问题提供了一个解决方案,对于输入序列$x=(x_1,x_2,…,x_n)$(对于分词,就是那个句子),求这个输入序列条件下某个 标记序列$y=(y_1,y_2,…,y_n)$的概率极值。

三、解码过程:

这里用一个例子来说明,
CRF的公式:
$$
P(y|x,λ)=\frac{\sum_j(λ_jF_j(y,x))}{Z(x)}
$$
先说问题:
使用4标记,B-开始,O-单独成词,M-词语中间的字,E-结束。

特征:

一元特征,$V_{−1}$ 当前字的前一个字,$V_0$当前字,$V_1$当前字的后一个字;

二元特征,各标记间的转移特征。

句子如下:

民 主 是 普 世 价 值

B B B B B B B

O O O O O O O

M M M M M M M

E E E E E E E

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

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

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

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

对于标记O,M,E,一样要计算$w_1O,w_1M,w_1E$从而得到分数$S_1(O),S_1(M),S_1(E)$。

(2)对于第二列,首先要计算是每个标记的 一元权重$w_2B,w_2O, w_2M, w_2E$。

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

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

例2

词性标注问题:

就是给一个句子中的每个单词注明词性。比如这句话:“Bob drank coffee at Starbucks”,注明每个单词的词性后是这样的:“Bob (名词) drank(动词) coffee(名词) at(介词) Starbucks(名词)”。

1

上式中有两个相加,外面的相加用来相加每一个特征函数$f_j$,里面的相加用来相加句子中每个位置的单词的的特征值。对这个分数进行指数化和标准化,我们就可以得到标注序列l的概率值$p(l|s)$,如下所示:

2

几个特征函数的例子前面我们已经举过特征函数的例子,下面我们再看几个具体的例子:

3

当$l_i$是“副词”并且第i个单词以“ly”结尾时,我们就让$f_1 = 1$,其他情况$f_1$为0。不难想到,$f_1$特征函数的权重$λ_1$应当是正的。而且$λ_1$越大,表示我们越倾向于采用那些把以“ly”结尾的单词标注为“副词”的标注序列

4

如果$i=1,l_i=动词$,并且句子s是以“?”结尾时,$f_2=1$,其他情况$f_2=0$。同样,$λ_2$应当是正的,并且$λ_2$越大,表示我们越倾向于采用那些把问句的第一个单词标注为“动词”的标注序列。

5

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

6

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

以上就是今天的内容,谢谢大家的观看!