詞嵌入和矩陣分解的統一

2020-12-11 阿里云云棲號

2018年對於自然語言處理(Natural Language Processing, NPL)是極有意義的一年,這一年出現了許多新的研究方向和尖端成果。在學術界和工業界,由於帶有上下文的嵌入模型對內存和硬體的要求極高,預先訓練詞嵌入的使用仍然十分普遍。

SGNS and Matrix FactorizationYou shall know a word by the company it keeps. (Firth, 1957)

正如Firth所言,詞義的確定需要結合它與其它詞語之間的搭配關係,他所說的「company」指的就是與某一詞語同現的搭配詞語。構建預先訓練詞嵌入的優勢在於,其向量表示能夠反映通用語言信息,這些信息對後續任務的開展有很大的幫助。對於NLP而言,通過創建單詞的詞嵌入向量,能夠預測可能會出現在該單詞周圍的單詞。

Skip-Gram with Negative Sampling (SGNS)

SGNS作為一種神經網絡模型受到了廣泛的關注,其目的是預測給定當前單詞的所有上下文單詞。在下圖中,我們將通過單詞「a」,對「am」,「I」,「neural」,「network」等單詞進行預測。詞彙量的大小及單詞的順序決定了,對一個單詞,我們都會產生million-dimensional預測向量,並且需要在整個辭典上計算全部詞向量和當前中心詞的點積,這個計算量太大了。

SGNS的提出者引入了「負採樣(negative sampling)」來解決這一問題。其思想就是,做一個負樣本,可以理解成隨機語料。於是每次訓練的時候,我們就有一個正樣本和若干個負樣本,我們讓正樣本的預測概率儘可能大,而讓負樣本預測概率儘可能小,通過負樣本的引入,將本來建立在整個辭典上的一個|V|分類問題,轉換成一個建模在正負樣本上的一個二分類問題。

SGNS的基本過程大致如上圖所示,但當對輸出層使用softmax函數時,需要用單詞的上下文嵌入(context embedding)矩陣C乘以輸入單詞的詞嵌入矩陣W,該圖在這一點上未能清楚描述。

對輸出層採用softmax函數,其計算量過大。負採樣(negative sampling)的引入能夠有效緩解這個問題。不同於原來每個訓練樣本更新所有的權重,負採樣每次讓一個訓練樣本僅僅更新一部分的權重,降低了梯度下降過程中的計算量。

SGNS其實是一種隱式的矩陣分解

接下來我們將提出一個不同的概念框架來理解Word2vec,在深入討論細節之前,讓我們先形式化一些符號:

Sigma (σ) :常用的邏輯回歸函數輸入單詞的詞嵌入矩陣W,其它上下文單詞的詞嵌入矩陣C。值得注意的是,Word2vec和GloVe一樣,需要單獨的單詞和上下文嵌入,即使它們對應相同的詞彙表。這與邏輯回歸中將特徵向量(單詞)與學習的權重向量(上下文)分離是同一個道理。下面公式中的求和符號表明,通過噪聲分布U近似抽取k個負樣本。SGNS的目標函數如下所示:

損失函數需要幫我們完成以下任務:(1)最大化矩陣W與C的點積;(2)最小化矩陣W和隨機採樣k的點積。但是目標函數並未包含上下文窗口,其大小是一個超參數。下圖可以更好的代表SGNS:

從圖中可以看出,SGNS並未做任何預測。這個模型和上面的損失函數準確地描述了隨機梯度下降過程中採樣的每一步嵌入情況。通俗來講,每次模型讀取一個單詞並查看它周圍的上下文時,我們都能確切地捕捉它的學習過程。然而它看上去更像是一個自然語言處理的工具,而不是一個基於神經網絡的學習算法。

Levy & Goldberg: Local Prediction is Global Approximation

Levy和Goldberg從理論上證明了Word2Vec其實近似等價於矩陣分解(Matrix Factorization),甚至能夠說SGNS就是一種隱式的矩陣分解,類似於GloVe和singular value decomposition。PMI矩陣的計算如下所示:

