1. 程式人生 > >NLP---將改變您在未來的溝通方式的7種 nlp 技術 (第一部分(附原始論文))

NLP---將改變您在未來的溝通方式的7種 nlp 技術 (第一部分(附原始論文))

前面的那麼多NLP演算法大多數都是傳統的自然語言處理的演算法思想,還沒和深度學習神經網路結合起來,本想打算開始更新一些基於深度學習的NLP處理方面的,在瀏覽國外部落格時發現了一篇很好的文章,因此這裡翻譯一下,發到這裡,大家先看看NLP是如何和深度學習結合在一起的,然後針對幾個方向繼續學習,後面也會簡單介紹一下今年的NLP的進展,詳細的細節本人打算在實戰時在寫,因為他的實用性太強了,單純的講解理論很乏味,而且那些深度學習方面的都在前面總結了,只是這裡拿來直接使用了,因此大家可以根據自己的情況進行選擇,我打算這裡放到實戰部分,好了,廢話不多說,下面開始:

什麼是NLP?

自然語言處理(NLP) 

是電腦科學,人工智慧和語言學交叉領域的一個領域。目標是計算機處理或“理解”自然語言,以執行語言翻譯和問答的任務。

隨著語音介面和聊天機器人的興起,NLP是資訊時代最重要的技術之一,也是人工智慧的重要組成部分。充分理解和表達語言的意義是一個非常困難的目標。為什麼?因為人類的語言很特別。

人類語言有什麼特別之處?實際上有幾件事:

  • 人類語言是專門用於傳達說話者/作者意義的系統。這不僅僅是一個環境訊號,而是一個刻意的溝通。此外,它使用小孩子可以快速學習的編碼; 它也會改變。
  • 人類語言大多是離散/符號/分類訊號系統,可能是因為訊號可靠性更高。
  • 語言的分類符號可以被編碼為用於以幾種方式進行通訊的訊號:聲音,手勢,書寫,影象等。人類語言能夠是這些中的任何一種。
  • 人類語言含糊不清(與程式設計和其他形式語言不同); 因此,在向人類語言表達,學習和使用語言/情境/語境/詞彙/視覺知識方面存在高度複雜性。

為何學習NLP?

從這個研究領域衍生出來的快速增長的有用應用程式集合。它們的範圍從簡單到複雜。以下是其中一些:

  • 拼寫檢查,關鍵字搜尋,查詢同義詞。
  • 從網站提取資訊,例如:產品價格,日期,地點,人員或公司名稱。
  • 分類:學校文字的閱讀水平,較長檔案的正面/負面情緒。
  • 機器翻譯。
  • 口語對話系統。
  • 複雜的問題回答。

實際上,這些應用已在工業中得到廣泛應用:從搜尋(書面和口頭)到線上廣告匹配 ; 從自動/輔助翻譯

到市場營銷或金融/交易的情緒分析 ; 從語音識別聊天機器人/對話代理(自動化客戶支援,控制裝置,訂購商品)。

深度學習

大多數這些NLP技術都是由深度學習  - 機器學習的子領域提供支援。深度學習在本十年初才開始再次獲得動力,主要是由於以下情況:

  • 更多的培訓資料。
  • 更快的機器和多核CPU / GPU。
  • 具有高階功能和改進效能的新模型和演算法:更靈活地學習中間表示,更有效的端到端聯合系統學習,更有效的使用上下文和在任務之間轉換的學習方法,以及更好的正則化和優化方法。

大多數機器學習方法都能很好地工作,因為人工設計的表示和輸入功能,以及權重優化,以便最好地進行最終預測。另一方面,在深度學習中,表示學習試圖從原始輸入中自動學習好的特徵或表示。機器學習中手動設計的功能通常是過度指定的,不完整的,並且需要很長時間來設計和驗證。相比之下,深度學習的學習特徵易於適應和快速學習。

深度學習提供了一個非常靈活,通用且可學習的框架,用於表示視覺和語言資訊的世界。最初,它在語音識別和計算機視覺等領域取得了突破。最近,深度學習方法在許多不同的NLP任務中獲得了非常高的效能。這些模型通常可以使用單個端到端模型進行培訓,而不需要傳統的,針對任務的特徵工程。

我最近完成了斯坦福大學有關深度學習的自然語言處理CS224n課程。該課程全面介紹了應用於NLP的深度學習的前沿研究。在模型方面,它涵蓋了單詞矢量表示,基於視窗的神經網路,遞迴神經網路,長短期記憶模型,遞迴神經網路和卷積神經網路,以及一些涉及儲存器元件的最新模型。

在程式設計方面,我學會了實現,訓練,除錯,視覺化和發明我自己的神經網路模型。在這個由兩部分組成的系列中,我想分享我學到的7種主要NLP技術,以及使用它們的主要深度學習模型和應用程式。

  • 快速注意:您可以在此GitHub Repo上訪問CSS 224的講座和程式設計作業。

技術1:文字嵌入

在傳統的NLP中,我們將單詞視為離散符號,然後可以用one-hot向量表示。向量的維度是整個詞彙表中的單詞數。單詞作為離散符號的問題在於,對於one-hot向量沒有自然的相似概念。因此,替代方案是學習編碼向量本身的相似性。核心思想是,一個詞的含義是由經常出現的詞語的上下文給出的

文字嵌入是字串的實值向量表示(這個就是我們在前面word2vec的表示方法,這裡建議大家把Word2vec研究透徹,這裡的文字嵌入就是Distributed representation)。我們為每個單詞構建一個密集向量,選擇它使得它類似於出現在類似上下文中的單詞向量。Word嵌入被認為是大多數深度NLP任務的一個很好的起點。它們允許深度學習在較小的資料集上有效,因為它們通常是深度學習架構的第一個輸入,也是NLP中最流行的傳遞學習方式。在Word中的嵌入最流行的名字Word2vec由谷歌(Mikolov)和由斯坦福大學(彭寧頓,Socher和曼寧)研發的。讓我們深入研究這些單詞表示:

Word2vec中我們有一個大的文字語料庫,其中固定詞彙表中的每個單詞都由一個向量表示。然後我們遍歷文字中的每個位置t,其具有中心詞c和上下文詞o。接下來,我們使用用於字向量的相似性ÇÒ計算的概率ø給出Ç(或反之亦然)。我們不斷調整單詞向量以最大化這個概率。

為了有效地訓練Word2vec,我們可以從資料集中消除無意義(或更高頻率)的單詞(例如atheofthen ...)。這有助於提高模型準確性和訓練時間。此外,我們可以通過更新所有正確標籤的權重來為每個輸入使用負抽樣,但僅限於少量不正確的標籤。

Word2vec有2個模型變體值得一提:

Skip-Gram:我們考慮一個包含k個連續項的上下文視窗。然後我們跳過這些單詞中的一個,並嘗試學習一個神經網路,除了跳過的單詞之外的所有術語,並預測跳過的術語。因此,如果2個單詞在大型語料庫中重複共享相似的上下文,則這些術語的嵌入向量將具有緊密向量。

CBOW(連續詞袋模型):我們在大型語料庫中使用了大量的句子。每當我們看到一個單詞時,我們都會使用周圍的單詞。然後我們將上下文單詞輸入到神經網路中,並預測該上下文中心的單詞。當我們有數千個這樣的上下文單詞和中心單詞時,我們有一個神經網路資料集的例項。我們訓練神經網路,最後編碼的隱藏層輸出表示特定單詞的嵌入。碰巧的是,當我們在大量句子上訓練時,類似上下文中的單詞會得到類似的向量。

 對Skip-Gram和CBOW的一個缺點是它們都是基於視窗的模型,這意味著語料庫的全域性統計資料沒有被有效使用,導致嵌入次優。該GloVe模型旨在通過捕捉一個字與整個觀測語料庫的結構嵌入的含義來解決這個問題。要做到這一點,該GloVe模型旨在通過捕捉一個字與整個觀測語料庫的結構嵌入的含義來解決這個問題。為此,該模型訓練單詞的全域性共現計數,並通過最小化最小二乘誤差充分利用統計資料,並因此產生具有有意義子結構的單詞向量空間。這樣的輪廓足以保留單詞與向量距離的相似性。

除了這兩個文字嵌入,最近開發了許多更高階的模型,包括FastTextPoincare Embeddingssense2vecSkip-ThoughtAdaptive Skip-Gram。我強烈建議你閱讀一下。

技術2:機器翻譯

機器翻譯是語言理解的經典測試。它包括語言分析和語言生成。大型機器翻譯系統具有巨大的商業用途,因為全球語言是每年400億美元的行業。給你一些值得注意的例子:

  • 谷歌翻譯每天翻譯 1000億字。
  • Facebook使用機器翻譯自動翻譯帖子和評論中的文字,以打破語言障礙,讓世界各地的人們相互溝通。
  • eBay使用機器翻譯技術實現跨境貿易,並連線世界各地的買家和賣家。
  • Microsoft為Android,iOS和Amazon Fire上的終端使用者和開發人員提供了人工智慧翻譯,無論他們是否可以訪問網際網路。
  • Systran成為第一家在2016年推出30多種語言的神經機器翻譯引擎的軟體提供商。

