詞嵌入
什么是Embedding
Embedding在數(shù)學(xué)上表示一個(gè)maping, 几于, 也就是一個(gè)映射函數(shù)。通俗的翻譯可以認(rèn)為是向量嵌入坯辩,就是把X所屬空間的向量映射為到Y(jié)空間的多維向量相嵌,那么該多維向量相當(dāng)于嵌入到Y(jié)所屬空間中,一個(gè)蘿卜一個(gè)坑您炉。為什么詞嵌入
在NLP任務(wù)中,我們所遇到的最原始的輸入,可能是語音片段(各種智障音箱),也可能是文字片段(智障小冰),要想通過算法完成分類等任務(wù),必須先將輸入轉(zhuǎn)換為算法模型可以處理的形式:向量.什么是詞嵌入
詞嵌入(Word Embeding)是用向量來表述詞的方式,我個(gè)人的理解是,將高維度的原始詞向量進(jìn)行降維處理,同時(shí)加入語義信息與上下文信息.這里的詞,一般指對原始文本進(jìn)行分詞后得到的最小片段,最近兩年的很多工作已經(jīng)跳過了分詞的過程,直接做字符級的嵌入,我們的系統(tǒng)在迭代過程中也做了這樣的嘗試,并且取得了不錯(cuò)的效果.
可以說,詞嵌入是NLP任務(wù)中的基礎(chǔ)工作,也是非常關(guān)鍵的一環(huán),詞嵌入的好壞直接影響算法模型的效果.近年主要工作
最原始的詞嵌入方式是onehot,這種方式簡單粗暴,并且在某些任務(wù)上取得了不錯(cuò)的效果.但是卻有非常致命的缺點(diǎn):只有統(tǒng)計(jì)學(xué)的意義,無法表征語義,比如沙雕永遠(yuǎn)不可能被理解為傻吊;此外當(dāng)詞典變大時(shí),向量長度也隨之變大,并且詞嵌入的結(jié)果非常的稀疏,嚴(yán)重影響算法的準(zhǔn)度與訓(xùn)練速度.
2001年, Bengio 等人正式提出神經(jīng)網(wǎng)絡(luò)語言模型( Neural Network Language Model 役电,NNLM)赚爵,該模型在學(xué)習(xí)語言模型的同時(shí),也得到了詞向量法瑟。
詞嵌入研究興起的主力應(yīng)該就是谷歌于2013年開源的word2vec了, 后面又出現(xiàn)了fasttext, glove等,去年出了兩個(gè)影響力較大的與訓(xùn)練詞嵌入模型:ELMo與BERT, 暫時(shí)沒有非常有效的應(yīng)用.此外,針對中文的詞嵌入,還有騰訊AIlab與螞蟻金融提出的基于文字圖像的嵌入模型,實(shí)用性未知.
Word2Vec從提出至今冀膝,已經(jīng)成為了深度學(xué)習(xí)在自然語言處理中的基礎(chǔ)部件,大大小小瓢谢、形形色色的DL模型在表示詞畸写、短語、句子氓扛、段落等文本要素時(shí)都需要用word2vec來做word-level的embedding。Word2Vec的作者Tomas Mikolov是一位產(chǎn)出多篇高質(zhì)量paper的學(xué)者论笔,從RNNLM采郎、Word2Vec再到最近流行的FastText都與他息息相關(guān)。一個(gè)人對同一個(gè)問題的研究可能會(huì)持續(xù)很多年狂魔,而每一年的研究成果都可能會(huì)給同行帶來新的啟發(fā)蒜埋,本期的PaperWeekly將會(huì)分享其中三篇代表作,分別是:
1最楷、Efficient Estimation of Word Representation in Vector Space, 2013
2整份、Distributed Representations of Sentences and Documents, 2014
3、Enriching Word Vectors with Subword Information, 2016
word2vec原理
word2vec主要解決什么問題?
簡而言之,如何在一個(gè)大型數(shù)據(jù)集上通過無監(jiān)督學(xué)習(xí)快速籽孙、準(zhǔn)確地學(xué)習(xí)出詞表示.
word2vec是怎么做的烈评?
利用訓(xùn)練語料使用cbow或者skip-gram構(gòu)建一個(gè)單層的神經(jīng)網(wǎng)絡(luò)分類器,最終隱藏層的參數(shù)向量就是對應(yīng)詞的詞向量犯建。
這里從知乎上的一個(gè)回答里讲冠,得到兩張圖,可以比較好的解釋其訓(xùn)練過程适瓦。
可以看出來竿开,訓(xùn)練過程中只構(gòu)建了最淺層的的神經(jīng)網(wǎng)絡(luò)谱仪,輸入為one-hot后的向量,輸出也為對應(yīng)的詞否彩,實(shí)際上作者針對One-hot的問題使用了Hoffman樹進(jìn)行優(yōu)化疯攒。
Cbow與skipgram
- cbow
cbow(continuous bag-of-words)也就是連續(xù)詞袋模型。簡而言之就是用語料中,某個(gè)詞w左右的n個(gè)詞去預(yù)測w.
所以使用模型描述就是 - skipgram
skipgram與cbow的思路正好相反,使用每個(gè)詞去預(yù)測其上下文的概率.因此使用模型描述就是
簡單的圖對比二者
那么,如何模型的輸入與輸出分別是什么?
輸入是根據(jù)詞典構(gòu)建的一個(gè)初始化詞向量, 輸出是預(yù)測得到的詞的詞向量.作者使用了霍夫曼編碼對softmax過程進(jìn)行了優(yōu)化,也就是后面即將提到的層次softmax.
下面介紹霍夫曼編碼.
霍夫曼編碼
霍夫曼編碼實(shí)際上是信息論領(lǐng)域的一種無損壓縮的可變長編碼算法.這里有幾個(gè)關(guān)鍵詞: 無損壓縮, 可變長.不難發(fā)現(xiàn), 首先霍夫曼編碼本質(zhì)上是一種壓縮算法,能對信息進(jìn)行無損的壓縮;其次是可變長, 體現(xiàn)在霍夫曼編碼是以來源符號出現(xiàn)的頻率來進(jìn)行編碼的,并且出現(xiàn)頻率越高,編碼的比特越少,這樣使得最終對所有數(shù)據(jù)的編碼長度之和最小.
- 霍夫曼編碼的構(gòu)建思路
通過霍夫曼樹(最優(yōu)二叉樹)來逐步構(gòu)建霍夫曼編碼, 霍夫曼樹是一種帶權(quán)路徑長度最短的二叉樹,其中樹的路徑長度是從根到每一節(jié)點(diǎn)的路徑長度之和.
二叉樹的帶權(quán)路徑長度記為:
其中,為節(jié)點(diǎn)權(quán)值,為節(jié)點(diǎn)路徑長度 - 霍夫曼算法[1]
根據(jù)霍夫曼樹的定義,要使wpl值越小, 必須使權(quán)值越大的節(jié)點(diǎn)越靠近根節(jié)點(diǎn),不難發(fā)現(xiàn),其實(shí)這是一種貪心的思想.由此得到霍夫曼算法的步驟如下:
(1)根據(jù)給定的n個(gè)權(quán)值,構(gòu)造n棵只有根節(jié)點(diǎn)的二叉樹.
(2)在森林中選取兩顆根節(jié)點(diǎn)權(quán)值最小的樹作為左右子樹,得到的新的樹的根節(jié)點(diǎn)權(quán)值為其左右子樹根節(jié)點(diǎn)權(quán)值之和.權(quán)值較小的樹放左側(cè).
(3)在森林中刪除(2)中選擇的兩棵樹,同時(shí)加入新的樹.
(4)重復(fù)(2)(3)直至只有一棵樹.
示例:
在word2vec中,使用左側(cè)為1右側(cè)為0,示例中的a就對應(yīng)1,b對應(yīng)01,c對應(yīng)001,d對應(yīng)000
Hierarchical Softmax
-
傳統(tǒng)的NNLM
從傳統(tǒng)的nnml(神經(jīng)網(wǎng)絡(luò)語言模型)說起,通常是簡單只包含一個(gè)隱藏層的分類器,在計(jì)算過程中,由于需要計(jì)算每個(gè)詞的softmax概率,因此輸出層的計(jì)算量相當(dāng)大[2].如圖
- word2vec的特點(diǎn)
word2vec的本質(zhì)也是一種NNLM,但是作者在基本的NNLM之上,做了一些改進(jìn):[2]
(1)輸入層到隱藏層的映射,沒有使用線性變換+激活函數(shù),而是采用簡單的對所有輸入詞向量求和并取平均.
(2)從隱藏層到輸出的softmax層,為了避免計(jì)算每個(gè)詞的softmax概率,word2vec采用了霍夫曼樹來代替從隱藏層到輸出層的映射. - 一些分析
如上圖,如果使用傳統(tǒng)的NNLM,softmax層的計(jì)算復(fù)雜度為,而進(jìn)行編碼后需要預(yù)測的類別數(shù)的期望值為,因此計(jì)算復(fù)雜度至少降低為
參考文獻(xiàn)
[1]簡單愛_wxg.霍夫曼樹[EB/OL].https://www.cnblogs.com/wxgblogs/p/5604853.html,2016-06-21.
[2]劉建平Pinard.word2vec原理(二) 基于Hierarchical Softmax的模型[EB/OL].https://www.cnblogs.com/pinard/p/7243513.html,2017-07-27.