cs224n word2vec 簡介和公式推導(dǎo) https://plmsmile./2017/11/02/cs224n-lecture2-word2vec/#
Word meaning詞意詞的意思就是idea ,,如下: 傳統(tǒng)離散表達傳統(tǒng)使用分類學去建立一個WordNet,其中包含許多上位詞is-a 和同義詞集等,。如下: 上義詞 | 同義詞 |
---|
entity, physical_entity,object, organism, animal | full, good; estimable, good, honorable, respectable |
離散表達的問題: 丟失了細微差別,,比如同義詞:adept, expert, good, practiced, proficient, skillful 不能處理新詞匯 分類太主觀 需要人力去構(gòu)建和修改 很難去計算詞匯相似度
每個單詞使用one-hot 編碼,,比如hotel=[0,1,0,0,0][0,1,0,0,0],,motel=[0,0,1,0,0][0,0,1,0,0],。 當我搜索settle hotel 的時候也應(yīng)該去匹配包含settle motel 的文章,。 但是我們的查詢hotel向量和文章里面的motel向量卻是正交的,算不出相似度,。 分布相似表達通過一個單詞的上下文去表達這個單詞,。 You shall know a word by the company it keeps. --- JR. Firth
例如,下面用周圍的單詞去表達banking : government debt problems turning into banking crises as has happened in saying that Europe needs unified banking regulation to replace the hodgepodge
稠密詞向量 一個單詞的意義應(yīng)該是由它本身的詞向量來決定的,。這個詞向量可以預(yù)測出的上下文單詞,。 比如lingustics的詞向量是[0.286,0.792,?0.177,?0.107,0.109,?0.542,0.349][0.286,0.792,?0.177,?0.107,0.109,?0.542,0.349] 詞嵌入思想構(gòu)建一個模型,,根據(jù)中心單詞wtwt,,通過自身詞向量,去預(yù)測出它的上下文單詞,。 p(context∣wt)=?p(context∣wt)=? 損失函數(shù)如下,,w?tw?t表示wtwt的上下文(負號通常表示除了某某之外),如果完美預(yù)測,,損失函數(shù)為0,。 J=1?p(w?t∣wt)J=1?p(w?t∣wt) Word2Vec在每個單詞和其上下文之間進行預(yù)測。 有兩種算法: Skip-grams(SG): 給目標單詞,,預(yù)測上下文 Continuous Bag of Words(CBOW):給上下文,,預(yù)測目標單詞
兩個稍微高效的訓練方法: 課上只是Naive softmax。兩個模型,,兩種方法,,一共有4種實現(xiàn)。這里是word2vec詳細信息,。 Skip-gram對于每個單詞wtwt,,會選擇一個上下文窗口mm。 然后要預(yù)測出范圍內(nèi)的上下文單詞,,使概率P(wt+i∣wt)P(wt+i∣wt)最大,。 目標函數(shù) θθ是我們要訓練的參數(shù),目標函數(shù)就是所有位置預(yù)測結(jié)果的乘積,,最大化目標函數(shù): J′(θ)=T∏t=1∏?m≤j≤mp(wt+j∣wt;θ),t≠jJ′(θ)=∏t=1T∏?m≤j≤mp(wt+j∣wt;θ),t≠j 一般使用negative log likelihood :負采樣教程,。 要最大化目標函數(shù),就得得到損失函數(shù),。對于對數(shù)似然函數(shù),,取其負對數(shù)就可以得到損失函數(shù),再最小化損失函數(shù),,其中TT是文本長度,,mm是窗口大小: J(θ)=?1TT∑t=1∑?m≤j≤mlogP(wt+j∣wt)J(θ)=?1T∑t=1T∑?m≤j≤mlog?P(wt+j∣wt) Word2vec細節(jié)詞匯和詞向量符號說明: 計算p(wt+j∣wt)p(wt+j∣wt),, 即: p(wj∣wt)=softmax(uTj?vt)=exp(uTj?vt)∑Vi=1exp(uTi?vt)p(wj∣wt)=softmax(ujT?vt)=exp?(ujT?vt)∑i=1Vexp?(uiT?vt) 兩個單詞越相似,點積越大,,向量點積如下: uT?v=M∑i=1ui×viuT?v=∑i=1Mui×vi softmax之所以叫softmax,,是因為指數(shù)會讓大的數(shù)越大,小的數(shù)越小,。類似于max函數(shù),。下面是計算的詳細信息: 一些理解和解釋: wtwt是one-hot編碼的中心詞匯,,維數(shù)是(V,1)(V,1) WW是詞匯表達矩陣,維數(shù)是(d,V)(d,V),,一列就是一個單詞 Wwt=vtWwt=vt 相乘得到詞向量vtvt ,,(d,V)?(V,1)→(d,1)(d,V)?(V,1)→(d,1), 用dd維向量去表達了詞匯t W′W′,, W′?vt=sW′?vt=s,,(V,d)?(d,1)→(V,1)(V,d)?(d,1)→(V,1) , 得到 語義相似度向量ss 再對ss進行softmax即可求得上下文詞匯 每個單詞有兩個向量,,作為center單詞向量和context單詞向量
偏導(dǎo)計算設(shè)oo是上下文單詞,,cc是中心單詞,條件概率如下: P(o∣c)=exp(uTo?vc)∑Vi=1exp(uTi?vc)P(o∣c)=exp?(uoT?vc)∑i=1Vexp?(uiT?vc) 這里只計算logPlog?P對vcvc向量的偏導(dǎo),。 用θθ向量表示所有的參數(shù),,有VV個單詞,dd維向量,。每個單詞有2個向量,。參數(shù)個數(shù)一共是2dV2dV個。 向量偏導(dǎo)計算公式,,x,ax,a 均是向量 ?xTa?x=?aTx?x=a?xTa?x=?aTx?x=a 函數(shù)偏導(dǎo)計算,,鏈式法則,y=f(u),u=g(x)y=f(u),u=g(x) dydx=dydududxdydx=dydududx 最小化損失函數(shù) : J(θ)=?1TT∑t=1∑?m≤j≤mlogP(wt+j∣wt),j≠mJ(θ)=?1T∑t=1T∑?m≤j≤mlog?P(wt+j∣wt),j≠m 這里只計算vcvc的偏導(dǎo),,先進行分解原式為2個部分: ??vclogP(o∣c)=??vclogexp(uTo?vc)∑Vi=1exp(uTi?vc)=??vclogexp(uTo?vc)1???vclogV∑i=1exp(uTi?vc)2??vclog?P(o∣c)=??vclog?exp?(uoT?vc)∑i=1Vexp?(uiT?vc)=??vclog?exp?(uoT?vc)?1???vclog?∑i=1Vexp?(uiT?vc)?2 部分1推導(dǎo) ??vclogexp(uTo?vc)=??vcuTo?vc=uo??vclog?exp?(uoT?vc)=??vcuoT?vc=uo 部分2推導(dǎo) ??vclogV∑i=1exp(uTi?vc)=1∑Vi=1exp(uTi?vc)???vcV∑x=1exp(uTx?vc)=1A?V∑x=1??vcexp(uTx?vc)=1A?V∑x=1exp(uTx?vc)??vcuTx?vc=1∑Vi=1exp(uTi?vc)?V∑x=1exp(uTx?vc)ux=V∑x=1exp(uTx?vc)∑Vi=1exp(uTi?vc)?ux=V∑x=1P(x∣c)?ux??vclog?∑i=1Vexp?(uiT?vc)=1∑i=1Vexp?(uiT?vc)???vc∑x=1Vexp?(uxT?vc)=1A?∑x=1V??vcexp?(uxT?vc)=1A?∑x=1Vexp?(uxT?vc)??vcuxT?vc=1∑i=1Vexp?(uiT?vc)?∑x=1Vexp?(uxT?vc)ux=∑x=1Vexp?(uxT?vc)∑i=1Vexp?(uiT?vc)?ux=∑x=1VP(x∣c)?ux 所以,,綜合起來可以求得,單詞o是單詞c的上下文概率logP(o∣c)log?P(o∣c) 對center向量vcvc的偏導(dǎo): ??vclogP(o∣c)=uo?V∑x=1P(x∣c)?ux=觀察到的?期望的??vclog?P(o∣c)=uo?∑x=1VP(x∣c)?ux=觀察到的?期望的 實際上偏導(dǎo)是,,單詞oo的上下文詞向量,,減去,所有單詞xx的上下文向量乘以x作為cc的上下文向量的概率,。 總體梯度計算在一個window里面,,對中間詞匯vcvc求了梯度, 然后再對各個上下文詞匯uouo求梯度,。 然后更新這個window里面用到的參數(shù),。 比如句子We like learning NLP 。設(shè)m=1m=1: 梯度下降有了梯度之后,,參數(shù)減去梯度,,就可以朝著最小的方向走了。機器學習梯度下降 θnew=θold?α??θoldJ(θ),θnew=θold?αΔθJ(θ)θnew=θold?α??θoldJ(θ),θnew=θold?αΔθJ(θ) 隨機梯度下降 預(yù)料會有很多個window,,因此每次不能更新所有的,。只更新每個window的,對于window t: θnew=θold?αΔθJt(θ)θnew=θold?αΔθJt(θ)
|