自然语言处理中常用的维特比算法

抽象层面来看Viterbi

t 时刻的状态会依赖于 t-1 时刻 的状态和 t 时刻的可观察的状态。

上述中,t 时刻的状态 和 t-1时刻的状态称之为隐状态,也是需要求出的状态,可观察的状态为显状态

Viterbi算法解决的问题是:通过显状态序列 ** 求出 最有可能的隐状态序列**

显状态:有限个 隐状态:有限个 且 较少

怎么求 ? 概率

当前 已知 t-1 t t+1时刻 的观察序列 以及 观察序列到某个隐状态的概率 以及隐状态之间的转移概率 ,可以推断出 t-1 t t+1 时刻的 隐状态序列

在 t-1 时刻隐状态事件发生, 与 t 时刻 隐状态事件同时发生的概率= t-1时刻该隐状态事件发生的概率 * t-1时刻该隐状态事件 转移到 t时刻事件 的 转移概率 * t 时刻隐状态发生时出现当前显状态的条件概率。【1】

概率最大时即为此显状态对应的最有可能的隐状态。依次计算,可得全部时刻隐状态序列

举例

以经典的天气事件为例,通过某个人的行为表现推测当天的天气(当然反过来也行),

取 t=2,第 1、 2、 3 天的天气的状态(晴,雨)为隐状态,我个人的行为(散步,购物,打扫)为显状态。定义

(1) 某天天气晴天或者雨天的概率,比如为0.6 0.4 称为 初始概率

(2) t-1 天天气状态转移到 t 天天气状态的转移概率,假如第一天下雨,第二天下雨的概率为0.7 第二天天晴概率为 0.3 称为 转移概率

(3) 某种天气状态出现时,我个人行为发生的条件概率,即 下雨情况我可能干嘛的概率,如散步0.1 购物 0.4 打扫 0.5 称为 发射概率

假设连续三天,我的行为分别为 散步 购物 打扫 那 这三天的天气最有可能是什么样的?

根据公式 【1】,依次计算第一天、第二天、第三天的天气发生概率,取最大值的序列为最后的结果。 如此处计算的结果为 晴-> 雨-> 雨。 事实上一定是这样吗?当然不是,以上概率的设定,计算的结果都是很粗糙的,只是表明算法的作用,效果跟具体的数据有关系。

应用

那么,这种求隐状态序列的算法,在自然语言处理有什么作用呢? 可解决很多序列标注问题

比如,词性标注,给定词的序列,根据算法计算最有可能的词性序列

比如,命名实体识别,给定词的序列,根据算法计算最有可能的 实体序列

比如,自动添加标点符号,给定词的序列,词性的序列,根据算法计算最有可能的标点序列

公众号:netrookie
原文:http://netrookie.cn/viterbi/

你可能感兴趣的:(自然语言处理中常用的维特比算法)