您的位置:首页 > 其它

结构学习:序列标注

2018-01-22 11:52 295 查看

1. 什么是序列标注

  序列标注的的输入是一个序列,他的输出也是一个序列。一个典型的例子就是词性标注(pos tagging)。在日常中用的词有的是名词,有的是动词,但是动词中还有专有名词,非专有名词等。所以对于词性的标注还是有必要的。比如说就像下图那样



词性标注(pos tagging)对后续的句法分析和词义消歧有用,甚至可以用来抽取一段文字中的关键词。

  但是这个过程不是仅仅通过查表的方法就可以得到的,还需要理解整个句子的含义,如下图所示



在上面这个例子中有两个 saw ,其中第一个 saw 是动词,而第二个 saw 是名次,所以需要理解整个句子的含义才能做出正确的词性标注。

2. 隐马尔科夫模型(Hidden Markov Model,HMM)

  在这里HMM有着自己的假设,具体如下



首先在第一步,基于语法我们产生一个词性序列;第二步我们基于一个字典,产生一个基于词性语句的实际语句。

  具体来讲,HMM的第一步如下图所示



在这里生成的每一个句子都是从 start 开始,然后沿着他的路径以某一个概率到达下一个点,知道到达最后的 end。这样我们就产生了第一个,词性语句,比如说得到的了如下的词性语句,同时我们可以计算产生这种词性语句的概率。

  根据产生的词性语句,可以有字典产生对应单词构成语句,如下图所示



如上图为产生的句子以及产生这个句子的概率。

  所以对于HMM来讲,词性标注的过程可以表示为如下的形式



词性与单词同时出现的概率如上图所示,可以利用条件概率进行计算,其中产生 p(y) 的概率的计算过程可以看作是一系列的条件概率相乘;而 p(x|y) 的概率的计算过程如图所示,计算完这两个部分就可以计算上述的 p(x,y)。

  我们将两个过程概述为如下的形式



其中的 p(y) 可以表示为如上的计算形式,首先是从 start 转移到 y1 的概率,然后 y 之间的概率的转移形式,最后是转移到 end 的概率。而 p(x|y) 的概率也可以通过上面的式子进行计算。

  虽然我们知道计算的过程可以使用上面的那种形式,但是其中的每一项又是如何计算的呢?实际上是在训练数据中得到的,具体如下图所示



通过语言学家对训练数据中的每一单词的词性进行标注,然后在训练数据中统计所需要的概率,比如说 P(V|PN),P(saw|V)。

  所以现在回过头来看整个过程的计算如下



其中蓝色线的部分可以使用如图的计算方式,就是在某一个词性下,另一个词性出现的概率就等于在训练数据中这个词性出现的次数分之这个词性与下一个词性同时出现的次数。P(xl=t|yt=s) 也是类似的计算方法,剩下的都是相似的方法。

  那如何进行在给定了输入的时候完成词性标注呢?如下图所示



如上图所示,这个时候我们的任务就是给定一个输入的句子 x ,希望得到句子中每一个单词的词性 y,这里通过上述的方法计算,其中标签应该是在给定输入时使这个后验概率最大的 y 的值,我们可以将条件概率写成联合概率与 P(x) 的除法的形式。因为在这里我们是给定的 x ,所以他最后等价于寻找使得联合概率最大的 y 。

  目前仍有一个存在的问题,就是如何找到使得概率最大的 y 的值,如下图所示有两种方法



一种是穷举法,在这种方法中假设我们存在 |S| 种词性,句子的长度是 |L| ,那么这里一共有 |S|L 种可能性。但是如果我们采用 Viterbi algorithm 的方法话,这里的计算复杂度是 O(L|S|2)。所以常常采用Viterbi algorithm的方法进行搜寻最大值的过程。

  现在对HMM的方法所涉及的在结构学习中的三个问题进行总结如下



首先是构建函数 F(x,y),其次是是推断,找出使得概率最大的 y ,然后在训练的过程中得到第一步计算过程中需要的两个值 P(y) 和 P(x|y) 。

