《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 業(yè)界動(dòng)態(tài) > 深度 | 自然語言處理的一大步,,應(yīng)用Word2Vec模型學(xué)習(xí)單詞向量表征

深度 | 自然語言處理的一大步,,應(yīng)用Word2Vec模型學(xué)習(xí)單詞向量表征

2018-08-01
關(guān)鍵詞: 自然語言 編碼 Word2Vec

在常見的自然語言處理系統(tǒng)中,單詞的編碼是任意的,因此無法向系統(tǒng)提供各個(gè)符號(hào)之間可能存在關(guān)系的有用信息,,還會(huì)帶來數(shù)據(jù)稀疏問題,。使用向量對(duì)詞進(jìn)行表示可以克服其中的一些障礙,。本文通過推理,、范例及數(shù)學(xué)公式介紹了從原始文本中學(xué)習(xí)「詞嵌入」的模型 Word2Vec。該模型通常用在預(yù)處理階段,,可以提高計(jì)算效率,。

微信圖片_20180801154320.jpg



讓我們用推理、范例及數(shù)學(xué)公式來介紹 Word2Vec


引言


Word2Vec 模型用于學(xué)習(xí)被稱為「詞嵌入」的單詞向量表示,,通常用在預(yù)處理階段,,之后,學(xué)習(xí)到的詞向量可以被輸入到一個(gè)判別模型(通常是一個(gè) RNN)中,,進(jìn)而生成預(yù)測(cè)或被用于處理其他有趣的任務(wù),。


為什么要學(xué)習(xí)詞的嵌入表示


圖像和音頻處理系統(tǒng)與豐富的高維數(shù)據(jù)集一起工作,其處理的圖像數(shù)據(jù)被編碼為各個(gè)原始像素強(qiáng)度的向量,,因此所有信息都被編碼在數(shù)據(jù)中,,從而可以很容易地建立起系統(tǒng)中各種實(shí)體之間的關(guān)系(比如貓和狗)。


但是,,在常見的自然語言處理系統(tǒng)中,,單詞被視為離散的原子符號(hào),因此」貓」可以被表示為 Id537 而」狗」可以被表示為 Id143,。這些編碼是任意的,,因而無法向系統(tǒng)提供各個(gè)符號(hào)之間可能存在關(guān)系的有用信息。這意味著該模型在處理關(guān)于「狗」的數(shù)據(jù)時(shí)無法充分利用關(guān)于「貓」的知識(shí)(例如它們都是動(dòng)物,、寵物,、有四只腳等)。


將單詞表示為獨(dú)特,、離散的序列號(hào)還會(huì)導(dǎo)致數(shù)據(jù)稀疏問題,,這通常意味著我們可能需要更多數(shù)據(jù)才能成功地訓(xùn)練統(tǒng)計(jì)模型,而使用向量對(duì)詞進(jìn)行表示可以克服其中的一些障礙,。


舉例來說:


傳統(tǒng)的自然語言處理方法涉及到許多語言學(xué)本身的知識(shí),。理解諸如音素和語素之類的術(shù)語是相當(dāng)基礎(chǔ)和必要的,,因?yàn)橛性S多語言學(xué)分支致力于這樣的研究。我們來看看傳統(tǒng)的自然語言處理如何試圖理解下面的單詞,。


假設(shè)我們的目標(biāo)是收集關(guān)于這個(gè)詞的一些信息(表征它的情感,,找到它的定義等)。利用我們的語言學(xué)知識(shí)可以將這個(gè)詞分解成 3 個(gè)部分,。



微信圖片_20180801154346.jpg

微信圖片_20180801154418.jpg

深度學(xué)習(xí)最基本的層次是表示學(xué)習(xí),。在這里,我們將通過相同方法在大規(guī)模數(shù)據(jù)集上為單詞構(gòu)建向量表示,。


詞向量


微信圖片_20180801154447.jpg


我們把每一個(gè)單詞表示為一個(gè) d 維的向量,。在這里 d=6。我們希望根據(jù)這個(gè)句子,,為每一個(gè)單獨(dú)的詞構(gòu)建它的向量表示,。


微信圖片_20180801154520.jpg


現(xiàn)在讓我們來思考一下如何填充這些值,。我們希望這些值能夠一定程度上表示這個(gè)單詞和它的上下文,、含義或語義信息。一種方法是構(gòu)建共現(xiàn)矩陣,。


