目錄
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 但是中文就不行了,沒有乙個公布乙個權威的詞向量。語料對詞向量的影響比模型的影響要重要得多得多得多 重要的事說三遍 很多 都提到語...