1

我目前正在尝试在 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 表示法中几乎处于线性时间,而不是指数复杂度,如果我们迭代所有可能的单词/标签组合,我们会得到。

我是正确地理解了算法的核心还是遗漏了一些东西?

提前致谢

4

1 回答 1

0

因为我们不能提出 2 个不同的标签,所以我们基本上必须找到 q * e 乘积最大的标签 T,然后返回

是的,听起来差不多。q是三元组(转移)概率,e被命名为发射概率。正如您所说,每个阶段的不同路径之间没有变化,因此最大值仅取决于其他两个。

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

如果我们假设位置的最后两个标签是和的最大概率,根据我们刚才所说的关于开始的星号,基本情况将是 kuv

.

不过,在一般情况下,您有两个错误。发射概率是有条件的。同样在三元组中,重复两次并且给出的公式不正确:

于 2015-10-22T08:10:34.093 回答