cbow和skip-gram都是在word2vec中用於將文字進行向量表示的實現方法,具體的演算法實現細節可以去看word2vec的原理介紹文章。我們這裡大體講下兩者的區別,尤其注意在使用當中的不同特點。
在cbow方法中,是用周圍詞**中心詞,從而利用中心詞的**結果情況,使用gradientdesent方法,不斷的去調整周圍詞的向量。當訓練完成之後,每個詞都會作為中心詞,把周圍詞的詞向量進行了調整,這樣也就獲得了整個文字裡面所有詞的詞向量。
要注意的是, cbow的對周圍詞的調整是統一的:求出的gradient的值會同樣的作用到每個周圍詞的詞向量當中去。
可以看到,cbow**行為的次數跟整個文字的詞數幾乎是相等的(每次**行為才會進行一次backpropgation, 而往往這也是最耗時的部分),複雜度大概是o(v);
而skip-gram是用中心詞來**周圍的詞。在skip-gram中,會利用周圍的詞的**結果情況,使用gradientdecent來不斷的調整中心詞的詞向量,最終所有的文字遍歷完畢之後,也就得到了文字所有詞的詞向量。
可以看出,skip-gram進行**的次數是要多於cbow的:因為每個詞在作為中心詞時,都要使用周圍詞進行**一次。這樣相當於比cbow的方法多進行了k次(假設k為視窗大小),因此時間的複雜度為o(kv),訓練時間要比cbow要長。
但是在skip-gram當中,每個詞都要收到周圍的詞的影響,每個詞在作為中心詞的時候,都要進行k次的**、調整。因此, 當資料量較少,或者詞為生僻詞出現次數較少時, 這種多次的調整會使得詞向量相對的更加準確。因為儘管cbow從另外乙個角度來說,某個詞也是會受到多次周圍詞的影響(多次將其包含在內的視窗移動),進行詞向量的跳幀,但是他的調整是跟周圍的詞一起調整的,grad的值會平均分到該詞上, 相當於該生僻詞沒有收到專門的訓練,它只是沾了周圍詞的光而已。
因此,從更通俗的角度來說:
在skip-gram裡面,每個詞在作為中心詞的時候,實際上是 1個學生 vs k個老師,k個老師(周圍詞)都會對學生(中心詞)進行「專業」的訓練,這樣學生(中心詞)的「能力」(向量結果)相對就會紮實(準確)一些,但是這樣肯定會使用更長的時間;
cbow是 1個老師 vs k個學生,k個學生(周圍詞)都會從老師(中心詞)那裡學習知識,但是老師(中心詞)是一視同仁的,教給大家的一樣的知識。至於你學到了多少,還要看下一輪(假如還在視窗內),或者以後的某一輪,你還有機會加入老師的課堂當中(再次出現作為周圍詞),跟著大家一起學習,然後進步一點。因此相對skip-gram,你的業務能力肯定沒有人家強,但是對於整個訓練營(訓練過程)來說,這樣肯定效率高,速度更快。
所以,這兩者的取捨,要看你自己的需求是什麼了。
CBOW與Skip Gram模型基礎
用distributed representation我們可以較容易的分析詞之間的關係了,比如將我們的詞降到二維,我們會發現 其資料的輸入輸出分為cbow和skip gram 這樣我們這個cbow的例子裡,輸入八個詞向量,輸出的是所有詞的softmax概率 訓練的目標的期望訓練樣本特定次對應的sof...
1 CBOW與Skip gram模型基礎
1 one hot 缺點 單詞過多,維度災難。思路 首先隨機初始化向量 通過訓練,將每個詞都對映到乙個較短的詞向量上來。所有的這些詞向量就構成了向量空間,進而可以用普通的統計學的方法來研究詞與詞之間的關係。在word2vec出現之前,已經有用神經網路dnn來用訓練詞向量進而處理詞與詞之間的關係了。採...
文字表示(三)CBOW模型和Skip gram模型
在前面提到的神經網路語言模型 c w模型,都沒有缺少隱藏層,而模型運算的高消耗都在輸入層到隱藏層的矩陣運算中,如果能減少這部分開銷,那麼模型會更加高效。而cbow模型和skip gram模型就屬於這一類模型。cbow模型的思想與c w模型的思想類似 輸入上下文詞語,中心目標詞。與c w模型以優化正樣...