李宏毅機器學習課程筆記-9.3RNN的應用

在Slot Filling中,輸入是1個word vector,輸出是每個word的label,輸入和輸出是等長的

然而,RNN還可以實現多對1、多對多…

Many to One

Many to One:輸入是1個vector sequence,輸出是1個vector

  • Sentiment Analysis

    輸入1篇文章或1句話等(1個vector sequence),輸出其情感傾向(分類或者回歸,比如超好、好、普通、差、超差、[-1,1])。

  • Key Term Extraction

    輸入是1篇文章等,輸出是幾個關鍵詞。

Many to Many

Many to Many:輸入和輸出都是sequence,但輸出更短

比如Speech Recognition。輸入是1段聲音信號,每隔1小段時間(通常很短,比如0.01秒)就用1個vector表示,輸出是1段文字。因此輸入是1個vector sequence,而輸出是1個charactor sequence,並且輸入序列要比輸出序列短

如果仍然使用Slot Filling的方法,就只能做到輸入的每個vector對應輸出1個character,輸入1句“好棒”的語音後可能輸出文字“好好棒棒棒”,但其實應該輸出文字“好棒”。我們可以通過Trimming去除輸出中相同的character,但語音“好棒”和語音“好棒棒”是不同的,應該如何區分呢?可以用CTC(Connectionist Temporal Classification),其基本思路是可以在輸出中填充NULL,最終輸出時刪除NULL即可。

img

如上圖所示,輸入中vector的數量多於label中character的數量,那CTC應該怎麼訓練呢?答案是假設所有的可能性都是對的。

Many to Many

Sequence to Sequence Learning with Neural Networks:輸入和輸出都是sequence,但兩者長度不確定。

以機器翻譯爲例,RNN要將英文的word sequence翻譯成中文的character sequence(並不知道哪個sequence更長或更短)。

img

如上圖所示,假設RNN的輸入“machine learning”,在2個時間點分別輸入"machine"和"learning",在最後1個時間點時memory中就存儲了整個word sequence的信息。接下來讓RNN輸出,得到“機”,然後把“機”當做input(這1步有很多極技巧,這裏省略),並讀取memory中的信息,就會輸出“器”,以此類推,RNN會一直輸出但不知道什麼時候停止。那怎麼讓RNN停止輸出呢?可以添加1個symbol===標誌停止,當RNN輸出這個symbol時就停止輸出。

Seq2Seq for Syntatic Parsing

Grammar as a Foreign Langauage: 輸入爲1個word sequence,輸出1個語法樹(可以用sequence表示)。

Seq2Seq Auto-encoder for Text

如果用bag-of-word來表示1段文本,就容易丟失word之間的聯繫和語序上的信息。比如“白血球消滅了感染病”和“感染病消滅了白血球”這2段文本語義完全相反但bag-of-word是相同的。

A Hierarchical Neural Autoencoder for Paragraphs and Documents:可以使用Seq2Seq Autoencoder,在考慮語序的情況下把文章編碼成vector,只需要將RNN作爲編碼器和解碼器即可。

img

如上圖所示,word sequence輸入RNN後被編碼成embedded vector,然後再通過另1個RNN解碼,如果解碼後能得到一模一樣的句子,則編碼得到的vector就表示了這個word sequence中最重要的信息。

img

如上圖所示,這個過程可以是分層的(hierarchical),可以將每1個sentence編碼成1個vector然後將它們加起來得到表示整個document的vector,然後再通過它產生多個setence的vector,然後將多個setence的vector解碼得到word sequence。這是1個4層的LSTM(word sequence-sentence sequence-document-sentence sequence-word sequence)。

Seq2Seq Auto-encoder比較容易得到文法的編碼,而Skip Thought(輸入1個句子,輸出其下1句)更容易得到語義的意思。

Seq2Seq Auto-encoder for Speech

Audio Word2Vec: Unsupervised Learning of Audio Segment Representations using Sequence-to-sequence Autoencoder

Seq2Seq Auto-encoder還可以用在語音上,它可以把1個audio segment(word-level)編碼成1個fixed-length vector。這有什麼用處呢?它可以基於語音之間的相似度做語音搜索。

img

那如何基於語音之間的相似度做語音搜索呢?如上圖所示,假如有1個語音的database,可將其劃分爲audio segments(長度可變),然後使用Seq2Seq Auto-encoder將其編碼爲1個fixed-length vector。對於1段需要搜索的語音,通過Seq2Seq Auto-encoder將其編碼成1個fixed-length vector,計算其與database中audio segments的vector的相似度。

img

那如何把1個audio segment編碼成1個fixed-length vector呢?如上圖所示,首先把audio segment轉換爲acoustic feature sequence,然後輸入至RNN。該RNN作爲Encoder,在最後1個時間點其memory中的值就代表整個acoustic feature sequence,這就是我們想要的vector。但是隻有這個作爲Encoder的RNN我們沒有辦法訓練,所以還要訓練1個作爲Decoder的RNN。該RNN作爲Decoder,以Encoder在最後1個時間點時memory中的vector爲輸入,然後輸出1個acoustic feature sequence,訓練目標是輸出的acoustic feature sequence和輸入的acoustic feature sequence越接近越好。由此可知,該例中Encoder和Decoder是要同時訓練的。

Attention-based Model

專家發現,小兒失憶現象是由於動物的大腦在神經新生的過程中,處於不斷重組的狀態,為減少太多訊息的幹擾,會不斷清除舊記憶,從而增加對新事物的學習能力。年幼小鼠的記憶保留能力所以低下,乃因其高度活躍的神經再生所致,而成年小鼠保留記憶能力的增加,也由於其大腦相對成熟,海馬體的神經再生活力已經下降。腦科學家既然可以抑制年幼小鼠海馬體的高度活躍神經再生活力,又可刺激成年小鼠海馬體增加其神經再生活力。

——————引自http://henrylo1605.blogspot.com/2015/05/blog-post_56.html

現在除了RNN之外,Attention-based Model也用到了memory的思想。機器也可以有記憶,神經網絡通過操控讀/寫頭去讀/寫信息,這個就是Neural Turing Machine。

Reading Comprehension

Attention-based Model常常用在Reading Comprehension上,讓機器讀1篇document,再把每個setence變成代表語義的vector,接下來讓用戶向機器提問,神經網絡就會去調用讀寫頭,取出memory中與查詢語句相關的信息,綜合處理之後,可以給出正確的回答。

Visual Question Answering

Speech Question Answering


Github(github.com):@chouxianyu

Github Pages(github.io):@臭鹹魚

知乎(zhihu.com):@臭鹹魚

博客園(cnblogs.com):@臭鹹魚

B站(bilibili.com):@絕版臭鹹魚

微信公衆號:@臭鹹魚

轉載請註明出處,歡迎討論和交流!


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章