2.1 HMM 的优缺点

  如果HMM想要获得正确的结果,需要保证 P(x,y^)>P(x,y)。但是HMM一定会保证这种结果出现嘛?不一定的,比如说下面的例子



其中前一词的词性是N,那么后一个词的词性有90%的可能是V,有10%可能的是D,对于词性 V ,对应单词 a 的概率是0.5,对应单词 c 的概率是0.5;对于词性 D ,对应单词 a 的概率是1。

  假如说了给了如下的例子,我们现在需要计算在这种情况下空余的部分应该是什么



根据概率我们可以知道如果中间问号的词性是 V 的话,我们计算出来的概率如应该是0.9*0.5=0.45,如果中间的词性是 D 的话,这个时候计算出来的概况是 0.1*1=0.1。按照概率计算这个时候我们应该认为问号的地方是 V ,但实际上在训练数据中存在着问号处应该是 D 例子,所以我们将他认为是 V 是不合理的。

  这意味着在 HMM 进行估计的过程中,实际上存在着“想象”或者称为“脑补”的部分。就是说某一种结果虽然在训练集中没有出现过,但是HMM却可以推断出这种结果。所以HMM往往对于数据量比较小的情况效果比较好,但是对于数据量过大的情况,他的效果往往不会很好。

  造成这种现象的原因主要在于在“Transition probability

”和“Emission probability”的两个步骤是分开的。

  解决上述这种问题可以使用条件随机场Conditional Random Field (CRF)这种方法。

3. 条件随机场Conditional Random Field (CRF)

  在条件随机场中,对于 P(x,y) 的计算方式是采用如下的方法



其中的 P(x,y) 是正比于 exp(w,ϕ(x,y)) 的,其中 ϕ(x,y)) 是以特征向量,在后面会介绍这个特征向量是长成什么样子的;w 是一个权重向量,是通过训练数据得到的; exp(w,ϕ(x,y)) 总是正的,并且有可能是大于1的。对于原来的条件概率公式,他首相等价与上图的形式,之后我们将联合概率写成如图所示的形式,同样分母的也可以写成类似于这种的形式,然后将两者相比就可以约掉常数 R ,因为分母的形式过于复杂,所以这里我们将分母的写成 Z(x) 的形式。

  在HMM中,计算 P(x,y) 的过程如下图所示



我们将 P(x,y) 的两侧同时取对数,这样就可以将如上所示的乘法转化为加法。

  将其中的最后一项进行化简,过程如下图所示



其中的 s 代表词性,t 代表单词,求和的过程就是穷举所有可能的词性和单词,前面紫色的那一项代表着给定词性 s 得到这个单词 t 的概率的对数;后面那一项(红色的那一项)代表着在一组数据中词性 s 和单词 t 共同出现的次数。

  下面给以一个形象的例子作为说明



在这个句子中,the 作为 冠词 D 出现的次数是两次,dog 作为名词出现的次数是1次,ate作为动词出现的次数是1次,homework作为名词出现的次数是1次,其他的单词以其他的词性出现的次数是0次。所以在计算上图中的式子的时候,如果我们将求和符号展开,那么一共会有上述的那5项相加,其中我们可以看到有两项是相同的,所以可以用那个乘以2,剩下的乘以1,将这些都累加在一起,就是之前所说的那个式子。

  同样我们也可以将剩下的式子转换成那种相乘的形式



黄色,绿色,蓝色的部分都可以转换为这种概率的对数与出现次数相乘再求和的形式。

  然而这样做的原因在于什么呢?如下图所示



我们可以将上面的累加求和全都放在一起,写成向量的点积,即 w⋅ϕ(x,y) ,但是这个时候我们求解的是 logP(x,y),如果要求 P(x,y) 的话就需要对其取指数,这样也就得到 exp(w⋅ϕ(x,y))。

  在这里我们需要对上面得到的结果进行进一步讨论,如下图所示



