维特比算法中的对数概率处理零概率

问题描述

我正在使用Viterbi算法在Python中编码语音标记器的概率部分。在这种情况下,时间t的维特比概率是前一时间步t-1的维特比路径概率,从前一POS标签到当前POS标签的过渡概率和给定的观测词发射概率的乘积。 POS标签。我通过在句子中的每个单词查看此时可能的每个标记/状态(根据观察到的训练数据)来计算该值,然后针对每个可能的标记计算维特比概率给出的到达该状态的最可能路径以上。 here可以找到一种简单的伪代码实现。

一个反复乘以概率的实际问题是它可能导致下溢。文献中经常提出的一种解决方案是使用对数概率。据我了解,您应该这样做:

current_probability = math.log(emission_probability) + math.log(transition_probability) + prevIoUs_probability

代替

current_probability = emission_probability * transition_probability * prevIoUs_probability

假定这三个概率存储在相应的变量中。

但是,我发现一个很难把握的问题是当发射概率或跃迁概率为0时该怎么办。Michael Collins writes:“新算法的一个问题是log 0 =-∞。处理某些等于0的概率值时需要格外小心。一个简单的解决方案是将log 0 = -B设置为B,这是一个大数字。“

我应该使用多少个号码? -math.inf

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)