word2vec模型cbow與skip-gram的比較

轉載自 word2vec模型cbow與skip-gram的比較html

 

cbow和skip-gram都是在word2vec中用於將文本進行向量表示的實現方法,具體的算法實現細節能夠去看word2vec的原理介紹文章。咱們這裏大致講下二者的區別,尤爲注意在使用當中的不一樣特色。算法

 

在cbow方法中,是用周圍詞預測中心詞,從而利用中心詞的預測結果狀況,使用GradientDesent方法,不斷的去調整週圍詞的向量。當訓練完成以後,每一個詞都會做爲中心詞,把周圍詞的詞向量進行了調整,這樣也就得到了整個文本里面全部詞的詞向量。學習

  

要注意的是, cbow的對周圍詞的調整是統一的:求出的gradient的值會一樣的做用到每一個周圍詞的詞向量當中去。 spa

 

能夠看到,cbow預測行爲的次數跟整個文本的詞數幾乎是相等的(每次預測行爲纔會進行一次backpropgation, 而每每這也是最耗時的部分),複雜度大概是O(V);htm

 
而skip-gram是用中心詞來預測周圍的詞。在skip-gram中,會利用周圍的詞的預測結果狀況,使用GradientDecent來不斷的調整中心詞的詞向量,最終全部的文本遍歷完畢以後,也就獲得了文本全部詞的詞向量。
 

能夠看出,skip-gram進行預測的次數是要多於cbow的:由於每一個詞在做爲中心詞時,都要使用周圍詞進行預測一次。這樣至關於比cbow的方法多進行了K次(假設K爲窗口大小),所以時間的複雜度爲O(KV),訓練時間要比cbow要長。blog

 

可是在skip-gram當中,每一個詞都要收到周圍的詞的影響,每一個詞在做爲中心詞的時候,都要進行K次的預測、調整。所以, 當數據量較少,或者詞爲生僻詞出現次數較少時, 這種屢次的調整會使得詞向量相對的更加準確。由於儘管cbow從另一個角度來講,某個詞也是會受到屢次周圍詞的影響(屢次將其包含在內的窗口移動),進行詞向量的跳幀,可是他的調整是跟周圍的詞一塊兒調整的,grad的值會平均分到該詞上, 至關於該生僻詞沒有收到專門的訓練,它只是沾了周圍詞的光而已。ip

 

所以,從更通俗的角度來講:get

 
在skip-gram裏面,每一個詞在做爲中心詞的時候,其實是 1個學生 VS K個老師,K個老師(周圍詞)都會對學生(中心詞)進行「專業」的訓練,這樣學生(中心詞)的「能力」(向量結果)相對就會紮實(準確)一些,可是這樣確定會使用更長的時間;
 

cbow是 1個老師 VS K個學生,K個學生(周圍詞)都會從老師(中心詞)那裏學習知識,可是老師(中心詞)是一視同仁的,教給你們的同樣的知識。至於你學到了多少,還要看下一輪(假如還在窗口內),或者之後的某一輪,你還有機會加入老師的課堂當中(再次出現做爲周圍詞),跟着你們一塊兒學習,而後進步一點。所以相對skip-gram,你的業務能力確定沒有人家強,可是對於整個訓練營(訓練過程)來講,這樣確定效率高,速度更快。io

 

因此,這二者的取捨,要看你本身的需求是什麼了。class

相關文章
相關標籤/搜索