1. 程式人生 > >深度學習與自然語言處理(8)_斯坦福cs224d RNN,MV-RNN與RNTN

深度學習與自然語言處理(8)_斯坦福cs224d RNN,MV-RNN與RNTN

這篇課堂筆記將介紹不同型別的RNN(遞迴神經網路),並介紹它在NLP領域的應用和優勢。

1、遞迴神經網路

在這篇課筆記中,我們會一起學習一種新的模型,這種模型絕對是以前介紹的那種遞迴神經網路的加強版!遞迴神經網路(RNNs)十分適用於有層次的、本身就有遞迴結構的資料集。來,咱們一起看看一個句子,是不是就很符合上面的要求呢?比如這個句子,“三三兩兩的人靜靜地走進古老的教堂。”首先,咱們可以把這個句子分成名詞短語部分和動詞短語部分,“三三兩兩的人”和“靜靜地走進古老的教堂。”然後呢,在動詞短語裡面還包含名詞短語部分和動詞短語部分對不對?“靜靜地走進”和“古老的教堂”。也就是說,它是有明顯的遞迴結構的。



語言的語法規則本身就有很強的遞迴性。所以,通過相應的模型,咱們可以把這種遞迴結構充分地利用起來。另外,使用RNNs對句子進行建模還有一個附加的好處,就是我們可以輸入任意長度的句子了。這在NLP的神經網路中曾經是一個很令人頭疼的事情,句子的長度是不同的,但我們必須得使用各種預處理技巧讓句子對應的輸入向量長度相等。(see Bengio et al., 2003; Henderson, 2003; Collobert & Weston, 2008)

我們現在假設當前任務是要把句子對應到一個向量,這個向量和單詞本身對應的向量在同一個語義空間。也就是說,像“我昨天去了商場。”,“我們上週去購物了”,“他們去了商店”這樣的句子對應的向量,互相之間的距離應該是很近的。我們之前已經訓練過一元語言模型的詞向量,我們也可以用同樣的方法進行二元、三元等模型的訓練。這種思路是行得通的,但是還有兩點需要注意:(1)理論上講,詞彙可能的組合是無窮多的。儲存和訓練這樣無窮多的資料顯然是辦不到的。(2)有一些詞彙的組合,在語言中是有意義的,但是它們並不在我們的訓練/提升語料庫中。所以模型可能從來就沒有學習到這些片語。

我們需要一個辦法,在句子和句子中包含的詞對應的詞向量上,推出句子對應的(嵌入)向量的形式。首先我們來探討一個頗有爭議的問題。在我們已有的詞向量空間裡,用這些詞向量來表示任意長度的句子是否可行和合理?儘管這個問題我們無法給出確切的答案,但從模型得出的結果來看,這好像是一個行之有效的方法。

首先,我們先談一下從語義角度和語法角度理解一個句子的區別和不同。語義分析的目的是理解一個句子所表達的實際意義,通過將短語表示成結構化語義空間裡的向量,使空間裡相似含義的句子的距離會比較近,而不相關意思的的句子離得會非常遠。與之相比,從語法角度來說,我們需要找到句子相對應的語法結構,弄清楚各個語句各部分間的依賴關係,詞語間的相互作用,等等。語法分析的結果常常被表示為一棵解析樹,如下圖所示。



另外一個更為有價值的問題是,在語義分析的過程中,從語法角度的理解時候會有所幫助,或者說是必不可少的?好吧,儘管有各種反對的理由,目前我們還是按照如下流程來進行的語義分析:首先,我們需要先理解各個詞;其次,我們需要知道各個詞是如何組織在一起;最後,我們可以通過前兩步的分析結果來理解一個短語或句子的實際意義。

現在讓我們一起來學習下基於以上原則所設計出來的一個模型。假如我們有一個句子和與這個句子相關的解析樹,就比如上面那個圖,我們如何將這個句子編碼,並且通過詞向量來得出句子的情緒分值?其實,僅僅一個簡單的遞迴神經網路模型就可以得到我們想要的結果。(練習題3就是一個相關題目)

1.1 一個簡單的單層遞迴神經網路

下面我們來學習下圖中的模型。我們首先來看下這個句子的解析樹和詞向量,由下而上的來逐步分析這棵樹。結點3(node 3)是圖中最底層的結點,所以我們將L29L430連線組合成一個2d維的向量,並將這個向量輸入到網路中按如下公式計算:

h(1)=tanh(W(1)[L29L400]+b(1))

由於W(1)Rd×2db(1)Rd,同時h(1)Rd,我們可以將h(1)看做是在相同向量空間中,關於2元語法短語“this assignment”的一個點。在這裡,我們沒有必要去探究如何表示這個點,只要關注如果從構成的詞向量中匯出就可以。



我們把h(1)輸入softmax層計算得到其關於各情感分類的得分,這裡所謂的情感分類就是一組離散分類,用來表示一些特定的含義。舉個列子,比如說在正負情感分析中,我們可以把情感分成5類,0表示強烈的負能量,1表示負能量,2表示中性,3表示正能量,4表示強烈的正能量。

現在,我們用同樣的方式,用”I” 和 “love”作為輸入來計算表示”I love”這條片語的h(1)。類似的,我們用h(1)作為輸入,得到其關於情感分類的得分。 最後,最有意思的地方來了,我們需要找到一個方式來合併兩個短語”I love” 和 “this assignment”。 這裡我們並不是把這些單詞的詞向量連起來,而是合併這兩條片語作為輸入。換句話說,就是把表示這兩條片語的h(1)向量合併起來計算:

h(1)=tanh(W(1)[h1leftb1right]+b(1))

現在我們在詞向量空間中,得到了表示”I love this assignment”這個片語的向量。接著,我們可以把這個向量h(1)輸入給softmax層來計算整句話的情感分類得分。當然,這個模型只有在訓練之後才能給出合理的結果,這部分留作PSet3練習。

這裡有個問題,我們無論是把單詞連線成片語,還是把片語連線起來到更深層,與之相乘的都是同一個權重矩陣W,於此同時我們還希望得到的向量h(1)儘可能的表達更多的內容,這樣是不是太天真了。這個問題確實是存在的, 我們在接下來的例子中會做更細緻的講解。

1.2 Syntactically Untied (語義解綁) SU-RNN

就像上一節最後所提到的問題,用同樣一個權重矩陣W去合併動詞跟名詞和去合併介詞短語及另外一個詞向量似乎直觀上講不通。這樣的草率處理可能會影響到模型的表現。

為了彌補這個缺點,我們可以通過針對這些不同的任務”語義解綁”權重矩陣W。 也就是說,我們不必去考慮是否針對這類輸入最佳的W在其他類的輸入上的表現是否會怎麼樣。我們弱化限制,使得W並不需要處處相同。這樣做一方面使得我們有更多的矩陣要去學習,但另一方面在模型的表現也會有顯著的提升。

如下圖所示, 注意到我們現在的模型根據輸入的句法類別分別進行處理, 這裡我們通過一個簡單的概率上下文無關文法 (Probabilistic Context Free Grammar, PCFG) 來確定輸入的句法類別. 其中 PCFG 大致通過對 Penn Tree Bank 進行彙總統計來學習這些分類規則, 如“The”通常是一個冠詞 (DT) , 等等. 關於 PCFG 的內容無需進行更深入的理解, 你只需知道它確實很簡單即可.



當前模型與之前模型相比, 最主要的不同是, 我們初始化權重矩陣 W 為單位矩陣. 通過這樣做, W會將兩個輸入的詞向量進行均值計算, 但經過一段長時間的訓練, 模型將會學習到哪個向量對於句子表達更加重要, 同時它可以通過對向量進行旋轉或縮放來提高這種表現. 我們觀察到下圖中訓練好的權重矩陣 W 確實學習到了單詞的重要性. 舉個例子, 對於冠詞-名詞短語 (DT-NP) 規則, 或者限定詞接名詞短語, 如 “The cat” 以及 “A man”, 我們的模型會將注意力放到名詞短語而非限定詞上. (因為圖中對角線中紅色代表更高的權重, 所以這是顯而易見的). 這就是所謂的”軟頭詞” (soft head word) 概念, 語言學家通過長時間的觀察總結出來這些概念. 然而我們的模型通過觀察資料自己就學習到了這點. 這太棒了.



通過這部分討論我們看到, SU-RNN 確實比前一小節討論的模型要更加強大, 但是SU-RNN的表達力似乎還有提升的空間. 一旦我們考慮到修飾詞, 例如副詞 “very”, 任何針對此單詞及下一單詞詞向量進行插值的行為, 確實都很難說明 “very” 的本質含義.

作為一個副詞, “very” 的字面意思是 “用於強調”, 我們怎麼才能僅僅通過線性插值的方法, 來使得一個向量可以強調其後的其他向量? 我們怎麼才能構建一個向量來 “縮放” 其他的向量? 事實是我們無法做到這一點. 我們需要採用另外一種形式的詞與詞之間的乘法操作才能做到. 這裡我們有兩種新的組合形式可以做到這一點, 其中一種利用了詞矩陣 (word matrices) 的概念而另外一種利用了典型仿射上的二次形方程.

1.3 MV-RNN’s (矩陣-向量遞迴神經網路, Matrix-Vector Recursive Neural Networks)

現在我們討論一下加強詞的表示形式, 除了詞向量外, 還往其中加入一個詞矩陣(word matrices)! 現在單詞 “very” 將擁有一個詞向量 vveryRd 及一個詞矩陣 VveryRd×d, 通過這麼做, 新的模型將不僅僅擁有表達嵌入詞含義的能力, 它還擁有學習一個單詞是如何 “修飾” 其他單詞的能力, 新加入的詞矩陣使我們擁有了這種新的能力. 將兩個單詞 a 和 b 喂到一個 RNN 網路中, 我們將得到他們的詞矩陣 A 與 B, 接下來我們將向量 Ab 與 Ba 進行連線作為新的輸入向量 x. 對於之前 “very” 的例子, VveryRd×d 可以是一個單位矩陣與一個任意大於1的常量 s 的乘積, 因此可以將相鄰的詞向量縮放 s 的比例. 這正是我們之前期望的那種新的模型表現力. 雖然這種新的詞的表達形式將會使得模型的特徵空間增加額外的一個維度, 但是我們將從這種新的詞的修飾能力中獲益良多。下圖是一個 MV-RNN 的例子。



通過觀測模型的誤差,我們看到即使MV-RNN仍不能表達一定的關係。我們注意到了有三類錯誤。

首先,否定正向的。當我們說一些正向的東西時,其中有一個詞變成負向的,這個模型不能衡量一個詞強大到足以翻轉整個句子的情緒。圖7給出了這樣一個例子,交換的“most”“least”應該倒裝句子的整個情緒,但MV-RNN不能實現這一點。


Notes5F7
圖7:否定正向的例子

第二類錯誤是否定負向的例子。在我們說什麼是不壞,或不沉悶,如圖8所示,MV-RNN不能領略到“not”可以減輕負向的情緒。


Notes5F8
圖8:否定負向的例子

我們觀察到的最後一類錯誤是“X 但是 Y 的結合”,如圖9所示。這裡的X可能是負向的,但如果Y是正向的,那麼該模型的情感輸出的句子應該是正向的!MV-RNNs無法做到這一點。


Notes5F9
圖9:使用遞迴神經網路可以準確分辨”X 但是Y”的這種結合,但MV-RNN做不到

因此,我們必須尋找一個更具表現力的合成演算法,將能夠充分捕捉這些型別的高層次的組成。

1.4 RNTNs(遞迴神經張量網路,Recursive Neural Tensor Network)

最後介紹的這種RNN,對上述的3類錯誤處理的很好。RNTN(遞迴神經張量網路)用一個詞矩陣的概念,而且沒有采用傳統的仿射變換 pre-tanh/sigmoid的概率。為了構成兩個詞向量或短語向量,我們以向量R2d的形式連線起來,不去把它通過仿射函式處理變為一個非線性,我們首先把它通過一個二次型處理,然後變為非線性的,如:

h(1)=tanh(xTVx+Wx)(3)

注意V是3階張量∈ R2d×2d×d。我們計算xTV[i]xi[1,2,...d]切成張量輸出向量

相關推薦

深度學習自然語言處理(8)_斯坦福cs224d RNNMV-RNNRNTN

這篇課堂筆記將介紹不同型別的RNN(遞迴神經網路),並介紹它在NLP領域的應用和優勢。 1、遞迴神經網路 在這篇課筆記中,我們會一起學習一種新的模型,這種模型絕對是以前介紹的那種遞迴神經網路的加強版!遞迴神經網路(RNNs)十分適用於有層次的、本身就有遞

深度學習自然語言處理(7)_斯坦福cs224d 語言模型RNNLSTMGRU

說明:本文為斯坦福大學CS224d課程的中文版內容筆記,已得到斯坦福大學課程@Richard Socher教授的授權翻譯與發表 1.語言模型 語言模型用於對特定序列的一系列詞彙的出現概率進行計算。一個長度為m的詞彙序列{w1,…,wm}的聯合概率被表示為

深度學習自然語言處理(3)_斯坦福cs224d Lecture 3

原文作者:Rohit Mundra, Richard Socher 原文翻譯:@熊傑([email protected]) && @王昱森([email protected]) && @範築軍老師( [

深度學習解決自然語言處理中的7大問題文字分類、語言建模、機器翻譯

摘要: 本文講的是用深度學習解決自然語言處理中的7大問題,文字分類、語言建模、機器翻譯等,自然語言處理領域正在從統計學方法轉向神經網路方法。在自然語言中,仍然存在許多具有挑戰性的問題。但是,深度學習方法在某些特定的語言問題上取得了state-of-the-art的結果。 本文講的是用深度學習解決自

車萬翔《基於深度學習自然語言處理》中英文PDF+塗銘《Python自然語言處理實戰核心技術算法》PDF及代碼

提取 實用 進行 分析 表達式 詞法 快速入門 重點 tps 自然語言處理是人工智能領域的一個重要的研究方向,是計算機科學與語言學的交叉學科。隨著互聯網的快速發展,網絡文本尤其是用戶生成的文本呈爆炸性增長,為自然語言處理帶來了巨大的應用需求。但是由於自然語言具有歧義性、動態

如何用深度學習自然語言處理?這裡有份最佳實踐清單

對於如何使用深度學習進行自然語言處理,本文作者 Sebastian Ruder 給出了一份詳細的最佳實踐清單,不僅包括與大多數 NLP 任務相關的最佳實踐,還有最常見任務的最佳實踐,尤其是分類、序列標註、自然語言生成和神經機器翻譯。作者對最佳實踐的選擇很嚴格,只有被證明在至少兩個獨立的群體中有益的實踐才

斯坦福cs224d深度學習自然語言處理上的應用)Lecture 2 note2

說明:本文為斯坦福大學CS224d課程的中文版內容筆記,已得到斯坦福大學課程@Richard Socher教授的授權翻譯與發表 課堂筆記:第2部分 ——————————————————————————————————– 關鍵詞:內部任務評價(Intrinsic Evaluation)和 外部任務

深度學習自然語言處理的應用和脈絡1-基礎

本文是聽煉數成金的黃老師機器讀心術之深度學習大戰自然語言處理的課程總結的筆記和讀後感。 NLP技術發展階段 以語言學為主要基礎的時代(過去):建立基本語言覎則使用數理邏輯迚行推理,建立模型產生戒理解語言以統計斱法為主流的時代(現在):當資料量積累到海量,本身就能析取

深度學習自然語言處理中的應用(一)

資料整理篇 經典教材 Speech and Language Processing (第1,2版內容略陳舊,第三版很入時, 但有些重要章節沒放在網上) https://web.stanford.edu

深度學習自然語言處理中的attention和memory機制

Attention機制是最近深度學習的一個趨勢。在一次採訪中,OpenAI的研究總監Ilya Sutskever說attention機制是最令人興奮的進步之一,而且已經廣為使用。聽起來激動人心吧。但attention機制究竟是什麼呢?神經網路裡的attentio

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

由於人工神經網路可以對非線性過程進行建模,因此已經成為解決諸如分類,聚類,迴歸,模式識別,維度簡化,結構化預測,機器翻譯,異常檢測,決策視覺化,計算機視覺和其他許多問題的利器。這種廣泛的能力使得人工神經網路可以應用於許多領域。在本文中,我們討論了人工神經網路在自然語言處

深度學習自然語言處理中的應用: 集智俱樂部活動筆記

自然語言處理(Natural Language Processing, NLP)是人工智慧中的一個重要分支,從人工智慧這個領域剛發展起來的時候就一直是一個重要的研究方向,到現在也發展出了很多的細分領域和非常多的方法,大致上來說,我們可以認為是在 2013 年的時候,伴隨著 word2vec 這個 word

《基於深度學習自然語言處理》中文PDF+英文PDF+學習分析

機器學習 生成 統計學 alt 依存句法分析 詞向量 tle 工程應用 互聯 我們做自然語言處理的,主要是進行文本分析,作為人工智能的領域之一,也一定會應用深度神經網絡進行處理。 近年來快速發展的深度學習技術為解決自然語言處理問題的解決提供了一種可能的思路,已成為有效推動

深度學習自然語言處理

這是一門關於自然語言處理的高階課程,由牛津大學和谷歌DeepMind(AlphaGo的開發機構)聯合開設,由Phil Blunsom主講,同時邀請到多位來自DeepMind和NVIDIA的業界講師來做客座講座。這是牛津大學計算機系2017年春季學期最新課程,由​大資料文摘進行

深度學習自然語言處理(一)

自然語言處理主要研究用計算機來處理、理解以及運用人類語言(又稱自然語言)的各種理論和方法,屬於人工智慧領域的一個重要研究方向,是電腦科學與語言學的交叉學科,又常被稱為計算語言學。隨著網際網路的快速發展,網路文字尤其是使用者生成的文字成爆炸式增長,為自然語言處理帶來了巨大的應用

深度學習自然語言處理(三)——深度學習運用到自然語言處理領域的成功案例

目錄 1.全連線前饋神經網路(MLP)的應用 大部分情況下,全連線前饋神經網路(MLP)能被用來替代線性學習器。這包括二分類或多分類問題,以及更復雜的結構化預測問題。網路的非線性以及易於整合預訓練詞嵌入的能力經常帶來更高的分類精度。一系列工作通過簡單地將句

13.深度學習(詞嵌入)自然語言處理--HanLP實現

筆記轉載於GitHub專案:https://github.com/NLP-LOVE/Introduction-NLP 13. 深度學習與自然語言處理 13.1 傳統方法的侷限 前面已經講過了隱馬爾可夫模型、感知機、條件隨機場、樸素貝葉斯模型、支援向量機等傳統機器學習模型,同時,為了將這些機器學習模型應用於 N

Python自然語言處理(三):Tensorflow基礎學習

看了一段時間的TensorFlow,然而一直沒有思路,偶然看到一個講解TensorFlow的系列  視訊,通俗易懂,學到了不少,在此分享一下,也記錄下自己的學習過程。 教學視訊連結:點這裡 在機器學習中,常見的就是分類問題, 郵件分類,電影分類 等等 我這裡使用iris的

R語言機器學習大資料視覺化暨Python文字挖掘自然語言處理核心技術研修

中國通訊工業協會通訊和資訊科技創新人才培養工程專案辦公室通人辦〔2017〕 第45號“R語言機器

深度學習方法(八):自然語言處理中的Encoder-Decoder模型基本Sequence to Sequence模型

歡迎轉載,轉載請註明:本文出自Bin的專欄blog.csdn.net/xbinworld。技術交流QQ群:433250724,歡迎對演算法、技術感興趣的同學加入。 Encoder-Decoder(編碼-解碼)是深度學習中非常常見的一個模型框架,比如無監督演