一文理解Word2Vec part1

2021-09-01 11:50:05 字數 2933 閱讀 6642

word2vec原理

後續參考資料

首先推薦乙個英文版的word2vec的教程,從原理到實現都講得十分透徹和清晰。它分為了幾個部分講,當時我也是看的這個教程入門的,建議英文比較好的同學可以參考一下。本文創作的目的也是想寫乙個類似這樣的教程,達到一文理解word2vec的目的。

在進行自然語言處理方面的研究時,特別時在使用深度學習方法的時候,我們幾乎不可能直接將每個詞輸入到模型中,因為計算機看不懂乙個乙個的字串,因此需要將詞用數字表示(通常是向量),以讓機器能夠讀懂,理解自然語言。表徵得是否易懂,資訊是否足夠等都是embedding需要考慮的因素。下面介紹兩種表示詞的方法以加深理解。

我這裡標題使用了詞嵌入的說法,我認為是指將每個詞背後的語義資訊嵌入到了詞向量中,所以叫嵌入,還是很形象的 ?。

one-hot表示

估計是每個nlper最先接觸到的表徵方式了。

它是這麼做的:

統計一下語料庫裡一共有多少不重複的詞(假設為n個詞)。

初始化乙個n維的0向量(每一維代表乙個詞)。

哪一維為1,表示這個向量代表哪個詞。

十分簡單,但問題也十分明顯。

1.維度太大,又很稀疏,乙個幾萬維的向量只有乙個1,感受一下。

2.沒有啥資訊量,只能簡單區分出兩個單詞。

word2vec

word2vec在13年橫空出世,幾乎那以後的所有文章都以word2vec為基礎,這篇文章的引用在今天(18年11月)已經有8318了:)。足以說明它有多強悍。

先看一眼word2vec訓練出來的詞向量:

稠不稠?密不密?除了解決了稠密性問題,而且這些向量的維度也一般控制在低維。(50-300維這樣)因此在輸入到後續模型時不需要太擔心效能問題。

此外這些詞還包含了豐富的語義資訊,相似的詞的詞向量一般距離會比較近,還有就是那個經典的例子:

queen - woman = king - man

總之,word2vec學到了詞語的稠密低維表示,又蘊含有較多的語義資訊。

word2vec有兩種實現方式,skip-gram 和 cbow。本文以skip-gram為例進行講解,cbow其實和skip-gram的區別很小,理解了skip-gram,cbow也就理解了。

很多文章都以乙個三層的神經網路來介紹word2vec的原理,本文嘗試以另外乙個視角進行理解,但其實質都是一樣的。

任務首先明確一下word2vec的任務是什麼。為了使得相似的詞有相似的詞向量,而相似的詞往往有相似的語境,因此skip-gram採用了**背景詞作為任務。

例如,當輸入詞「york」,與「new」,「slow」, "flower"這些詞比較的時候,我的模型需要告訴我「new」與"york"一起出現的可能性較大,而與「slow」和"flower"同時出現的可能性較小。

skip-gram使用了很簡單的方式來完成這個任務。

構造資料集

以上面的句子為例,給出了"york"希望模型**"new"的概率要大一些。"york"就是輸入,"new"就是label,標籤。我們首先需要在給定的語料中構建這樣的資料集。

skip-gram字面上就是跳過gram,這裡跳過的是模型的輸入,即中心詞,需要**的是附近(window size內的)的詞。

上圖中的window size設為了2,表示將前2和後2的詞作為標籤,中心詞作為輸入,來構建資料集。

訓練先提出乙個假設:

每個詞有兩個詞向量,乙個稱為中心詞向量,乙個稱為背景詞向量

如果有n個詞,為每個詞隨機初始化兩個詞向量,因此最終我們有2*n個詞向量需要訓練。

再提出乙個規則:

同乙個詞,作為輸入(中心詞)時,使用中心詞向量,作為輸出(背景詞)時,使用背景詞向量。

現在我們來看輸入乙個樣本(new, york)時的訓練過程:

訓練時,將new的中心詞向量,分別與所有詞的背景詞向量進行點積。假設有n個詞,那麼這一步操作將會產生n個值,然後再將這n個值進行softmax歸一化。最終將n個值轉換為輸入new,輸出每個詞的概率。

例如:假設dot(「new」, 「man」)=42,歸一化後p(「new」, 「man」)=0.001,意味著輸入「new」,輸出「man」的概率是0.001。

但是別忘了,輸入的訓練樣本是(「new」, 「york」),因此我們希望提公升p(「new」, 「york」),打壓p(「new」, 「其他所有詞」)。這樣,這個樣本就訓練完了。需要強調的是,此時"new"用的是它的中心詞向量,而「其他所有詞」使用的是背景詞向量。

到目前為止,本文介紹了word2vec是什麼,能做什麼,以及它是怎麼訓練的。但是一些訓練中的細節還未涉及到,而這些細節也是word2vec能夠work的關鍵,比如這麼大的模型怎麼才能train起來?10000個詞的200維詞向量就需要有200100002 = 4000000個引數。這些細節將在一文理解word2vec-part2會進行介紹。其實這樣的訓練方式不止google想到了,甚至可能有其他的研究人員在他們之前想到這樣的做法,但是只有google把細節做到了極致,才有了今天的word2vec。

部分來自word2vec tutorial - the skip-gram model

一文理解什麼是SSH免密碼登陸

ssh免密碼登入,無非是一種非對稱加密演算法,但是我們對非對稱加密演算法的使用總是似懂非懂,感覺就是乙個公鑰 給別人進行加密 乙個金鑰 給自己進行解密 下面從這幾個問題來理解ssh免密碼登入 1 舉個例子來說明 以tom和jack寄送私人信件為例 中間人 hack 場景一 某一天,住在北京的tom給...

下發dhcp閘道器的引數 一文理解DHCP原理與配置

1 dhcp協議在rfc2131中定義,使用udp協議進行資料報傳遞,使用的埠是67以及68。2 dhcp最常見的應用是,自動給終端裝置分配ip位址,掩碼,預設閘道器,但是dhcp也同樣可以給終端裝置自動配置其他options,比如dns server,網域名稱,time zones,ntp ser...

Git基礎精解,安裝教程,一文理解Git基礎知識

git 是乙個開源的分布式版本控制系統,用於敏捷高效地處理任何或小或大的專案。git 是 linus torvalds 為了幫助管理 linux 核心開發而開發的乙個開放原始碼的版本控制軟體。git 與常用的版本控制工具 cvs,subversion 等不同,它採用了分布式版本庫的方式,不需要伺服器...