19年NAACL紀實:自然語言處理的實用性見解 | CSDN博文精選

  • 2019 年 12 月 23 日
  • 筆記

作者 | Nikita Zhiltsov

翻譯 | 王威力

校對 | 李海明

本文為你概述處理不同NLP問題時的具有卓越性能的方法、技術和框架等。

計算語言:人類語言技術學會北美分會2019年年會(North American Chapter of the Association for Computational Linguistics: Human Language Technologies/NAACL- HLT)於6月2至7日美國明尼阿波利斯舉辦。NAACL- HLT是A級同行評審會議,是繼計算語言學協會(ACL)會議之後,計算語言學界的又一重要事件,即自然語言處理(NLP)。

受今年NAACL- HLT啟發,本系列文章對學術研究和工程應用中在處理不同NLP問題時所實現的具有卓越性能的方法、技術和框架進行了概述。這些文章主要面向NLP領域入門級軟體工程師、機器學習工程師、數據科學家、研究類科學家,若在現代神經網路方面具備一定基礎則更佳。

本系列不對NLP領域所做工作進行全面覆蓋,而是只關注與Orb智慧最相關的一些話題,如language representation learning(語言特徵學習),transfer learning(遷移學習),multi-language support (Part I)(多語言支援),text similarity(文本相似性),text classification(文本分類),language generation(語言生成), sequence labeling (Part II)(序列標註), frameworks(框架)以及miscellaneous techniques (Part III)(其他技術)。同時,讀者可能會發現一些非常通用的想法在NLP領域之外也同樣適用。

介紹

或許現代NLP領域最大的轉變,是將每個特徵視作表獨立正交維數(即one-hot表示,該表示經常與TF-IDF一同使用)進行表示,轉變為密集向量表示(見圖1)。也就是把原始特徵壓縮嵌入到一個低維空間中(便於工程應用),並用這個空間中的向量對特徵進行表示。密集表示的最大好處是,特徵間不再是獨立的,捕獲的相似性或其他的相關關係,並可以更好地進行特徵歸納(見分散式語義假設)。另一個好處是,詞嵌入可向神經網路那樣進行訓練,從而對主目標函數進行優化(在此之前,潛在語義分析,布朗聚類和潛在狄利克雷分配都在廣泛使用)。

圖 1 one-hot編碼和詞向量(word embeddings)

同時,分布語義假設有其固有的限制:

  • 常識是隱蔽的,通常不會直接寫下來
  • 詞嵌入易產生偏見(比如道德的、社會的、職業的)
  • 除文本外,沒有其他形式的形態

最後一點很有意思,因為這是人工神經語言學習者(作為慢的和數據依賴的學習者)和人類學習者(特別是兒童)之間的主要區別,人類能夠在很少的例子下更快地學習一門語言。我們傾向於認為,多模態學習的工作,即在學習過程中結合各種輸入(文本、音頻、影像、影片),似乎是人工智慧的下一個潛在突破(見第三部分中的第一步示例)。

回到第一部分,我們涵蓋了現代語言特診學習技術的一些基本方面。

遷移學習