共現(xiàn)矩陣包含了語料庫(或訓(xùn)練集)中每一個(gè)單詞同出現(xiàn)在它后一個(gè)單詞的統(tǒng)計(jì)信息,。下表是上面所示句子的共現(xiàn)矩陣。


微信圖片_20180801154613.jpg

微信圖片_20180801154646.jpg



通過這個(gè)簡(jiǎn)單的矩陣,,我們能夠獲得非常有用的信息,。例如,「love」和「like」這兩個(gè)詞對(duì)名詞(NLP 和 dogs)的計(jì)數(shù)都是 1,。他們對(duì)「I」的計(jì)數(shù)也是 1,,這表明這些詞很可能是某種動(dòng)詞。對(duì)于遠(yuǎn)比一個(gè)句子更大的數(shù)據(jù)集,,可以預(yù)料的是這種相似性會(huì)體現(xiàn)得更加清晰,,因?yàn)椤竘ike」、」love」和其他具有相似上下文的同義詞將開始具有相似的向量表示,。


這是一個(gè)好的開始,,但應(yīng)該注意每個(gè)單詞的維度將隨著語料庫的大小線性增加。如果我們有一百萬詞(在自然語言處理任務(wù)中并不算很多),,我們將會(huì)得到一個(gè)一百萬乘一百萬的非常稀疏(有很多 0)的矩陣,,存儲(chǔ)效率很低。后來人們?cè)谔剿鞲玫脑~向量表示上取得了很多進(jìn)展,。其中最著名的是 Word2Vec,。


正式介紹 


向量空間模型(VSM)表示(嵌入)連續(xù)向量空間中的單詞,其中語義上相似的單詞被映射到相鄰的點(diǎn)(「都嵌在彼此附近」),。向量空間模型在自然語言處理中有著悠久,、豐富的歷史,但是所有方法都以某種方式依賴于分布假說,該假說認(rèn)為出現(xiàn)在相同語境中的詞語具有相似的語義,?;谶@一原則的方法可以被分為兩類:


 1. 基于計(jì)數(shù)的方法(例如隱性語義分析)

 2. 預(yù)測(cè)方法(例如神經(jīng)概率語言模型)


二者的區(qū)別在于:


基于計(jì)數(shù)的方法計(jì)算某個(gè)詞在大型文本語料庫中與其相鄰詞匯共同出現(xiàn)的頻率的統(tǒng)計(jì)數(shù)據(jù),然后將這些統(tǒng)計(jì)數(shù)據(jù)映射到每個(gè)詞的小而密集的向量,。


預(yù)測(cè)模型直接嘗試根據(jù)學(xué)習(xí)到的近鄰單詞的小密集嵌入向量(考慮模型的參數(shù))來預(yù)測(cè)單詞,。


Word2vec 是一種用于從原始文本中學(xué)習(xí)詞嵌入的模型,它有很高的計(jì)算效率,。它主要有兩種實(shí)現(xiàn)方式,,一種是連續(xù)詞袋模型(CBOW),另一種是 Skip-Gram 模型,。這兩種方式在算法上是相似的,,唯一的差別在于 CBOW 從源上下文單詞中預(yù)測(cè)目標(biāo)單詞,而 Skip-Gram 則恰恰相反,,它根據(jù)目標(biāo)單詞預(yù)測(cè)源上下文單詞,。


接下來,我們將重點(diǎn)討論 skip-gram 模型,。


應(yīng)用到的數(shù)學(xué)知識(shí)


神經(jīng)概率語言模型一般使用最大似然原則進(jìn)行訓(xùn)練,,其目標(biāo)是要最大化在給定前面的單詞 h(對(duì)于「history」)時(shí)的下一個(gè)單詞 wt(對(duì)于「target」)的 softmax 概率


微信圖片_20180801154713.jpg

其中 score(wt, h) 計(jì)算目標(biāo)詞 wt 與上下文 h 的相容性(常用點(diǎn)積)。


我們通過在訓(xùn)練集上最大化它的對(duì)數(shù)似然來訓(xùn)練這個(gè)模型,。所以,,我們要最大化以下?lián)p失函數(shù):


微信圖片_20180801154737.jpg


