圖解word2vec

2021-02-13 機器學習實驗室

自2013年以來,word2vec一直是一種有效的詞嵌入的方法,本文把word2vec用圖解的方式進行,全篇沒有數學公式,非常通俗易懂,推薦初學者閱讀。

(原文作者:jalammar,翻譯:黃海廣)。

備註:這個是另一個版本的翻譯,網上也有其它版本的翻譯,都是獨立完成的。

原文連結:

https://jalammar.github.io/illustrated-word2vec/

這篇文章的代碼傳到了本站的github:

https://github.com/fengdu78/machine_learning_beginner/tree/master/word2vec

正文開始

我發現嵌入的概念是機器學習中最迷人的想法之一。如果您曾經使用Siri,Google智能助理,Alexa,谷歌翻譯,甚至智慧型手機鍵盤進行下一詞預測,那麼您很有可能從這個已經成為自然語言處理模型核心的想法中受益。在過去的幾十年中,使用嵌入技術進行神經模型已有相當大的發展(最近的發展包括BERT和GPT2 等尖端模型的語境化嵌入)。

自2013年以來,Word2vec一直是一種有效創建單詞嵌入的方法。除了詞嵌入字的方法之外,它的一些概念已經被證明可以在非語言任務中有效地創建推薦引擎和理解順序數據。比如Airbnb,阿里巴巴,Spotify和Anghami這樣的公司都從NLP世界中創造出這一優秀的工具並將其用於生產中,從而為新型推薦引擎提供支持。

我們將討論嵌入的概念,以及使用word2vec生成嵌入的機制。

讓我們從一個例子開始,了解使用向量來表示事物。

您是否知道五個數字(向量)的列表可以代表您的個性?

個性嵌入:你的個性怎麼樣?

使用0到100的範圍表示你的個性(其中0是最內向的,100是最外向的)。

五大人格特質測試,這些測試會問你一個問題列表,然後在很多方面給你打分,內向/外向就是其中之一。

圖:測試結果示例。它可以真正告訴你很多關於你自己的事情,並且在學術、個人和職業成功方面都具有預測能力。

假設我的測試得分為38/100。我們可以用這種方式繪製:

讓我們將範圍切換到從-1到1:

了解一個人,一個維度的信息不夠,所以讓我們添加另一個維度 - 測試中另一個特徵的得分。

你可能不知道每個維度代表什麼,但仍然可以從一個人的個性的向量表示中獲得了很多有用的信息。

我們現在可以說這個向量部分代表了我的個性。當你想要將另外兩個人與我進行比較時,向量化表示的有用性就出現了。在下圖中,兩個人中哪一個更像我?

處理向量時,計算相似度得分的常用方法是餘弦相似度:

一號人物與我的餘弦相似度得分高,所以我們的性格比較相似。

然而,兩個方面還不足以捕獲有關不同人群的足夠信息。幾十年的心理學研究已經研究了五個主要特徵(以及大量的子特徵)。所以我們在比較中使用所有五個維度:

我們沒法在二維上繪製出來五個維度,這是機器學習中的常見挑戰,我們經常需要在更高維度的空間中思考。但好處是餘弦相似度仍然有效。它適用於任意數量的維度:

嵌入的兩個中心思想:

我們可以將人(事物)表示為數字的向量。

我們可以很容易地計算出相似的向量彼此之間的關係。

詞嵌入

我們導入在維基百科上訓練的GloVe向量:

import gensim
import gensim.downloader as api
model = api.load('glove-wiki-gigaword-50')

model["king"]
#查看「king」最相似的單詞

[('prince', 0.8236179351806641),
('queen', 0.7839042544364929),
('ii', 0.7746230363845825),
('emperor', 0.7736247181892395),
('son', 0.766719400882721),
('uncle', 0.7627150416374207),
('kingdom', 0.7542160749435425),
('throne', 0.7539913654327393),
('brother', 0.7492411136627197),
('ruler', 0.7434253096580505)]