k是一個超參數,表示負採樣的數量(默認值為15)

點間互信息(Pointwise Mutual Information,PMI)是NLP中用得很多的信息度量指標,主要用於計算詞語間的語義相似度,基本思想是統計兩個詞語在文本中同時出現的概率,如果概率越大,其相關性就越緊密,關聯度越高。例如,「costa」和「rica」之間就擁有較高的PMI值,因為你看見其中一個單詞的時候,會有很大概率想起另一個單詞。PMI的定義如下所示,值得注意的是,如果語料庫中從未出現單詞-上下文對,那麼他們之間的P(i,j)=0,其PMI值為log(0),或者負無窮。

Levy和Goldberg表示,Word2vec就是隱式的矩陣分解。SGNS能夠將單詞和其對應的上下文嵌入到一起,這樣計算得到的點積可以表示它們同時出現的可能性。

只要做到以下幾點,我們就能用矩陣分解算法來實現SGNS:1、 根據語料庫,預先計算正確的PMI矩陣2、 找到對應的損失函數

在發現SGNS其實就是隱式的矩陣分解後,Levy和Goldberg嘗試利用顯式矩陣分解表示SGNS,如下:1、 由於PMI矩陣是個稠密矩陣,還會有很多不好處理的缺失值,而且把缺失值寫成0也會有問題,所以分解Positive PMI會更合理,也就是把所有非正值都變成0:PPMI(x) = max(0, PMI(x))2、 直接用SVD分解,SVD在復原PMI或類似矩陣方面效果非常好,而且不用調優任何參數。

但該方法並不能很好的代替SGNS。原因在與(1)沒有使用shifted PMI矩陣;(2)沒有找到正確的損失函數。

