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