前言
最近又系統(tǒng)的學習了一遍詞向量的一些基礎知識冗酿,鞏固了基礎知識的同時又有了一些新的收貨雏掠,在此想記錄下學習過程中的筆記寄锐,寫的不好的地方請見諒兵多,如有錯誤歡迎指正
一 語言模型
首先我們回顧一些基礎的知識與概念,什么是語言模型呢橄仆?語言模型就是用來預測句子在語言中出現(xiàn)的概率(比如機器翻譯)中鼠,假設一門語言中所有的可能的句子都服從某個概率分布,每個句子出現(xiàn)的概率加起來為1沿癞,語言模型的任務預測每個句子在語言中的概率援雇。傳統(tǒng)的語言模型只會預測句子出現(xiàn)的概率而不會理解句子的含義,沒法告訴我們兩句話的意思是否相似椎扬。
語言模型的計算:
eg: 我? 今天? 下午? 打? 羽毛球
如果使用語言模型計算這句話的概率
其中S為句子惫搏,W表示其中的單詞,P(S)被稱為語言模型蚕涤,用來計算一個句子是句子的概率的模型筐赔,簡單的看就是一個聯(lián)合概率的計算。
如果直接對上式計算有2個缺點揖铜,一是數據過于稀疏茴丰;二是參數空間大(由數據稀疏導致);為了解決這兩個問題我們使用N-gram模型天吓。
二 N-gram模型
為了解決上文中提到了數據稀疏以及參數空間大的問題贿肩,我們基于馬爾科夫的假設(類似齊次馬爾可夫假設):下一個詞的出現(xiàn)依賴于它前面的一個或幾個詞(通常我們說話的過程中的詞只與前幾個詞相關),減少參數空間龄寞。
假設下一個詞的出現(xiàn)依賴它前面的一個詞汰规,則有:
假設下一個詞的出現(xiàn)依賴它前面的兩個詞,則有:
n-gram模型:假設當前詞的出現(xiàn)的概率只與它前面的N-1個詞有關物邑,n=1是我們稱為unigram,n=2時叫做bigram溜哮,n=3時叫做trigram滔金。
如何選擇n:
更大的n:對下一個詞出現(xiàn)的約束信息更多,具有更大的辨別力茂嗓。
更小的n:在訓練語料庫出現(xiàn)的次數更多餐茵,具有更可靠的統(tǒng)計信息,具有更高的可靠性述吸。
構造語言模型:最大似然估計
Count(X)在訓練語料庫單詞序列X在訓練語料中出現(xiàn)的次數忿族。有些序列在實際訓練中不會出現(xiàn),我們使用平滑處理防止概率相乘為0刚梭。
三 詞向量簡介
One-hot representation: 獨熱向量編碼肠阱,對應詞位置為1,其它為0朴读,比較簡單就不多介紹了屹徘。
one-hot向量的缺點:1.語義鴻溝的問題,意思相近的詞計算相似度(比如余弦相似度)為0衅金;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2.維數災難噪伊、稀疏,向量中大多數列為0氮唯,消耗計算資源鉴吹;
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3.無法表示未出現(xiàn)的詞匯;
分布式表示:通過訓練將每個詞(one-hot形式)映射成K維的實數向量惩琉,通過余弦相似度豆励、歐式判斷他們之間的相似度。詞向量的表示的核心瞒渠,利用上下文信息進行詞的表示良蒸,與語言的表現(xiàn)形式無關。
如何訓練詞向量:并沒有直接的模型可以訓練得到分布式表示的詞向量伍玖,可以通過訓練語言模型的同時得到詞向量嫩痰,為了選擇摸個某個模型刻畫目標詞匯與上下文的關系,我們需要在詞向量中抓取到一個詞的上下文信息窍箍,所以構建上下文與目標詞匯的關系串纺,最自然的方式就是使用語言模型。
如何使用語言模型訓練得到詞向量呢椰棘?
我們可以使用NNLM纺棺、RNNLM托享、CBOW和Skip-gram,下面我們來分別介紹一下這幾個模型弓熏。
四 訓練詞向量使用的語言模型
1.NNLM(神經網絡語言模型)
我們使用N-gram模型時,當N取值大時蹋岩,參數會比較稀疏外恕,參數空間大杆逗,計算成本昂貴。我們采用新思路使用模型參數化的方式構造語言模型去完成這個事情鳞疲,我們不在記住所有的概率罪郊,而是用一組參數去描述這個事情,這樣真正需要計算概率的時候只需要把所有的詞喂給模型尚洽,過一遍神經網絡就能拿到這樣一個概率悔橄,所以2003年提出了NNLM神經網絡語言模型(w2v的前身),從語言模型觸發(fā)將模型最優(yōu)化問題轉化為詞向量求解的過程腺毫。
目標函數:
根據前n-1個單詞癣疟,預測第t個位置單詞的概率
使用了非對稱的前向窗函數,窗的長度為n-1
滑動窗口便利整個語料庫求和潮酒,計算量正比于語料庫的大小
概率P滿足歸一化(一般使用softmax)條件睛挚,這樣不同位置t處的概率才能相加及即:
模型結構圖:
我們來簡單介紹一下模型的結構,上述模型其中模型的輸入在訓練的過程中使用詞的ont-hot向量(假設維度為V,V為詞表大小)與我們隨機初始化的一個投影矩陣C(在訓練過程中會不斷更新急黎,假設維度為D)相乘扎狱,假設輸入為3個詞經過映射得到3個詞向量維度為D,然后NNLM會將它們拼接成一個3D維的向量然后經過一個hidden layer(隱層)做全連接(神經元的數量由用戶自己定義在這里我們假設為H),再接上一個輸出層(神經元的數量等于V,詞表的大胁獭)淤击,再做softmax歸一化處理。從結構上來看還是很簡單的故源,模型的每個訓練樣本的計算復雜Q:
其中N為輸入的單詞數
2 RNNLM(循環(huán)神經網絡語言模型)
基于循環(huán)神經網絡的語言模型污抬,所以具有RNN的特性,我們可以充分使用上下文的信息預測單詞
結構圖
結構簡介:w(t)表示第t個時刻的當前輸入單詞绳军,維度假設為V,V是詞典大小印机,one-hot表示。
s(t-1)代表隱層的前一次輸出
y(t)表示模型輸出
計算復雜度:
H為隱層的神經元數
缺點:RNNLM在形式上看起來不錯删铃,但是因為使用了RNN實際難以優(yōu)化(梯度消失耳贬、梯度爆炸等),優(yōu)化不好導致會丟失長距離的信息猎唁,只能記住短距離的信息咒劲,效果可能不如其他模型。
接下來我們介紹一下CBOW與Skip-gram看它們解決了一些什么問題
3 CBOW連續(xù)詞袋模型
Continuous Bag of Words,連續(xù)詞袋模型诫隅,即利用中心詞(Wt)的上下文(context)來預測中心詞(Wt)
結構圖:
目標函數:
特點:
沒有隱層
訓練過程中使用雙向上下文窗口
上下文詞序無關(BOW)
輸入層直接使用低緯稠密向量表示
投影層簡化為求和平均
模型結構介紹:
CBOW可以描述為簡化版的神經網絡語言模型腐魂,計算流程,輸入上下文單詞one-hot表示逐纬,然后經過投影矩陣映射為詞向量加起來求平均蛔屹,再經過一個全連接層維度為詞表大小,在再通過softmax輸出每個詞的概率;計算復雜度:, D為投影矩陣維度豁生, N為輸入單詞數兔毒,其中V我們可以通過分層softmax方法優(yōu)化到對數級別為
可以看出來計算復雜度以及參數數量相較于神經網絡語言模型減少的很多
4 Skip-gram
跳字模型漫贞,是根據中心詞(Wt)來預測周圍的詞,即預測上下文(context)。
結構圖:
目標函數
輸出層:只含當前樣本的中心詞w的詞向量
投影層:恒等投影育叁,為了和CBOW模型對比
輸出層: 和CBOW模型一樣
相比于NNLM,CBOW和Skip-gram使用較少的計算代價就可以獲得質量更高的詞向量迅脐;
但是CBOW和Skip-gram也有自己的缺點:
一是對每個局部上下文窗口單獨訓練,沒有利用包含在全局的共現(xiàn)矩陣中的統(tǒng)計信息豪嗽;而是對多義詞無法很好的表示和處理谴蔑,因為使用了唯一的詞向量; 解決方案Glove:利用全局信息編碼詞向量龟梦,這個我們本文不做討論隐锭。接下來我們來研究一下2個常用的優(yōu)化計算的方法層次softmax以及負采樣。
五 計算優(yōu)化方法
1.?hierarchical-softmax(層次softmax)
一般輸出層計算單詞的概率的計算復雜度為O(V),V為詞表的大小计贰,我們可以使用二叉樹結構來減少計算量钦睡。我們可以把常規(guī)的softmax當做一個深度只有1,葉子節(jié)點為V的樹蹦玫, 計算每一個單詞softmax的概率赎婚, 需要標準化所有的V個葉子節(jié)點,如果我們使用二叉樹來代替這個結構(葉子節(jié)點為單詞)樱溉,我們只需要隨著路徑來找到相應的單詞挣输,不需要考慮其他的葉子節(jié)點;又因為一個標準的二叉樹的深度為所以我們最多只需要計算個節(jié)點的來得到最后的單詞的概率福贞,需要注意的是這里的概率已經被標準化過了撩嚼,所有葉子節(jié)點的概率相加為1, 因為在二叉樹分裂到最后沒有概率丟失挖帘,所以相加為1完丽。更具體一點來說就是我們穿過樹時,我們需要計算出每個節(jié)點向左或者向右時的概率拇舀,因此我們?yōu)槊總€節(jié)點分配一個向量分布表示逻族,相較于普通的softmax我們不再有為每一個單詞的輸出embadding ,反而我們?yōu)槊恳粋€節(jié)點生成一個唯一的向量分布表示,層次softmax的參數數量與普通的softmax差不多骄崩。
我們定義給定節(jié)點n,以及上下文c的條件下節(jié)點向左(或向右)的概率為:
這里的計算與常規(guī)softmax中的計算相同聘鳞;相比于普通softmax上下文向量與整個輸出詞匯向量做點積輸出所有詞的概率,現(xiàn)在計算的是h與每個節(jié)點之間的點積要拂,最后只會輸出一個概率抠璃,其中h為輸入上下文的向量,相反的節(jié)點王座的概率為:
圖例:
cat詞的概率為節(jié)點1向左的概率脱惰、節(jié)點2向右的概率以及節(jié)點5向右的概率乘積搏嗡。
顯然,樹的結構很重要拉一,實際上我們可以使用符號來索引每個幾點采盒,假設0為向左轉旧乞,1為向右轉,比如上圖中的cat可以用011來表示纽甘,balanced 二叉樹的路徑長度為良蛮,假設V=10000,則平均路徑長度為13.3抽碌。在信息論中悍赢,我們可以用13.3來表示每個字的位數。
這里引入信息內容函數货徙, 為概率的負對數
熵 H為語料庫里所有單詞的信息增益:
假設一棵平衡二叉樹左权,V =10000, 所有葉子節(jié)點的概率都相同?
我們可以使用熵來作為每個單詞的平均編碼位數
樹的結構很重要,我們可以根據所有單詞的信息增益來編碼我們的樹結構痴颊,我們可以將信息量較少的單詞采用較短的路徑赏迟。也可以使用單詞的概率,由于某些單詞比其他單詞更有可能出現(xiàn)(比如“the”)蠢棱,因此也可以采用較短的路徑來加快計算锌杀。
簡單總結一下層次softmax與常規(guī)softmax的不同點:
1.輸出層節(jié)點采用二叉樹結構,減少了計算的次數泻仙;
2.只輸出一個概率糕再,常規(guī)softmax輸出所有概率;
3.常規(guī)softmax是將上下文向量與V個(V為詞表大小)輸出詞向量相乘玉转,層次softmax是將上下文向量與V-1個節(jié)點連接相乘
2.負采樣
Negative Sampling也是一種生成詞向量的高效方法突想,我們使用Skip-gram模型舉例,它優(yōu)化的是另一個不同的目標函數究抓;
我們假設是一對單詞還有上下文猾担,
是這對數據屬于訓練數據里的正確的樣本的概率,
相反的?是這對數據為負樣本(即不屬于這個訓練數據里的)的概率
我們假設有個參數控制著他們的概率分布:
我們的目標是找到參數?最大化所有訓練樣本屬于訓練集的概率:
的概率我們可以使用sigmoid函數這樣定義:
其中為上下文對應的輸入詞向量(在skip-gram中就是中心詞通過one-hot映射得到的低緯詞向量)橘茉,為輸出層該詞對應的輸出詞向量
得到最終公式為:
這個公式有一個小問題就是工腋,我們可以通過設置參數使得.這個是很容易實現(xiàn)的我們可以設置對于所有的,當K足夠大時概率就接近1了捺癞,事實上當K約等于40時夷蚊,概率就已經接近1了。
所以我們需要一種技巧來防止所有的向量的值相同髓介,比如可以禁止一些(w,c)的組合出現(xiàn)惕鼓。有一種方法就是給模型提供一些(w,c)組合它們的非常小唐础,比如提供一些(w,c)組合沒有在訓練數據里面出現(xiàn)的箱歧,把它們全部假設為負樣本(negative sampling的名字來源于此矾飞,給模型提供一個負樣本數據集通過隨機采樣獲取)所以我們的目標函數變?yōu)橐韵滦问剑?/p>
其中數據D'為負樣本樣本集合呀邢,D為正樣本集合
假設我們讓?可以得到:
我們需要通過調整參數來最大化這個概率
我們采樣一個正樣本洒沦,一般會采樣K個負樣本有,negative sampling最關鍵的地方在于反向傳播時它更新的過程,相比于常規(guī)的更新所有詞匯集价淌,負采樣只會更新申眼,這個集合上的詞對應的參數,詞匯量的大小變小了蝉衣。所以大大減少了計算量括尸。
參考文章
1.Ef?cientEstimationofWordRepresentationsin VectorSpace CBOW和Skip-gram經典論文
2.word2vec Explained: Deriving Mikolov et al.’s Negative-Sampling Word-Embedding Method 這篇論文詳細講了negative sampling