這是一個包含50個數字的列表,我們無法說清楚裡面的值代表什麼。我們把所有這些數字放在一行,以便我們可以比較其他單詞向量。讓我們根據它們的值對單元格進行顏色編碼(如果它們接近2則為紅色,如果它們接近0則為白色,如果它們接近-2則為藍色)

import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np
plt.figure(figsize=(15, 1))
sns.heatmap([model["king"]],
xticklabels=False,
yticklabels=False,
cbar=False,
vmin=-2,
vmax=2,
linewidths=0.7)
plt.show()

我們將忽略數字並僅查看顏色以指示單元格的值,我們將「King」與其他詞語進行對比:

plt.figure(figsize=(15, 4))
sns.heatmap([
model["king"],
model["man"],
model["woman"],
model["king"] - model["man"] + model["woman"],
model["queen"],
],
cbar=True,
xticklabels=False,
yticklabels=False,
linewidths=1)
plt.show()

看看「man」和「woman」是如何彼此更相似的,他們中的任何一個都是「king」?這告訴你一些事情。這些向量表示捕獲了這些單詞的信息/含義/關聯。

這是另一個示例列表(通過垂直掃描列來查找具有相似顏色的列):

有幾點需要指出:

所有這些不同的單詞都有一個直的紅色列。它們在這個維度上是相似的(我們不知道每個維度代碼是什麼)

你可以看到「woman」和「girl」在很多地方是如何相似的。與「man」和「boy」一樣

「boy」和「girl」也有彼此相似的地方,但與「woman」或「man」不同。這些是否可以編寫一個模糊的青年概念?可能。

除了最後一個字之外的所有字都代表著人。我添加了一個對象「water」來顯示類別之間的差異。例如,您可以看到藍色列一直向下並在嵌入「water」之前停止。

有一個明顯的地方,「king」和「queen」彼此相似,並與所有其他人不同。類比


我們可以添加和減去單詞嵌入並獲得有趣的結果,最有名的例子是公式:「king」 - 「man」 + 「woman」:

model.most_similar(positive=["king","woman"],negative=["man"])

[('queen', 0.8523603677749634),
('throne', 0.7664334177970886),
('prince', 0.759214460849762),
('daughter', 0.7473883032798767),
('elizabeth', 0.7460220456123352),
('princess', 0.7424569725990295),
('kingdom', 0.7337411642074585),
('monarch', 0.7214490175247192),
('eldest', 0.7184861898422241),
('widow', 0.7099430561065674)]

我們可以像以前一樣想像這個類比:

語言建模

如果想要給出NLP應用程式的示例,最好的示例之一將是智慧型手機鍵盤的下一個字(詞)預測功能。這是數十億人每天使用數百次的功能。

下一個字(詞)預測是一項可以通過語言模型解決的任務。語言模型可以採用單詞列表(比方說兩個單詞),並嘗試預測它們之後的單詞。

在上面的屏幕截圖中,我們可以將模型視為接受這兩個綠色單詞(thou shalt)並返回建議列表(「not」是具有最高概率的那個字)的模型:

我們可以把模型想像成這個黑盒子:

但實際上,該模型不會只輸出一個單詞。它實際上輸出了它所知道的所有單詞的概率分數(模型的「詞彙表」,其範圍可以從幾千到一百多萬個字(詞))。然後應用程式必須找到分數最高的單詞,並將其呈現給用戶。

圖:神經語言模型的輸出是模型知道的所有單詞的概率分數。我們在這裡將概率稱為百分比,比如概率40%將在輸出向量中表示為0.4

經過訓練,早期的神經語言模型(Bengio 2003)將分三步計算預測:

在討論嵌入時,第一步對我們來說最相關。訓練過程的結果之一是這個矩陣包含我們詞彙表中每個單詞的嵌入。在預測時間內,我們只查找輸入字的嵌入,並使用它們來計算預測:

現在讓我們轉到訓練過程,以了解嵌入矩陣是如何工作的。

語言模型的訓練

