Sunday, September 05, 2021

NLP(二):Seq2seq

NLP(二):Seq2seq

2019/01/02

施工中...

-----

說明:


Seq2seq 的核心觀念是:整句讀完再翻譯。

-----


[2]。

-----

◎ 一、Seq2seq 的動機

動機在於若以矩陣的方式處理文字,則字數必須是固定的。以 RNN 形式,則句子的長度才有彈性。

「要知道,在以往的很多模型中,我們一般都說輸入特徵矩陣,每個樣本對應矩陣中的某一行,就是說,無論是第一個樣本還是最後一個樣本,他們都有一樣的特徵維度。但是對於翻譯這種例子,難道我們要讓每一句話都有一樣的字數嗎,那樣的話估計五言律詩和七言絕句又能大火一把了,哈哈。但是這不科學呀,所以就有了 seq2seq 這種結構。」[8]。

-----

◎ 二、Seq2seq 的架構

架構是編碼器解碼器。先將輸入句壓縮成單向量,再把單向量重組為想要的輸出。

「Sequence to Sequence 是由 Encoder 與 Decoder 兩個 RNN 構成,它的運作原理其實與人類的思維很相似,當我們看到一段話時,會先將這句話理解吸收,再根據我們理解的內容說出回覆,Sequence to Sequence 就是在模擬這個過程。」[9]。

-----

◎ 三、Seq2seq 的範例

翻譯、對話、摘要、創作,都可以用 Seq2seq 完成。

「輸入一句英文,輸出一句法文,就寫好了一個翻譯系統。 
輸入一個問題,輸出一句回覆,就架好一個聊天機器人。 
輸入一篇文章,輸出一份總結,就構成一個摘要系統。 
輸入幾個關鍵字,輸出一首短詩,就成就了一名詩人。」[9]。

-----

◎ 四、Seq2seq 的作法

端看訓練的資料集而定。

「而 Seq2seq 靈活的架構,也讓這個模型被廣泛地應用到各種不同的任務上:例如 Chatbot、Google Inbox 的 Auto-Reply。只要你有一個配對好的文本集(問與答、信件與回覆、圖片與描述),就可以把資料餵進模型裡訓練產生一個 Seq2seq 系統。」[10]。

-----

◎ 五、Seq2seq 的不足

多向量可以比單向量更精細地執行任務,所以 Seq2seq 的單向量模型之後,又有 Attention 的多向量模型被開發出來。

「現在我們具備 RNN/LSTM 的知識,可以發現 Seq2seq 中,Decoder 的公式和 RNN 根本就是同一個模子出來的,差別在於 Decoder 多了一個 C,這個 C 是指 context vector/thought vector。context vector 可以想成是一個含有所有輸入句訊息的向量,也就是 Encoder 當中,最後一個 hidden state。簡單來說,Encoder 將輸入句壓縮成固定長度的 context vector,context vector 即可完整表達輸入句,再透過 Decoder 將 context vector 內的訊息產生輸出句。」[11]。

「為什麼要用 attention model?The attention model 用來幫助解決機器翻譯在句子過長時效果不佳的問題。 這種新的架構替輸入句的每個文字都創造一個 context vector,而非僅僅替輸入句創造一個從最終的 hidden state得來的 context vector,舉例來說,如果一個輸入句有 N 個文字,就會產生 N 個 context vector,好處是,每個 context vector 能夠被更有效的解碼。 」[11]。

-----


論文圖一,Seq2seq 的架構 [1]。

-----



[1]

-----



[1]

-----



[1]

-----



[1]

-----



[1]

-----


[1]

-----


Appendix

# Hidden state

「For vanilla recurrent neural networks and GRU’s, the output is the hidden state. When you see both an output and a hidden state represented as two different variables, usually the output is something that ran through some sort of activation like softmax for classification.」[7]。

隱藏狀態跟輸出的差異在於通常輸出會比隱藏狀態多一個激活函數,例如 Softmax,以用來分類。

