word2vec中數學原理詳解以及原理思考

2021-08-26 02:46:37 字數 3019 閱讀 2978

很久沒有寫部落格了,也沒有寫過相關總結。最近,工作中又開始用到了word2vector,正好就做個相關總結。這方面相關的部落格有很多,我看過的講的最清楚的就是@peghoty的部落格。

要理解wordvector的原理,有些知識還是需要提前了解一下。

預備知識:

背景知識: ,這裡要著重去理解統計語言模型,n-gram模型和神經概率語言模型。

建議看一下預備知識和背景知識。

本博文前半篇幅主要借助@peghoty的部落格講解數學原理,後半篇幅主要講一些總結和本人對word2vec的一些思考。

詞向量的訓練主要有兩個具體的模型——cbow(continuous bag-of-wods model)模型和skip-gram(continuous skip-gram model)模型。關於這兩個模型,大神tomas mikolov 給出了如圖1和圖2 所示的示意圖。

圖1 cbow模型 圖2 skip-gram模型

從示意圖可知,兩個模型都包含三層:輸入層、投影層和輸出層。cbow是在一直當前詞wt的上下文w(t-2),w(t-1),w(t+1),w(t+2)的前提下**當前詞wt;skip-gram與其正好相反。

對於cbow和skip-gram兩個模型,word2vector給出了兩套框架(即由於詞向量學習最初的設計方案存在很大的效率問題,而衍生出來的兩個優化方案),分別是hierarchical softmax和negative sampling。

接下來的關於cbow和skip-gram的詳細講解,**@peghoty。

1、先來談一些依賴huffman樹的hs方案,拋開公式,如果讓我們來設計這個方案的話我們會怎麼做?即、擺在我們面前的只有一批語料,如何利用這批語料來構建乙個神經概率語言模型並得到附產物詞向量?

a、對這批語料進行詞頻統計並構建huffman樹,一旦語料固定了,那麼此刻該huffman樹就固定了。(接下來就是怎麼用這棵樹?)

b、先以cbow模型為例,從語料中我們可以獲得訓練樣本(context(w),w)。此時要注意,訓練樣本(context(w),w)雖然可以理解為帶標籤樣本,但目標函式是最大化對數似然,標籤是什麼並不重要,只需要知道給定context(w),最大化得到w的概率就行。(樣本就這樣構建好了)

c、接下來看一下這棵huffman樹,每個葉子節點都是詞典中的乙個詞w,其中還有非葉子節點,它們表示什麼不用關心。該huffman樹已經固定,依據極大似然估計的思路,此時的目標轉換為利用訓練樣本來計算構建給定huffman樹的極大似然估計,即最大可能的去逼近這課依據詞頻構建的huffman樹。(生成這棵樹就是為了和樣本建立關係,那麼如何逼近?)

d、從這棵樹中我們可知,每個詞w都有且只有乙個從根節點到該葉子節點的唯一路徑。通過這條路徑來構建context(w)和w的關係。步驟b中提到給定context(w)要最大化得到w的概率,對應到樹中就是當根節點是context(w)時,最大化找到這條正確的路徑的概率,即去逼近每個w(葉子節點)的唯一路徑。huffman樹是一棵二叉樹,在每個非葉子節點上做方向選擇時,最大概率的去選擇正確路徑的方向,此時,逼近唯一路徑的過程變成了乙個分層二分類的過程(即hs的思想)。此時,正負類的概念,正確的路徑方向是正類,相反的路徑方向是負類,那麼在每個非葉子節點上只需要利用sigmoid函式做乙個二分類即可。

ok,思路就是這麼簡單,說白了就是,一開始你只有樣本,那沒辦法構建模型,也沒辦法訓練啊,怎麼辦?於是用語料得到乙個固定樹,此時思路就來了,用樣本去逼近這棵樹。那怎麼訓練呢?因為樹是二叉樹,正確的路徑方向為正,錯誤的方向為負,那正負樣本不就有了嘛,於是就可以訓練了,極大似然估計就能搞定。

skip-gram模型,同理。

另外,負取樣優化方案也是這樣,一開始只有樣本,只是換了乙個構建模型的方案。什麼方案呢?因為咱們利用sigmoid函式,那就要讓樣本有正類有負類,那怎麼讓它有正類有負類呢?此時,可以把(context(w),w)當做正樣本,w為正類標籤。負樣本從何而來,那就需要負取樣了,通過負取樣來取樣除w以外的詞!w,那(context(w),!w)就構成了負樣本了,!w就是負類標籤。這樣正負樣本都有了,就可以利用最簡單的極大似然估計去訓練了。

總結:1、兩個模型優劣比較:cbow模型訓練速度快;而skip-gram訓練速度相對較慢,對罕見字有利,總體效果相對較好。skip-gram比cbow慢的原因就不解釋了,看公式就明白了。只說一下,為什麼skip-gram對罕見字有利?原因是對單個詞w來講,假設視窗大小是c,那麼在一次迭代中,w的詞表示會被單獨修正2c次,而在cbow中,w的詞表示雖然也會被修正2c次,但是每次修正都是將殘差平均到多個詞上再去修正w。

2、兩個優化方案優劣比較:hs對罕見字有利;而負取樣對常見詞和低維向量有利。hs對罕見字有利的原因是罕見字的路徑長度更長,可以對比深度學習中的網路層數越多效果相對越好。而負取樣對常見詞有利原因是常見詞以更大的概率被選中,更高頻的參與了訓練。

word2vec 中的數學原理詳解

word2vec 是 google 於 2013 年開源推出的乙個用於獲取 word vector 的工具包,它簡單 高效,因此引起了很多人的關注。由於 word2vec 的作者 tomas mikolov 在兩篇相關的 3,4 中並沒有談及太多演算法細節,因而在一定程度上增加了這個工具包的神秘感。...

word2vec 中的數學原理詳解(三)背景知識

word2vec 是 google 於 2013 年開源推出的乙個用於獲取 word vector 的工具包,它簡單 高效,因此引起了很多人的關注。由於 word2vec 的作者 tomas mikolov 在兩篇相關的 3,4 中並沒有談及太多演算法細節,因而在一定程度上增加了這個工具包的神秘感。...

word2vec 中的數學原理詳解(一)目錄和前言

word2vec 是 google 於 2013 年開源推出的乙個用於獲取 word vector 的工具包,它簡單 高效,因此引起了很多人的關注。由於 word2vec 的作者 tomas mikolov 在兩篇相關的 3,4 中並沒有談及太多演算法細節,因而在一定程度上增加了這個工具包的神秘感。...