與大多數其他機器學習模型相比,語言模型具有巨大優勢。即:我們所有的書籍,文章,維基百科內容和其他形式的大量文本數據可以作為訓練數據。與此相比,許多其他機器學習模型需要手動設計特徵和專門收集的數據。
單詞通過我們查看它們往往會出現在旁邊的其他單詞來嵌入。其機制就是這樣

我們獲得了大量文本數據(例如,所有維基百科文章)。然後

我們有一個窗口(比如說三個單詞),我們會對所有文本進行滑動。

滑動窗口為我們的模型生成訓練樣本

當這個窗口滑動文本時,我們(虛擬地)生成一個用於訓練模型的數據集。為了準確看看它是如何完成的,讓我們看看滑動窗口如何處理這個短語:

當我們開始時,窗口在句子的前三個單詞上:

我們將前兩個單詞作為特徵,將第三個單詞作為標籤:

我們現在已經在數據集中生成了第一個樣本,我們稍後可以使用它來訓練語言模型。

然後我們將窗口滑動到下一個位置並創建第二個樣本:

現在生成第二個示例。

很快我們就會有一個更大的數據集,在不同的單詞對之後,這些數據集會出現:

在實踐中,模型往往在我們滑動窗口時進行訓練。但我發現邏輯上將「數據集生成」階段與訓練階段分開是更清楚的。除了基於神經網絡的語言建模方法之外,一種稱為N-gram的技術通常用於訓練語言模型。

要了解這種從N-gram到神經模型的轉換如何反映現實世界的產品,建議看這篇2015年博客文章,介紹他們的神經語言模型並將其與之前的N-gram模型進行比較。

兩邊看

給了你句子前面的內容,進行填空:

我在這裡給你的背景是空格之前的五個字(以及之前提到的「bus」)。我相信大多數人都會猜到空格裡的這個詞會是「bus」。但是,如果我再給你一條信息:空格之後的一句話,那會改變你的答案嗎?

這完全改變了應該留在空格中的內容。「red」這個詞現在最可能填到空格中。我們從中學到的是特定詞語之前和之後的詞語都具有信息價值。事實證明,考慮兩個方向(我們猜測的單詞左側和右側的單詞)會讓詞嵌入做得更好。

讓我們看看我們如何調整我們訓練模型的方式來解決這個問題。

Skipgram

我們不僅可以查看在目標詞之前的兩個單詞,還可以查看其後的兩個單詞。

如果我們這樣做,我們實際構建和訓練模型的數據集將如下所示:

這被稱為連續詞袋結構,並在word2vec論文 one of the word2vec papers 中進行過描述。

另一種結構與連續詞袋結構略有不同,但也可以也顯示出良好結果。這個結構試圖使用當前詞來猜測相鄰詞,而不是根據其上下文(它之前和之後的詞)猜測一個詞。我們可以想到它在訓練文本上滑動的窗口如下所示:

綠色框中的字將是輸入字,每個粉色框將是可能的輸出。粉色框具有不同的陰影,因為此滑動窗口實際上在我們的訓練數據集中創建了四個單獨的樣本:

此方法稱為skipgram架構。我們可以執行以下操作將滑動窗口可視化:

這會將這四個樣本添加到我們的訓練數據集中:

然後我們將窗口滑動到下一個位置:

這將產生我們的下四個樣本:

接著滑動幾個位置之後,我們有更多的樣本:

重新審視訓練過程

現在我們已經從現有的運行文本中提取了我們的skipgram訓練數據集,讓我們看看我們如何使用它來訓練預測相鄰單詞的基本神經語言模型。

我們從數據集中的第一個樣本開始。我們把特徵提供給未經訓練的模型,要求它預測一個合適的相鄰單詞。

該模型進行三個步驟並輸出預測向量(概率分配給其詞彙表中的每個單詞)。由於該模型未經過訓練,因此在此階段的預測肯定是錯誤的。但那沒關係。我們知道應該它將猜到哪個詞:我們目前用於訓練模型的行中的標籤/輸出單元格:

「目標向量」的詞(字)概率為1,其他詞(字)的概率都是0。我們減去兩個向量,得到一個誤差向量:

現在可以使用此誤差向量來更新模型,以便下次當「not」作為輸入時,模型更有可能猜測「thou」。

這就是訓練的第一步。我們繼續使用數據集中的下一個樣本進行相同的處理,然後是下一個樣本,直到我們覆蓋了數據集中的所有樣本。這就結束了一個epcho的訓練。我們繼續訓練多個epcho,然後我們就有了訓練好的模型,我們可以從中提取嵌入矩陣並將其用於任何其他應用。

雖然這加深了我們對該過程的理解,但仍然不是word2vec實際上的訓練過程。

負採樣

回想一下這個神經語言模型如何計算其預測的三個步驟:

從計算的角度來看,第三步非常消耗資源:尤其是我們將在數據集中為每個訓練樣本做一次(很可能數千萬次)。我們需要做一些事情來提高效率。
一種方法是將目標分成兩個步驟:

生成高質量的單詞嵌入(不要擔心下一個單詞預測)。

使用這些高質量的嵌入來訓練語言模型(進行下一個單詞預測)。

我們將專注於第1步,因為我們專注於嵌入。要使用高性能模型生成高質量嵌入,我們可以從預測相鄰單詞切換模型的任務:

並將其切換到一個取輸入和輸出字的模型,並輸出一個分數,表明它們是否是鄰居(0表示「不是鄰居」,1表示「鄰居」)。

這個簡單的改變,將我們需要的模型從神經網絡改為邏輯回歸模型:因此它變得更簡單,計算速度更快。

這個改變要求我們切換數據集的結構 - 標籤現在是一個值為0或1的新列。它們將全部為1,因為我們添加的所有單詞都是鄰居。

現在可以以極快的速度計算 - 在幾分鐘內處理數百萬個示例。但是我們需要關閉一個漏洞。如果我們所有的例子都是正面的(目標:1),我們打開自己的智能模型的可能性總是返回1 - 達到100%的準確性,但什麼都不學習並生成垃圾嵌入。

為了解決這個問題,我們需要在數據集中引入負樣本 - 不是鄰居的單詞樣本。我們的模型需要為這些樣本返回0。現在這是一個挑戰,模型必須努力解決,而且速度還要快。

圖:對於我們數據集中的每個樣本,我們添加了負樣本。它們具有相同的輸入詞和0標籤。但是我們填寫什麼作為輸出詞?我們從詞彙表中隨機抽取單詞

這個想法的靈感來自Noise-contrastive estimation。我們將實際信號(相鄰單詞的正例)與噪聲(隨機選擇的不是鄰居的單詞)進行對比。這是計算量和統計效率的巨大折衷。

帶負採樣的skipgram(SGNS)


我們現在已經介紹了word2vec中的兩個核心思想:
負採樣和skipgram。

Word2vec訓練流程

現在我們已經建立了skipgram和負採樣的兩個中心思想,我們可以繼續仔細研究實際的word2vec訓練過程。
在訓練過程開始之前,我們預先處理我們正在訓練模型的文本。在這一步中,我們確定詞彙量的大小(我們稱之為vocab_size,比如說,將其視為10,000)以及哪些詞屬於它。在訓練階段的開始,我們創建兩個矩陣 - Embedding矩陣和Context矩陣。這兩個矩陣在我們的詞彙表中嵌入了每個單詞(這vocab_size是他們的維度之一)。第二個維度是我們希望每次嵌入的時間長度(embedding_size- 300是一個常見值,但我們在本文前面的例子是50。)。

在訓練過程開始時,我們用隨機值初始化這些矩陣。然後我們開始訓練過程。在每個訓練步驟中,我們採取一個正樣本及其相關的負樣本。我們來看看我們的第一組:

現在我們有四個單詞:輸入單詞not和輸出/上下文單詞:( thou實際鄰居),aaron,和taco(負樣本)。我們繼續查找它們的嵌入 - 對於輸入詞,我們查看Embedding矩陣。對於上下文單詞,我們查看Context矩陣(即使兩個矩陣都在我們的詞彙表中嵌入了每個單詞)。

