和前一篇介绍的最大几率分词比较,2-gram分词也是一种最大几率分词,只不过在计算一个词几率的时候,它不光考虑本身,还会考虑它的前驱。.net
咱们须要两个字典。第一个字典记录词\(w_i\)出现的频次,第二个字典记录词对儿<\(w_j,w_i\)>共同出现的频次。有这两份字典,咱们就能够计算出条件几率\(p(w_i|w_j)=p(w_i,w_j)/p(w_j)\)。xml
为了直观表示计算过程,咱们仍是构建出一个图出来。跟上一篇不一样,这里换个方向,咱们考虑结束字,而不是开始字,由于是后面的词依赖前面的词。blog
这里必须说明一个问题。n-gram是基于HMM的,它假定后面的状态不会影响前面的状态,所以当前面部分的分词已经分完以后,它就不在受后面词的影响了。固然,现实状况中不是这样个样子的,好比abcd中的abc不考虑d的最好分词是a/bc,若是考虑了d就多是a/bc了。为了简单,这里先不作考虑。get
那么,假设\(\alpha_i\)是以i结尾的最优分词的累计几率,j是i的邻接点,容易获得\(\alpha_i=max_jp(w(j,i)|w(?,j-1))*\alpha_{j-1}\).这里w(?,j-1)是以j-1结束的分词结果中的最后一个词。io
能够看出这也是个动态规划问题,基本形式和上一篇最大几率分词区别不大。coding
具体的代码能够去 im