Structured Learning(下)

这最后一节我们将学习Sequence Labeling.并介绍两种常用的算法HMM和CRF,之后再综合复习前面学过的Structured Perceptron/SVM。

Sequence Labeling

Sequence Labeling就是输入是一个序列,想得到的输出也是一个序列,当然使用RNN也可以完成这个任务。

file

最典型的应用如给定一个句子,然后得到这个句子的词性组成。

file

file

此节我们按照下列的流程进行学习:

file

1.Hidden Markov Model(HMM)

HMM可以理解为是一个纯看概率的算法,它根据p(x,y),p(x)以及p(x|y),最终计算出p(y|x).核心思想还是集中在贝叶斯公式中。

按照词性识别这个例子来详细探讨:

file

第一步我们要清楚句子成文的规则,即各种词后面接其他词的概率。

file

第二步,我们要知道某词性摇出某个具体词的概率。

file

之后我们把上面两个相乘就得到了一句话是指定内容的概率。

file

file

上述第一步和第二步中的概率我们通过训练数据获得。

file

file

现在我们有了上面的东西,其实就是反过来求一下,已知是某个句子推测出其词性组成。现在看看是不是典型贝叶斯公式?

最终确定一个词性就是选择p(y|x)最大的。

file

我们为这种算法取一个名字,即为Viterbi.

file

下面就是HMM的要解决的3个核心问题,就是一个完全按照概率来运转的算法。

file

由于HMM完全依照概率来办事,所以它的弊端也集中在这里。看下面这个例子:

已知一部分要用到的概率。

file

然后现在我们知道第一个词的词性是N,第二个词的单词是a,来推测它的词性。

file

根据HMM的计算,肯定会判断第二个词的词性是V。因为算出来概率大,它只看这个概率。但是我们观察训练数据中并没有N接V(a)!

可能真实的只有N接D(a)!

也就是说它只看概率,有时候会出现问题!

file

我们可以设计一个更复杂的model,或者采用下面介绍的CRF来解决这个问题!

file

2.Conditional Random Field(CRF)

CRF其实也是基于贝叶斯公式的。只不过它会强化我们“看过的”(即在训练数据中存在的)数据对实验结果的影响,削弱我们“没看过的”。最终以达成上面的HMM不能办到的事。

相比于HMM直接使用概率,它改用一个与概率成正比的model.

file

其实还是差不多的,相比于直接使用概率,这个与概率成正比model是和出现次数挂钩的(包括某词性接某词性的次数和某词性中某单词的次数)。

由HMM推导出CRF的步骤如下,就是取log,然后进行变换。

file

这里要注意后半部分改变了一下计算方法,让它和出现次数挂钩!

file

file

全部转换为logP乘以次数的形式,最终会发现CRF使用的model中这个w其实就是和概率有关的参数,后面的这个Φ(x,y)是和次数相关的式子。

file

file

file

所以,综上Φ(x,y)就理应有两部分,其实就是某词性跟某词性的次数和某词性出某词的次数。

file

file

file

关于CRF该如何来train,看下面的幻灯片。

还是使用梯度算法,这里统一加法,用梯度上升算法。

file

file

file

file

最终得到的w的变化式发现依旧是让w离真实的近一些,离其他任意的远一些,这一点与Structured Perceptron很相似。

file

file

file

关于Inference这一个问题,依旧和HMM一样使用viterbi算法,选最大的就行。

file

由于CRF更容易得出自己已经看过的结果,所以在这个问题上它会给出N接D(a)。

file

file

其他的比较有趣的是对于合成数据,HMM和CRF的表现情况如下。

file

file

CRF总结如下:

file

3.Structured Perceptron/SVM

上一节我们说过Structured Perceptron的核心就是让我们的参数w离我们想要的近一点,离目前错误的最大值远一点。

file

相比于Structured Perceptron离目前错误的最大值远一点,CRF是离其他所有的错误值都远一点。所以CRF较Structured Perceptron会更加平滑。

file

Structured SVM则高级很多,它考虑到其中存在的margin。

file

file

以下是四种算法在POS Tagging中的表现,可以观察出不管怎样,Structured SVM的结果一般都是最好的。

file

4.Towards Deep Learning

我们学习了各种结构化学习的算法,既然这些问题也能用深度学习中的RNN来解决。那到底谁更胜一筹?

只能说各有优缺点,但是由于RNN是支持Deep的,仅此一条就注定RNN要更厉害。那我们还学习结构化学习干嘛?

file

其实学习结构化学习最终是让我们能够综合使用结构化学习算法和深度学习算法,在靠近输出层使用结构化学习算法能让我们更加方便得到想要的结果,在底层使用深度学习算法能够更好的处理训练数据!

就像拔萝卜一样!

file

file

最后我们来总结一些这几节中学到的所有结构化学习算法!

file