然後,我們計算輸入嵌入與每個上下文嵌入的點積。。在每種情況下,會產生一個數字,該數字表示輸入和上下文嵌入的相似性。

現在我們需要一種方法將這些分數轉化為看起來像概率的東西 :使用sigmoid函數把概率轉換為0和1。

現在我們可以將sigmoid操作的輸出視為這些樣本的模型輸出。您可以看到taco得分最高aaron,並且在sigmoid操作之前和之後仍然具有最低分。既然未經訓練的模型已做出預測,並且看到我們有一個實際的目標標籤要比較,那麼讓我們計算模型預測中的誤差。為此,我們只從目標標籤中減去sigmoid分數。

error=target−sigmoid

這是「機器學習」的「學習」部分。現在,我們可以利用這個錯誤分數調整not,thou,aaron和taco的嵌入,使下一次我們做出這一計算,結果會更接近目標分數。

訓練步驟到此結束。我們從這一步驟中得到稍微好一點的嵌入(not,thou,aaron和taco)。我們現在進行下一步(下一個正樣本及其相關的負樣本),並再次執行相同的過程。

當我們循環遍歷整個數據集多次時,嵌入繼續得到改進。然後我們可以停止訓練過程,丟棄Context矩陣,並使用Embeddings矩陣作為下一個任務的預訓練嵌入。

窗口大小和負樣本數量

word2vec訓練過程中的兩個關鍵超參數是窗口大小和負樣本的數量。

不同的窗口大小可以更好地提供不同的任務。
一種啟發式方法是較小的窗口嵌入(2-15),其中兩個嵌入之間的高相似性得分表明這些單詞是可互換的(注意,如果我們只查看周圍的單詞,反義詞通常可以互換 - 例如,好的和壞的經常出現在類似的情境中)。
使用較大的窗口嵌入(15-50,甚至更多)會得到相似性更能指示單詞相關性的嵌入。實際上,您通常需要對嵌入過程提供注釋指導,為您的任務帶來有用的相似感。
Gensim默認窗口大小為5(輸入字本身加上輸入字之前的兩個字和輸入字之後的兩個字)。

負樣本的數量是訓練過程的另一個因素。原始論文裡負樣本數量為5-20。它還指出,當你擁有足夠大的數據集時,2-5似乎已經足夠了。Gensim默認為5個負樣本。

結論
我希望你現在對詞嵌入和word2vec算法有所了解。我也希望現在當你讀到一篇提到「skip gram with negative sampling」(SGNS)的論文時,你會對這些概念有了更好的認識。
本文作者:jalammar。

參考文獻和進一步閱讀材料

Distributed Representations of Words and Phrases and their Compositionality [pdf]

Efficient Estimation of Word Representations in Vector Space [pdf]

A Neural Probabilistic Language Model [pdf]

Speech and Language Processing by Dan Jurafsky and James H. Martin is a leading resource for NLP. Word2vec is tackled in Chapter 6.

Neural Network Methods in Natural Language Processing by Yoav Goldberg is a great read for neural NLP topics.

Chris McCormick has written some great blog posts about Word2vec. He also just released The Inner Workings of word2vec, an E-book focused on the internals of word2vec.

Want to read the code? Here are two options:

Gensim’s python implementation of word2vec

Mikolov’s original implementation in C – better yet, this version with detailed comments from Chris McCormick.

