问题标签 [viterbi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
r - 从 HMM 高斯混合分布中获取下一个观测值
我有一个长度为 1000 的连续单变量 xts 对象,我已将其转换为名为 x 的 data.frame 以供 package 使用RHmm
。
我已经选择了混合分布中有 5 个状态和 4 个高斯分布。
我所追求的是下一次观察的预期平均值。我该怎么做呢?
所以我到目前为止是:
HMMFit()
运行函数的转移矩阵- 混合物中每个高斯分布的一组均值和方差,以及它们各自的比例,所有这些也是由
HMMFit()
函数生成的 - 使用 HMMFit 函数的输出并将其放入
viterbi
函数时与输入数据相关的过去隐藏状态列表
我将如何从我所拥有的中获取下一个隐藏状态(即第 1001 个值),然后使用它从高斯分布中获取加权平均值。
我想我已经很接近了,只是不太确定下一部分是什么……最后一个状态是状态 5,我是否以某种方式使用转换矩阵中的第 5 行来获得下一个状态?
我所追求的只是下一次观察中预期的加权平均值,因此甚至不需要下一个隐藏状态。我是否将第 5 行中的概率乘以每个平均值,加权到每个州的比例?然后把它们加在一起?
这是我使用的代码。
一如既往,任何帮助将不胜感激!
algorithm - 了解维特比算法
我一直在寻找维特比算法的精确逐步示例。
考虑使用输入句子的句子标记为:
从这里我想生成最可能的输出:
我们如何使用 Viterbi 算法使用 trigram-HMM 获得上述输出?
(PS:我正在寻找精确的逐步解释,而不是一段代码或数学表示。假设所有概率都是数字。)
万分感谢!
graphics - 如何在 Latex 或 Graphviz 中可视化 Viterbi 路径
我正在寻找一种在 LaTeX 或 Graphviz 中可视化 Viterbi 路径的方法,就像在这个例子中一样:
它不一定是点,但也可以是线之间的实际值。很像一个在单元格之间有线条的表格。
我尝试寻找方法来做到这一点,但很可能我没有使用正确的关键字。
algorithm - Viterbi 训练或 Baum-Welch 算法来估计转换和发射概率?
我正在尝试使用 Viterbi 算法在 HMM 上找到最可能的路径(即状态序列)。但是,我不知道转换和发射矩阵,我需要从观察(数据)中估计。
要估计这些矩阵,我应该使用哪种算法:Baum-Welch 或 Viterbi 训练算法?为什么?
如果我应该使用维特比训练算法,谁能给我一个好的伪代码(不容易找到)?
viterbi - 维特比解码问题
在过去的几周里,我一直在尝试让 Viterbi C/C++ 解码器工作。由于某种原因,我无法让它工作。我最初是从 Phil Karn 的 FEC 库开始的: http ://www.ka9q.net/code/fec/
但是这段代码不想为 64 位 Linux 编译。然后我找到了http://www.spiral.net/software/viterbi.html ,它将生成针对 X86 架构优化的特殊 Viterbi 解码器。我可以让它工作并编译它来解码数据,但它不能正确解码数据。最后,我找到了另一个基于 Phil Karn 库的精简版本的库,名为 viterbi-3.0.1.tar(我不记得链接了)。
在 Matlab 中,我生成了三个测试数据集,全零、全一和长度为 2048 位的随机数据。Spiral 解码器正确解码零和一数据集,但不能正确解码随机数据。
我已将代码与测试数据测试放在此处。 http://dl.dropbox.com/u/65739307/viterbicpp.tar.bz2
algorithm - 维特比搜索 - 假设概率
我正在构建一个隐马尔可夫模型来确定某人是在说“是”还是“否”。我已经开发了隐马尔可夫模型,并且从这个页面看到了一个教程:
在本教程中它说:
该图通过假设的概率矩阵跟踪“是”和“否”的搜索路径。即使“否”的分数非常低,如果“是”没有出现在我们的词汇表中,仍然可以找到这个词的最可能路径。Viterbi 搜索可以通过阅读以下伪代码算法来理解(符号取自 Rabiner 的论文,A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition):
我已经阅读了这两篇论文,但我仍然对他们所说的地方感到困惑:
我的问题是这个概率矩阵来自哪里?例如,我做了以下事情:
- 读入音频文件
- 剥离了不值得考虑的音频信号
- 将需要考虑的信号拆分成块
这意味着我留下了包含音素的块。我已经计算了数据的过零,因此我的观点是:
对于“否”,来自此的数据非常低,
对于“是”,来自此的数据非常高。
所以在例子中(上面给出)它说:
那么我可以将零交叉的结果作为我的概率传递吗?我很困惑,希望有人可以帮助我。
algorithm - 在 HMM 中找到前 k 个维特比路径
我需要编写一个算法来找到 HMM 中的前 k 个维特比路径(使用常规维特比算法来找到最佳路径)。
我想我可能需要为每个状态 N 保存一个大小为 k 的列表 V_t,N,其中包含以状态 N 结尾的前 K 个路径,但我不太确定如何跟踪该列表。有什么想法吗?谢谢
algorithm - 使用 HMM 和 Viterbi 算法来纠正印刷错误
我想使用 HMM 和 Viterbi 算法来纠正印刷错误,我计算了所需的概率,但是当我应用 Viterbi 算法时,我得到了非常糟糕的结果,我逐行检查了代码,我找不到错误
c++ - 了解维特比算法
我正在尝试从这里实现一些代码
我已经用我的系数训练了 HMM,但不明白 Viterbi 解码器算法是如何工作的,例如:
但这是我不明白的:我试图比较两个语音信号(训练、样本)以找出最接近的可能匹配。例如,使用 DTW 算法,返回一个整数,然后我可以在其中找到最接近的整数,但是,使用此算法,它返回 a int* array
,因此很难区分。
以下是当前程序的工作方式:
谁能告诉我维特比解码器如何解决识别从训练到输入的最佳路径的问题?我在解码路径上尝试了欧几里得距离和汉明距离,(q)
但没有这样的运气。
任何帮助将不胜感激
java - Java中的维特比算法
我正在学习 coursera NLP 课程,第一个编程任务是构建一个 Viterbi 解码器。我想我真的很接近完成它,但是有一些我似乎无法追踪的难以捉摸的错误。这是我的代码:
http://pastie.org/private/ksmbns3gjctedu1zxrehw
http://pastie.org/private/ssv6tc8dwnamn2qegdvww
到目前为止,我已经调试了“教学”相关的功能,所以我可以说算法的参数被正确估计了。特别感兴趣的是 viterbi() 和 findW() 方法。我正在使用的算法的定义可以在这里找到:http ://www.cs.columbia.edu/~mcollins/hmms-spring2013.pdf第 18 页。
我很难理解的一件事是,当 K = {1, 2} 时,我应该如何更新特殊情况的后向指针(在我的情况下,这是 0 和 1,因为我是零 -索引我的数组)分别在这些情况下我使用的参数是 q({TAGSET} | *, *) 和 q ({TAGSET} | *, {TAGSET})。
提示而不是用勺子喂的答案也将受到高度赞赏!