詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

機器之心發表於2016-10-23

本文是詞嵌入系列部落格的 Part1,全面介紹了詞嵌入模型,接下來幾天機器之心將繼續釋出 Part2、Part3,希望能對大家瞭解詞嵌入有所幫助。

目錄:

  1. 詞嵌入簡史

  2. 詞嵌入模型

  • 語言模型的簡介

  • 經典的自然語言模型

  • C&W 模型

  • C&W model

  • CBOW

  • Skip-gram

無監督學習詞嵌入(word embeddings)在許多自然語言處理的任務中都取得了前所未有的成功,因此它常被視為自然語言處理的萬靈藥。實際上,在許多自然語言處理架構中,它們確實幾乎替代了諸如布朗聚類(Brown clusters)和 LSA 特徵等傳統型分散式特徵。

去年 ACL(計算機語言學會)和 EMNLP(在自然語言處理中實證方法會議)的會議論文很大程度都是詞嵌入的研究,有些人還認為詞嵌入這種嵌入方法比 EMNLP 更加適合的自然語言處理。今年的 ACL 會議有了不僅一個,而是兩個的詞嵌入模型的研討會。

詞嵌入之間的語義關係在外行人看起來就像變魔術。深度自然語言處理的講座常以「國王-男人+女人≈女王」的幻燈片來做開場白,一篇最近在 Communications of the ACM 的文章向詞嵌入模型致敬,並稱之為自然語言處理實現突破的主要原因。

這篇博文將會是本系列第一篇全面介紹詞嵌入模型的文章,將討論詞嵌入模型的熱度是否會持續下去及其原因。在這個介紹裡,我們將嘗試把在這個領域分散的論文串聯起來,強調很多模型、應用和有趣的特徵,並將在後續的文章中重點關注多語言環境下的詞嵌入模型和詞嵌入評估任務。

這第一篇文章將呈現目前的基於語言建模的詞嵌入模型。在我們深度討論很多的模型時,我們會挖掘它們的優點,希望能夠在過去和當前的研究的背景下提供新的見解。

對於命名方式的簡單小結:接下來我們將使用當前熱門的「詞嵌入(word embeddings)」術語,來指代詞語在低維度向量空間的稠密表示。「詞嵌入」和「分散式表徵(distributed representations)」是兩種可互換的表示方法。我們將特別強調「神經詞嵌入(neural word embeddings)」,即運用神經網路訓練的詞嵌入。

詞嵌入簡史

從上世紀九十年代開始,向量空間模型就已在分散式語義中得到了應用。當時,許多用於預測連續空間的詞表徵的模型已經被研究了出來,其中包括隱含語義分析(LSA:Latent Semantic Analysis)和隱狄利克雷分佈(LDA:Latent Dirichlet Allocation)。想要詳細瞭解詞嵌入背景下的分散式語義的歷史的讀者可以看看這篇文章:https://www.gavagai.se/blog/2015/09/30/a-brief-history-of-word-embeddings/

Bengio 等人在 2003 年創造了詞嵌入這個名詞,並且在自然語言模型中將其與模型引數一起聯合訓練。據瞭解 Collobert 和 Weston 於 2008 年首次展示了預訓練的詞嵌入的實際應用。他們里程碑式的論文《A unified architecture for natural language processing》不僅將詞嵌入確立成了一種可用於下游任務的有用工具,還引入了現在已經成為了許多方法的基礎的神經網路架構。但是讓詞嵌入最終能流行起來的是 Mikolov 等人在 2013 年創立的 word2vec,這是一個允許無縫訓練和使用預訓練嵌入的工具套件。在 2014 年,Pennington 釋出了一個具有競爭力的預訓練的詞嵌入集 GloVe,標誌著詞嵌入已經成為了主流。

詞嵌入是目前無監督學習的成功應用之一。它們最大的好處無疑是它們不需要昂貴的人工標註,而是從未標註的現成大資料集中派生的。然後預訓練的詞嵌入就可以運用在僅使用少量有標註資料的下游任務中了。

