NLP中各种各样的编码器
點擊上方“AI公園”,關注公眾號,選擇加“星標“或“置頂”
作者:Pratik Bhavsar
編譯:ronghuaiyang
導讀
掌握文本數據的特征工程。
對文本進行編碼理解語言的核心。如果我們知道如何用小向量表示單詞、句子和段落,那么我們所有的問題都解決了!
在壓縮向量中使用一個泛化模型來對文本進行語義表示是NLP的終極目標 ????
對文本進行編碼是什么意思?
當我們將一個可變長度的文本編碼成一個固定長度的向量時,我們實際上是在做特征工程。如果我們使用語言模型或嵌入模塊,我們也在進行降維。
正如我在之前的一篇關于遷移學習的文章中所討論的,有兩種建模方法 — 微調和特征提取。在這篇文章中,我將討論用深度學習來編碼文本(特征提取)的各種方法,這些方法可以用于后續的任務。你可以在這篇文章中看到特征提取方法的優點。
假設你有這樣一句話:“我喜歡去海灘旅行。”你正在做一個分類項目。如果你的詞匯量很大,就很難訓練分類器。當你使用TF-IDF得到每個單詞的稀疏向量時,就會發生這種情況。
使用像GloVe這樣的嵌入工具,你可以得到一個密集的100維的向量。但是像GloVe這樣的模型的問題是它不能處理OOV(詞匯表之外的)單詞,也不能處理一詞多義 —— 根據上下文,一個單詞有很多可能的含義。
因此,最好的方法是使用像ELMo這樣的模型或使用USE(通用語句編碼器)來編碼單詞。這些模型在字符級別上工作,可以處理多義現象。這意味著它們可以處理沒有見過的單詞,而我們得到的每個單詞/句子的向量將封裝其含義。
一旦我們有了單詞/句子的固定向量,我們就可以用它做任何事情。這就是特征提取方法的內容。只創建一次特征,然后執行任何下游任務。我們可以嘗試不同的分類模型并對它們進行微調。我們還可以創建語法探索或推薦引擎。
現在,真正的問題是對文本進行編碼有哪些不同的模型可用?是否存在一個適用于所有事情的模型,還是模型都是依賴于任務的?
下游和語法探索任務中對句子嵌入的評估
當我讀這篇文章的時候,它為我打開了潘多拉的盒子。理想情況下,我們需要一個嵌入模型,它能給我們最小的嵌入向量,并能很好地完成任務。嵌入尺寸越小,訓練和推理所需的計算量就越小。
正如你所看到的,嵌入的尺寸會有很大的變化 —— 從300到4800不等。作為基礎,向量尺寸越大,它可以包含更多的信息!但這是真的嗎?讓我們看看他們是如何執行任務的。
不同的嵌入模型及其向量尺寸分類任務
作者嘗試了如下所示的不同分類任務來了解這些模型的性能。在語法探索任務中,MLP與50個神經元組成的單一隱含層一起使用,沒有添加dropout,使用批量大小為64的Adam optimizer。
(對于單詞上下文(WC)探測任務,其中使用了邏輯回歸,因為它始終提供更好的結果)
分類任務從結果中我們可以看到,不同的ELMo嵌入對于分類任務執行得非常好。USE和InferSent也在一些任務的頂部。最好和次好之間的差距大約是2%。Word2Vec和GloVe并沒有像預期那樣在任何任務中名列前茅,但它們的表現也在3%范圍內。
需要注意的是,ELMo的向量大小為1024,USE為512,InferSent為4096。所以如果有人要把一個系統投入生產,他的第一選擇是USE,然后可能是ELMo。
分類任務的結果語義相關的任務
然后他們嘗試了使用嵌入來處理語義關聯和文本相似性的任務。這次使用(Transformer)模型顯然是贏家。如果我們忽略了InferSent,它的嵌入比USE大8倍,USE遠遠領先于其他。
這為語義探索和相似問題類任務上提供了明確的選擇。
順便問一下,我們什么時候使用USE(DAN)和USE(Transformer)?USE(DAN)的性能是O(n),USE(Transformer)是O (n2),n是文本長度。所以,如果你正在處理長文本,你可能想要USE(DAN)。
語法探索任務
接下來,他們展示了由一些深奧任務組成的語法探索任務的結果。在這種情況下,ELMo似乎統治了世界!
BShift (bi-gram shift)任務 — 目標是識別句子中的兩個連續的tokens是否被倒轉了,比如“This is my Eve Christmas”
ELMo和非ELMo模型之間的差異非常大。
信息檢索任務
在圖像標題檢索任務中,每個圖像和語言特征都要進行聯合評估,其目標是對給定標題的圖像集合進行排序(圖像檢索任務 — text2image)或對給定圖像的標題進行排序(標題檢索 — image2text)。InferSent是一個明顯的贏家。第二名是ELMo。
哪里都有ELMo ????
通用句子編碼
正如我們所看到的,USE是一個很好的生產級模型,我們來討論一下。我不會談論ELMo,因為已經有很多關于它的文章了。
有兩種類型可供使用
Transformer
DAN(Deep Averaging Network)
編碼器采用小寫的PTB tokens字符串作為輸入,輸出512維向量作為句子嵌入。這兩種編碼模型都被設計成盡可能通用的。這是通過使用多任務學習來實現的,其中一個編碼模型用于滿足多個下游任務。
USE(Transformer)
這使用了transformer架構,它為每個token創建上下文感知的表示。語句嵌入是通過添加所有tokens的元素創建的。
USE(DAN)
這是一個有爭議的建模方法,因為它不考慮單詞的順序。首先將GloVe嵌入的詞在一起做平均,然后通過前饋深度神經網絡產生句子嵌入。
該模型利用深度網絡來放大詞嵌入中的細微差別,這些差別可能來自一個詞,比如good/bad。大多數時候它表現得很好,但是實驗表明它在雙重否定下失敗了,比如“not bad”,因為這個模型把“not”和消極情緒聯系在一起。看一下最后一個例子。
這使得(DAN)成為一個將新聞文章分類的好模型,但是在情感分類問題中,像“not”這樣的詞可能會改變意思。
你可以從上下文中學到些什么?
像DAN這樣的模型和transformer一樣好,這一事實提出了一個問題 —— 我們的模型是否關心詞的順序,并且順序是否像我們認為的那樣重要?
讓我們討論一下我們從上下文中學到了什么?在本文中,作者試圖了解這些上下文表示在哪些方面優于傳統的詞嵌入。
用來驗證的任務
作者介紹了一套“邊緣探測”任務,用于探測上下文化的詞嵌入的子句結構。這些任務來源于核心的NLP任務,包含了一系列的語法和語義現象。
他們使用這些任務來探索上下文嵌入如何改進他們的詞(上下文無關)基線。他們主要關注上下文化的單詞嵌入的四個最新方法 —CoVe, ELMo, OpenAI GPT, 和BERT。
ELMo、CoVe和GPT都遵循類似的趨勢(表2),顯示出在被認為主要是語法上的任務(如依賴性和成分標記)上獲得的收益最大,而在被認為需要更多語義推理的任務(如SPR和Winograd)上獲得的收益較小。
句子中有多少信息是通過長距離傳送的(幾個tokens或更多)?
為了估計長距離傳輸的信息(幾個tokens或多個tokens),作者使用卷積層擴展了詞法基線,允許探測分類器使用本地上下文。如圖2所示,添加寬度為3(±1 token)的CNN,可以縮小詞法基線與完整ELMo之間的差距72%(平均任務),如果我們使用寬度為5(±2 tokens)的CNN,則可以擴展到79%。
這表明,雖然ELMo沒有有效地對這些現象進行編碼,但它所帶來的改進主要是由于長距離的信息。
CNN模型和標準正交編碼器在鄰近跨距時表現最佳,但隨著tokens距離的增加,其性能迅速下降。(該模型只能訪問給定范圍內的嵌入,如謂詞 — 對,并且必須預測屬性,如語義角色,這通常需要整個句子的上下文。)
完整的ELMo模型表現得更好,在d=0和d=8之間,性能只下降了7個F1點,這表明預訓練的編碼器確實對USE的遠程依賴進行了編碼。
論文中的發現
首先,總的來說,與語義任務(例如,共同參考)相比,上下文化嵌入在語法任務(例如,成分標注)方面比非上下文化嵌入在語義任務(例如,指代關系)方面有很大的改進,這表明這些嵌入在語法編碼方面比高級語義做得更好。
其次,ELMo的性能不能完全由一個訪問本地上下文的模型來解釋,這表明上下文化的表示確實編碼了遠距離的語言信息,這有助于消除長范圍依賴關系和高級語法結構的歧義。
這是一個簡單卻難以克服的句子嵌入基線
既然我們知道上下文模型是可以打敗的,那么有什么簡單的技巧可以打敗它呢?
如果DAN證明平均詞嵌入就可以得到很好的結果,如果我們可以找到一個智能的權重方案呢!本文介紹了如何將句子表示為加權平均,然后使用PCA/SVD進一步細化嵌入。
他們是這樣寫的:
“我們修改了這個理論模型,出于經驗觀察,大多數詞嵌入方法,因為他們使用向量內積試圖捕捉詞的同現概率,最后給頻繁的單詞大的向量,并給了不必要的單詞對大的內積,這樣只是為了擬合偶爾出現在文檔中的斷章取義的話。
這些異常導致詞向量的平均值在沿著語義上無意義的方向上有巨大的分量。我們對(Arora et al., 2016)的生成模型進行了修改,使用“平滑”術語,然后通過最大似然計算得到SIF的權重調整。
其中,以a為參數,**w = a/(a + p(w))**的權重,p(w)(估計值)的詞頻,他們稱之為 — 平滑逆頻率(SIF)。
利用這些權重,他們計算加權平均值,然后去掉平均向量對第一個奇異向量的投影(“共同分量去除”)。
論文中有趣的一句話 — “簡單的RNNs可以被看作是解析樹被簡單的線性鏈所取代的特殊情況。”
SIF權值調整
這是計算SIF嵌入的方法:
計算語料庫中所有單詞的頻率。
然后,給定一個超參數a,通常設置為1e-3,和一組預先訓練的詞嵌入,在每個文本/句子上計算加權平均值。
最后,使用SVD從這些平均值中刪除第一個分量,并獲得新的語句嵌入。刪除第一個分量就像刪除了最常見的信息,因為它捕獲了關于平均嵌入的最大信息。
我的理解是,刪除第一個分量就像從壓縮向量中刪除“均值”!我們剩下的是有關這個詞的獨特特征而不是完整的信息????
結果是驚人的,他們擊敗了復雜的方法,如DAN和LSTM。????
下面是相同的結果。
他們的貢獻
對于GloVe向量,單獨使用平滑逆頻率加權比未加權平均提高約5%,單獨使用共分量去除提高10%,同時使用兩者提高13%。
Sentence-BERT: 使用Siamese BERT-Networks的句子嵌入
最先進的是什么? ????
在這篇文章中,作者報告說我們正在做語義搜索,在10,000個句子中找到最相似的對需要BERT進行大約5000萬個推理計算(約65小時)。BERT的構造使得它既不適合語義相似度搜索,也不適合非監督任務,比如聚類。
在一個包含n = 10,000個句子的集合中,找到與BERT n·(n?1)/2 = 49,995,000個推理計算相似度最高的一對句子。
Sentence-BERT (SBERT)是預訓練的BERT網絡的一個修改,它使用siamese和triplet網絡結構派生出語義上有意義的句子嵌入,可以使用余弦相似度進行比較。
這減少了尋找最相似的配對的努力,從使用BERT / RoBERTa的65小時減少到使用SBERT的5秒,同時保持了BERT的準確性。
This reduces the effort for finding the most similar pair from 65 hours with BERT / RoBERTa to about 5 seconds with SBERT, while maintaining the accuracy from BERT.
主要思想
與其在模型中運行所有的A-B對并得到一個分數,不如訓練一個模型來對相似的句子生成相似的嵌入。使用這種方法,一旦為適當的任務訓練了一個模型,我們就可以為每個句子創建一次嵌入。
每次我們得到一個查詢,我們使用余弦距離計算查詢與所有其他預計算的句子嵌入的相似度,這是線性時間,使用比如FAISS之類的庫可以計算的很快。
為了做出好的編碼器,他們訓練了一個有固定權重的雙編碼器 — 一個siamese network!
結果達到了一種新的state of the art,除了SICK-R之外,在某些數據集上獲得了相當大的收益。
詞向量集合的關系
這篇論文發表于2019年10月。本文研究了統計相關系數在詞向量集上的應用,作為計算語義文本相似度的一種方法。令人驚訝的是,USE顯示比BERT更高的統計相關性。
此外,與皮爾遜相關進行比較,向量的最大和最小池化要比均值池化效果好。
這是否意味著USE更適合語義搜索? ????
在STS任務上的均值皮爾遜系數BERT, ELMo, USE and InferSent Sentence Encoders: 研究推薦論文的萬靈藥?
到目前為止,我們一直在比較傳統機器學習和深度學習。但如果我們能同時利用這兩者呢!????
在大型語料庫中使用語句嵌入在生產推薦系統中似乎不太可行,因為需要在幾秒鐘或更少的時間內返回推薦。
作者報告說BM25查詢花費大約5毫秒來檢索多達100個結果。通過不同的模型計算嵌入和重排20、50和100個標題所花費的額外時間如下所示。USE (DAN)是最快的,重新排序20或50個標題需要0.02秒,重新排序100個標題需要0.03秒。
你可以看到USE(DAN)超級快!
重排時間以毫秒計算最后,BERT和SciBERT使用BERT-as-server是重排序100個標題最慢的,大約需要4.0秒。這意味著它們不能用于實時重排序推薦,除非提供更高的計算資源(如GPU或TPU)。
最佳的方法
使用Apache Lucene的BM25檢索前得到20、50或100個推薦候選項的列表。
獲取top-k的句子嵌入,使用查詢嵌入計算余弦相似度評分。
將標準化后的BM25的初始得分與句子嵌入的語義相似度得分進行線性組合,將得分相加(將統一的權重設置為0.5),生成最終的排序推薦。
總結
我寫這篇文章的主要原因是為了闡明如何為我們的問題選擇一個現有的模型。我們有各種各樣的模型、方法和任務。毫無疑問地選擇一個模型會導致過度工程化,而像USE(DAN)這樣的簡單模型可以解決這個問題。有時一個CNN可以解決ELMo的問題。
—END—
英文原文:https://medium.com/modern-nlp/on-variety-of-encoding-text-8b7623969d1e
請長按或掃描二維碼關注本公眾號
喜歡的話,請給我個好看吧!
總結
以上是生活随笔為你收集整理的NLP中各种各样的编码器的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么在电脑上玩赛尔号星球大战手游 赛尔号
- 下一篇: (转) 何为机器学习