文本深度表示模型Word2Vec 简介 Word2vec 是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效工具, 其利用深度学习的思想,可以通过训练,把对文本内容的处理简
文本深度表示模型Word2Vec
簡介
Word2vec 是 Google 在 2013 年年中開源的一款將詞表征為實數(shù)值向量的高效工具, 其利用深度學(xué)習(xí)的思想,可以通過訓(xùn)練,把對文本內(nèi)容的處理簡化為 K 維向量空間中的向量運算,而向量空間上的相似度可以用來表示文本語義上的相似度。Word2vec輸出的詞向量可以被用來做很多 NLP 相關(guān)的工作,比如聚類、找同義詞、詞性分析等等。如果換個思路,?把詞當(dāng)做特征,那么Word2vec就可以把特征映射到 K 維向量空間,可以為文本數(shù)據(jù)尋求更加深層次的特征表示?。
Word2vec 使用的是 Distributed representation 的詞向量表示方式。Distributed representation 最早由 Hinton在 1986 年提出[4]。其基本思想是?通過訓(xùn)練將每個詞映射成 K 維實數(shù)向量(K 一般為模型中的超參數(shù)),通過詞之間的距離(比如 cosine 相似度、歐氏距離等)來判斷它們之間的語義相似度.其采用一個?三層的神經(jīng)網(wǎng)絡(luò)?,輸入層-隱層-輸出層。有個核心的技術(shù)是?根據(jù)詞頻用Huffman編碼?,使得所有詞頻相似的詞隱藏層激活的內(nèi)容基本一致,出現(xiàn)頻率越高的詞語,他們激活的隱藏層數(shù)目越少,這樣有效的降低了計算的復(fù)雜度。而Word2vec大受歡迎的一個原因正是其高效性,Mikolov 在論文[2]中指出,一個優(yōu)化的單機版本一天可訓(xùn)練上千億詞。
這個三層神經(jīng)網(wǎng)絡(luò)本身是?對語言模型進行建模?,但也同時?獲得一種單詞在向量空間上的表示?,而這個副作用才是Word2vec的真正目標(biāo)。
與潛在語義分析(Latent Semantic Index, LSI)、潛在狄立克雷分配(Latent Dirichlet Allocation,LDA)的經(jīng)典過程相比,Word2vec利用了詞的上下文,語義信息更加地豐富。
樣例實驗
在服務(wù)器上部署有Word2Vec系統(tǒng),可以試試玩一玩
cd /home/liwei/word2vec/trunk./demo-analogy.sh # Interesting properties of the word vectors (try apple red mango / Paris France Italy)./demo-phrases.sh # vector representation of larger pieces of text using the word2phrase tool./demo-phrase-accuracy.sh # measure quality of the word vectors./demo-classes.sh # Word clustering./distance GoogleNews-vectors-negative300.bin # Pre-trained word and phrase vectors./distance freebase-vectors-skipgram1000-en.bin # Pre-trained entity vectors with Freebase naming詳細使用方法見?官網(wǎng)
模型分析
傳統(tǒng)的統(tǒng)計語言模型是表示語言基本單位(一般為句子)的概率分布函數(shù),這個概率分布也就是該語言的生成模型。一般語言模型可以使用各個詞語條件概率的形式表示:
p(s)=p(w_1^T )=p(w_1,w_2,…,w_T )=∏_t p(w_t |context)Word2vec采用的是__層次化Log-Bilinear語言模型__,其中一種是CBOW(Continuous Bag-of-Words Model)模型,由上下文預(yù)測下一個詞為w_t的公式為:
p(w_t |context)=p(w_t |w_(t-k),w_(t-k+1),…,w_(t-1),w_(t+1),…,w_(t+k-1),w_(t+k))CBOW的計算可以用?層次Softmax算法?,這種算法結(jié)合了Huffman編碼,每個詞 w 都可以從樹的根結(jié)點root沿著唯一一條路徑被訪問到,其路徑也就形成了其編碼code。假設(shè) n(w, j)為這條路徑上的第 j 個結(jié)點,且 L(w)為這條路徑的長度, j 從 1 開始編碼,即 n(w, 1)=root,n(w, L(w)) = w。對于第 j 個結(jié)點,層次 Softmax 定義的Label 為 1 - code[j]。
取一個適當(dāng)大小的窗口當(dāng)做語境,輸入層讀入窗口內(nèi)的詞,將它們的向量(K維,初始隨機)加和在一起,形成隱藏層K個節(jié)點。輸出層是一個巨大的二叉樹,葉節(jié)點代表語料里所有的詞(語料含有V個獨立的詞,則二叉樹有|V|個葉節(jié)點)。而這整顆二叉樹構(gòu)建的算法就是Huffman樹。這樣,對于葉節(jié)點的每一個詞,就會有一個全局唯一的編碼,形如"010011",不妨記左子樹為1,右子樹為0。接下來,隱層的每一個節(jié)點都會跟二叉樹的內(nèi)節(jié)點有連邊,于是對于二叉樹的每一個內(nèi)節(jié)點都會有K條連邊,每條邊上也會有權(quán)值。
對于語料庫中的某個詞w_t,對應(yīng)著二叉樹的某個葉子節(jié)點,因此它必然有一個二進制編碼,如"010011"。在訓(xùn)練階段,當(dāng)給定上下文,要預(yù)測后面的詞w_t的時候,我們就從二叉樹的根節(jié)點開始遍歷,這里的目標(biāo)就是預(yù)測這個詞的二進制編號的每一位。即對于給定的上下文,我們的目標(biāo)是使得預(yù)測詞的二進制編碼概率最大。形象地說,我們希望在根節(jié)點,詞向量和與根節(jié)點相連經(jīng)過logistic計算得到bit=1的概率盡量接近0,在第二層,希望其bit=1的概率盡量接近1,這么一直下去,我們把一路上計算得到的概率相乘,即得到目標(biāo)詞w_t在當(dāng)前網(wǎng)絡(luò)下的概率P(w_t),那么對于當(dāng)前這個sample的殘差就是1-P(w_t),于是就可以使用梯度下降法訓(xùn)練這個網(wǎng)絡(luò)得到所有的參數(shù)值了。顯而易見,按照目標(biāo)詞的二進制編碼計算到最后的概率值就是歸一化的。
Hierarchical Softmax用Huffman編碼構(gòu)造二叉樹,其實借助了分類問題中,使用一連串二分類近似多分類的思想。例如我們是把所有的詞都作為輸出,那么“桔子”、“汽車”都是混在一起。給定w_t的上下文,先讓模型判斷w_t是不是名詞,再判斷是不是食物名,再判斷是不是水果,再判斷是不是“桔子”。
但是在訓(xùn)練過程中,模型會賦予這些抽象的中間結(jié)點一個合適的向量,這個向量代表了它對應(yīng)的所有子結(jié)點。因為真正的單詞公用了這些抽象結(jié)點的向量,所以Hierarchical Softmax方法和原始問題并不是等價的,但是這種近似并不會顯著帶來性能上的損失同時又使得模型的求解規(guī)模顯著上升。
沒有使用這種二叉樹,而是直接從隱層直接計算每一個輸出的概率——即傳統(tǒng)的Softmax,就需要對|V|中的每一個詞都算一遍,這個過程時間復(fù)雜度是O(|V|)的。而使用了二叉樹(如Word2vec中的Huffman樹),其時間復(fù)雜度就降到了O(log2(|V|)),速度大大地加快了。
參考
官方資料
Word2Vec Homepage
Tomas Mikolov, Kai Chen, Greg Corrado, and Jeffrey Dean.?Efficient Estimation of Word Representations in Vector Space. In Proceedings of Workshop at ICLR, 2013
理論資料
Deep Learning實戰(zhàn)之word2vec
Deep Learning in NLP (一)詞向量和語言模型
word2vec傻瓜剖析
實踐資料
利用中文數(shù)據(jù)跑Google開源項目word2vec
分詞工具ANSJ(實例)
Word2vec在事件挖掘中的調(diào)研
總結(jié)
以上是生活随笔為你收集整理的文本深度表示模型Word2Vec 简介 Word2vec 是 Google 在 2013 年年中开源的一款将词表征为实数值向量的高效工具, 其利用深度学习的思想,可以通过训练,把对文本内容的处理简的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Ch2r_ood_understandi
- 下一篇: CCAI 2017 | 香港科技大学计算