我目前正在尝试在 python 中实现维特比算法,更具体地说是在线课程中提供的版本。
就目前而言,算法是这样呈现的:给定一个带有 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 表示法中几乎处于线性时间,而不是指数复杂度,如果我们迭代所有可能的单词/标签组合,我们会得到。
我是正确地理解了算法的核心还是遗漏了一些东西?
提前致谢