TensorFlow系列專題(十一):RNN的應用及注意力模型
目錄:
● 迴圈神經網路的應用
● 文字分類
● 序列標註
● 機器翻譯
● Attention-based model
● RNN 系列總結
● 迴圈神經網路的應用
目前迴圈神經網路已經被應用在了很多領域,諸如語音識別(ASR)、語音合成(TTS)、聊天機器人、機器翻譯等,近兩年在自然語言處理的分詞、詞性標註等工作的研究中,也不乏迴圈神經網路的身影。在本節中,我們將介紹幾個較為典型的迴圈神經網路的應用,以此來了解迴圈神經網路是如何與我們實際的應用場景所結合。
根據應用場景和需求的不同,我們大致可以將迴圈神經網路的任務分為兩類:一類是序列到類別的模式,另一類是序列到序列的模式。其中,序列到序列的問題又可以進一步的劃分為:“同步的序列到序列的模式”和“非同步的序列到序列的模式”。接下來我們會通過三個案例來進一步的瞭解這三種模式。
文字分類
文字分類目前是自然語言處理(Natural LanguageProcessing,NLP)領域中最常見的問題之一,例如做垃圾郵件檢測、使用者評論的情感極性分析等。序列到類別的模式適用於文字分類問題,在文字分類問題中,我們輸入到迴圈神經網路中的是一段文字,長度為n,神經網路的輸出只有一個類別,長度為1。
假設我們要實現一個外賣行業的使用者評論的情感極性分類,如圖1所示,我們輸入到神經網路中的是一段使用者對外賣商品的評論。
圖1 實現文字分類的迴圈神經網路示意圖
迴圈神經網路在每一個“時間步”都有一個輸出,但對於一個簡單的分類問題,我們不需要這麼多的輸出,一個常用且簡單的處理方式是隻保留最後一個“時間步”的輸出,如圖2所示:
圖2 “序列到類別模式”的迴圈神經網路示意圖
序列標註
分詞是自然語言處理中最基礎也是最重要的一個環節,隨著深度學習的發展,不少人開始嘗試將深度學習應用到這一領域,近兩年裡也取得了一定的成果。雖然目前在分詞、詞性標註等任務中普遍使用的還是CRF、HMM等傳統演算法,但是深度學習所取得的成果已經被越來越多的人所認可,並且不斷地在自然語言處理的任務中嶄露頭角。
不管是使用傳統的CRF演算法還是使用迴圈神經網路來訓練分詞模型,我們都需要先對訓練資料進行標註。以4-tag字標註法為例,假設我們有一段訓練樣本“北京市是中國的首都”,標註後的資料形式如下:
在4-tag字標註法中,有四個標籤,分別是:B、M、E和S。其中B代表這個字是一個詞的首字,M代表這個字是一個詞的中間部分(一個詞如果由多個字組成,除了首尾,中間的字都標為M),E代表這個字是一個詞的最後一個字,而S代表這是一個單字,不構成詞。在類似分詞這種序列標註的問題中,每一個“時間步”都對應一個輸入和輸出。對於這種問題,我們採用“同步的序列到序列的模式”,如圖3所示:
圖3 “同步的序列到序列模式”的迴圈神經網路示意圖
機器翻譯
用於機器翻譯的迴圈神經網路是一種“非同步的序列到序列模式”的網路結構,同樣是序列到序列的模式,與適用於序列標註的“同步的序列到序列模式”的不同之處在於,“非同步的序列到序列模式”的迴圈神經網路對於輸入和輸出的序列長度沒有限制。在序列標註問題中,每一個“時間步”都有一個輸入和一個對應的輸出,因此輸入和輸出的序列長度相同,然而在機器翻譯問題中,我們輸入的序列長度和輸出的序列長度不一定等長。
“非同步的序列到序列模式”的迴圈神經網路就是我們常說的Sequenceto Sequence model,又稱為編碼器-解碼器(Encoder-Decoder)模型。之所以稱之為編碼器-解碼器模型,是因為我們將網路分成了兩部分:編碼器部分和解碼器部分。如圖4所示,編碼器模型對輸入的序列資料進行編碼,得到中間向量:
圖4 編碼器部分示意圖
最簡單的編碼方式是直接把網路最後一個時刻的狀態賦值給,也可以使用一個函式來做變換,函式接收的引數可以是,也可以是從到的所有中間狀態。在得到中間向量之後,接下來要做的就是解碼。一種常用的解碼方式如圖5(左)所示,模型在解碼過程中將編碼得到的向量作為解碼器的初始狀態,並將每一個時間步的輸出作為下一個時間步的輸入,直至解碼完成。“EOS”是輸入和輸出序列結束的標誌。圖5右側所示的是另一種解碼的方式,該方式將編碼得到的向量作為解碼器模型每一個“時間步”的輸入。
更具體的Sequence to Sequence模型,可以閱讀Bengio等人在2014年發表的論文[1],以及Google在2014年的一篇論文[2]。
圖5 兩種不同的解碼器模型示意圖
● Attention-based model
雖然採用編碼器-解碼器 (Encoder-Decoder) 結構的模型在機器翻譯、語音識別以及文字摘要等諸多應用中均取得了非常不錯的效果,但同時也存在著不足之處。編碼器將輸入的序列編碼成了一個固定長度的向量,再由解碼器將其解碼得到輸出序列,這個固定長度的向量所具有的表徵能力是有限的,然而解碼器又受限於這個固定長度的向量。因此,當輸入序列較長時,編碼器很難將所有的重要資訊都編碼到這個定長的向量中,從而使得模型的效果大打折扣。
為了解決這一問題,我們引入了注意力機制(Attention),這種引入了Attention機制的神經網路模型又稱為Attention-based model。本節我們要介紹的Soft Attention Model是一種最為常見,使用也較多的注意力模型。為了解決傳統的Encoder-Decoder模型中單個定長的編碼向量無法保留較長的輸入序列中的所有有用資訊的問題,Attention-based model引入多個編碼向量,在解碼器中一個輸出對應一個編碼向量,如圖6所示。
圖8 Attention計算過程示意圖
我們以第一個編碼向量的計算為例,首先用解碼器的初始狀態分別和編碼器中每個時間步的輸出計算相似度,得到輸出,再通過一個softmax運算將轉換成概率值,最後由公式計算得到編碼向量。接下來再利用解碼器中神經網路的輸出計算編碼向量,以此類推,直到解碼過程結束。
以上就是傳統的Soft Attention Model,除此之外還有一些其它形式的Attention-based model,有適用於自然語言處理領域的,也有適用於影象領域的。Google在2017年發表的一篇論文《Attention is All You Need》[3],試圖擺脫CNN和RNN,想要用純粹的Attention來實現Encoder-Decoder模型的任務,並且取得了非常不錯的效果。
● RNN 系列總結
到這裡,本章內容就全部結束了。在這一章裡,我們從最基礎的簡單結構的迴圈神經網路開始介紹,介紹了迴圈神經網路的計算過程以及如何使用TensorFlow去實現,又介紹了幾種常用的迴圈神經網路結構;在第四節裡,我們介紹了迴圈神經網路所面臨的問題——長期依賴問題,以及相應的解決辦法;之後,我們介紹了兩種基於門控制的迴圈神經網路,這是目前在迴圈神經網路裡使用較多的兩種網路結構,這兩種網路結構通過在前後兩個網路狀態之間增加線性的依賴關係,在一定程度上解決了梯度消失和梯度爆炸的問題;在第六節裡,我們介紹了迴圈神經網路的一些應用,並藉此介紹了應用在不同任務中時網路結構的不同;最後,我們介紹了對傳統Encoder-Decoder模型的一種改進:Attention-based model。希望進一步瞭解迴圈神經網路相關應用的讀者,推薦參考本書GitHub專案中整理的相關資源。
在下一章裡,我們將使用迴圈神經網路實現幾個完整的專案,在學會使用TensorFlow搭建迴圈神經網路模型的同時,加深對迴圈神經網路的理解。
原文釋出時間為:2018-11-26