Word Embedding的發(fā)展和原理簡(jiǎn)介

文本處理是NLP領(lǐng)域的一個(gè)重要分支,其細(xì)分領(lǐng)域又包括文本聚類、分類、機(jī)器翻譯、人機(jī)交互等等,而這一切的前提都是將文本表示成計(jì)算機(jī)可以理解和易于處理的數(shù)據(jù)。

經(jīng)過(guò)成千上萬(wàn)年的進(jìn)化,人類的語(yǔ)言本身變得十分抽象和復(fù)雜,要搞懂一段文字,那么要理解詞本身的意義、語(yǔ)義關(guān)系、上下文關(guān)系(蘋(píng)果好吃/蘋(píng)果公司),如何將文字用計(jì)算機(jī)語(yǔ)言表達(dá)出來(lái),并盡量減少編碼過(guò)程中造成的信息損失,一直是一個(gè)業(yè)界難題和很重要的研究方向。本文總結(jié)一下目前熱門(mén)的Word Embedding表示方法的歷史和原理,以供參考。

1. Word Embedding的基本概念

1.1 什么是Word Embedding?

現(xiàn)有的機(jī)器學(xué)習(xí)方法往往無(wú)法直接處理文本數(shù)據(jù),因此需要找到合適的方法,將文本數(shù)據(jù)轉(zhuǎn)換為數(shù)值型數(shù)據(jù),由此引出了Word Embedding的概念。如果將word看作文本的最小單元,可以將Word Embedding理解為一種映射,其過(guò)程是:將文本空間中的某個(gè)word,通過(guò)一定的方法,映射或者說(shuō)嵌入(embedding)到另一個(gè)數(shù)值向量空間(之所以稱之為embedding,是因?yàn)檫@種表示方法往往伴隨著一種降維的意思,詳見(jiàn)下文的討論)。

1.2 Word Embedding的輸入

Word Embedding的輸入是原始文本中的一組不重疊的詞匯,假設(shè)有句子:apple on a apple tree。那么為了便于處理,我們可以將這些詞匯放置到一個(gè)dictionary里,例如:["apple", "on", "a", "tree"],這個(gè)dictionary就可以看作是Word Embedding的一個(gè)輸入。

1.3 Word Embedding的輸出

Word Embedding的輸出就是每個(gè)word的向量表示。對(duì)于上文中的原始輸入,假設(shè)使用最簡(jiǎn)單的one hot編碼方式,那么每個(gè)word都對(duì)應(yīng)了一種數(shù)值表示。例如,apple對(duì)應(yīng)的vector就是[1, 0, 0, 0],a對(duì)應(yīng)的vector就是[0, 0, 1, 0],各種機(jī)器學(xué)習(xí)應(yīng)用可以基于這種word的數(shù)值表示來(lái)構(gòu)建各自的模型。當(dāng)然,這是一種最簡(jiǎn)單的映射方法,但卻足以闡述Word Embedding的意義。下文將介紹常見(jiàn)的Word Embedding的方法和優(yōu)缺點(diǎn)。

2 Word Embedding的類型

Word Embedding也是有流派的,主流有以下兩種:

  • 基于頻率的Word Embedding(Frequency based embedding)
  • 基于預(yù)測(cè)的Word Embedding(Prediction based embedding)

下面分別介紹之。

2.1 基于頻率的Word Embedding

基于頻率的Word Embedding又可細(xì)分為如下幾種:

  • Count Vector
  • TF-IDF Vector
  • Co-Occurence Vector

其本質(zhì)都是基于one-hot表示法的,以頻率為主旨的加權(quán)方法改進(jìn),下面逐一介紹。

2.1.1 Count Vector

假設(shè)有一個(gè)語(yǔ)料庫(kù)C,其中有D個(gè)文檔:{d1, d2, ..., dD}C中一共有N個(gè)word。這N個(gè)word構(gòu)成了原始輸入的dictionary,我們據(jù)此可以生成一個(gè)矩陣M,其規(guī)模是D X N

