自然語言的分詞方法之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();//刪掉這個詞
		}
}

與詞性標注結合

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM