隨著深度學習在計算機視覺上取得了突破性的成果,自然語言處理(Natural Language Processing, NLP)領域也開始大量使用深度學習模型。其中,可以說在NLP領域比較有突破意義的成果就是詞向量(Word Embedding),當然按照英語翻譯過來應該是詞嵌入,但是很多人都成為詞向量,其實這還源於Google發布的工具包word2vector,所以本文就以詞向量來統稱詞嵌入。

當然,Word2Vector是很早被提出來的,是2013年的工作。隨著技術的發展,2017年的Transformer,2018年的BERT,以及2019年2月份OpenAI剛剛提出的擁有15億參數的GPT-2,這些模型在NLP領域取得了非常巨大的進展。但是,Word2Vector仍然是大家使用最為廣泛的NLP技術,因為它十分容易訓練,並且是很多NLP任務中的一個Embedding層,可以端到端訓練,所以本文還是要詳細介紹一下Word2Vector的主要技術。

詞向量究竟是什麼呢?顧名思義,就是將詞轉換為一個向量。在傳統自然語言處理任務中,常用的模型是Bag-of-Words模型,中文翻譯為詞袋模型,思想是給每一個詞賦予一個ID序號,詞與詞之間沒有任何關係,「喜歡」和「熱愛」兩個詞之間沒有任何關係。如果有辦法把詞用一個向量來表示,那麼我們可以通過計算向量之間的夾角或距離等等來衡量兩個詞之間的關係,從而更好地把握文本的語義關係。

狹義上的詞向量就是指的Google給出的word2vector以及其它一系列深度模型訓練出來得到的Embeddings,而實際上廣義的詞向量可以理解為給詞賦予一個向量(個人見解)。

目前來說主流的獲得詞向量的辦法有兩種,一種基於矩陣分解(Matrix Factorization),另一種基於神經網路(Neural Network),分別簡記為MF-based和NN-based。

本文就簡單介紹一下從矩陣角度來看詞向量,主要包括以下內容:

  1. Latent Semantic Analysis
  2. Co-occurence matrix & GloVe
  3. Word Vectors with Linear Constraints

1 Latent Semantic Analysis

潛在語義分析(Latent Semantic Analysis, LSA)在傳統的NLP任務中非常常見,在信息檢索領域又稱為潛在語義索引(Latent Semantic Index, LSI)。

一般詞向量 都會基於分散式假設(Distributional Hypothesis)來建模,擁有相似上下文的詞的語義會有很強的相關性,又因為詞向量的學習過程也是一個表示學習的過程,因此詞向量也被稱為分散式表示(Distributed Representation)。這裡再強調一下分散式假設的重要性,這將是詞向量建模的重要依據之一。

舉個例子,現在有兩句話:「我今天早上乘坐火車到了上海」和「我明天早上將會乘坐高鐵到上海」。假設讓一個不太懂中文的外國友人來看這句話,他可能不太明白這兩句話的意思,但是可以大致推斷出「火車」和「高鐵」具有某種語義關係,當然可能是同義詞/近義詞,或者僅僅是語義相關。語義相關和語義相似是不同的,這裡需要注意,但一般來說,不會做明顯的區分,因為NLP中的語義關係太複雜了,不能用明確的閾值界限來限定相關和相似。

那麼LSA是如何工作的呢?首先,需要收集語料庫,形式是將語料庫組織成一系列文檔(Document),每篇文檔裡面有很多(Word)組成。那麼根據這些文檔和詞建立詞 -文檔矩陣(Word-Document Matrix),記作 W in R^{m 	imes n} ,表示有 m 個詞,n 篇文檔, W_{ij} 表示第 i 個詞在第 j 篇文檔的歸一化頻次乘以其逆文檔頻率權重,從而得到的是TF-IDF矩陣。

矩陣形式如Figure 1(圖片來自LSA維基百科截圖):

Figure 1 : Word-Document Matrix示意圖

