一、詞嵌入/詞向量為什麼可行
一句話概括就是:一個詞的語義由其上下文的單詞決定。
word vectors ==word embeddings ==word representations.
They are a distributed representation
二、Word2vec的兩種算法
2.1 CBOW
用上下文的單詞預測中心詞,假設window size = 2:
在每個position t = 1,……,T,window size = m, 求已知上下文的單詞,預測中心詞出現的概率的似然:
2.1.2 計算
為了簡化計算,我們假設每個詞代表的向量一共有兩個,一個是作為中心詞的詞向量,一個是作為上下文單詞時的詞向量。將單詞表裡的詞對應的詞向量組合成矩陣:
由於向量內積的幾何含義就是一個向量投影到另一個向量上的大小,越大,兩個向量相似度越高;越小,兩個向量的相似度越低:
由於單詞表的單詞數量是有限個,因此要對概率歸一化,這裡就用到了softmax函數:
2.2 Skip-grams
用中心詞預測上下文的單詞,假設window size = 2:
在每個position t = 1,……,T,window size = m, 求已知上下文的單詞,預測中心詞出現的概率的似然:
損失函數:
2.2.1 程序實現思想——skip-gram
2.2.1.1 生成batch:X,y(以skip-gram為例,那麼就是輸入是中心詞,輸出是上下文單詞的概率)
skip_window:窗口的大小,即window size
num_skips:代表著我們從整個窗口中選取多少個不同的詞
例子:batch_size = 4; skip_window = 2; num_skip = 1:
2.2.1.2 前向傳播——這裡Word2vec討了個巧,利用深度學習的宏觀意義上的編碼器解決了更新參數theta的方法:
注:1、為什麼要將單詞表向量化?
總結前向傳播
2.2.1.3 計算loss
求此損失函數等價於計算輸出的交叉熵:
2.2.1.4 梯度下降更新那兩個詞向量矩陣
參數更新:
三、後期計劃:
1、程序實現展示;
2、梯度下降參數更新的優化
四、參考:
1、斯坦福cs224n
2、Chris McCormick 的blog
http://mccormickml.com/2016/04/19/word2vec-tutorial-the-skip-gram-model/