深度學習(三)——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維向量
這種表示法由於N維向量中只有一個非零元素,故名。該非零元素的序號,就是所表示的單詞在單詞表中的序號。
One-hot Representation的缺點在於:
1.該表示法中,由於任意兩個單詞的詞向量都是正交的,因此無法反映單詞之間的語義相似度。
2.一個詞庫的大小是
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,即一箇中心詞
名稱 | CBOW | Skip-gram |
---|---|---|
輸入 | ||
輸出 | ||
目標 | 在輸入確定的情況下,最大化輸出值的概率。 | 在輸入確定的情況下,最大化輸出值的概率。 |
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,詞袋)模型。該模型的特點是忽略詞序,因此對於那些交換詞序會改變含義的句子,無法準確評估它們的區別。