Word嵌入是文檔詞彙表最常用的表示形式之一。它能夠捕獲文檔中單詞的上下文、語義和句法相似性、與其他單詞的關係等。
什麼是嵌入?粗略地說,它們是一個特定單詞的向量表示形式。接下來是我們如何生成它們?更重要的是,他們如何捕捉上下文?
Word2Vec是目前最流行的一種利用淺層神經網絡學習詞綴的技術。它是由Tomas Mikolov於2013年在谷歌開發的。
我們為什麼需要它們?
考慮以下相似的句子:Have a good day 和 Have a great day。它們幾乎意思相同。如果我們構建一個詳盡的詞彙表(我們稱它為V),它將有V = {have, a, good, great, day}。
現在,讓我們為V中的每個單詞創建一個one -hot編碼的向量,one -hot編碼的向量的長度等於V(=5)的大小。除了索引處的元素表示詞彙表中對應的單詞外,我們將有一個0向量。這個特定的元素是1。下面的編碼可以更好地解釋這一點。
Have = [1,0,0,0,0]`; a=[0,1,0,0,0]` ; good=[0,0,1,0,0]` ; great=[0,0,0,1,0]` ; day=[0,0,0,0,1]` (` 代表轉置)
如果我們試著將這些編碼形象化,我們可以想象一個5維空間,其中每個單詞佔據一個維度,而與其他維度無關(沒有沿著其他維度的投影)。這意味著“good”和“great”就像“day”和“have”一樣不同,這是不對的。
我們的目標是讓具有相似語境的詞佔據相近的空間位置。從數學上講,這些向量之間的夾角的餘弦值應該接近於1,即夾角接近於0。
以下是生成分佈式表示的想法。直覺上,我們引入了一個詞對另一個詞的依賴關係。這個詞的上下文中的詞會得到更多的依賴。正如前面提到的,在one-hot編碼表示中,所有的單詞都是相互獨立的。
Word2Vec如何工作?
Word2Vec是一種構造這種嵌入的方法。它可以使用兩種方法(均涉及神經網絡)獲得:Skip Gram和Common Bag of Words(CBOW)
CBOW模型:此方法將每個單詞的上下文作為輸入,並嘗試預測與上下文對應的單詞。考慮我們的例子:Have a great day。
請注意,這裡我們嘗試使用單個上下文輸入字來預測目標字(day )。更具體地說,我們使用輸入字的one-hot編碼,並測量與目標字(day)的one-hot編碼相比的輸出誤差。 在預測目標詞的過程中,我們學習目標詞的矢量表示。
讓我們深入瞭解實際架構。
輸入或上下文單詞是一個大小為V的one-hot編碼向量,隱藏層包含N個神經元,輸出又是一個長度為V的向量,元素為softmax值。
讓我們來了解一下圖片中的各項:
- Wvn是將輸入x映射到隱藏層的權重矩陣(V*N維矩陣)
-W 'nv是將隱藏層輸出映射到最終輸出層的權重矩陣(N*V維矩陣)
隱藏層神經元只是將輸入的權重和複製到下一層。沒有像sigmoid, tanh或ReLU那樣的激活。唯一的非線性是輸出層的softmax計算。
但是,上面的模型使用單個上下文詞來預測目標。我們可以使用多個上下文詞來做同樣的事情。
上面的模型使用C上下文單詞。當使用Wvn計算隱藏層輸入時,我們取所有這些C上下文詞輸入的平均值。
因此,我們已經看到了如何使用上下文單詞生成單詞表示。但還有一種方法我們也可以這麼做。我們可以使用目標詞(我們希望生成其表示形式)來預測上下文,在此過程中,我們生成表示形式。另一種被稱為Skip Gram model的變體就是這樣做的。
Skip-Gram model:
這看起來像 multiple-context CBOW模型剛剛被翻轉。在某種程度上,這是事實。
我們將目標詞輸入網絡。模型輸出C個概率分佈。這是什麼意思?
對於每個上下文位置,我們得到V概率的C概率分佈,每個單詞有1個。
在這兩種情況下,網絡都使用神經網絡的反向傳播來學習。
哪個好一些?
兩者各有利弊。根據Mikolov的說法,Skip Gram可以很好地處理少量數據,並且可以很好地代表罕見的單詞。
另一方面,CBOW更快,並且對更頻繁的單詞具有更好的表示。
最後
以上解釋是非常基本的。它只是讓您瞭解嵌入字是什麼以及Word2Vec如何工作。
還有很多東西。例如,為了使算法在計算上更有效,使用諸如Hierarchical Softmax和Skip-Gram Negative Sampling之類的技巧
閱讀更多 不靠譜的貓 的文章