虽然对于右侧紫色的部分可以解释为 HMM 中的概率,但是其中权重 w 可以是正数或者是负数。当它取负数的时候,他的范围在 [0,1] 之间,还可以解释为概率,但是当权重的值为正数的时候,他的值是大于1的,这样就不能解释为概率了,所以将原来的等号改变了为上面的正比符号。

  现在我们具体讨论一下这里的 ϕ(x,y)) 具体是什么样子的,如下图所示



ϕ(x,y)) 主要由两个部分组成,第一个部分是词性与单词之间的关系,第二个部分是词性与词性之间的关系。首先看第一部分,它的表现如图中的表格所示,我们可以看到其中很多的值都是0,所以他是稀疏的。加入我们现在有 |S| 种可能的词性,有 |L| 种可能的单词,那么第一部分一共有 |S| × |L| 维。

  第二部分如下图所示



在这个部分中是词性与词性之间的关系,假如说一种有 |S| 种可能的词性,在第二部分一共有 |S| × |S| +2 |S|维。需要注意的是,这里计算的 ϕ(x,y)) 均是对一个数据 (x,y^)所讲的。

  那训练的过程是怎样的呢?如下图所示



在这里给出一组的训练数据,里面有很多数据,如上图所示。我们通过最大化 O(w) 来更新我们的权重,其中 O(w) 表示为如上图所示的情况。我们将其中的条件概率展开即可以得到如图所示的两项相减的结果。其中第一项代表最大化我们已经观测到的数据,第二项代表最小化在观测过程中我们没有观测到的数据。那这样的损失函数是如何用来训练的呢?实际上就是使用梯度下降法。

  对于常见的最小化问题常用的是梯度下降,但是这里是最大化问题,所以使用梯度上升的方法,具体的区别如图所示



  在经过了一系列的数学证明之后我们可以得到参数更新的过程如图所示



详细的推导过程我们在这里省略不讲,但是他却有着明显的物理含义。首先看用绿色画出的第一项,他表示在某一组输入的数据中,如果字母 t 被标记为 词性 s 的次数比较多的话,就应该增加这个参数,但是如果改组数据中字母 t 被标记为 词性 s 的在其他的标记中也很多的话,就应该减下去。

  所以梯度更新的过程就如下图所示



  推断的过程如下图所示



4. HMM 与 CRF 的区别

  首先的区别是对于已经出现的例子的态度的问题,具体如下图所示



在这里CRD在增加已经观察到数据的概率的同时,减小了没有出现的数据的概率,这一点是HMM没有做到的。因为这种处理方式,他保证了左侧的式子比右侧所有其他的y的概率都要大。

  下面是当初提出CRF这篇论中所给出的实验,如下图所示



所产生的数据是通过混合阶数的HMM模型产生的,然后通过HMM与CRF两种方法进行实验,实验结果如下图所示



其中左半部分图像代表 α>12,而右半部分图像代表 α<12,横纵坐标分别代表犯错的次数,所以在对角线之上的数据说明 HMM 模型要好于 CRF 模型,而在对角线右下角的数据说明 HMM没有CRF好。当其中的系数 α>12的时候,说明这个时候产生数据的模型更倾向于普通的HMM,所以这个时候很显然HMM要好很多;但是当系数大于二分之一的时候,生成数据的模型偏向于二阶,这个时候这两个一阶的HMM和CRF都不能很好的对原始数据进行建模,但是这个时候CRF的效果要好于HMM,这个的原因主要在意CRF可以调节权重,而不是仅仅根据训练数据进行工作,所以效果更好。

5. CRF 的总结

  CRF同样是一种结构型学习,同样可以归结为解决如下的三个问题



其中只有最后一步与之前讲的不一样,但实际上是一样的,因为在原来的描述中,它门是取log之后再相加,现在是直接用概率连乘,本质上实际是一样的。

6. 结构感知器

  用结构感知器解决词性标注问题,同样可以概括为解决下面的三个问题



这里我们可以将刚刚所讲的CRF与结构感知器做对比,如下图所示



