1. 程式人生 > 其它 >自然語言的分詞方法之N-gram語言模型

自然語言的分詞方法之N-gram語言模型

也許更好的閱讀體驗

基於理解的分詞方法

其基本思想是在分詞的同時進行句法、語義的分析,以此來處理歧義問題。

目前這種方法還處於實驗狀態

基於統計的分詞方法

基本思路

構建語言模型,對句子進行單詞劃分,劃分結果運用統計方法計算概率,獲取概率最大的分詞方式

N元語言模型(N-gram語言模型)

\(z\)為字串,\(w\)為劃分的詞串,\(s\)是一種劃分。該分詞方法是以\(p(s)\)最大的分詞結果作為結果。

由於每個詞的概率都十分小,對於較長的字串,得到的每個結果的概率可能十分接近於0,計算機精度不夠,會影響概率的比較,可通過比較概率的負對數來比較大小。

這種方法可發現所有的切分歧義,它的成功率很大程度取決於統計語言模型的精度和決策演算法。

概率怎麼得到,肯定是要有樣本的,如果可以的話,以人類有史以來所有說過的話作為樣本肯定是最好的,但這不可能實現。

對於\(p(s)\),根據條件概率公式,有\(p(s)=p(w_1)p(w_2|w_1)\cdots p(w_n|w_{n-1},w_{n-2},\cdots w_1)\)

這種計算方法對算力要求太高,對訓練資料要求十分大,不太可能實現,因此考慮建立模型。

馬爾可夫假設

俄國數學家馬爾可夫提出假設:任意一個詞\(w_i\)出現的概率只同它前面的一個詞\(w_{i-1}\)有關,這種假設稱為馬爾可夫假設。
\(p(s)=p(w_1)p(w_2|w_1)\cdots p(w_n|w_{n-1})\)


這樣求的方法就簡單多了。

而當我們假設\(w_i\)出現的概率和它前面的\(n\)個詞有關,就被稱為\(n\)元語言模型

程式碼思路

\(DFS\)不難實現,首先找到一個可行的劃分,再計算概率,儲存最大概率的結果,\(DFS\)途中可適當剪枝。

//程式碼框架
void _find (int cur)//找劃分,cur表示當前為第幾個詞
{
	if (cur==n+1)	calc();//對當前結果計算概率並儲存
	for (int i=cur;i<=n;++i)
		if (check(cur,i)){//如果從cur到i形成一個詞
			add(cur,i);//將該詞新增到當前劃分
			_find(i+1);
			del();//刪掉這個詞
		}
}

與詞性標註結合

這種方法的基本思想是在考慮分詞結果的概率的同時,還要考慮詞性,自然語言的詞性搭配是有規律的,將分詞結果的詞性搭配的概率也進行比較,從而反過來調整分詞,可極大的提高結果的準確性。