NLP之分词
不同分詞工具原理解析
對各種分詞工具的介紹,具體參考:
http://www.cnblogs.com/en-heng/p/6234006.html
1)?jieba
具體參考:
https://blog.csdn.net/rav009/article/details/12196623
jieba分詞原理解析
采用的是Unigram + HMM,Unigram假設每個詞相互獨立
具體參考:
http://www.cnblogs.com/en-heng/p/6234006.html
先總結一下jieba的分詞方法
先加載詞典(包括自定義詞典和自帶的詞典)生成字典樹,對于待分詞的句子先通過查字典樹,對于那些在字典中出現了的詞以此為基礎構成一個DAG(有向無環圖),具體是通過python中的字典表示的,字典的key是可能成詞的詞的詞首在句子中的腳標,value是一個list,list中的每個值代表以key為詞首所有可能組成的詞的詞尾在句子中的腳標。對于這些路徑通過動態規劃把求解概率最大問題轉換為圖論中的求最大路徑問題,圖中邊的權重是詞的詞頻的log值。
對于那些沒有出現在字典中的詞,把他們重新組成片段利用HMM模型進行分詞,注意最后的解碼過程中jieba對維特比算法進行了約束。
對于用HMM進行分詞具體參考:
http://www.cnblogs.com/en-heng/p/6164145.html
Jieba用的是BEMS四標簽格式分別表示詞的開始、結束、中間(begin、end、middle)及字符獨立成詞(single),標簽越多或許會更準確,但是會使訓練速度更慢。
對于HMM發現新詞總共是3個概率值的問題,這是作者基于一個大型語料提前訓練出來的,詞的初始概率可能就是每個詞的頻率,那么轉移概率和生成概率也是通過一個大型語料訓練出來的(這是學習問題)。語料包括:來源主要有兩個,一個是網上能下載到的1998人民日報的切分語料還有一個msr的切分語料。另一個是我自己收集的一些txt小說,用ictclas把他們切分。
主題jieba在使用HMM模型進行分詞時對維特比算法進行了如下修改
為了適配中文分詞任務,Jieba對Viterbi算法做了如下的修改:狀態轉移時應滿足PrevStatus條件,即狀態B的前一狀態只能是E或者S,...最后一個狀態只能是E或者S,表示詞的結尾。
1)?Foolnltk
1.?自定義詞典的加載
import fool
fool.load_userdict('dict/aa.txt')
注意:aa.txt必須是GBK編碼的,其次每個詞要有一個大于1的權重值:
它是基于字特征+BI-LSTM+CRF進行分詞的
3)哈工大的ltp
以微博為訓練語料
以結構化感知器(Structured Perceptron, SP)方法來進行分詞,它也是用于處理序列標注問題。
LTP用戶詞典:官方補充說“LTP的分詞模塊并非采用詞典匹配的策略,外部詞典以特征方式(轉換為特征:是詞典詞匯的開頭、是詞典詞匯的中間部分、是詞典詞匯的結尾)加入機器學習算法,并不能保證所有的詞都是按照詞典里的方式進行切分”。
結構化感知器與CRF以及感知器的區別
具體參考:
https://www.zhihu.com/question/51872633
結構化感知器和crf的最大差別在哪里?感覺crf的模版也可以用到結構化感知器上面
Perceptron(感知器)和CRF主要的區別是優化目標不同,CRF優化對數似然函數,是一個概率模型,因此需要計算partition function(配分函數),計算代價較高。而Perceptron優化正確答案與預測結果得分之間的差異(SP以最大熵準則建模score函數,分詞結果則等同于最大score函數所對應的標注序列,具體沒懂。),scoring function是線性函數。CRF的勢函數與Perceptron的scoring function都使用了線性函數,因此特征模板是一致的
首先,“全局學習”的概念主要針對的是結構化預測問題(structure prediction),比如序列標注或者句法分析。不同于簡單的多元分類,在結構化預測問題中,通常需要一個較為復雜的解碼過程才能夠獲得最終的結構化輸出。結構化感知器與普通感知器在學習算法上是一致的,主要的區別在于特征抽取是否考慮全局的結構化輸出。而特征抽取過程則進一步決定了模型能否進行全局的結構化學習以及預測。
4)中科院的nlpir
以微博為訓練語料
因為NLPIR是基于字典的分詞,所以若用戶加載自定義詞典將優先使用用戶詞典。
它的前身是ICTCLAS
采用的是Bigram的Word-Based Generative Model,Bigram假設每個詞出現的概率只和其前一個詞有關。
Word-Based Generative Model是采用最大聯合概率來對最佳分詞方案建模。即為以詞為基礎的生成式模型,和jieba分詞類似,jieba所使用的是Unigram+HMM而它使用的是Bigram+HMM。
5)清華的thulac
以人民日報為訓練語料
和ltp所采用的分詞模型相同。
6)斯坦福的中文分詞
它是以CRF模型為基礎進行中文分詞的
為什么要分詞?
神經網絡適用于處理具有局部相關性的數據,在NLP任務中,詞由字組成,句由詞組成,成詞的字之間有相關性,成句的詞與詞之間有相關性。所以說為什么要分詞而不是直接用字進行構建?因為用字破壞了文本中的上下文關系,且字與字之間不是獨立的效果不好,分詞是為了把句子分為若干個相關性較弱的部分,同時也是為了對明顯具有強相關關系的字特征進行組合,便于進一步處理。
那么在一些NLP的任務中分詞之后把詞向量作為神經網絡的輸入效果就會比以字向量作為輸入的效果好嗎?其實不是的。在19年的《Is Word Segmentation Necessary for Deep Learning of Chinese Representations?》文章中指出,把字向量作為輸入效果更好。但是這篇論文不是說在NLP任務中應該以字向量為輸入而不是詞向量,它是為了引發我們做具體任務時的思考。論文中指出,之所以詞向量的效果不如字向量一方面是因為分詞工具的不準確,主要原因是因為單詞數據的稀疏性以及OOV單詞的存在,在訓練語料中常用的詞只是占詞表中的一小部分,也就是說詞表中絕大部分詞的詞頻都很低,這就導致在訓練詞向量時不可避免的會出現過擬合現象,從而使得詞向量的質量不高。
盡管從直覺上看, ”詞“的所攜帶的信息是比”字“更豐富,但對于神經網絡而言,會如何呢?深層的神經網絡通過層層的特征組合學習能否根據復雜的過程來學習到字與字之間的組合方式, 如果可以,我們還有必要進行分詞嗎?
轉載于:https://www.cnblogs.com/dyl222/p/11025378.html
總結
- 上一篇: 软件架构阅读笔记15
- 下一篇: 2019春季学期进度报告(十六)