微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决维特比算法中的对数概率处理零概率

我正在使用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 举报,一经查实,本站将立刻删除。