代码改变世界

viterbi

2013-03-06 11:29  ggzwtj  阅读(372)  评论(2编辑  收藏  举报

隐马尔可夫模型

viterbi算法

  viterbi算法要解决的问题是:在已知a、b、y的情况下,求可能性最大的x。注意到马尔可夫的性质和一般的动态规划问题中的性质很像,所以这里可以用动态规划来求可能性最大的x:

  P(t, x)表示t时刻、状态为x得到y的概率,那么:

  P(t+1, xj) = max{P(t, xi) × aij × bj}

其中:

  1. aij为状态转移概率;
  2. bj为输出概率;

注:在DP的过程中把初始值也带上,完成后找到最大的那个即可。

基于统计的中文分词

  简单的中文分词:正向最大匹配、逆向最大匹配、双向最大匹配、最小词数等简单的匹配规则在大部分情况下能工作的很好,但是在遇到一些有歧义的句子就比较难处理了。在处理歧义的时候当然要联系上下文才能准确的知道要真正表达的含义,而机器是没办法做到真正意义上地理解一个句子的,而对机器来说能尽量做到的就是:判断在现在的上下文中哪种分词的正确的可能性是最大的。

  假设:分词的结果为

    w1、w2、w3、……、wn

  那么,这种分词的可能性为:

    P = P(w1) × P(w2|w1) × P(w3|w2)……

  其中,根据贝叶斯定理:

    P(A|B) = P(A∩B) / P(B)

那么现在的问题变为:

  如果找到最大的w1、w2、w3、……、wn的组合使得P最大?

这里可以参考viterbi算法:

  P(t, x)表示匹配了t个字符之后,最后一个词为x时的最大的概率。

这样从初始的各种词的可能性开始,然后在动态归还过程中找到概率最大的分词方法即可(不过基于统计的中文分词的过程是我YY的,具体实现要参考一些成熟的论文)。

----- -- -

END