Word2Vec 是 google 在2013年提出的詞向量模型囊扳,通過 Word2Vec 可以用數(shù)值向量表示單詞,且在向量空間中可以很好地衡量兩個單詞的相似性沽损。
1.? 詞向量
讓計算機理解人類的語言是一件很 Cool 的事情令哟,而首先要做的就是將單詞表示成一個數(shù)值向量(稱為詞向量),以方便計算機處理炬太。比較直觀的做法有one-hot 編碼和共現(xiàn)矩陣等。
1.1 one-hot 編碼
one-hot 編碼驯耻,首先構(gòu)造一個容量為 N 的詞匯表亲族,每個單詞可以用一個 N 維的詞向量表示,詞向量中只有單詞在詞匯表的索引處取值為 1可缚,其余為 0霎迫。
one-hot 編碼主要的缺點是:當(dāng)詞匯表的容量變大時,詞向量的特征空間會變得很大帘靡;另外 one-hot 編碼不能區(qū)分單詞之間的相似度知给。
1.2 共現(xiàn)矩陣
還是剛剛的詞匯表,假設(shè)現(xiàn)在語料庫中只有三個句子 “I have a cat”描姚、“cat eat fish”涩赢、“I have a apple”,則可以構(gòu)造出單詞間的共現(xiàn)矩陣?A轰胁。例如 “I” 和 “have” 在兩個句子中共同出現(xiàn)過谒主,因此在?A?中的權(quán)重為 2朝扼;而 “I” 和 “cat“ 只在一個句子中共現(xiàn)赃阀,?A?中權(quán)重為 1 。
矩陣?A?的每一行就代表了一個單詞的詞向量擎颖,與 one-hot 編碼類似榛斯,使用共現(xiàn)矩陣的詞向量的維度也非常大。也可以使用 SVD (奇異值分解) 對?A進行分解搂捧,從而得到更低維度的詞向量驮俗,但是 SVD 算法的時間復(fù)雜度較高,對 n×n 的矩陣進行 SVD 分解的復(fù)雜度為 O(n^3) 允跑。
2. Word2Vec
Word2Vec 是一種淺層神經(jīng)網(wǎng)絡(luò)王凑,包含輸入層?x搪柑,隱藏層?h和輸出層?o。輸入層索烹、輸出層的維度為 N? (詞匯表的大小)工碾,隱藏層維度為 D (詞向量的維度)。輸入層與隱藏層之間的網(wǎng)絡(luò)權(quán)重矩陣為?V(N×D)百姓,輸入層與隱藏層之間的網(wǎng)絡(luò)權(quán)重矩陣為?V'(N×D)渊额。
Word2Vec 輸入層?x?接收單詞 a 的 one-hot 編碼,輸出層?o?計算出所有單詞出現(xiàn)在單詞 a 上下文的概率垒拢,概率用 softmax 計算旬迹。Word2Vec 在語料庫中訓(xùn)練,使單詞出現(xiàn)的條件概率盡可能符合語料庫中的分布求类。訓(xùn)練完后奔垦,神經(jīng)網(wǎng)絡(luò)的權(quán)重向量矩陣?V就是最終的詞向量矩陣,而?V'?是詞作為預(yù)測輸出時的向量矩陣尸疆。
Word2Vec 有兩種模型 CBOW 和 Skip-Gram宴倍,兩種模型的區(qū)別在于 CBOW 使用上下文詞預(yù)測中心詞,而 Skip-Gram 使用中心詞預(yù)測其上下文單詞仓技。圖為 Word2Vec 論文中的 CBOW 和 Skip-Gram 模型圖鸵贬,接下來介紹 Skip-Gram 和 CBOW。
2.1 CBOW
注意下面的描述中?w(x) 表示第 x 個單詞脖捻,v(x) 表示第 x 個單詞對應(yīng)的詞向量, v'(x) 表示預(yù)測輸出時對應(yīng)第 x 個單詞的權(quán)重向量
給定一個句子 [w(1), w(2), w(3), ..., w(T)]阔逼,對于任意一個單詞 w(t),其上下文單詞包括 [w(t-c), ..., w(t-1), w(t+1), ..., w(t+c)]地沮,c 為上下文窗口的大小嗜浮。
CBOW 希望通過上下文單詞 [w(t-c), ..., w(t-1), w(t+1), ..., w(t+c)] 預(yù)測中心詞是 w(t) 的概率,因此輸入到神經(jīng)元的有 2c 個 one-hot 編碼摩疑。實際上是把上下文單詞 [w(t-c), ..., w(t-1), w(t+1), ..., w(t+c)] 對應(yīng)的詞向量的均值傳入神經(jīng)網(wǎng)絡(luò)的隱藏層?h(如下公式)危融,然后計算輸出單詞 w(t) 的概率。
因此對于一個句子 [w(1), w(2), w(3), ..., w(T)]雷袋,CBOW 需要最大化以下目標(biāo)函數(shù)吉殃,其中概率使用 softmax 計算:
2.2 Skip-Gram
Skip-Gram 與 CBOW 不同,給定一個句子 [w(1), w(2), w(3), ..., w(T)]楷怒,對于任意一個中心詞 w(t)蛋勺,需要計算上下文單詞的 [w(t-c), ..., w(t-1), w(t+1), ..., w(t+c)] 的概率。因此需要最大化以下目標(biāo)函數(shù):
3. 優(yōu)化方法
優(yōu)化 CBOW 和 Skip-Gram 都需要計算 softmax鸠删,其中需要在所有單詞上進行求和抱完,效率低下,一般可以采用兩種優(yōu)化方法:Hierarchical softmax 和 Negative sampling刃泡。
3.1 Hierarchical softmax
對于一個 N 分類問題巧娱,softmax 可以求出每一個類的概率碉怔,并且 N 個類的概率之和為1。Hierarchical softmax 簡化了 softmax 的計算禁添,采用二叉樹結(jié)構(gòu) (可以使用霍夫曼樹優(yōu)化)眨层,把一個 N 分類問題轉(zhuǎn)換成 log N 個二分類問題。
其中 n 表示節(jié)點上荡,n(w, j) 表示從根節(jié)點到單詞 w 路徑上的第 j 個節(jié)點趴樱,n(w, 1) 表示從根節(jié)點,L(w) 表示從根節(jié)點到單詞 w 的路徑長度酪捡。
輸入單詞的詞向量為 v(x)叁征,則到達某一節(jié)點 n(w, j) 后往左子樹走和往右子樹走的概率分別為:
而通過單詞 v(x) 觀察到其上下文單詞 w 的概率可以如下計算:
3.2 Negative sampling
Negative sampling 是負采樣算法,給定訓(xùn)練樣本單詞 x 和 x 的上下文單詞 pos逛薇。負采樣算法將 pos 作為 x 的正樣本捺疼,然后從詞匯表中隨機采樣 k 個單詞 neg 構(gòu)成負樣本,然后最大化通過 x 觀察到 pos 的概率永罚,最小化通過 x 觀察到負樣本 neg 的概率啤呼。需要最大化如下目標(biāo)函數(shù):
每個單詞被采樣作為負樣本的概率如下:
4. 總結(jié)
Word2Vec 的優(yōu)點:模型簡單;訓(xùn)練速度快呢袱;訓(xùn)練中會考慮單詞的上下文官扣。
Word2Vec 的缺點:上下文窗口較小,也沒有使用全局的單詞共現(xiàn)信息羞福;每個單詞的詞向量是固定的惕蹄,無法解決一詞多義的問題。
參考文獻
《Distributed Representations of Sentences and Documents》
《Efficient estimation of word representations in vector space》
《word2vec Parameter Learning Explained》