word2vec的簡單理解 小白初學

2021-10-10 17:34:11 字數 3108 閱讀 8085

在自然語言處理領域中,本文向量化是文字表示的一種重要方式。在當前階段,對文字的大部分研究都是通過詞向量化實現的,但同時也有一部分研究將句子作為文字處理的基本單元,也就是doc2vec和str2vec技術。

詞語表示

在傳統意義上,我們習慣使用one-hot編碼來給詞語進行編碼,該編碼的優勢在於簡單,容易實現。 one-hot編碼由一堆0和乙個1組成,比如我們給出乙個單詞表【吃飯,喝水,睡覺,洗衣,做飯】,我們在這裡需要表示喝水,則使用[0,1,0,0,0]來表示,同理,表示洗衣使用[0,0,0,1,0]。可見實際上one-hot編碼中一所在位置就是詞語出現位置。然而,該種編碼方式存在以下問題

1)維數災難:假如詞典包含10000個單詞,那麼每個文字需要使用10000維的向量表示,那麼向量的很多位置必定是0,如此稀疏的高維向量會嚴重影響計算速度。

2)這樣構成的向量無法儲存詞序資訊,而詞序對於自然語言處理又是那麼的重要。

3)存在語義鴻溝

word2vec簡介

word2vec 是 2013 年 google 的研究員發布的一種基於神經網路的詞向量生成模型. 模型是用深度學習網路對語料資料的詞語及其上下文的語義關係進行建模, 以求得到低維度的詞向量. 該詞向量一般在100–300 維左右, 能很好的解決傳統向量空間模型高維稀疏的問題. 因為深度的神經網路模型能對特徵的高層語義進行很好的抽象所以模型能很好的避免語義鴻溝. 所以 word2vec 是目前應用在自然語言處理方面表現較優秀的方法.

word2vec[18,19]主要有 continuous bag-of-wordsmodel (cbow) 和 continuous skip-gram model (skip-gram) 兩種模型, cbow 模型是在己知上下文 context(t)的情況下**當前詞 t, 而 skip-gram 模型則是在己知當前詞 t 的情況下**其上下文詞 context(t). 這兩個模型都包括輸入層、隱藏層和輸出層, 如圖 1 所示. cbow模型的輸入層是選定視窗個數 w 的上下文詞 one-hot編碼的詞向量, 隱藏層向量是這些詞向量、連線輸入和隱含單元之間的權重矩陣計算得到的, 輸出層向量可以通過隱含層向量、連線隱含層與輸出層之間的權重矩陣計算得到. 最後輸出層向量應用 softmax 啟用函式, 可以計算出每個單詞的生成概率. 但是由於softmax 啟用函式中存在歸一化項的緣故, 推導出來的迭代公式需要對詞彙表中的所有單詞進行遍歷, 使得每次迭代過程非常緩慢, 可使用hierarchical softmax來提公升速度.

通過兩個詞語向量之間的距離遠近來表示兩個詞語之間的相似程度,詞語間的距離表示比較常用且效果較好的方法是余弦相似度, 如公式(1)所示,其中t表示向量維度。

cbow模式

cbow模型結構圖

1)輸入層:上下文單詞的onehot. 。

2)所有onehot分別乘以共享的輸入權重矩陣w(vn矩陣,n為自己設定的數,n也是隱藏層的神經元個數,初始化權重矩陣w)。

3)所得的向量 相加求平均作為隱層向量, size為1n。

4)乘以輸出權重矩陣w′w′(nv)。

5)得到向量 (1v) ,啟用函式處理得到v-dim概率分布,概率最大的index所指示的單詞為**出的中間詞(target word)。

6)與true label的onehot做比較,誤差越小越好。

所以,需要定義loss function(一般為交叉熵代價函式),採用梯度下降演算法更新w和w′w′。訓練完畢後,輸入層的每個單詞與矩陣w相乘得到的向量的就是我們想要的詞向量(word embedding),這個矩陣(所有單詞的word embedding)也叫做look up table(其實這個look up table就是矩陣w自身),也就是說,任何乙個單詞的onehot乘以這個矩陣都將得到自己的詞向量。有了look up table就可以免去訓練過程直接查表得到單詞的詞向量了。

這裡我們給出乙個示範過程(感謝lilongl117194大佬)

skip-gram模式

從直觀上理解,skip-gram是給定input word來**上下文。

接下來我們來看看如何訓練我們的神經網路。假如我們有乙個句子「the dog barked at the mailman」。

首先我們選句子中間的乙個詞作為我們的輸入詞,例如我們選取「dog」作為input word;

有了input word以後,我們再定義乙個叫做skip_window的引數,它代表著我們從當前input word的一側(左邊或右邊)選取詞的數量。如果我們設定skip_window=2,那麼我們最終獲得視窗中的詞(包括input word在內)就是[『the』, 『dog』,』barked』, 『at』]。skip_window=2代表著選取左input word左側2個詞和右側2個詞進入我們的視窗,所以整個視窗大小span=2x2=4。另乙個引數叫num_skips,它代表著我們從整個視窗中選取多少個不同的詞作為我們的output word,當skip_window=2,num_skips=2時,我們將會得到兩組 (input word, output word) 形式的訓練資料,即 (『dog』, 『barked』),(『dog』, 『the』)。

神經網路基於這些訓練資料將會輸出乙個概率分布,這個概率代表著我們的詞典中的每個詞是output word的可能性。這句話有點繞,我們來看個栗子。第二步中我們在設定skip_window和num_skips=2的情況下獲得了兩組訓練資料。假如我們先拿一組資料 (『dog』, 『barked』) 來訓練神經網路,那麼模型通過學習這個訓練樣本,會告訴我們詞彙表中每個單詞是「barked」的概率大小。

模型的輸出概率代表著到我們詞典中每個詞有多大可能性跟input word同時出現。舉個栗子,如果我們向神經網路模型中輸入乙個單詞「中國「,那麼最終模型的輸出概率中,像「英國」, 」俄羅斯「這種相關詞的概率將遠高於像」蘋果「,」蟈蟈「非相關詞的概率。因為」英國「,」俄羅斯「在文字中更大可能在」中國「的視窗**現。我們將通過給神經網路輸入文字中成對的單詞來訓練它完成上面所說的概率計算。

通俗理解word2vec

參考 假設詞表中共有4萬個詞彙,現在知道第t個詞前面的n 1個詞,預估第t個詞 首先將n 1 依據詞表進行onehot編碼得到n 1個 1 4萬 的稀疏向量 只有乙個位置為1,其餘為0 然後為每乙個詞 隨機初始化乙個 1 k 維的詞向量c,這n 1個詞向量經過拼接 求和等操作得到乙個1 k維的向量,...

Word2vec淺顯的理解

本文主要讓你理解word2vec大概是個什麼事情 沒有具體原理等 先來說一下word2vec的產生,其實也和one hot編碼有關係,大家相信100維的向量最多可以表示多少個詞?one hot說,我能表示100個 但是你如果表示所有的單詞需要多少維啊.one hot就數不過來了,太多了 10的五次方...

小白可以讀懂的word2vec

我對word2vec的理解 使意思相近的詞有距離相近的向量。為了得到這種詞向量就提出了用這個詞的上下文來解釋它,舉個例子 愛 和 喜歡 有很大概率出現在相同句子的相同位置,比如說 我愛你 和 他喜歡你 小明愛學習 和 小紅喜歡學習 那麼這兩個詞通過前面的上下文訓練出來的詞向量距離就是相近的。skip...