Word2Vec模型中,主要有Skip-Gram和CBOW兩種模型,從直觀上理解,Skip-Gram是給定input word來預(yù)測上下文。而CBOW是給定上下文,來預(yù)測input word。
Skip-Gram的實現(xiàn)邏輯類似于自編碼器,模型的輸出不是最終結(jié)果,隱層構(gòu)成的向量才是所要的vector。
以句子The quick brown fox jumps over the lazy dog為例,實現(xiàn)過程為
1 選定詞語fox作為input-word
2 定義skip-window作為input-word的上下文范圍,如skip-window=2,fox的上下文為quick,brown, jumps, over,組成的樣本對(fox,quick),(fox,brown), (fox,jumps), (fox,over)。定義窗口中選取的樣本對個數(shù)num-skips,如果num-skips=2,skip-window=2,則從四組樣本中隨機選取兩組作為樣本。

3 對樣本word進(jìn)行編碼,如one-hot編碼。
4 定義網(wǎng)絡(luò)。假設(shè)總詞匯量是5000,則輸入維度設(shè)為5000維,輸出維度同樣是5000維,表示每一個單詞的概率。隱層可以設(shè)置為100(在Python的gensim包中封裝的Word2Vec接口默認(rèn)的詞向量大小為100, window_size為5)。
6 訓(xùn)練得到網(wǎng)絡(luò)參數(shù),把輸出層去掉,隱層作為輸出層,輸入單詞,即可得到對應(yīng)向量。?
直觀上理解,如果兩個不同的單詞有著非常相似的“上下文”(也就是窗口單詞很相似,比如“Kitty climbed the tree”和“Cat climbed the tree”),那么通過我們的模型訓(xùn)練,這兩個單詞的嵌入向量將非常相似。