課程作業,只完成了最基本的演算法,還有不足的地方,例如一些多位數的分詞方式等,大家可以適當參考。
1.語言模型說明
語言模型為bigram,儲存在乙個(n*n)的numpy矩陣lm中,訓練過程:
laplace平滑僅在計算的二維計數表的每乙個位置進行+1操作處理後極大似然估計得到概率:
kn平滑處理後某個位置的概率為
其中d=0.75,n1+ 代表大於1的gram數
2.詞網路構建說明
詞網路使用圖的資料結構構成:
因為句子是乙個有序的序列,所以認為節點圖中的開頭是固定的,節點轉移方向也是固定的,所以通過指標為其新增了方向性,**實現時定義了節點類node存放節點資訊:
3.詞網路和最大概率演算法的實際使用
考慮到對長句而言其詞網路結構可能會很複雜,所以對節點做出幾點調整:
prev指標僅指向帶給當前節點最大概率的節點,即每個節點僅有乙個入點,該入點 即為其baw
next指標沒有實質性作用,故刪除
prob屬性由二元概率p(wi|wi-1)集合改為累計概率p(wi|wi-1)p(wi-1|wi-2)…p(w1|)
主要思想是令每個節點的累計概率最大,當有多個自由節點(next為空,後刪除next後存入陣列pre)滿足node.endpos == w(startpos) 時對其攜帶的概率進行運算
node.prob * p(wi|wi-1)
進行比較後取使其最大的節點為當前節點的baw。如此從最後乙個節點「」(實際中使用「\n」代替了』』)向前遞迴則可以獲得累計概率最大的分詞結果,下圖給出了節點「的」的前向結果(途中虛線表示節點「的」的前向節點通過比對四個自由節點帶來的實際最大累計概率產生):
5.未登陸詞處理
僅當乙個startpos=i時不存在候選詞時認為該位置存在乙個未登入詞。由於詞表中沒有出現過所以其對應的kn平滑計算結果會出錯,所以使用詞表中的最小概率值代替了未登入詞的概率。
實現**:
宗成慶,統計自然語言處理
speech and language processing
自然語言處理 中文分詞原理
1.1中文分詞概述 中文分詞 將乙個漢字序列分成乙個乙個的單獨的詞。分詞 將連續的字序列按照一定的規範重新組合成詞序列的過程。1.2中文分詞方法 一般有以下三類 基於詞典匹配的分詞方法 基於理解的分詞方法和基於統計的分詞方法。1.2.1 基於詞典 字串匹配 機械分詞法 匹配的分詞方法 按照一定的策略...
自然語言處理1 分詞
分詞是自然語言處理的基礎,分詞準確度直接決定了後面的詞性標註 句法分析 詞向量以及文字分析的質量。英文語句使用空格將單詞進行分隔,除了某些特定詞,如how many,new york等外,大部分情況下不需要考慮分詞問題。但中文不同,天然缺少分隔符,需要讀者自行分詞和斷句。故在做中文自然語言處理時,我...
自然語言處理入門 中文分詞原理
1.中文分詞原理介紹 1.1 中文分詞概述 中文分詞 chinese word segmentation 指的是將乙個漢字序列切分成乙個乙個單獨的詞。分詞就是將連續的字序列按照一定的規範重新組合成詞序列的過程。1.2 中文分詞方法介紹 現有的分詞方法可分為三大類 基於字串匹配的分詞方法 基於理解的分...