什么是Embedding嵌套?
下面是谷歌官方定義:
一種分類特征,以連續(xù)值特征表示。通常,嵌套是指將高維度向量映射到低維度的空間。例如,您可以采用以下兩種方式之一來表示英文句子中的單詞:
- 表示成包含百萬個元素(高維度)的稀疏向量,其中所有元素都是整數(shù)。向量中的每個單元格都表示一個單獨的英文單詞,單元格中的值表示相應單詞在句子中出現(xiàn)的次數(shù)。由于單個英文句子包含的單詞不太可能超過 50 個,因此向量中幾乎每個單元格都包含 0。少數(shù)非 0 的單元格中將包含一個非常小的整數(shù)(通常為 1),該整數(shù)表示相應單詞在句子中出現(xiàn)的次數(shù)。
- 表示成包含數(shù)百個元素(低維度)的密集向量,其中每個元素都包含一個介于 0 到 1 之間的浮點值。這就是一種嵌套。
嵌套本質(zhì)上是降維,是化稀疏為密集。
嵌套的概念
嵌套是一種映射,將稀疏不連續(xù)的對象映射到實數(shù)向量。
比如下面是300維度的英語單詞嵌套:
blue: (0.01359, 0.00075997, 0.24608, ..., -0.2524, 1.0048, 0.06259)
blues: (0.01396, 0.11887, -0.48963, ..., 0.033483, -0.10007, 0.1158)
orange: (-0.24776, -0.12359, 0.20986, ..., 0.079717, 0.23865, -0.014213)
oranges: (-0.35609, 0.21854, 0.080944, ..., -0.35413, 0.38511, -0.070976)
向量中的這些單獨的維度并沒有什么具體意義,它們是向量的位置、距離關(guān)系的整體圖式表達,以便于機器學習使用。
嵌套對于機器學習的輸入非常重要。分類器Classifier、神經(jīng)網(wǎng)絡(luò)Neura networks普遍工作于實數(shù)向量Real number vector。訓練Train最好是基于密集向量dense vector,全部所有數(shù)值共同定義對象。但是,對于機器學習來說,很多重要的輸入比如文本的單詞,都沒有自然的向量表現(xiàn)形式,嵌套函數(shù)就是這么一個標準且有效的函數(shù),可以把稀疏離散discrete/sparse的對象變?yōu)檫B續(xù)的向量表示法。
嵌套也作為機器學習的輸出值。由于嵌套將物體映射為向量,應用程序可以使用向量空間相似的方法,強健且靈活的估算物體之間的相似性。一個通用的用途就是發(fā)現(xiàn)最近鄰對象。
比如上面的單詞向量,下面是每個單詞的三個最近鄰單詞,用角度來展示:
blue: (red, 47.6°), (yellow, 51.9°), (purple, 52.4°)
blues: (jazz, 53.3°), (folk, 59.1°), (bluegrass, 60.6°)
orange: (yellow, 53.5°), (colored, 58.0°), (bright, 59.9°)
oranges: (apples, 45.3°), (lemons, 48.3°), (mangoes, 50.4°)
最后一行數(shù)字告訴應用程序oranges和apples比較近似(分離45.3度),而和lemons,mangoes稍微區(qū)別大一些(48.3,50.4)。
Tensorflow中的嵌套Embedding
為了創(chuàng)建單詞的嵌套,我們首先把文本劃分為單詞,并為每個詞匯指定一個整數(shù)張量。假設(shè)這已經(jīng)完成,word_ids表示包含這些整數(shù)的向量。比如句子,I have a cat.被劃分為['I','have','a','cat',','],對應的word_ids張量是形狀shape[5],由5個整數(shù)組成,比如[32,177,4,23,16]。要把這些單詞映射為向量,我們需要使用tf.nn.embedding_lookup來生成嵌套變量。
word_embeddings = tf.get_variable(“word_embeddings”,
[vocabulary_size, embedding_size])
embedded_word_ids = tf.nn.embedding_lookup(word_embeddings, word_ids)
如上,張量embedded_word_ids的形狀變?yōu)閇5,embedding_size],包含了5個嵌套(密集矢量)對應每個單詞。訓練結(jié)束后,word_embeddings將包含所有詞匯單詞的嵌套。
#如果Embedding_size=3,那么embedded_word_ids可能是
[[0.438890,0.782233,0.52721],
[0.645432,0.523233,0.62333],
[0.412333,0.124522,0.67223],
[0.145333,0.133422,0.67223],
[0.988888,0.765556,0.13344],
]
嵌套可以被多種網(wǎng)絡(luò)類型訓練,各種損失函數(shù)和數(shù)據(jù)集。例如,一個使用卷積神經(jīng)網(wǎng)絡(luò)RNN依賴詞庫去預測某個單詞后面的下一個單詞,或者使用兩個網(wǎng)絡(luò)進行語言翻譯。
視覺化嵌套Visualizing Embeddings
Tensorboard中包含的嵌套投影器Embedding projector,它可以交互的顯示嵌套,他可以從模型中讀取嵌套并渲染到3D空間。
Embedding projector有三個面板:
- Data panel
- Projections panel
- Inspector panel
此處省去很多內(nèi)容的翻譯...


探索人工智能的新邊界
如果您發(fā)現(xiàn)文章錯誤,請不吝留言指正;
如果您覺得有用,請點喜歡;
如果您覺得很有用,感謝轉(zhuǎn)發(fā)~
END