machine-learning - 尝试更好地理解 VITERBI 算法

标签 machine-learning nlp tagging viterbi

我目前正在尝试用 python 实现维特比算法,更具体地说是在线类(class)中提供的版本。

就目前情况而言,该算法是这样表示的: 给定一个带有 K 个标记的句子,我们必须生成 K 个标记。

我们假设标签 K-1 = 标签 K-2 = '*',那么对于 k 从 0 到 K, 我们为 token 设置标签如下: 标签(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 可以通过标签的一次迭代来计算(因为我们无法提出 2 个不同的标签,所以我们基本上必须找到 q * e 乘积最大的标签 T,然后返回)。这节省了大量时间,因为我们在大 O 表示法中几乎处于线性时间,而不是指数复杂度,如果我们迭代所有可能的单词/标签组合,我们就会得到指数复杂度。

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

提前致谢

最佳答案

since we can't come up with 2 different tags, we basically have to find the tag T for which the q * e product is maximal, and return that

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

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

如果我们假设根据我们刚刚所说的开头星号,位置 k 处的最后两个标签是 uv 的最大概率,基本情况是

.

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

关于machine-learning - 尝试更好地理解 VITERBI 算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33263758/

相关文章:

python - 将 Pandas 数据框转换为字典,其中一列作为键,另一列作为多个值

pdf - 计算pdf中(Td,TD,Tm,cm,T*)内容流的确切位置?

php - 这种标记解决方案的效果如何?

artificial-intelligence - 人工智能学习无效数据中的模式?

python - 属性错误: module 'tensorflow_docs' has no attribute 'plots'

python - 检测就职演说语言中的典故(例如非常模糊的匹配)

google-api - Google Language API 如何将文本拆分成句子来分配情绪?

php - 从文本 blob 中检测名字和姓氏的最佳方法

python - PyTorch Softmax 尺寸错误

math - 这个 arg max 符号在朴素贝叶斯的 scikit-learn 文档中意味着什么?