假設(shè)語(yǔ)料庫(kù)內(nèi)容如下:
D1: He is a boy.
D2: She is a girl, good girl.

那么可以構(gòu)建如下2 × 7維的矩陣。

count vector matrix.png

該矩陣便是一個(gè)counter vector matrix。每個(gè)文檔用詞向量的組合來(lái)表示,每個(gè)詞的權(quán)重用其出現(xiàn)的次數(shù)來(lái)表示。
當(dāng)然,如果語(yǔ)料庫(kù)十分龐大,那么dictionary的規(guī)模亦會(huì)十分龐大,因此上述矩陣必然是稀疏的,會(huì)給后續(xù)運(yùn)算帶來(lái)很大的麻煩。通常的做法是選取出現(xiàn)次數(shù)最頻繁的那些詞來(lái)構(gòu)建dictionary(例如,top 10,000個(gè)詞),這樣會(huì)有效縮減上述矩陣的規(guī)模。

2.1.2 TF-IDF

上一小節(jié)中,在構(gòu)建詞的權(quán)重時(shí),只考慮了詞頻TF(Term Frequncy),也就是詞在單個(gè)文檔中出現(xiàn)的頻率。直覺(jué)上來(lái)看,TF越大,說(shuō)明詞在本文檔中的重要性越高,對(duì)應(yīng)的權(quán)重也就越高。這個(gè)思路大體上來(lái)說(shuō)是對(duì)的,例如,對(duì)于一個(gè)主題是Cat的文檔,顯然Cat這個(gè)詞匯在本文檔中的出現(xiàn)頻率會(huì)相對(duì)高。

但如果我們把視野擴(kuò)展到整個(gè)語(yǔ)料庫(kù),會(huì)發(fā)現(xiàn),像isa等通用詞匯,幾乎在每個(gè)文檔里出現(xiàn)的頻率都很高。由此,我們可以得到這樣的結(jié)論:對(duì)于一個(gè)word,如果在特定文檔里出現(xiàn)的頻率高,而在整個(gè)語(yǔ)料庫(kù)里出現(xiàn)的頻率低,那么這個(gè)word對(duì)于該文檔的重要性就比較高。因此我們可以引入逆文檔頻率IDF(Inverse Document Frequency)的概念:IDF=log(N/n)。其中,N代表語(yǔ)料庫(kù)中文檔的總數(shù),n代表某個(gè)word在幾個(gè)文檔中出現(xiàn)過(guò);當(dāng)一個(gè)word出現(xiàn)地越頻繁,那么IDF就越小。顯然,IDF用于懲罰那些常用詞匯,而TF用于獎(jiǎng)勵(lì)那些在特定文檔中出現(xiàn)頻繁的詞匯。二者的乘積TF X IDF用來(lái)表示詞匯的權(quán)重,顯然合理性大大增強(qiáng)。

舉例:
語(yǔ)料庫(kù)中共有2個(gè)文檔,其中有一個(gè)文檔名為d
共有1個(gè)文檔出現(xiàn)了cat這個(gè)詞匯;且在特定文檔d中,共有8個(gè)詞匯,cat出現(xiàn)了4次。
共有2個(gè)文檔出現(xiàn)了is這個(gè)詞匯;且在特定文檔d中,共有8個(gè)詞匯,is出現(xiàn)了4次。
那么根據(jù)定義,可以得到:

TF("cat", d)=4/8=0.5
TF("is", d)=4/8=0.5
IDF("cat", d) = log2(2/1)=0.301
IDF("is", d) = log2(2/2)=0
TFIDF("cat", d)=TF("cat", d)*IDF("cat", d)=0.5*0.301=0.15
TFIDF("is", d)=TF("is", d)*IDF("is", d)=0.5*0=0

可見(jiàn),TFIDF算法極大地懲罰了is這個(gè)詞匯,從而增加了權(quán)重設(shè)置的合理性。

2.1.3 Co-Occurence Vector

本文最開(kāi)頭有所提及,自然語(yǔ)言一大特色是語(yǔ)義和上下文。有如下著名的研究結(jié)果:相似的單詞趨向于有相似的上下文(context)。舉例:

  • 那個(gè)人是個(gè)男孩。
  • 那個(gè)人是個(gè)女孩。

男孩和女孩從概念上來(lái)說(shuō)相似,他們也具有相似的上下文。

根據(jù)如上思想,我們可以構(gòu)建一套算法,來(lái)實(shí)現(xiàn)基于上下文的特征構(gòu)建。
這里需要引入兩個(gè)概念:

  • Context Window
    上面我們提到了context,但context的長(zhǎng)度需要有一個(gè)界定,也就是說(shuō),對(duì)于一個(gè)給定的word,需要有一個(gè)Context Window大小的概念。
    contex window

如上圖所示,如果指定Context Window大小為2,范圍為前后兩個(gè)word,那么對(duì)于such這個(gè)詞,它的Context Window如上圖所示。

  • Co-Occurence(共現(xiàn))
    有了Context Window的概念,Co-Occurence就好理解了。對(duì)于such這個(gè)單詞來(lái)說(shuō),在其上下文窗口內(nèi),它分別與[she, is, a, beautiful]這四個(gè)單詞各出現(xiàn)了一次共現(xiàn)。如果我們?cè)谡Z(yǔ)料庫(kù)中所有such出現(xiàn)的地方,計(jì)算其共現(xiàn)的單詞,并按次數(shù)累加,那么我們就可以利用其上下文范圍內(nèi)的單詞來(lái)表示such這個(gè)詞,這就是Co-Occurence Vector的計(jì)算方法。.

假設(shè)有如下語(yǔ)料庫(kù):
He is not lazy. He is intelligent. He is smart.
如果Context Window大小為2,那么可以得到如下的共現(xiàn)矩陣:

共現(xiàn)矩陣

我們可以看看Heis的共現(xiàn)次數(shù)4是如何計(jì)算出來(lái)的:

共現(xiàn)矩陣的計(jì)算過(guò)程

顯然地,直接使用共現(xiàn)矩陣,也會(huì)存在維數(shù)過(guò)大的問(wèn)題,通??梢圆扇【仃嚪纸獾仁侄蝸?lái)進(jìn)行降維優(yōu)化,在此不做深入討論。
共現(xiàn)矩陣最大的優(yōu)勢(shì)是這種表示方法保留了語(yǔ)義信息,例如,通過(guò)這種表示,就可以知道,manwoman是更加接近的,而manapple是相對(duì)遠(yuǎn)的。相比前述的兩種方法,更具有智能的味道。

2.2 基于預(yù)測(cè)的Word Embedding

從上文2.1.3節(jié)中已經(jīng)得知,詞的表示中如果蘊(yùn)含了上下文信息,那么將會(huì)更加接近自然語(yǔ)言的本質(zhì);并且,由于相似的詞有相似的表示方法,甚至可以進(jìn)行一些運(yùn)算,例如:人類-男人=女人。但是,上述討論中,有一個(gè)很大的缺陷,那就是詞的向量表示維度過(guò)大,一個(gè)詞要用大量其余的詞來(lái)表示,為后續(xù)運(yùn)算帶來(lái)了很大的麻煩。因此,我們需要找到一種更好的表示方法,這種方法需要滿足如下兩點(diǎn)要求:

  • 攜帶上下文信息
  • 詞的表示是稠密的

事實(shí)證明,通過(guò)神經(jīng)網(wǎng)絡(luò)來(lái)進(jìn)行建模,可以滿足這兩點(diǎn)要求。主流的建模方法又有兩種:CBOWSkip – Gram,下面分別介紹其思想。

2.2.1 CBOW(continues bag of words)

CBOW的全稱是continuous bag of words。其本質(zhì)是通過(guò)context來(lái)預(yù)測(cè)word。

CBOW語(yǔ)料庫(kù)