我們先按列來看,每一列表示的是每篇文檔的詞的TF-IDF統計,記第 j 列為 d_j 。一般來說,到這裡就可以用來做文檔檢索了,比如給定一個查詢文檔 q ,我們可以計算查詢文檔和語料庫裡面每一個文檔 d_j 的餘弦相似度 cos(q, d_j) ,從而選擇相似度最高的幾篇返回,達到檢索的目的。這是從列的角度來看,可以把列看作是文檔的表示

那麼從行的角度來看呢?從圖中可以看出,air對應的行和pollution對應的行除了第一列的TF-IDF統計量差得很多之外,其餘列顏色近似,這就說明這兩個詞之間存在著很大的相關性。所以,我們可以從行的角度出發,假若兩個詞在所有文檔中出現的次數近乎差不多,就說明這兩個詞之間有某種關係。所以我們可以把行當作詞的表示

但是,一般來說,語料庫裡面會有上萬篇文檔和上萬個單詞,並且有很多雜訊信息,所以必須對上述矩陣進行一定地處理,一方面降低表示的維度,另一方面挖掘出矩陣隱含的真正信息。

面對上面的矩陣,最為直觀的想法是低秩逼近(Low Rank Approximation),因為低秩逼近可以看作是對矩陣的近似和壓縮,一方面保留了大部分信息,另一方面去除了部分雜訊。這可以通過低秩逼近的公式來理解:

min_{hat{W}} Vert  W - hat{W} Vert_{F}^2 \ s.t. quad rank(hat{W}) leq r

低秩逼近的最優解是奇異值分解的結果,這個最優解的定理被稱為Matrix Approximation lemma或者Eckart–Young–Mirsky theorem

W = USigma V^T \ hat{W}^* = U_rSigma_r V_r^T

先回顧一下奇異值分解 W=USigma V^T ,其中 U in R^{m 	imes m}, V in R^{n 	imes n} 是正交陣。矩陣 Sigma in R^{m 	imes n} 是隻有對角元素非零的矩陣,一般假設  m > n ,對角元素是矩陣 W 的奇異值,滿足 sigma_1 geq sigma_2geq cdots geq sigma_n geq 0

那麼低秩逼近的最優解可以記為,其中 u_i 是矩陣 U 的第 i 列, v_iV 的第 i 列:

hat{W}^* = sum_{i=1}^r sigma_i u_i v_i^T

當然這裡可以把 U_r in R^{m 	imes r} 當作詞的表示,第 i 個詞的向量為 U_r[i] ;同時,每篇文檔的表示可以通過 V_r in R^{n 	imes r} 的第 i 行 V_r[i] 表示。

總結一下,對詞-文檔矩陣做奇異值分解就得到了詞的表示,從而可以當作詞向量來使用,但是通過LSA獲得的詞向量有很多侷限,因為這僅僅是通過詞頻統計和矩陣分解得到的,一般來說仍然是一種線性模型,表示能力有限,但這也是屬於廣義詞向量的範疇。

2 Co-occurence matrix & GloVe

在上面的介紹中,提到了一個例子,air和pollution這兩個詞,我們知道,這兩個詞應該屬於那種經常一塊出現的詞,比如air pollution組成了片語「空氣污染」。這其中除了分散式表示的關係之外還有另外一種關係,即共現關係。因為這兩個詞經常作為片語一塊出現,所以其上下文也會非常相似,之外兩個詞共現的頻次又反映了這兩個詞在n-gram層面上的關係。這種共現關係不能很明顯地通過詞-文檔矩陣反映出來,而GloVe(Global Vector)則是建立在Word-Word co-occurence matrix上的模型。之所以成為Global,是因為GloVe關注的是語料庫所有的詞-詞共現情況,這是全局語料的統計信息。

GloVe是斯坦福大學NLP研究所Jeffrey Pennington, Richard Socher, Christopher D.Manning提出的一項研究,斯坦福大學有一門NLP公開課CS224D就是Manning主講的,講得很細緻,並且在第三講介紹了GloVe。

