詞彙的表示哪些方法?
可以分為以下四類:
基於one-hot、tf-idf等的詞袋模型
基於矩陣分解的主題模型:LSA(SVD)、pLSA、LDA
基於詞向量的固定表徵:word2vec、fastText、glove
基於詞向量的動態表徵:elmo、GPT、bert
怎麼理解詞向量的分布式假設?
最早是 Hinton 於 1986 年提出的,可以克服 one-hot representation 的缺點。其基本想法是:
概念上而言,它是指把一個維數為所有詞的數量的高維空間嵌入到一個維數低得多的連續向量空間中,每個單詞或詞組被映射為實數域上的向量,向量的每一維度都沒有實際意義,而整體代表一個具體概念。
訓練邏輯:相同上下文語境的詞有似含義,也就是有相似的向量。
應用:所有這些向量放在一起形成一個詞向量空間,而每一向量則為該空間中的一個點,在這個空間上引入「距離」,則可以根據詞之間的距離來判斷它們之間的(詞法、語義上的)相似性了。
獨熱表示以及分布式表示的各種詞向量的特點是什麼?
獨熱表示 :維度災難、語義鴻溝;
分布式表示 (distributed representation) :
矩陣分解(LSA):利用全局語料特徵,但SVD求解計算複雜度大;
基於NNLM/RNNLM的詞向量:詞向量為副產物,存在效率不高等問題;
word2vec、fastText:優化效率高,但是基於局部語料;
glove:基於全局預料,結合了LSA和word2vec的優點;
elmo、GPT、bert:結合動態上下文
NNLM指什麼?
屬於早期語言模型及詞向量的研究,其主要目的是語言模型,輸入上文,預測當前單詞,而詞向量只是一個副產物,但後來的word2vec模型是受NNLM啟發,即利用語言模型任務來訓練詞向量。
word2vec的兩種模型分別是什麼?
CBOW 和 Skip-Gram;
CBOW 在已知上下文的情況下,預測中心詞;Skip-Gram在已知中心詞的情況下預測上下文。
word2vec和NNLM的異同點是什麼?
相同點:本質上都是以語言模型為任務訓練模型。
不同點:NNLM主要是以語言模型為任務,詞向量只不過是一個副產物,而word2vec雖然其本質也是語言模型,但是其最終的目的在於詞向量本身,因此做了許多優化來提高計算效率。
考慮到sofmax歸一化需要遍歷整個詞彙表,當語料庫規模變大、詞彙表增長時,計算開銷不切實際,採用hierarchical softmax 和negative sampling進行優化,hierarchical softmax 實質上生成一顆帶權路徑最小的哈夫曼樹,讓高頻詞搜索路徑變小;negative sampling更為直接,實質上是將一個多分類問題轉化為二分類問題。
Skip-gram 模型針對參數量過大,難以訓練,提出的優化方案有哪些?
Skip-Gram中如何採樣負樣本?
根據頻率相關的一個經驗公式進行採樣,頻率越高,採樣到的可能性越大,一個詞在整篇文本中出現的頻率越高,它出現在訓練詞周圍的概率自然也相對較高,那它就是很好的幹擾項,即噪聲。
傳統的詞向量有什麼缺點?
傳統方式得到的詞向量是固定表徵的,無法解決一詞多義或者說上下文語境的問題。為此引入基於語言模型的動態表徵方法:elmo、GPT、bert。
詞向量訓練中的OOV問題如何解決?
字符級表示或sub-word表示,如CharCNN、FastText和 Byte-Pair Encoding。
ELMO的原理是什麼?
基本思想是根據輸入的句子作為上下文,來具體計算每個詞在上下文中的表徵,在具體的訓練中,基於雙向雙層lstm作為模型,語言模型為任務。
在訓練完ELMO之後,如何應用於下遊任務?
在訓練完biLM後,假設biLM有L層,則對於每一個詞彙,總共會有2L+1個輸出向量,因為每一層LSTM都會有前向和後向兩個向量輸出,而每個詞彙自己有embedding層的向量,因此總共是2L+1個。可以對這些層進行加權相加,或者只取某些層作為詞彙的表徵,再接入下遊任務對應的模型結構中。
fastText的特點是什麼?
fastText訓練詞向量時會考慮subword;
結構與CBOW類似,但學習目標是人工標註的文本分類結果;
採用hierarchical softmax對輸出的分類標籤建立哈夫曼樹,樣本中標籤多的類別被分配短的搜尋路徑
glove的特點是什麼?
Global Vector融合了矩陣分解Latent Semantic Analysis (LSA)的全局統計信息和local context window優勢。融入全局的先驗統計信息,可以加快模型的訓練速度,又可以控制詞的相對權重。
與LSA的聯繫:
LSA(Latent Semantic Analysis)可以基於co-occurance matrix構建詞向量,實質上是基於全局語料採用SVD進行矩陣分解,然而SVD計算複雜度高;glove可看作是對LSA一種優化的高效矩陣分解算法,採用Adagrad對最小平方損失進行優化;
與word2vec的聯繫:
word2vec應用局部語料庫進行訓練,基於滑窗進行特徵提取;而glove的滑窗是為了構建co-occurance matrix,基於全局語料,可見glove需要事先統計共現概率;因此,word2vec可以進行在線學習,glove則需要統計固定語料信息。word2vec是無監督學習,同樣由於不需要人工標註;glove通常被認為是無監督學習,但實際上glove還是有label的,即共現次數。word2vec損失函數實質上是帶權重的交叉熵,權重固定;glove的損失函數是最小平方損失函數,權重可以做映射變換。
總體來看,glove可以被看作是更換了目標函數和權重函數的全局word2vec。
參考:
https://blog.csdn.net/u014665013/article/details/79642083
https://blog.csdn.net/u014665013/article/details/79642083
首先根據語料庫去構建一個co-ocurrence matrix共現矩陣,其中每一個元素代表單詞和上下文詞在特定的上下文窗口內共同出現的次數,並且GloVe還提出了一個 decreasing weighting ,就是基於兩個詞在上下文窗口中的距離d,去給一個權重1/d,也就是說距離遠的兩個詞,佔總計數的權重就小;構建詞向量和共現矩陣之間的近似關係。
如何理解elmo、GPT、bert中的單/雙向語言模型?
GPT採用單向語言模型,elmo和bert採用雙向語言模型。
但是,實際上elmo是兩個單向語言模型(方向相反)的拼接,這種融合特徵的能力比bert基於mask方式進行一體化融合特徵方式弱,並非真正的同時的「雙向」。
GPT和bert都採用Transformer,Transformer是encoder-decoder結構,GPT的單向語言模型採用decoder部分,decoder的部分見到的都是不完整的句子,訓練後的模型針對文本生成任務;bert的雙向語言模型則採用encoder部分,採用了完整句子,訓練後的模型擅長做特徵提取及語義表徵工作。
bert的主要創新點是什麼?
在pre-train方法上,用了Masked LM和Next Sentence Prediction兩種方法分別捕捉詞語和句子級別的representation。
預訓練和finetuning之間不匹配,bert如何解決?
bert並不總是用實際的[MASK]token替換被「masked」的詞彙。相反,訓練數據生成器隨機選擇15%的token。例如在這個句子「my dog is hairy」中,它選擇的token是「hairy」。然後,執行以下過程:
數據生成器將執行以下操作,而不是始終用[MASK]替換所選單詞:
80%的時間:用[MASK]標記替換單詞,例如,my dog is hairy → my dog is [MASK]
10%的時間:用一個隨機的單詞替換該單詞,例如,my dog is hairy → my dog is apple
10%的時間:保持單詞不變,例如,my dog is hairy → my dog is hairy. 這樣做的目的是將表示偏向於實際觀察到的單詞。
Transformer encoder不知道它將被要求預測哪些單詞或哪些單詞已被隨機單詞替換,因此它被迫保持每個輸入token的分布式上下文表示。此外,因為隨機替換隻發生在所有token的1.5%(即15%的10%),這樣便不會損害模型的語言理解能力。
bert有什麼缺陷?
mask的位置獨立;
mask標誌存在train-finetune差異;
NSP的設計過於簡單;
生成任務表現不佳:預訓練過程和生成過程的不一致,導致在生成任務上效果不佳;
無法文檔級別的NLP任務,只適合於句子和段落級別的任務。
預訓練語言模型未來更多的探索方向是什麼?
復興語言模型:進一步改進語言模型目標,不斷突破模型的上界;
大數據、大算力:將大數據、大算力推到極致;
更快的推斷:輕量級模型是否有可能達到SOTA效果?
引入更豐富的知識信息,更精細的調參,更有價值的MASK策略;
統一條件生成任務框架,如基於XLNet統一編碼和解碼任務,同時可考慮更快的解碼方式。
由於微信平臺算法改版,公號內容將不再以時間排序展示,如果大家想第一時間看到我們的推送,強烈建議星標我們和給我們多點點【在看】。星標具體步驟為:
(1)點擊頁面最上方"AINLP",進入公眾號主頁。
(2)點擊右上角的小點點,在彈出頁面點擊「設為星標」,就可以啦。
感謝支持,比心。
進群請添加AINLP小助手微信 AINLPer(id: ainlper),備註NLP技術交流推薦閱讀
這個NLP工具,玩得根本停不下來
徵稿啟示| 200元稿費+5000DBC(價值20個小時GPU算力)
完結撒花!李宏毅老師深度學習與人類語言處理課程視頻及課件(附下載)
從數據到模型,你可能需要1篇詳實的pytorch踩坑指南
如何讓Bert在finetune小數據集時更「穩」一點
模型壓縮實踐系列之——bert-of-theseus,一個非常親民的bert壓縮方法
文本自動摘要任務的「不完全」心得總結番外篇——submodular函數優化
Node2Vec 論文+代碼筆記
模型壓縮實踐收尾篇——模型蒸餾以及其他一些技巧實踐小結
中文命名實體識別工具(NER)哪家強?
學自然語言處理,其實更應該學好英語
史丹福大學NLP組Python深度學習自然語言處理工具Stanza試用
關於AINLP
AINLP 是一個有趣有AI的自然語言處理社區,專注於 AI、NLP、機器學習、深度學習、推薦算法等相關技術的分享,主題包括文本摘要、智能問答、聊天機器人、機器翻譯、自動生成、知識圖譜、預訓練模型、推薦系統、計算廣告、招聘信息、求職經驗分享等,歡迎關注!加技術交流群請添加AINLPer(id:ainlper),備註工作/研究方向+加群目的。
閱讀至此了,分享、點讚、在看三選一吧🙏