詞嵌入模型

自然而然地,每個前向傳播的神經網路都把在詞彙表中的詞語當成輸入,並把它們表示成低維空間中向量。然後,它們再透過反向傳播進行調整,得出詞嵌入作為第一層的權重。通常,這稱之為「嵌入層(Embedding Layer)」。

產生詞嵌入作為副產物的神經網路和 word2vec 這樣的以生成詞嵌入為特定目標的方法之間的主要區別是它們的計算複雜度。對於一個大的詞彙集來說,使用非常高深度的架構來生成詞嵌入的計算成本太高。

這就是為什麼直到 2013 年詞嵌入才進入自然語言處理的舞臺。計算複雜度是詞嵌入模型的一個關鍵權衡,也是我們這篇概述中會重複出現的主題。

另一個區別就是訓練目標:word2vec 和 GloVe 都是用來生成廣泛語義關係的詞嵌入模型,這對許多下游任務有用;而這種方式訓練的詞嵌入對不依賴於這種語義關係的任務並無太多幫助。相反,常規的神經網路對於某個特定任務生成的詞嵌入在別的任務往往功能有限。值得注意的是,一個依賴於語言建模這樣的語義關係的任務能夠生成類似於詞嵌入模型的嵌入,這一點我們將在下節探討。

額外說明一點,word2vec 和 Glove 之於自然語言處理,也許就像是 VGGNet 之於計算機視覺,亦即一個普通的權重初始化——它能提供有用特徵,而且無需長時間訓練。

比較不同的模型,我們可以設想如下的標準:我們設想一串來自詞彙庫 V(其大小為 | V|)的包含 T 個訓練單詞的的字元序列 w_1,w_2,w_3,⋯,w_T。

想象我們的模型是一段包含 n 個單詞的文段。我們將每一個單詞與一個 d 維的輸入向量 v_w(嵌入層中的同名詞嵌入)和一個輸出向量 v_w'(另一個詞表徵,其作用下面很久就會介紹)聯絡在一起。最終,對於每一個輸入 x,我們相對於模型引數θ和模型輸出分數 f_θ(x) 來最佳化目標函式 J_θ。

語言建模上的一項注意

詞嵌入模型和語言模型聯絡緊密。對語言模型的質量評價基於它們學習 V 詞彙庫的詞語機率分佈的能力。事實上,許多最新的詞嵌入模型一定程度上嘗試預測序列下一個會出現的詞。另外,詞嵌入模型的評價通常運用困惑度(perplexity)——一個從語言建模借來的基於交叉熵的評價標準。

在我們進入詞嵌入模型的眾多細節之前,讓我們簡單介紹一些語言建模的基礎知識。

總體而言,語言建模力求在給定之前的詞語的情況下,計算一個詞語 w_t 的出現機率,也就是 p(w_t|w_{t−1},⋯w_}t−n+1})。運用鏈式法則和馬爾可夫假設,我們就可以近似地透過之前出現的 n 個詞得到每個詞的機率乘積,從而得到整個句子或整篇文章的乘積:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

在基於 n 元的語言模型中,我們可以用一個詞的組分的 n 元的頻率(frequency)來計算這個詞的機率:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

設定 n=2 產生二元模型,而 n=5 和 Kneser-Ney 則一同呈現平滑的五元模型——平滑的五元模型在語言建模中是公認的的一個強有力基準線。更多的細節,敬請參照史丹佛大學的演講課件。

在神經網路中,我們透過大家熟知的 Softmax 層來計算相同的目標函式:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

內積 h^T v'_{w_t} 計算了詞 w_t 的未標準化的對數-機率(log-probability),我們用在詞彙庫 V 中的所有詞的對數-機率之和來把它標準化。h 是它的倒數第二層(見圖 1 前向傳播網路的隱藏層)的輸出向量,而 v'_w 就是詞 w 的輸出嵌入,亦即在 softmax 層的權重矩陣中的表徵。注意雖然 v'_w 可以表徵詞 w,但它是從輸入詞嵌入 v_w 獨立學習的,因為向量 v'_w 和向量 v_w 的相乘物件是不同的(v_w 和索引向量相乘,v′_w 和 h 相乘)。

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型圖 1: 一個自然語言模型(Bengio 等人,2006 年)

我們需要計算每個詞 w 在神經網路輸出層的機率。想要高效地做到這一點,我們將 h 和一個權重矩陣相乘,這個權重矩陣每行都是對於在 V 中出現的詞 w 所得的 v′_w。我們隨後將得到的向量(我們通常稱之為 logit,也就是前一層的輸出)以及 d=|V| 傳入到 softmax 層,softmax 層則把詞嵌入「壓扁」成一個詞彙庫 V 裡面詞的機率分佈。

注意 softmax 層(對比於之前的 n 元計算)僅僅隱式地考慮之前出現的 n 個詞。長短時記憶模型(Long Short-term Memory, 英文簡稱 LSTM),通常用來作自然語言處理模型,將這些詞編碼成狀態 h。我們在下一章將會介紹的 Bengio 的自然語言模型,則是把之前的 n 個詞透過一個前向傳播層傳入。

請大家記住這個 softmax 層,許多後續介紹的詞嵌入模型都將或多或少地運用它。運用這個 softmax 層,模型將嘗試著在每一時刻 t 都最大化正確預測下一詞的機率。於是,整個模型嘗試最大化整個資料集的平均對數-機率:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

相似地,運用鏈式法則,模型的訓練目標通常是最大化整個語料庫的所有詞相對於之前 n 個詞的平均對數-機率:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

如果想在試驗階段從這個語言模型取樣詞,我們可以在每一時刻 t 貪婪地選擇最高機率的詞 p(w_t \: | \: w_{t-1} \cdots w_{t-n+1}),或者用定向搜尋。舉個例子,我們可以用它來生成像運用了 LSTM 作為解碼器的 Karpathy 的 Char-CNN 中的任意文字序列。

經典神經語言模型

Bengio 等人在 2013 年 [1] 提出的經典神經語言模型包含一個前向傳播神經網路,它有一個隱藏層,用來預測文字序列的下一個單詞,如圖 2 所示。

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型圖 2: 經典神經語言模型(Bengio 等人,2013 年)

他們的模型的最大化目標函式就是我們在上文中介紹的典型的神經語言模型的目標(為了簡潔,我們忽略規範化(regularization)這一項):

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

f(w_t , w_{t-1} , \cdots , w_{t-n+1}) 是這個模型的輸出,即 softmax 計算出的機率 p(w_t \: | \: w_{t-1} , \cdots , w_{t-n+1})。n 在這裡就是傳入這個模型的之前 n 個詞的數量。

Bengio 等人首先提出詞嵌入模型,它是一個在實數範圍 R 內的詞特徵向量。他們的架構非常經典,是目前各種改進方法的原型。他們原始模型中的基礎模組依然能在現在的許多神經網路和其他詞嵌入模型中找到。

  • 嵌入層:一個用索引向量和詞嵌入矩陣相乘得出的詞嵌入層;

  • 中間層:一個可包含一層或多層的中間層,例如,一個可以將之前出現的 n 個詞非線性地組合在一起的全連線層(fully-connected layer);

  • Softmax 層:一個最終層,輸出詞彙庫 V 中詞的機率分佈。

另外,Bengio 等人發現了目前最先進模型中存在的兩個核心問題:

  • 他們發現 2. 中間層可以由一個 LSTM 替代,這個已被最新神經語言模型使用。

  • 他們發現最後的 softmax 層(更確切地說,是標準化項)是神經網路的瓶頸,因為計算 softmax 的計算複雜度與詞彙庫 V 中詞的數量成正比,而個數量通常為成百上千,乃至幾百萬。

