word2vec是用來(lái)生成詞向量的工具,而詞向量與語(yǔ)言模型有著密切的關(guān)系鸦列,為此吨些,不妨先來(lái)了解一些語(yǔ)言模型方面的知識(shí)。
1刁愿、統(tǒng)計(jì)語(yǔ)言模型
統(tǒng)計(jì)語(yǔ)言模型(Statistical Language Model)是所有NLP的基礎(chǔ)绰寞,被廣泛應(yīng)用于語(yǔ)音識(shí)別,機(jī)器翻譯酌毡,分詞克握,詞性標(biāo)注和信息檢索等任務(wù)。
簡(jiǎn)單的說(shuō)枷踏,統(tǒng)計(jì)語(yǔ)言模型是用來(lái)計(jì)算一個(gè)句子的概率的概率模型菩暗,它通常基于一個(gè)語(yǔ)料庫(kù)來(lái)構(gòu)建旭蠕,那什么叫做一個(gè)句子的概率呢停团?假設(shè)一個(gè)由(w1,w2,....wT)這T個(gè)詞按順序構(gòu)成的一個(gè)句子W旷坦,則(w1,w2,....wT)的聯(lián)合概率:
上面的這個(gè)式子就是這個(gè)句子的概率,利用貝葉斯公式佑稠,可以將上式鏈?zhǔn)椒纸鉃椋?br>
所以秒梅,可以看到,上面模型需要估計(jì)的參數(shù)有T個(gè)舌胶,拆借出的每個(gè)條件概率都是語(yǔ)言模型的參數(shù)捆蜀,如果這些參數(shù)都已經(jīng)算得,則可以算出一個(gè)句子的概率幔嫂。
看起來(lái)很簡(jiǎn)單辆它,但是稍微分析一下,就可以知道具體實(shí)現(xiàn)起來(lái)有多麻煩履恩。例如锰茉,先來(lái)看看模型參數(shù)的個(gè)數(shù),剛才考慮的是一個(gè)長(zhǎng)度為T的句子切心,就需要計(jì)算T個(gè)參數(shù)飒筑,不妨假設(shè)語(yǔ)料庫(kù)對(duì)應(yīng)詞典D的大小為N,那么考慮長(zhǎng)度為T的仁義句子绽昏,理論上就有NT種可能协屡,每種可能都要計(jì)算T個(gè)參數(shù),總共就需要計(jì)算TNT個(gè)參數(shù)而涉。這個(gè)量級(jí)非常嚇人著瓶,此外,這些概率計(jì)算之后需要保存下來(lái)啼县,存儲(chǔ)這些信息也需要巨大的空間開(kāi)銷。
那么沸久,這些參數(shù)如何計(jì)算呢季眷?常見(jiàn)的方法有n-gram模型,決策樹(shù)卷胯,最大熵模型子刮,最大熵馬爾可夫模型,條件隨機(jī)場(chǎng)窑睁,神經(jīng)網(wǎng)絡(luò)方法等挺峡。這里只介紹n-gram模型和神經(jīng)網(wǎng)絡(luò)模型。
2担钮、N-Gram模型
可以看出橱赠,一個(gè)詞出現(xiàn)的概率跟它前面的所有詞都相關(guān),如果假定一個(gè)詞的出現(xiàn)概率只跟他前面固定數(shù)目的詞相關(guān)呢箫津?這就是n-gram模型的基本思想狭姨,它做了一個(gè)n-1階的馬爾可夫假設(shè)宰啦,認(rèn)為一個(gè)詞的出現(xiàn)的概率就只與它前面的n-1個(gè)詞想管,即:
于是我們便有:
以n=2為例饼拍,即每個(gè)詞的出現(xiàn)的概率只與它前面一個(gè)詞有關(guān)赡模,即:
這樣一件話,不僅使得單個(gè)參數(shù)的統(tǒng)計(jì)變得更容易师抄,也使得參數(shù)的總數(shù)變少了漓柑。
那么,n-gram中參數(shù)n一般取多大比較合適呢叨吮?一般來(lái)說(shuō)辆布,n的選擇需要同時(shí)考慮計(jì)算復(fù)雜度和模型效果兩個(gè)因素。
在計(jì)算復(fù)雜度方面挤安,假定我們的詞典大小N=200000谚殊,則模型參數(shù)數(shù)量隨著n逐漸增大的情況如下表所示:
可以看到,隨著n的增大蛤铜,模型參數(shù)數(shù)量呈指數(shù)級(jí)增長(zhǎng)嫩絮,所以實(shí)際中n不能取太大,一般取n=3左右围肥。
在模型效果方面剿干,理論上是n越大,效果越好穆刻,現(xiàn)如今置尔,互聯(lián)網(wǎng)的海量數(shù)據(jù)以及機(jī)性能的提升使得計(jì)算更高階的語(yǔ)言模型(n>10)成為課呢呢個(gè),但需要注意的是氢伟,當(dāng)n大到一定程度的時(shí)候榜轿,模型效果的提升幅度會(huì)變小,比如n從1到2朵锣,再?gòu)?到3谬盐,模型效果上升顯著,但從3到4時(shí)诚些,模型效果的提升就不顯著了飞傀。另外,n-gram中還有一個(gè)叫做平滑化的重要環(huán)節(jié)诬烹,主要考慮以下兩個(gè)問(wèn)題:
有關(guān)平滑化的問(wèn)題砸烦,大家可以參考博客:
http://blog.csdn.net/baimafujinji/article/details/51297802
總結(jié)起來(lái),n-gram模型就是這樣一種模型绞吁,其主要工作就是在語(yǔ)料中統(tǒng)計(jì)各種詞串出現(xiàn)的次數(shù)以及平滑化處理幢痘,概率值計(jì)算好之后存儲(chǔ)起來(lái),下次需要計(jì)算一個(gè)句子的概率時(shí)掀泳,只需找到相關(guān)的概率參數(shù)雪隧,將它們連乘起來(lái)就好了西轩。
然而在機(jī)器學(xué)習(xí)領(lǐng)域有一種通用的招數(shù)是這樣的,對(duì)所考慮的問(wèn)題建模后現(xiàn)為其構(gòu)造一個(gè)目標(biāo)函數(shù)脑沿,然后對(duì)這個(gè)目標(biāo)函數(shù)進(jìn)行優(yōu)化藕畔,從而求得一組最優(yōu)的參數(shù),最后利用這組最優(yōu)參數(shù)對(duì)應(yīng)的模型來(lái)進(jìn)行預(yù)測(cè)庄拇。
對(duì)于統(tǒng)計(jì)語(yǔ)言模型而言注服,利用最大似然,可把目標(biāo)函數(shù)設(shè)為:
上式中措近,C表示語(yǔ)料溶弟,Context(w)表示詞w的上下文,即w周邊的詞的集合瞭郑。
當(dāng)然辜御,實(shí)際應(yīng)用中通常采用最大對(duì)數(shù)似然,把目標(biāo)函數(shù)設(shè)為:
然后對(duì)上面的函數(shù)進(jìn)行最大化屈张,可以看到擒权,概率p(w|context(w))被視為關(guān)于w和Context(w) 的函數(shù),即:
其中Θ為待定參數(shù)集阁谆。這樣的話碳抄,但我們得到最優(yōu)的參數(shù)Θ后,F(xiàn)也就唯一確定了场绿,以后任何概率p(w|context(w))都可以通過(guò)F來(lái)計(jì)算了剖效,與n-gram相比,這種方法不需要事先保存所有的概率焰盗,而是通過(guò)直接計(jì)算來(lái)獲取璧尸,而且通過(guò)選取合適的模型可以使參數(shù)Θ的個(gè)數(shù)遠(yuǎn)小于n-gram中參數(shù)的個(gè)數(shù)。
顯然熬拒,對(duì)于這樣一種算法逗宁,最關(guān)鍵的地方就在于函數(shù)F的構(gòu)造了,接下來(lái)我們會(huì)介紹一種通過(guò)神經(jīng)網(wǎng)絡(luò)來(lái)構(gòu)造F的方法梦湘,這種方法也可以視為word2vec種算法框架的基礎(chǔ)或者前身。
3件甥、神經(jīng)概率語(yǔ)言模型
本節(jié)介紹的神經(jīng)概率語(yǔ)言模型捌议,用到了一個(gè)重要的工具-詞向量。什么是詞向量呢引有?簡(jiǎn)單來(lái)說(shuō)瓣颅,就是對(duì)辭典D中任意的詞w,將詞w轉(zhuǎn)化為一個(gè)固定長(zhǎng)度的向量v(w)譬正,這個(gè)向量就稱為詞向量宫补。
既然是神經(jīng)概率語(yǔ)言模型檬姥,那么當(dāng)然要用到一個(gè)神經(jīng)網(wǎng)絡(luò)啦。下圖是神經(jīng)網(wǎng)絡(luò)的示意圖:
神經(jīng)網(wǎng)絡(luò)包括四個(gè)層粉怕,輸入層健民,投影層,隱藏層贫贝,輸出層秉犹,W和U分別表示投影層與隱藏層以及隱藏層和輸出層之間的權(quán)值矩陣,p和q分別為隱藏層和輸出層上的偏置向量稚晚。
對(duì)于語(yǔ)料C中任意一個(gè)詞w崇堵,將Context(w)取為其前面n-1個(gè)詞,如果不滿n-1個(gè)詞客燕,那么可以人為添加用以填充鸳劳,這樣二元對(duì)(Context(w),w)就是一個(gè)訓(xùn)練樣本了,接下來(lái)也搓,討論(Context(w),w)經(jīng)過(guò)上面的神經(jīng)網(wǎng)絡(luò)時(shí)是如何運(yùn)算的赏廓。如果語(yǔ)料C和詞向量長(zhǎng)度m給定后,投影層和輸出層的規(guī)模就確定了还绘,投影層的規(guī)模為(n-1)m,而輸出層為N即語(yǔ)料C的詞匯量大小楚昭。而隱藏層的規(guī)模是可調(diào)參數(shù)可任意調(diào)整。
為什么投影層規(guī)模是(n-1)m呢拍顷,因?yàn)檩斎雽邮莕-1個(gè)詞抚太,每個(gè)詞的詞向量長(zhǎng)度為m,輸入層到投影層只是做了一個(gè)簡(jiǎn)單的向量連接操作昔案,所以長(zhǎng)度為(n-1)m尿贫。那么,神經(jīng)網(wǎng)絡(luò)的計(jì)算過(guò)程就很清楚了:
經(jīng)過(guò)上述兩步得到的輸出是一個(gè)長(zhǎng)度為N的向量踏揣,其分量不能表示概率庆亡,我們還需要做一個(gè)softmax歸一化:
上式就給出了概率p(w|context(w))的函數(shù)表示,即得到了上一節(jié)中提到的函數(shù)F捞稿,那么在神經(jīng)概率模型中又谋,待確定的參數(shù)Θ有哪些呢?
上面的參數(shù)都是通過(guò)訓(xùn)練算法得到的娱局。那么神經(jīng)網(wǎng)絡(luò)模型的運(yùn)算量多大呢彰亥?投影層的規(guī)模為(n-1)m,隱藏層的規(guī)模是nh,輸出層的規(guī)模為N:
不難發(fā)現(xiàn)衰齐,整個(gè)模型的大部分計(jì)算集中在隱藏層和輸出層之間的矩陣向量運(yùn)算任斋,以及輸出層上的softmax歸一化運(yùn)算,因此后續(xù)的很多工作耻涛,包括word2vec都是在這一部分上進(jìn)行改進(jìn)的废酷。
那么神經(jīng)網(wǎng)絡(luò)概率模型相比于n-gram的優(yōu)勢(shì)在哪呢瘟檩?主要有以下兩點(diǎn):
1、詞語(yǔ)之間的相似性可以通過(guò)詞向量來(lái)體現(xiàn)
2澈蟆、基于詞向量的模型自帶平滑功能墨辛,不需要進(jìn)行額外的處理