----- 

References

◎ 論文

[1] Seq2seq - using LSTM
Sutskever, Ilya, Oriol Vinyals, and Quoc V. Le. "Sequence to sequence learning with neural networks." Advances in neural information processing systems. 2014.
http://papers.nips.cc/paper/5346-sequence-to-sequence-learning-with-neural-networks.pdf

-----

◎ 英文

[2] Forecasting with Neural Networks - An Introduction to Sequence-to-Sequence Modeling Of Time Series – Joseph Eddy – Data scientist, teacher, debate coach

# 1.6k claps 
[3] Word Level English to Marathi Neural Machine Translation using Encoder-Decoder Model
https://towardsdatascience.com/word-level-english-to-marathi-neural-machine-translation-using-seq2seq-encoder-decoder-lstm-model-1a913f2dc4a7 

# 921 claps
[4] Seq2Seq model in TensorFlow - Towards Data Science
https://towardsdatascience.com/seq2seq-model-in-tensorflow-ec0c557e560f


# 77 claps
[5] Introduction to RNNs, Sequence to Sequence Language Translation and Attention
https://towardsdatascience.com/introduction-to-rnns-sequence-to-sequence-language-translation-and-attention-fc43ef2cc3fd

# 33 claps
[6] Tuned version of seq2seq tutorial - Towards Data Science
https://towardsdatascience.com/tuned-version-of-seq2seq-tutorial-ddb64db46e2

[7] Difference between output and hidden state in RNN   MLQuestions
https://www.reddit.com/r/MLQuestions/comments/9hpkc4/difference_between_output_and_hidden_state_in_rnn/

-----

◎ 簡中

[8] seq2seq学习笔记 - 大学之道,在明明德 - CSDN博客
https://blog.csdn.net/Jerr__y/article/details/53749693

-----

◎ 繁中

[9] 從零開始的 Sequence to Sequence _ 雷德麥的藏書閣
http://zake7749.github.io/2017/09/28/Sequence-to-Sequence-tutorial/

[10] 教電腦寫作:AI球評——Seq2seq模型應用筆記(PyTorch + Python3) – Yi-Hsiang Kao – Medium
https://medium.com/@gau820827/%E6%95%99%E9%9B%BB%E8%85%A6%E5%AF%AB%E4%BD%9C-ai%E7%90%83%E8%A9%95-seq2seq%E6%A8%A1%E5%9E%8B%E6%87%89%E7%94%A8%E7%AD%86%E8%A8%98-pytorch-python3-31e853573dd0 

[11] Seq2seq pay Attention to Self Attention  Part 1(中文版)
https://medium.com/@bgg/seq2seq-pay-attention-to-self-attention-part-1-%E4%B8%AD%E6%96%87%E7%89%88-2714bbd92727

-----

◎ 代碼實作


[12] Deploying a Seq2Seq Model with the Hybrid Frontend — PyTorch Tutorials 1.0.0.dev20181228 documentation
https://pytorch.org/tutorials/beginner/deploy_seq2seq_hybrid_frontend_tutorial.html 

[13] Seq2Seq – Long – Medium
https://medium.com/@Aj.Cheng/seq2seq-18a0730d1d77

[14] Seq2Seq model in TensorFlow – Towards Data Science
https://towardsdatascience.com/seq2seq-model-in-tensorflow-ec0c557e560f 

[15] A ten-minute introduction to sequence-to-sequence learning in Keras
https://blog.keras.io/a-ten-minute-introduction-to-sequence-to-sequence-learning-in-keras.html

[16] Write a Sequence to Sequence (seq2seq) Model — Chainer 5.0.0 documentation
https://docs.chainer.org/en/stable/examples/seq2seq.html


-----

◎ 其他

[18] The Star Also Rises: BLEU

The Star Also Rises: [翻譯] Word Level English to Marathi Neural Machine Translation using Encoder-Decoder Model

The Star Also Rises: What's the main points of Seq2seq?

-----

No comments: