在本文中,我們將分析一個經典的序列對序列(Seq2Seq)模型的結構,並演示使用注意解碼器的優點。這兩個概念將為理解本文提出的Transformer奠定基礎,因為「注意就是您所需要的一切」。
本文內容:
什麼是Seq2Seq模型?
經典的Seq2Seq模型是如何工作的?
注意力機制
什麼是Seq2Seq模型?在Seq2seq模型中,神經機器翻譯以單詞序列的形式接收輸入,並生成一個單詞序列作為輸出。例如,義大利語的「Cosa vorresti ordinare?」作為輸入,英語的輸出是「What would you like to order?」。另外,輸入可以是一幅圖像(圖像字幕)或一長串單詞(文本摘要)。
一個Seq2Seq模型通常包括:
一個編碼器
一個解碼器
一個上下文向量
請注意:在神經機器翻譯中,編碼器和解碼器都是rnn
編碼器通過將所有輸入轉換為一個稱為上下文的向量(通常具有256、512或1024的長度)來處理所有輸入。上下文包含編碼器能夠從輸入中檢測到的所有信息(請記住,輸入是在本例中要翻譯的句子)。然後向量被發送到解碼器,由解碼器確定輸出序列。
神經機器翻譯中的時間步長
現在我們已經對序列到序列模型有了一個高層次的概述,讓我們簡要分析一下如何處理輸入。
時間步驟#1:將義大利語單詞「Stai」發送到編碼器編碼器根據其輸入和之前的輸入更新其隱藏狀態(h1)。
時間步驟#2:單詞「attento」被發送到編碼器編碼器根據其輸入和之前的輸入更新其隱藏狀態(h2)。
時間步驟#3:單詞「Thomas」被發送到編碼器編碼器根據其輸入和之前的輸入更新其隱藏狀態(h3)。
時間步驟#4:最後一個隱藏狀態成為發送到解碼器的上下文解碼器產生第一個輸出「Be」
時間步驟#5:解碼器產生第二個輸出「careful」
時間步驟#6:解碼器產生第三個輸出「Thomas」
編碼器或解碼器的每一步都是RNN處理其輸入並生成該時間步長的輸出。正如您可能注意到的,我們最後的隱藏狀態(h3)成為發送到解碼器的內容。這就是經典序列對序列模型的局限性;編碼器「被迫」只發送一個向量,不管輸入的長度是多少,也就是我們的句子包含了多少個單詞。即使我們決定在編碼器中使用大量隱藏單元以獲得更大的上下文,模型也會與短序列過度匹配,並且隨著參數數量的增加,我們的性能也會受到影響。
但是注意力能解決這個問題!
注意力機制在這一點上,我們知道要解決的問題在於上下文向量。這是因為,如果輸入是一個包含大量單詞的句子,那麼模型就會陷入麻煩。badanua等和Loung等人提出了一種解決方案。這兩篇論文介紹並改進了「注意力」的概念。這種技術通過關注輸入序列的相關部分,使機器翻譯系統得到了相當大的改進。
思路
帶有注意力的Seq2Seq模型中的編碼器的工作原理與經典的類似。一次接收一個單詞,並生成隱藏狀態,用於下一步。隨後,與之前不同的是,不僅最後一個隱藏狀態(h3)將被傳遞給解碼器,所有的隱藏狀態都將被傳遞給解碼器。
編碼器
在到達編碼器之前,我們的句子中的每個單詞都通過嵌入過程轉換為一個向量(大小為200或300)。第一個單詞,在我們的例子中是「Stai」,一旦它轉換為一個向量就被發送到編碼器。在這裡,RNN的第一步產生第一個隱藏狀態。同樣的場景也會發生在第二個和第三個單詞上,總是考慮到之前隱藏的狀態。一旦我們的句子中的所有單詞都被處理完,隱藏狀態(h1, h2, h2)就會被傳遞給注意力解碼器。
注意力解碼器
首先,注意力解碼器中添加了一個重要過程:
這個過程允許我們放大我們序列中重要的部分,減少不相關的部分。此時,我們必須理解如何將分數分配給每個隱藏狀態。你還記得badanau和Luong嗎?為了更好地理解注意力解碼器內部發生了什麼以及分數是如何分配的,我們需要更多地談談點積注意力。
點積注意力(multiplicative attention)是利用先前對加法注意所做的研究而發展起來的。在「基於注意力的神經機器翻譯的有效方法」一文中,Loung介紹了幾個注意力評分的方法:
一般方法、點積 、合併(concat)
在這篇文章中,我們將分析一般注意力機制(公式中間的部份)。
這是因為在我們的例子中,一旦確定每種語言都有自己的嵌入空間,編碼器和解碼器就沒有相同的嵌入空間。
我們可以直接將解碼器的隱藏狀態、權值矩陣和編碼器的隱藏狀態集相乘得到分數。
現在我們已經知道了如何計算分數,讓我們嘗試著理解Seq2Seq模型中的注意力解碼器是如何工作的。
第一步,注意解碼器RNN嵌入<END>令牌(表示語句結束),並將其進入初始解碼器隱藏狀態。RNN處理其輸入,生成輸出和新的解碼器隱藏狀態向量(h4)。這時輸出被丟棄,從這裡開始「注意力」步驟:
1-為每個編碼器隱藏狀態分配一個注意力公式中計算的分數。
2-分數通過softmax函數。
3-編碼器隱藏狀態和相關softmax分數相乘。將獲得的隱藏狀態添加到上下文向量(c4)中。
4-上下文向量(c4)與解碼器隱藏狀態(h4)連接。
由連接產生的向量通過一個完全連接的神經網絡傳遞,該神經網絡基本上是乘以權值矩陣(Wc),並應用tanh激活。這個完全連接的層的輸出將是輸出序列中的第一個輸出單詞(輸入:「Stai」->輸出:「be」)。
第二個時間步驟從第一步的輸出(「Be」)開始,並產生解碼器隱藏狀態(h5)。所有這些都遵循上面描述的注意步驟。重複以上時間步驟中描述的過程。
非常感謝您花時間閱讀本文。我希望本文能使您對經典的Seq2Seq模型以及帶有注意力的Seq2Seq有一個很好的初步了解。
引用Bahdanua et al., "Neural Machine Translation by Jointly Learning to Align and Translate"
Loung et al., "Effective Approaches to Attention-based Neural Machine Translation"
Visualizing a Neural Machine Translation Model (Mechanics of Seq2seq Model With Attention) by Jay Alammar
作者:Muhamed Kouate
原文地址:https://towardsdatascience.com/classic-seq2seq-model-vs-seq2seq-model-with-attention-31527c77b28a
deephub翻譯組