【NLP】Word2Vec详解(含数学推导)
word2vec可以在百萬(wàn)數(shù)量級(jí)的詞典和上億的數(shù)據(jù)集上進(jìn)行高效地訓(xùn)練;并且,該工具得到的訓(xùn)練結(jié)果——詞向量(word embedding),可以很好地度量詞與詞之間的相似性。隨著深度學(xué)習(xí)(Deep Learning)在自然語(yǔ)言處理中應(yīng)用的普及,很多人誤以為word2vec是一種深度學(xué)習(xí)算法。其實(shí)word2vec算法的背后是一個(gè)淺層神經(jīng)網(wǎng)絡(luò)。
另外需要強(qiáng)調(diào)的一點(diǎn)是,word2vec是一個(gè)計(jì)算word vector的開(kāi)源工具。當(dāng)我們?cè)谡f(shuō)word2vec算法或模型的時(shí)候,其實(shí)指的是其背后用于計(jì)算word vector的CBoW模型和Skip-gram模型。很多人以為word2vec指的是一個(gè)算法或模型,這也是一種謬誤。接下來(lái),本文將從統(tǒng)計(jì)語(yǔ)言模型出發(fā),盡可能詳細(xì)地介紹word2vec工具背后的算法模型的來(lái)龍去脈。
Statistical Language Model
在深入word2vec算法的細(xì)節(jié)之前,我們首先回顧一下自然語(yǔ)言處理中的一個(gè)基本問(wèn)題:如何計(jì)算一段文本序列在某種語(yǔ)言下出現(xiàn)的概率?之所為稱(chēng)其為一個(gè)基本問(wèn)題,是因?yàn)樗诤芏郚LP任務(wù)中都扮演著重要的角色。例如,在機(jī)器翻譯的問(wèn)題中,如果我們知道了目標(biāo)語(yǔ)言中每句話的概率,就可以從候選集合中挑選出最合理的句子做為翻譯結(jié)果返回。
統(tǒng)計(jì)語(yǔ)言模型給出了這一類(lèi)問(wèn)題的一個(gè)基本解決框架。對(duì)于一段文本序列
它的概率可以表示為:
即將序列的聯(lián)合概率轉(zhuǎn)化為一系列條件概率的乘積。問(wèn)題變成了如何去預(yù)測(cè)這些給定previous words下的條件概率:
由于其巨大的參數(shù)空間,這樣一個(gè)原始的模型在實(shí)際中并沒(méi)有什么用。我們更多的是采用其簡(jiǎn)化版本一一Ngram模型:
常見(jiàn)的如bigram模型 (N=2) 和trigram模型 (N=3) 。事實(shí)上,由于模型復(fù)雜度和預(yù)測(cè)精度的限制,我們很少會(huì)考慮N>3的模型。我們可以用最大似然法去求解Ngram模型的參數(shù)一一等價(jià)于去統(tǒng)計(jì)每個(gè)Ngram的條件詞頻。型進(jìn)一步發(fā)展出了back-off trigram模型 (用低階的bigram和unigram代替零概率的trigram) 和interpolated trigram模型(將條件 概率表示為unigram、bigram、trigram三者的線性函數(shù))。
Distributed Representation
不過(guò),Ngram模型仍有其局限性。首先,由于參數(shù)空間的爆炸式增長(zhǎng),它無(wú)法處理更長(zhǎng)程的context(N>3)。其次,它沒(méi)有考慮詞與詞之間內(nèi)在的聯(lián)系性。例如,考慮"the cat is walking in the bedroom"這句話。如果我們?cè)谟?xùn)練語(yǔ)料中看到了很多類(lèi)似“the dog is walking in the bedroom”或是“the cat is running in the bedroom”這樣的句子,那么,即使我們沒(méi)有見(jiàn)過(guò)這句話,也可以從“cat”和“dog”(“walking”和“running”)之間的相似性,推測(cè)出這句話的概率。然而, Ngram模型做不到。
這是因?yàn)?#xff0c;Ngram本質(zhì)上是將詞當(dāng)做一個(gè)個(gè)孤立的原子單元(atomic unit)去處理的。這種處理方式對(duì)應(yīng)到數(shù)學(xué)上的形式是一個(gè)個(gè)離散的one-hot向量(除了一個(gè)詞典索引的下標(biāo)對(duì)應(yīng)的方向上是1 ,其余方向上都是0)。例如,對(duì)于一個(gè)大小為5的詞典:{"I", "love", "nature", "luaguage", "processing"},“nature”對(duì)應(yīng)的one-hot向量為:[0,0,1,0,0] 。顯然,one-hot向量的維度等于詞典的大小。這在動(dòng)輒上萬(wàn)甚至百萬(wàn)詞典的實(shí)際應(yīng)用中,面臨著巨大的維度災(zāi)難問(wèn)題(The Curse of Dimensionality)
于是,人們就自然而然地想到,能否用一個(gè)連續(xù)的稠密向量去刻畫(huà)一個(gè)word的特征呢?這樣,我們不僅可以直接刻畫(huà)詞與詞之間的相似度,還可以建立一個(gè)從向量到概率的平滑函數(shù)模型,使得相似的詞向量可以映射到相近的概率空間上。這個(gè)稠密連續(xù)向量也被稱(chēng)為word的distributed representation。
事實(shí)上,這個(gè)概念在信息檢索(Information Retrieval)領(lǐng)域早就已經(jīng)被廣泛地使用了。只不過(guò),在IR領(lǐng)域里,這個(gè)概念被稱(chēng)為向量空間模型(Vector Space Model,以下簡(jiǎn)稱(chēng)VSM)。
VSM是基于一種Statistical Semantics Hypothesis[4]:語(yǔ)言的統(tǒng)計(jì)特征隱藏著語(yǔ)義的信息(Statistical pattern of human word usage can be used to figure out what people mean)。例如,兩篇具有相似詞分布的文檔可以被認(rèn)為是有著相近的主題。這個(gè)Hypothesis有很多衍生版本。其中,比較廣為人知的兩個(gè)版本是Bag of Words Hypothesis和Distributional Hypothesis。前者是說(shuō),一篇文檔的詞頻(而不是詞序)代表了文檔的主題;后者是說(shuō),上下文環(huán)境相似的兩個(gè)詞有著相近的語(yǔ)義。后面我們會(huì)看到,word2vec算法也是基于Distributional的假設(shè)。
那么,VSM是如何將稀疏離散的one-hot詞向量映射為稠密連續(xù)的Distributional Representation的呢?
簡(jiǎn)單來(lái)說(shuō),基于Bag of Words Hypothesis,我們可以構(gòu)造一個(gè)term-document矩陣A:矩陣的行Ai,:: 對(duì)應(yīng)著詞典里的一個(gè)word;矩陣的列A:,j對(duì)應(yīng)著訓(xùn)練語(yǔ)料里的一篇文檔;矩陣?yán)锏脑谹i,j代表著wordwi在文檔Dj中出現(xiàn)的次數(shù)(或頻率)。那么,我們就可以提取行向量做為word的語(yǔ)義向量(不過(guò),在實(shí)際應(yīng)用中,我們更多的是用列向量做為文檔的主題向量)。
類(lèi)似地,我們可以基于Distributional Hypothesis構(gòu)造一個(gè)word-context的矩陣。此時(shí),矩陣的列變成了context里的word,矩陣的元素也變成了一個(gè)context窗口里word的共現(xiàn)次數(shù)。
注意,這兩類(lèi)矩陣的行向量所計(jì)算的相似度有著細(xì)微的差異:term-document矩陣會(huì)給經(jīng)常出現(xiàn)在同一篇document里的兩個(gè)word賦予更高的相似度;而word-context矩陣會(huì)給那些有著相同context的兩個(gè)word賦予更高的相似度。后者相對(duì)于前者是一種更高階的相似度,因此在傳統(tǒng)的信息檢索領(lǐng)域中得到了更加廣泛的應(yīng)用。
不過(guò),這種co-occurrence矩陣仍然存在著數(shù)據(jù)稀疏性和維度災(zāi)難的問(wèn)題。為此,人們提出了一系列對(duì)矩陣進(jìn)行降維的方法(如LSI/LSA等)。這些方法大都是基于SVD的思想,將原始的稀疏矩陣分解為兩個(gè)低秩矩陣乘積的形式。
Neural Network Language Model
接下來(lái),讓我們回到對(duì)統(tǒng)計(jì)語(yǔ)言模型的討論。鑒于Ngram等模型的不足,2003年,Bengio等人發(fā)表了一篇開(kāi)創(chuàng)性的文章:A neural probabilistic language model。在這篇文章里,他們總結(jié)出了一套用神經(jīng)網(wǎng)絡(luò)建立統(tǒng)計(jì)語(yǔ)言模型的框架(Neural Network Language Model,以下簡(jiǎn)稱(chēng)NNLM),并首次提出了word embedding的概念(雖然沒(méi)有叫這個(gè)名字),從而奠定了包括word2vec在內(nèi)后續(xù)研究word representation learning的基礎(chǔ)。
NNLM模型的基本思想可以概括如下:
假定詞表中的每一個(gè)word都對(duì)應(yīng)著一個(gè)連續(xù)的特征向量;
假定一個(gè)連續(xù)平滑的概率模型,輸入一段詞向量的序列,可以輸出這段序列的聯(lián)合概率;
同時(shí)學(xué)習(xí)詞向量的權(quán)重和概率模型里的參數(shù)。
值得注意的一點(diǎn)是,這里的詞向量也是要學(xué)習(xí)的參數(shù)。
在03年的論文里,Bengio等人采用了一個(gè)簡(jiǎn)單的前向反貴神經(jīng)網(wǎng)絡(luò) 來(lái)擬合一個(gè)詞序列的條件概率 。整個(gè)模型的網(wǎng)絡(luò)結(jié)構(gòu)見(jiàn)下圖:
我們可以將整個(gè)模型拆分成兩部分加以理解:
首先是一個(gè)線性的Embedding層。它將輸入的N?1個(gè)one-hot詞向量,通過(guò)一個(gè)共享的D×V的矩陣C,映射為N?1個(gè)分布式的詞向量(distributed vector)。其中,V是詞典的大小,D是Embedding向量的維度(一個(gè)先驗(yàn)參數(shù))。C矩陣?yán)锎鎯?chǔ)了要學(xué)習(xí)的word vector。
其次是一個(gè)簡(jiǎn)單的前向反饋神經(jīng)網(wǎng)絡(luò)g。它由一個(gè)tanh隱層和一個(gè)softmax輸出層組成。通過(guò)將Embedding層輸出的N?1個(gè)詞向量映射為一個(gè)長(zhǎng)度為V的概率分布向量,從而對(duì)詞典中的word在輸入context下的條件概率做出預(yù)估:
我們可以通過(guò)最小化一個(gè)cross-entropy的正則化損失函數(shù)來(lái)調(diào)整模型的參數(shù)\theta:
其中,模型的參數(shù)θ包括了Embedding層矩陣C的元素,和前向反饋神經(jīng)網(wǎng)絡(luò)模型g里的權(quán)重。這是一個(gè)巨大的參數(shù)空間。不過(guò),在用SGD學(xué)習(xí)更新模型的參數(shù)時(shí),并不是所有的參數(shù)都需要調(diào)整(例如未在輸入的context中出現(xiàn)的詞對(duì)應(yīng)的詞向量)。計(jì)算的瓶頸主要是在softmax層的歸一化函數(shù)上(需要對(duì)詞典中所有的word計(jì)算一遍條件概率)。
然而,拋卻復(fù)雜的參數(shù)空間,我們不禁要問(wèn),為什么這樣一個(gè)簡(jiǎn)單的模型會(huì)取得巨大的成功呢?
仔細(xì)觀察這個(gè)模型就會(huì)發(fā)現(xiàn),它其實(shí)在同時(shí)解決兩個(gè)問(wèn)題:一個(gè)是統(tǒng)計(jì)語(yǔ)言模型里關(guān)注的條件概率 的計(jì)算; 一個(gè)是向量空間模型里關(guān)注的詞向量的表達(dá)。而這兩個(gè)問(wèn)題本質(zhì)上并不獨(dú)立。通過(guò)引入連續(xù)的詞向量和平滑的概率模型,我們就可以在一個(gè)連續(xù)空間里對(duì)序列概率進(jìn)行建模,從而從根本上緩解數(shù)據(jù)稀政性和維度災(zāi)難的問(wèn)題。另一方面,以條件概率 為學(xué)習(xí)目標(biāo)去更新 詞向量的權(quán)重, 具有更強(qiáng)的導(dǎo)向性, 同時(shí)也與VSM里的Distributional Hypothesis不謀而合。
在主角正式登場(chǎng)前,我們先看一下NNLM存在的幾個(gè)問(wèn)題。
一個(gè)問(wèn)題是,同Ngram模型一樣,NNLM模型只能處理定長(zhǎng)的序列。在03年的論文里,Bengio等人將模型能夠一次處理的序列長(zhǎng)度N提高到了5,雖然相比bigram和trigram已經(jīng)是很大的提升,但依然缺少靈活性。
因此,Mikolov等人在2010年提出了一種RNNLM模型[7],用遞歸神經(jīng)網(wǎng)絡(luò)代替原始模型里的前向反饋神經(jīng)網(wǎng)絡(luò),并將Embedding層與RNN里的隱藏層合并,從而解決了變長(zhǎng)序列的問(wèn)題。
另一個(gè)問(wèn)題就比較嚴(yán)重了。NNLM的訓(xùn)練太慢了。即便是在百萬(wàn)量級(jí)的數(shù)據(jù)集上,即便是借助了40個(gè)CPU進(jìn)行訓(xùn)練,NNLM也需要耗時(shí)數(shù)周才能給出一個(gè)稍微靠譜的解來(lái)。顯然,對(duì)于現(xiàn)在動(dòng)輒上千萬(wàn)甚至上億的真實(shí)語(yǔ)料庫(kù),訓(xùn)練一個(gè)NNLM模型幾乎是一個(gè)impossible mission。
這時(shí)候,還是那個(gè)Mikolov站了出來(lái)。他注意到,原始的NNLM模型的訓(xùn)練其實(shí)可以拆分成兩個(gè)步驟:
用一個(gè)簡(jiǎn)單模型訓(xùn)練出連續(xù)的詞向量
基于詞向量的表達(dá),訓(xùn)練一個(gè)連續(xù)的Ngram神經(jīng)網(wǎng)絡(luò)模型。
而NNLM模型的計(jì)算瓶頸主要是在第二步。
如果我們只是想得到word的連續(xù)特征向量,是不是可以對(duì)第二步里的神經(jīng)網(wǎng)絡(luò)模型進(jìn)行簡(jiǎn)化呢?
Mikolov是這么想的,也是這么做的。他在2013年一口氣推出了兩篇paper,并開(kāi)源了一款計(jì)算詞向量的工具——至此,word2vec橫空出世,主角閃亮登場(chǎng)。
1 Word2Vec模型總述
Word2Vec 簡(jiǎn)單講其實(shí)就是通過(guò)學(xué)習(xí)文本然后用詞向量的方式表征詞的語(yǔ)義信息,即通過(guò) Embedding 把原先詞所在空間映射到一個(gè)新的空間中去, 使得語(yǔ)義上相似的單詞在該空間內(nèi) 距離相近。以傳統(tǒng)神經(jīng)網(wǎng)絡(luò)為基礎(chǔ)的神經(jīng)概率語(yǔ)言模型,缺點(diǎn)主要是計(jì)算量太大,集中體現(xiàn)在:隱 層和輸出層之間的矩陣運(yùn)算和輸出層上的 Softmax 歸一化運(yùn)算上。因此 Word2Vec 就 是針對(duì)這兩點(diǎn)來(lái)優(yōu)化神經(jīng)概率語(yǔ)言模型的。Word2Vec 中兩個(gè)重要的模型是:CBOW 模 型和 Skip-gram 模型。對(duì)于這兩個(gè)模型, Word2Vec 給出了兩套框架,分別是基于 Hierarchical Softmax 和 Negative Sampling 來(lái)設(shè)計(jì)的,本文硫理的是第一種類(lèi)型。
2 CBOW模型
2.1 基于 模型的網(wǎng)絡(luò)結(jié)構(gòu)CBOW 模型的全稱(chēng)是 Continous bag-of-words,它包括三層結(jié)構(gòu)分別是:輸入層。投影層和輸出層。
輸入層:包含 Context 中 個(gè)詞的詞向量表示詞向量的長(zhǎng)度。
投影層:將輸入層的 個(gè)向量做求和累加處理,即
Sample:
輸出層:輸出層對(duì)應(yīng)一顆 Huffman 樹(shù),它是以語(yǔ)料中出現(xiàn)過(guò)的詞當(dāng)葉子節(jié)點(diǎn),以各詞 在 語(yǔ)料庫(kù)中出現(xiàn)的次數(shù)當(dāng)權(quán)值構(gòu)造而成。在這顆 Huffman 樹(shù)中,葉子結(jié)點(diǎn)共 個(gè) 分別對(duì)應(yīng)詞典 \mathcal 中的詞,非葉結(jié)點(diǎn) 個(gè) (上圖中黃色的結(jié)點(diǎn)) 。
2.2 梯度的計(jì)算為了后續(xù)方便描述問(wèn)題,首先對(duì) 模型中用到的符號(hào)做一個(gè)統(tǒng)一的說(shuō)明:
從根節(jié)點(diǎn)到出發(fā)到達(dá) 對(duì)應(yīng)葉子結(jié)點(diǎn)的路徑;路徑中包含節(jié)點(diǎn)的個(gè)數(shù) 路徑 中的 個(gè)結(jié)點(diǎn), 其中 表示根結(jié)點(diǎn), 表示詞 對(duì)應(yīng)的結(jié)點(diǎn); 其中 詞 對(duì)應(yīng)的 Huffman 編碼, 它由 其中 路徑 中非葉子結(jié)點(diǎn)對(duì)應(yīng)的向量, 表示 路徑 中第 個(gè)非葉子結(jié)點(diǎn)對(duì)應(yīng)的向量。
所以 Hierarchical Softmax 的思想,即對(duì)于詞典 D 中的任意詞 樹(shù)中必然存在唯一一條從根結(jié)點(diǎn)到詞 對(duì)應(yīng)葉子結(jié)點(diǎn)的路徑 。路徑 上存在 個(gè)分支, 將每個(gè)分支看作一次二分類(lèi),那么每一次分類(lèi)就對(duì)應(yīng)一個(gè)概率,最后將這些概率連乘得到
其中 。通過(guò)對(duì)數(shù)極大似然化處理可得 模型的目標(biāo)函數(shù)為:
Word 極大化化目標(biāo)函數(shù)使用的算法是是隨機(jī)梯度上升法, 首先考慮 關(guān) 于 的梯度計(jì)算:
于是, 的更新公式為:
然后再考慮 關(guān)于 的梯度計(jì)算:
如果觀察到 中 和 具有對(duì)稱(chēng)性, 那么計(jì)算相應(yīng)梯度會(huì)更方便。由于 表示的是 Context 中所有詞向量的蛋加, 那么如何根據(jù) 來(lái)更 新每一個(gè)分量 呢? 中的做法非常的樸素, 直接取
2.3 CBOW模型更新相關(guān)參數(shù)偽代碼
FOR
FOR Context DO
3 Skip-gram模型
同 模型一樣, ?Skip-gram 模型的網(wǎng)絡(luò)結(jié)構(gòu)也包括三層結(jié)構(gòu)分別是輸入層、投影 層和輸出層:
輸入層:只含有當(dāng)前樣本的中心詞 的詞向量
投影層:該層為恒等投影,其實(shí)這層可有可無(wú),在這里只是為了方便和 CBOW 模型的網(wǎng)絡(luò) 結(jié)構(gòu)做對(duì)比。
Sample:
輸出層:和 CBOW 模型一樣,輸出層也是一顆 Huffman 樹(shù)。
3.2 梯度的計(jì)算
對(duì)于 Skip-gram 模型已知的是當(dāng)前詞 需要對(duì)其上下文 Context 中的詞進(jìn)行預(yù) 測(cè),所以關(guān)鍵是條件概率函數(shù) 的構(gòu)造, Skip-gram 模型中將其定義 為:
上式中的 可以類(lèi)比上節(jié)介紹的 Hierarchical Softmax 的思想, 因此可得:
通過(guò)對(duì)數(shù)極大似然化處理可得 Skip-gram 模型的目標(biāo)函數(shù)為:
首先考慮 關(guān)于 的梯度計(jì)算:
于是, 的更新公式為:
然咸再考慮 對(duì)關(guān)于 的梯度計(jì)算 亦可根據(jù)對(duì)稱(chēng)性直接得出
于是, 的更新公式為:
3.3 Skip-gram 模型更新相關(guān)參數(shù)偽代碼?FOR Context DO
4 總結(jié) 的基本功能就是把自然語(yǔ)言中的每一個(gè)詞,表示成一個(gè)統(tǒng)一意義統(tǒng)一維度的詞向量,因?yàn)橹挥邪炎匀徽Z(yǔ)言轉(zhuǎn)化為向量的形式,才能在此之上構(gòu)建相關(guān)的算法,至于向量中的每個(gè)維度具體是什么含義,得自己探索了~
往期精彩回顧適合初學(xué)者入門(mén)人工智能的路線及資料下載機(jī)器學(xué)習(xí)及深度學(xué)習(xí)筆記等資料打印機(jī)器學(xué)習(xí)在線手冊(cè)深度學(xué)習(xí)筆記專(zhuān)輯《統(tǒng)計(jì)學(xué)習(xí)方法》的代碼復(fù)現(xiàn)專(zhuān)輯 AI基礎(chǔ)下載機(jī)器學(xué)習(xí)的數(shù)學(xué)基礎(chǔ)專(zhuān)輯獲取一折本站知識(shí)星球優(yōu)惠券,復(fù)制鏈接直接打開(kāi):https://t.zsxq.com/662nyZF本站qq群1003271085。加入微信群請(qǐng)掃碼進(jìn)群(如果是博士或者準(zhǔn)備讀博士請(qǐng)說(shuō)明):總結(jié)
以上是生活随笔為你收集整理的【NLP】Word2Vec详解(含数学推导)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 真香!2020最新版《神经网络与深度学习
- 下一篇: 如何评价英伟达9月2日凌晨发布的30系列