哥伦比亚NLP第二周#5-8

模型的解码-维特比算法

把模型的参数估计完成之后,下一步要做的就是计算出 y = a r g m a x p ( y ∣ x ) y = argmax p(y|x) y=argmaxp(yx)。最顺理成章的想法是算出所有可能的y的条件概率,找到概率最大的那个。但暴力枚举的时间复杂度太大了,因此我们就采用了维特比算法-一个动态规划求最可能路径的算法。
哥伦比亚NLP第二周#5-8_第1张图片
首先描述一下我们的问题:对于一个输入序列 x 1 , x 2 , x 3 … … x n x_1,x_2,x_3……x_n x1,x2,x3xn,求给定一个输出序列 y 1 , y 2 , y 3 … … y n + 1 y_1,y_2,y_3……y_{n+1} y1,y2,y3yn+1的最可能的输入序列。 y n + 1 = S T O P y_{n+1} = STOP yn+1=STOP,而且我们定义函数:
在这里插入图片描述
首先我们想到的算法是BFS:
哥伦比亚NLP第二周#5-8_第2张图片
用BFS来遍历所有可能的序列,然后分别计算出各自的可能性。这个方法在数据量不大的时候还有实现的可能,如果面对的是百万级的数据量,那么计算的结果可能要等到天荒地老了。对于BFS,复杂度是指数级的。
哥伦比亚NLP第二周#5-8_第3张图片
所以我们想到了维特比算法:
哥伦比亚NLP第二周#5-8_第4张图片

  • 定义 n n n为句子长度
  • 定义 S k S_k Sk是从起始点到k点的可能序列
  • 定义函数:
    在这里插入图片描述
    -定义 π ( k , u , v ) \pi(k,u,v) π(k,u,v)表示长度为k,并以 b i g r a m ( u , v ) bigram(u,v) bigram(u,v)结尾的所有标注序列中的最大概率:
    在这里插入图片描述
    容易得到递推关系式:(如下图)
    哥伦比亚NLP第二周#5-8_第5张图片
    下面我们来看一个例子:
    哥伦比亚NLP第二周#5-8_第6张图片
    首先我们给下面的句子标号,然后按照公式计算出最大值。
    哥伦比亚NLP第二周#5-8_第7张图片
    哥伦比亚NLP第二周#5-8_第8张图片
    最后总结的求取最大值的算法如下:
    哥伦比亚NLP第二周#5-8_第9张图片
    而完整的维特比算法如下:
    哥伦比亚NLP第二周#5-8_第10张图片

你可能感兴趣的:(哥伦比亚大学,NLP)