在傳統的機器翻譯系統中,我們必須使用平行語料庫 - 一組文字,每個文字被翻譯成一種或多種其他語言而不是原文。例如,給定源語言f(例如法語)和目標語言e(例如英語),我們需要構建多個統計模型,包括使用貝葉斯規則的概率公式,訓練的翻譯模型p(f | e)平行語料庫和在僅英語語料庫上訓練的語言模型p(e)。

毋庸置疑,這種方法跳過了數百個重要的細節,需要大量的人工特徵工程,包含許多不同的和獨立的機器學習問題,而且總體來說是一個非常複雜的系統。

神經機器翻譯是通過一個大型人工神經網路 (稱為遞迴神經網路(rnn)) 對整個過程進行建模的方法。rnn 是一個有狀態的神經網路, 它在其中具有通過、通過時間的連線之間的連線。神經元不僅從上一層提供資訊, 而且從以前的過去提供資訊。這意味著, 我們為網路提供投入和訓練網路的順序很重要: 給它餵食 "唐納德", 然後給它喂 "特朗普",和給它喂 "特朗普",在給它喂 "唐納德", 可能會產生不同的結果。

標準神經機器翻譯是一種端到端神經網路, 源句由一個稱為編碼器的rnn 編碼, 目標單詞使用另一個稱為解碼器的rnn 進行預測。rnn 編碼器一次讀取一個源句子, 然後結尾處是隱藏狀態的整個源句子。rnn 解碼器使用反向傳播來了解此摘要並返回翻譯的版本。令人驚訝的是, 神經機器翻譯從2014年的邊緣研究活動變成了2016年廣泛採用的領先翻譯方式。那麼, 使用神經機器翻譯的最大贏家是什麼呢? 

  1. 端到端培訓:NMT中的所有引數同時進行優化,以最大限度地減少網路輸出的損耗功能。
  2. 分散式表示共享強度:NMT可以更好地利用單詞和短語的相似性。
  3. 更好地探索背景:NMT可以使用更大的背景 - 包​​括源文字和部分目標文字 - 來更準確地進行翻譯。
  4. 更流暢的文字生成:深度學習文字生成的質量遠高於並行語料庫。

