CS224N學習筆記(三)—— 高級詞向量表示

一刁卜、GloVe模型

基于統(tǒng)計的詞向量模型以基于SVD分解技術(shù)的LSA模型為代表啤呼,通過構(gòu)建一個共現(xiàn)矩陣得到隱層的語義向量局服,充分利用了全局的統(tǒng)計信息磷仰。然而這類模型得到的語義向量往往很難把握詞與詞之間的線性關(guān)系(例如著名的King、Queen颁井、Man厅贪、Woman等式)。
基于預測的詞向量模型則以基于神經(jīng)網(wǎng)絡的Skip-gram模型為代表雅宾,通過預測一個詞出現(xiàn)在上下文里的概率得到embedding詞向量养涮。這類模型的缺陷在于其對統(tǒng)計信息的利用不充分,訓練時間與語料大小息息相關(guān)秀又。不過单寂,其得到的詞向量能夠較好地把握詞與詞之間的線性關(guān)系贬芥,因此在很多任務上的表現(xiàn)都要略優(yōu)于SVD模型吐辙。

既然兩種模型各有優(yōu)劣,那么能不能二者各取其長蘸劈,構(gòu)造一個更強大的詞向量模型呢昏苏?

在GloVe的原始論文里,作者首先分析了Skip-gram模型能夠挖掘出詞與詞之間線性關(guān)系的背后成因,然后通過在共現(xiàn)矩陣上構(gòu)造相似的條件贤惯,得到一個基于全局信息的詞向量模型——GloVe模型洼专。

1.1 統(tǒng)計共現(xiàn)矩陣

共出矩陣其實很容易理解,假設現(xiàn)在有共現(xiàn)矩陣為 X孵构,則 X_i,j 的意義就是在整個語料庫中屁商,單詞 i 和單詞 j 共同出現(xiàn)在一個窗口中的次數(shù)。

例如有語料庫:i love you but you love him i am sad

這個小小的語料庫只有1個句子颈墅,涉及到7個單詞:i蜡镶、love、you恤筛、but官还、him、am毒坛、sad望伦。
如果我們采用一個窗口寬度為5(左右長度都為2)的統(tǒng)計窗口,那么就有以下窗口內(nèi)容:

以窗口5為例說明如何構(gòu)造共現(xiàn)矩陣:
中心詞為love煎殷,語境詞為but屯伞、you、him豪直、i愕掏,則:

使用窗口將整個語料庫遍歷一遍,即可得到共現(xiàn)矩陣X顶伞。

1.2 使用GloVe模型的原理

如果想利用全局的統(tǒng)計信息的話饵撑,那么必然需要將其納入到詞向量的訓練過程中,最直接的方法當然是構(gòu)建包含全局統(tǒng)計信息的損失函數(shù)唆貌。那么滑潘,該如何構(gòu)建呢?

首先我們考慮共現(xiàn)矩陣的信息能不能用另外的方式來表示锨咙,使得我們可以通過網(wǎng)絡學習语卤。

如上面的共現(xiàn)矩陣表示形式,X_{i,k}表示了詞 k 和 詞 i 所在的上下文中出現(xiàn)的次數(shù)酪刀,X_i 表示以詞i為中心的上下文的所有詞粹舵,那么我們就可以得到:

單詞k出現(xiàn)在單詞i語境中的概率

使用同樣的計算過程,我們可以得到單詞 k 出現(xiàn)在單詞 j語境中的概率骂倘。通過將兩個概率相除眼滤,便可以得到如下結(jié)果:



通過研究最后一行的可以看出,這個比值很好地反應了詞之間的關(guān)系:

也就是說历涝,只要我們使用網(wǎng)絡诅需,讓其學習這個概率漾唉,那么最后學習得到的詞向量也就包含了共現(xiàn)矩陣的全局統(tǒng)計信息。

所以堰塌,現(xiàn)在的問題也就轉(zhuǎn)化成了如何用網(wǎng)絡或者說設計損失函數(shù)學習這一規(guī)律赵刑。

由這些信息直接構(gòu)建損失函數(shù)有點困難,那么干脆我們由果索因场刑,如果我們有這么一個網(wǎng)絡可以做到我們所設想的事情般此,那么它比如可以寫出如下的式子:

g函數(shù)就是我們的網(wǎng)絡,也就是說牵现,我們最后學到網(wǎng)絡必然應該使得上式盡可能成立恤煞。那么,最自然的想法就是用差值來衡量兩者的相近程度:

但這樣的包含3個單詞的損失函數(shù)是極難訓練的施籍,所以比如需要對g函數(shù)做一定的優(yōu)化居扒。

