編碼
任何信息在計(jì)算機(jī)內(nèi)的存儲(chǔ)方式都是數(shù)字砚婆,更加具體的說是0-1的二進(jìn)制碼意蛀。為了能夠讓生活中的語言能夠存儲(chǔ)于計(jì)算機(jī)中,我們會(huì)給所有的字符(包括字母字符夺饲,漢子等所有的其他語言文字)一個(gè)編碼方式奸汇,比如小寫字母a在計(jì)算機(jī)中編碼的十進(jìn)制是97,大寫字母A的編碼是65往声。只要每個(gè)字符的編碼能夠區(qū)別于其他的字符就行擂找。當(dāng)然為了處理更加復(fù)雜的問題,比如單詞浩销,詞語贯涎。同樣需要用“數(shù)字”去表示它們。這里的數(shù)字就是指向量撼嗓。
one-hot 表示
one-hot詞表示方式是構(gòu)造與詞字典相同長度的向量柬采,所有的詞按照一定次序,向量的某個(gè)維度不為0且警,表示該位置的詞粉捻。也就是說詞向量的表示其中一位不為0,其余的都是零斑芜。
例如:
字典只有5個(gè)詞
V = {"don't", "hate", "I", "it", "love"}
e.g. : hate=[0,1,0,0,0], it=[0,0,0,1,0]
對(duì)于一句話可以有兩種表示方式:一種是將對(duì)于的詞向量拼接起來肩刃,還有一種是計(jì)算句子中每個(gè)詞出現(xiàn)的頻數(shù)。
D="I love it"
sequential 表示方式:[00100 | 00001 | 00010]
bag of words(BOW)表示方式:[00111]
seq的表示方式具有詞序的信息,長度是隨著句子的長度增長而 增長盈包,而bow表示方式?jīng)]有詞序信息沸呐,但是長度固定。
對(duì)于one-hot的表示方式存在以下的三點(diǎn)缺點(diǎn):
- 每個(gè)詞的向量長度等于詞匯表的長度呢燥,英語常見單詞50000崭添,中文的更加多,常見的詞匯至少500000叛氨。對(duì)于seq的表示方式將是無法接受的呼渣。
- 雖然BOW的長度固定,但是BOW的表示方式?jīng)]有詞序寞埠。
- 這種表示方式喪失了詞的語義信息屁置。
word2vec (Distributed representation)
word2vec就是一種word 的低維表示方式,或者稱為word distributed representation.[1],[2]
這兩篇Paper都是Google 的 Tomas Mikolov 2013年的工作仁连,并公布了代碼蓝角。他提出了兩個(gè)模型CBOW和Skip-gram。其實(shí)更早做word 的distributed representation的是 bengio 2003 年的paper “A Neural Probabilistic Language Model”[3]
word2vec方法有兩個(gè)重要的特點(diǎn),一個(gè)是速度快,另一個(gè)是具有語義信息绝淡,如果兩個(gè)詞的含義比較接近的話,它們?cè)谙蛄靠臻g也比較接近并徘;并且能夠得到如下的類似于"A-B = C-D",比如“中國- 北京 = 法國-巴黎”扰魂,即北京市中國的首都麦乞,巴黎是法國的首都。word2vec得到的向量是低維的劝评,一般維度在50-200維姐直,相比于one-hot的幾萬維甚至幾十萬維大大降低了存儲(chǔ)效率。
參考
[1].Distributed Representations of Words and Phrases and their Compositionality
[2].Efficient Estimation of Word Representations in Vector Space
[3].A Neural Probabilistic Language Model