2017-10-13 119 views
4

我很抱歉,我的天真,但我不明白爲什麼字符嵌入是神經網絡訓練過程(word2vec)的結果實際上是矢量。爲什麼詞嵌入實際上是矢量?

嵌入是降維的過程,在訓練過程中,NN將字的1/0數組減少爲更小的數組,該過程沒有采用任何適用矢量算術的處理。

因此,我們得到的只是數組而不是矢量。爲什麼我應該將這些數組看作向量?儘管我們得到了矢量,爲什麼每個人都將它們描述爲來自原點(0,0)的矢量?

再次,如果我的問題看起來很愚蠢,我很抱歉。

+1

我沒有深刻的數學背景,但不你混合編程術語與數學酮(矢量爲數學(數組作爲數據結構)概念)? – lenz

+2

調用word2vec的輸出「矢量」的一個很好的理由是,您可以通過測量它們相應矢量的餘弦距離來估計兩個單詞的相似度。 – lenz

+0

@lenz,謝謝你的評論。我只是試圖說出什麼是嵌入字。我認爲你的推理「他們是向量,因爲我們計算餘弦距離是不正確的」,實際上我們使用餘弦距離是因爲它們是向量。但爲什麼他們是矢量,我仍然不知道。 – com

回答

3

過程做什麼,應用矢量運算

訓練過程無關,與矢量運算,但是當陣列生產的,事實證明,他們有相當不錯的性能,所以人們可以想到「文字線性空間」。

例如,哪個單詞在這個空間中有最接近給定單詞的嵌入?

closest-words

換種方式,用類似含義的詞語形成雲。這裏有一個2-d T-SNE表示:

tsne

又如,「男人」和「女人」之間的距離非常接近「叔叔」和「阿姨」之間的距離:

word-distance

其結果是,你有非常合理的算術:

W("woman") − W("man") ≃ W("aunt") − W("uncle") 
W("woman") − W("man") ≃ W("queen") − W("king") 

所以它不是遙不可及給他們打電話vectors。所有圖片都來自this wonderful post,我非常推薦閱讀。

+0

非常感謝你的答案。你知道爲什麼載體來自原點嗎? – com

+2

@com在詞語嵌入中起源並不重要。你可以安全地移動原點(從而所有矢量),並且上面的所有屬性仍然可以保持。重要的是矢量的相對定位。 – Maxim

0

每個單詞都映射到d維空間中的一個點(d通常是300或600,儘管不是必需的),因此它被稱爲向量(d-dim空間中的每個點都不過是d-昏暗的空間)。

的點有一些很好的性能(單詞,類似含義趨於發生彼此接近)

1

什麼的嵌入[接近使用2個字矢量之間餘弦距離測量]?

Word中嵌入的一組語言建模的集體名稱和功能,使從詞彙或短語被映射到實數的載體在自然語言處理學習技術(NLP)。

從概念上講,它涉及從每個單詞一個維度的空間到具有更低維度的連續向量空間的數學嵌入。