首先考慮的是 v_i, v_j 直接的關(guān)系,可以想象由于 v_iv_j 之間的差異才會使得上述規(guī)律存在丑慎,那么網(wǎng)絡在學習用 v_i喜喂、v_jv_k 作為輸入得到 ratio_i,j,k 時,必然會學習 v_i, v_j之間的差異竿裂,那么我們直接先用式子表示出v_i,v_j之間的差異不就可以減少網(wǎng)絡學習的難度了嗎玉吁?

由于詞向量具有線性關(guān)系,也就是說向量空間是內(nèi)在的線性結(jié)構(gòu)腻异,所以表示 v_i, v_j 之間的差異最自然有效的方法就是做差进副。(PS:其實我覺得這邊做差其實也就是為了簡單,因為神經(jīng)網(wǎng)絡是一個很強的非線性模型悔常,所以其完全可以在學習過程中修正只是做差所帶來的差異影斑。也就是說,我們這邊做差只是幫網(wǎng)絡簡化了其學習過程机打,否則它可能還要試試更多的四則運算從而才能找到最后的結(jié)果矫户。與其這樣,不如我們直接就給出一個相對比較正確的差異表示方法残邀,從而節(jié)省一些沒必要的嘗試過程)

又因為考慮到 ratio_{i,j,k} 是一個標量皆辽,而 v_iv_jv_k 都是向量芥挣,那么從向量到標量最直接的方法也就是點乘:

這樣我們也就表示出來g函數(shù)驱闷,但是仔細一看,這個損失函數(shù)還是很難訓練空免。那么接著考慮空另,我們可以看出 ratio_{i,j,k} 是一個除法結(jié)構(gòu),那么作為等式的另一邊鼓蜒,必然也應該可以表示成這樣的除法結(jié)構(gòu)痹换。于是考慮通過引入exp函數(shù)做到這樣的操作:

然后就發(fā)現(xiàn)找到簡化方法了:只需要讓上式分子對應相等,分母對應相等都弹。

通過觀察可以發(fā)現(xiàn)娇豫,分子分母的形式是相似的,也就是說我們完全可以通過統(tǒng)一的形式來學習:

注意:這邊下標表示替換了一下畅厢,與上面的表示方法并不相同冯痢,不要對號入座

通過對兩邊去對數(shù),我們可以將損失函數(shù)簡化成:

但仔細深究就會發(fā)現(xiàn)這個損失函數(shù)是有問題的框杜,由上述推導可以得到:

對于這樣的向量乘法來說浦楣,互換下標不會改變其最后的結(jié)果,但P互換則不相等咪辱。我們將P_{i,j}展開可以得到:

我們發(fā)現(xiàn)前一項剛好下標互換不會改變結(jié)果振劳,那么我們可以學習這一項:

于是損失函數(shù)就變成了:

該損失函數(shù)的一個主要缺點為它認為所有的共現(xiàn)詞權(quán)重相等,即使很少出現(xiàn)或沒有出現(xiàn)的詞油狂,所以為了克服這一缺點历恐,使用了加權(quán)最小二乘回歸模型。也就是說基于出現(xiàn)頻率越高的詞對其權(quán)重應該越大的原則专筷,在損失函數(shù)中添加權(quán)重項弱贼,于是代價函數(shù)進一步完善:

具體權(quán)重函數(shù)應該是怎么樣的呢?
首先應該是非減的磷蛹,其次當詞頻過高時吮旅,權(quán)重不應過分增大,作者通過實驗確定權(quán)重函數(shù)為:


二味咳、fastText 模型

寫在前面的話:fastText的分類模型和詞向量訓練模型是不一樣的庇勃,網(wǎng)上很多博客把分類模型作為詞向量訓練模型來講(PS:本人就被誤導得很慘,幸好及時發(fā)現(xiàn))

2.1 基本原理

fastText的詞向量訓練模型并不復雜槽驶,就是在原來的word2vec上加入的子詞信息匪凉,理解了子詞,基本上fastText的詞向量訓練模型就掌握了捺檬。(子詞其實在后面的詞向量模型和NLP預訓練模型中都有用到)

什么是子詞呢再层?例如對于where這個詞,如果我們對這一個詞使用n-gram模型堡纬,那么若n為3時聂受,我們可以得到<wh, whe, her, ere, re>(fasttext模型中會對一次詞添加上<>符號,也就是說原來的where這個詞在fastText的表示中會變成<where>的形式)烤镐。另外蛋济,其實還會再加上整個詞<where>作為一個特殊的子詞。也就是說炮叶,在訓練詞向量的時候碗旅,每一個詞都會變成一個子詞集合加入訓練渡处,而不是原來單詞的一個詞。最后在表示一個詞的詞向量時祟辟,通過將子詞向量直接加和即可得到詞向量医瘫。

其訓練過程基本和之前的word2vec一致,雖然同樣可以采用cbow和skip-gram兩種方式旧困,但官方提到在實踐過程中skip-gram模型對于子詞信息的處理比cbow更好:

在對fine進行詞向量訓練時

但是對每個詞都加入其子詞信息會導致所需資源過多醇份,為了有效地減小子詞規(guī)模,fastText使用hash映射的方法吼具,這也是一種常用的trick僚纷,這里就不展開介紹了,有興趣可以參考:Hash Trick

2.2 子詞

fastText的詞向量訓練模型和傳統(tǒng)word2vec模型最大的不同就是在子詞的引入上拗盒,那么子詞信息的引入可以帶來什么優(yōu)勢呢怖竭?

首先,自然是對詞的結(jié)構(gòu)的學習陡蝇∏肿矗考慮到詞根、詞形等特殊結(jié)構(gòu)毅整,如果和傳統(tǒng)的word2vec一樣只將詞作為一個整體來學習趣兄,那么就很容易丟失掉這些信息,這是相當可惜的悼嫉。另外艇潭,由于是通過對一個詞使用n-gram模型得到子詞之后再得到的詞向量,所以若在實際使用中出現(xiàn)一個從未出現(xiàn)過的詞戏蔑,便可通過這個新詞的子詞組合來獲得詞向量蹋凝。


參考:

  1. CS224n筆記3 高級詞向量表示
  2. http://www.ijiandao.com/2b/baijia/89997.html
  3. https://blog.csdn.net/sinat_26917383/article/details/54847240
  4. http://www.reibang.com/p/2acc49549af6
  5. glove 學習筆記
  6. word2vec以及GloVe總結(jié)
  7. https://www.cnblogs.com/iloveai/p/cs224d-lecture3-note.html
  8. https://fasttext.cc/docs/en/unsupervised-tutorial.html
  9. 論文:Enriching Word Vectors with Subword Information
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市总棵,隨后出現(xiàn)的幾起案子鳍寂,更是在濱河造成了極大的恐慌,老刑警劉巖情龄,帶你破解...
    沈念sama閱讀 216,692評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件迄汛,死亡現(xiàn)場離奇詭異,居然都是意外死亡骤视,警方通過查閱死者的電腦和手機鞍爱,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,482評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來专酗,“玉大人睹逃,你說我怎么就攤上這事〉豢希” “怎么了沉填?”我有些...
    開封第一講書人閱讀 162,995評論 0 353
  • 文/不壞的土叔 我叫張陵疗隶,是天一觀的道長。 經(jīng)常有香客問我翼闹,道長斑鼻,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,223評論 1 292
  • 正文 為了忘掉前任橄碾,我火速辦了婚禮卵沉,結(jié)果婚禮上颠锉,老公的妹妹穿的比我還像新娘法牲。我一直安慰自己,他們只是感情好琼掠,可當我...
    茶點故事閱讀 67,245評論 6 388
  • 文/花漫 我一把揭開白布拒垃。 她就那樣靜靜地躺著,像睡著了一般瓷蛙。 火紅的嫁衣襯著肌膚如雪悼瓮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,208評論 1 299
  • 那天艰猬,我揣著相機與錄音横堡,去河邊找鬼。 笑死冠桃,一個胖子當著我的面吹牛命贴,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播食听,決...
    沈念sama閱讀 40,091評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼胸蛛,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了樱报?” 一聲冷哼從身側(cè)響起葬项,我...
    開封第一講書人閱讀 38,929評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎迹蛤,沒想到半個月后民珍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,346評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡盗飒,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,570評論 2 333
  • 正文 我和宋清朗相戀三年穷缤,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片箩兽。...
    茶點故事閱讀 39,739評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡津肛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出汗贫,到底是詐尸還是另有隱情身坐,我是刑警寧澤秸脱,帶...
    沈念sama閱讀 35,437評論 5 344
  • 正文 年R本政府宣布,位于F島的核電站部蛇,受9級特大地震影響摊唇,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜涯鲁,卻給世界環(huán)境...
    茶點故事閱讀 41,037評論 3 326
  • 文/蒙蒙 一剩盒、第九天 我趴在偏房一處隱蔽的房頂上張望啤斗。 院中可真熱鬧,春花似錦、人聲如沸烤蜕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,677評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽晓锻。三九已至,卻和暖如春肩祥,著一層夾襖步出監(jiān)牢的瞬間后室,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,833評論 1 269
  • 我被黑心中介騙來泰國打工混狠, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留岸霹,地道東北人。 一個月前我還...
    沈念sama閱讀 47,760評論 2 369
  • 正文 我出身青樓将饺,卻偏偏與公主長得像贡避,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俯逾,可洞房花燭夜當晚...
    茶點故事閱讀 44,647評論 2 354

推薦閱讀更多精彩內(nèi)容