首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >试图更好地理解VITERBI算法

试图更好地理解VITERBI算法
EN

Stack Overflow用户
提问于 2015-10-21 23:49:19
回答 1查看 240关注 0票数 1

我目前正在尝试用python实现维特比算法,更具体地说就是在线课程中介绍的版本。

现在,算法是这样给出的:给定一个带有K个标记的句子,我们必须生成K个标记。

我们假设标签K-1 =标签K-2 = '*',那么对于从0到K的K,我们设置令牌的标签如下: tag(WORD_k) = argmax(p(k-1,tag_k-2,tag_k-1) * e( word_k,tag_k) * q(tag_k,tag_k-1,tag_k-1))

根据我的理解,这很简单,因为p参数已经在每一步上计算(我们从1开始,我们已经知道p0),e和q参数的max可以通过一次迭代标签来计算(因为我们不能想出两个不同的标签,所以我们基本上必须找到q*e乘积最大的标签T,然后返回它)。这节省了很多时间,因为我们在大O符号方面几乎是线性时间,而不是指数复杂度,如果我们迭代所有可能的单词/标签组合,就会得到指数复杂度。

我是正确地理解了算法的核心,还是遗漏了什么?

提前感谢

EN

回答 1

Stack Overflow用户

发布于 2015-10-22 16:10:34

由于我们不能想出两个不同的标签,我们必须找到Q*e乘积最大的标签T,并返回该标签T

是啊,听起来不错。q是三元组(转换)概率,e是发射概率。如你所说

在每个阶段的不同路径之间是不变的,因此最大值仅依赖于其他两个路径。

每个标签序列应以位置-2-1处的两个星号开头。所以第一个假设是正确的:

如果我们假设

位置k的最后两个标签是uv的最大概率,根据我们刚才所说的开始星号,基本情况是

不过,在一般情况下,您有两个错误。发射概率是有条件的。同样在三元组中,

重复两次,给出的公式不正确:

![](https://latex.codecogs.com/gif.latex?tag(WORD--_1%29&space;%5Ctimes&space;q(tag_k|&space;tag_k-2,&space;tag_k-1%29&space;%5Ctimes&space;e(&space;word_k&space;|tag_k%29%29)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33263758

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档