經典Seq2Seq與注意力Seq2Seq模型結構詳解

2021-02-23 DeepHub IMBA
介紹

在本文中,我們將分析一個經典的序列對序列(Seq2Seq)模型的結構,並演示使用注意解碼器的優點。這兩個概念將為理解本文提出的Transformer奠定基礎,因為「注意就是您所需要的一切」。

本文內容:

什麼是Seq2Seq模型?

經典的Seq2Seq模型是如何工作的?

注意力機制

什麼是Seq2Seq模型?

在Seq2seq模型中,神經機器翻譯以單詞序列的形式接收輸入,並生成一個單詞序列作為輸出。例如,義大利語的「Cosa vorresti ordinare?」作為輸入,英語的輸出是「What would you like to order?」。另外,輸入可以是一幅圖像(圖像字幕)或一長串單詞(文本摘要)。


經典的Seq2Seq模型是如何工作的?

一個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翻譯組

相關焦點

  • seq2seq 的 keras 實現
    本文結構:什麼是 seq2seq?Encoder–Decoder 結構?seq2seq 結構?
  • Seq2seq強化,Pointer Network簡介
    源/ATYUN訂閱號Pointer Network(為方便起見以下稱為指針網絡)是seq2seq模型的一個變種。
  • Seq2seq框架下的文本生成
    雖然在Decoder的輸入上有差別,但結構上兩者都將Encoder-Decoder結構應用在翻譯場景中,並由此開始,seq2seq框架在機器翻譯,對話生成等領域中佔據重要位置。另外,前者首次提出GRU結構,後者採用Beam Search改善預測結果,這些都成為如今seq2seq框架的基礎技術元素。
  • IBM、哈佛聯合提出Seq2Seq-Vis:機器翻譯模型的可視化調試工具
    例如,之前由於 seq2seq 翻譯系統將「早上好」錯誤的翻譯為了「攻擊他們」,導致錯誤的逮捕事故。深度學習模型的不可解釋性更是普遍存在的問題。為此,IBM 研究院、Watson AI Lab、哈佛 NLP 團隊和哈佛視覺計算團隊聯合研發了一款針對 seq2seq 模型的可視化調試工具 Seq2Seq-Vis,使用戶可以可視化模型執行過程中的注意力、單詞預測、搜索樹、狀態軌跡和近鄰詞列表等,從而更高效地進行分析和調試。
  • 【乾貨】seq2seq模型實例:用Keras實現機器翻譯
    作者通過一個seq2seq編碼器-解碼器網絡實現英語到法語的自動翻譯。作者在博文中詳細介紹了自己的模型架構和訓練數據,並使用代碼片段分步驟對訓練過程進行講解。總之,這是一篇比較詳盡的機器翻譯應用示例教程,如果你有從事機器翻譯或seq2seq模型相關的研究,可以詳細閱讀一下,相信一定對您的工程和理論都有所幫助。專知內容組編輯整理。
  • 【綜述專欄】系統了解Encoder-Decoder 和 Seq2Seq及其關鍵技術
    為此,我們精選國內外優秀的綜述文章,開闢「綜述專欄」,敬請關注。地址:https://zhuanlan.zhihu.com/p/114933655Encoder-Decoder 模型主要是 NLP 領域裡的概念。它並不特值某種具體的算法,而是一類算法的統稱,只要是符合上面的框架的算法,都可以統稱為 Encoder-Decoder 模型。Encoder-Decoder 的通用的框架如上。
  • 谷歌開源神經機器翻譯技術,推出tf-seq2seq框架
    陳樺 編譯自 Google官方博客量子位 報導 | 公眾號 QbitAI谷歌研究軟體工程師、谷歌大腦團隊成員Anna Goldie和Denny Britz今天撰文,宣布在「谷歌神經機器翻譯」的基礎上推出開源框架tf-seq2seq,給外部研究人員提供幫助。
  • Abstractive Text Summarization using Seq2Seq RNNs and Beyond
    同時,本文還提出多種模型來研究自動文摘中的重要問題,比如對關鍵詞進行建模,並且得出詞對於文檔研究起關鍵作用的結論。研究結果表明本文的解決方案在性能上有很大的提升,另外,還貢獻了一個包括多句子文摘的數據集和基準。
  • 基於seq2seq模型的中文糾錯任務
    深度學習近來在自然語言處理領域獲得了 廣泛運用,seq2seq 模型在諸多自然語言處理任務,如詞性標註、語義依存分析、 機器翻譯等,均取得了顯著的成績。本文首先對中文糾錯任務進行詳細的梳理, 包括錯誤的來源、目前的處理方法、相關的公開競賽、數據源等;第二,由於缺 少大規模公開的數據集,本文涉及顯示人工構造大規模糾錯數據集的算法;第三, 本文將深度學子中的 seq2seq 模型引入,處理中文糾錯任務,在基本的模型基礎 上引入 attention 機制(包括諸多變種)以及多任務學習的理念,嘗試多種組合, 並最終在構造數據集上 GLEU 評分達到了 0.75
  • 直觀理解並使用Tensorflow實現Seq2Seq模型的注意機制
    採用帶注意機制的序列序列結構進行英印地語神經機器翻譯Seq2seq模型構成了機器翻譯、圖像和視頻字幕、文本摘要、聊天機器人以及任何你可能想到的包括從一個數據序列到另一個數據序列轉換的任務的基礎。如果您曾使用過谷歌Translate,或與Siri、Alexa或谷歌Assistant進行過互動,那麼你就是序列對序列(seq2seq)神經結構的受益者。我們這裡的重點是機器翻譯,基本上就是把一個句子x從一種語言翻譯成另一種語言的句子y。機器翻譯是seq2seq模型的主要用例,注意機制對機器翻譯進行了改進。
  • tensorflow源碼解析之seq2seq.py文件(上)
    這裡放一張分析圖:三、開始搞seq2seq.py文件1、介紹seq2seq.py文件在tensorflow/contrib/legacy_seq2seq/python/ops路徑下。為1.2.1以下版本的seq2seq接口,但是也封裝進了1.2.1版本中。由於使用1.2.1版本以下的人也很多,因此先介紹一下這個文件。文件的目的:在TensorFlow創建序列到序列模型的庫。
  • 十分鐘掌握Keras實現RNN的seq2seq學習
    作者 | Francois Chollet編譯 | 雁驚寒seq2seq是一種把序列從一個域(例如英語中的句子
  • 求解微分方程,用seq2seq就夠了,性能遠超 Mathematica、Matlab
    由於seq2seq模型的特點,作者所提方法能夠對同一個公式得出不止一個的運算結果,例如如下的微分方程該模型能夠反饋這麼多的結果:可以驗證一下,這些結果都是正確的,至多差一個常數 c。我們來看下這樣美好的結果,作者是如何做到的。(其實很簡單!)
  • 突破2.4kstar!一個Seq2seq模型的Pytorch實現庫
    學校 | 哈爾濱工業大學 SCIR實驗室博士生在讀註:文末附【深度學習與自然語言處理】交流群介紹一個Seq2seq模型的實現tutorial,使用pytorch和torchtext實現。還給出了一些其他Seq2seq的實現倉庫:
  • RNN, Seq2Seq, Attention注意力機制完全解析
    循環神經網絡RNN結構被廣泛應用於自然語言處理、機器翻譯、語音識別、文字識別等方向。本文主要介紹經典的RNN結構,以及RNN的變種(包括Seq2Seq結構和Attention機制)。希望這篇文章能夠幫助初學者更好地入門。
  • 模型匯總17 基於Depthwise Separable Convolutions的Seq2Seq模型_SliceNet原理解析
    基於RNN(LSTM、GRU)的Seq2Seq模型在自然語言處理領域取得了巨大成功,特別是對機器翻譯領域,神經機器翻譯(NMT)已經完全替代了以前的統計(SMT)。但基於RNN的Seq2Seq有2個致命缺點:    1、基於sequence中t-i的context計算t時刻估計,不適合併行計算,因此計算效率低。
  • pytorch編程之基於注意力機制的 seq2seq 神經網絡翻譯
    為了改進此模型,我們將使用注意機制,該機制可讓解碼器學習將注意力集中在輸入序列的特定範圍內。', 'i m not tall .']CopySeq2Seq 模型遞歸神經網絡(RNN)是在序列上運行並將其自身的輸出用作後續步驟的輸入的網絡。序列到序列網絡或 seq2seq 網絡或編碼器解碼器網絡是由兩個稱為編碼器和解碼器的 RNN 組成的模型。編碼器讀取輸入序列並輸出單個向量,而解碼器讀取該向量以產生輸出序列。
  • python用於NLP的seq2seq模型實例:用Keras實現神經機器翻譯
    p=8438在本文中,我們將看到如何創建語言翻譯模型,這也是神經機器翻譯的非常著名的應用。我們將使用seq2seq通過Python的Keras庫創建我們的語言翻譯模型。假定您對循環神經網絡(尤其是LSTM)有很好的了解。本文中的代碼是使用Keras庫用Python編寫的。
  • 從Seq2seq到Attention模型到Self Attention(二)
    到Attention模型到Self Attention(一)——作者:Bgg——系列一介紹了Seq2seq和 Attention model。這篇文章將重點擺在Google於2017年發表論文「Attention is all you need」中提出的 「」The transformer模型。」The transformer」模型中主要的概念有2項:1. Self attention 2. Multi-head,此外,模型更解決了傳統attention model中無法平行化的缺點,並帶來優異的成效。
  • 乾貨分享丨一文詳解常規RNA-seq與3'mRNAseq優勢與局限
    、翻譯(翻譯組,translatome)、RNA結構(結構組,structurome)、調節性RNA、RNA表觀遺傳學以及RNA動力學等。然而與RNA-seq相比,晶片技術的局限性就顯而易見了:1. 晶片技術須依賴已知的基因組信息,在探索性研究和非模式生物的研究中存在局限性;而RNA-seq在這方面優勢明顯,它不需要預先設計探針,因此得到的數據集是無偏倚的,實現了無假設的實驗設計[1,2],為未知轉錄本和變異發現研究提供了強有力的工具,這是晶片無法實現的。2.