參與 | 林椿眄、劉暢、彭碩
算法
編輯 | Donna Suisui數據庫
過去幾年,深度學習架構和算法在圖像識別和語音處理等領域取得了重大的進步。而在NLP(天然語言處理)領域,起初並無太大的進展。不過如今,NLP領域取得的一系列進展已證實深度學習技術將會對天然語言處理作出重大貢獻。一些常見的任務如實體命名識別,詞類標記及情感分析等,天然語言處理都能提供最新的結果,並超越了傳統方法。另外,在機器翻譯領域的應用上,深度學習技術所取得的進步應該是最顯著的。數組
這篇文章中,我將在經過一些深度學習技術來闡述2017年NLP領域所取得的一系列進步。相關的科技論文,框架和工具備不少,在這裏我沒辦法逐一列出,內容也不詳盡。我只是想和你們分享並介紹今年一系列我最喜歡的研究。網絡
我認爲,2017年是深度學習的一個重要年份,隨着深度學習技術在NLP領域中的應用不斷深刻且產生了使人驚喜的結果,全部的跡象都代表,NLP領域將在深度學習技術的輔助下繼續高效前進。架構
能夠說,詞嵌入模型(Word embedding)是深度學習技術在NLP領域最顯著的技術。他們遵循了Harris (1954) 提出的分佈式假說。根據這個假說可知,具備類似含義得此一般會出如今上下文的語境中。關於詞嵌入的詳細解釋,你也能夠閱讀Gabriel Mordecki的文獻。併發
諸如word2vec(Mikolov等,2013)和Glove(Pennington等,2014)等算法已經成爲NLP領域的表明性算法。儘管它們不能被認爲是深度學習技術在該領域的應用(word2vec中應用淺層神經網絡,而Glove是基於計數模型的一種算法),可是用他們訓練獲得的模型做爲大量深度學習模型的輸入,也是深度學習技術與天然語言處理領域相結合的一種常見方式。所以,目前在咱們領域中應用詞嵌入模型,一般被視爲是一種好的嘗試。框架
一開始,給定一個須要詞嵌入模型的NLP問題,咱們更但願在一個與領域相關的大語料庫中訓練咱們本身的模型。固然,這不是使用詞嵌入模型最好的方式,因此須要從預訓練模型開始慢慢進行。經過維基百科,Twitter,Google新聞,網頁抓取等數據的訓練,這些模型能夠很容易地讓你將詞嵌入模型整合到深度學習算法中去。分佈式
今年的研究進展證明了預訓練詞嵌入模型仍然是NLP領域的一個關鍵性的問題。例如,來自Facebook AI Research(FAIR)實驗室的fastText模型,用294種語言發佈預訓練好的模型向量,這是一項偉大的工做,對於咱們研究領域來講更是一重大的貢獻。除了大量的語言的使用,因爲fastText使用字符n-grams做爲語義特徵,使得該模型可以獲得很大的應用。函數
此外,fastText模型還能避免OOV問題(超出詞彙量問題),由於即便是一個很是罕見的詞(如特定領域的專業術語)也有可能與一個常見詞共享同一個n-gram字符。所以,從這個意義上來講,fastText模型比word2vec和Glove模型表現得更好,而且對於小數據庫有着更優的性能。
然而,儘管咱們能夠看到該領域一些進步,可是對這領域的研究還有很長一段路要走。例如,著名的NLP框架spaCy以本地的方式將詞嵌入模型和深度學習模型集成並應用到諸如NER和Dependency Parsing等NLP任務中,並容許用戶更新模型或使用本身的模型。
我認爲這是須要研究的東西。將來,對於這些易於應用到特定領域(諸如生物學,文學,經濟學等)的NLP框架來講,進行預訓練獲得模型是一種很是好的方式。根據咱們的狀況,以最簡單的方式對模型進行一系列的微調優化,來提升模型的性能。同時,一些適用於詞嵌入模型的方法也開始慢慢出現。
也許使用預訓練的詞嵌入模型的最大缺點是訓練數據與咱們問題中使用的實際數據之間存在詞分佈差距(word distributional gap)。這麼說吧,假設你有生物學論文集,食譜和經濟領域的研究文章,因爲你可能沒有足夠大的語料庫來訓練獲得良好性能的詞嵌入模型,因此你須要通用嵌入模型來幫助你改善研究結果。可是若是通用嵌入模型能夠進行調整並應用於你所須要的特定案例呢?
這個想法是簡單而又有效的。想象一下,咱們知道在源域中單詞w的詞嵌入是w_s。爲了計算w_t(目標域)的嵌入,做者向w_s添加了兩個域之間的必定量的傳輸。基本上,若是這個詞在這兩個領域出現的都很頻繁,那就意味着它的語義不具備領域依賴性。
在這種狀況下,因爲傳輸量很高,所以在兩個域中產生的詞嵌入趨勢是類似的。可是,對於特定領域的詞,會在一個領域出現的更頻繁,所須要傳輸的量是很小的。
關於詞嵌入的研究課題至今尚未獲得普遍的研究和探索,但我認爲在近期會獲得更多的關注。
今年,Ranford等人發現訓練模型中的單個神經元對於情感價值有着高度的預測性,爲進一步預測Amazon評論文本中的下一個字符,他們探索了字節級循環語言模型的特性。結果代表,這個單一的「情感神經元」的確可以至關準確地預測並將評論分類爲正負面。
注意到這種行爲以後,他們決定在 Stanford Sentiment Treebank數據庫上測試模型,並發現模型的準確性高達91.8%,而以前最好的模型準確度爲90.2%。這說明,使用不多的樣本,以無監督的方式進行訓練的模型,至少在一個特定但普遍研究的數據庫上獲得了最早進的情感分析結果。
工做中的情感神經元
因爲模型的表現是基於字符水平的,因此神經元在文本中改變了每一個字符的狀態,這是至關驚人的行爲。
例如,在一個單詞後面,神經元的值變爲強的正值,然而這種做用效果將隨着詞的消失而消失,這看起來也是有道理的。
生成帶極偏見性文本
固然,訓練好的模型仍然是一個有效的生成模型,因此它能夠用來生成相似Amazon評論的文本。可是,我以爲很棒的是,你能夠經過簡單地覆蓋情感神經元的價值來選擇生成樣本的極性。
文本生成示例(來源-https://blog.openai.com/unsupervised-sentiment-neuron/)
Krause等(2016)所選擇的NN模型是由Krause等人提出的乘式LSTM模型。這是由於他們觀察到,該模型的超參數設置方式能比正常的LSTM模型更快地收斂。它有4096個神經元,並用8200萬條Amazon的評論語料庫來進行訓練。
爲何訓練有素的模型可以準確地捕捉到情感概念中一些開放而迷人的問題呢。與此同時,你也能夠嘗試訓練本身的模型並進行實驗。固然,若是你有充裕的時間和GPU的話,那麼用四款NVIDIA Pasca GPUs,對這個特定的模型進行訓練,仍須要花費一個月時間才能完成。
不管是人們對企業品牌的評價,分析營銷活動的影響,仍是衡量上次競選期間民衆對希拉里·克林頓和唐納德·特朗普的總體感覺,Twitter的情感分析都是一個很是強大的工具。
SemEval 2017
Twitter上的情感分析已經引發了NLP研究人員的興趣,同時也獲得政治和社會科學界的普遍關注。這就是爲何自2013年以來,SemEval比賽都會提出一系列具體的任務。
今年的比賽共有48支參賽隊伍參與了競賽,表現出極大的熱情和興趣。爲了讓你更好地瞭解Twitter推出的SemEval比賽到底是什麼(http://www.aclweb.org/anthology/S17-2088),讓咱們來看看今年提出的五個子任務。
子任務A:給定一個推文,來判斷所表達的情緒是積極的、消極的仍是中性的。
子任務B:給定一個推文和一個話題,分兩種狀況下表達對這個話題的觀點:正面與負面。
子任務C:給定一個推文和一個話題,分五種狀況來表達對這個話題的觀點:強勢、弱勢、中性、弱確定性和強大的消極。
子任務D:給定一個關於某個話題的推文,評估推文在正性和負性類別中的分佈狀況。
子任務E:給定一組關於某個話題的推文,評估推文在五中情緒類別中的分佈狀況:強勢、弱勢、中性、弱弱及強大。
正如你所看到的,子任務A是最多見的任務,有38個團隊參與了這個任務的評估,而其餘的任務則更具挑戰性。今年有20支團隊使用了卷積神經網絡(CNN)和長短時間記憶網絡(LSTM)模型。此外,儘管SVM模型仍然很是流行,可是一些參賽隊伍都將它與神經網絡的方法或詞嵌入特徵相結合。
BB_twtr系統
今年讓我比較驚奇的發現是BB_twtr系統(Cliche,2017),它是一個純粹的深度學習系統,而且在英語的5個子任務中排名第一。 做者將10個CNN結構和10個biLSTM結構集合(ensemble)起來,採用不一樣的超參數和預訓練策略來進行訓練。
爲了訓練這些模型,做者使用了人工標註的推文(tweets)(給定一個數量級,子任務A有49,693個),而且構建了一個包含1億條推文的未標記數據集,這個數據集只是經過簡單的標記一條推文來獲取,好比表示推文內容積極的表情符號是:-),對於內容消極的推文就是相反的表情。這些推文中的小寫,標記,URL和表情符號被替換爲特定的標記 (, , etc.),而且字符重複的內容將會統一,例如,「niiice」和「niiiiiiiice」變成「niice」。
爲了對用做CNN和biLSTM結構輸入的單詞嵌入信息進行預訓練,做者在未標記的數據集上使用了word2vec,GloVe和fastText(所有使用默認設置)詞向量。而後他使用距離數據集(distant dataset)來提煉嵌入特徵是爲了增長做用力信息,而後使用人工標記的數據集再次提取它們的特徵。
做者使用之前的SemEval數據集進行實驗代表,使用GloVe詞向量會下降性能,並且對於全部好的數據集都沒有惟一的最佳模型。 而後做者將全部模型與軟投票策略結合起來。 由此產生的模型結果比2014年和2016年的歷史最好的歷史成績更勝一籌,並且也與其餘年份很是接近。最後,它在2017天然語言競賽 SemEval 數據集5子任務中排名第一。
即使這種組合採起的簡單的軟投票策略並不能看做是一種有效的方式,可是這項工做代表了將深度學習模型結合起來的可能性,以及一種幾乎端到端的方法(輸入必須通過預處理 )。而且是在Twitter的情感分析中是能夠超越監督方法的。
自動歸納和自動翻譯同樣,是最先的NLP任務之一。目前有兩種主要的方法:基於提取的方法,其歸納是經過從源文本中提取最重要的段而創建的,而基於抽象的方法則是經過生成文原本構建歸納。
從發展歷史上看,基於提取的方法是最經常使用的,由於它們比基於抽象的方法簡單。在過去的幾年裏,基於RNN的模型在文本生成方面取得了驚人的成果。它們在簡短的輸入輸出文本上表現得很是好,可是對於長文本每每是不連貫和重複的。
在Paulus等人的工做中,他們提出了一種新的神經網絡模型來克服這個侷限性。結果使人興奮,以下圖所示
生成歸納的模型說明(https://einstein.ai/research/your-tldr-by-an-ai-a-deep-reinforced-model-for-abstractive-summarization)
做者使用了一個biLSTM編碼器來讀取輸入和一個LSTM解碼器來產生輸出。他們的主要貢獻是一種新的內部注意(intra-attention)策略,這種策略是分別關注輸入和連續產生的輸出,和一種結合了標準的有監督的詞預測和強化學習的新的訓練方法。
內部注意策略
提出內部注意策略的目的是爲了不輸出中的重複。爲了達到這個目的,它們在解碼時使用時間上的注意力來查看輸入文本的已輸入片斷,而後決定下一個將要產生的字。這迫使模型在生成過程當中使用輸入的不一樣部分。他們還容許模型訪問解碼器之前的隱藏狀態。而後將這兩個函數組合起來,爲輸出歸納選擇最好的下一個單詞。
強化學習
爲了建立一個歸納,須要兩個不一樣的人使用不一樣的單詞和句子順序,這兩個歸納纔可能被認爲是有效的。所以,一個好的歸納不必定非要是儘量匹配訓練數據集中單詞序列的序列。
因爲知道這一點,做者沒有采用標準的教師強迫算法來使每一個解題步驟的損失最小化,而是依靠強化學習策略,而且證實了這是一個很好的選擇。
幾乎是端到端模型最好的結果
該模型在美國有線電視新聞網和每日郵報數據集上進行了測試,並取得了最早進的成果。此外,一項帶有人類評估者的具體實驗結果也顯示了人類對於生成的文本在可讀性和質量方面的提升。
這些結果是使人欽佩的,該模型的基本預處理過程是:輸入文本進行分詞,小寫字母,數字用「0」替換,而後刪除數據集中一些特定的實體。
雙語詞典概括,即用兩種語言的源語和單語語料庫來識別單詞翻譯對,這實際上是一個古老的NLP任務。自動生成的雙語詞典有助於其餘的NLP任務,如信息檢索和統計機器翻譯。 然而,這些方法大部分時間都依賴於某種資源,一般是一個初始的雙語詞典,可是這個詞典並不老是可用或者很容易創建。
隨着詞嵌入方法的成功,跨語言詞嵌入的設想也出現了,目標是對齊嵌入空間而不是詞典。 不幸的是,第一種方法也依賴於雙語詞典或平行的語料庫。Conneau等(2018)提出了一個很是超前的方法,它不依賴於任何特定的資源,而且在多個語言對(language pairs)的語言翻譯,句子翻譯檢索和跨語言單詞類似性三個任務上優於現有的監督方法。
做者開發的方法是將輸入的兩組單詞嵌入在單語數據上進行獨立訓練來學習它們之間的映射,使得翻譯後的內容在空間上接近。他們使用fastText詞向量是在維基百科文檔上訓練出無監督的詞向量。
如下圖片詮釋了他們的核心想法:
創建兩個詞在嵌入空間之間的映射(https://arxiv.org/abs/1710.04087)
紅色的X分佈是英語單詞的嵌入,藍色的Y分佈是意大利語單詞的分佈。
首先,他們使用對抗學習來學習用於第一次原始對齊的旋轉矩陣W.。他們根據Goodfellow等人在2014年提出的想法,主要是是訓練了一個生成對抗網絡(GAN)。要了解GAN是如何工做的,我建議你讀這篇由Pablo Soto撰寫的文章。
爲了在對抗學習方面對問題進行建模,他們將判別器定義爲肯定的角色,給定從WX和Y隨機採樣的一些元素(參見上圖中的第二列),每一個元素表明一種語言。而後,他們訓練W以防止判別器作出好的預測。
這在我看來很是聰明和優雅的作法,而且直接得出的結果也是至關不錯的。
以後,他們再採用了兩個步驟來完善整個映射。第一個步驟是爲了不映射計算中由罕見字引入的噪聲。另外一個步驟是爲了使用學習的映射和距離度量來創建實際的翻譯。
在某些狀況下的結果是很是好的。 例如,對於英語—意大利語之間單詞的翻譯,在P @ 10的狀況下,他們賽過了最佳平均精確度近17%。
英語-意大利語單詞翻譯的平均精度。
做者聲稱,他們的方法能夠看做是邁向了無監督機器翻譯的第一步。咱們能夠看一看這個新的有前景的方法到底能走多遠。
通用的DL框架和工具備不少種,好比說被普遍應用的Tensorflow,Keras還有PYTorch。不過,具體到開源的NLP方向的DL框架和工具卻剛嶄露頭腳。今年對咱們來講是很是棒的一年,由於有不少有用的開源框架已經在社區裏實現了。這其中有三個框架吸引了個人注意力,我以爲各位確定也會很是感興趣。
Allen NLP:
Allen NLP 框架是創建在PyTorch之上的平臺,設計之初的目的是爲了在語義NLP的任務中用起來更簡單。它的目的是讓研究者可以設計和評價新的模型。它包括了通用語義NLP任務中的模型的參考實現,這些任務包括語義角色標籤、文本蘊含以及共指消解。
Parl AI:
Parl AI框架是一個針對對話研究的開源軟件平臺。該平臺是用Python來實現的,旨在爲分享、訓練以及對話模型測試提供一個聯合框架。ParlAI提供了一個很是簡單的能夠與亞馬遜的Mechanical Turk合併機制。它也提供了當下很流行的數據集而且支持好幾種模型,包括神經模型,例如:記憶網絡、seq2seq和LSTMs。
Open NMT:
OpenNMT工具集是一個通用的針對序列到序列的模型的框架。它能夠用來執行機器翻譯、總結以及圖像到文字、語音識別的任務。
DL技術的使用在解決NLP問題中的穩步增加是無可置疑的。最能說明的一個指標就是過去幾年中,深度學習論文中使用關鍵NLP會議中的佔比的變化,例如ACL、EMNLP、EACL和NAACL。
深度學習論文的比例
然而,真正的端到端的學習纔剛剛開始。咱們正在處理典型的NLP任務來爲數據集作準備,例如,清理,標記化或者一些實體的統一(例如:URL,數字、電子郵箱等)。咱們也用通用的嵌入式,缺點就是它們不能抓住特殊領域的關鍵詞的重要性,並且它們在多文字表達中表現的很糟糕,這是我在工做的項目中反覆發現的一個關鍵問題。
對應用於NLP的深度學習來講,今年是很是不錯的一年,但願2018年能有更多端到端的學習著做,能有更多趨於成熟的開源框架。你能夠在評論區和咱們盡情分享你對這些著做和框架的思考和意見,更歡迎你分享本文沒有提到的框架和著做。
延伸閱讀
更多深度學習在NLP研究中的應用趨勢相關信息,強烈推薦這篇論文 「Recent Trends in Deep Learning Based Natural Language Processing」 by Young et al. (2017).參考
From Characters to Understanding Natural Language (C2NLU): Robust End-to-End Deep Learning for NLP Phil Blunsom, Kyunghyun Cho, Chris Dyer and Hinrich Schütze (2017)原文地址:https://tryolabs.com/blog/2017/12/12/deep-learning-for-nlp-advancements-and-trends-in-2017/