1瓣履、One-Hot representation
又稱為有效編碼船响,主要是采用N位狀態(tài)寄存器來對N個狀態(tài)進(jìn)行編碼,每個狀態(tài)都有獨立的寄存器位窿侈,并且在任意時候只有一位有效。
在實際的機(jī)器學(xué)習(xí)應(yīng)用任務(wù)中秋茫,特征有時候并不總是連續(xù)值史简,有可能是一些分類值,如性別可分為:男/女肛著,對于這樣的特征圆兵,通常我們需要對其進(jìn)行特征數(shù)字化;還可能有一些離散值枢贿,在回歸殉农,分類,聚類等算法中萨咕,特征之間距離的計算或相似度的計算是非常重要的统抬,而我們常用的距離或相似度的計算都是在歐式空間的相似度計算,計算余弦相似性危队,基于的就是歐式空間聪建。而我們使用one-hot編碼,將離散特征的取值擴(kuò)展到了歐式空間茫陆,離散特征的某個取值就對應(yīng)歐式空間的某個點金麸,這樣會讓特征之間的距離計算更加合理。One-Hot編碼是分類變量作為二進(jìn)制向量的表示簿盅。這首先要求將分類值映射到整數(shù)值挥下。然后,每個整數(shù)值被表示為二進(jìn)制向量桨醋,除了整數(shù)的索引之外棚瘟,它都是零值,它被標(biāo)記為1喜最。
舉個例子來說吧偎蘸,按照N位狀態(tài)寄存器來對N個狀態(tài)進(jìn)行編碼的原理,我們這樣處理:
性別特征:["男","女"](這里N=2):
男 => 10
女 => 01
祖國特征:["中國","美國"迷雪,"法國"](這里N=3):
中國 => 100
美國 => 010
法國 => 001
運動特征:["足球"限书,"籃球","排球"章咧,"乒乓球"](這里N=4):
足球 => 1000
籃球 => 0100
排球 => 0010
乒乓球 => 0001
那么如果一個樣本為["男","中國","乒乓球"]的時候倦西,完整的特征數(shù)字化的結(jié)果為:
[1,0赁严,1扰柠,0,0误澳,0耻矮,0秦躯,0忆谓,1]
通過這個例子我們可以清晰地看到One-Hot的優(yōu)缺點:
1,通過one-hot編碼踱承,可以對特征進(jìn)行了擴(kuò)充倡缠。
2,連續(xù)變量經(jīng)過編碼后茎活,從一個權(quán)重變?yōu)槎鄠€權(quán)重昙沦,提升了模型的非線性能力。
3载荔,不需要多參數(shù)進(jìn)行歸一化處理盾饮。
4,隨著將大權(quán)重拆分成幾個小權(quán)重管理特征懒熙,降低了異常值對模型的影響丘损,增加了模型穩(wěn)定性。
5工扎,生成了較大的稀疏矩陣徘钥。
2、分布式表示(Distributed representation)
分布式表示肢娘,描述的是把文本分散嵌入到另一個空間呈础,一般從是從高維空間“嵌入”到低維空間〕鹘。基本思路是通過訓(xùn)練將每個詞映射成一個固定長度的短向量(當(dāng)然這里的“短”是相對于 one-hot representation 的“長”而言的)而钞,所有這些向量就構(gòu)成一個詞向量空間,每一個向量可視為該空間上的一個點拘荡。此時向量長度可以自由選擇臼节,與詞典規(guī)模無關(guān)。
為更好地理解上述思想,我們來舉一個通俗的例子:假設(shè)在二維平面上分布有 N 個不同的點官疲,給定其中的某個點袱结,現(xiàn)在想在平面上找到與這個點最相近的一個點,我們是怎么做的呢途凫?首先垢夹,建立一個直角坐標(biāo)系,基于該坐標(biāo)系维费,其上的每個點就唯一地對應(yīng)一個坐標(biāo) (x,y)果元;接著引入歐氏距離;最后分別計算這個點與其他 N-1 個點之間的距離犀盟,對應(yīng)最小距離值的那個點便是我們要找的點了而晒。
上面的例子中,坐標(biāo)(x,y) 的地位相當(dāng)于詞向量阅畴,它用來將平面上一個點的位置在數(shù)學(xué)上作量化倡怎。坐標(biāo)系建立好以后,要得到某個點的坐標(biāo)是很容易的贱枣,然而监署,在 NLP 任務(wù)中,要得到詞向量就復(fù)雜得多了纽哥,而且詞向量并不唯一钠乏,其質(zhì)量也依賴于訓(xùn)練語料、訓(xùn)練算法和詞向量長度等因素春塌。
word2vector
word2vec工具的提出正是為了解決上面這個問題 晓避。它將每個詞表示成一個定長的向量,并使得這些向量能較好地表達(dá)不同詞之間的相似和類比關(guān)系只壳。我們要知道的是:CBOW(Continuous Bag-of-Words Model)和Skip-gram (Continuous Skip-gram Model)俏拱,是word2vec的兩種訓(xùn)練模式。而負(fù)采樣(Negative Sample)和層次softmax(Hierarchical Softmax)則是兩種加速訓(xùn)練的方法吕世。
基于Hierarchical Softmax的連續(xù)詞袋模型(CBOW)
層次softmax的基本原理:
根據(jù)標(biāo)簽(label)和頻率建立霍夫曼樹彰触;(label出現(xiàn)的頻率越高,Huffman樹的路徑越短)
Huffman樹中每一葉子結(jié)點代表一個label命辖;
具體實現(xiàn)方法就是將輸入層中的詞和詞組構(gòu)成特征向量况毅,再將特征向量通過線性變換映射到隱藏層,隱藏層通過求解最大似然函數(shù)尔艇,然后根據(jù)每個類別的權(quán)重和模型參數(shù)構(gòu)建哈夫曼樹尔许,將哈夫曼樹作為輸出。
假如現(xiàn)在有1000篇新聞文檔终娃,把這些文檔拆成一個個的字味廊,去重后得到3000個字,然后把這3000個字作為字典,進(jìn)行文本表示的模型余佛,叫做詞袋模型柠新。這種模型的特點是字典中的字沒有特定的順序,句子的總體結(jié)構(gòu)也被舍棄了辉巡。
從上面詞袋模型的示意圖可以看出恨憎,詞袋模型擁有三層,與神經(jīng)概率語言模型相比郊楣,主要有以下三點不同:
1憔恳、從輸入層到投影層:不是拼接,而是累加求和净蚤;
2钥组、沒有隱藏層;
3今瀑、輸出層不再是線性結(jié)構(gòu)程梦,而是樹形結(jié)構(gòu)。
輸入層
Context(w)=[w(t?2),w(t?1),w(t+1),w(t+2)]
所以共有2c*m個節(jié)點放椰。
一般神經(jīng)網(wǎng)絡(luò)的輸入都是已知的, 而Word2Vec 網(wǎng)絡(luò)中的輸入, 是通過SoftMax()計算后才得到的作烟。
投影層
有m個節(jié)點。對輸入層各詞向量作加和處理砾医。projection(w)=∑Context(w)
輸出層
輸出層是一棵樹, 一棵哈夫曼樹! 這是與普通神經(jīng)網(wǎng)絡(luò)的顯著不同之處。 這棵樹的葉子節(jié)點數(shù)就是詞典D的大小∣D∣衣厘。
(原圖上傳為橫向错邦,有需要的可聯(lián)系私發(fā))
基于Hierarchical Softmax的跳字模型(Skip-gram)
跳字模型假設(shè)基于某個詞來生成它在文本序列周圍的詞。
Negative Sample 負(fù)采樣
訓(xùn)練一個神經(jīng)網(wǎng)絡(luò)意味著要輸入訓(xùn)練樣本并且不斷調(diào)整神經(jīng)元的權(quán)重,從而不斷提高對目標(biāo)的準(zhǔn)確預(yù)測妆兑。每當(dāng)神經(jīng)網(wǎng)絡(luò)經(jīng)過一個訓(xùn)練樣本的訓(xùn)練魂拦,它的權(quán)重就會進(jìn)行一次調(diào)整。語料庫的大小決定了權(quán)重矩陣的規(guī)模大小搁嗓。需要承認(rèn)的是使用哈夫曼樹來代替?zhèn)鹘y(tǒng)的神經(jīng)網(wǎng)絡(luò)芯勘,可以提高模型訓(xùn)練的效率。但是如果我們的訓(xùn)練樣本里的中心詞w是一個很生僻的詞腺逛,那么就得在哈夫曼樹中辛苦的向下走很久了荷愕。我們可以用這三個方法來減少計算量:
1、將常見的單詞組合(word pairs)或者詞組作為單個“words”來使用。
2安疗、對高頻詞進(jìn)行抽樣來減少訓(xùn)練樣本的個數(shù)
3抛杨、最后最重要的一點,就是“nagative sampling”方法荐类,這樣每個訓(xùn)練樣本只會更新一小部分模型權(quán)重蝶桶,從而降低計算負(fù)擔(dān)。