NLP原理,本質,資訊理論,文字特徵抽取和預處理
自然語言處理基本概念
語言的數學本質
語言的出現是為了通訊,通訊的本質是為了傳遞資訊。字母,文字,數字都是資訊編碼的不同單元。任何一種語言都是一種編解碼演算法。 我們通過語言把要表達的意思傳遞出來,實際上就是用語言將大腦中的資訊進行了一次編碼,形成了一串文字。懂得這種語言的接收方就能夠使用這種語言進行解碼,然後獲取到裡面的資訊。這就是語言的數學本質。
統計語言模型
機器是不懂得任何一種語言的,早期的自然語言處理方式是讓計算機學習理解語言的語義,語法,然後據此判斷一個句子是否合理,含義是什麼。但最終證明這種研究方向和學習方式是行不通的。
現在的自然語言處理是基於統計語言模型,它根本不需要計算機理解人類的語言,它要做的就是判斷一個句子是否合理,就看這個句子在語料庫中出現的概率如何。
假定S表示某一個有意義的句子,由一連串的詞組成,是句子的長度。如果想知道S在文字中出現的概率,那就需要把有史以來人類講過的話統計一下,然後計算出出現的概率。這種方法很顯然是行不通的。因此,需要一個模型來估算。由於,那麼,利用條件概率公式,S出現的概率等於每一個詞出現的條件概率的乘積 其中表示在已知以一個詞出現的前提下,第二個詞出現的概率,以此類推,的出現概率取決於它前面所有的詞。但這種條件概率的可能性太多,非常難以計算。俄國數學家馬爾科夫提出了一個偷懶但是有效的做法,即馬爾科夫假設模型來簡化這種計算:任意一個詞出現的概率只同它前面的詞有關,簡化後S出現的概率為: 該公式對應的統計語言模型為二元模型(Bigram Model)。
以上是理論,那麼在實際的機器學習中是如何操作的呢?
- 首先計算,根據條件概率的定義,只需估計聯合概率和邊緣概率,就變得很簡單。基於大量的語料庫(Corpus),只需要統計這對詞在統計的文字中出現的次數以及本身在同樣的文字中出現的次數,然後用這兩個數分別除以語料庫的大小,即可得到這些詞的相對頻度:
- 然後根據大數原理,只要統計量足夠,相對頻度就等於概率,即
- 最終簡化後,約掉,因此
N-Gram Model
馬爾科夫假設中只定義和前面一個詞有關,稱之為二元模型。當和其前面N個詞有關的情況,則成為N元模型,這就是文字處理中經常見到的N-Gram Model。實際應用最多的是N=3的三元模型,之所以不用更高階的原因主要是:
- 空間複雜度。N元模型的大小是N的指數,即,V為一種語言字典的詞彙量
- 時間複雜度。N元模型的速度也是N的指數,即 因此,N不能太大,而且N從1-2,2-3的效果提升顯著,但是3-4時效果就不明顯了。而且N即使更高階,也無法覆蓋所有的語言,因為語言的上下文的相關性跨度可能非常大,比如跨段落,這是馬爾科夫假設無法解決的。
分詞
統計語言模型是建立在詞的基礎上的,詞是表達語義的最小單位。對於西方拼音語言來說,詞之間是有分界符,因此分詞很簡單。但是對於東方語言,詞之間沒有分界符,因此,進行自然語言處理前,首先要對句子進行分詞。
- 查字典法 把句子從左到右掃描,遇到字典裡面有的詞就標識出來,遇到複合詞就找最長匹配,遇到不認識的字串就分割成單字詞。比如“上海大學”,“上”是單字詞,遇到“海”時,發現可以和前面的“上”組成更長的詞,分割點就放在“上海”後面。後面它還能發現“上海大學”其實是個複合詞,那麼最後把分割點再移到“大學”後面。
- 統計語言模型分詞法 雖然查字典法可以解決70-80%的分詞問題,但是中文中有很多二義性的詞語,比如“發展中國家”,按照查字典的方法,得到的分詞結果是“發展-中國-家”,而正確的分詞結果應該是“發展-中-國家”。又比如長匹配帶來的問題,“北京大學生”,正確的應該是“北京-大學生”,而不是“北京大學-生”。 最終解決這個問題的方法還是依賴統計語言模型,原理如下。 假設一個句子S可以有以下幾種分詞方法: