NLP學習(1)---Glove模型---詞向量模型


一、簡介:

1、概念:glove是一種無監督的Word representation方法。

Count-based模型,如GloVe,本質上是對共現矩陣進行降維。首先,構建一個詞匯的共現矩陣,每一行是一個word,每一列是context。共現矩陣就是計算每個word在每個context出現的頻率。由於context是多種詞匯的組合,其維度非常大,我們希望像network embedding一樣,在context的維度上降維,學習word的低維表示。這一過程可以視為共現矩陣的重構問題,即reconstruction loss。(這里再插一句,降維或者重構的本質是什么?我們選擇留下某個維度和丟掉某個維度的標准是什么?Find the lower-dimensional representations which can explain most of the variance in the high-dimensional data,這其實也是PCA的原理)。

2、優點:充分有效的利用了語料庫的統計信息,僅僅利用共現矩陣里面的非零元素進行訓練,而skip-gram沒有很有效的利用語料庫中的一些統計信息。

3、發展過程:

詞向量詳細推導:https://blog.csdn.net/liuy9803/article/details/86592392

  (1)one-hot:

詞向量的維數為整個詞匯表的長度,對於每個詞,將其對應詞匯表中的位置置為1,其余維度都置為0。

缺點是:

  • 維度非常高,編碼過於稀疏,易出現維數災難問題;
  • 不能體現詞與詞之間的相似性,每個詞都是孤立的,泛化能力差。

 

(2)向量空間模型VSM:

定義:在給定文檔集合C和詞典D的條件下,將某篇文檔通過詞袋模型表示成一個個的詞,而后根據 TF-IDF 為每個詞計算出一個實數值;

由於詞典D的大小為M,因此將這篇文檔轉化成一個M維向量,如果詞典中某個詞未出現在文檔中,則這個詞的在向量中對應的元素為0,若某個詞出現在文檔中,則這個詞在向量中對應的元素值為這個詞的tf-idf值。這樣,就把文檔表示成向量了,而這就是 向量空間模型(vector space model)

而有了文檔向量,也就可以用余弦公式計算文檔之間的相似度了。

缺點:

  • 相對於onehot加入了tf-idf等信息,向量空間模型並沒有catch住詞(term)與詞(term)之間的關系,它假設各個term之間是相互獨立的。一些上下文信息丟失。
  • 在實際應用中,我們並不是直接使用 TF*IDF 這個理論模型,因為它計算出來的權重偏向於短文本因此需要某種平滑

舉個例子來說,term1在docA中出現了3次,term2在docA中出現了9次,根據上面計算TF的方式,意味着:term2的tf權重(或者說重要性)比term1要大3倍,那真的是重要3倍么?因此,在Lucene的實際評分模型中,計算的是sqrt(tf),即通過 tf 開根號,起到一定的平滑作用。類似地,計算 idf 時,是取log對數,也是為了平滑。

詞向量空間模型的主要思路是出現在類似的上下文環境中的單詞在語義上很可能相似。例如,假如我們發現,“咖啡”和“喝”經常同時出現,另一方面,“茶”和“喝”也經常同時出現,那么我們可以推測“咖啡”和“茶”在語義上應該是相似的。則詞向量維度為總上下文的詞數量。【但如果詞料數量很多,則會產生維度過高的問題】

(3)詞嵌入:

神經網絡將詞匯表中的詞作為輸入,輸出一個低維的向量表示,然后使用BP優化參數。

生成詞向量的神經網絡模型分為兩種:

  • 一種的目的是訓練可以表示語義關系的詞向量,能被用於后續任務中,如word2vec;
  • 另一種是將詞向量作為副產品產生,根據特定任務需要訓練得到詞向量,如fastText。

①學習的概率分布

Word2Vec:【其輸出是單詞同時出現的概率分布】

GLove:【相比單詞同時出現的概率,單詞同時出現的概率的比率能夠更好地區分單詞。】

比如,假設我們要表示“冰”和“蒸汽”這兩個單詞。對於和“冰”相關,和“蒸汽”無關的單詞,比如“固體”,我們可以期望P冰-固體/P蒸汽-固體較大。類似地,對於和“冰”無關,和“蒸汽”相關的單詞,比如“氣體”,我們可以期望P冰-氣體/P蒸汽-氣體較小。相反,對於像“水”之類同時和“冰”、“蒸汽”相關的單詞,以及“時尚”之類同時和“冰”、“蒸汽”無關的單詞,我們可以期望P冰-水/P蒸汽-水、P冰-時尚/P蒸汽-時尚應當接近於1。

②目標函數:最小二乘

Word2Vec:【Word2Vec中隱藏層沒有使用激活函數,這就意味着,隱藏層學習的其實是線性關系。】

GLove:【隱藏層使用比神經網絡更簡單的模型】
詞向量是無監督學習少數幾個成功的應用之一,優勢在於不需要人工標注語料,直接使用未標注的文本訓練集作為輸入,輸出的詞向量可以用於下游業務的處理。

③優點:

    • 詞向量是無監督學習少數幾個成功的應用之一,優勢在於不需要人工標注語料,直接使用未標注的文本訓練集作為輸入,輸出的詞向量可以用於下游業務的處理。
    • 詞向量用於遷移學習:

(1)使用大的語料庫訓練詞向量(或網上下載預訓練好的詞向量);

(2)將詞向量模型遷移到只有少量標注的訓練集任務中;

(3)用新的數據微調詞向量(如果新的數據集不大,則這一步不是必須的)。

    • 詞維度降低

雖然詞向量是神經網絡的輸入,但並非第一層輸入。第一層是詞的one-hot編碼,乘以一個權重矩陣后得到才是詞向量化表示,而權重在模型訓練階段是可以更新的。

二、模型

 

 

推導過程:

 

三、Glove和skip-gram、CBOW模型對比

Cbow/Skip-Gram 是一個local context window的方法,比如使用NS來訓練,缺乏了整體的詞和詞的關系,負樣本采用sample的方式會缺失詞的關系信息。
另外,直接訓練Skip-Gram類型的算法,很容易使得高曝光詞匯得到過多的權重

Global Vector融合了矩陣分解Latent Semantic Analysis (LSA)的全局統計信息和local context window優勢。融入全局的先驗統計信息,可以加快模型的訓練速度,又可以控制詞的相對權重。

我的理解是skip-gram、CBOW每次都是用一個窗口中的信息更新出詞向量,但是Glove則是用了全局的信息(共線矩陣),也就是多個窗口進行更新

   https://blog.csdn.net/u012879957/article/details/82735057

  • 兩者最直觀的區別在於,word2vec是“predictive”的模型,而GloVe是“count-based”的模型。具體是什么意思呢?

  • 不采用 negative sampling 的word2vec 速度非常快,但是准確率僅有57.4%。

    • 只告訴模型什么是有關的,卻不告訴它什么是無關的,模型很難對無關的詞進行懲罰從而提高自己的准確率
    • 在python的gensim這個包里,gensim.models.word2vec.Word2Vec默認是不開啟negative sampling的,需要開啟的話請設置negative參數,如何設置文檔中有明確說明gensim: models.word2vec
    • 當使用了negative sampling之后,為了將准確率提高到68.3%,word2vec就需要花較長的時間了(8h38m)
  • 相比於word2vec,因為golve更容易並行化,所以速度更快,達到67.1%的准確率,只需要花4h12m。

  • 由於GloVe算法本身使用了全局信息,自然內存費的也就多一些,相比之下,word2vec在這方面節省了很多資源

  • performance上差別不大。

    兩個模型在並行化上有一些不同,即GloVe更容易並行化,所以對於較大的訓練數據,GloVe更快。

 

 四、源碼理解:

https://blog.csdn.net/weixin_36711901/article/details/78508798

https://github.com/stanfordnlp/GloVe/tree/master/src

https://zhuanlan.zhihu.com/p/28613493

  

 參考:https://blog.csdn.net/u014665013/article/details/79642083

http://zh.gluon.ai/chapter_natural-language-processing/glove.html

http://www.pengfoo.com/post/machine-learning/2017-04-11

https://www.jianshu.com/p/d0d5a828bcaa

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM