自然語言表示簡史(BERT/ELMO/Word2vec/LDA/Bow/Ohehot,詞向量、句向量、優缺點、應用與解決的問題)

一、自然語言表徵與計算機表示

       自然語言是指一種人類社會中自然地隨文化演化的語言,聰明的人類經過萬年的積累,並通過後天良久的學習才能理解語言的魅力和含義,機械的計算機當然不能如此容易地表達出來。

       要了解自然語言的計算機表示,我們首先從發展、工業落地更加成熟的圖像領域說起,圖像使用非負數的矩陣表示像素點,是低層次的,連續的數據和特徵。圖像的任務,如分類,相似度,目標檢測等,都是具體的,可輕易區分的。

       相比於圖像,自然語言無疑複雜得多。經過萬年發展的語言是人類智慧高度凝結的結晶,語言語義很難通過數據來刻畫。漢語2000多個常用字,2萬多個字,成百上千萬個詞等語言基本單元就很難刻畫,例如"喜歡"和"愛"是近義詞,但是從字面上並不能反映這種信息。更別說複雜的任務:分詞,分類,信息抽取......

        下面簡要介紹下自然語言表示的常用方法。

二、onehot獨熱編碼

       onehot獨熱編碼是一種古老而又現代的編碼方式,它通過給每個字符、詞語或句子分配唯一id表示。這種做法是將要表示的字典中每個單元看成獨立的唯一的單元,可以用正整數表示,不過通常構建字典大小的一維矩陣,設置一個數字爲1,其他的位置全部爲0等。

        舉個例子: "大漠帝國"可以表示爲[0, 0, ,0, 0, 0, 1],或者是一個數字 32

        現在單獨只用one-hot作機器學習、深度學習、強化學習是比較少了的,因爲效果不夠好。不過倒是通常用one-hot作爲唯一標識原始輸入(也就是索index的作用)。

        解決的問題:自然語言文本在計算機的表示,one-hot句子構建的詞袋模型能夠擴充特徵

        應用:索引表示字、詞、句子等

        優點: 簡單可解釋,線性可分

        缺點: 無法表徵編碼單元(比如說字,詞,句子)之間的關係,無法表示詞序關係;

                 只是符號化,一維度單點的數字攜帶的信息和特徵太少;

                 數據量大時會帶來維數災難。

三、傳統統計方法bag of words, tf, idf, tf-idf, bm25

        3.1 TF-IDF

        TF-IDF(英文名: term frequency-inverse document frequency),引用百度百科的說法: TF-IDF是一種用於信息檢索與數據挖掘的常用加權技術。

         TF意思是詞頻(Term Frequency),用在句子構成的語料中,就是字或者詞在文本中出現的頻率。

         IDF意思是逆文本頻率指數(Inverse Document Frequency),就是出現該字或者詞的句子條數。一般計算是: IDF = Log ( 語料中句子總數 / (包含該詞或字的句子數+1) );

         而TF-IDF = TF * IDF。

         解決的問題:劃分詞語重要程度,引入外部語料庫信息(即所謂的先驗概率)

         應用:用於信息檢索與數據挖掘的常用加權技術,關鍵詞,句子相似度等

         優點:實現簡單高效,給出一種表示字詞句子重要性的方法;常見python工具包都會集成

         缺點:詞頻等重合會導致表示衝突,嚴重依賴於語料庫;

                   會偏向於文本中頻率小的詞;

                   不能刻畫出詞序信息;

        3.2  詞袋模型bag of words

        詞袋模型,通俗的說,就是將句子、語料中的詞語都丟到一個袋子裏,構建一個詞語集合-詞頻的一維矩陣,不考慮順序,不考慮重要性,認爲詞語是獨立的。例子sample:

        "我愛帝國, 大漠帝國”; 詞語有 "我", "愛", "帝國", "大漠"

                         “我愛帝國”的句向量爲 [1, 1, 2, 1]

         解決的問題

         應用:可用於信息檢索與數據挖掘的常用加權技術,關鍵詞,句子相似度等

         優點:實現簡單高效,給出一種表示句子一維向量的方法;

         缺點:無法展示不同詞語的重要程度;

                   不能刻畫相似詞語,不能刻畫一詞多義;

                   不能刻畫出詞序信息,維度災難;

四、基於矩陣的統計方法(共現矩陣,NMF, LSI, LDA等主題模型[分解派],Glove)

         這種方法的關鍵在於構建矩陣,基於矩陣的統計方法主要有矩陣分解派(NMF, LSI, LDA等主題模型),以及共現矩陣,降維共現矩陣Glove等。

        4.1  基於統計的共現矩陣方法

         共現矩陣方法主要通過K個窗口的詞語的詞頻構建的向量表示詞向量,具體做法就是構建N*N的矩陣(N爲詞典大小),矩陣中元素填充爲訓練語料中的共現詞語頻次。舉個例子,

         假設有語料: “我喜歡你”, “我愛你”, “我想你”,窗口爲4,構建的共現矩陣如下圖

                                       

          那麼"我"的詞向量可以表示爲: [0, 1, 1, 2, 1, 1]

         解決的問題:簡單解決詞向量不能計算相似度問題

         應用:詞向量,句向量構建

         優點:實現簡單高效,給出一種表示字詞句子一維向量的表示方法

         缺點:嚴重依賴於語料庫;

                   不能刻畫出詞序信息;

                   數據稀疏與維度災難;

         4.2  主題模型(NMF, LSI, LDA)

                首先構建構建N*N的方矩(N爲詞典大小),矩陣中元素填充一般爲訓練語料中的TF-IDF,也可以是詞頻或BM25。

                我們提出的假設是"詞-主題,主題-句子",所以使用主題模型進行降維,得到的權重矩陣W,就是詞語對應的詞向量。

                可以使用NMF矩陣分解方法提取詞向量: V = W * H;也可以使用SVD奇異值分解提取詞向量: A= U * E * V,或者是

        更加複雜的LDA主題模型。

                一般我們會獲取W權重矩陣作爲詞向量模型,例如通常會得到如下結果:

# 權重矩陣
[[1.99561456 0.03769528 0.92768855]
 [2.19064197 0.33915908 1.32014035]
 [3.94014929 0.01328534 0.        ]
 [2.35460586 0.44811399 1.68201657]
 [0.72884099 2.33034829 0.        ]]

             解決的問題:詞向量間隱藏的語義,如"孫悟空"和"唐僧"有關係。

             應用:詞向量,句向量構建,潛在語義與主題

             優點:算法簡潔明瞭可解釋;有嚴謹的假設和證明;使用全局特徵;常見python工具包都會集成

             缺點:嚴重依賴於語料庫;

                       不能刻畫出詞序信息; 

                       計算複雜維度災難;

                       主題個數不好確定;

         

         4.3  相似度與共現矩陣(Glove)

                從某種意義上說,Glove是一種神奇的腦洞,glove是一種生不逢時的詞嵌入方法,爲何如此說呢?1.glove效果與

        word2vec相似,沒有什麼明顯性能提升,但誕生於word2vec後面; 2.glove是一種傳統統計學習方法而沒有使用人工神經

        網絡;3.方法與計算相對複雜,並且沒有什麼好用的官方包,並且常見的python工具包也沒有集成glove。

               glove算法認爲,A的詞向量 / B的詞向量  = Pac / Pbc;統計共現矩陣,共現矩陣爲X,在整個語料庫中,

       Pac爲單詞A和單詞C共同出現在一個窗口中的次數除以語料中單詞A出現的個數;

       同理,Pbc爲單詞B和單詞C共同出現在一個窗口中的次數除以語料中單詞B出現的個數。

       化簡爲 A的詞向量 * B的詞向量 ∝ Freq ab,即 A的詞向量 乘以 B的詞向量 正比於 AB詞出現的詞頻,

       再加上一些偏置項,就是glove了,glove損失函數如下:                                                                          

             解決的問題:詞向量間上下文關係,部分解決詞向量全局關係。

             應用:一般性詞向量,句向量構建,相似度計算,詞嵌入等

             優點:算法簡單直觀,只用了純統計方法,綜合了詞語的全局信息和局部信息等

             缺點:嚴重依賴於語料庫;

                       不能刻畫出詞序信息; 

                       不能解決一詞多義問題;

                       常見python工具包不集成使得訓練麻煩,應用較少;

 

五、基於語言模型的深度學習方法(NNLM、word2vec、Elmo、GPT、BERT)

        5.1  NNLM

               nnlm是2003年bengio等提出的一種神經網絡語言模型,他的主要思想是根據句子中的前N個詞語序列預測下一個

        單詞(這點和現在流行的MLM任務有點類似),採用的是MLP+tanh+softmax模型,其中神經元W便是重要的副產品,

        提供給下游任務的詞向量。

               從某種意義上而言,nnlm是隨着word2vec的興起和熱度而被考古出來的,從其貢獻本身來說或許意義並不是很大。

               nnlm結構圖如下:

                                                      

             解決的問題:學習詞語的分佈式表示(從高維降到低維),詞向量的隱含語義,一段話的句向量表示

             應用:一般性詞向量,句向量構建,相似度計算,詞嵌入等

             優點:使用神經網絡模型訓練詞向量

             缺點:模型優化不夠,輸出的類別較多導致訓練過慢;

                       自迴歸語言模型,無法獲取下文信息;

                       早期方案,應用較少,一般python工具不會集成;

        5.2  word2vec

                word2vec來自2013年google的論文《Efficient Estimation of Word Representations in Vector Space》,是一種淺層神

        經網絡模型,其中cbow模式就是預測連續N個詞與中摳出來那個。例子“我 不 喜歡 帝國 主義 的”,假設滑動窗口是5,那麼 

       可以有用詞袋模型[“我", "不", "喜歡",  ”主義“] 預測  ”帝國“。

       skip-gram模型正好相反,用”帝國“去預測[“我", "不", "喜歡",  ”主義“]。

       word2vec模型結構圖如下:

                                                

             解決的問題:神經網絡訓練詞向量速度慢的問題,

                                   淺層詞語意思抽取(語言模型),

                                   預訓練與下游任務微調問題

             應用:詞向量,句向量構建,詞嵌入,相似度計算等

             優點:算法簡單直觀,只用了淺層神經網絡,

                        優化後訓練速度快,能夠獲取相似詞向量,

                        無論是word2vec還是其變種fastext都很好,很多包支持

             缺點:不能解決一詞多義問題;

                       不能區分和解決同義詞反義詞等深層次語義問題;

        5.3  ELMO

            elmo(deep contextualized word representation),是一種新的深層語境化的詞彙表達方式,即動態變化的詞向量,

        這一點是和之前的靜態詞向量是迥異的。其具體做法是使用biLM語言任務,具體來說就是根據句話中的上下文預測當前

        詞語。例子:

                假設有一句話"中國鬥魚又名叉尾鬥魚,廣泛分佈於華南地區。",elmo就是要預測"魚"這個單詞,那麼就用前向LSTM

        編碼"中國鬥魚又名叉尾鬥",得到編碼h1,後向LSTM編碼",廣泛分佈於華南地區。",得到編碼h2,把h1和h2拼接起來,

        即[h1, h2],去預測"魚"的概率。

                這樣子訓練,大規模語料中的通用信息,就存儲到這個雙層前向後向LSTM中了。

                使用來做字,詞,句子embedding,或者是做下游任務的時候,可以這麼來理解,輸入一個句子,elmo句子中的

        詞語的詞向量受上下文詞語影響,其上下文不同,則當前詞語的詞義不一樣,如此,就能夠解決一詞多義的情況了。

        ELMO網絡結構如下:

                                

             解決的問題:一詞多義問題,

                                   深層次句子語義問題

             應用:詞向量,句向量構建,NLP四大任務等下游任務

             優點:預訓練模型使用通用語料,引入外部語料;

                        使用bilstm特徵抽取器抽取詞語,句子,語義等各層次信息;

                        解決一詞多義問題,序列依賴問題;

             缺點:bilstm抽取特徵能力不夠強,訓練速度慢,不能並行化處理;

                        輸出拼接前向、後向融合特徵的方式不夠好;

                        沒有一個比較好的通用訓練好的中文elmo預訓練模型,也沒有比較好用的工具;

 

        5.3  Bert

                Bert(Pre-training of Deep Bidirectional Transformers for Language Understanding),深層雙向Transformer

        預訓練語言模型,是NNLM、Word2vec、ELMO和GPT等embedding技術的集大成者。

                Bert採用更大規模(幾十G)、更深層次網絡(12,24)訓練通用預訓練模型,其訓練任務有兩個,一個是MLM(masked

        Language Model)遮擋語言模型,而是NSP(Next Sentence Prediction)下一句子預測。

                 應該很好理解,MLM就是用句子中的其他詞語預測被遮擋住的詞語,

                         例子: "我愛語文"這句話,可以把["我", masked, "語", "文"]預測"愛"這個詞。

                 NSP也很好理解,將連續的兩句話拼接起來,用[SEP]間隔開,是連續句子就是True,否則爲False,二分類任務。

                 這些任務,ELMO可以做,CBOW也可以做,不同的是,Bert在輸入時候把token_segnment,position_embedding, 

        segnment_embedding一體化融合;兩階段模型(預訓練,微調);Transformer編碼層作特徵抽取器;使用雙向語言模型等

        BERT網絡結構如下圖:

                                                        

             解決的問題:一詞多義問題;

                                  並行化快速訓練問題;

                                  詞語、句子語義層次問題;

                                  transformer上下文信息獲取;

             應用:詞向量,句向量構建,NLP四大任務等下游任務

             優點:預訓練模型使用通用語料,引入外部語料,便於下游任務微調;

                        使用transformer特徵抽取器抽取詞語,並行化獲取句子,語義等各層次信息;

                        解決一詞多義問題,雙向語言模型;

             缺點:相同句式的詞語語義區分不明顯;

                        訓練、微調時候輸入不一致;

                        多層transformer訓練比較慢,耗時長,需要能耗高;

                        bert維度768,多層transformer網絡參數大,佔用空間,預測比較慢;

                        不大適合生成式任務,對於超長文本不太友好,對於只需要淺層語義的NLP任務不友好;

 

參考/感謝:

詞向量表示方法梳理: https://zhuanlan.zhihu.com/p/46026058

從Word Embedding到Bert模型——自然語言處理預訓練技術發展史:https://mp.weixin.qq.com/s/FHDpx2cYYh9GZsa5nChi4g

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章