【发布时间】:2016-01-20 17:06:14
【问题描述】:
我目前正在尝试在 python 中实现 viterbi 算法,更具体地说是在线课程中介绍的版本。
就目前而言,算法是这样呈现的: 给定一个带有 K 个标记的句子,我们必须生成 K 个标签。
我们假设标签 K-1 = 标签 K-2 = '*',那么对于 k 从 0 到 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 参数的最大值可以通过标签的一次迭代来计算(因为我们不能提出 2 个不同的标签,所以我们基本上必须找到 q * e 乘积最大的标签 T,然后返回它)。这节省了很多时间,因为我们在大 O 表示法中几乎处于线性时间,而不是指数复杂度,如果我们迭代所有可能的单词/标签组合就会得到。
我是否正确理解了算法的核心,还是我遗漏了什么?
提前致谢
【问题讨论】:
标签: machine-learning nlp tagging viterbi