[自然語言處理-入門]二、基礎語言模型

學習路線參考:

https://blog.51cto.com/u_15298598/3121189

https://github.com/Ailln/nlp-roadmap

https://juejin.cn/post/7113066539053482021

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

https://cloud.tencent.com/developer/article/1884740

本節(jié)學習使用工具&閱讀文章:

https://blog.csdn.net/u012328159/article/details/84719494

https://blog.csdn.net/xixiaoyaoww/article/details/105459590

https://medium.com/programming-with-data/11-%E8%A9%9E%E8%A2%8B%E6%A8%A1%E5%9E%8B-bag-of-words-34f5493902b4

https://towardsdatascience.com/different-techniques-to-represent-words-as-vectors-word-embeddings-3e4b9ab7ceb4

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

http://bourneli.github.io/recommendation/word2vector/nlp/embedding/2019/10/20/recommend03-word-to-vector.html

https://blog.csdn.net/keeppractice/article/details/106177554

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

  1. 詞袋模型(BOW)

    1. one-hot

      詞袋模型能夠把一個句子轉化為向量表示,是比較簡單直白的一種方法,它不考慮句子中單詞的順序,只考慮詞表中單詞在這個句子中的出現(xiàn)次數(shù)。設詞典的大小為n(詞典中有n個詞),假如某個詞在詞典中的位置為k,則設立一個n維向量,第k維置1,其余維全都置0。這個思想就是one-hot編碼,中文叫獨熱編碼。

      • 優(yōu)點:直觀,容易操作,不需要任何與訓練模型
      • 缺點:無法表達前后語意關系,無法呈現(xiàn)單字的含義,形成稀疏矩陣,不利于模型訓練
    2. TF-IDF

      TF(w)={單詞w在文章中出現(xiàn)的次數(shù)\over文章的單詞總數(shù)},表示詞頻,考慮到文章有長短之分,為了便于不同文章的比較,進行"詞頻"標準化。

      IDF(w)=log({語料庫中文檔的總數(shù)\over包含詞w的文檔數(shù)+1}),加1是為了防止分母為0。用來模擬語言的使用環(huán)境,如果一個詞越常見,那么分母就越大,逆文檔頻率就越小越接近0。它的大小與一個詞的常見程度成反比。

      TF-IDF(w)=TF(w)*IDF(w)

      • 優(yōu)點:直觀,可以凸顯單個詞的重要性

      • 缺點:無法表達前后語義關系,很少見的偏僻詞容易被賦予過大的idf權重,idf在文檔集合中進行計算,但是文檔集合的內(nèi)部存在不同類分布不均衡的情況

  1. word2vector

    為了解決詞袋模型的通?。簾o法表達上下文關系,可以使用Word2vector模型。Word2Vector的主要作用是將語料中的單詞映射到一個固定低維度的稠密向量空間中,使得相近的詞(如orange和fruit,就比orange和house要近)在這個空間中的距離較近。由于詞之間具有距離相似性,可以用來做聚類,分類,統(tǒng)計分析,可視化,所以word2vector屬于一種預訓練技術。

    1. CBOW & skip-gram

      CBOW:將一個詞所在的上下文中的詞作為輸入,而那個詞本身作為輸出。

      skip-gram:將一個詞所在的上下文中的詞作為輸出,而詞本身作為輸入。

      可以看作是一個將高維空間映射到低維空間的過程,用一個單層神經(jīng)網(wǎng)絡就可以實現(xiàn)這種功能。以下主要在Skip-Gram的形式下介紹相關原理。

      1. Skip-Gram的具體做法

        在語料中任意找到一個詞,然后預測其周圍詞的概率,相鄰范圍由Window Size設定,下面取Window Size=2為例:

        樣本生成過程

        有了這些樣本后,需要構建一個函數(shù),接收詞的One Hot編碼,輸出所有的詞的概率p,如下:

        網(wǎng)絡層結構

        只有一個隱藏層,然后接一個Softmax層,將輸出歸一化為概率,詞向量就是中間這個隱藏層的參數(shù)。

      2. 模型細節(jié)

        假設從訓練文檔中抽取出n個唯一不重復的單詞組成詞匯表。對這n個單詞進行one-hot編碼,得到的每個單詞都是一個n維的向量。此時,輸出也是一個n維度(詞匯表的大?。┑南蛄?,它包含了n個概率,每一個概率代表著當前詞是輸入樣本中output word的概率大小。

        我們基于成對的單詞來對神經(jīng)網(wǎng)絡進行訓練,訓練樣本是 ( input word, output word ) 這樣的單詞對,input word和output word都是one-hot編碼的向量,最終模型的輸出是一個概率分布。

      3. 隱藏層

        如果我們現(xiàn)在想用m個特征來表示一個單詞,那么隱層有m個結點,權重矩陣尺寸為n*m。

        word2vec_weight_matrix_lookup_table.png

        左右兩張圖分別從不同角度代表了輸入層-隱層的權重矩陣。左圖中每一列代表一個n維的詞向量和隱層單個神經(jīng)元連接的權重向量。從右邊的圖來看,每一行實際上代表了每個單詞的詞向量。

    2. word2vector的優(yōu)化

      1. 詞匯表過大導致計算維度過大

        使用Hierarchical Softmax方法,構建一棵Huffman樹,每個單詞都能通過從根節(jié)點開始的唯一一條路徑進行表示。這棵Huffman樹的權重則來源于每個單詞出現(xiàn)的頻率,根據(jù)每個單詞的出現(xiàn)頻率即可構建出Huffman樹。

        此時在word2vec中就轉化為分層二分類邏輯斯蒂回歸,從根節(jié)點出發(fā),分為負類則向左子樹走,分為正類則向右子樹走,分類的依據(jù)來源于每個非葉子節(jié)點上所帶有的內(nèi)部節(jié)點向量。

        訓練依然使用基于梯度的方式,如SGD進行更新。

      2. 每次迭代的過程中都需要更新大量向量

        使用負采樣(Negative Sampling)方法。訓練需要正負樣本輸入的,正樣本(輸出的上下文單詞)當然需要保留下來,而負樣本(不對的樣本)同樣需要采集,但是肯定不能是詞庫里面的所有其他詞,因此我們需要采樣,這個采樣被就是所謂的Negative Sampling。

      3. 頻繁詞欠采樣

        包含部分頻繁詞(例如the)這類樣本意義不是特別大,所以需要將這類樣本從整體的訓練樣本中剔除。Word2Vector通過給每個詞設定一個概率來隨機剔除這個詞,這個詞的概率與詞的頻率有關:P(w_i)=1-\sqrt{t\over f(w_i)}

        其中f(w_i)表示詞w_i的頻率,t是詞頻的閾值,大于這個閾值的詞需要欠采樣,原始論文中給的值是10^{-5}。

      4. 隨機窗口尺寸

        通過隨機減少上下文窗口長度來實現(xiàn):對較近的詞給予較高權重,同時減少訓練樣量,提升計算效率。比如上下文窗口window_size=5,那么每次計算樣本時,隨機在window_size=1到5之前選取,通過這種方法,較近詞被選取的權重高,較遠詞被選取的權重低,示意圖如下:

        隨機窗口尺寸
  1. LSA

    該方法對term-document矩陣(矩陣的每個元素為tf-idf)進行奇異值分解,從而得到term的向量表示和document的向量表示。此處使用的tf-idf主要還是term的全局統(tǒng)計特征。

  1. Glove(Global Vector for Word)

    GloVe模型結合了word2vec和LSA的特點,同時使用了語料庫的全局統(tǒng)計特征,也使用了局部的上下文特征。首先基于語料庫構建詞的共現(xiàn)矩陣,然后基于共現(xiàn)矩陣和GloVe模型學習詞向量。

    1. 統(tǒng)計共現(xiàn)矩陣

      設共現(xiàn)矩陣為X,其元素為X_{i , j} 的意義為:在整個語料庫中,單詞i和單詞j共同出現(xiàn)在一個窗口中的次數(shù)。

    2. GloVe模型

      使用的代價函數(shù):J=\sum^N_{i,j}f(X_{i,j})(v_i^Tv_j+b_i+b_j-log(X_{i,j}))^2

      • v_i,v_j:單詞i和單詞j的詞向量
      • b_i,b_j:偏差項
      • f:權重項,f(x)=\begin{cases}(x/xmax)^{0.75}, if~x<xmax\\1,if~x>=xmax\end{cases}
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容