如上圖所示,首先語(yǔ)料庫(kù)內(nèi)的每個(gè)word都可以用one-hot的方式編碼。假設(shè)選取Context Window2,那么模型中的一對(duì)inputtarget就是:

  • inputHeisone-hot編碼
  • targetaone-hot編碼

接著通過(guò)一個(gè)淺層神經(jīng)網(wǎng)絡(luò)來(lái)擬合該結(jié)果,如下圖所示:

CBOW.png

過(guò)程簡(jiǎn)單介紹如下(實(shí)際算法會(huì)用到哈夫曼編碼等降維技巧,這里僅以理解為目的簡(jiǎn)介基本原理):

  1. 輸入為C個(gè)V維的vector。其中C為上下文窗口的大小,V為原始編碼空間的規(guī)模。例如,示例中的C=2,V=4.兩個(gè)vector分別為4維的Heisone-hot編碼形式;
  2. 激活函數(shù)相當(dāng)簡(jiǎn)單,在輸入層和隱藏層之間,每個(gè)input vector分別乘以一個(gè)VxN維度的矩陣,得到后的向量各個(gè)維度做平均,得到隱藏層的權(quán)重。隱藏層乘以一個(gè)NxV維度的矩陣,得到output layer的權(quán)重;
  3. 隱藏層的維度設(shè)置為理想中壓縮后的詞向量維度。示例中假設(shè)我們想把原始的4維的原始one-hot編碼維度壓縮到2維,那么N=2;
  4. 輸出層是一個(gè)softmax層,用于組合輸出概率。所謂的損失函數(shù),就是這個(gè)outputtarget之間的的差(outputV維向量和input vectorone-hot編碼向量的差),該神經(jīng)網(wǎng)絡(luò)的目的就是最小化這個(gè)loss
  5. 優(yōu)化結(jié)束后,隱藏層的N維向量就可以作為Word-Embedding的結(jié)果。

如此一來(lái),便得到了既攜帶上下文信息,又經(jīng)過(guò)壓縮的稠密詞向量。

2.2.2 Skip – Gram

Skip-Gram模型可以認(rèn)為是CBOW的一個(gè)網(wǎng)絡(luò)翻轉(zhuǎn)。CBOW建模的出發(fā)點(diǎn)是利用context預(yù)測(cè)word。Skip-Gram模型的目的則是通過(guò)word來(lái)預(yù)測(cè)context。其目的都是為了通過(guò)構(gòu)建一個(gè)神經(jīng)網(wǎng)絡(luò)模型來(lái)獲取壓縮后的詞向量。這里不再詳述。

3 Word Embedding的應(yīng)用

現(xiàn)今流行的Word Embedding算法攜帶了語(yǔ)義信息且維度經(jīng)過(guò)壓縮便于運(yùn)算,因此有了很多用武之地,例如:

  • 計(jì)算相似度,比如manwoman的相似度比manapple的相似度高
  • 在一組單詞中找出與眾不同的一個(gè),例如在如下詞匯列表中:[dog, cat, chicken, boy],利用詞向量可以識(shí)別出boy和其他三個(gè)詞不是一類。
  • 直接進(jìn)行詞的運(yùn)算,例如經(jīng)典的:woman+king-man =queen
  • 由于攜帶了語(yǔ)義信息,還可以計(jì)算一段文字出現(xiàn)的可能性,也就是說(shuō),這段文字是否通順。

本質(zhì)上來(lái)說(shuō),經(jīng)過(guò)Word Embedding之后,各個(gè)word就組合成了一個(gè)相對(duì)低維空間上的一組向量,這些向量之間的遠(yuǎn)近關(guān)系則由他們之間的語(yǔ)義關(guān)系決定。

4 總結(jié)

詞的表示一直是NLP很活躍的一個(gè)領(lǐng)域,本文主要是提供了一個(gè)脈絡(luò),簡(jiǎn)介了一下Word Embedding的原理。感興趣的讀者可以就每種表示方法進(jìn)行深入了解,基于各自的優(yōu)缺點(diǎn)在實(shí)踐中應(yīng)用。

最后送大家一個(gè)支付寶紅包??

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容