詞嵌入(word2vec) CBOW原理通俗解釋

2021-08-11 11:23:31 字數 2893 閱讀 4327

目錄

cbow原理解析cbow:層次softmaxcbow:負例取樣word2vec + cnn做文字分類

1.cbow原理解析

如果之前沒有了解nnlm的話,可以戳這篇文章先簡單了解下。詞嵌入-nnlm原理

nnlm的基本原理是利用前n−

1 個詞**第n個詞,但cbow是希望用前後n個詞來**中間這個詞,這是他們的本質區別。 c

=(w1

,w2,

…,wv

)=⎡⎣

⎢⎢⎢⎢

(w1)

1(w1

)2⋮(

w1)d

(w2)

1(w2

)2⋮(

w2)d

⋯⋯⋱⋯

(wv)

1(wv

)2⋮(

wv)d

⎤⎦⎥⎥

⎥⎥的本質,不就是把一列向量拿出來嗎?那我們能否基於此做乙個簡化呢?

基於此,google的大牛就是設計了這樣乙個模型,原理如下:

事實上不會是500維的嘛,語料那麼大,如果用全連線的隱藏層,計算量依然很大,乾脆我們直接把隱藏層去掉,最後只要乙個softmax來**一下在知道前向詞:「喜歡」,」**」和後向詞:「足球」,」世界盃」的情況,**一下中間詞是什麼?

2.層次softmax

雖然我們把隱藏層去掉了,但是google隨隨便便就能拿出1000萬的語料資料,把求乙個1000萬的概率向量,它的計算量依然很大呀?那還有什麼辦法可以優化呢?

大家應該都想到了,維度太高,最直接的想法就是把維度簡化嘛?因此就提出了層次softmax來簡化?這1000萬的語料,很多詞都是不重要的,那我們能否只要那些重要的詞呢?同時,這1000萬是平鋪的,那能否構成乙個層次的結構呢?因此就有了層次的softmax.

他也希望在節點處的詞是出現的頻次比較多的,比較重要的詞,也就是在構建樹的時候能體現這樣的頻次的差別。

最典型的是使用huffman tree來編碼輸出層的詞典,huffman tree的的想法也很簡單,就是對每個詞根據頻次有個權重,然後根據兩顆兩顆子樹進行拼接,使得最後離根節點越近的詞,他們出現的頻率會更高,而在葉子節點處出現的頻率更低。

原來我們計算的是乙個1000萬的概率向量,但是現在就可以轉換為乙個二分類問題,二分類中最簡單直接的就是lr模型的,假設xw

就是乙個詞向量表示,在每個非葉子節點處(圖中黃色的圓點)還會有乙個引數θw

i ,那我們的在lr中可以用乙個sigmoid函式來對映,最後可以變成乙個最小化損失函式j=

−∑lo

gsig

moid

(xw,

θwi)

的優化問題。

3.cbow:負例取樣

上文說了,最後在softmax層時最大的問題就是計算那1000萬語料的概率向量的計算量太大了,除了層次的softmax之外,還有一種比較粗暴的做法,那就是負例取樣。

在我們的例子中,**「我喜歡**巴西足球世界盃「這句話中的「巴西「這個詞,是不是就是我們的標準答案呀?那其他的1000萬-1個就都不是標準答案呀?既然這樣,乾脆就在這1000萬-1個負樣本中抽取負樣本來計算就好了嘛。

我們把那1000萬用字母

v 表示,這個

v還可以指代其他的,由極大似然估計就可以得到:g(

w)=s

igmo

id(x

tw∗θ

w)∏u

∈負樣本

[1−s

igmo

id(x

tw∗θ

u)=正

樣本的概

率∗所有

負樣本的

概率其中,xt

w 是文字中詞向量的和,θu

是詞u對應的乙個輔助向量。

由此就可以構造出乙個損失函式,對詞庫中的所有詞w求和有l=

∑w∈c

log(

g(w)

)但是,如果我們的負例取樣隨機採,有些詞出現的額概率極低,有些詞出現的概率極高,因此出現了這麼乙個工程小技巧:

我們不是有那1000萬的詞庫嘛,其實這個概率向量代表的就是詞庫里每個詞出現的概率:le

n(w)

=cou

nter

(w)∑

u∈1000萬的

詞庫co

unte

r(u)

也就是說:這1000萬維的概率相加最後一定會等於1。那他們的概率分布都是在0-1之間的,那詞庫中的每個詞都可以用這0-1之間的線段表示。

把這0-1的線段中劃分為n等分,如果要抽取50萬的負樣本, 就隨機取50萬個詞,如果剛好碰到了標準答案那乙個,就跳過。

其實word2vec的原始碼中取了co

unte

r(w)

34,效果貌似更好。

應用 word2vec + cnn做文字分類

參考**:convolutional neural networks for sentence classification

如何用word2vec 訓練詞嵌入模型

如何用word2vec 訓練詞嵌入模型 一 應用場景 假設你有乙個商品的資料庫,比如 現在通過使用者的輸入來檢索商品的 方法一 直接匹配法 最簡單的方法就是通過字串進行匹配,比如,使用者輸入 椅子 就用 椅子 作為關鍵字進行搜尋,很容易找到椅子的 就是200元 個。方法二 語義相似法 但有時使用者輸...

word2vec 過程理解 詞向量的獲取

網上有很多這方面的資源,詳細各位都能夠對於word2vec了解了大概,這裡只講講個人的理解,目的 通過對於乙個神經網路的訓練,得到每個詞對應的乙個向量表達 基於 這個神經網路,是基於語言模型,即給定t個詞的字串s,計算s是自然語言的概率p w1,w2,wt 而構建的,更直白點,就是通過輸入wi的上下...

利用Word2Vec訓練詞向量過程

先明確一點,選用不同的詞向量作為模型的初始值,效果的差異非常大!那麼怎麼產生乙個好的詞向量呢?參看文章 1 英文的詞向量可以訓練,也可以用google訓練好的那個模型。2 但是中文就不行了,沒有乙個公布乙個權威的詞向量。語料對詞向量的影響比模型的影響要重要得多得多得多 重要的事說三遍 很多 都提到語...