Sequence Labeling(序列标注问题),可以用RNN解决,也可以用Structured Learning(two steps,three problems)解决
词性标注(part-of-speech tagging,POS tagging),对应输入是序列输出也是序列的结构化学习问题,词性标注属于其中。词性标注指的是在一串的字词中标注每一个词所属的词性。
一、Hidden Markov Model(HMM) 隐马尔可夫模型
Step1: 基于语法,生成一个POS sequence(词性标注序列)
Step2: POS sequence 转变为 word sequence
Step1:根据脑中的文法,生成一个Markov Chain。
Step2: 基于字典,可计算出在第一步生成的合法词性序列的条件下生成对应句子的概率。
HMM是什么
HMM的定义:Estimating the probabilities
描述我们是如何说出一句话的,即描述根据POS tagging sequence说出word sequence的几率。也就是下图x和y同时出现的概率,因此这里涉及到两个概率:P(y)和P(x|y)
我们可以得到下面的详细公式,P(y)代表的是Transition probability(转换概率),P(x|y)代表的是Emission probability(输出概率)。
那么我们应该如何得到上面两个概率呢?我们可以通过Training data获取上面两个概率:
任务:给定一个句子x,找出词性y,其实就是要计算出P(x,y)。
步骤:
穷举所有的y,判断哪个P(x,y)最大。穷举所有的y,可能会很大,因此我们用到了维特比算法(Viterbi Algorithm)减少计算的复杂度。
HMM- Summary: HMM也是Structured Learning的一种方法,因此我们要回答下述问题:
在做Inference时,我们希望让(x,y^)> (x,y),但是HMM可以做到这件事情吗?我们发现,HMM并没有保证让P(x,y ^)>P(x,y)一定成立。
这时候,已知了yl-1 = N,xl = a,则我们得到yl = V的概率是0.9*0.5 = 0.45与,yl = D的概率是0.1*1 = 0.1,通过概率计算,我们知道yl = V的概率比较大。
然而,如果今天N->V->c在training data中出现9次,P->V->a在training data中出现9次,N->D->a在training data中出现1次。那么,按照结构图来说(N->?->a),?应该为D。
计算转移概率和输出概率是分开计算的,认为其是相互独立的。然而序列标注问题不仅和单个词相关,而且和观察序列的长度,单词的上下文,等等相关。
HMM学到的是状态和观察序列的联合分布P(Y,X),而预测问题中,我们需要的是条件概率P(Y|X)。
二、Conditional Random Field(CRF)-条件随机场
在CRF中,我们可以得到以下推导,N这一项,代表的是s,t在(x,y)pair中出现的次数:
接下来对上述变换做element-wise,我们可以用w代表紫色部分,由于红色部分每个都是和x,y有关的,所以我们可以说这个是(x,y)pair形成的function,所以我们的P(x,y) = exp(w·Φ(x,y)):
所以,你可以对w做exp,就可以得到概率,然而由于weight中的element没有任何限制,可正可负,所以我们说P(x,y)∝exp(w·Φ(x,y)):
那么Feature Vector长什么样呢? 根据上面推导,我们知道Φ(x,y)应该由下面两部分构成:
那么如果是有|S|个可能的tags,|L|个可能的words,那么Part1就是|S|×|L|维的,Part2就是|S|×|S|+2|S|(2|S|是因为还有个Start和End)维的。
CRF-Training Criterion
我们这里需要求得是给定一组training data,我们需要找到一个weight vector w*使得给定一个x,找到正确的y^的概率取log后求和后越大越好(最大化)。我们发现这里的O(w)和之前的cost function有点像,maximizing正确的几率再取log。
接下来,由于下图右上角的公式,所以我们可以得到下面的log公式,所以CRF在做training时,由于要O(w)最大化,所以,我们需要让前一项的,也就是我们观察到的(x,y)的概率变大,我们没观察到的(x,y)的概率变小。
1.如何maximizing O(w),这里就需要Gradient Ascent:
2.经过一串运算后,我们知道下面公式可以分为两项,我们来分析这两项的物理意义,第一项来说,当(s,t)pair在正确的(x^n,y head ^n)中出现的次数越多表示w越大,求解出来的Gradient Ascent也就越大;第二项来说,减掉任意一个(x,y)pair中(s,t)出现的次数,所以今天当(s,t)pair在任意一个(x,y) pair中出现的次数越多,表示,这时我们需要减小w。
所以针对所有的Gradient,这个Gradient就是正确的y head形成的feature vector减掉任意的一个y形成的vector在乘上那个y的几率:
我们要做的事情就是给定一个x,我们要找一个y,让P(y|x)最大。
比较不同α上HMM和CRF的表现,每个圈圈是不同α得到的结果,横轴和纵轴表示HMM 和CRF的犯错的百分比,因为这个task的data是由HMM产生的,所以当α大于1/2表示,模型比较接近HMM或CRF的model,
三、Structured Perceptron/SVM
Structured Perceptron和CRF的Gradient Ascent非常相似,Structured Perceptron只减掉某一个y,但它所减掉的是可以让w·Φ(x,y)最大的y;CRF其实就是用所有的y做Gradient Ascent。
CRF:所有y可能形成的feature做Gradient Ascent。
如果今天y’中只有一项几率为1,其他都是0,那么CRF和Structured Perceptron就是一样的。
***Structured SVM中很不一样的是要考虑:Error function:Δ(y head^n, y),这项是用来考虑y和y head^n的区别的。
***我们之前说过Structured SVM的cost function其实就是Error 的upper bound,所以如果去minimize cost function就是在计算Error的upper bound。
***Error function可以是任何适当的衡量两个y之间差异的function
***但是,无论是使用Gradient Descent还是Quadratic Programming,我们都要知道如何解决下面的Problem2.1,下面提供一个计算Δ的例子(计算两个sequence的错误率)。
Structured SVM vs HMM vs CRF vs Structured Perceptron
sequence label可以用以下几种方法来解,那么用什么方法好呢?
RNN,LSTM vs HMM、CRF、Structured Perceptron/SVM
***RNN/LSTM的缺点1:如果用的是单向RNN或LSTM是只看了sequence的一部分(看不到t+1的),而HMM等看过了全部的sequence。
***RNN/LSTM的缺点2:Cost和Error不一定有关系。
***HMM等的优点1:可以考虑output sequence的label的constraint,可以把这个constraint加到viterbi中,只穷举符合constraint的sequence。
***HMM等的优点2:Cost is upper bound of error。
我们可以把左边和右边的方法加起来: 底层用RNN/LSTM,在外面用HMM/CRF/Structured Perceptron/SVM:
将emission probability用RNN取代掉,然后在做HMM。 我们要的是P(xi|yi),我们可以修改这个公式,P(yi|xi)就是RNN;P(yi)就是看training data中label出现的几率;那么因为在HMM的Inference中我们是给定一个x,看哪一个y可以让这个几率最大,所以x是给定的,所以P(xi)的值无论多少都不会影响到我们最终的结果。