天天看點

了解Word2vec了解Word2vec一,詞向量

了解Word2vec

一,詞向量

首先需要了解詞向量。

比如有一個城市的詞彙表(北京,上海,甯夏,紐約,巴黎,,,,,南京)One-Hot Encoder按照如下方式:

杭州 [0,0,0,0,0,0,0,1,0,……,0,0,0,0,0,0,0]

上海 [0,0,0,0,1,0,0,0,0,……,0,0,0,0,0,0,0]

甯波 [0,0,0,1,0,0,0,0,0,……,0,0,0,0,0,0,0]

北京 [1,0,0,0,0,0,0,0,0,……,0,0,0,0,0,0,0]

但是使用One-Hot Encoder有以下問題。一方面,城市編碼是随機的,向量之間互相獨立,看不出城市之間可能存在的關聯關系。其次,向量次元的大小取決于語料庫中字詞的多少。如果将世界所有城市名稱對應的向量合為一個矩陣的話,那這個矩陣過于稀疏,并且會造成次元災難。

使用Vector Representations可以有效解決這個問題。Word2Vec可以将One-Hot Encoder轉化為低次元的連續值,也就是稠密向量,并且其中意思相近的詞将被映射到向量空間中相近的位置。如果将embed後的城市向量通過PCA降維後可視化展示出來,那就是這個樣子。

了解Word2vec了解Word2vec一,詞向量

華盛頓和紐約聚集在一起,北京上海聚集在一起,且北京到上海的距離與華盛頓到紐約的距離相近。也就是說模型學習到了城市的地理位置,也學習到了城市地位的關系。

二,Word2vec--具體了解之Word embedding

幹什麼的?

首先有了文本語料庫,你需要對語料庫進行預處理,得到你想要的processed corpus之後,将他們的one-hot向量作為word2vec的輸入,通過word2vec訓練低維詞向量(word embedding)就ok了。

目前有兩種訓練模型(CBOW和Skip-gram),兩種加速算法(Negative Sample與Hierarchical Softmax)。

本文主要用了詞向量,這裡闡述word2vec如何将corpus的one-hot向量(模型的輸入)轉換成低維詞向量(模型的中間産物,更具體來說是輸入權重矩陣)。

2.1 Word2Vec兩種模型

Word2Vec包含了兩種詞訓練模型:CBOW模型和Skip-gram模型。

1)CBOW模型根據中心詞W(t)周圍的詞來預測中心詞

2)Skip-gram模型則根據中心詞W(t)來預測周圍詞

word2vec模型其實就是簡單化的神經網絡。

了解Word2vec了解Word2vec一,詞向量

輸入是One-Hot Vector,Hidden Layer沒有激活函數,也就是線性的單元。Output Layer次元跟Input Layer的次元一樣,用的是Softmax回歸。我們要擷取的dense vector其實就是Hidden Layer的輸出單元。

抛開兩個模型的優缺點不說,它們的結構僅僅是輸入層和輸出層不同。請看:

1)CBOW模型

了解Word2vec了解Word2vec一,詞向量

2)Skip-gram模型

了解Word2vec了解Word2vec一,詞向量

接下來我們具體分析一下CBOW模型的構造,以及詞向量是如何産生的。了解了CBOW模型,Skip-gram模型也就不在話下啦。

2.2 CBOW模型的了解

先來看着這個結構圖,用自然語言描述一下CBOW模型的流程:

了解Word2vec了解Word2vec一,詞向量

CBOW模型結構圖

1) 輸入層:上下文單詞的onehot. {假設單詞向量空間dim為V,上下文單詞個數為C}。

2)所有onehot分别乘以共享的輸入權重矩陣W. {V*N矩陣,N為自己設定的數,初始化權重矩陣W}。

3)所得的向量 {因為是onehot是以為向量} 相加求平均作為隐層向量, size為1*N。

4)乘以輸出權重矩陣W' {N*V}。

5)得到向量 {1*V} 激活函數處理得到V-dim機率分布 {PS: 因為是onehot嘛,其中的每一維鬥代表着一個單詞},機率最大的index所訓示的單詞為預測出的中間詞(target word)。

6)與true label的onehot做比較,誤差越小越好。

是以,需要定義loss function(一般為交叉熵代價函數),采用梯度下降算法更新W和W'。訓練完畢後,輸入層的每個單詞與矩陣W相乘得到的向量的就是我們想要的詞向量(word embedding),這個矩陣(所有單詞的word embedding)也叫做look up table(其實這個look up table就是矩陣W自身),也就是說,任何一個單詞的onehot乘以這個矩陣都将得到自己的詞向量。有了look up table就可以免去訓練過程直接查表得到單詞的詞向量了。

三, 具體例子了解CBOW模型流程

假設我們現在的Corpus是這一個簡單的隻有四個單詞的document:

      {I drink coffee everyday}

我們選coffee作為中心詞,window size設為2。也就是說,我們要根據單詞"I","drink"和"everyday"來預測一個單詞,并且我們希望這個單詞是coffee。

了解Word2vec了解Word2vec一,詞向量

這裡,drink稀疏的表示[0 1 0 0]經過embedding之後變為了稠密的矩陣[2 2 1]。

繼續閱讀