1. 程式人生 > >深度學習(三)——Autoencoder, 詞向量

深度學習(三)——Autoencoder, 詞向量

粗看起來,這類恆等變換沒有太大意義。然而這類恆等變換之所以能夠成立,最根本的地方在於,隱藏層的神經元具有表達輸出樣本的能力,也就是用低維表達高維的能力。反過來,我們就可以利用這一點,實現資料的降維操作。

但是,不是所有的資料都能夠降維,而這種情況通常會導致Autoencoder的訓練失敗。

和Autoencoder類似的神經網路還有:Denoising Autoencoder(DAE)、Variational Autoencoder(VAE)、Sparse Autoencoder(SAE)。

參考:

深度學習之autoencoder

降噪自動編碼器(Denoising Autoencoder)

花式解釋AutoEncoder與VAE

無監督學習中的兩個非概率模型:稀疏編碼與自編碼器

詞向量

One-hot Representation

NLP是ML和DL的重要研究領域。但是多數的ML或DL演算法都是針對數值進行計算的,因此如何將自然語言中的文字表示為數值,就成為了一個重要的基礎問題。

詞向量顧名思義就是單詞的向量化表示。最簡單的詞向量表示法當屬One-hot Representation

假設語料庫的單詞表中有N個單詞,則詞向量可表示為N維向量[0,,0,1,0,,0]

這種表示法由於N維向量中只有一個非零元素,故名。該非零元素的序號,就是所表示的單詞在單詞表中的序號。

One-hot Representation的缺點在於:

1.該表示法中,由於任意兩個單詞的詞向量都是正交的,因此無法反映單詞之間的語義相似度。

2.一個詞庫的大小是105以上的量級。維度過高,會妨礙神經網路學習到稀疏特徵。

Word Embedding

針對One-hot Representation的不足,Bengio提出了Distributed Representation,也稱為Word Embedding。

這裡寫圖片描述

Word Embedding的思路如上圖所示,即想辦法將高維的One-hot詞向量對映到低維的語義空間中

Bengio自己提出了一種基於神經網路的Word Embedding的方案,然而由於計算量過大,目前已經被淘汰了。

參考:

詞向量概況

word2vec

除了Bengio方案之外,早期人們還嘗試過基於共生矩陣(Co-occurrence Matrix)SVD分解的Word Embedding方案。該方案對於少量語料有不錯的效果,但一旦語料增大,計算量即呈指數級上升。

這類方案的典型是Latent Semantic Analysis(LSA)。參見《機器學習(二十一)》。

Tomas Mikolov於2013年對Bengio方案進行了簡化改進,提出了目前最為常用的word2vec方案。

介紹word2vec的數學原理比較好的有:

《Deep Learning實戰之word2vec》,網易有道的鄧澍軍、陸光明、夏龍著。

《word2vec中的數學》,peghoty著。該書的網頁版:

老慣例這裡只對最重要的內容進行摘要。

CBOW & Skip-gram

這裡寫圖片描述

上圖是word2vec中使用到的兩種模型的示意圖。

從圖中可知,word2vec雖然使用了神經網路,但是從層數來說,只有3層而已,還談不上是Deep Learning。但是考慮到DL,基本就是神經網路的同義詞,因此這裡仍然將word2vec歸為DL的範疇。

注:深度學習不全是神經網路,周志華教授提出的gcForest就是一個有益的另類嘗試。

研究一個神經網路模型,最重要的除了神經元之間的連線關係之外,就是神經網路的輸入輸出了。

CBOW(Continuous Bag-of-Words Model)模型和Skip-gram(Continuous Skip-gram Model)模型脫胎於n-gram模型,即一個詞出現的概率只與它前後的n個詞有關。這裡的n也被稱為視窗大小.

上圖中,視窗大小為5,即一箇中心詞{wt}+前面的兩個詞{wt1,wt2}+後面的兩個詞{wt+1,wt+2}