我们可以明显看到,在结构感知器中也对词性标注不对的项进行了抑制,但是与CRF相比,它是一种硬抑制,而CRF虽然也在抑制,但是可以认为是一种软抑制。这两种方法都可以,不一定说硬的就没有软的好,实际上它们的差距并不是那么明显。

7. 结构型SVM

  用结构SVM解决词性标注问题,同样可以概括为解决下面的三个问题



在这里我们可以使用两种方法对模型进行训练,一种是梯度下降的方法,另一种将他转变为二次规划问题进行求解。

  然而在使用结构型SVM的过程中还需要考虑误差这一项,如下图所示



在这一项中,我们认为 Δ 是预测出的 y 与真实的 y 之间的差距,那么所计算的损失函数实际上是 Δ 的上限,理论上 Δ 可以是任何形式的,但是我们虽然能保证问题2一定有解,但是不能保证这个问题一定有解,所以最好定义的简单一些,如上图定义的 Δ 就可以用与问题2相同的解法进行求解。

8. 综合实验对比

  有两个综合实验,如下图所示



第一个实验如黑色的图所示,我们可以看到HMM的效果是最差的,但是实际上当数据特别少的时候,HMM的效果还是比较好的,只是这里没有画出来,下面是CRF和结构感知器。但是CRF与结构感知器的好坏并没有一个准确的答案,两者的效果是相近的,SVM略好。

9. 基于网络的学习方法与基于结构学习的方法的对比

  如下图所示,我们将两类学习方法的优缺点进行对比



  首先使用 RNN 进行词性标注的话,他不需要观察完所有的数据就会得出一个结论。但是如果在之后的例子中给出一个与原来恰好相反的例子的话,这样就会显得模型不是很合理。但是如果使用结构学习的方法,这样就可以通过 Viterbi 算法使得模型会考虑整个句子再给出结论。

  其次,结构型算法可以加入很强的先验知识,比如说声母后面肯定是添加韵母的,所以我们在穷举的过程中就可以将不符合的数据直接删除。

  然后,对于网络类学习方法,比如说RNN,他的损失函数与模型的得到的误差并不是直接相关的,但是如果使用结构型SVM,所得到的结果就是误差的上限,在训练的时候会比较放心。

  RNN网络最大的有点就是它本身可以做的比较深,所以虽然结构型学习在上面的三项中都占据优势,但是RNN凭借这深度这一优势,使得它在哪一种情况下都可以获得最好的效果。

10. 网络模型与结构学习模型融合

  通过将网络模型与结构学习模型相对比,我们可以看到在实际的应用效果上,网络模型要胜出很多,那么为什么还会在这里介绍结构学习模型呢?因为在真正应用的时候,仅仅使用网络结构是没有办法的到 state of the art 这种效果的,如下图所示



在实际应用中我们的模型的结构往往采用如上图所示的结构,其中的 RNN 可以看作是埋在土里的部分,它可以做的很深很深,而露在上面给的一小部分可以是HMM,CRF,结构型 SVM 等传统方法。这样可以将两种模型的优势相结合。

  举例说明,如下图所示



在 HMM 模型中 P(x,y) 的计算方法如上图所示,这个时候我们将 RNN 的输出作为当作是 P(xl|yl) 那一项。但是有一点是需要注意的,因为 RNN 给出的是 P(y|x) ,而 HMM 需要的是 P(x|y) ,这个时候需要如图那样进行转换,其中 P(y|x) 由 RNN 给出, P(y) 是通过计数得到的,而由于在实际中我们是给定一个输入 x ,所以这个输入对于计算没有影响。

  我们也可以将深度网络与CRF或者结构型相结合,具体如下图所示



在这里我们使用经过深层 RNN 得到的输出作为 x 与 y 进行运算得到结果。

11. 总结

  现在将本节课所涉及的知识点归纳如下



这些方法也都可以和DNN结合,发挥更好的效果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  HMM CRF 序列标注
相关文章推荐