引入
我已經在文章[1]中介紹了一些序列模型的應用,比如“中文翻譯爲英文”,“NER命名實體識別”,“歌詞生成”,“情緒識別”。
也在文章[2]中介紹了RNN結構的基本原理。
那問題來了,要實現“中譯英”和“歌詞生成”,我們選用的RNN結構是一樣的嗎?RNN有哪些典型的結構,分別對應哪些應用場景呢?
RNN的5種典型結構
首先,直接給出RNN的5中典型結構,如下圖。
然後我們依次講解。
1. One to One
這是最簡單的RNN結構,可以理解爲輸入一個單詞(或詞向量),輸出一個單詞(label)。
這種結構其實就是最普通的神經網絡,和RNN其實沒多大關係,寫到這裏也只是爲了保持理論的完整性,實踐中幾乎沒有這樣用RNN的。
2. One to Many
可以理解爲輸入一個label,就能輸出很多單詞。
這樣的應用比如“根據音樂類型(輸入int型的一個x),生成一篇音樂”,或者“生成文章”。
當然這裏有一個技術細節
- 當你生成序列時,通常會把第一個合成的輸出,也餵給下一層
- 所以圖中把第一個字符的輸出y,作爲了第二個字符的輸入
3. Many to One
可以理解爲,輸入一篇文章,輸出文章作者的情緒(0/1)。
這種“多對一”的結構,主要用於做“情緒識別”,或者“文章分類”。
4. Many to Many (Tx=Ty)
這就是[2]中介紹的最經典的RNN結構,這種結構的輸入序列數量和輸出序列數量相同,主要用於實現“NER命名實體識別”的應用。
Tx表示輸入序列的長度,Ty表示輸出序列的長度。
5. Many to Many (Tx!=Ty)
在某些情況中,比如做“中譯英”,我們的輸入中文漢字數量,和輸出的英文單詞數量不一樣。就必須要實現輸入輸出不等長的RNN。
這樣的RNN有兩部分組成,左半部分叫做“Encoder”(編碼器,獲取輸入),右半部分叫做“Decoder”(解碼器)。
參考
- [0]. AndrewNg的《序列模型》教程
- [1]. https://blog.csdn.net/ybdesire/article/details/102963683
- [2]. https://blog.csdn.net/ybdesire/article/details/103449597