在NAACL上,S. Ruder, T. Wolf, S. Swayamdipta, and M. Peters提供了一個很棒的教程,「Transfer learning in NLP」(http://tiny.cc/NAACLTransfer)。NLP中的遷移學習被認為是一個自動學習表示的問題,它使用基於神經網路的自然語言處理方法跨任務、域和語言進行遷移學習(參見圖2)。

圖 2 遷移學習任務的分類

原則上,越來越多的經驗表明,遷移學習優於監督學習,除非沒有相關資訊可用或者已有足夠的可用的訓練樣本。

預訓練

預訓練是遷移學習的第一個基本步驟。預訓練的核心思想是,用已訓練的內部表示對主要的自監督NLP任務(如無標記數據)進行求解,對其他任務也同樣使用。比如在上下文中簡單的單詞預測或word2vec的詞向量學習,已經成為最先進的NLP模型的基本構建模組。更困難的語言建模任務,如句子預測、上下文單詞預測和掩蔽單詞預測將在下面的部落格文章中予以概述。這還包括神經機器翻譯(例如,CoVE)和自動編碼導出。根據目前關於預訓練的共識,教程作者觀察到:

  • 一般來說,預訓練任務和目標任務的選擇是耦合的,即預訓練越接近目標任務,效果越好
  • 經驗上,語言建模(LM)任務比自動編碼任務效果更好:

這已經夠難了,LM模型必須壓縮任何可能的上下文(語法、語義、事實知識)來概括可能的完成;

可用於預訓練的數據更多參數更多,訓練效果越好,得到更好的詞向量。

  • 預訓練提高了樣本效率,也就是說,為了達到相同的品質和更快的收斂速度,通常需要較少的最終任務注釋數據。

適應

若一個預訓練模型需要適配到目標任務上,這會產生三個基本問題:

1、 對預訓練好的模型架構做多少改變以適應目標問題(模型架構調整)

2、 適應過程中需要訓練哪些權重,遵循何種訓練計劃(優化方案)

3、 如何為目標任務獲取更多的監督訊號(弱監督、多任務和集成學習)。

首先對於模型架構調整,有兩個方式:

1(a)保持預先訓練的模型內部不變。如果對目標任務沒有用處,請刪除一個預訓練任務head。在預訓練模型的首層/最底層添加遷移任務特定層(隨機初始化參數)。

1(b)修改內部結構。這包括適應結構不同的目標任務。例如,對具有多個輸入序列(翻譯、語言生成)的任務使用單個輸入序列進行預訓練,即,可以使用預訓練的權重初始化目標模型的多個層(LM用於初始化MT中的編碼器和解碼器)。另一個方向是特定於任務的修改,例如添加跳過/剩餘連接和注意層。最後,在預先訓練的模型層之間添加適配器或瓶頸模組。適配器減少了用於調整的參數數量,允許其他「heavy」層在傳輸期間保持凍結狀態。它們可能包含不同的操作(卷積,自關注),並且通常與剩餘連接連接到現有層。

例如,參見最近的文章(https://arxiv.org/pdf/1902.00751.pdf),在適配器中多頭關注和前饋層之後引入適配器模組。

對於第二個調優的問題:

2(a)除非我們改變預先訓練好的權重,否則我們最終會得到諸如特徵提取和適配器之類的選項。如果預先訓練的權重發生變化,則採用微調。在這種情況下,預先訓練好的權值用於結束任務模型的參數初始化。一般來說,如果源任務和目標任務不同(即源任務不包含對目標任務非常有利的關係),則特徵提取在實踐中更為可取(詳見本文)。Transformers(如BERT)通常比LSTMs(如ELMo)更容易微調。

2(b)學習時間表。這是一個關於更新哪些權重、更新順序和更新速率的方案。我們的動機是防止覆蓋有用的預先訓練的知識(災難性遺忘),並保留轉移的好處。好的技術包括:自上而下的更新(通常頂層是特定於任務的,底層傳遞更多的一般性知識,如形態學和語法),不同學習階段之間的不同學習速率,以及添加正則化以防止參數偏離預訓練區域。

第三個是關於獲得更多監督訓練:

3(a)在單個適應任務上對模型進行微調。例如,對於文本分類任務,從模型中提取一個固定長度的向量(最後一個隱藏狀態或它們的池)。使用額外的分類器投影到分類空間,擴展頂層。以分類目標訓練。

3(b)相關數據集。在這裡我們:

  • 順序適應:對相關數據集和任務進行中間微調;
  • 多任務與相關任務的微調:採用損失函數的組合,然後對每一優化步驟分別抽取一個任務和一批進行訓練,最後只對目標任務進行微調; 數據集切片:使用只對數據的特定子集進行訓練的輔助頭,並檢測自動挑戰的子集,模型在其上執行不足(https://hazyresearch.github.io/snorkel /);
  • 半監督學習:最小化對原始輸入的預測與其傾斜版本之間的距離,使其與未標記數據更加一致。

3(c)集成。這意味著通過組合它們的預測對獨立的微調模型進行集成。為了在集成中獲得不相關的預測器,模型可以在不同的任務、數據集分割、參數設置和預訓練模型的變體上進行訓練。這個方向還包括知識提煉(詳見第三部分)。

示例

對於這些原則的一個好的展現是NAACL上的一篇文章,「An Embarrassingly Simple Approach for Transfer Learning from Pretrained Language Models」 介紹了SiATL(程式碼鏈接https://github.com/alexandra-chron/siatl),是一個簡單且有效的用於文本分類任務的遷移學習。SiATL(圖3)是一個標準的基於預訓練模型,並把它的權重遷移到一個分類器並增加了一個任務特定層。

圖 3

為了防止語言分布的災難性遺忘,該模型將輔助LM損失與分類損失結合在一起。此外,輔助LM損失的貢獻通過訓練迭代次數的指數下降來控制,逐漸將焦點從LM目標轉移到分類任務。類似於ULMFiT(見下面的詳細資訊),SiATL從層的順序解凍中獲益:微調附加參數,在沒有嵌入層的情況下微調預訓練參數,並訓練所有層直到收斂。作者還仔細選擇了優化器:小學習率的隨機梯度下降(SGD)用於微調,Adam用於隨機初始化的LSTM和分類層,用於更快的訓練。雖然沒有超過最先進的(SOTA),SiATL優於更複雜的遷移學習方法,特別是在小數據集上。

最後,我們將提到一些可用於遷移學習的預先訓練模型的來源:

  • TensorFlow Hub(https://www.tensorflow.org/hub)
  • PyTorch Hub(https://pytorch.org/hub)
  • AllenNLP(https://allennlp.org/)
  • Fast.ai(http://fast.ai/)
  • HuggingFace.(https://huggingface.co/)

不同粒度

特徵學習的一個重要因素是模型運行在的基礎單元。「One Size Does Not Fit All: Comparing NMT Representations of Different Granularities」的作者把特徵單元分為四種:單詞、位元組對編碼(byte-pair encoding)單元、形態單元(Morfessor)(https://github.com/aalto-speech/morfessor)

和字母。BPE把單詞分為symbols(symbols是一串字母),然後迭代地用一個新的symbol序列替換最頻繁的symbol序列。BPE分割在神經機器翻譯(NMT)中非常流行。Morfessor分裂成形態單位,如詞根和後綴。

作者評估了NMT派生的嵌入品質,這些嵌入源於不同粒度的單元,用於建模形態學、語法和語義(而不是像情感分析和問答這樣的最終任務)。他們的方法從訓練的基於LSTM的NMT模型的編碼器中提取特徵表示,然後訓練Logistic回歸分類器對輔助任務進行預測。

作者得出以下結論:

  • 特徵單位表現的好壞與目標任務相關
  • 從子詞單元派生的表示形式更適合於建模語法(即,長期依賴關係);
  • 基於字元的表示顯然更適合於形態學建模;
  • 基於字元的表示對拼寫錯誤非常健壯;
  • 使用不同表示的組合通常效果最好。

拼寫錯誤容忍字嵌入

標準的word2vec方法通常不能很好地表示格式錯誤的單詞及其正確的對應詞(我們通常喜歡為它們提供類似的嵌入),這是實際應用中的一個嚴重缺陷。雖然FastText包含了用於學習單詞嵌入的字元n-grams,但通過設計,它傾向於捕獲語素,而不是拼寫錯誤。在「Misspelling Oblivious Word Embeddings」一文中,Facebook人工智慧研究人員介紹了MOE,這是一種學習單詞嵌入的簡單方法,它可以抵抗拼寫錯誤。他們用拼寫更正目標擴展了FastText目標。

他們擴展了FastText目標,帶一個拼寫正確目標Lₛ 。(wₘ, wₑ) ∈ M,其中wₑ是正確拼寫,wₘ是它的錯誤品系。N是negative samples。l(x) = log (1 + e⁻ˣ) 是邏輯損失函數。評分函數如下定義:

繼續:

其中第一部分是基於wₘ的wₑ的可能性。由標準SGD和常規的FastText丟失函數聯合訓練,通過加權和將兩者結合起來。單詞相似度和單詞類比任務的實驗表明,雖然FastText確實能夠捕獲較低編輯距離的拼寫錯誤,但MOE更擅長捕獲較遠的示例。這篇論文還附帶了一個很好的獎勵——從Facebook的搜索查詢日誌中收集的超過2000萬條修正數據集。實驗是在英語數據集上進行的。多種語言的支援留給以後的工作。

語境詞嵌入

與傳統的上下文無關的單詞嵌入相比,上下文單詞嵌入通過動態地將單詞鏈接到不同的上下文,提供了更豐富的語義和句法表示。構建和重用上下文單詞嵌入有兩種有效的方法:基於特徵(例如ELMo)和微調(ULMFiT、OpenAI的GPT和Google AI的BERT),而在微調時使用基於特徵的模式更有效。

ELMo(https://arxiv.org/pdf/1802.05365.pdf)預先訓練了一個基於LSTM的雙向字元級語言模型,並提取上下文單詞向量作為隱藏狀態的學習組合(參見圖4)。對於下游任務,這些單詞嵌入被用作輸入,而不做任何更改(因此,它們就像功能一樣)。自2018年出版以來,ELMo在6項不同的NLP任務中展示了最新的(SOTA)結果。

圖 4

因此,我們簡要介紹了預訓練的最佳微調方法。與基於特徵的方法不同,微調提供了將語言模型與特定領域的語料庫甚至下游任務相匹配的能力,保留了來自初始大型語料庫的一般知識。

例如,ULMFiT [code(https://github.com/fastai/fastai),tutorial(https://github.com/fastai/fastai/blob/master/examples/ULMFit.ipynb)] 預先訓練Salesforce的AWD-LSTM(https://github.com/salesforce/awd-lstm-lm)單詞級語言模型(參見圖5),並使用不同的適應技術(逐步解凍層和傾斜三角形學習率的區分微調)分兩個階段對訓練的語言模型進行微調。ULMFiT在6個分類數據集上顯示了SOTA。

圖 5

Generative Pretrained Transformer (GPT)( https://github.com/openai/gpt-2)預先訓練大型12層左右變換器(見圖6)和句子、句子對和多項選擇題的微調。下游任務的靈活性是通過將任務的結構線性化為一系列令牌來實現的。GPT在9個不同的NLP任務中達到了SOTA,其更大的模型GPT-2以其令人震驚的良好文本生成應用獲得了廣泛的關注。

圖 6

「BERT: Pre-training of Deep Bidirectional

Transformers for Language Understanding」 (https://www.aclweb.org/anthology/N19-1423)描述了作為GPT發展的以下的方法(圖7):使用maskedLM和next sentence prediction預訓練句子和語境詞特徵。masking提供了在單詞預測期間同時包含左上下文和右上下文的能力。

BERT模型有令人印象深刻的340M參數和24層。BERT是目前最有用的預訓練機制(然而,最近的XLNet[https://arxiv.org/abs/1906.08237],聲稱BERT在20個NLP任務上的性能優於BERT,值得一看)。

圖 7

跨語言詞向量

多語言嵌入已經被證明是在許多NLP任務中實現跨語言傳輸的一種很有前途的方法。實現這一目標主要有兩種正交方法。第一種是跨語言多語言預訓練:通過在多種語言中訓練一個模型,跨語言共享辭彙和表示。雖然它易於實現,但它常常導致低資源語言的表示不足。這種方法的顯著例子包括Facebook Research的LASER(https://github.com/facebookresearch/LASER)和Google AI的多語言BERT(https://github.com/google-research/bert/blob/master/multilingual.md)。

其次,為每種感興趣的語言獨立地訓練單詞嵌入,然後將這些單語單詞嵌入對齊。例如,Facebook Research的MUSE(https://github.com/facebookresearch/MUSE)為FastText令牌級嵌入實現了這種方法。「Cross-Lingual Alignment of Contextual Word Embeddings, with Applications to Zero-shot Dependency Parsing」 提出了一種基於ELMo的上下文詞嵌入對齊方法。有趣的是,來自不同單詞的點雲在實踐中被很好地分離,因此作者引入了一個嵌入錨eᵢ作為單詞i的點雲的質心。空間結構的另一個有趣的特性是同音點雲的多模態(見圖8)。

圖 8 對英文單詞bear的語境詞和它的可能的兩種西班牙語翻譯(“oso』』藍色表示,“tener』』紅色表示)

也就是說,當一個單詞i有多個不同的意義時,人們可能會期望i的嵌入通過將其分成多個不同的雲來反映這一點,每個雲對應一個意思。該方法採用了兩種著名的上下文無關對齊方法(Mikolov等人(2013)和MUSE),用嵌入錨替換詞向量:

  • 有監督設置:通過給定的單詞詞典在源語言和目標語言之間進行監督。然後,將問題歸結為求矩陣之間的最佳線性變換(即幾何縮放、旋轉、反射等)的正交Procrustes問題:

接近的表示為,W^s→t = UVᵗ,其中U和V列是源和目標的專制的嵌入矩陣的乘法的左、右奇異向量:

  • 無監督設置:當詞典由MUSE中實現的對抗性框架自動生成時,採用第一種方法。

作者已經證明,這些對齊的嵌入提供了良好的單詞翻譯(包括低資源語言,如哈薩克語),並在最新的zero-shot 和few-shot跨語言依賴性分析模型上顯著改進。

感謝Grigory Sapunov 和Mikhail Obukhov幫助的回饋。

原文標題:

NAACL 』19 Notes: Practical Insights for Natural Language Processing Applications

原文鏈接:

https://medium.com/orb-engineering/naacl-19-notes-practical-insights-for-natural-language-processing-applications-part-i-5f981c92af80

編輯:於騰凱

(*本文為AI科技大本營轉載文章,轉載請聯繫原作者)