您的位置:首頁>科技>正文

深度學習在自然語言處理中的應用

原文:Diving Into Natural Language Processing

作者:Adit Deshpande

編譯:KK4SBB

歡迎人工智慧領域技術投稿、約稿、給文章糾錯, 請發送郵件至heyc@csdn.net

自然語言處理是研究和實現人與電腦之間用自然語言進行有效通信的各種理論和方法。 本文主要介紹深度學習在自然語言處理中的應用。

自然語言處理簡介

自然語言處理是研究和實現人與電腦之間用自然語言進行有效通信的各種理論和方法。 具體的任務包括:

問答系統(如Siri、Alexa和Cortana的功能)

情感分析(判斷某個句子表達的是正面還是負面情緒)

圖像-文字映射(看圖寫話)

機器翻譯(語言之間相互翻譯)

語音辨識

句子成分分析

命名實體識別

傳統的NLP方法需要借助大量語言學的領域知識。 理解音素和詞素等術語是基本功, 有專門的語言培訓課程。 我們先來看看傳統的NLP方法是如何理解下面這個詞語:

假設我們的目標是從該詞提取出一些資訊(情感偏向、詞意等等)。 根據語言學知識, 該詞可以分割為下面三部分:

我們知道首碼”un”表示相反或是反面意思, 尾碼”ed”表明了詞的時態(過去式)。 再通過識別詞幹”interest”的意思, 我們就很容易推導出這個單詞的含義和情感偏向了。 似乎很簡單對吧?但是, 當真正去梳理英語裡的所有首碼和尾碼時, 你會發現所有首碼和尾碼組合很多很多, 只有非常資深的語言學家才能理解它們的含義。

深度學習的介入

深度學習本質上還是一種表示學習的方法。 例如, CNN模型就是用一系列濾波器的組合來將物件劃分到不同類別。 因此, 作者認為我們也可以借用同樣的方法來表示單詞。

本文概述

作者按照構建深度神經網路模型的基本順序來撰寫本文, 然後結合近期的研究論文來討論一些實際應用。

也許, 部分讀者在讀完全文之後還存在為啥要用RNN模型, 或者為啥LSTM網路會有效等等問題。 但是, 作者的初衷是希望大家對深度學習在自然語言處理領域的應用能有一個感性的認識。

詞向量

既然深度學習方法喜歡用數學符號, 那我們就把每個單詞表示為一個d維的向量。 假設 d=6。

該用什麼數值來表示這個向量呢?我們希望這個向量能夠表示詞語的含義或者語義。 一種方法是創建共現矩陣。 假設現在有一句話:

我們希望將句子中的每個單詞都表示為一個向量:

共現矩陣的每個元素表示一個詞與另一個詞在整篇文檔中相鄰出現的次數。 具體來說如下圖所示:

我們可以將共現矩陣的每一行當做詞向量的初始值:

讀者們請注意, 僅僅觀察這個簡單的矩陣, 我們就能夠獲取很多有用的資訊。 例如, “love”和“like”兩個單詞與名詞性的單詞共現次數都是1(NLP和dogs), 而且它們都與單詞“I”共現一次。 這就意味著這兩個單詞很有可能屬於動詞。 若我們手中的資料集足夠大, 大家可以想像“like”與“love”的相似度會越來越高, 同理其它近義詞的詞向量也會越來越相似, 因為它們總是在相近的上下文中出現。

儘管我們找到了一個好的入手點, 但是需要注意到這種向量表示方式的維度會隨著語料集的增長而呈線性增長。 假如我們有一百萬個單詞(在NLP問題中並不算太多),就會得到一個 1000,000 x 1000,000 的矩陣,而且這個矩陣非常的稀疏。從存儲效率來說,這顯然不是一種好的表示方法。目前已經有許多不錯的詞向量表示方法了,其中最著名的就是word2vec。

Word2Vec

詞向量方法的基本思想就是讓向量盡可能完整地表示該詞所包含的資訊,同時讓向量維度保持在一個可控的範圍之內(合適的維度是25~1000維之間)。

Word2vec的思想是預測某個中心詞附近其它詞語出現的概率。還是以之前的句子“I love NLP and I like dogs.”為例。我們首先觀察該句子的前三個單詞。因此視窗的寬度就是 m=3:

接著,我們的目標就是根據中心詞“love”,預測它左右可能出現的詞。怎麼實現呢?當然先要定一個優化目標函數。假設確定了一個中心詞,我們定的這個函數要使得周圍詞語出現的對數概率值最大:

這個函數很重要,作者強調一定要認真理解。還是以“love”作為中心詞為例,目標函數的含義就是累加左側“I”,“love”和右側“NLP”,“love”四個單詞的對數概率值。變數T表示訓練語句的數量。下面的式子是對數函數的公式:

Vc是中心詞的詞向量。每個單詞有兩種表示向量(Uo和Uw)—— 一個用於此單詞作為中心詞的場景,另一個用於此單詞不是中心詞的場景。我們採用隨機梯度下降方法訓練詞向量。這個過程是最令人費解的,如果讀者對上述解釋看得雲裡霧裡,作者還向大家推薦了兩篇拓展閱讀文章,第一篇和第二篇。

一句話總結:在給出中心詞的情況下,Word2vec的目標就是使得上下文詞語的對數函數值最大,優化方法通常是SGD。

word2vec方法最吸引眼球的效果就是其能夠發現詞向量之間存在的線性關係。經過訓練,詞向量似乎可以捕捉到不同的語法和語義概念:

真是不可思議,如此簡單的目標函數和優化方法就能夠捕捉到這種線性關係。

迴圈神經網路(Recurrent Neural Networks)

好了,現在我們已經得到了詞向量,接下去就要把它們融入到迴圈神經網路模型中。RNN現在已經是NLP任務最常用的方法之一。RNN模型的優勢之一就是可以有效利用之前傳入網路的資訊。下圖就是RNN模型的簡單示意圖:

上圖底部,輸入的x是該詞的詞向量。每個向量x對應一個隱層的向量h。下圖橙色框內的是一個輸入單元:

每個單元的隱層向量是當前輸入詞向量和上一個隱層狀態的函數,計算公式如下:

如果你仔細觀察,會發現公式中有兩個上標不同的權重矩陣Whx和Whh,分別與輸入的詞向量和上一次的隱藏狀態相乘。這兩個權重矩陣是網路的所有單元共用的。

這就是RNN模型的關鍵。仔細思考這個過程,它和傳統的兩層神經網路差別非常大。在傳統的兩層神經網路中,每層的權重矩陣各不相同(W1和W2),而在遞迴算機網路中,整個序列共用同一個權重矩陣。

具體到某個單元,它的輸出值y是h和Ws的乘積,即另一個權值矩陣:

我們再來回顧一下RNN的優點。RNN與傳統NN的最大區別在於RNN輸入的是一個序列(這裡就是一系列單詞)。像CNN模型的輸入也只是一張單一的圖片,而RNN的輸入既可以是一句簡短的句子,也可以是一篇5個段落的文章。輸入序列的順序也會極大影響訓練效果。理想情況下,隱藏狀態有望捕捉過去的資訊(歷史輸入內容)。

門控遞迴單元(Gated Recurrent Units )

我們再來介紹門控遞迴單元。這種門控單元的目的是為RNN模型在計算隱層狀態時提供一種更複雜的方法。這種方法將使我們的模型能夠保持更久遠的資訊。為什麼保持長期依賴是傳統迴圈神經網路存在的問題呢?因為在誤差反向傳播的過程中,梯度沿著RNN模型由近及遠往回傳播。如果初始梯度是一個很小的數值(例如

在傳統的RNN模型中,隱藏狀態向量的計算公式如下:

而GRU採取了另一種計算方式。計算過程被分為三塊:更新門,重置門和一個新的記憶記憶體。兩個門都是輸入詞向量與上一步隱藏狀態的函數:

其實,關鍵的差別之處就在於不同的門有不同的權重矩陣,通過公式中的上標加以區分。更新門的符號是Wz和Uz,重置門的符號是WT和UT。

新記憶體的計算公式如下:

式子中的空心點表示逐元素相乘。

如果仔細觀察公式,大家會發現如果重置門單元的輸出值接近於0,那麼整一項的值都接近於0,相當於忽略了ht-1步的狀態。此時,模型只考慮當前的輸入詞向量xt。

h(t)的最終形式如下公式所示:

h(t)函數由三部分組成:更新門,重置門和一個記憶記憶體。當zt接近于1時,新的隱藏狀態ht幾乎完全依賴於上一次的狀態,因為(1-zt)接近0,後一項的乘積也接近於0。當zt接近于0時,情況則相反。

長短期記憶單元(Long Short-Term Memory Units)

如果大家已經理解了GRU的原理,那麼就能很容易理解LSTM。LSTM同樣也是由多個門控模組組成:

顯然,LSTM引入的資訊更多。由於LSTM可以被看作是GRU思路的引申,因此,作者不打算再做太深入的分析,讀者若想要理解每一扇門和每一個公式的來龍去脈,Chris Olah撰寫了一篇精彩的文章。這是目前為止介紹LSTM的最精彩的教程,一定會對大家理解各個單元的原理有著很大的幫助。

LSTM和GRU對比

我們先來探討兩者的相似之處。原作者認為,這兩種模型都具有保持序列資料長期資訊依賴的特殊能力。長期資訊指的是兩個詞語或者短語之間間隔很遠,但是它們之間的關係對理解句子又至關重要。LSTM和GRU都是通過門控模組來捕捉或是選擇性忽略這些依賴關係。

兩者的差異之處在於門的數量,GRU有兩扇門,LSTM有三扇門。門的數量也會影響到輸入單詞之間的非線性關係,並且影響最終的計算結果。GRU也不具有LSTM模型的記憶單元。

寫在閱讀論文之前

要提醒大家一點,NLP領域還有很多很多其它種類的深度學習模型,有時候遞迴神經網路和卷積神經網路也會用在NLP任務中,但沒有RNN這麼廣泛。

不錯,我們現在已經對深度學習在自然語言處理領域的應用有了清晰的認識,接下來一起就讀幾篇論文吧。NLP領域的方向很多(例如機器翻譯、問答系統等等),我們可以挑選閱讀的文獻也很多,作者從中挑選了三篇具有代表性的。

記憶網路(Memory Networks)

原作者挑選的第一篇論文是問答領域非常有影響力的一篇文章。此文的作者是Jason Weston, Sumit Chopra, 和 Antoine Bordes,此文介紹了一類稱作記憶網路的模型。

直觀的想法是,為了準確地回答一個文本的問題,我們需要以某種方式來存儲初始資訊。如果問大家,“RNN指的是什麼”?認真閱讀了文章前半部分的讀者一定能夠回答。只不過大家可能要花幾秒鐘的時間去前文中查找相關段落。我們暫且不知道人類大腦執行這一行為的機制是什麼,但一般認為大腦中有一塊區域來存儲這些資訊。

此篇文章所介紹的記憶網路獨特之處在於它有一塊可以讀寫的關聯記憶區域。CNN模型、強化學習以及傳統的神經網路都沒有這種記憶功能。也許是因為問答系統重度依賴長期的上下文資訊,比如要追溯事件發生的時間線。對於CNN和強化學習而言,它們通過訓練不同的濾波器或是狀態到行為的映射關係,已經將“記憶”體現在權值矩陣中。乍一看,RNN和LSTM符合要求,但是一般也無法記憶歷史的輸入內容(對於問答系統至關重要)。

網路結構

我們一起看看網路是如何處理初始輸入內容的。和大多數機器學習演算法一樣,此方法首先也是將輸入內容映射成特徵表示。映射的方法可以是詞向量、成分標注或者語法分析等等。

下一步,根據特徵表示I(x)更新記憶內容m,以回饋新輸入內容x引入的資訊。

我們可以把m看成是若干個mi組成的陣列。每個獨立的mi又可以視為m、特徵表示I(x)和其本身的函數G。記憶內容的更新是通過G函數完成。第三步和第四步是讀取記憶資訊,根據問題生成特徵表示o,然後將其解碼輸出得到最終的答案r。

函數R可以是一個RNN模型,將特徵表示轉化為我們人類可讀的文字答案。

針對第三步,我們希望O模組輸出的特徵表示是最匹配該問題的答案。那麼,這個問題將與各個記憶單元逐一比較,計算它們之間的匹配得分。

最後,用argmax函數選出得分最高的一項(或者多項)。計算得分的方法就是將問題的embedding向量與各個記憶單元的特徵表示向量相乘(細節請參見論文)。這個過程與計算兩個詞向量的相似度類似。輸出的表示特徵o再被送入RNN或是LSTM模型,生成最終我們可讀的答案。

整個訓練過程屬於監督式學習,訓練資料包括問題、原始語料、經過標記的答案。目標函數如下圖所示:

更多的相關資料可以參見下面幾篇論文:

End-to-End Memory Networks

Dynamic Memory Networks

Dynamic Coattention Networks

情感分析的樹形LSTM模型

下一篇論文主要內容是介紹情感分析的方法,分析某個短語是否包含正面或是負面的情緒。《心理學大辭典》中認為:“情感是人對客觀事物是否滿足自己的需要而產生的態度體驗”。LSTM是目前情感分析最常用的網路結構。Kai Sheng Tai, Richard Socher, 和 Christopher Manning所發表的這篇論文介紹了一種新穎的方法將LSTM網路串聯成非線性的結構。

這種非線性排列的動機源自自然語言所具有的屬性,即詞語序列構成短語。而詞語的排列順序不同,構成的短語含義也不相同,甚至與單個詞語的含義完全相反。為了體現這一特點,LSTM單元構成的網路必須呈樹狀結構排列,不同的單元受其子節點的影響。

網路結構

樹形LSTM與標準型網路結構的差異之一是後者的隱藏狀態是當前輸入與上一步隱藏狀態的函數,而前者的隱藏狀態則是當前輸入與其子節點的隱藏狀態的函數。

由於網路結構的改變,訓練的方法也有所變化,具體細節可以參考這篇文章。作者的關注點在於為何這種模型的效果比線性LSTM更好。

基於樹形的結構,每個獨立單元的狀態與其所有子節點的隱藏狀態都相關。這一點很重要,因為因為每個節點可以區別對待其子節點。在訓練過程中,網路模型能學到某些特殊單詞(比如“not”和“very”)對整句話的情感分析相當重要。若模型能給予這部分節點更大的權重,最終取得的效果也將更好。

神經機器翻譯

作者挑選的最後一篇論文是關於機器翻譯的。該文的作者是谷歌的機器學習大牛們,Jeff Dean, Greg Corrado, Orial Vinyals等人,這篇文章介紹了支撐谷歌翻譯服務的基礎系統。該系統相比之前穀歌所用的系統,翻譯的平均錯誤率降低了60%。

傳統的自動翻譯方法包括多種短語匹配方法。這種方法需要大量的語言學的領域知識,而且最終其設計方案被證明過於脆弱,缺乏泛化能力。傳統方法存在的問題之一,就是它會試圖一塊一塊地翻譯輸入的句子。事實證明,最有效的方法(即神經機器翻譯的技術)是一次翻譯整個句子,從而譯文顯得更自然流暢。

網路結構

該論文介紹了一種深度LSTM神經網路,包括8個編碼和解碼層,實現端到端的訓練過程。這套系統可以拆分為三部分:編碼RNN,解碼RNN和注意力模組。從宏觀來說,編碼器將輸入的句子表示為向量的形式,解碼器生成輸出表示,注意力模組則是在解碼階段告訴解碼器該聚焦哪部分內容(這就是利用句子整體語境的思想來源):

論文的剩餘部分主要討論大規模部署這套系統所面臨的挑戰,包括計算資源消耗、延遲,以及高併發量等等。

總結

筆者認為,今後深度學習會在客戶服務機器人、機器翻譯以及複雜的問答系統發揮作用。特別感謝Richard Socher以及斯坦福CS224D課程老師提供的精彩課堂和幻燈片。

假如我們有一百萬個單詞(在NLP問題中並不算太多),就會得到一個 1000,000 x 1000,000 的矩陣,而且這個矩陣非常的稀疏。從存儲效率來說,這顯然不是一種好的表示方法。目前已經有許多不錯的詞向量表示方法了,其中最著名的就是word2vec。

Word2Vec

詞向量方法的基本思想就是讓向量盡可能完整地表示該詞所包含的資訊,同時讓向量維度保持在一個可控的範圍之內(合適的維度是25~1000維之間)。

Word2vec的思想是預測某個中心詞附近其它詞語出現的概率。還是以之前的句子“I love NLP and I like dogs.”為例。我們首先觀察該句子的前三個單詞。因此視窗的寬度就是 m=3:

接著,我們的目標就是根據中心詞“love”,預測它左右可能出現的詞。怎麼實現呢?當然先要定一個優化目標函數。假設確定了一個中心詞,我們定的這個函數要使得周圍詞語出現的對數概率值最大:

這個函數很重要,作者強調一定要認真理解。還是以“love”作為中心詞為例,目標函數的含義就是累加左側“I”,“love”和右側“NLP”,“love”四個單詞的對數概率值。變數T表示訓練語句的數量。下面的式子是對數函數的公式:

Vc是中心詞的詞向量。每個單詞有兩種表示向量(Uo和Uw)—— 一個用於此單詞作為中心詞的場景,另一個用於此單詞不是中心詞的場景。我們採用隨機梯度下降方法訓練詞向量。這個過程是最令人費解的,如果讀者對上述解釋看得雲裡霧裡,作者還向大家推薦了兩篇拓展閱讀文章,第一篇和第二篇。

一句話總結:在給出中心詞的情況下,Word2vec的目標就是使得上下文詞語的對數函數值最大,優化方法通常是SGD。

word2vec方法最吸引眼球的效果就是其能夠發現詞向量之間存在的線性關係。經過訓練,詞向量似乎可以捕捉到不同的語法和語義概念:

真是不可思議,如此簡單的目標函數和優化方法就能夠捕捉到這種線性關係。

迴圈神經網路(Recurrent Neural Networks)

好了,現在我們已經得到了詞向量,接下去就要把它們融入到迴圈神經網路模型中。RNN現在已經是NLP任務最常用的方法之一。RNN模型的優勢之一就是可以有效利用之前傳入網路的資訊。下圖就是RNN模型的簡單示意圖:

上圖底部,輸入的x是該詞的詞向量。每個向量x對應一個隱層的向量h。下圖橙色框內的是一個輸入單元:

每個單元的隱層向量是當前輸入詞向量和上一個隱層狀態的函數,計算公式如下:

如果你仔細觀察,會發現公式中有兩個上標不同的權重矩陣Whx和Whh,分別與輸入的詞向量和上一次的隱藏狀態相乘。這兩個權重矩陣是網路的所有單元共用的。

這就是RNN模型的關鍵。仔細思考這個過程,它和傳統的兩層神經網路差別非常大。在傳統的兩層神經網路中,每層的權重矩陣各不相同(W1和W2),而在遞迴算機網路中,整個序列共用同一個權重矩陣。

具體到某個單元,它的輸出值y是h和Ws的乘積,即另一個權值矩陣:

我們再來回顧一下RNN的優點。RNN與傳統NN的最大區別在於RNN輸入的是一個序列(這裡就是一系列單詞)。像CNN模型的輸入也只是一張單一的圖片,而RNN的輸入既可以是一句簡短的句子,也可以是一篇5個段落的文章。輸入序列的順序也會極大影響訓練效果。理想情況下,隱藏狀態有望捕捉過去的資訊(歷史輸入內容)。

門控遞迴單元(Gated Recurrent Units )

我們再來介紹門控遞迴單元。這種門控單元的目的是為RNN模型在計算隱層狀態時提供一種更複雜的方法。這種方法將使我們的模型能夠保持更久遠的資訊。為什麼保持長期依賴是傳統迴圈神經網路存在的問題呢?因為在誤差反向傳播的過程中,梯度沿著RNN模型由近及遠往回傳播。如果初始梯度是一個很小的數值(例如

在傳統的RNN模型中,隱藏狀態向量的計算公式如下:

而GRU採取了另一種計算方式。計算過程被分為三塊:更新門,重置門和一個新的記憶記憶體。兩個門都是輸入詞向量與上一步隱藏狀態的函數:

其實,關鍵的差別之處就在於不同的門有不同的權重矩陣,通過公式中的上標加以區分。更新門的符號是Wz和Uz,重置門的符號是WT和UT。

新記憶體的計算公式如下:

式子中的空心點表示逐元素相乘。

如果仔細觀察公式,大家會發現如果重置門單元的輸出值接近於0,那麼整一項的值都接近於0,相當於忽略了ht-1步的狀態。此時,模型只考慮當前的輸入詞向量xt。

h(t)的最終形式如下公式所示:

h(t)函數由三部分組成:更新門,重置門和一個記憶記憶體。當zt接近于1時,新的隱藏狀態ht幾乎完全依賴於上一次的狀態,因為(1-zt)接近0,後一項的乘積也接近於0。當zt接近于0時,情況則相反。

長短期記憶單元(Long Short-Term Memory Units)

如果大家已經理解了GRU的原理,那麼就能很容易理解LSTM。LSTM同樣也是由多個門控模組組成:

顯然,LSTM引入的資訊更多。由於LSTM可以被看作是GRU思路的引申,因此,作者不打算再做太深入的分析,讀者若想要理解每一扇門和每一個公式的來龍去脈,Chris Olah撰寫了一篇精彩的文章。這是目前為止介紹LSTM的最精彩的教程,一定會對大家理解各個單元的原理有著很大的幫助。

LSTM和GRU對比

我們先來探討兩者的相似之處。原作者認為,這兩種模型都具有保持序列資料長期資訊依賴的特殊能力。長期資訊指的是兩個詞語或者短語之間間隔很遠,但是它們之間的關係對理解句子又至關重要。LSTM和GRU都是通過門控模組來捕捉或是選擇性忽略這些依賴關係。

兩者的差異之處在於門的數量,GRU有兩扇門,LSTM有三扇門。門的數量也會影響到輸入單詞之間的非線性關係,並且影響最終的計算結果。GRU也不具有LSTM模型的記憶單元。

寫在閱讀論文之前

要提醒大家一點,NLP領域還有很多很多其它種類的深度學習模型,有時候遞迴神經網路和卷積神經網路也會用在NLP任務中,但沒有RNN這麼廣泛。

不錯,我們現在已經對深度學習在自然語言處理領域的應用有了清晰的認識,接下來一起就讀幾篇論文吧。NLP領域的方向很多(例如機器翻譯、問答系統等等),我們可以挑選閱讀的文獻也很多,作者從中挑選了三篇具有代表性的。

記憶網路(Memory Networks)

原作者挑選的第一篇論文是問答領域非常有影響力的一篇文章。此文的作者是Jason Weston, Sumit Chopra, 和 Antoine Bordes,此文介紹了一類稱作記憶網路的模型。

直觀的想法是,為了準確地回答一個文本的問題,我們需要以某種方式來存儲初始資訊。如果問大家,“RNN指的是什麼”?認真閱讀了文章前半部分的讀者一定能夠回答。只不過大家可能要花幾秒鐘的時間去前文中查找相關段落。我們暫且不知道人類大腦執行這一行為的機制是什麼,但一般認為大腦中有一塊區域來存儲這些資訊。

此篇文章所介紹的記憶網路獨特之處在於它有一塊可以讀寫的關聯記憶區域。CNN模型、強化學習以及傳統的神經網路都沒有這種記憶功能。也許是因為問答系統重度依賴長期的上下文資訊,比如要追溯事件發生的時間線。對於CNN和強化學習而言,它們通過訓練不同的濾波器或是狀態到行為的映射關係,已經將“記憶”體現在權值矩陣中。乍一看,RNN和LSTM符合要求,但是一般也無法記憶歷史的輸入內容(對於問答系統至關重要)。

網路結構

我們一起看看網路是如何處理初始輸入內容的。和大多數機器學習演算法一樣,此方法首先也是將輸入內容映射成特徵表示。映射的方法可以是詞向量、成分標注或者語法分析等等。

下一步,根據特徵表示I(x)更新記憶內容m,以回饋新輸入內容x引入的資訊。

我們可以把m看成是若干個mi組成的陣列。每個獨立的mi又可以視為m、特徵表示I(x)和其本身的函數G。記憶內容的更新是通過G函數完成。第三步和第四步是讀取記憶資訊,根據問題生成特徵表示o,然後將其解碼輸出得到最終的答案r。

函數R可以是一個RNN模型,將特徵表示轉化為我們人類可讀的文字答案。

針對第三步,我們希望O模組輸出的特徵表示是最匹配該問題的答案。那麼,這個問題將與各個記憶單元逐一比較,計算它們之間的匹配得分。

最後,用argmax函數選出得分最高的一項(或者多項)。計算得分的方法就是將問題的embedding向量與各個記憶單元的特徵表示向量相乘(細節請參見論文)。這個過程與計算兩個詞向量的相似度類似。輸出的表示特徵o再被送入RNN或是LSTM模型,生成最終我們可讀的答案。

整個訓練過程屬於監督式學習,訓練資料包括問題、原始語料、經過標記的答案。目標函數如下圖所示:

更多的相關資料可以參見下面幾篇論文:

End-to-End Memory Networks

Dynamic Memory Networks

Dynamic Coattention Networks

情感分析的樹形LSTM模型

下一篇論文主要內容是介紹情感分析的方法,分析某個短語是否包含正面或是負面的情緒。《心理學大辭典》中認為:“情感是人對客觀事物是否滿足自己的需要而產生的態度體驗”。LSTM是目前情感分析最常用的網路結構。Kai Sheng Tai, Richard Socher, 和 Christopher Manning所發表的這篇論文介紹了一種新穎的方法將LSTM網路串聯成非線性的結構。

這種非線性排列的動機源自自然語言所具有的屬性,即詞語序列構成短語。而詞語的排列順序不同,構成的短語含義也不相同,甚至與單個詞語的含義完全相反。為了體現這一特點,LSTM單元構成的網路必須呈樹狀結構排列,不同的單元受其子節點的影響。

網路結構

樹形LSTM與標準型網路結構的差異之一是後者的隱藏狀態是當前輸入與上一步隱藏狀態的函數,而前者的隱藏狀態則是當前輸入與其子節點的隱藏狀態的函數。

由於網路結構的改變,訓練的方法也有所變化,具體細節可以參考這篇文章。作者的關注點在於為何這種模型的效果比線性LSTM更好。

基於樹形的結構,每個獨立單元的狀態與其所有子節點的隱藏狀態都相關。這一點很重要,因為因為每個節點可以區別對待其子節點。在訓練過程中,網路模型能學到某些特殊單詞(比如“not”和“very”)對整句話的情感分析相當重要。若模型能給予這部分節點更大的權重,最終取得的效果也將更好。

神經機器翻譯

作者挑選的最後一篇論文是關於機器翻譯的。該文的作者是谷歌的機器學習大牛們,Jeff Dean, Greg Corrado, Orial Vinyals等人,這篇文章介紹了支撐谷歌翻譯服務的基礎系統。該系統相比之前穀歌所用的系統,翻譯的平均錯誤率降低了60%。

傳統的自動翻譯方法包括多種短語匹配方法。這種方法需要大量的語言學的領域知識,而且最終其設計方案被證明過於脆弱,缺乏泛化能力。傳統方法存在的問題之一,就是它會試圖一塊一塊地翻譯輸入的句子。事實證明,最有效的方法(即神經機器翻譯的技術)是一次翻譯整個句子,從而譯文顯得更自然流暢。

網路結構

該論文介紹了一種深度LSTM神經網路,包括8個編碼和解碼層,實現端到端的訓練過程。這套系統可以拆分為三部分:編碼RNN,解碼RNN和注意力模組。從宏觀來說,編碼器將輸入的句子表示為向量的形式,解碼器生成輸出表示,注意力模組則是在解碼階段告訴解碼器該聚焦哪部分內容(這就是利用句子整體語境的思想來源):

論文的剩餘部分主要討論大規模部署這套系統所面臨的挑戰,包括計算資源消耗、延遲,以及高併發量等等。

總結

筆者認為,今後深度學習會在客戶服務機器人、機器翻譯以及複雜的問答系統發揮作用。特別感謝Richard Socher以及斯坦福CS224D課程老師提供的精彩課堂和幻燈片。

Next Article
喜欢就按个赞吧!!!
点击关闭提示