相關焦點

  • 圖嵌入專題(四):圖嵌入與矩陣分解
    文中推導出的關於DeepWalk,Line,PTE和node2vec的近似隱性矩陣分解形式為: 。    在前面幾個章節中,我們分別從不同的方面介紹了嵌入算法和矩陣分解的聯繫。在本章中,我們將介紹一種基於矩陣分解視角提出的嵌入算法:BoostNE[3]。
  • 深入淺出詞嵌入技術
    X分解,因為矩陣X比較稀疏,從矩陣論的角度來看,希望學到更低秩的表示方法。因為矩陣分解中的共現矩陣中的統計信息是來自於所有的語料庫,因此矩陣分解得到的詞向量是全局的方法(Global Method)。由於CBOW、SkipGram模型每次考慮的是中心詞和它周圍的單詞,因此CBOW、SkipGram模型得到的詞向量是局部的方法(Local Method)。
  • 揭開多語言詞嵌入模型的神秘面紗
    此外,加入約束條件:投影矩陣是正交矩陣,以保留嵌入單詞向量的原始距離。Facebook 將這些嵌入整合到文本分類框架 DeepText 中。DeepText 包含各種以詞嵌入為基本表示的分類算法。為了訓練多語言模型,Facebook 使用了上面提到的多語言詞嵌入作為 DeepText 的基礎表示,並在訓練過程中「凍結」它們,即保證它們在訓練過程中是沒有改變的。
  • 奇異值分解和矩陣分解傻傻分不清楚?一文幫你理清兩者差異!
    在推薦系統的相關研究中,我們常常用到兩個相關概念:矩陣分解和奇異值分解。這兩個概念是同一種算法嗎?兩者到底有什麼差別?在本文中,作者梳理了兩種算法的概念、來源和內容,並進行了比較。通過對相關內容的梳理,作者提出,矩陣分解是推薦系統中最初使用的概念,奇異值分解是對該方法的進一步發展。在現在的討論中,一般將兩種方法統一成為奇異值分解。
  • Word2Vec與Glove:詞嵌入方法的動機和直覺
    近年來,詞嵌入方法越來越流行,在各種各樣的NLP任務中得到了廣泛的應用。簡單而言,詞嵌入是通過無監督方式學習單詞的向量表示。本文將首先回顧用向量表示文本的早期模型,並通過分析其缺陷揭示詞嵌入提出的動機,然後介紹Word2Vec和Glove這兩種最流行的詞嵌入方法背後的直覺。用向量來表示文本這一想法由來已久。
  • 矩陣的特徵值分解的物理意義
    矩陣的特徵值分解目的就是提取出一個矩陣最重要的特徵。反過頭來看看之前特徵值分解的式子,分解得到的Σ矩陣是一個對角陣,裡面的特徵值是由大到小排列的,這些特徵值所對應的特徵向量就是描述這個矩陣變化方向(從主要的變化到次要的變化排列)。
  • 教程| 從特徵分解到協方差矩陣:詳細剖析和實現PCA算法
    因為我們可以對矩陣中的值統一進行如加法或乘法等運算,所以矩陣是十分高效和有用的。如下所示,如果我們將向量 v 左乘矩陣 A,我們就會得到新的向量 b,也即可以表述說矩陣 A 對輸入向量 v 執行了一次線性變換,且線性變換結果為 b。因此矩陣運算 Av = b 就代表向量 v 通過一個變換(矩陣 A)得到向量 b。
  • 柯西型矩陣的快速QR分解算法
    對於形如A=UTV(其中U和V為歸一化矩陣,T為上三角矩陣)的位移結構矩陣,設計其正交分解的有效算法,目前存在很多困難。然而,這類問題的求解對於最小二乘和基於秩的QR分解等問題是非常關鍵的。
  • 從詞嵌入到含義嵌入:概覽含義向量表示方法
    和之前知識增強詞向量方法類似,基於語義網絡,通過修改目標函數或後處理詞嵌入,可以從詞嵌入拆分出含義嵌入。後者的例子包括:Jauhar等在2015年對retrofitting方法的擴展(Ontologically Grounded Multi-sense Representation Learning for Semantic Vector Space Models)Johansson和Pina在2015年提出,後處理預訓練詞嵌入可以看起一個優化問題:多義詞嵌入可以分解為其含義嵌入的組合
  • 詞表徵學習—Word2Vec 嵌入算法
    詞向量讓計算機理解人類的語言是一件很 Cool 的事情,而首先要做的就是將單詞表示成一個數值向量(稱為詞向量),以方便計算機處理。比較直觀的做法有one-hot 編碼和共現矩陣等。例如 「I」 和 「have」 在兩個句子中共同出現過,因此在 A中的權重為 2;而 「I」 和 「cat「 只在一個句子中共現, A 中權重為 1 。矩陣 A 的每一行就代表了一個單詞的詞向量,與 one-hot 編碼類似,使用共現矩陣的詞向量的維度也非常大。
  • R語言自然語言處理:文本向量化——詞嵌入(Word Embedding)
    如果單詞特別多,但是每個詞出現的次數又不一定很多的時候,我們得到一個巨大的稀疏矩陣。這樣存儲效率很低;2. 這個模型對單詞出現的順序沒有任何記錄,因此「勇士打敗雷霆」和「雷霆打敗勇士」這兩個短語,在BOW模型中認為意思是完全一樣的。為此,科學家提出了詞嵌入模型。
  • 強大的矩陣奇異值分解(SVD)及其應用
    在上篇文章中便是基於特徵值分解的一種解釋。特徵值和奇異值在大部分人的印象中,往往是停留在純粹的數學計算中。而且線性代數或者矩陣論裡面,也很少講任何跟特徵值與奇異值有關的應用背景。奇異值分解是一個有著很明顯的物理意義的一種方法,它可以將一個比較複雜的矩陣用更小更簡單的幾個子矩陣的相乘來表示,這些小矩陣描述的是矩陣的重要的特性。
  • 「周末AI課堂」理解詞嵌入(理論篇)
    Bag of words 和tf-idf當我們面對文本這類數據,每一個詞都可以進行one-hot encoding。Mary likes movies too我們將詞的表示依次相加,就會得到:[1,1,2,1,1,2,1,0,0]其中,moives和likes都出現了兩次,所以相應的編碼就變為了2。另一個句子和其表示為:John also likes to watch football games.
  • 詞向量背後精妙的數學
    夾角越小,方向就越一致,詞的意思也就越相似。另一種關係,則是詞語含義的隱藏維度。這裡有一個非常著名的例子:兩邊各自做減法,得到的差向量居然幾乎一樣。這種現象的出現,正是因為word2vec的詞向量中還隱藏著詞語的抽象維度。國王的向量,減去王后的向量,就恰好得到了性別的維度。兩個詞,「貓」、「狗」,它們都和「寵物、擼、可愛、動物……」一起出現,那「貓」和「狗」就很相似。這就是結構主義的思想。
  • 前沿綜述:細數2018年最好的詞嵌入和句嵌入技術
    和句子嵌入已成為重要組成部分。它們使用固定長度的稠密向量對詞和句子進行編碼,從而大幅提升通過神經網絡處理文本數據的能力。對通用嵌入的追尋是個大趨勢:在大型語料庫上預先訓練好的嵌入模型,可以應用到多種下遊任務模型中(情感分析,分類,翻譯...),通過合併一些在較大的數據集上學習的常用詞/句子表示,預訓練的嵌入可以自然地提高其性能。這是一種遷移學習。
  • 科普篇 | 推薦系統之矩陣分解模型
    第二篇講的是MF的數學原理,包括MF模型的目標函數和求解公式的推導等。第三篇回歸現實,講述MF算法在圖文推薦中的應用實踐。三篇文章由淺入深,各有側重,希望可以幫助到大家。下文是第一篇——《科普篇 | 推薦系統之矩陣分解模型》,第二篇和第三篇將於後續發布,敬請期待。矩陣分解(Matrix Factorization, MF)是推薦系統領域裡的一種經典且應用廣泛的算法。
  • 詞向量模型解讀
    1.2分布式表示詞嵌入(word embedding)指的是將詞轉化成一種分布式表示,又稱詞向量。分布式表示將詞表示成一個定長的連續的稠密向量。分布式表示優點:(1)詞之間存在相似關係:是詞之間存在「距離」概念,這對很多自然語言處理的任務非常有幫助。
  • Python+numpy實現矩陣QR分解
    如果實(復)非奇異矩陣A能夠化成正交(酉)矩陣Q與實(復)非奇異上三角矩陣R的乘積,即A=QR,則稱其為A的QR分解。Python擴展庫numpy實現了矩陣QR分解的函數qr(),除本文演示的用法之外,該函數的mode參數還支持另外幾個值,可以通過help(numpy.linalg.qr)查看詳細信息並結合矩陣分析的有關知識進行理解。
  • 圖計算黑科技:打開中文詞嵌入訓練實踐新模式
    此外,這類方法無法通過任何計算得到詞語之間的相似度,因此詞向量之間不存在關聯關係。鑑於詞袋錶示法存在維度災難、語義鴻溝的問題,Yoshua Bengio等人在[1]中證明使用神經網絡訓練的語言模型可以生成更好的詞向量,並且提出了很多優化訓練的方法。如下圖所示,整個網絡分為兩部分,第一部分是利用詞特徵矩陣C獲得詞的分布式表示(即詞嵌入)。
  • [教程]一篇最簡單的NLP入門:在Python上構建Word2Vec詞嵌入模型(Tensorflow篇)
    建立TensorFlow模型簡單地說,我們需要建立一個神經網絡,該網絡在 TensorFlow 中使用詞嵌入矩陣(就是word2vec)作為隱藏層,還包括一個輸出 softmax 層(輸入每個預測單詞的概率)。