本文是一篇對于當(dāng)今最先進(jìn)的通用詞/句嵌入技術(shù)的簡介,,包括對比基線: FastText,、詞袋模型(Bag-of-Words);以及最先進(jìn)的模型:ELMo,、Skip-Thoughts,、Quick-Thoughts、InferSent,、MILA 研究組和微軟研究院提出的通用句子表征,,以及谷歌的通用句子編碼器。
詞語和句子的嵌入已經(jīng)成為了任何基于深度學(xué)習(xí)的自然語言處理系統(tǒng)必備的組成部分,。
它們將詞語和句子編碼成稠密的定長向量,,從而大大地提升通過神經(jīng)網(wǎng)絡(luò)處理文本數(shù)據(jù)的能力。
當(dāng)前主要的研究趨勢是追求一種通用的嵌入技術(shù):在大型語料庫中預(yù)訓(xùn)練的嵌入,,它能夠被添加到各種各樣下游的任務(wù)模型中(情感分析,、分類、翻譯等),,從而通過引入一些從大型數(shù)據(jù)集中學(xué)習(xí)到的通用單詞或句子的表征來自動地提升它們的性能,。
它是遷移學(xué)習(xí)的一種體現(xiàn)形式。
盡管在相當(dāng)長的一段時間內(nèi),,對句子的無監(jiān)督表示學(xué)習(xí)已經(jīng)成為了一種行業(yè)規(guī)范,。但在最近的幾個月里,人們開始逐漸轉(zhuǎn)向監(jiān)督學(xué)習(xí)和多任務(wù)學(xué)習(xí),,并且在 2017 年底/2018 年初提出了一些非常有趣的方案,。
近期的通用詞/句嵌入的趨勢:在本文中,作者將介紹上圖中用黑體表示的模型。
因此,,本文是一篇對于當(dāng)今最先進(jìn)的通用詞/句嵌入技術(shù)的簡介,,詳細(xì)討論了以下模型:
強(qiáng)大、快速的對比基線: FastText,、詞袋模型(Bag-of-Words)
最先進(jìn)的模型:ELMo,、Skip-Thoughts、Quick-Thoughts,、InferSent,、MILA 研究組和微軟研究院提出的通用句子表征,,以及谷歌的通用句子編碼器,。
讓我們從詞嵌入開始娓娓道來。
最近的詞嵌入研究進(jìn)展
在過去的五年中,,人們提出了大量可行的詞嵌入方法,。目前最常用的模型是 word2vec 和 GloVe,它們都是基于分布假設(shè)(在相同的上下文中出現(xiàn)的單詞往往具有相似的含義)的無監(jiān)督學(xué)習(xí)方法,。
盡管此后有一些研究(https://arxiv.org/abs/1805.04032)通過引入語義或者句法的監(jiān)督信息來增強(qiáng)這些無監(jiān)督方法,,但是純粹的無監(jiān)督學(xué)習(xí)方法在 2017 年到 2018 年得到了令人關(guān)注的提升,最著名的是「FastText」(word2vec 的一種拓展)以及「ELMo」(目前最先進(jìn)的基于上下文的詞嵌入技術(shù)),。
FastText 由 Tomas Mikolov 的團(tuán)隊提出,,他曾在 2013 年提出了著名的 word2vec 框架,引發(fā)了通用詞嵌入技術(shù)的研究浪潮,。
FastText 相對于原始的 word2vec 向量最主要的提升是它引入了 n 元字符(n-gram),,這使得對沒有在訓(xùn)練數(shù)據(jù)中出現(xiàn)的單詞(詞匯表外的單詞)計算單詞的表征成為了可能。
FastText 向量的訓(xùn)練速度非???,并且可以在 GitHub 上獲取通過「Wikipedia」和「Common Crawl」數(shù)據(jù)集上預(yù)訓(xùn)練好的版本。它們是非常棒的對比基線,。
深度上下文單詞表征(ELMo)在很大的程度上提高了目前最先進(jìn)的詞嵌入模型的性能,。它們由 Allen 人工智能研究所研發(fā),并將在 6 月初的 NAACL 2018(https://arxiv.org/abs/1802.05365)中展示,。
ELMo 能感知到豐富的單詞的上下文知識
ELMo 模型會為每一個單詞分配一個表征,,該表征是它們所屬的整個語料庫中的句子的一個函數(shù)。詞嵌入將從一個兩層的雙向語言模型(LM)的內(nèi)部狀態(tài)中計算出來,,因此該模型被命名為「ELMo」: Embeddings from Language Models(E 代表「嵌入」,,LM 代表「語言模型」)。
ELMo 模型的特點:
ELMo 模型的輸入是字符而不是單詞,。因此,,它們可以利用子詞單元的優(yōu)勢來計算有意義的單詞表示,即使這些單詞可能在詞匯表之外(就像 FastText 一樣)。
ELMo 是在雙向語言模型中的一些層上的激勵函數(shù)的串接,。一個語言模型的不同層會對一個單詞的不同類型的信息進(jìn)行編碼(例如,,詞性標(biāo)注(Part-Of-Speech tagging)由雙向 LSTM(biLSTM)的較低層很好地預(yù)測,而詞義排歧則由較高層更好地進(jìn)行編碼),。將所有的層串接起來使得自由組合各種不同的單詞表征成為了可能,,從而在下游任務(wù)中得到更好的模型性能。
現(xiàn)在讓我們轉(zhuǎn)而討論通用句子嵌入,。
通用句子嵌入的興起
目前有許多相互競爭的學(xué)習(xí)句子嵌入的方案,。盡管像平均詞嵌入這樣簡單的基線也能夠一直給出很好的實驗結(jié)果,但一些新的類似于無監(jiān)督和監(jiān)督學(xué)習(xí)以及多任務(wù)學(xué)習(xí)的方法,,在 2017 年底 2018 年初出現(xiàn)在了人們的視野中,,并且取得了令人矚目的性能提升。
讓我們快速瀏覽一下目前研究出來的四種嵌入方法吧:從簡單的詞向量平均的基線到無監(jiān)督/監(jiān)督學(xué)習(xí)方法,,以及多任務(wù)學(xué)習(xí)方案(如上文所述),。
在這個領(lǐng)域有一個廣泛的共識(http://arxiv.org/abs/1805.01070),那就是:直接對句子的詞嵌入取平均(所謂的詞袋模型(Bag-of-Word,,BoW))這樣簡單的方法可以為許多下游任務(wù)提供一個很強(qiáng)大的對比基線,。
Arora 等人在 ICLR 2017 上提出了「A Simple but Tough-to-Beat Baseline for Sentence Embeddings」(https://openreview.net/forum?id=SyK00v5xx),這是一個很好的能夠被用于計算這個基線(BoW)的算法,,算法的大致描述如下:選擇一個流行的詞嵌入方法,,通過詞向量的線性的加權(quán)組合對一個句子進(jìn)行編碼,并且刪除共有的部分(刪除它們的第一個主成分上的投影),。這種通用的方法有更深刻和強(qiáng)大的理論動機(jī),,它依賴于一個生成模型,該生成模型使用了一個語篇向量上的隨機(jī)游走生成文本,。(這里不討論理論細(xì)節(jié),。)
「HuggingFace」對話的詞袋模型的示意圖。詞袋模型弱化了詞語的順序關(guān)系,,但保留了大量的語義和句法的信息,。在 ACL 2018 上,Conneau 等人對此提出了有趣的見解(http://arxiv.org/abs/1805.01070),。
除了簡單的詞向量平均,,第一個主要的提議是使用無監(jiān)督學(xué)習(xí)訓(xùn)練目標(biāo),這項工作是起始于 Jamie Kiros 和他的同事們在 2015 年提出的「Skip-thought vectors」(https://arxiv.org/abs/1506.06726),。
無監(jiān)督方案將句子嵌入作為通過學(xué)習(xí)對一個句子中一致且連續(xù)的短句或從句進(jìn)行預(yù)測的副產(chǎn)品來學(xué)習(xí)句子嵌入,。理論上,這些方法可以利用任何包含以一致的方式并列的短句/從句的文本數(shù)據(jù)集,。
「Skip-thoughts vector」是一個典型的學(xué)習(xí)無監(jiān)督句子嵌入的案例,。它可以被認(rèn)為相當(dāng)于為詞嵌入而開發(fā)的「skip-gram」模型的句子向量,,我們在這里試圖預(yù)測一個給定的句子周圍的句子,而不是預(yù)測一個單詞周圍的其他單詞,。該模型由一個基于循環(huán)神經(jīng)網(wǎng)絡(luò)的編碼器—解碼器結(jié)構(gòu)組成,,研究者通過訓(xùn)練這個模型從當(dāng)前句子中重構(gòu)周圍的句子。
Skip-Thoughts 的論文中最令人感興趣的觀點是一種詞匯表擴(kuò)展方案:Kiros 等人通過在他們的循環(huán)神經(jīng)網(wǎng)絡(luò)詞嵌入空間和一個更大的詞嵌入空間(例如,,word2vec)之間學(xué)習(xí)一種線性變換來處理訓(xùn)練過程中沒有出現(xiàn)的單詞,。
「Quick-thoughts vectors」(https://openreview.net/forum?id=rJvJXZb0W)是研究人員最近對「Skip-thoughts vectors」的一個改進(jìn),它在今年的 ICLR 上被提出,。在這項工作中,,在給定前一個句子的條件下預(yù)測下一個句子的任務(wù)被重新定義為了一個分類問題:研究人員將一個用于在眾多候選者中選出下一個句子的分類器代替了解碼器。它可以被解釋為對生成問題的一個判別化的近似,。
該模型的運行速度是它的優(yōu)點之一(與 Skip-thoughts 模型屬于同一個數(shù)量級),,使其成為利用海量數(shù)據(jù)集的一個具有競爭力的解決方案。
「Quick-thoughts」分類任務(wù)示意圖,。分類器需要從一組句子嵌入中選出下一個句子,。圖片來自 Logeswaran 等人所著的「An efficient framework for learning sentence representations」,。
在很長一段時間內(nèi),,人們認(rèn)為監(jiān)督學(xué)習(xí)技術(shù)比無監(jiān)督學(xué)習(xí)技術(shù)得到的句子嵌入的質(zhì)量要低一些。然而,,這種假說最近被推翻了,,這要部分歸功于「InferSent」(https://arxiv.org/abs/1705.02364)的提出。
與之前詳細(xì)討論的無監(jiān)督學(xué)習(xí)不同,,監(jiān)督學(xué)習(xí)需要一個帶標(biāo)簽的數(shù)據(jù)集,,為一些像自然語言推理(例如:有蘊含關(guān)系的句子對)或者機(jī)器翻譯(例如:翻譯前后的句子對)這樣的任務(wù)進(jìn)行標(biāo)注。監(jiān)督學(xué)習(xí)提出了以下兩個問題:(1)如何選擇特定任務(wù),?(2)若要獲得高質(zhì)量的嵌入,,所需的數(shù)據(jù)集大小應(yīng)該如何確定?在本文的下一節(jié)和最后一節(jié),,作者將會對多任務(wù)學(xué)習(xí)進(jìn)行進(jìn)一步的討論,。但在這之前,讓我們一起來看看 2017 年發(fā)布的 InferSent 背后的原理,。
InferSent 具有非常簡單的架構(gòu),,這使得它成為了一種非常有趣的模型。它使用 Sentence Natural Language Inference(NLI)數(shù)據(jù)集(該數(shù)據(jù)集包含 570,000 對帶標(biāo)簽的句子,,它們被分成了三類:中立,、矛盾以及蘊含)訓(xùn)練一個位于句子編碼器頂層的分類器。兩個句子使用同一個編碼器進(jìn)行編碼,,而分類器則是使用通過兩個句子嵌入構(gòu)建的一對句子表征訓(xùn)練的,。Conneau 等人采用了一個通過最大池化操作實現(xiàn)的雙向 LSTM 作為編碼器,。
一個用于對 Sentence Natural Language Inference 進(jìn)行學(xué)習(xí)的有監(jiān)督的句子嵌入模型(InferSent)。此圖來自 A.Conneau 等人所著的「Supervised Learning of Universal Sentence Representations from Natural Language Inference Data」,。
InferSent 的成功不僅導(dǎo)致了對選擇最佳的神經(jīng)網(wǎng)絡(luò)模型的探索,,它還引發(fā)了對以下問題的研究:
哪種監(jiān)督訓(xùn)練任務(wù)能夠?qū)W到能更好地泛化到下游任務(wù)中去的句子嵌入呢?
多任務(wù)學(xué)習(xí)可以被視為對 Skip-Thoughts,、InferSent,,以及其他相關(guān)的無監(jiān)督/監(jiān)督學(xué)習(xí)方案的一種泛化,它通過試著將多個訓(xùn)練目標(biāo)融合到一個訓(xùn)練方案中來回答這個問題(上文提到的問題),。
在 2018 年初,,研究人員發(fā)布了一系列最新的多任務(wù)學(xué)習(xí)的方案。讓我們快速的瀏覽一下 MILA 和微軟研究院提出的「通用目的句子表征」和谷歌的「通用句子編碼器」,。
在 ICLR 2018 上發(fā)表的描述 MILA 和微軟蒙特利爾研究院的工作的論文《Learning General Purpose Distributed Sentence Representation via Large Scale Multi-Task Learning》(https://arxiv.org/abs/1804.00079)中,,Subramanian 等人觀察到,為了能夠在各種各樣的任務(wù)中泛化句子表征,,很有必要將一個句子的多個層面的信息進(jìn)行編碼,。
因此,這篇文章的作者利用了一個一對多的多任務(wù)學(xué)習(xí)框架,,通過在不同的任務(wù)之間進(jìn)行切換去學(xué)習(xí)一個通用的句子嵌入,。被選中的 6 個任務(wù)(對于下一個/上一個句子的 Skip-thoughts 預(yù)測、神經(jīng)機(jī)器翻譯,、組別解析(constituency parsing),,以及神經(jīng)語言推理)共享相同的由一個雙向門控循環(huán)單元得到的句子嵌入。實驗表明,,在增添了一個多語言神經(jīng)機(jī)器翻譯任務(wù)時,,句法屬性能夠被更好地學(xué)習(xí)到,句子長度和詞序能夠通過一個句法分析任務(wù)學(xué)習(xí)到,,并且訓(xùn)練一個神經(jīng)語言推理能夠編碼語法信息,。
谷歌在 2018 年初發(fā)布的的通用句子編碼器(https://arxiv.org/abs/1803.11175)也使用了同樣的方法。他們的編碼器使用一個在各種各樣的數(shù)據(jù)源和各種各樣的任務(wù)上訓(xùn)練的轉(zhuǎn)換網(wǎng)絡(luò),,旨在動態(tài)地適應(yīng)各類自然語言理解任務(wù),。該模型的一個預(yù)訓(xùn)練好的版本可以在 TensorFlow 獲得。
以上就是我們對于通用的詞語和句子嵌入的簡要總結(jié),。
在過去的短短的幾個月中,,這個領(lǐng)域取得了很多令人矚目的發(fā)展,并且在評價和探索這些嵌入的性能以及其內(nèi)在的偏差/公平性的方面(這是討論通用的嵌入時的一個真實存在的問題)有了很大的進(jìn)步,。