(來源:https://en.wikipedia.org/wiki/Word_embedding

什麼是Word2Vec?

Word2vec是一組相關模型,用於生成字嵌入。這些模型是淺層的雙層神經網絡,其經過訓練以重建語言上下文

Word2vec以文本的大型文集爲輸入,並生成一個向量空間,通常爲幾百個維度,其中語料庫中的每個唯一字都被分配了空間中的對應向量。

將詞向量放置在向量空間中,以便在語料庫中共享公共上下文的詞在空間中彼此非常接近。

(來源:https://en.wikipedia.org/wiki/Word2vec

什麼是數組?

在計算機科學中,一個陣列,或簡單的陣列,是由元素(值或變量),集合中的每個由至少一個數組索引或關鍵字標識的數據結構。

存儲數組,以便每個元素的位置可以通過數學公式從其索引元組中計算出來。

最簡單的數據結構類型是線性數組,也稱爲一維數組。

什麼是矢量/矢量空間?

矢量空間(也稱爲線性空間)是稱爲矢量對象的集合,其可以由數字加在一起,並乘以(「縮放」),所謂的標量。

標量經常被視爲實數,但也有標量乘以複數,有理數或任何字段的向量空間。

矢量加法運算和標量乘法運算必須滿足下面列出的某些要求,稱爲公理。

(來源:https://en.wikipedia.org/wiki/Vector_space

什麼是矢量和陣列之間的區別?

首先,字嵌入中的矢量並不完全是編程語言的數據結構(所以它不是Arrays vs Vectors: Introductory Similarities and Differences)。

編程,一個字嵌入矢量IS某種實數的數組(數據結構)的(即,標量)

在數學上,用一個或多個維填入實數的任何元件是tensor。矢量是標量的一個維度。


要回答這個問題,OP:

爲什麼字嵌入實際上引導?

根據定義,文字的嵌入是矢量(見上文)

爲什麼我們代表字作爲實數的載體?

要學習單詞之間的差異,我們必須以某種方式量化差異。

試想一下,如果我們指定的論文「智能」的數字的話:

>>> semnum = semantic_numbers = {'car': 5, 'vehicle': 2, 'apple': 232, 'orange': 300, 'fruit': 211, 'samsung': 1080, 'iphone': 1200} 
>>> abs(semnum['fruit'] - semnum['apple']) 
21 
>>> abs(semnum['samsung'] - semnum['apple']) 
848 

我們看到,fruitapple之間的距離接近,但samsungapple不是。在這種情況下,單詞的單個數字「特徵」能夠捕獲關於單詞意義的一些信息,但不完全。

試想一下,我們爲每個單詞(即矢量)兩個實數的值:

>>> import numpy as np 
>>> semnum = semantic_numbers = {'car': [5, -20], 'vehicle': [2, -18], 'apple': [232, 1010], 'orange': [300, 250], 'fruit': [211, 250], 'samsung': [1080, 1002], 'iphone': [1200, 1100]} 

要計算的區別,我們可以做:

>>> np.array(semnum['apple']) - np.array(semnum['orange']) 
array([-68, 761]) 

>>> np.array(semnum['apple']) - np.array(semnum['samsung']) 
array([-848, 8]) 

這不是很豐富,它返回一個向量,我們不能得到單詞之間距離的確定度量,所以我們可以嘗試一些向量技巧並計算向量之間的距離,例如euclidean distance:現在

>>> import numpy as np 
>>> orange = np.array(semnum['orange']) 
>>> apple = np.array(semnum['apple']) 
>>> samsung = np.array(semnum['samsung']) 

>>> np.linalg.norm(apple-orange) 
763.03604108849277 

>>> np.linalg.norm(apple-samsung) 
848.03773500947466 

>>> np.linalg.norm(orange-samsung) 
1083.4685043876448 

,我們可以看到更多的 「信息」 apple可以比orangesamsung接近samsung。可能這是因爲apple更頻繁地與語料庫共同出現samsungorange

最大的問題來了,「我們如何得到這些實數來表示詞的向量?」。這就是Word2Vec /嵌入式訓練算法(originally conceived by Bengio 2003)進來的地方。


採取繞道

由於加入了更多實數來表示的話向量更多的信息,那麼爲什麼我們不只是增添了不少的尺寸(列的數量,即在每個字矢量) ?

傳統上,我們通過計算distributional semantics/distributed lexical semantics字段中的逐字矩陣來計算單詞之間的差異,但是如果單詞不與另一單詞共同出現,則矩陣變得真的稀疏並且有許多零值。

因此,在計算word co-occurrence matrix之後,已經投入dimensionality reduction的很多努力。恕我直言,它就像是自上而下的單詞之間的全局關係,然後壓縮矩陣以得到一個更小的向量來表示每個單詞。

因此,「深度學習」的詞嵌入創作來自另一派思想,並開始於隨機(有時不是如此隨機)爲每個詞初始化一層矢量,並學習這些矢量的參數/權重,通過基於一些定義的屬性最小化一些損失函數來優化這些參數/權重。

這聽起來有點含糊,但具體地講,如果我們看一下Word2Vec學習技術,它會更清楚,看到

這裏有更多資源來讀取字嵌入:https://github.com/keon/awesome-nlp#word-vectors

0

着名的Word2Vec實現方式是CBOW + Skip-Gram

您對CBOW的輸入是您的輸入單詞向量(每個向量都是長度爲N的向量; N =詞彙大小)。所有這些輸入字向量一起是一個大小爲M×N的數組; M =單詞的長度)。

下圖中有趣的是投影步驟,我們迫使NN學習輸入空間的低維表示以正確預測輸出。所需的輸出是我們的原始輸入。

該較低維度表示P由描述詞的抽象特徵組成,例如,位置,形容詞等(實際上這些學習功能並不十分清楚)。現在這些特徵代表了這些詞的一個觀點。

就像所有的功能一樣,我們可以將它們視爲高維向量。 如果您想要,您可以使用維度降低技術在2維或3維空間中顯示它們。

enter image description here

更多細節及圖形的源:https://arxiv.org/pdf/1301.3781.pdf

相關問題