總有一些專有名詞聽(tīng)上去“很屌”,了解了其概念后潦刃,便覺(jué)得:“哦侮措,原來(lái)是這么簡(jiǎn)單的小知識(shí)點(diǎn)”。語(yǔ)言模型就是這樣一個(gè)名詞乖杠,作為nlp基礎(chǔ)組件之一分扎,在諸多的上層應(yīng)用中都有重要應(yīng)用。
簡(jiǎn)言之胧洒,語(yǔ)言模型就是給一個(gè)句子(詞序列)分配一個(gè)概率畏吓。這個(gè)概率表示這句話“合理程度”。舉個(gè)例子:
你兒子在我手上卫漫,快點(diǎn)把錢叫出來(lái)菲饼。 prob=0.80
# 這樣一個(gè)句子,非沉惺辏“通順”宏悦,就得到一個(gè)很高的概率值。
特朗普在廁所里擺滿了多個(gè)藝員。 prob=0.20
# 這樣一個(gè)句子饼煞,非吃春“怪異”,也可能是有別字砖瞧、語(yǔ)病的息堂,就得到一個(gè)很低的概率值。
把語(yǔ)言模型(詞序列-->概率)寫(xiě)成公式块促,就得到了
.
上述公式使用了鏈?zhǔn)椒▌t荣堰,即當(dāng)前第n個(gè)詞用哪一個(gè),完全取決于前n-1個(gè)詞竭翠。有了上面的公式振坚,我們就可以基于訓(xùn)練語(yǔ)料,計(jì)算一個(gè)句子的概率值了逃片。這里面有一個(gè)問(wèn)題,每一個(gè)詞都取決于前n-1個(gè)詞只酥,這使得計(jì)算復(fù)雜度猛增褥实。為了簡(jiǎn)化,采用了Markov-Assumption裂允,即當(dāng)前要選擇的詞僅僅依賴于前一個(gè)詞损离。有的同學(xué)可能會(huì)說(shuō),對(duì)于文本序列绝编,每個(gè)當(dāng)前詞僅取決于前一個(gè)詞僻澎,這樣會(huì)不會(huì)過(guò)于簡(jiǎn)單?是的十饥,太簡(jiǎn)單了窟勃,所以傳統(tǒng)的語(yǔ)言模型往往采用了k階Markov-Assumption,逗堵,寫(xiě)成公式:
.
很自然的秉氧,我們就可以通過(guò)對(duì)語(yǔ)料的統(tǒng)計(jì),得出一個(gè)句子的概率蜒秤。
傳統(tǒng)的語(yǔ)言模型也是這么做的汁咏,假設(shè)表示詞序列
在語(yǔ)料中出現(xiàn)的次數(shù)。那么作媚,對(duì)于一個(gè)詞“word”攘滩,運(yùn)用公式就可以得到:
然后對(duì)計(jì)算得到的多個(gè)連乘,就得到了句子的概率纸泡。
這里有個(gè)問(wèn)題漂问,即分母的等于0,怎么辦?
有兩種處理方法级解,1. 平滑技術(shù) 2. back-off冒黑,又出現(xiàn)了兩個(gè)看起來(lái)很“屌”的詞匯,其原理其實(shí)非常簡(jiǎn)單勤哗。
平滑技術(shù)
既然分母有可能等于0抡爹,那我們就加一個(gè)常數(shù),不讓其等于0芒划,比如在分母處+1冬竟,這就是所謂的平滑。如下所示:
平滑的技術(shù)有很多種民逼,大多論文集中在1990-2000年之間泵殴,就不詳細(xì)介紹了。最常見(jiàn)的叫做平滑拼苍,即
其中笑诅,是詞表大小,
是(0,1]之間的常數(shù)疮鲫。
back-off
退一步海闊天空吆你,這可能就是back-off的由來(lái)吧,既然為0
俊犯,那就想辦法估計(jì)一個(gè)值出來(lái)妇多。這里我們直接給出最佳的“非神經(jīng)網(wǎng)絡(luò)語(yǔ)言模型”中使用到的辦法,如下所示燕侠,看起來(lái)很復(fù)雜者祖,其實(shí)原理很簡(jiǎn)單。
若為0绢彤,則我們使用后一項(xiàng)估計(jì)七问,最后一項(xiàng)是用k-1元gram去估計(jì)k元ngram的值。
平滑和back-off的變種很多茫舶,詳見(jiàn)這篇論文:An Empirical Study of Smoothing Techniques for Language Modeling
非神經(jīng)網(wǎng)絡(luò)的最佳語(yǔ)言模型如下:
語(yǔ)言模型的評(píng)價(jià)--perplexity 困惑度
語(yǔ)言模型的變種有很多烂瘫,如何評(píng)價(jià)語(yǔ)言模型的好壞呢?
公式如下:
其中,
困惑度值, 就是說(shuō)一個(gè)詞序列越不合理奇适,其困惑度越大坟比,即讓你越困惑。嚷往。葛账。這里有個(gè)疑問(wèn),為什么用上述公式皮仁,其本質(zhì)是什么籍琳,留給大家思考菲宴。
傳統(tǒng)語(yǔ)言模型的缺點(diǎn)是什么?
- 平滑技術(shù) or back-off趋急,這類方法屬于人工設(shè)計(jì)規(guī)則喝峦,設(shè)計(jì)規(guī)則紛繁復(fù)雜,哪一種適合什么樣的語(yǔ)料呜达,難有定論谣蠢。困惑度可以用于評(píng)價(jià)各種規(guī)則,但困惑度本身并不是一個(gè)完美的評(píng)價(jià)方法查近。
- 詞表為V的n-gram數(shù)目是
眉踱,如果n每增加1,要計(jì)算的n-gram至少會(huì)倍增霜威。
- 基于極大似然估計(jì)的語(yǔ)言模型缺少對(duì)上下文的泛化谈喳,比較“死板”。比如戈泼,原語(yǔ)料中出現(xiàn)白汽車婿禽、黑汽車,而沒(méi)有黃汽車大猛,該語(yǔ)言模型就會(huì)影響對(duì)黃汽車的概率估計(jì)扭倾。當(dāng)然,某些具體的nlp應(yīng)用中胎署,這種“死板”反而是一種優(yōu)勢(shì)吆录,這種語(yǔ)言模型的靈活性低窑滞,但能夠降低了recall琼牧,提升precision。舉個(gè)例子哀卫,比如巨坊,原語(yǔ)料中出現(xiàn)了黑馬、白馬此改,這時(shí)出現(xiàn)藍(lán)馬的概率就很低趾撵。而對(duì)于靈活的語(yǔ)言模型,很有可能藍(lán)馬的概率也偏高共啃。
neural language model 神經(jīng)語(yǔ)言模型
基于神經(jīng)網(wǎng)絡(luò)的語(yǔ)言模型能解決上述三個(gè)問(wèn)題占调,其模型的數(shù)學(xué)表達(dá)式,簡(jiǎn)寫(xiě)如下:
以k元文法為例移剪,前k-1個(gè)詞作為特征究珊,softmax預(yù)測(cè)最后一個(gè)詞。詞表可能很大纵苛,比如1000000剿涮,這時(shí)可以使用heiraichle softmax言津,能夠有效提升效果、節(jié)省預(yù)測(cè)時(shí)間取试。當(dāng)然悬槽,還有一種NEC方法,通過(guò)一系列的二分類問(wèn)題替換交叉熵目標(biāo)函數(shù)瞬浓。
實(shí)例總結(jié)
在機(jī)器翻譯任務(wù)中初婆,傳統(tǒng)的語(yǔ)言模型和神經(jīng)語(yǔ)言模型同時(shí)使用,會(huì)提升翻譯質(zhì)量瑟蜈,模型之間似乎在互相補(bǔ)充烟逊。綜上所述,神經(jīng)語(yǔ)言模型的泛化能力更好铺根,傳統(tǒng)方法泛化能力差宪躯。紅馬、藍(lán)馬的例子中位迂,我們看到泛化能力好访雪,也不一定是優(yōu)點(diǎn)。在合適的場(chǎng)景下掂林,選擇適合的語(yǔ)言模型就ok了臣缀。在開(kāi)發(fā)文本糾錯(cuò)的應(yīng)用過(guò)程中,我們采用了傳統(tǒng)的語(yǔ)言模型泻帮,因?yàn)樯窠?jīng)語(yǔ)言模型的泛化能力過(guò)強(qiáng)精置,會(huì)帶來(lái)錯(cuò)別字大量誤判,反而降低了系統(tǒng)的表現(xiàn)锣杂。