因此,如何在一個大詞彙庫中用較低的計算成本計算 softmax,成為了建立神經語言模型和詞嵌入模型的一個關鍵挑戰。

C&W 模型

在 Bengio 等人對神經語言模型的的最初探索以後,計算機計算能力和演算法還尚不允許在大詞彙庫上的訓練。詞嵌入模型的研究因而止步不前。

Collobert 和 Weston [4](因此被稱為 C&W)在 2008 年展示了詞嵌入模型在一個充分大的資料庫中如何向下遊任務攜帶語法和語義,並且提升效能。他們 2011 年的論文充分解釋了他們的做法。

他們的解決方法避免了對於 softmax 層的昂貴計算,其方法是採用另一個目標函式:Collobert 和 Weston 的神經網路輸出是正確詞序列相對於不正確詞序列高出的分數 f_θ,而不是 Bengio 等人的論文中用來最大化基於之前的詞出現的下一個詞機率的的交叉熵標準。他們為了這個目標函式採用了一個成對排名的標準,如下所示:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

他們的模型從所有包含 n 個詞的視窗 X 中取樣得到正確的視窗 x。對於每一個視窗 x,用 V 中的 w 代替 x 的中間詞來產生一個不正確的版本 x(w),而模型的目標就是最大化模型對於正確的視窗和不正確視窗的分數的距離。如圖 3 所示,他們的模型架構類似於 Bengio 等人的模型。

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型圖 3: 去掉了排名目標的 C&W 的模型(Collobert 等人,2011 年)

計算後的語言模型能夠生成具有許多語義關係的詞嵌入,例如國家能夠聚類在一起,語法上接近的詞在向量空間上相鄰。他們的排名函式避免了 softmax 的複雜計算,且保持了 Bengio 等人論文中計算同樣昂貴的完全相連的中間層(2.)(見圖 3 中的 HardTanh 層)。他們對於 130000 個詞的模型需要花費 7 周來訓練的有一部分原因在於此。

讓我們現在介紹當今毫無疑問最為流行的詞嵌入模型 word2vec,它源於 Mikolov 等人在 2013 年中兩篇論文,且催生了上千篇詞嵌入的論文。正因為詞嵌入模型是自然語言處理中深度學習的一個關鍵的模組,word2vec 通常也被歸於深度學習。然而嚴格上來說,word2vec 並不屬於深度學習,因為它的架構並非多層,也不像是 C&W 模型一般運用非線性模型。

在他們的第一篇文章 [2] 中,Mikolov 等人提出了更低計算成本的學習詞嵌入的兩個架構。他們的第二篇論文 [3] 透過加入更多的提升了訓練速度和準確度的策略來提升了模型。

這些架構提供了對比於 C&W 模型和 Bengio 模型具有如下兩大優點:

  • 他們去掉了昂貴的中間層。

  • 他們運用語言模型來更多地考慮上下文。

我們等等會講到,他們的模型之所以成功不僅是因為這些改變,而更是因為某些特定的訓練策略。

接下來,我們會來看這兩個架構:

連續的詞袋(CBOW)

言模型只能透過觀察之前出現的詞來進行預測,且對於此類模型的評價只在於它在一個資料集中預測下一個詞的能力,訓練一個可以準確預測詞嵌入的模型則不受此限。Mikolov 等人運用目標詞前面和後面的 n 個詞來同時預測這個詞,見圖 4。他們稱這個模型為連續的詞袋(continuous bag-of-words,或者 CBOW),因為它用連續空間來表示詞,而且這些詞的先後順序並不重要。

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型圖 4:連續的詞袋(Mikolov 等人,2013 年)

CBOW 的目標函式和語言模型僅有著細小差異:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

這個模型並沒有傳入 n 個之前的詞,而是在每個時刻 t 接收目標詞的前後 n 個詞的視窗 w_t。

Skip-gram

CBOW 可以看作一個具有先知的語言模型,而 skip-gram 模型則完全改變將語言模型的目標:它不像 CBOW 一樣從周圍的詞預測中間的詞;恰恰相反,它用中心語去預測周圍的詞,如圖 5 所示。

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型圖 5:Skip-gram(Mikolov 等人,2013)

skip-gram 模型的目標因此用目標詞前後的各 n 個詞的對數──機率之和計算如下的目標:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

為了更直觀地解釋 skip-gram 模型是怎樣來計算 p(w_{t+j}|w_{t}) 的,讓我們先來回顧 softmax 的定義:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

我們不計算目標詞 w_t 基於前面出現的詞的機率,而是計算周圍詞 w_{t+j} 對於 w_t 的機率。於是,我們可以簡單地替換掉這些變數:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

因為 skip-gram 架構並不包括能夠產出中間狀態向量 h 的中間層,h 自然地成為對於輸入詞 w_t 的詞嵌入 v_{w_t}。這也是我們為什麼想給輸入向量 v_w 和輸出向量 v′_w 以用不同的表示,因為我們想要將詞嵌入和自己相乘。用 v_{w_t} 替換 h,我們得到:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

注意 Mikolov 論文中的代號和我們的有細微差別,他們標註詞語為 w_I,而周圍的詞為 w_O。如果我們用 w_I 替換 w_t,用 w_O 替換 w_{t+j},然後根據乘法交換律交換內積的向量位置,我們能夠得到和它們論文中一樣的公式表示:

詞嵌入系列部落格Part1:基於語言建模的詞嵌入模型

下一篇博文,我們將要討論近似昂貴的 softmax 函式的不同方式,以及令 skip-gram 成功關鍵的訓練決策。我們也會介紹 GloVe[5],一個基於矩陣乘法分解的詞嵌入模型,並討論詞嵌入和分散式語義的關係。

References

Bengio, Y., Ducharme, R., Vincent, P., & Janvin, C. (2003). A Neural Probabilistic Language Model. The Journal of Machine Learning Research, 3, 1137–1155. http://doi.org/10.1162/153244303322533223

Mikolov, T., Corrado, G., Chen, K., & Dean, J. (2013). Efficient Estimation of Word Representations in Vector Space. Proceedings of the International Conference on Learning Representations (ICLR 2013), 1–12.

Mikolov, T., Chen, K., Corrado, G., & Dean, J. (2013). Distributed Representations of Words and Phrases and their Compositionality. NIPS, 1–9.

Collobert, R., & Weston, J. (2008). A unified architecture for natural language processing. Proceedings of the 25th International Conference on Machine Learning - ICML ’08, 20(1), 160–167. http://doi.org/10.1145/1390156.1390177

Pennington, J., Socher, R., & Manning, C. D. (2014). Glove: Global Vectors for Word Representation. Proceedings of the 2014 Conference on Empirical Methods in Natural Language Processing, 1532–1543. http://doi.org/10.3115/v1/D14-1162

Kim, Y., Jernite, Y., Sontag, D., & Rush, A. M. (2016). Character-Aware Neural Language Models. AAAI. Retrieved from http://arxiv.org/abs/1508.06615

Jozefowicz, R., Vinyals, O., Schuster, M., Shazeer, N., & Wu, Y. (2016). Exploring the Limits of Language Modeling. Retrieved from http://arxiv.org/abs/1602.02410

Collobert, R., Weston, J., Bottou, L., Karlen, M., Kavukcuoglu, K., & Kuksa, P. (2011). Natural Language Processing (almost) from Scratch. Journal of Machine Learning Research, 12 (Aug), 2493–2537. Retrieved from http://arxiv.org/abs/1103.0398

Chen, W., Grangier, D., & Auli, M. (2015). Strategies for Training Large Vocabulary Neural Language Models, 12. Retrieved from http://arxiv.org/abs/1512.04906

相關文章