自然语言处理之分词技术
? ? ? ? 分詞作為自然語言處理中的一項基本內容,是很多任務的基礎,任何一門自然語言,分詞難度參差不齊。比如中文分詞與英文分詞就存在很大的差別。在英文中,使用空格來進行分詞,可以完成大部分的英文文本的分詞任務;然而,對于中文而言,分詞是一項極具挑戰性的任務,沒有特定的符號來標識某個詞的開始或者結尾,而分詞結果的好壞,對于語義理解的正確性有重要影響,比如下面這句話的分詞結果:
南京市長江大橋==>南京市/長江大橋,或者==>南京市長/江大橋。不同的分詞結果,語義天壤地別。那么如何能夠合理的把詞從句子中正確的切分出來呢?目前方法非常多,對于中文分詞任務而言,可以粗分為基于規則的方法,這類方法通常需要編寫詞典;經典的淺層機器學習的方法;基于深度學習的分詞技術。
? ? ? ? 首先,來看看對于詞典在分詞中的使用。對于詞典,最簡單也最常用的方法,就是構造一個常用詞的候選集合,比如,詞”我“、”愛“、”學習“這些詞構成的集合,對于句子”我愛學習“,如果要進行句子分詞,只需要從頭到尾遍歷這個句子,如果詞在候選詞集中出現過,則切分該詞,這樣很容易對原句進行切分,這樣的方法邏輯簡單,實現容易。所以在工程中,常采用list這種數據結構來進行候選詞的存儲。但是,如果對于大量的詞來進行詞典的建設,效率就非常低了,不僅涉及到詞的存儲,還要進行查找操作,無論是時間復雜度還是空間復雜度,都是線性的。如何更加高效的存儲和查找呢?成為了提升算法性能的關鍵因素。從數據結構和算法的角度來分析,樹型結構具有相比線性結構更加明顯的優勢,因此出現了Trie樹這種方法,Trie樹也成為了自然語言處理詞庫建設中常用的方法。
? ? ? ? 在計算機科學中,Trie樹又稱前綴樹或字典樹,是一種有序樹,用于保存關聯數組,其中的鍵通常是字符串類型。Trie樹也經常被搜索引擎系統用于文本詞頻統計。與二叉查找樹不同,鍵不是直接保存在節點中,而是由節點在樹中的位置決定。一個節點的所有子孫都有相同的前綴,也就是這個節點對應的字符串,而根節點對應空字符串。一般情況下,不是所有的節點都有對應的值,只有葉子節點和部分內部節點所對應的鍵才有相關的值。
上圖中包含三類節點:根節點、內部節點、葉子節點,利用Trie樹存儲后,根據一條路徑,來存儲一個詞典中的詞比如”上海大學“,當然中間節點也可以作為一個詞的結尾來進行保存,比如”上?!?#xff0c;常用的中文漢字不到5000,大概只需要一個一層分支為2**12的Trie樹來保存所有的中文詞庫信息。對于樹形結構,保證了高效的存儲和查找方法,遍歷一個句子時,只需要依次向樹下一層訪問,如果無法訪問到下一節點,則進行切分,如到葉子節點,也進行切分即可,這就是基于Trie樹的最長匹配法,分詞性能的好壞完全依賴于詞庫。目前的jieba分詞軟件就是基于這種思想來完成的。
? ? ? ? 雖然基于Trie樹的分詞方法能夠滿足大部分應用場景,但是該方法嚴重依賴于詞典,而且有時效果也非常一般,對于大規模的語料庫而言,詞庫建設的工作量又非常大。面對這種情況,采用機器學習的方法可以使得分詞效果得到改善,比如基于隱馬爾科夫模型的分詞方法、基于條件隨機場的分詞方法等淺層機器學習方法來完成分詞任務。
? ? ? ? 隱馬爾科夫模型包括隱狀態序列、觀察值序列、狀態轉移矩陣、條件概率矩陣、初始化概率。給定一個分詞任務:
隱狀態序列:指的是句中詞的幾種狀態,比如常見的方法,會將句中的詞分為四種狀態:詞的開始位置標記狀態,記為“S”(Start的簡寫);詞的中間位置標記狀態,記為“M”(Middle的簡寫);詞的末尾標記狀態,記為“E”(End的簡寫);單獨成詞的標記,簡寫為“W”(Whole的簡寫)。比如詞“太極拳“,被標記為“SME”,”愛“被標記為”W“,”喜歡“被標記為”SE“。比如句子”我愛打太極拳“,相應的觀察標記為”我/愛/打 /太極拳“,其隱狀態序列被標記為”W/W/W/SME“。
觀察值序列:指的是帶切分的詞,如:我愛打太極拳。
狀態轉移矩陣:是隱馬爾可夫模型中非常重要的一個概念。隱馬爾可夫模型一個很重要的假設,稱為馬爾可夫假設,當前時刻的狀態只與前一個時刻的狀態有關,這個關系可以使用狀態轉移矩陣來進行數學上的刻畫,對于”我/愛/打/太極拳“這句話來說,需要用到4階方陣。
條件概率矩陣:在HMM中,觀察值只取決于當前狀態值(假設條件),條件概率矩陣主要建模在SMEW下各個詞的不同概率,和初始化概率、狀態轉移矩陣一樣,我們需要在語料中計算得到對應的數據。
初始化概率:指的是S、M、E、W這四種狀態在第一個字或者詞的概率分布情況。
? ? ? ? 為了方便理解,舉個例子,比如”我愛打太極拳“,我們初始化一個矩陣,大小為W[4][6],則矩陣的第一列值為初始化條件概率分布,依次為:P(S)P(我|S),P(M)P(我|M),P(E)P(我|E),P(W)P(我|W)。然后根據轉移概率計算下一個字的狀態概率分布,依次到最后即可,即可計算句子中所有詞的狀態分布,然后確定好邊界對比條件,即可計算出對應的狀態序列。HMM是中文分詞中一種很常見的分詞方法,根據上述的描述和解釋,我們知道,其分詞狀態主要依賴于語料的標注,通過語料初始化概率、狀態轉移矩陣、條件概率矩陣的計算,對需要分詞的句子進行計算,簡單來說,是通過模型學習到對應詞的歷史狀態經驗,然后在新的矩陣中使用。HMM的優勢在于,模型計算簡單,且通常非常有效,對于詞典中未出現的詞有比較好的效果。而另外一種機器學習模型——CRF,即條件隨機場,也是一種高效的分詞模型,與HMM類似,將分詞任務作為一項序列標注任務,將上面提到的四種狀態(SMEW)標注到句子中的不同詞上,相對于HMM,CRF能夠利用更多的特征,而且,從本質上來講,HMM屬于生成模型,描述的是已知量和未知量的聯合概率分布,而CRF則是直接進行條件概率建模。而且CRF特征更加豐富,可通過自定義特征函數來增加特征信息,通常CRF能建模的信息應該包括HMM的狀態轉移、數據初始化的特征。CRF在理論和實踐上通常都優于HMM,CRF主要包括兩部分特征:1、簡單特征,只涉及當前狀態的特征;2、轉移特征,涉及到兩種狀態之間的特征。特征模板在工程實踐中是經常使用的一項技術。
? ? ? ? 除了淺層機器學習方法之外,火熱的深度學習方法也經常用于傳統的這些標注任務,比如用于自然語言處理的深度學習模型LSTM和傳統機器學習方法CRF的結合,讓模型標注的結果取得了質的飛躍,其基本結構如下圖所示:
其基本做法是:首先,訓練詞向量,使用word2vec技術對語料庫中的字詞訓練固定維度的詞向量,然后引入一個雙向LSTM(Bi-LSTM),用來建模句子本身的語義信息,最后引入一個CRF完成序列標注工作。這種考慮了上下文的方法是優于傳統方法的一個重要原因。
? ? ?? 近年來,深度學習方法,已經成為了自然語言處理任務的首選方法,并且大多數情況,效果都會比淺層機器學習方法要好,特別是最近預訓練模型的涌現,推動了自然語言處理領域的快速發展,很多模型都被新模型所取代,但是,傳統方法仍然是非常重要的,是很多模型的基礎,正如”沒有免費的午餐“定理所說,脫離具體問題,空泛地談論“什么學習算法更好”毫無意義,因為若考慮所有潛在的問題,則所有學習算法都一樣好。
?
?
?
?
總結
以上是生活随笔為你收集整理的自然语言处理之分词技术的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 全国大学生软件测试大赛移动应用测试脚本编
- 下一篇: chorme谷歌浏览器不能断点调试