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