和前一篇介紹的最大機率分詞比較,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