DL筆記:語言模型和 N-gram

語言模式是自然語言處理的一個基礎概念。我們可以從語料中得到「語言模型」—— 即句子的概率,可用於:

  • 發現錯別句子
  • 發現新短語
  • 生成句子(如模仿汪峰寫歌)

機器怎樣理解自然語言呢?有兩種思路:

  • 學習語法:詞性、句子成分,但不能保證語義,如,火星追殺綠色的夢
  • 概率統計:齊夫定律(詞頻 ∝1/rank:頻率最高的單詞出現的頻率大約是出現頻率第二位的單詞的2倍,而出現頻率第二位的單詞則是出現頻率第四位的單詞的2倍),香農的資訊理論

概率論基本原理

概率空間:所有可能的結果。概率中的原子結構是基本事件,不可分割,不重疊;分子結構是事件(基本事件的集合)。事件的概率,可以理解為所選取的基本事件在整個空間里占的面積比例。

  • 聯合概率 P(A,B):兩個事件同時發生,比如擲兩次篩子,可能有 6^2 種結果。
  • 條件概率 P(B|A):A 條件下 B 發生的概率。從一個大的空間進入到一個子空間(切片),計算在子空間中的佔比。

概率語言模型

  • 計算句子的概率: P(S)=P(w1,w2,w3,...,wn)
  • 用處:句子錯誤檢查、輸入法候選、生成有用的句子等等
  • 統計:隨著空間膨脹,數據變稀疏,樣本有效性降低

對句子做最簡化的處理,先考慮只有兩個詞的句子,根據條件概率公式,它的概率等於第一個詞的空間佔比,乘以第一個詞的概率空間中第二個詞的佔比:

P(w1,w2)=P(w2|w1)?P(w1)

最初級的語言模型(Unigram),可以人為地假設詞之間是獨立的: P(w2|w1)≈P(w2)

於是這個句子的概率約等於兩個詞的頻率相乘: P(w2,w1)≈P(w1)?P(w2)

如果把兩個詞的句子擴展為三個詞:

以此類推:

這樣做的話,對每個詞要考慮它前面的所有詞,這在實際中意義不大。可以做些簡化嗎?

我們可以基於馬爾科夫假設來做簡化。

馬爾科夫假設是指,每個詞出現的概率只跟它前面的少數幾個詞有關。比如,二階馬爾科夫假設只考慮前面兩個詞,相應的語言模型是三元模型。引入了馬爾科夫假設的語言模型,也可以叫做馬爾科夫模型。

馬爾可夫鏈(Markov chain)為狀態空間中經過從一個狀態到另一個狀態的轉換的隨機過程。該過程要求具備「無記憶」的性質:下一狀態的概率分布只能由當前狀態決定,在時間序列中它前面的事件均與之無關。

比如對上面公式做一個 i-k 的簡化:

物理意義上說,上面的公式意味著每次看到 i 時,只要關注 i 前面的 k 個詞,這就是 N-gram 模型的思路。

Ref

  • 齊夫定律
  • 蒙特卡羅方法入門 - 阮一峰的網路日誌
  • Language Modeling - Course notes for NLP by Michael Collins, Columbia University
  • Language Modeling with Ngrams
  • 4 - 1 - Introduction to N-grams- Stanford NLP - Professor Dan Jurafsky & Chris Manning - YouTube
  • 馬爾可夫鏈 - Wikiwand
  • sunoonlee 同學的筆記


推薦閱讀:

零基礎如何迅速學習前端?
能否用函數與數組直接實現多個矩陣相乘?
你見過的最出色的程序員是怎樣的?為什麼出色?
Windows 的 file handle 為什麼譯為「文件句柄」?
eclipse 4.6叫neon,neon有什麼引申含義嗎?

TAG:自然语言处理 | 深度学习DeepLearning | 编程 |