名稱 CBOW Skip-gram
輸入 {wt1,wt2,wt+1,wt+2} {wt}
輸出 {wt} {wt1,wt2,wt+1,wt+2}
目標 在輸入確定的情況下,最大化輸出值的概率。 在輸入確定的情況下,最大化輸出值的概率。

Hierarchical Softmax

word2vec的輸出層有兩種模型:Hierarchical Softmax和Negative Sampling。

Softmax是DL中常用的輸出層結構,它表徵多分類中的每一個分類所對應的概率

然而在這裡,每個分類表示一個單詞,即:分類的個數=詞彙表的單詞個數。如此眾多的分類直接對映到隱層,顯然並不容易訓練出有效特徵。

Hierarchical Softmax是Softmax的一個變種。這時的輸出層不再是一個扁平的多分類層,而變成了一個層次化的二分類層。

Hierarchical Softmax一般基於Huffman編碼構建。在本例中,我們首先統計詞頻,以獲得每個詞所對應的Huffman編碼,然後輸出層會利用Huffman編碼所對應的層次二叉樹的路徑來計算每個詞的概率,並逆傳播到隱藏層。

由Huffman編碼的特性可知,Hierarchical Softmax的計算量要小於一般的Softmax。

Negative Sampling

在CBOW模型中,已知w的上下文Context(w)需要預測w,則w就是正樣本,而其他詞是負樣本。

負樣本那麼多,該如何選取呢?Negative Sampling就是一種對負樣本取樣的方法。

這裡寫圖片描述

上圖是Negative Sampling的原理圖。L軸表示的是詞頻分佈,很明顯這是一個非等距剖分。而M軸是一個等距剖分。

每次生成一個M軸上的隨機數,將之對映到L軸上的一個單詞。對映方法如上圖中的虛線所示。

除了word2vec之外,類似的Word Embedding方案還有SENNA、RNN-LM、Glove等。但影響力仍以word2vec最大。

Skip-Gram Negative Sampling,又被簡稱為SGNS。

doc2vec

我們知道,word是sentence的基本組成單位。一個最簡單也是最直接得到sentence embedding的方法是將組成sentence的所有word的embedding向量全部加起來。

顯然,這種簡單粗暴的方法會丟失很多資訊。

doc2vec是Mikolov在word2vec的基礎上提出的一種生成句子向量的方法。

論文:

《Distributed Representations of Sentences and Documents》

這裡寫圖片描述

上圖是doc2vec的框架圖,可以看出doc2vec的原理與word2vec基本一致,區別僅在於前者多出來一個Paragraph Vector參與CBOW或Skip-gram的訓練。

Paragraph Vector可以和Word Vector一起生成,也可以單獨生成,也就是訓練時,採用預訓練的Word Vector,並只改變Paragraph Vector的值。

如何通過詞向量技術來計算2個文件的相似度?

FastText

Word2Vec作者Mikolov加盟Facebook之後,提出了文字分類新作FastText。

FastText模型架構和Word2Vec中的CBOW模型很類似。不同之處在於,FastText預測標籤,而CBOW模型預測中間詞。

Github:

Item2Vec

本質上,word2vec模型是在word-context的co-occurrence矩陣基礎上建立起來的。因此,任何基於co-occurrence矩陣的演算法模型,都可以套用word2vec演算法的思路加以改進。

比如,推薦系統領域的協同過濾演算法。

協同過濾演算法是建立在一個user-item的co-occurrence矩陣的基礎上,通過行向量或列向量的相似性進行推薦。如果我們將同一個user購買的item視為一個context,就可以建立一個item-context的矩陣。進一步的,可以在這個矩陣上借鑑CBoW模型或Skip-gram模型計算出item的向量表達,在更高階上計算item間的相似度。

論文:

《Item2Vec: Neural Item Embedding for Collaborative Filtering》

word2vec/doc2vec的缺點

1.word2vec/doc2vec基於BOW(Bag Of Word,詞袋)模型。該模型的特點是忽略詞序,因此對於那些交換詞序會改變含義的句子,無法準確評估它們的區別。