這為語言建模提供了一個(gè)合適的標(biāo)準(zhǔn)化概率模型。


我們可以用另一種形式來更好地展示這種方法,,它可以清晰地展示在訓(xùn)練過程中為了最大化目標(biāo)函數(shù)而不斷改變的選擇變量(或參數(shù)),。


我們的目標(biāo)是找到可以用于預(yù)測(cè)當(dāng)前單詞的周圍詞匯的向量表示。我們尤其希望最大化我們?cè)谡麄€(gè)語料庫上的平均對(duì)數(shù)概率:


微信圖片_20180801154757.jpg


這個(gè)等式的主要含義是,,在當(dāng)前單詞的一定窗口范圍 c 內(nèi)出現(xiàn)的單詞 wt 存在一定的概率 p,。這個(gè)概率同當(dāng)前詞 wt 和我們?cè)O(shè)定的參數(shù) theta 相關(guān)。我們希望設(shè)定的參數(shù) theta 可以最大化整個(gè)語料庫的上述概率,。


基本參數(shù)化:Softmax 模型


基本的 skip-gram 模型定義了經(jīng)過 softmax 函數(shù)計(jì)算的概率 p,。如果我們的詞匯表中有 N 個(gè)詞,而我們希望學(xué)習(xí)的嵌入向量的維度為 k,,那么我們可以設(shè)定 wi 是 N 維的 ont-hot 向量,,theta 是一個(gè) N×K 的嵌入矩陣,從而有:


微信圖片_20180801154816.jpg

值得注意的是,,在學(xué)習(xí)之后,,矩陣 theta 可以被認(rèn)為是嵌入查找矩陣。


在架構(gòu)方面,,它是一個(gè)簡(jiǎn)單的三層神經(jīng)網(wǎng)絡(luò),。


微信圖片_20180801154837.jpg


 1. 使用一個(gè) 3 層神經(jīng)網(wǎng)絡(luò)(1 個(gè)輸入層+ 1 個(gè)隱藏層+ 1 個(gè)輸出層),。

 2. 輸入一個(gè)詞,并訓(xùn)練模型來預(yù)測(cè)它的相鄰詞匯,。

 3. 刪除最后一層(輸出層)并保留輸入和隱藏層,。

 4. 現(xiàn)在,輸入一個(gè)詞匯表中的單詞,。在隱藏層給出的輸出是輸入單詞的「單詞嵌入」,。


限制這種參數(shù)化方法在大規(guī)模語料中的應(yīng)用的一個(gè)主要缺點(diǎn)是計(jì)算的效率。具體來說,,為了計(jì)算單次的正向傳播過程,,我們需要對(duì)整個(gè)語料庫的詞匯進(jìn)行統(tǒng)計(jì),以計(jì)算 softmax 函數(shù),。這對(duì)于大型數(shù)據(jù)集來說是非常昂貴的,,所以我們希望能夠在這個(gè)模型和計(jì)算效率之間找到一個(gè)平衡。


提高計(jì)算效率


對(duì)于 word2vec 中的特征學(xué)習(xí),,我們不需要完整的概率模型,。CBOW 和 skip-gram 模型是使用二元分類目標(biāo)(邏輯回歸)來訓(xùn)練的,其目標(biāo)是要在相同的上下文中將真實(shí)目標(biāo)詞語(wt)與 k 個(gè)偽(噪音)詞語 -w 進(jìn)行區(qū)分,。


微信圖片_20180801154900.jpg


當(dāng)模型給真實(shí)單詞分配更高的概率并且將低概率分配給噪音詞時(shí),,我們可以得到最大化的目標(biāo)函數(shù),。從技術(shù)上來講,,我們一般稱之為負(fù)采樣,它提出的更新近似于 softmax 函數(shù)更新的極限,。但是從計(jì)算角度來看,,它擁有很高的效率,因?yàn)檫@樣一來損失函數(shù)的復(fù)雜度僅僅依賴于我們選擇的噪音詞的數(shù)量(k)而不是詞匯表(V)中的所有單詞,。這可以大大提高訓(xùn)練的速度,。像 Tensorflow 這樣的軟件包使用了一種非常相似的損失函數(shù),稱為噪聲對(duì)比估計(jì)(NCE)損失,。


SKIP-GRAM 模型的直觀感受


以這個(gè)數(shù)據(jù)集為例:


the quick brown fox jumped over the lazy dog


我們首先構(gòu)建一個(gè)包含所有單詞和它們的上下文的數(shù)據(jù)集?,F(xiàn)在,讓我們保持原始定義,,并將「上下文」定義為目標(biāo)單詞左側(cè)和右側(cè)的窗口單詞,。設(shè)定窗口大小為 1,我們可以得到(上下文,,目標(biāo))對(duì)形式的數(shù)據(jù)集,。


([the, brown], quick), ([quick, fox], brown), ([brown, jumped], fox), ...


回想一下,skip-gram 會(huì)顛倒上下文和目標(biāo),,試圖根據(jù)目標(biāo)詞預(yù)測(cè)每個(gè)上下文單詞,,因此任務(wù)變?yōu)閺摹筿uick」預(yù)測(cè)」the」和」brown」以及從」brown」預(yù)測(cè)」quick」和」fox」等,。


這樣一來我們的數(shù)據(jù)集可以整理為(輸入,輸出)對(duì),,如下所示:


(quick, the), (quick, brown), (brown, quick), (brown, fox), ...


目標(biāo)函數(shù)在定義上依賴于整個(gè)數(shù)據(jù)集,,但是我們通常使用隨機(jī)梯度下降(SGD)方法來對(duì)模型進(jìn)行優(yōu)化,即每次只使用一個(gè)例子(或者每次使用一小批數(shù)據(jù),,每批的數(shù)量通常在 16 到 512 之間),。接下來讓我們看一下每一步的訓(xùn)練過程。


讓我們想象一下上述例子的訓(xùn)練過程,。這里的目標(biāo)是從 the 預(yù)測(cè) quick,。我們從一個(gè)噪聲分布 P(w)(通常是單字符分布)中選取 num_noise 個(gè)噪聲樣本(單字符分布假設(shè)每個(gè)單詞的出現(xiàn)與所有其他單詞無關(guān),即我們可以將生成過程看作一個(gè)按序列擲骰子的過程)


為了簡(jiǎn)單起見,,我們?cè)O(shè)定 num_noise = 1,,我們選擇 sheep 作為一個(gè)噪聲樣本。接下來我們計(jì)算這對(duì)觀察到的和有噪聲的例子的損失,,即在」t」時(shí)刻的目標(biāo)函數(shù)變成:


微信圖片_20180801154925.jpg


我們的目標(biāo)是要對(duì)嵌入?yún)?shù)進(jìn)行更新


 theta 用來最大化這個(gè)目標(biāo)函數(shù),。我們通過導(dǎo)出與之相關(guān)的損失梯度來實(shí)現(xiàn)這一目標(biāo)。


微信圖片_20180801154951.jpg


然后,,我們通過向梯度方向邁出一小步來更新嵌入,。當(dāng)我們?cè)谡麄€(gè)訓(xùn)練集上重復(fù)進(jìn)行這個(gè)過程時(shí),可以對(duì)每個(gè)單詞產(chǎn)生「移動(dòng)」嵌入向量的效果,,直到模型成功地區(qū)分真實(shí)單詞和噪音單詞為止,。


我們可以通過將它們向下投影到 2 維來可視化學(xué)習(xí)到的向量。當(dāng)我們觀察這些可視化時(shí),,很明顯這些向量捕獲到了一些關(guān)于單詞的語義信息以及詞與詞之間的關(guān)系,,這在實(shí)際中是非常有用的。

微信圖片_20180801155007.jpg


本站內(nèi)容除特別聲明的原創(chuàng)文章之外,,轉(zhuǎn)載內(nèi)容只為傳遞更多信息,,并不代表本網(wǎng)站贊同其觀點(diǎn)。轉(zhuǎn)載的所有的文章,、圖片,、音/視頻文件等資料的版權(quán)歸版權(quán)所有權(quán)人所有。本站采用的非本站原創(chuàng)文章及圖片等內(nèi)容無法一一聯(lián)系確認(rèn)版權(quán)者,。如涉及作品內(nèi)容,、版權(quán)和其它問題,請(qǐng)及時(shí)通過電子郵件或電話通知我們,,以便迅速采取適當(dāng)措施,,避免給雙方造成不必要的經(jīng)濟(jì)損失。聯(lián)系電話:010-82306118,;郵箱:[email protected],。