日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gram矩阵_Skip-gram

發布時間:2023/12/3 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gram矩阵_Skip-gram 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Skip-gram

標簽(空格分隔):NLP

一. skip-gram和cbow的對比

skip-gram與cbow相比,好處在于對于不常用的詞,skip-gram的效果要更好;

舉個簡單的例子,一個句子'w1w2w3w4',window_size=1;

對于cbow,模型學習的是預測給定上下文后出現word的概率,或者去最大化下面式子的概率值:

?

但這對不常見的單詞來說是個問題,因為不常見的單詞在給定的上下文中不經常出現,結果模型會分配給它們很小的概率。

對于skip-gram,模型學習的是給定單詞后去預測上下文的概率,或者去最大化下面式子的概率值:

在這個例子中,兩個單詞(頻繁出現的和不頻繁出現的) 被相同的對待。均被當作是單詞和上下文兩個觀測。因此,這個模型會把罕見的單詞也學到。

二. skip-gram

主要思想

  • 目標:skip-gram目標是通過最優化鄰域保留的似然目標,來學習單詞的連續特征表示;
  • 假設:skip-gram的目標是基于分布假說,其中陳述的是近似上下文中的單詞有具有近似含義的趨勢。那就是說,相似的單詞有著出現在相似鄰域內的趨勢;
  • 算法:遍歷文檔中的每個單詞,對于每個單詞,其力求去嵌入單詞的特征,以能夠去預測鄰近的單詞(單詞在上下文單詞的窗口里)。通過使用帶負采樣的SGD梯度下降,來優化似然函數,學習單詞的特征表示。
  • skip-gram公式化的表述

    skip-gram通過最優化似然目標函數,來學習預測給定單詞后的上下文。假設現在我們有一個句子:

    'I am writing a summary for NLP.'

    這個模型目的是,根據給定目標word ‘summary’,來預測window_size=2窗口中的上下文單詞;

    'I am [] [] summary [] [].'

    接著模型試著去最優化似然函數:

    事實上,給出一個句子,skip-gram可以做到。相反的,把每個單詞都當作一個目標word,并且預測上下文word。所以這個目標函數可以表示為:

    給它一個更正式的表述:給出一組單詞w和它們的上下文c. 我們考慮條件概率是P(c|w), 并且給出預料,目標是找出條件概率

    的參數,以至于最大化語料出現的概率:

    或者,我們也可以將其寫為:

    其中D是我們提取的所有單詞和上下文的集合,接下來通過log函數來進行簡化:

    那么接下來的問題就是如何來定義

    ,其必須滿足如下兩個條件:

    一是

    二是

    一個自然的方法是使用softmax函數,所以可以這樣來定義:

    是word w和w的上下文單詞c的向量化表示,U表示所有可用上下文的集合。

    在這篇文章中,我們假設目標單詞w和上下文c來自不同的詞匯表矩陣V和U,因此,來自單詞word的'lunch'和來自單詞上下文的'lunch'是不同的。其中一個動機是每個單詞在模型中充當了兩種角色,其中一個作為目標單詞,而另一個作為上下文單詞。這就是為什么我們需要兩個單獨矩陣的原因,注意到它們必須是相同的維度:V * k,其中k是一個超參數,表示的是每一個詞向量的維數。我們想要設置參數

    ,從而使得函數最大化。

    這里我們用內積(inner product)來衡量

    和兩向量間的相似性,如果它們有近似的含義,那么就代表這它們有著近似的向量化表示,那么它們的共現概率也會比較高。

    (note:將余弦相似度和內積來作為距離度量的對比,cos距離只關心角度的區別,而內積關心的是角度和大小。如果你歸一化了你的數據使得它們有相同的大小,那么這兩種方法就沒有區別了)

    代入我們的定義

    ,可以把目標函數表示為:

    然而這個目標函數計算起來太過于復雜,因為其表示為log(sum),故計算目標函數的代價會比較大。

    在考慮所有word的上下文的情況下,其時間復雜度為O(|Vocab|)

    為什么更prefer選擇在求和里面取log,而不是在求和外面取log

    經常我們選擇在求和里面取log而不在外面。當你想做優化時,log和sum函數是一部分功能。

    這就表示在某個點處,你需要把函數的梯度設為0,導數是線性的計算,所以當你需要求log(sum)時,和的導數就是導數的和。對比之下,根據鏈式法則,和的log的導數,求得為如下形式:

    1/(your sum)?(derivative of the sum)

    特別是當分析的時候, 找到該函數的0可能是一個具有挑戰性的任務。另一方面,因為這個過程的計算代價很大,在求和外的log常常需要近似的來進行計算,例如使用Jensen不等式來進行近似。

    現在,開始重新構造目標函數并且對其近似:

    負采樣--skipgram model

    在進行skip-gram模型的推導之前,我們假定(w,c)在訓練數據集中是一個詞與其上下文詞的對,那么

    的共現概率應該很大。現在可以思考一個問題:當共現概率比較大時,在訓練數據中,它們是不是一個單詞及單詞的上下文對?按照這種方式進行思考,我們提出了二元分類問題:

    表示來自上下文語料庫的單詞對(w,c)的共現概率,表示來自不同語料庫的單詞對(w,c)共現概率。

    和以前一樣,假設有參數

    控制分布,因為它是一個二分類的問題,故我們可以使用sigmoid函數來定義它:

    現在的目標變成了尋找參數

    來最大化如下目標函數:

    其中

    是由不在語料庫中的詞對(w, c)隨機組成,我們將(w, c)這個不在語料庫中的詞對稱為負采樣(源于的采樣過程是對負樣本進行隨機采樣)。下面有幾個點需要注意:
  • 1-=;
  • 該目標函數看起來和邏輯回歸的目標函數非常相似;
  • 避免了log(sum)的計算;
  • 通常情況下:

    ,所以我們為每個數據樣本取k個負樣本。由原始論文中,對于小型訓練數據集,作者建議k值取在5--20之間;對于大型訓練數據集,作者建議k值取在2--5之間。

    因此如果我們對每個數據樣本取k個負樣本,并且通過N(w)來表示這些負樣本。那么目標函數可以表示為:

    SGD for skip-gram objective function

    代碼實現細節

    • 動態窗口大小:使用的窗口大小是動態的,參數k表示最大窗口大小。對于語料庫中的單詞,窗口大小從[1,k]均勻采樣;
    • 二次采樣和稀有詞修剪:關于二次采樣和下采樣

    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 -

    總結

    以上是生活随笔為你收集整理的gram矩阵_Skip-gram的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。