历史回顾——NLP问题解决方案的演变史
摘要:?回顧NLP問題的解決方案,探尋當下最流行的NLP技術,激發NLP問題新的解決方案!
NLP-深度學習時代之前:
在深度學習來臨之前的日子里,在自然語言處理算法(NLP)領域出乎意料地有許多相對成功的經典挖掘算法,對于像垃圾郵件過濾或詞類標記問題可以直接使用可解釋的模型來解決它們。
但并非所有問題都可以通過這種方式解決,簡單的模型不能充分捕捉語境或反語等細微語言要點。基于總體概括的算法(例如,文字袋(bag-of-words))證明了不足以捕捉文本的連續性,而n-gram努力克服這些困難,但受到維度災難的嚴重影響。即使是基于HMM的模型也無法克服這些問題,因為它們是無記憶。
第一個突破——Word2Vec:
語言分析的主要挑戰之一是將文本轉換為數字輸入的方式,只有完成這一步才能使得建模變得可行。在計算機視覺任務中這不是問題,因為在圖像中,每個像素都用三個數字來表示,這三個數字描繪了三種基色的飽和度。多年來,研究人員嘗試了大量算法來尋找所謂的嵌入,通常指的是將文本表示為矢量。起初,這些方法中的大多數是基于計數單詞或短序列的單詞(n-gram)。
解決這個問題的最初方法是單熱編碼,其中來自詞匯表的每個單詞被表示為僅具有一個非零的唯一二進制向量。一個簡單的概括是編碼n-gram(連續n個單詞的序列)而不是單個單詞。這種方法的主要缺點是非常高的維度,每個矢量都有詞匯的大小(或者在n-gram情況下甚至更大),這使得建模變得困難。這種方法的另一個缺點是缺乏語義信息,這意味著代表單個單詞的所有矢量是等距的。在這種嵌入中,空間同義詞就像完全不相關的單詞一樣遠離彼此。使用這種類型的詞語表達可能會使得任務變得更加困難,因為它會迫使你的模型記憶特定的單詞而不是試圖捕獲語義。
自然語言處理算法的第一個重大飛躍發生在2013年,隨著Word2Vec的推出——一種專門用于生成嵌入的基于神經網絡的模型。想象一下,從一系列單詞開始,去除中間單詞,并通過查看上下文單詞(例如CBOW的連續袋)來預測它。該模型的另一個版本是要求預測中間詞(skip-gram)的上下文)。這個想法是違反直覺的,因為這樣的模型可能被用在信息檢索任務中(某個單詞突然不見了,問題是使用它的上下文來預測它),但這種情況很少。相反,事實證明,如果隨機初始化嵌入,然后在訓練CBOW或skip-gram模型時將它們用作可學習參數,則可以獲得可用于任何任務的每個單詞的矢量表示。通過這種方式,你可以避免記憶特定的詞語,而且可以傳達不是由單詞本身解釋的單詞的語義含義,而是通過其上下文來解釋。
在2014年斯坦福大學的研究小組挑戰Word2Vec的競爭方案是:手套(GloVe)。他們提出了一種不同的方法,認為在矢量中對單詞的語義含義進行編碼的最佳方式是通過全局詞共現矩陣,而不是像Word2Vec中的局部共現。正如你在圖2中看到的,與場景詞相比,同現概率的比率能夠區分單詞。大約1時,兩個目標單詞經常或很少與上下文單詞共同出現。只有當上下文詞與目標詞中的一個共同出現時,比例要么非常小,要么非常大。這是GloVe背后的力量,確切的算法涉及將單詞表示為向量,其方式是它們的差乘以上下文詞語等于共現概率的比率。
進一步改進:
盡管新的強大的Word2Vec提高了許多經典算法的性能,但仍然需要能夠捕獲文本(長期和短期)中的順序的解決方案。這個問題的第一個解決方案是所謂的遞歸神經網絡(RNN)。RNN利用文本數據的時間特性,通過將字串饋入網絡,同時使用存儲在隱藏狀態中的先前文本的信息。
這個網絡在處理局部時間依賴性方面非常有效,但是當呈現長序列時表現很差。這種失敗是由于在每個時間步驟之后,隱藏狀態的內容被網絡的輸出覆蓋。為了解決這個問題,計算機科學家和研究人員設計了一種新的RNN架構,稱為長期短期記憶(LSTM)。LSTM通過在網絡中引入一個稱為存儲單元的額外單元來處理這個問題,這是一種負責存儲長期依賴性的機制,以及負責控制單元中信息流的多個門。這是如何工作的呢?在每個時間步驟,忘記門生成一個分數,表示要忘記的存儲單元內容的數量。接下來,輸入門決定將多少輸入添加到存儲器單元的內容中。最后,輸出門決定將多少存儲單元內容生成為整個單元的輸出。所有的門都像有規律的神經網絡層一樣,具有可學習的參數,這意味著隨著時間的推移,網絡會適應并更好地決定與任務相關的輸入類型以及可以忘記哪些信息。
自20世紀90年代后期以來,LSTM實際上已經存在,但是它們在計算和記憶方面都非常昂貴,所以直到最近,由于硬件的顯著進步,在合理的時間內訓練LSTM網絡變得可行。目前,存在許多LSTM的變體,例如mLSTM,其引入了對輸入GRU的乘法依賴性,由于存儲單元更新機制的智能化簡化,顯著減少了可訓練參數的數量。
不久之后,這些模型的性能明顯優于傳統方法,但研究人員渴望獲得更多。他們開始研究卷積神經網絡在計算機視覺領域取得了不錯的成功,并想知道這些概念是否可以納入NLP。它很快證明,用一維濾波器(處理一個小句子)簡單地替換2D濾波器(處理圖像的一小部分,例如3×3像素的區域)使其成為可能。與2D CNN類似,這些模型隨著第一層處理原始輸入和其前一層的所有后續圖層處理輸出而變得更深入,學習越來越多的抽象特征。當然,一個單詞嵌入(嵌入空間通常大約300個維度)比單個像素承載更多的信息,這意味著沒有必要像圖像一樣使用如此深的網絡。你可能會認為它是嵌入式應用程序應該在前幾層完成的,所以它們可以被跳過。這些直覺在各種任務的實驗中被證明是正確的。1D CNN比RNN更輕更精確,并且由于更容易的并行化,所以可以訓練更快的數量級。
盡管CNN做出了令人難以置信的貢獻,但這些網絡仍然存在一些缺點。在經典的設置中,卷積網絡由多個卷積層組成,負責創建所謂的特征映射和將其轉換為預測的模塊。特征映射本質上是從文本(或圖像)中提取的高級特征,用于保存它在文本(或圖像)中出現的位置。預測模塊在特征映射上執行聚合操作,或者忽略特征的位置(完全卷積網絡)或學習特定特征最經常出現的位置(完全連接的模塊)。這些方法的問題出現在例如問題回答中任務,其中模型應該給出文本和問題的答案。在這種情況下,如經典預測模塊所做的那樣,將文本所攜帶的所有信息存儲在單個文本中是困難的并且通常是不必要的。相反,我們希望將重點放在文本的粒子部分,其中為特定問題存儲了最關鍵的信息。注意機制解決了這個問題,該機制根據基于輸入的相關內容權衡文本的部分內容。這種方法也被發現對于文本分類或翻譯等經典應用是非常有用。OpenAI聯合創始人兼研究總監llya Sutskever在接受采訪時表示:最近推出的注意機制使我非常興奮,因為它簡單并且它工作得很好。雖然這些模式是新的,但我相信他將在未來的深度學習中發揮非常重要的作用。
典型的NLP問題:
有很多語言任務,對人類來說簡單,但對于一臺機器來說卻是非常困難的。這種困難主要是由于諷刺和成語等語言上的細微差別。讓我們來看看研究人員是如何試圖解決的一些NLP領域:
最常見也可能是最簡單的:情緒分析。它本質上決定了演講者/作家對特定主題的態度或情感反應,情緒可能是積極的,中性的和消極的。看看這篇關于使用深度卷積神經網絡來檢測推文中的情緒的文章。
另外一個案例就是文檔分類,我們不是將三種可能的標志之一分配給每篇文章,而是解決普通的分類問題。根據深度學習算法的全面比較,可以肯定地說,深度學習是進行強類型分類的方式。
機器翻譯的自然語言處理算法:
我們轉向真正的具有挑戰的領域:機器翻譯。機器翻譯長時間以來一直是一個嚴峻的挑戰。知道這一點非常重要,這與我們前面討論的兩個完全不同。對于這項任務,我們需要一個模型來預測單詞序列,而不是標簽。機器翻譯可以說明深度學習的重要性,因為它在順序數據方面已經取得了難以置信的突破。在這篇博客文章中,它們利用Recurrent Neural Networks(RNN)解決翻譯問題,在這篇文章中,你可以了解他們如何達到最新的結果。
假設你需要一個自動的文本摘要模型,并且你希望它只提取文本中最重要的部分,同時保留所有的含義。這需要一種能夠理解整個文本的算法,同時關注具有大部分含義的特定部分。這個問題可以通過前面提到的注意機制來解決,它可以作為模塊在端到端解決方案中引入。
自然語言生成:
你可能已經注意到所有上述任務都有一個共同點。對于情緒分析,文章是分為積極的,消極的或中立的。在文檔分類中,每個例子都屬于一個類。這意味著這些問題屬于監督式學習的問題。但,當你想讓你的模型生成文本時,事情會變得棘手。
Andrej Karpathy在其優秀的博客文章中詳細介紹了RNN如何解決這個問題。他展示了一個例子,用于生成新的莎士比亞小說或如何生成似乎是由人類編寫的源代碼,實際上他并沒有做任何事情。這些都是很好的例子,這可以說明這種模型是非常強大的,但也有這些算法的真實商業應用。想象一下,你希望以廣告為目標,并且不希望它們通過將相同的消息復制并粘貼到每個人而變得通用。編寫數千個不同版本的程序絕對是不可能的,因此一個廣告生成工具就可能派上用場。
RNNs在字符級別生成文本方面表現得相當好,這意味著網絡可以預測生成連續字母(也包括空格,標點符號等)。然而,事實證明,這些模型生成聲音是非常困難的。這是因為要產生一個單詞只需要幾個字母,但是產生高質量聲音時,即使是16kHz采樣,也會有數百甚至數千個點形成口語單詞。研究人員再一次轉向CNN,并取得了巨大成功。DeepMind的數學家開發了一個非常復雜的卷積生成WaveNet模型,它通過使用所謂的attrous卷積來處理非常大的(實際原始輸入的長度)問題。這是目前最先進的模型,其性能明顯優于其他所有基線,但使用起來非常昂貴,即需要90秒才能生成1秒的原始音頻。這意味著還有很多需要改進的空間,但這絕對是在正確的道路上。
概括:
深度學習最近出現在NLP中,由于計算問題,我們需要更多地了解神經網絡以了解它們的能力,這樣才能更好的解決NLP問題。
本文由阿里云云棲社區組織翻譯。
文章原標題《Natural Language Processing Algorithms (NLP AI)》
作者:sigmoidal
譯者:虎說八道,審校:。
原文鏈接
干貨好文,請關注掃描以下二維碼:
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的历史回顾——NLP问题解决方案的演变史的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于CNN图像分类的一份综合设计指南
- 下一篇: 使用TensorFlow,GPU和Doc