首先是Word-Word co-occurence matrix的構建,我們採用context-based方法來構建共現矩陣 W ,即:一個單詞 i 出現在單詞 j 的上下文中,二者共現頻次加一,對應的是 W_{ij} += 1 。上下文context的定義很廣泛,可以是一篇文章、一個段落、一個句子或者一個窗口。記 W_i = sum_j W_{ij} 表示第 i 個單詞上下文中一共出現的單詞的數量,那麼顯然 P(j | i) = frac{W_{ij}}{W_i} 表示的是第 j 個單詞出現在第 i 個單詞上下文裡面的概率。

我們來看一下 frac{P(j | k)}{P(i | k)} 表示的含義,如果這個值很大,就代表在單詞 k 的上下文中,單詞 j 出現的概率比單詞 i 出現的概率高很多,那麼意味著單詞 k 與單詞 j 更相關。假設我們要學習的單詞 i 的詞向量為 v_i ,那麼 v_i^Tv_k 衡量了單詞 i 和單詞 k 的相關性,那麼 (v_j - v_i)^Tv_k 也表示了單詞 j 與單詞 i 相比誰與單詞 k 更相近,因此,我們假設有變換 F

Fleft( (v_j - v_i)^Tv_k 
ight) = frac{P(j | k)}{P(i | k)}

不防假設 F 為指數函數,那麼有:

frac{exp(v_j^Tv_k)}{exp(v_i^Tv_k)} = frac{P(j | k)}{P(i | k)}

再進一步假設有:

exp(v_j^Tv_k) = P(j | k) = frac{W_{kj}}{W_k}

那麼:

v_j^Tv_k = log(X_{jk}) - log(X_k) \ Rightarrow \ v_j^Tv_k + b_i + b_k = log(X_{jk}) \

此外,統計共現矩陣時,有兩種方法:第一,當單詞 j 出現在單詞 k 的上下文中時,共現頻次 W_{jk}, W_{kj} 都加一,這時共現矩陣對稱;第二,只有 W_{kj} 加一,此時的共現矩陣不一定對稱,所以此時採用兩套詞向量,一套是作為center-word出現,一套是作為context-word出現,有: v_j^That{v}_k + b_i + hat{b}_k = log(X_{jk}) 。這裡只介紹第一種情況。

那麼引入下面的優化目標:

J(v, b) = sum_{j,k} f(X_{jk})left(v_j^Tv_k + b_i + b_k - log(X_{jk}) 
ight)^2 \

其中 f(x) = min(x/th, 1)^{0.75} 衡量了不同共現關係的權重。最小化上述優化目標即可獲得詞向量,這個優化目標的目的可以理解為:詞向量之間的內積要和帶有偏置的共現頻次的對數儘可能接近

Figure 2(圖來自GloVe網站)展示了GloVe在詞類比(Word analogy)任務上的效果示意圖,可見大致有:man - woman = king - queen。

Figure 2 :Word-analogy示例圖

3 Word Vectors with Linear Constraints

下面介紹一項IJCAI2018的研究工作(為了與時俱進,看看有哪些比較前沿的研究進展),論文題目是《Learning Word Vectors with Linear Constraints: A Matrix Factorization Approach》,是一項 利用 矩陣分解 得到詞向量的工作,但是加入了一些線性約束,從而使得詞向量更偏向於具有某些性質。

這項工作基於詞共現矩陣的低秩逼近(Low Rank Approximation of Word Co-occurence Matrix),並且加入了不同的線性約束得到了兩個模型,分別是AdditiveProjection模型。這篇文章為什麼要加入線性約束呢?因為加入線性約束可以將一些先驗知識融入到詞向量的學習過程當中,這些先驗知識可以很好地區分語義相似和語義相關,用文章的術語表示是:

Distinguish "genuine" similarity from "associative" similarity (relatedness).

先介紹Additive Model,記共現矩陣為 W in R^{n 	imes n}W_{ij} = log(X_{ij} + 1) ,其中 X_{ij} 表示共現頻次,這裡使用對稱的共現矩陣。記要學習的詞向量為 V in R^{n 	imes r} ,詞表有 n 個詞,每個詞的向量表示為第 i 行。引入 m 個線性約束,每一個線性約束用一組長度為 n 的權重 A in R^{m 	imes n} 來表示,滿足這些權重在所有詞的向量表示上加權為0,即:

A_{i1}V_1 + A_{i2}V_2 + cdots +A_{in}V_n = 0, quad i in [1, m]

那麼優化目標加線性約束為,目標還是尋求共現矩陣 W 的低秩逼近,使用 F 範數最小的優化目標,線性約束為額外附加條件:

min Vert W-VV^T  Vert_{F}^2 \ s.t. qquad AV = O^{m 	imes r}

優化目標如何求解呢?接下來是一些矩陣變換和優化的東西,簡單說一下 。因為我們要求解的目標是 V in R^{n 	imes r} ,並且有 AV = O ,回顧一下線性代數知識,如果有 Ax=0 ,那麼向量 x 在矩陣 A 的零空間(null space)內,可以用 A 的零空間的正交基線性表示。同樣地,假設矩陣 A in R^{m 	imes n} 對應的零空間的正交基為 K in R^{n 	imes (n-m)} ,這裡一般假設詞的個數 n 遠遠大於約束的個數 m,由於是正交基,有 K^TK=I^{(n-m)	imes (n-m)}

那麼我們要求的矩陣 V 也可以寫成零空間正交基 K 的 線性 表示 ,有:

V^{n 	imes r} = K^{n 	imes (n-m)}U^{(n-m) 	imes r}

因為 K 很容易求解,使用matlab裡面的null( A )即可得到,所以我們現在只要求解 U in R^{(n-m)	imes r} 即可。將 K 擴展為 R^n 上的正交基,記為 	ilde{K}=[K, ar{K}] ,那麼由F範數性質:

Vert W - VV^T Vert_F^2 = Vert 	ilde{K}^T(W - VV^T)	ilde{K} Vert_F^2

	ilde{K}=[K, ar{K}] 代入後者,並且利用 K^TV=U 可以得到後面式子的優化目標等價於:

Vert K^TWK - UU^T Vert_F^2

所以想求解 U ,直接利用 K^TWK 的奇異值分解就可以了,繼而可以得到 V=KU ,優化完成。

到這裡,Additive模型的優化目標和求解過程都結束了,簡單總結一下就是,先尋找一組約束權重 A (可以利用Word-Analogy的思想,比如man - woman - king + queen = 0,那麼就有一組權重值 [0, cdots, 0, 1, 0,  cdots, 0, -1, 0, cdots, 0, -1, 0, cdots, 0, 1, 0, cdots, 0] ),求出它的零空間的基向量 K ,然後對 K^TWK 奇異值分解得到 U ,返回 V=KU

下面是Projection Model,優化目標是:

min Vert W-VV^T  Vert_{F}^2 \ s.t. qquad AV^T = B^{m 	imes n}

其中 A in R^{m 	imes r} 代表了一個映射矩陣,目標是學習到的詞向量必須滿足這個映射關係,所以是Projection Model。其中 A, B 可以自己設定。同樣地,求解過程需要轉換一下優化目標 , V^T = NB + KU ,其中 N = A^T(AA^T)^{-1}K 仍是矩陣 A 的零空間的基向量。將其代入優化目標得到最小化 (W-B^TN^TNB)-U^TU 的 F 範數,所以也可以採用奇異值分解來求解。不再詳細介紹。

總結一下,詞向量的研究雖然沒有14年左右火熱了,但是仍有很多研究方向,比如上面介紹的IJCAI2018的文章。但是,隨著BERT和GPT-2的出現,不知道詞向量的研究還有沒有什麼更好地方向,但是可以肯定的是,關於Embedding的研究不會終止,擴大一個層面,就是Representation Learning in NLP還有很大研究空間。

參考文獻

1. LSA - Wikipedia

2. Jeffrey Pennington, Richard Socher, and Christopher D. Manning. 2014. GloVe: Global Vectors for Word Representation.

3. Learning Word Vectors with Linear Constraints: A Matrix Factorization Approach

推薦閱讀:

相關文章