區(qū)分好 語言建模 和 語言模型。
理解好 直接預(yù)測的問題:
(1). 數(shù)據(jù)量需要龐大(為什么?)
(2). 計算量龐大。
如何解決這個問題?
(1). 條件概率鏈?zhǔn)椒▌t
(2). 馬爾可夫假設(shè)
理解n元模型的計算量。
理解n不同的時候的不同情況。
(1). n大的時候:
-有更多的語境信息。
-計算量大,數(shù)據(jù)量要求大,計算出來的概率結(jié)果不可靠。
(2). n小的時候:
-比較少的語境信息。
-計算量小,數(shù)據(jù)量要求小,計算出來的概率結(jié)果可靠。
n-元模型的訓(xùn)練:參數(shù)估計。不是隱馬爾可夫,可以直接估計,可以使用相對頻率估計,這種時候最大似然估計(MLE)和相對頻率估計是一樣的。
那么這里描述一下是怎么訓(xùn)練和跑出結(jié)果的:
考慮語料庫:
<bos> John read Moby Dick <eos>
<bos> Mary read a different book <eos>
<bos> She read a book by Cher <eos>
對于bin-gram,我們會計算
...
所以這樣我們就訓(xùn)練好了。訓(xùn)練的結(jié)果就是一個一個條件概率庫。
那么對于一個句子。我們來計算句子的概率:
比如John read a book
所以求解如下:
處理模型中可能碰到的問題:
(1). 計算句子概率的時候使用概率連乘,容易造成數(shù)字很小,應(yīng)該擴張一下,可以使用對數(shù)概率。
(2). 自然語言處理中的數(shù)據(jù)是十分稀疏的,很有可能某個詞是沒有出現(xiàn)的。那么這樣會導(dǎo)致句子概率=0,這個是不符合常理的。
考慮解決辦法:增大數(shù)據(jù)量?
但是根據(jù)Zipf定律,增大數(shù)據(jù)量是解決不了問題的。(增加的仍然是高頻詞)
甚至有數(shù)據(jù)顯示:用150萬詞的訓(xùn)練語料來訓(xùn)練三元模型。同樣來源的測試語料中仍舊有23%的三元組是沒有出現(xiàn)過的。
解決辦法:平滑。
平滑方法:
Add_one平滑:規(guī)定每個n-元組比真實出現(xiàn)的次數(shù)多一次。
但是會出現(xiàn)兩個問題:
- 不公平,“富人不公平”。
- 假設(shè)不公平。沒有出現(xiàn)的元組都給了他相同的概率。
因為NLP中 很容易產(chǎn)生數(shù)據(jù)稀疏問題,所以平滑至關(guān)重要。之后另開一篇,講各種平滑方法。
語言模型的評價-交叉熵。
針對X這個隨機變量。(在n-gram當(dāng)中就是n-元組的概率分布)那么會存在一個理想中的分布p(x).我們通過訓(xùn)練數(shù)據(jù)訓(xùn)練出來的是q(x)。那么怎么衡量,不同q(x)對p(x)更加接近呢?使用交叉熵。
具體的操作:
比如說一元組模型。我們通過訓(xùn)練數(shù)據(jù)訓(xùn)練出模型,對于每個詞w我們有對應(yīng)的概率輸出。
那么使用測試數(shù)據(jù)對模型進行評估。
設(shè)測試數(shù)據(jù)為
那么我們可以計算出也就是
各種(注意了。
有可能是相同的。)所以引入
來表示測試數(shù)據(jù)中出現(xiàn)w的種類數(shù)目。
從而交叉熵有以下:
值得注意的是w是一個一元組。是T這個測試數(shù)據(jù)中w的不同種類數(shù)目。而上述的T中一共有
個w。
那么接下來讓我們考慮n-gram時候的模型評估。
引用上面的符號。、Type:
。
考慮我們應(yīng)該評估什么,因為通過訓(xùn)練,我們獲得的是條件概率。因此理論上我們應(yīng)該是對條件概率分布求交叉熵。也就是求
但是實際中求的時候使用的是
個人認(rèn)為可以的原因是對于每個項都只差一個常數(shù)級別。