在即將過去的 2018 年中,自然語言處理有很多令人激動的想法與工具。從概念觀點到實戰訓練,它們為 NLP 注入了新鮮的活力。
前一段時間,Sebastian Ruder 介紹了他心中 10 個最有影響力的想法,並且每一個都提供了具體論文與核心思想。正如 Ruder 所說,他的清單必然是主觀的,主要涵蓋了遷移學習和泛化相關的想法。其中有的想法在過去一年非常受關注,大家圍繞這些完美的觀點展開了很多研究工作與實踐。而有的想法並不是當前趨勢,不過它們有可能在未來變得流行。因此,機器之心在 Ruder 介紹的基礎上,重點關注今年的前沿趨勢,並推薦一些真正好用的 NLP 新工具。
在本文中,我們會重點關注 2018 年裡的神經機器翻譯與預訓練模型,這兩個概念真的非常 Excited!而後對於實戰裝備,數百種中文預訓練詞嵌入向量、BERT 預訓練模型和建模框架 PyText 等工具真的令人忍不住想做一個新穎的 NLP 應用。
1. 神經機器翻譯
在 2018 年,神經機器翻譯似乎有了很大的改變,以前用 RNN 加上注意力機制打造的 Seq2Seq 模型好像都替換為了 Tramsformer。大家都在使用更大型的 Transformer,更高效的 Transformer 元件。例如阿里會根據最近的一些新研究對標準 Transformer 模型進行一些修正。這些修正首先體現在將 Transformer 中的 Multi-Head Attention 替換為多個自注意力分支,其次他們採用了一種編碼相對位置的表徵以擴充套件自注意力機制,並令模型能更好地理解序列元素間的相對距離。
有道翻譯也採用了 Transformer,他們同樣會採取一些修正,包括對單語資料的利用,模型結構的調整,訓練方法的改進等。例如在單語資料的利用上,他們嘗試了回譯和對偶學習等策略,在模型結構上採用了相對位置表徵等。所以總的而言,儘管 Transformer 在解碼速度和位置編碼等方面有一些缺點,但它仍然是當前效果最好的神經機器翻譯基本架構。
在 Ruder 的介紹中,它非常關注兩種無監督機器翻譯模型,它們都被接受為 ICLR 2018 論文。如果無監督機器翻譯模型是能行得通的,那麼這個想法本身就很驚人,儘管無監督翻譯的效果很可能遠比有監督差。在 EMNLP 2018 中,有一篇論文在無監督翻譯上更進一步提出了很多改進,並獲得極大的提升。Ruder 筆記中提到了以下這篇論文:
論文:Phrase-Based & Neural Unsupervised Machine Translation
論文連結:https://arxiv.org/abs/1804.07755
這篇論文很好地提煉出了無監督 MT 的三個關鍵點:優良的引數初始化、語言建模和透過回譯建模反向任務。這三種方法在其它無監督場景中也有使用,例如建模反向任務會迫使模型達到迴圈一致性,這種一致性已經應用到了很多工,可能讀者最熟悉的就是 CycleGAN。該論文還對兩種語料較少的語言做了大量的實驗與評估,即英語-烏爾都語和英語-羅馬尼亞語。
無監督 MT 的三個主要原則:A)兩種單語資料集、B)引數初始化、C)語言建模、D)回譯。
這篇論文獲得了 EMNLP 2018 的最佳長論文獎,它在遵循上面三個主要原則的情況下簡化了結構和損失函式。得到的模型優於以前的方法,並且更易於訓練和調整。
2. 預訓練模型
2018 年,使用預訓練的語言模型可能是 NLP 領域最顯著的趨勢,它可以利用從無監督文字中學習到的「語言知識」,並遷移到各種 NLP 任務中。這些預訓練模型有很多,包括 ELMo、ULMFiT、OpenAI Transformer 和 BERT,其中又以 BERT 最具代表性,它在 11 項 NLP 任務中都獲得當時最佳的效能。不過目前有 9 項任務都被微軟的新模型超過。
機器之心曾解讀過 BERT 的的核心過程,它會先從資料集抽取兩個句子,其中第二句是第一句的下一句的機率是 50%,這樣就能學習句子之間的關係。其次隨機去除兩個句子中的一些詞,並要求模型預測這些詞是什麼,這樣就能學習句子內部的關係。最後再將經過處理的句子傳入大型 Transformer 模型,並透過兩個損失函式同時學習上面兩個目標就能完成訓練。
如上所示為不同預訓練模型的架構,BERT 可以視為結合了 OpenAI GPT 和 ELMo 優勢的新模型。其中 ELMo 使用兩條獨立訓練的 LSTM 獲取雙向資訊,而 OpenAI GPT 使用新型的 Transformer 和經典語言模型只能獲取單向資訊。BERT 的主要目標是在 OpenAI GPT 的基礎上對預訓練任務做一些改進,以同時利用 Transformer 深度模型與雙向資訊的優勢。
這種「雙向」的來源在於 BERT 與傳統語言模型不同,它不是在給定所有前面詞的條件下預測最可能的當前詞,而是隨機遮掩一些詞,並利用所有沒被遮掩的詞進行預測。
更詳細的論文解讀可以檢視:谷歌終於開源 BERT 程式碼:3 億引數量,機器之心全面解讀
此外,值得注意的是,最近微軟釋出了一種新的綜合性模型,它在 GLUE 的 11 項基準 NLP 任務中的 9 項超過了 BERT,且評分也超過了 BERT。除了準確率外,微軟的新模型只有 1.1 億的引數量,遠比 BERT-Large 模型的 3.35 億引數量少,和 BERT-Base 的引數量一樣多。
在「Microsoft D365 AI & MSR AI」模型的描述頁中,新模型採用的是一種多工聯合學習。因此所有任務都共享相同的結構,並透過多工訓練方法聯合學習。目前新模型的資訊還非常少,如果經過多工預訓練,它也能像 BERT 那樣用於更廣泛的 NLP 任務,那麼這樣的高效模型無疑會有很大的優勢。
Sebastian Ruder 非常欣賞 ELMo 的創新性想法,它同樣也是今年的論文(NAACL 2018):
論文:Deep contextualized word representations (NAACL-HLT 2018)
論文連結:https://arxiv.org/abs/1802.05365
這篇論文提出了廣受好評的 ELMo,除了令人印象深刻的實驗結果外,最吸引人的就是論文的分析部分,它剔除了各種因素的影響,並對錶徵所捕獲的資訊進行了分析。在下圖左中語義消歧(WSD)執行得很好,它們都表明語言模型提供的語義消歧和詞性標註(POS)表現都接近當前最優水平。
第一層和第二層雙向語言模型的語義消歧(左)和詞性標註(右)與基線模型對比的結果。
3. 常識推理資料集
將常識融入模型是 NLP 最重要的研究方向之一。然而,建立好的資料集並非易事,即使是流行的資料集也存在很大的偏好問題。今年已經出現了一些試圖教機器學習常識的資料集,如華盛頓大學的 Event2Mind 和 SWAG。但 SWAG 很快就被 BERT 打敗了。有代表性的研究成果包括:
論文:From Recognition to Cognition: Visual Commonsense Reasoning
論文地址:https://arxiv.org/abs/1811.10830
這是首個包含每個答案的基本原理(解釋)的視覺化 QA 資料集。而且,回答問題需要複雜的推理。創作者竭盡全力解決可能出現的偏好,確保每個答案作為正確答案的先驗機率為 25%(每個答案在整個資料集中出現 4 次,其中 3 次作為錯誤答案,1 次作為正確答案);這需要利用可以計算相關性和相似性的模型來解決約束最佳化問題。
給定一幅影像、一系列地點和一個問題,模型必須回答該問題,並提供合理的推理解釋答案為什麼是正確的(Zellers et al., 2018)
4. 元學習
元學習是目前機器學習領域一個令人振奮的研究趨勢,它解決的是學習如何學習的問題(參考《入門 | 從零開始,瞭解元學習》)。元學習在少樣本學習、強化學習和機器人學方面有很多應用,其中最突出的應用是與模型無關的元學習(model-agnostic meta-learning,MAML),但在 NLP 中的成功應用卻非常少。元學習在訓練樣本有限時非常有用。有代表性的研究成果包括:
論文 1:Meta-Learning for Low-Resource Neural Machine Translation
論文連結:http://aclweb.org/anthology/D18-1398
作者利用 MAML 來學習一個好的用於翻譯的初始化,將每個語言對看成一個獨立的元任務。資源較少的語言或許是元學習在 NLP 領域最有應用價值的場景。將多語言遷移學習(如多語言 BERT)、無監督學習和元學習相結合是一個有前景的研究方向。
遷移學習、多原因遷移學習和元學習之間的差異。實線:初始化的學習。虛線:微調路徑。
論文 2:Meta-Learning a Dynamical Language Model
論文地址:https://arxiv.org/abs/1803.10631
作者提出,用於最佳化神經網路模型的元學習器的行為和迴圈神經網路類似,它會提取一系列模型訓練過程中的引數和梯度作為輸入序列,並根據這個輸入序列計算得到一個輸出序列(更新後的模型引數序列)。他們在論文中詳細描述了該相似性,並研究了將元學習器用於神經網路語言模型中,以實現中期記憶:經過學習,元學習器能夠在標準 RNN(如 LSTM)的權重中,編碼中期記憶(除了短期記憶在 LSTM 隱藏狀態中的傳統編碼方式以外)。
他們的元學習語言模型由 3 層記憶層級組成,自下而上分別是:標準 LSTM、用於更新 LSTM 權重以儲存中期記憶的元學習器,以及一個長期靜態記憶。他們發現,元學習語言模型可以透過訓練來編碼最近輸入的記憶,就像一篇維基百科文章的開始部分對預測文章的結尾部分非常有幫助一樣。
5. 魯棒無監督方法
今年,我們觀察到,跨語言嵌入方法在語言相似性低時會失效。這是遷移學習中的常見現象,源語言和目標語言設定(例如,域適應中的域、持續學習和多工學習中的任務)之間存在差異,導致模型退化或失效。因此,使模型對這些變化更加魯棒非常重要。有代表性的研究成果包括:
論文:A robust self-learning method for fully unsupervised cross-lingual mappings of word embeddings
論文連結:http://www.aclweb.org/anthology/P18-1073
這篇論文根據其理解構建了一個更好的初始化,而沒有使用元學習作為初始化。特別地,他們將兩種語言中擁有相似詞分佈的單詞配對。這是從分析中利用領域知識和 insight 以使模型更加魯棒的絕佳範例。
三個單詞的相似性分佈:與不相關的單詞(「two」和「cane」(狗))相比,等效翻譯(「two」和「due」)有更加相似的詞分佈。(Artexte et al. 2018 http://www.aclweb.org/anthology/P18-1073)
6. 理解表徵
今年,人們在更好地理解表徵方面做了很多工作。特別地,《Fine-grained Analysis of Sentence Embeddings Using Auxiliary Prediction Tasks》這篇論文提出了「診斷分類器」(度量學習到的表徵是否能預測特定屬性的任務),之後在其它研究中變得常見,如《What you can cram into a single vector: Probing sentence embeddings for linguistic properties》。有代表性的研究成果包括:
論文:Dissecting Contextual Word Embeddings: Architecture and Representation
論文連結:http://aclweb.org/anthology/D18-1179
這篇論文在更好理解預訓練語言模型表徵方面做出了很大貢獻。他們廣泛地研究了精心設計的無監督和有監督任務上學習到的單詞和跨度表徵。結果發現:預訓練表徵會在較低層學習到與低階形態和句法任務相關的任務,在較高層學習到更大範圍的語義。對我而言,該研究表明了預訓練語言模型確實能捕捉文字的相似屬性,正如計算機視覺模型在 ImageNet 上預訓練後,能捕捉影像之間的相似屬性。
BiLSTM 和 Transformer 的預訓練表徵的每一層的效能,從左到右依次是:POS 標記、選區解析和無監督共指解析 (Peters et al. 2018 http://aclweb.org/anthology/D18-1179)。
7. 輔助任務
在很多設定中,我們都看到人們越來越多使用帶有仔細選擇的輔助任務的多工學習方法。其中最重要的一個案例是 BERT。其使用了下一句預測來實現優越效能(近期被用在 Skip-thoughts 以及 Quick-thoughts 等)。有代表性的研究成果包括:
論文 1:Syntactic Scaffolds for Semantic Structures
論文連結:http://aclweb.org/anthology/D18-1412
這篇論文透過為每個跨度預測對應的句法成分型別,以此提出了一種預訓練跨度表徵的輔助任務。儘管在概念上很簡單,該輔助任務可以在跨度級預測任務中取得極大提升,例如語義角色標註和共指解析等。該論文表明,透過目標任務在所需級別學習的專用表徵有極大的用處。
論文 2:pair2vec: Compositional Word-Pair Embeddings for Cross-Sentence Inference
論文連結:https://arxiv.org/abs/1810.08854
依據相似的思路,這篇論文透過最大化詞對以及語境的逐點互資訊預訓練詞對錶徵。相比更加通用的表徵(例如語言建模),這鼓勵模型學習更有意義的詞對錶徵。這些預訓練表徵在諸如 SQuAD、和 MultiNLI 等需要跨句推理的任務中很有效。我們可以期待看到更多可捕捉適用於特定下游任務的預訓練模型,並且和更加通用的任務互補(例如語言建模)。
OntoNotes 的句法、命題語料庫和共指標註。命題語料庫 SRL 引數和共指在句法成分之上標註。幾乎每個引數都與句法成分有關 (Swayamdipta et al., 2018 http://aclweb.org/anthology/D18-1412)
8. 半監督學習結合遷移學習
最近,遷移學習取得最新進展,我們不應該忘記使用目標任務特定資料更明確的方式。其實,預訓練表徵與多種形式的半監督學習是互補的。已經有研究者探索半監督學習的一個特定類別——自標註方法。有代表性的研究包括:
論文:Semi-Supervised Sequence Modeling with Cross-View Training
論文連結:http://aclweb.org/anthology/D18-1217
這篇論文表明,一個概念上非常簡單的想法——即確保對不同輸入檢視的預測與主模型的預測一致——可以在一系列不同的任務中獲得收益。這一想法與 word dropout 類似,但允許利用未標註資料來加強模型的魯棒性。與 mean teacher 等其他 self-ensembling 模型相比,它是專門為特定 NLP 任務設計的。
輔助預測模組看到的輸入:輔助 1:They traveled to __________________. 輔助 2:They traveled to Washington _______. 輔助 3: _____________ Washington by plane. 輔助 4: ________________________ by plane
9. 利用大型文字的問答和推理
在一系列新的問答(QA)資料集的幫助下,問答系統取得了很多進展。除對話問答和多步驟推理之外,問答系統最具挑戰性的一個方面是合成敘述和含有大量資訊的本文。有代表性的研究包括:
論文:The NarrativeQA Reading Comprehension Challenge
論文連結:http://aclweb.org/anthology/Q18-1023
本文作者根據對整個電影劇本和書籍的問答提出了一個頗具挑戰性的 QA 資料集。雖然目前的方法仍無法完成這項任務,但模型可以選擇使用摘要(而不是整本書)作為上下文,選擇答案(而不是生成答案),以及使用 IR 模型的輸出。這些變體提高了任務的可行性,使得模型可以逐漸擴充套件到完整的語境。
QA 資料集對比。
10. 歸納偏向
CNN 中的卷積、正則化、dropout 以及其他機制等歸納偏向都是神經網路模型做為正則化項的核心部分,也使得模型取樣更為高效。然而,提出一種普遍可用的歸納偏向並把它融入到模型中非常具有挑戰性。有代表性的研究成果包括:
論文 1:sequence classification with human attention (CoNLL 2018)
論文連結:http://aclweb.org/anthology/K18-1030
該論文提出使用來自人類眼球追蹤語料庫的人類注意力來正則化 RNN 中的注意。如今許多 Transformers 這樣的現有模型都在使用 attention,找到更高效訓練的合適方式是很重要的方向。也很高興看到人類語言學習能幫助我們改進計算模型。
論文 2:Linguistically-Informed Self-Attention for Semantic Role Labeling (EMNLP 2018)
論文連結:http://aclweb.org/anthology/D18-1548
該論文有很多喜人的地方:在句法與語義任務上同時訓練一個 Transformer;訓練時加入高質量解析的能力以及領域外評估。透過訓練一個注意力 head 來關注每個 token 的 syntactic parents,這篇論文也正則化了 Transformer 的多 head 注意力,使其對句法更為敏感。我們未來可能會看到更多 Transformer 注意 head 示例,做為專注輸入特定方面的輔助詞預測器。
過去十年的 PropBank 語義角色標記。在領域外資料上,Linguistically-Informed Self-Attention (LISA) 方法與其他方法的對比。
不論是採用 Mask 的語言模型還是透過回譯的無監督機器翻譯,這 10 個想法都非常優美。但是在實際應用中,我們更希望直接使用已有的工具構建高效應用,只有這樣,這些想法才能轉化為真正有意思的東西。
11. 上百種預訓練中文詞向量
做自然語言處理,詞嵌入基本是繞不開的步驟,各種任務都需要歸結到詞層面才能繼續計算。因此對於國內自然語言處理的研究者而言,中文詞向量語料庫是需求很大的資源。為此,北京師範大學等機構的研究者開源了「中文詞向量語料庫」,該庫包含經過數十種用各領域語料(百度百科、維基百科、人民日報 1947-2017、知乎、微博、文學、金融、古漢語等)訓練的詞向量,涵蓋各領域,且包含多種訓練設定。
中文詞向量專案地址:https://github.com/Embedding/Chinese-Word-Vectors
該專案提供使用不同表徵(稀疏和密集)、上下文特徵(單詞、n-gram、字元等)以及語料庫訓練的中文詞向量(嵌入)。我們可以輕鬆獲得具有不同屬性的預訓練向量,並將它們用於各類下游任務。
12. BERT 開源實現
儘管如前所述 BERT 的效果驚人,但預訓練所需要的計算力同樣驚人,一般的開發者基本就不要想著能復現了。BERT 的作者在 Reddit 上也表示預訓練的計算量非常大,Jacob 說:「OpenAI 的 Transformer 有 12 層、768 個隱藏單元,他們使用 8 塊 P100 在 8 億詞量的資料集上訓練 40 個 Epoch 需要一個月,而 BERT-Large 模型有 24 層、2014 個隱藏單元,它們在有 33 億詞量的資料集上需要訓練 40 個 Epoch,因此在 8 塊 P100 上可能需要 1 年?16 Cloud TPU 已經是非常大的計算力了。」
但是,谷歌團隊開源了 BERT 的預訓練模型,我們可以將它們用於不同的 NLP 任務。這節省了我們大量計算力,同時還能提升已有模型的效果,因此做 NLP 任務前,你可以先用預訓練的 BERT 試試水?
BERT 實現地址:https://github.com/google-research/bert
其實目前已經有很多開發者將 BERT 預訓練模型應用到它們自己的專案中,包括抽取句向量、句子相似性判斷或情感分析等,下面兩篇文章簡單介紹瞭如何將 BERT 預訓練模型遷移到你的專案中:
小資料福音!BERT 在極小資料下帶來顯著提升的開源實現
兩行程式碼玩轉 Google BERT 句向量詞向量
13. Facebook 開源 NLP 建模框架 PyText,從論文到產品部署只需數天
為了降低人們建立、部署自然語言處理系統的難度,Facebook 開源了一個建模框架——PyText,它模糊了實驗與大規模部署之間的界限。PyTex 是 Facebook 正在使用的主要自然語言處理(NLP)建模框架,每天為 Facebook 及其應用程式系列的使用者提供超過 10 億次 AI 任務處理。這一框架基於 PyTorch,可以 1)簡化工作流程,加快實驗進度;2)提供一大批預構建的模型架構和用於文字處理和詞彙管理的工具,以促進大規模部署;3)提供利用 PyTorch 生態系統的能力,包括由 NLP 社群中的研究人員、工程師預構建的模型和工具。利用該框架,Facebook 在幾天內就實現了 NLP 模型從理念到完整實施的整個過程,還部署了依賴多工學習的複雜模型。
Yann LeCun 對此介紹道,「PyText 是一個工業級的開源 NLP 工具包,可用於在 PyTorch 中開發 NLP 模型,並透過 ONNX 部署。其預訓練模型包括文字分類、序列標註等。」
專案地址:https://github.com/facebookresearch/pytext
參考連結:http://ruder.io/10-exciting-ideas-of-2018-in-nlp/