相關焦點

  • Word2vec算法圖解(一)
    今天的主題是:Word2vec算法圖解(一)一、word2vec算法簡介Sikp-grams(SG)給定中心詞去預測上下文單詞。Continuous Bag of Words(CBOW)給定上下文單詞去預測中心詞。
  • 圖解 Word2Vec
    在本文中,我們將介紹嵌入的概念以及使用word2vec生成嵌入的機制。但是,讓我們從一個示例開始,以熟悉如何使用向量來表示事物。你是否知道五個數字(一個向量)可以代表你的個性?Personality Embeddings: What are you like?
  • 圖解Word2vec
    在這篇文章中,我們將討論嵌入的概念,以及使用word2vec生成嵌入的機制。讓我們從一個例子開始,熟悉使用向量來表示事物。你是否知道你的個性可以僅被五個數字的列表(向量)表示?個性嵌入:你是什麼樣的人?如何用0到100的範圍來表示你是多麼內向/外向(其中0是最內向的,100是最外向的)?你有沒有做過像MBTI那樣的人格測試,或者五大人格特質測試?
  • 【算法】word2vec與doc2vec模型
    2 word2vec與doc2vec有什麼差異?3 如何做word2vec和doc2vec?深度學習掀開了機器學習的新篇章,目前深度學習應用於圖像和語音已經產生了突破性的研究進展。  d)  Word2Vector 模型  最近幾年剛剛火起來的算法,通過神經網絡機器學習算法來訓練N-gram 語言模型,並在訓練過程中求出word所對應的vector的方法。本文將詳細闡述此方法的原理。4.word2vec算法思想  什麼是word2vec?
  • 深入理解word2vec
    word2vec是一種基於神經網絡的語言模型,也是一種詞彙表徵方法。word2vec包括兩種結構:skip-gram(跳字模型)和CBOW(連續詞袋模型),但本質上都是一種詞彙降維的操作。  我們將NLP的語言模型看作是一個監督學習問題:即給定上下文詞,輸出中間詞,或者給定中間詞,輸出上下文詞。基於輸入和輸出之間的映射便是語言模型。
  • 自然語言處理——圖解Word2vec
    在這篇文章中,我們將討論嵌入的概念,以及使用word2vec生成嵌入的機制。讓我們從一個例子開始,熟悉使用向量來表示事物。你是否知道你的個性可以僅被五個數字的列表(向量)表示?個性嵌入:你是什麼樣的人?如何用0到100的範圍來表示你是多麼內向/外向(其中0是最內向的,100是最外向的)?你有沒有做過像MBTI那樣的人格測試,或者五大人格特質測試?
  • word2vec——高效word特徵求取
    繼上次分享了經典統計語言模型,最近公眾號中有很多做NLP朋友問到了關於word2vec的相關內容, 本文就在這裡整理一下做以分享。A neural probabilistic language model, JMLR 2003]中就有提出, 名為NNLM, 它是一個前向網絡, 同時學習詞語表徵和一個統計語言模型(後面具體講)。在Mikolov的碩士論文[1]和他在ICASSP 2009上發表的文章[2]中, 用一個單隱層網絡訓練詞語表徵, 然後將這個表徵作為NNLM的輸入進行訓練。
  • 白話Word2Vec
    t=http://superjom.duapp.com/neural-language-model/word2vec-implement.htmlword2vec 代碼實現(2) – CBOWhttps://link.jianshu.com/?
  • 圖解 Word2Vec,讀這一篇就夠了
    但在我們開始使用word2vec之前,我們需要看一下詞嵌入的父概念:神經語言模型。如果要舉自然語言處理最典型的例子,那應該就是智慧型手機輸入法中的下一單詞預測功能。這是個被數十億人每天使用上百次的功能。以上確實有助於我們理解整個流程,但這依然不是word2vec真正訓練的方法。我們錯過了一些關鍵的想法。回想一下這個神經語言模型計算預測值的三個步驟:
  • word2vec模型深度解析
    【前言】word2vec是一個被廣泛應用的word embedding方法,由於最近研究需要,將算法模型研究了一下由於word2vec內容很多,這裡儘量講解核心內容,有不足之處還請指出!word2vec是輕量級的神經網絡,其模型僅僅包括輸入層、隱藏層和輸出層,模型框架根據輸入輸出的不同,主要包括CBOW和skip-gram模型,CBOW模型是通過上下文的內容預測中間的目標詞,而skip-gram則相反,通過目標詞預測其上下文的詞,通過最大化詞出現的概率,我們訓練模型可得到各個層之間的權重矩陣,我們所說的得到的word embedding vector就是從這個權重矩陣裡面得來的。
  • 使用Python可視化Word2vec的結果
    在本文中,我們將:從廣義上討論word2vec理論;下載原始的預訓練向量;看看一些有趣的應用程式:比如對一些單詞進行算術運算,比如著名的king-man+woman=queen等式根據word2vec向量看看我們能多精確地來繪製歐洲的首都。word2vec的原始研究論文和預訓練模型來自2013年,考慮到NLP文獻的擴展速度,目前它是老技術。
  • 文本深度表示模型—word2vec&doc2vec詞向量模型
    Word2Vector 模型最近幾年剛剛火起來的算法,通過神經網絡機器學習算法來訓練N-gram 語言模型,並在訓練過程中求出word所對應的vector的方法。本文將詳細闡述此方法的原理。4.word2vec算法思想什麼是word2vec?
  • 文本深度表示模型——word2vec&doc2vec詞向量模型
    d)  Word2Vector 模型  最近幾年剛剛火起來的算法,通過神經網絡機器學習算法來訓練N-gram 語言模型,並在訓練過程中求出word所對應的vector的方法。本文將詳細闡述此方法的原理。4.word2vec算法思想  什麼是word2vec?
  • Word Embedding Papers | 經典再讀之Word2Vec
    都已經 2020 年了,還在介紹 word2vec?對。詞嵌入(word embeddings)向前可以追溯到上世紀 50 年代(雖然那時還不叫這個名字,但語義如何被表徵的假說已經提出了),向後更是隨著一個個芝麻街成員的強勢加入,恨不得天天都是該領域的新 SOTA。所以不如找個中間的裡程碑 word2vec 先挖一坑,畢竟想那麼多,都沒做來得實際。
  • Word2Vec 與 GloVe 技術淺析與對比
    semantic analysis)為代表的global matrix factorization methods,也稱為 count-based methods; 以及以word2vec為代表的 prediction-based methods。
  • 【Word2Vec】深入淺出Word2Vec原理解析
    Reference【1】Rong X. word2vec parameter learning explained[J]. arXiv preprint arXiv:1411.2738, 2014.Alammar,地址:https://jalammar.github.io/illustrated-word2vec/【5】圖解word2vec(原文翻譯),地址:https://mp.weixin.qq.com/s/Yq_-1eS9UuiUBhNNAIxC-Q【6】word2vec 相比之前的 Word Embedding 方法好在什麼地方?
  • 萬物皆Embedding,從經典的word2vec到深度學習基本操作item2vec
    的技術細節,為了保證一些初學者的知識是自洽的,我還是想在此之前詳細介紹一下深度學習的基本操作Embedding以及從word2vec到item2vec的模型原理。使embedding空前流行的word2vec對word的vector表達的研究早已有之,但讓embedding方法空前流行,我們還是要歸功於google的word2vec。我們簡單講一下word2vec的原理,這對我們之後理解AirBnB對loss function的改進至關重要。
  • Word2vec如何得到詞向量
    前言word2vec是如何得到詞向量的?這個問題比較大。
  • [NLP] 秒懂詞向量Word2vec的本質
    Word2vec參考資料總結(以下都是我踩過的坑,建議先跳過本節,閱讀正文部分,讀完全文回頭再來看)先大概說下我深挖 word2vec 的過程:先是按照慣例,看了 Mikolov 關於 Word2vec 的兩篇原始論文,然而發現看完依然是一頭霧水,似懂非懂,主要原因是這兩篇文章省略了太多理論背景和推導細節;然後翻出 Bengio 03年那篇JMLR
  • 【NLP】從word2vec, ELMo到BERT
    每個人對於BERT的理解都不一樣,本文就試著從word2vec和ELMo的角度說說BERT。下面先簡單回顧一下word2vec和ELMo中的精華,已經理解很透徹的小夥伴可以快速下拉到BERT章節啦。word2vec說來也都是些俗套而樂此不疲一遍遍寫的句子,2013年Google的word2vec一出,讓NLP各個領域遍地開花,一時間好像不用上預訓練的詞向量都不好意思寫論文了。而word2vec是什麼呢?模型顯然就是一個「線性」語言模型。