gram矩阵_Skip-gram
Skip-gram
標(biāo)簽(空格分隔):NLP
一. skip-gram和cbow的對比
skip-gram與cbow相比,好處在于對于不常用的詞,skip-gram的效果要更好;
舉個(gè)簡單的例子,一個(gè)句子'w1w2w3w4',window_size=1;
對于cbow,模型學(xué)習(xí)的是預(yù)測給定上下文后出現(xiàn)word的概率,或者去最大化下面式子的概率值:
?
但這對不常見的單詞來說是個(gè)問題,因?yàn)椴怀R姷膯卧~在給定的上下文中不經(jīng)常出現(xiàn),結(jié)果模型會(huì)分配給它們很小的概率。
對于skip-gram,模型學(xué)習(xí)的是給定單詞后去預(yù)測上下文的概率,或者去最大化下面式子的概率值:
在這個(gè)例子中,兩個(gè)單詞(頻繁出現(xiàn)的和不頻繁出現(xiàn)的) 被相同的對待。均被當(dāng)作是單詞和上下文兩個(gè)觀測。因此,這個(gè)模型會(huì)把罕見的單詞也學(xué)到。
二. skip-gram
主要思想
skip-gram公式化的表述
skip-gram通過最優(yōu)化似然目標(biāo)函數(shù),來學(xué)習(xí)預(yù)測給定單詞后的上下文。假設(shè)現(xiàn)在我們有一個(gè)句子:
'I am writing a summary for NLP.'
這個(gè)模型目的是,根據(jù)給定目標(biāo)word ‘summary’,來預(yù)測window_size=2窗口中的上下文單詞;
'I am [] [] summary [] [].'
接著模型試著去最優(yōu)化似然函數(shù):
事實(shí)上,給出一個(gè)句子,skip-gram可以做到。相反的,把每個(gè)單詞都當(dāng)作一個(gè)目標(biāo)word,并且預(yù)測上下文word。所以這個(gè)目標(biāo)函數(shù)可以表示為:
給它一個(gè)更正式的表述:給出一組單詞w和它們的上下文c. 我們考慮條件概率是P(c|w), 并且給出預(yù)料,目標(biāo)是找出條件概率
的參數(shù),以至于最大化語料出現(xiàn)的概率:或者,我們也可以將其寫為:
其中D是我們提取的所有單詞和上下文的集合,接下來通過log函數(shù)來進(jìn)行簡化:
那么接下來的問題就是如何來定義
,其必須滿足如下兩個(gè)條件:一是
;二是
一個(gè)自然的方法是使用softmax函數(shù),所以可以這樣來定義:
是word w和w的上下文單詞c的向量化表示,U表示所有可用上下文的集合。在這篇文章中,我們假設(shè)目標(biāo)單詞w和上下文c來自不同的詞匯表矩陣V和U,因此,來自單詞word的'lunch'和來自單詞上下文的'lunch'是不同的。其中一個(gè)動(dòng)機(jī)是每個(gè)單詞在模型中充當(dāng)了兩種角色,其中一個(gè)作為目標(biāo)單詞,而另一個(gè)作為上下文單詞。這就是為什么我們需要兩個(gè)單獨(dú)矩陣的原因,注意到它們必須是相同的維度:V * k,其中k是一個(gè)超參數(shù),表示的是每一個(gè)詞向量的維數(shù)。我們想要設(shè)置參數(shù)
,從而使得函數(shù)最大化。這里我們用內(nèi)積(inner product)來衡量
和兩向量間的相似性,如果它們有近似的含義,那么就代表這它們有著近似的向量化表示,那么它們的共現(xiàn)概率也會(huì)比較高。(note:將余弦相似度和內(nèi)積來作為距離度量的對比,cos距離只關(guān)心角度的區(qū)別,而內(nèi)積關(guān)心的是角度和大小。如果你歸一化了你的數(shù)據(jù)使得它們有相同的大小,那么這兩種方法就沒有區(qū)別了)
代入我們的定義
,可以把目標(biāo)函數(shù)表示為:然而這個(gè)目標(biāo)函數(shù)計(jì)算起來太過于復(fù)雜,因?yàn)槠浔硎緸閘og(sum),故計(jì)算目標(biāo)函數(shù)的代價(jià)會(huì)比較大。
在考慮所有word的上下文的情況下,其時(shí)間復(fù)雜度為O(|Vocab|)
為什么更prefer選擇在求和里面取log,而不是在求和外面取log
經(jīng)常我們選擇在求和里面取log而不在外面。當(dāng)你想做優(yōu)化時(shí),log和sum函數(shù)是一部分功能。
這就表示在某個(gè)點(diǎn)處,你需要把函數(shù)的梯度設(shè)為0,導(dǎo)數(shù)是線性的計(jì)算,所以當(dāng)你需要求log(sum)時(shí),和的導(dǎo)數(shù)就是導(dǎo)數(shù)的和。對比之下,根據(jù)鏈?zhǔn)椒▌t,和的log的導(dǎo)數(shù),求得為如下形式:
1/(your sum)?(derivative of the sum)
特別是當(dāng)分析的時(shí)候, 找到該函數(shù)的0可能是一個(gè)具有挑戰(zhàn)性的任務(wù)。另一方面,因?yàn)檫@個(gè)過程的計(jì)算代價(jià)很大,在求和外的log常常需要近似的來進(jìn)行計(jì)算,例如使用Jensen不等式來進(jìn)行近似。
現(xiàn)在,開始重新構(gòu)造目標(biāo)函數(shù)并且對其近似:
負(fù)采樣--skipgram model
在進(jìn)行skip-gram模型的推導(dǎo)之前,我們假定(w,c)在訓(xùn)練數(shù)據(jù)集中是一個(gè)詞與其上下文詞的對,那么
的共現(xiàn)概率應(yīng)該很大。現(xiàn)在可以思考一個(gè)問題:當(dāng)共現(xiàn)概率比較大時(shí),在訓(xùn)練數(shù)據(jù)中,它們是不是一個(gè)單詞及單詞的上下文對?按照這種方式進(jìn)行思考,我們提出了二元分類問題:表示來自上下文語料庫的單詞對(w,c)的共現(xiàn)概率,表示來自不同語料庫的單詞對(w,c)共現(xiàn)概率。和以前一樣,假設(shè)有參數(shù)
控制分布,因?yàn)樗且粋€(gè)二分類的問題,故我們可以使用sigmoid函數(shù)來定義它:現(xiàn)在的目標(biāo)變成了尋找參數(shù)
來最大化如下目標(biāo)函數(shù):其中
是由不在語料庫中的詞對(w, c)隨機(jī)組成,我們將(w, c)這個(gè)不在語料庫中的詞對稱為負(fù)采樣(源于的采樣過程是對負(fù)樣本進(jìn)行隨機(jī)采樣)。下面有幾個(gè)點(diǎn)需要注意:通常情況下:
,所以我們?yōu)槊總€(gè)數(shù)據(jù)樣本取k個(gè)負(fù)樣本。由原始論文中,對于小型訓(xùn)練數(shù)據(jù)集,作者建議k值取在5--20之間;對于大型訓(xùn)練數(shù)據(jù)集,作者建議k值取在2--5之間。因此如果我們對每個(gè)數(shù)據(jù)樣本取k個(gè)負(fù)樣本,并且通過N(w)來表示這些負(fù)樣本。那么目標(biāo)函數(shù)可以表示為:
SGD for skip-gram objective function
代碼實(shí)現(xiàn)細(xì)節(jié)
- 動(dòng)態(tài)窗口大小:使用的窗口大小是動(dòng)態(tài)的,參數(shù)k表示最大窗口大小。對于語料庫中的單詞,窗口大小從[1,k]均勻采樣;
- 二次采樣和稀有詞修剪:關(guān)于二次采樣和下采樣
References
https://blog.csdn.net/Jay_Tang/article/details/105577295 唐兄的blog
http://www.davidsbatista.net/blog/2018/12/06/Word_Embeddings/
https://www.quora.com/Why-is-it-preferential-to-have-the-log-inside-the-sum-rather-than-outside
- END -
總結(jié)
以上是生活随笔為你收集整理的gram矩阵_Skip-gram的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: android gridview控件使用
- 下一篇: 安卓侧滑菜单实现(安卓侧滑菜单)
