CS224n笔记二:word2vec
如何表示詞語的意思
語言學中meaning近似于“指代,代指,符號”。
計算機中如何處理詞語的意思
過去一直采用分類詞典,計算語言學中常見的方式時WordNet那樣的詞庫,比如NLTK中可以通過WordNet查詢熊貓的上位詞(hypernums),得到“食肉動物”,“動物”之類的上位詞。也可以查詢“good”的同義詞,如“just”。
離散表示(discrete representation)的問題
這種離散表示并不準確,丟失了些許韻味。如以下同義詞的意思還是有微妙不同的:adept, expert, good, practiced, proficient, skillful
缺少新詞
耗費人力
無法準確計算詞語相似度
大多數(shù)NLP學者將詞語作為最小的單位,事實上,詞語只是詞表長度的one-hot向量,這是一種局部表示(localist representation)。在不同的語料中,詞表大小不同,如Google的1TB詞料詞匯量是1300w,這個向量實在過長了。
從符號表示(symbolic representation)到分布式表示(distributed representation)
詞語在符號表示上體現(xiàn)不出意義的相似性,如“motel”和“hotel”,其one-hot向量是正交的,無法通過計算獲得相似度。
Distributional similarity based representations
語言學家J. R. Firth提出,通過一個單詞的上下文可以得到它的意思。J. R. Firth甚至建議,日過能將單詞放到正確的上下文中,才說明掌握了它的意義。這是現(xiàn)代統(tǒng)計自然語言處理最成功的思想之一:
通過向量定義詞語的含義
通過調整一個單詞機器上下文單詞的向量,使得根據(jù)兩個向量可以推測兩個單詞的相似度;或者根據(jù)兩個向量可以推測詞語的上下文。這種手法是遞歸的,根據(jù)向量調整向量。
學習神經(jīng)網(wǎng)絡word embedings的基本思路
定義一個用來預測某個單詞上下文的模型:
p(context|wt)=…
損失函數(shù)定義如下:
J=1-p(w-t|wt)
這里的w-t表示wt的上下文(-t表示“除了t之外”),如果完美預測,及p(wt)=1,損失函數(shù)等于0。
在一個大型的語料庫中的不同位置得到訓練實例,調整詞向量,最小化損失函數(shù)。
word2vec的主要思路
通過單詞和上下文預測彼此。
- 兩個算法
- Skip-grams(SG):預測上下文
- Continuous Bag of Words(CBOW):預測目標單詞
- 兩種高效的訓練方法:
- Hierarchical softmax
- Negative sampling
Hierarchical Softmax
模型共同點
無論是哪種模型,其基本網(wǎng)絡結構都是在下圖的基礎上(省略掉hidden layer):
為什么要去掉hidden layer層呢?因為word2vec的作者認為hidden layer到output layer的矩陣運算太多了,所以兩種模型的網(wǎng)絡結構是:
其中w(t)代表當前詞語位于句子中的位置t,同理定義其他符號,在窗口內(nèi)(上圖中的窗口大小為5),除了當前詞語之外的其它詞語共同構成上下文。
CBOW
原理:CBOW是一種根據(jù)上下文的詞語預測當前詞語出現(xiàn)概率的模型。
CBOW是已知上下文,估算當前詞語的語言模型,其學習目標是最大化對數(shù)似然函數(shù):
其中,w表示語料庫C中任意一個次。從上圖可以看出,對于CBOW:
輸入層是上下文詞語的詞向量(詞向量只是訓練CBOW模型的副產(chǎn)物,是CBOW模型的一個參數(shù)。訓練開始時,詞向量是隨機值,隨著訓練的進行不斷被更新)
投影層對其求和,就是簡單的向量加法。
輸出層輸出最可能的w。由于語料庫中的詞匯量是固定的|C|個,所以上述過程可以看作是一個多分類的問題。給定特征,從|C|個分類中挑一個。
對于神經(jīng)網(wǎng)絡模型的多分類,最樸素的做法是softmax回歸:
softmax回歸需要對語料庫中每個詞語(類)都計算一遍輸出概率并進行歸一化,在幾十萬詞匯量的語料上無疑是令人頭疼的。
如果使用SVM中的多分類:
這是一種二叉樹結構,應用到word2vec中被作者稱為Hierarchical Softmax:
上圖輸出層的樹形結構即為Hierarchical Softmax。
非葉子節(jié)點相當于一個神經(jīng)元(感知機,我認為邏輯斯諦回歸就是感知機的輸出代入f(x)=1/(1+e^x)),二分類決策輸出1或0,分別代表向下左轉或向下右轉;每個葉子節(jié)點代表語料庫中的一個詞語,于是每個詞語都可以被01唯一地編碼,并且其編碼序列對應一個事件序列,于是我們可以計算條件概率:
在開始計算之前,還是得引入一些符號:
從根結點出發(fā)到達w對應葉子結點的路徑.
路徑中包含結點的個數(shù)
路徑中的各個節(jié)點
詞w的編碼,表示路徑第j個節(jié)點對應的編碼(根節(jié)點無編碼)
路徑中非葉節(jié)點對應的參數(shù)向量
可以給出w的條件概率:
?
Skip-gram預測
這里雖然有四條線,但模型中只有一個條件分布(因為這只是個詞袋模型而已,與位置無關)。學習就是要最大化這些概率。
word2vec細節(jié)
目標函數(shù)定義為所有位置的預測結果的乘積:
要最大化目標函數(shù)。對其取個負對數(shù),得到損失函數(shù)——對數(shù)似然的相反數(shù):
對于softmax來講,常用的損失函數(shù)為交叉熵。
Softmax function:從實數(shù)空間到概率分布的標準映射方法
指數(shù)函數(shù)可以把實數(shù)映射成正數(shù),然后歸一化得到概率。
softmax之所叫softmax,是因為指數(shù)函數(shù)會導致較大的數(shù)變得更大,小數(shù)變得微不足道;這種選擇作用類似于max函數(shù)。
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得到概率
訓練模型:計算參數(shù)向量的梯度
把所有參數(shù)寫進向量θ,對d維的詞向量和大小V的詞表來講,有:
由于上述兩個矩陣的原因,所以θ的維度中有個2。
轉載于:https://www.cnblogs.com/mengnan/p/9307587.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的CS224n笔记二:word2vec的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux系统安装证书(ubuntu、c
- 下一篇: JS 常用函数一(弹对话框、操作HTML