Word2Vec介紹
Word2Vec是一個(gè)將單詞轉(zhuǎn)換成向量形式的工具刁俭≈芏#可以把對(duì)文本內(nèi)容的處理簡(jiǎn)化為向量空間中的向量運(yùn)算所禀,計(jì)算出向量空間上的相似度,來(lái)表示文本語(yǔ)義上的相似度屁奏。(Word Embedding是根據(jù)該word在句中的上下文來(lái)決定的)可以提高模型的泛化能力岩榆。
1.在應(yīng)用中充當(dāng)語(yǔ)言模型
2.什么是語(yǔ)言模型?
我說(shuō)的一句話中坟瓢,后一個(gè)詞出現(xiàn)的概率總是和前一個(gè)出現(xiàn)的概率是相關(guān)的勇边。
如 我 = p(w1),今天=p(w2|w1)=“我”出現(xiàn)的情況下折联,“今天”出現(xiàn)的概率
3.存在的問(wèn)題
最后一個(gè)詞的概率粒褒,如果句子過(guò)長(zhǎng)會(huì)導(dǎo)致計(jì)算量過(guò)大,同時(shí)后一個(gè)詞和前一個(gè)詞組合的可能性越多诚镰,那么計(jì)算量也會(huì)增大奕坟。
4.一種解決辦法-N-gram
之前是后一個(gè)詞出現(xiàn)的概率只和前一個(gè)詞有關(guān),這樣會(huì)導(dǎo)致數(shù)據(jù)稀疏和參數(shù)空間太大清笨。
現(xiàn)在在改進(jìn)之后月杉,后一個(gè)詞出現(xiàn)的概率會(huì)和前N個(gè)詞有關(guān)。
4.1例子:下面以 I want Chinese food 為例
如這里統(tǒng)計(jì)了一個(gè)語(yǔ)料庫(kù)抠艾,以1-gram為例苛萎。i 出現(xiàn)的次數(shù)是2533,eat 在i后面出現(xiàn)的次數(shù)是9检号,那么概率為 9 / 2533 ≈ 0.0036.
4.2N-gram模型參數(shù)的量級(jí)
N代表語(yǔ)料庫(kù)詞的個(gè)數(shù)腌歉,n代表是依賴前幾個(gè)詞。通常會(huì)讓n=2或3齐苛。
5.詞向量(word to vector)
人類認(rèn)識(shí)詞翘盖,但是計(jì)算機(jī)認(rèn)識(shí)0和1,那么這時(shí)候就需要使用一種方法(如One-hot編碼)轉(zhuǎn)換這些詞讓計(jì)算機(jī)來(lái)識(shí)別這些詞脸狸。但是這樣的方法過(guò)于簡(jiǎn)單最仑,現(xiàn)在需要的詞向量需要能夠代表存在一種潛在的含義。
向量就是一些值的排列炊甲,可以讓它的值的范圍在-1到1之間泥彤,同時(shí)也可以向量的維度,向量的維度與向量的復(fù)雜程度呈正相關(guān)卿啡。
在語(yǔ)料庫(kù)中吟吝,詞和詞之間是有一定的距離的。
此前提到的詞向量在向量空間生成的時(shí)候要代表一定的含義就是颈娜,意思相似的詞剑逃,他們之間的距離應(yīng)該是相近的浙宜。(即生成的向量空間和真實(shí)的語(yǔ)言越相關(guān),那么計(jì)算機(jī)所生成的語(yǔ)言也會(huì)越相關(guān)蛹磺。or 兩個(gè)詞上下文相似粟瞬,則它們的語(yǔ)義也相似)
6.詞向量在神經(jīng)網(wǎng)絡(luò)模型中的應(yīng)用(2003)
鑒于N-gram等模型的不足,2003年萤捆,Bengio等人發(fā)表了一篇開(kāi)創(chuàng)性的文章:A neural probabilistic language model裙品。在這篇文章里,他們總結(jié)出了一套用神經(jīng)網(wǎng)絡(luò)建立統(tǒng)計(jì)語(yǔ)言模型的框架(Neural Network Language Model俗或,以下簡(jiǎn)稱NNLM)市怎,并首次提出了word embedding的概念(雖然沒(méi)有叫這個(gè)名字),從而奠定了包括word2vec在內(nèi)后續(xù)研究word representation learning的基礎(chǔ)辛慰。
7.Word2Vec:CBOW 含有一定層次的Softmax
Word2Vec實(shí)際上是兩種不同的方法:Continuous Bag of Words (CBOW)和Skip-gram区匠。CBOW的目標(biāo)是根據(jù)上下文來(lái)預(yù)測(cè)當(dāng)前詞語(yǔ)的概率。Skip-gram剛好相反:根據(jù)當(dāng)前詞語(yǔ)來(lái)預(yù)測(cè)上下文的概率(如下圖所示)帅腌。這兩種方法都利用人工神經(jīng)網(wǎng)絡(luò)作為它們的分類算法驰弄。起初,每個(gè)單詞都是一個(gè)隨機(jī) N 維向量狞膘。經(jīng)過(guò)訓(xùn)練之后揩懒,該算法利用 CBOW 或者 Skip-gram 的方法獲得了每個(gè)單詞的最優(yōu)向量。
7.1CBOW簡(jiǎn)介
預(yù)測(cè)的概率值越大越好挽封。
7.2為什么要用Hierarchical Softmax模型已球?
因?yàn)镃BOW最后OUTPUT得到的詞向量維度太高,此時(shí)利用Hierarchical Softmax模型作為CBOW的輸出層OUTPUT辅愿,來(lái)解決高緯度問(wèn)題并保證詞向量都完備沒(méi)有丟失智亮。它利用哈夫曼樹(shù)構(gòu)造多個(gè)二分類,讓詞向量達(dá)成了這種分層的思想点待。
取一個(gè)適當(dāng)大小的窗口當(dāng)做語(yǔ)境(上下文)阔蛉,輸入層讀入窗口內(nèi)的詞,將它們的向量(K維癞埠,初始隨機(jī))加和在一起状原,形成隱藏層K個(gè)節(jié)點(diǎn)。輸出層是一個(gè)巨大的二叉樹(shù)苗踪,葉節(jié)點(diǎn)代表語(yǔ)料里所有的詞(語(yǔ)料含有V個(gè)獨(dú)立的詞颠区,則二叉樹(shù)有|V|個(gè)葉節(jié)點(diǎn))。而這整顆二叉樹(shù)構(gòu)建的算法就是Huffman樹(shù)通铲。這樣毕莱,對(duì)于葉節(jié)點(diǎn)的每一個(gè)詞,就會(huì)有一個(gè)全局唯一的編碼,形如"010011"朋截,不妨記左子樹(shù)為1蛹稍,右子樹(shù)為0。接下來(lái)部服,隱層的每一個(gè)節(jié)點(diǎn)都會(huì)跟二叉樹(shù)的內(nèi)節(jié)點(diǎn)有連邊唆姐,于是 對(duì)于二叉樹(shù)的每一個(gè)內(nèi)節(jié)點(diǎn)都會(huì)有K條連邊,每條邊上也會(huì)有權(quán)值廓八。
7.3哈夫曼樹(shù)
構(gòu)造目的和帶權(quán)路徑最短:讓不同的節(jié)點(diǎn)能夠有優(yōu)先級(jí)厦酬,如高頻使用的單詞讓它們的帶權(quán)路徑長(zhǎng)度盡量小。
7.3.1哈夫曼樹(shù)的構(gòu)造以及哈夫曼編碼
權(quán)重小的節(jié)點(diǎn)置于左邊瘫想;哈夫曼編碼左為0,右為1昌讲,則D的哈夫曼編碼為0国夜,A的哈夫曼編碼為111。
Hierarchical Softmax 就是利用這種分層的思想短绸,將優(yōu)先級(jí)更高的向量放在前面车吹。
7.4CBOW模型
7.4.1Logistic回歸模型
其實(shí)Softmax就是一個(gè)多分類的邏輯回歸,由多個(gè)邏輯回歸組合在一起醋闭。
7.5CBOW原理
7.6CBOW參數(shù)含義約定
7.7CBOW求解實(shí)例
右為正例窄驹。左為負(fù)例。將剛才CBOW的θ數(shù)量級(jí)壓縮成log級(jí)別证逻,都?jí)嚎s到了非葉子節(jié)點(diǎn)上乐埠。形成了四條決策路徑,四個(gè)sigmoid囚企。
7.7CBOW求解目標(biāo)函數(shù)
根據(jù)上面的實(shí)例和約定好的參數(shù)含義丈咐,利用最大似然函數(shù)得到目標(biāo)函數(shù),這里用到log函數(shù)的公式對(duì)目標(biāo)函數(shù)進(jìn)行了展開(kāi)龙宏。目標(biāo)函數(shù)的目標(biāo)讓其中的概率p值越大越好棵逊。
7.8CBOW梯度上升求解最優(yōu)參數(shù)
既然要讓目標(biāo)函數(shù)得到最大值(極值),那么就是一個(gè)梯度上升的問(wèn)題银酗。
對(duì)函數(shù)進(jìn)行求導(dǎo)辆影,那么導(dǎo)數(shù)點(diǎn)為極值點(diǎn)。η為學(xué)習(xí)率黍特, x_w為投影層向量
似然函數(shù)是由很多的θ參數(shù)決定的蛙讥,那么似然函數(shù)對(duì)它求偏導(dǎo)即可解決θ的更新問(wèn)題。
x_w參數(shù)對(duì)于目標(biāo)函數(shù)也有一定影響衅澈,那么也可以對(duì)x_w投影層詞向量進(jìn)行更新键菱,同理,似然函數(shù)對(duì)齊求偏導(dǎo)。
Google出品的word2vec经备,它認(rèn)為每個(gè)詞向量v(w)都與和向量X_w是相關(guān)的拭抬,那么直接將X_w的更新量整個(gè)應(yīng)用到每個(gè)單詞的詞向量上去。好處是所有的詞向量更新會(huì)有整體的趨勢(shì)侵蒙,分配的空間是類似的造虎,保證屬于上下文的邏輯。
即沿著最大最好的優(yōu)化目標(biāo)纷闺,提出梯度上升的解決方案算凿,用這種方案不斷的優(yōu)化更新θ和X_w,最終得到每個(gè)詞的詞向量v(w)犁功。
7.8總結(jié)
對(duì)于語(yǔ)料庫(kù)中的某個(gè)詞w_t氓轰,對(duì)應(yīng)著二叉樹(shù)的某個(gè)葉子節(jié)點(diǎn),因此它必然有一個(gè)二進(jìn)制編碼浸卦,如"010011"署鸡。在訓(xùn)練階段,當(dāng)給定上下文限嫌,要預(yù)測(cè)后 面的詞w_t的時(shí)候靴庆,我們就從二叉樹(shù)的根節(jié)點(diǎn)開(kāi)始遍歷,這里的目標(biāo)就是預(yù)測(cè)這個(gè)詞的二進(jìn)制編號(hào)的每一位怒医。
即對(duì)于給定的上下文炉抒,我們的目標(biāo)是使得預(yù)測(cè)詞的二 進(jìn)制編碼概率最大。形象地說(shuō)稚叹,我們希望在根節(jié)點(diǎn)焰薄,詞向量和與根節(jié)點(diǎn)相連經(jīng)過(guò) logistic 計(jì)算得到 bit=1 的概率盡量接近 0,在第二層扒袖,希望其 bit=1 的概率盡量接近1蛤奥,這么一直下去,我們把一路上計(jì)算得到的概率相乘僚稿,即得到目標(biāo)詞w_t在當(dāng)前網(wǎng)絡(luò)下的概率P(w_t)凡桥,那么對(duì)于當(dāng)前這個(gè) sample的殘差就是1-P(w_t),于是就可以使用梯度下降法訓(xùn)練這個(gè)網(wǎng)絡(luò)得到所有的參數(shù)值了蚀同。顯而易見(jiàn)缅刽,按照目標(biāo)詞的二進(jìn)制編碼計(jì)算到最后的概率 值就是歸一化的。
Hierarchical Softmax用Huffman編碼構(gòu)造二叉樹(shù)蠢络,其實(shí)借助了分類問(wèn)題中衰猛,使用一連串二分類近似多分類的思想。例如我們是把所有的詞都作為輸出刹孔,那么“桔 子”啡省、“汽車”都是混在一起。給定w_t的上下文,先讓模型判斷w_t是不是名詞卦睹,再判斷是不是食物名畦戒,再判斷是不是水果,再判斷是不是“桔子”结序。
但是在訓(xùn)練過(guò)程中障斋,模型會(huì)賦予這些抽象的中間結(jié)點(diǎn)一個(gè)合適的向量,這個(gè)向量代表了它對(duì)應(yīng)的所有子結(jié)點(diǎn)徐鹤。因?yàn)檎嬲膯卧~公用了這些抽象結(jié)點(diǎn)的向量垃环,所 以Hierarchical Softmax方法和原始問(wèn)題并不是等價(jià)的,但是這種近似并不會(huì)顯著帶來(lái)性能上的損失同時(shí)又使得模型的求解規(guī)模顯著上升返敬。
沒(méi)有使用這種二叉樹(shù)遂庄,而是直接從隱層直接計(jì)算每一個(gè)輸出的概率——即傳統(tǒng)的Softmax,就需要對(duì)|V|中的每一 個(gè)詞都算一遍劲赠,這個(gè)過(guò)程時(shí)間復(fù)雜 度是O(|V|)的涧团。而使用了二叉樹(shù)(如Word2vec中的Huffman樹(shù)),其時(shí)間復(fù)雜度就降到了O(log2(|V|))经磅,速度大大地加快了。
現(xiàn)在這些詞向量已經(jīng)捕捉到上下文的信息钮追。我們可以利用基本代數(shù)公式來(lái)發(fā)現(xiàn)單詞之間的關(guān)系(比如预厌,“國(guó)王”-“男人”+“女人”=“王后”)。這些詞向量可 以代替詞袋用來(lái)預(yù)測(cè)未知數(shù)據(jù)的情感狀況元媚。該模型的優(yōu)點(diǎn)在于不僅考慮了語(yǔ)境信息還壓縮了數(shù)據(jù)規(guī)模(通常情況下轧叽,詞匯量規(guī)模大約在300個(gè)單詞左右而不是之前 模型的100000個(gè)單詞)。因?yàn)樯窠?jīng)網(wǎng)絡(luò)可以替我們提取出這些特征的信息刊棕,所以我們僅需要做很少的手動(dòng)工作炭晒。但是由于文本的長(zhǎng)度各異,我們可能需要利用 所有詞向量的平均值作為分類算法的輸入值甥角,從而對(duì)整個(gè)文本文檔進(jìn)行分類處理网严。
然而,即使上述模型對(duì)詞向量進(jìn)行平均處理嗤无,我們?nèi)匀缓雎粤藛卧~之間的排列順序?qū)η楦蟹治龅挠绊懻鹗<瓷鲜龅膚ord2vec只是基于詞的維度進(jìn)行"語(yǔ)義分析"的,而并不具有上下文的"語(yǔ)義分析"能力当犯。
同時(shí)垢村,Word2Vec是對(duì)于每個(gè)local context window單獨(dú)訓(xùn)練,沒(méi)有利用包含全局共現(xiàn)矩陣global co-currence中的統(tǒng)計(jì)信息嚎卫;它對(duì)多義詞無(wú)法很好的表示和處理嘉栓,因?yàn)槭褂昧宋ㄒ坏脑~向量。
8.用負(fù)采樣模型Negative Sampling來(lái)分類,進(jìn)而訓(xùn)練word2vec的網(wǎng)絡(luò)模型
利用Hierarchical Softmax 分層來(lái)訓(xùn)練Word2Vec中的參數(shù)侵佃,······可能有些啰嗦和計(jì)算量過(guò)大麻昼,現(xiàn)在用另一種方法。
比如有一個(gè)句子 我今天想打___.
給定上下文的語(yǔ)境下去預(yù)測(cè)詞趣钱,給定正樣本是 球涌献, 負(fù)樣本是除球之外的詞,比如 人首有、動(dòng)物燕垃、氣球等等。
假設(shè)output映射出了10w個(gè)詞向量井联,規(guī)定一個(gè)詞向量為正樣本卜壕,那么負(fù)樣本就會(huì)有很多,那么我們?cè)撊绾芜x擇恰當(dāng)?shù)呢?fù)樣本烙常?
得到似然目標(biāo)函數(shù)轴捎。
利用似然函數(shù)對(duì)θ和X_w參數(shù)進(jìn)行求偏導(dǎo).
最終得到了優(yōu)化好的v(w),此時(shí)就是我們想要的詞向量。
9.Skip-gram和CBOW使用場(chǎng)景
根據(jù)樣本量的大小蚕脏,如果數(shù)據(jù)量大的話使用Skip-gram侦副,反之使用CBOW。
10.工具
Python 使用gensim即可驼鞭。
11.實(shí)戰(zhàn):word2vec工具訓(xùn)練中文模型
Python的話可用jieba完成分詞秦驯,生成分詞文件wiki.zh.text.seg,然后接著用word2vec工具訓(xùn)練挣棕。