rnn 的一個大問題是梯度消失或者梯度爆炸問題, 在這個問題上, 根據所使用的啟用函式, 資訊會隨著時間的推移迅速丟失。從直覺上看, 這不會是一個很大的問題, 因為這些只是權重, 而不是神經元狀態, 但通過時間的權重實際上是過去資訊的儲存位置;如果權重達到0或 1, 000, 000 的值, 則以前的狀態不會非常資訊。因此, rnn 在序列中很遠的地方記憶前幾個單詞會遇到困難, 只能根據最新的單詞做出預測。(這裡大家需要深入理解RNN,我在深度學習系列講解的很詳細,大家可以檢視我的這篇文章

長/短期記憶(LSTM)網路試圖通過引入門和明確定義的儲存器單元來對抗消失/爆炸梯度問題。每個神經元都有一個儲存單元和三個門:輸入,輸出和遺忘。這些門的功能是通過停止或允許資訊流來保護資訊。

  • 輸入門決定了前一層中有多少資訊儲存在單元格中。
  • 輸出層在另一端接受作業,並確定下一層有多少資訊影響該單元的狀態。
  • 忘記門在開始時似乎是一個奇怪的包含但有時候忘記是好的:如果它正在學習一本書並開始新章節,那麼網路可能有必要忘記前一章中的一些字元。

已經證明LSTM能夠學習複雜的序列,例如像莎士比亞一樣寫作或者創作原始音樂。請注意,這些門中的每一個都對前一個神經元中的細胞具有權重,因此它們通常需要更多資源來執行。LSTM目前非常時髦,並且已經在機器翻譯中使用了很多。除此之外,它是大多數序列標記任務的預設模型,它具有大量的資料。

門控遞迴單位(GRU)是LSTM的略微變化,也是神經機器翻譯的擴充套件。它們只有少一個門,並且接線略有不同:它們具有更新門,而不是輸入,輸出和忘記門。此更新門確定從上一個狀態保留多少資訊以及從前一個層輸入多少資訊。

復位門的功能與LSTM的忘記門非常相似,但它的位置略有不同。他們總是發出他們的完整狀態 - 他們沒有輸出門。在大多數情況下,它們的功能與LSTM非常相似,最大的區別在於GRU稍微更快,更容易執行(但表現力稍差)。在實踐中,這些往往會相互抵消,因為您需要一個更大的網路來重新獲得一些表現力,這反過來取消了效能優勢。在某些不需要額外表達能力的情況下,GRU可以勝過LSTM。

除了這三個主要架構外, 神經機器翻譯系統在過去幾年裡還有了進一步的改進。以下是最顯著的發展:

  • 利用神經網路進行序列學習的序列化證明了 lstm 在神經機器翻譯中的有效性。它提出了一種通用的端到端序列學習方法, 對序列結構進行最小的假設。該方法使用多層長期短期記憶體 (lstm) 將輸入序列對映到固定維度的向量, 然後再將另一個深層 lstm 從向量解碼目標序列。
  • 通過聯合學習對齊和翻譯進行神經機器翻譯引入了 nlp 中的注意機制 (將在下一篇文章中介紹)。作者承認使用固定長度向量是提高 nmt 效能的瓶頸, 因此建議通過允許模型自動 (軟) 搜尋源句中與預測目標詞相關的部分來擴充套件這一點,而不必將這些部分顯式地形成硬段。
  • 用於神經機器翻譯的卷積超過遞迴編碼器, 通過額外的卷積層增強 nmt 中的標準 rnn 編碼器, 以捕獲編碼器輸出中更寬的上下文。
  • 谷歌建立了自己的 nmt 系統, 稱為谷歌的神經機器翻譯, 解決了許多問題的準確性和易於部署。該模型由一個深的 lstm 網路組成, 其中包含8個編碼器和8個解碼器層, 使用剩餘連線以及從解碼器網路到編碼器的注意力連線。
  • facebook ai 研究人員使用卷積神經網路對 nmt 中的學習任務進行排序, 而不是使用遞迴神經網路。

技巧3:對話和對話

有很多關於會話AI的文章,其中大部分都集中在垂直聊天機器人,信使平臺,商業趨勢和創業機會上(想想亞馬遜Alexa,Apple Siri,Facebook M,Google智慧助理,微軟Cortana)。AI理解自然語言的能力仍然有限。因此,建立全自動,開放式域名會話助理仍然是一個開放的挑戰。儘管如此,下面顯示的工作對於想要在對話AI中尋求下一個突破的人來說是一個很好的起點。

 

來自蒙特利爾、佐治亞理工、微軟和 facebook 的研究人員構建了一個能夠產生上下文相關對話響應的神經網路.這種新穎的響應生成系統可以在大量非結構化推特對話中進行端到端培訓。經常神經網路體系結構用於解決將上下文資訊整合到經典統計模型時出現的稀疏問題, 從而使系統能夠考慮到以前的對話方塊話語。該模型在上下文相關和非上下文相關的機器翻譯和資訊檢索基線上顯示出一致的增益。

神經響應機(nrm) 是在香港開發的一種基於神經網路的短文字對話響應生成器。它採用通用的編碼解碼器框架。首先, 它將響應的生成形式化為基於輸入文字的潛在表示的解碼過程, 同時利用遞迴神經網路實現編碼和解碼。nrm 接受了從微博服務中收集的大量一輪對話資料的培訓。實證研究表明, nrm 可以對超過75% 的輸入文字產生語法正確和內容上適當的響應, 在相同的環境中表現優於現有技術。

最後但同樣重要的是,Google的神經對話模型是一種簡單的會話建模方法。它使用序列到序列框架。模型通過預測給定對話中的前一句子的下一句子進行交談。模型的優勢在於它可以端到端地進行訓練,因此需要更少的手工製作規則。

在給定大型會話訓練資料集的情況下,該模型可以生成簡單的對話。它能夠從特定於域的資料集以及電影字幕的大型,嘈雜和通用域資料集中提取知識。在特定於域的IT幫助臺數據集上,模型可以通過對話找到技術問題的解決方案。在嘈雜的開放域電影抄本資料集上,該模型可以執行簡單形式的常識推理。

這是第一部分的結束。在下一篇文章中,我將回顧剩下的4種自然語言處理技術,並討論該領域的重要限制和擴充套件。敬請關注!

編者注:想要了解有關機器學習如何影響語言的更多資訊?檢視這些有用的Heartbeat資源:

原文連結:點選(需要翻牆)