CS224n筆記二:word2vec
如何表示詞語的意思
語言學中meaning近似於“指代,代指,符號”。
計算機中如何處理詞語的意思
過去一直采用分類詞典
,計算語言學中常見的方式時WordNet那樣的詞庫,比如NLTK中可以通過WordNet查詢熊貓的上位詞(hypernums),得到“食肉動物”,“動物”之類的上位詞。也可以查詢“good”的同義詞,如“just”。
離散表示(discrete representation)的問題
這種離散表示並不準確,丟失了些許韻味。如以下同義詞的意思還是有微妙不同的:adept, expert, good, practiced, proficient, skillful
缺少新詞
耗費人力
無法準確計算詞語相似度
大多數NLP學者將詞語作為最小的單位,事實上,詞語只是詞表長度的one-hot向量,這是一種局部表示(localist representation)。在不同的語料中,詞表大小不同,如Google的1TB詞料詞匯量是1300w,這個向量實在過長了。
從符號表示(symbolic representation)到分布式表示(distributed representation)
詞語在符號表示上體現不出意義的相似性,如“motel”和“hotel”,其one-hot向量是正交的,無法通過計算獲得相似度。
Distributional similarity based representations
語言學家J. R. Firth提出,通過一個單詞的上下文可以得到它的意思。J. R. Firth甚至建議,日過能將單詞放到正確的上下文中,才說明掌握了它的意義。這是現代統計自然語言處理最成功的思想之一:
通過向量定義詞語的含義
通過調整一個單詞機器上下文單詞的向量,使得根據兩個向量可以推測兩個單詞的相似度;或者根據兩個向量可以推測詞語的上下文。這種手法是遞歸的,根據向量調整向量。
學習神經網絡word embedings的基本思路
定義一個用來預測某個單詞上下文的模型:
p(context|wt)=…
損失函數定義如下:
J=1-p(w-t|wt)
這裏的w-t表示wt的上下文(-t表示“除了t之外”),如果完美預測,及p(wt
在一個大型的語料庫中的不同位置得到訓練實例,調整詞向量,最小化損失函數。
word2vec的主要思路
通過單詞和上下文預測彼此。
- 兩個算法
- Skip-grams(SG):預測上下文
- Continuous Bag of Words(CBOW):預測目標單詞
- 兩種高效的訓練方法:
- Hierarchical softmax
- Negative sampling
Hierarchical Softmax
模型共同點
無論是哪種模型,其基本網絡結構都是在下圖的基礎上(省略掉hidden layer):
為什麽要去掉hidden layer層呢?因為word2vec的作者認為hidden layer到output layer的矩陣運算太多了,所以兩種模型的網絡結構是:
其中w(t)代表當前詞語位於句子中的位置t,同理定義其他符號,在窗口內(上圖中的窗口大小為5),除了當前詞語之外的其它詞語共同構成上下文。
CBOW
原理:CBOW是一種根據上下文的詞語預測當前詞語出現概率的模型。
CBOW是已知上下文,估算當前詞語的語言模型,其學習目標是最大化對數似然函數:
其中,w表示語料庫C中任意一個次。從上圖可以看出,對於CBOW:
輸入層
是上下文詞語的詞向量(詞向量只是訓練CBOW模型的副產物,是CBOW模型的一個參數。訓練開始時,詞向量是隨機值,隨著訓練的進行不斷被更新)投影層
對其求和,就是簡單的向量加法。輸出層
輸出最可能的w。由於語料庫中的詞匯量是固定的|C|個,所以上述過程可以看作是一個多分類的問題。給定特征,從|C|個分類中挑一個。對於神經網絡模型的多分類,最樸素的做法是softmax回歸:
softmax回歸需要對語料庫中每個詞語(類)都計算一遍輸出概率並進行歸一化,在幾十萬詞匯量的語料上無疑是令人頭疼的。
如果使用SVM中的多分類:
這是一種二叉樹結構,應用到word2vec中被作者稱為Hierarchical Softmax:
上圖輸出層的樹形結構即為Hierarchical Softmax。
非葉子節點相當於一個神經元(感知機,我認為邏輯斯諦回歸就是感知機的輸出代入f(x)=1/(1+e^x)),二分類決策輸出1或0,分別代表向下左轉或向下右轉;每個葉子節點代表語料庫中的一個詞語,於是每個詞語都可以被01唯一地編碼,並且其編碼序列對應一個事件序列,於是我們可以計算條件概率:
在開始計算之前,還是得引入一些符號:
從根結點出發到達w對應葉子結點的路徑.
路徑中包含結點的個數
路徑中的各個節點
詞w的編碼,表示路徑第j個節點對應的編碼(根節點無編碼)
路徑中非葉節點對應的參數向量
可以給出w的條件概率:
?
Skip-gram預測
這裏雖然有四條線,但模型中只有一個條件分布(因為這只是個詞袋模型而已,與位置無關)。學習就是要最大化這些概率。
word2vec細節
目標函數定義為所有位置的預測結果的乘積:
要最大化目標函數。對其取個負對數,得到損失函數——對數似然的相反數:
對於softmax來講,常用的損失函數為交叉熵。
Softmax function:從實數空間到概率分布的標準映射方法
指數函數可以把實數映射成正數,然後歸一化得到概率。
softmax之所叫softmax,是因為指數函數會導致較大的數變得更大,小數變得微不足道;這種選擇作用類似於max函數。
Skipgram
這兩個矩陣都含有V個詞向量,也就是說同一個詞有兩個詞向量,哪個作為最終的、提供給其他應用使用的embeddings呢?有兩種策略,要麽加起來,要麽拼接起來。在CS224n的編程練習中,采取的是拼接起來的策略:
# concatenate the input and output
word vectorswordVectors = np.concatenate(
(wordVectors[:nWords,:], wordVectors[nWords:,:]),
axis=0)
# wordVectors = wordVectors[:nWords,:] + wordVectors[nWords:,:]
他們管W中的向量叫input vector,W‘中的向量叫output vector。從左到右是one-hot向量,乘以center word的W於是找到詞向量,乘以另一個context word的矩陣W‘得到對每個詞語的“相似度”,對相似度取softmax得到概率
訓練模型:計算參數向量的梯度
把所有參數寫進向量θ,對d維的詞向量和大小V的詞表來講,有:
由於上述兩個矩陣的原因,所以θ的維度中有個2。
CS224n筆記二:word2vec