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