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

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

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

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

微信圖片_20180801154320.jpg



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


引言


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


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


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


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


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


舉例來說:


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


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



微信圖片_20180801154346.jpg

微信圖片_20180801154418.jpg

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


詞向量


微信圖片_20180801154447.jpg


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


微信圖片_20180801154520.jpg


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


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


微信圖片_20180801154613.jpg

微信圖片_20180801154646.jpg



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


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


正式介紹 


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


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

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


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


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


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


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


接下來,我們將重點討論 skip-gram 模型。


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


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


微信圖片_20180801154713.jpg

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


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


微信圖片_20180801154737.jpg


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


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


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


微信圖片_20180801154757.jpg


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


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


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


微信圖片_20180801154816.jpg

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


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


微信圖片_20180801154837.jpg


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

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

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

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


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


提高計算效率


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


微信圖片_20180801154900.jpg


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


SKIP-GRAM 模型的直觀感受


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


the quick brown fox jumped over the lazy dog


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


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


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


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


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


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


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


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


微信圖片_20180801154925.jpg


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


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


微信圖片_20180801154951.jpg


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


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

微信圖片_20180801155007.jpg


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