深入浅出讲解语言模型
轉(zhuǎn)載自??深入淺出講解語(yǔ)言模型
深入淺出講解語(yǔ)言模型
1、什么是語(yǔ)言模型呢?
簡(jiǎn)單地說(shuō),語(yǔ)言模型就是用來(lái)計(jì)算一個(gè)句子的概率的模型,也就是判斷一句話是否是人話的概率?
那么如何計(jì)算一個(gè)句子的概率呢?給定句子(詞語(yǔ)序列)
它的概率可以表示為:
可是這樣的方法存在兩個(gè)致命的缺陷:
參數(shù)空間過(guò)大:條件概率P(wn|w1,w2,..,wn-1)的可能性太多,無(wú)法估算,不可能有用;
數(shù)據(jù)稀疏嚴(yán)重:對(duì)于非常多詞對(duì)的組合,在語(yǔ)料庫(kù)中都沒(méi)有出現(xiàn),依據(jù)最大似然估計(jì)得到的概率將會(huì)是0。
?
2、馬爾科夫假設(shè)
為了解決參數(shù)空間過(guò)大的問(wèn)題。引入了馬爾科夫假設(shè):隨意一個(gè)詞出現(xiàn)的概率只與它前面出現(xiàn)的有限的一個(gè)或者幾個(gè)詞有關(guān)。
如果一個(gè)詞的出現(xiàn)與它周圍的詞是獨(dú)立的,那么我們就稱之為unigram也就是一元語(yǔ)言模型:
如果一個(gè)詞的出現(xiàn)僅依賴于它前面出現(xiàn)的一個(gè)詞,那么我們就稱之為bigram:
假設(shè)一個(gè)詞的出現(xiàn)僅依賴于它前面出現(xiàn)的兩個(gè)詞,那么我們就稱之為trigram:
一般來(lái)說(shuō),N元模型就是假設(shè)當(dāng)前詞的出現(xiàn)概率只與它前面的N-1個(gè)詞有關(guān)。而這些概率參數(shù)都是可以通過(guò)大規(guī)模語(yǔ)料庫(kù)來(lái)計(jì)算,比如三元概率有:
在實(shí)踐中用的最多的就是bigram和trigram了,高于四元的用的非常少。
因?yàn)橛?xùn)練它須要更龐大的語(yǔ)料,并且數(shù)據(jù)稀疏嚴(yán)重,時(shí)間復(fù)雜度高,精度卻提高的不多。
下面我們?cè)敿?xì)介紹一下一元語(yǔ)言模型,二元語(yǔ)言模型來(lái)幫助大家理解語(yǔ)言模型。
?
3、一元語(yǔ)言模型
一元語(yǔ)言模型中,我們的句子概率定義為:
?
,在這里,這個(gè)式子成立的條件是有一個(gè)假設(shè),就是條件無(wú)關(guān)假設(shè),我們認(rèn)為每個(gè)詞都是條件無(wú)關(guān)的。
那好,剛剛說(shuō)了語(yǔ)言模型是得到一個(gè)句子的概率,此時(shí)我們句子的概率計(jì)算公式已經(jīng)有了,那么如何估計(jì)??
這些值呢?
首先介紹一下,這里的參數(shù)種類是一種 ?,但是參數(shù)實(shí)例有V個(gè)(V是我們的詞典大小)
我們應(yīng)該如何得到每個(gè)參數(shù)實(shí)例的值。
用的是極大似然估計(jì)法。
比如我們說(shuō)我們的訓(xùn)練語(yǔ)料是下面這個(gè)簡(jiǎn)單的語(yǔ)料。
那么我們的字典為:“星期五早晨,我特意起了個(gè)大早為的就是看天空。” 22個(gè)不同詞,每個(gè)詞語(yǔ)的概率直接用極大似然估計(jì)法估計(jì)得到。
如:p(星)=1/27,p(期)=1/27,一直算到后面的空為1/27.
于是我們就需要存儲(chǔ)我們學(xué)習(xí)得到的模型參數(shù),一個(gè)向量,22維,每個(gè)維度保存著每個(gè)單詞的概率值。
那么有同學(xué)就需要問(wèn)了,來(lái)了一句話,我們應(yīng)該怎么估計(jì)呢?
下面我舉一個(gè)簡(jiǎn)單的例子來(lái)模擬一下如何用語(yǔ)言模型估計(jì)一句話的概率,比如:
p(我看看早晨的天空)=p(我)*p(看)*p(看)*p(早)*p(晨)*p(的)*p(天)*p(空)=1/27*1/27*1/27*....*1/27就能夠直接運(yùn)算出來(lái)。
于是我們得出,只要將每句話拆開(kāi)為每個(gè)單詞然后用累積形式運(yùn)算,這樣我們就能算出每句話的概率來(lái)了。
但是這樣是不是就解決我們所有的問(wèn)題呢?并沒(méi)有,下面我們介紹二元語(yǔ)言模型。
?
4、二元語(yǔ)言模型
介紹二元語(yǔ)言模型之前,我們首先來(lái)看兩句話,he eats pizza與he drinks pizza,我們需要用語(yǔ)言模型來(lái)判斷這兩句話出現(xiàn)的概率。
好,那么我們現(xiàn)在用一元語(yǔ)言模型來(lái)分別計(jì)算這兩個(gè)句子的概率大小。
p(he eats pizza) = p(he)*p(eats)*p(pizza)
p(he drinks pizza) = p(he)*p(drinks)*p(pizza)
我們可以看出,其實(shí)通過(guò)一元語(yǔ)言模型的計(jì)算公式,我們看不出上面兩個(gè)句子的概率有多大差別。
但是我們很明顯知道第一句話比第二句話的概率要大的多,因?yàn)檎_的表達(dá)應(yīng)該就是吃披薩,而不是喝披薩。
但是由于我們用了一元語(yǔ)言模型,假設(shè)每個(gè)詞都是條件無(wú)關(guān)的,這樣的話就會(huì)導(dǎo)致我們考慮不到兩個(gè)詞之間的關(guān)系搭配。
比如在這個(gè)例子中,很明顯應(yīng)該判斷的是p(pizza|eats)與p(pizza|drinks)的概率大小比較。
這也就是二元語(yǔ)言模型需要考慮的問(wèn)題。
我們需要計(jì)算p(pizza|eats)與p(pizza|drinks)的概率,我們首先給出二元語(yǔ)言模型的定義
下面我們舉出一個(gè)例子(例子來(lái)源于https://class.coursera.org/nlp/):
這個(gè)例子來(lái)自大一點(diǎn)的語(yǔ)料庫(kù),為了計(jì)算對(duì)應(yīng)的二元模型的參數(shù),即P(wi | wi-1),我們要先計(jì)數(shù)即c(wi-1,wi),然后計(jì)數(shù)c(wi-1),再用除法可得到這些條件概率。
可以看到對(duì)于c(wi-1,wi)來(lái)說(shuō),wi-1有語(yǔ)料庫(kù)詞典大小(記作|V|)的可能取值,wi也是,所以c(wi-1,wi)要計(jì)算的個(gè)數(shù)有|V|^2。
c(wi-1,wi)計(jì)數(shù)結(jié)果如下:
c(wi-1)的計(jì)數(shù)結(jié)果如下:
那么二元模型的參數(shù)計(jì)算結(jié)果如下:
比如計(jì)算其中的P(want | i) = 0.33如下:
那么針對(duì)這個(gè)語(yǔ)料庫(kù)的二元模型建立好了后,我們可以計(jì)算我們的目標(biāo),即一個(gè)句子的概率了,一個(gè)例子如下:
P(<s> I want english food </s>) = P(I|<s>) × ?P(want|I) × P(english|want) × ?P(food|english) ?× ?P(</s>|food) = 0.000031
那么我們就能通過(guò)一個(gè)二元語(yǔ)言模型能夠計(jì)算所需要求的句子概率大小。
二元語(yǔ)言模型也能比一元語(yǔ)言模型能夠更好的get到兩個(gè)詞語(yǔ)之間的關(guān)系信息。
比如在p(pizza|eats)與p(pizza|drinks)的比較中,二元語(yǔ)言模型就能夠更好的get到它們的關(guān)系,比如我們?cè)倏匆幌略摱P退蹲降降囊恍?shí)際信息:
?
圖片來(lái)自于:http://blog.csdn.net/a635661820/article/details/43906731(圖片放大看比較能看清楚紅色字)
總結(jié)
以上是生活随笔為你收集整理的深入浅出讲解语言模型的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 魔兽世界先祖硬币怎么获得
- 下一篇: NLP Coursera By Mich