作者|Renu Khandelwal
編譯|VK
來源|Towards Data Science
在本文中,你將了解:
- 為什么我們需要seq2seq模型的注意力機制?
- Bahdanua的注意力機制是如何運作的?
- Luong的注意力機制是如何運作的?
- 什么是局部和全局注意力?
- Bahdanua和Luong注意力機制的關鍵區別
什么是注意力,為什么我們需要seq2seq模型的注意力機制
讓我們考慮兩個場景,場景一,你正在閱讀與當前新聞相關的文章。第二個場景是你正在閱讀准備考試。兩種情況下的注意力水平是相同還是不同?
與新聞文章相比,你在准備考試時會相當注意閱讀。在准備測試的時候,你會更加關注關鍵詞來幫助你記住一個簡單或復雜的概念。這也意味着我們要專注於某一特定領域的任何深度學習任務。
序列到序列(Seq2Seq)模型使用編碼器-解碼器架構。
seq2seq的幾個場景
- 神經機器翻譯(NMT)
- 圖像字幕
- 聊天機器人
- 文本摘要等
Seq2Seq模型將源序列映射到目標序列。在神經機器翻譯的情況下,源序列可以是英語,目標序列可以是印地語。
我們將英語源語句傳遞給編碼器;編碼器將源序列的完整信息編碼為單個實值向量,也稱為上下文向量。然后,這個上下文向量被傳遞到解碼器上,以生成目標語言(如印地語)中的輸出序列。上下文向量負責將整個輸入序列匯總為單個向量。
如果輸入的句子很長,那么編碼器中的一個向量可以保存所有要提供給解碼器的相關信息嗎?
在預測目標詞時,是否可以將注意力集中在句子中的幾個相關詞上,而不是集中在包含整個句子信息的單個向量上?
注意力機制有助於解決問題。
注意力機制的基本思想是避免試圖為每個句子學習單一的向量表示,而是根據注意力權值來關注輸入序列的特定輸入向量。
在每一解碼步驟中,解碼器將被告知需要使用一組注意力權重對每個輸入單詞給予多少“注意”。這些注意力權重為解碼器翻譯提供上下文信息
Bahdanau的注意力機制
Bahdanau等人。提出了一種學習結合對齊和翻譯的注意力機制,它會執行編碼器狀態和解碼器狀態的線性組合。
讓我們學習Bahdanau提出的注意力機制
- 編碼器和解碼器的所有隱狀態(向前和向后)都用於生成上下文向量,這與seq2seq中僅使用最后一個編碼器的隱狀態不同。
- 注意力機制將輸入和輸出序列與前饋網絡參數化的對齊。它有助於關注源序列中最相關的信息。
- 該模型根據與源位置相關聯的上下文向量和先前生成的目標詞來預測目標詞。
帶有注意力機制的Seq2Seq模型由編碼器、解碼器和注意力層組成。
注意力層包括
- 對齊層
- 注意力權重
- 上下文向量
對齊分數(Alignment score)
對齊分數映射位置“j”周圍的輸入與位置“i”處的輸出匹配的程度。分數是基於前一個解碼器的隱狀態\(s_{(i-1)}\),就在預測目標單詞和輸入句子的隱狀態hⱼ之前
解碼器決定它需要關注源語句的哪個部分,而不是讓編碼器將源語句的所有信息編碼成一個固定長度的向量。
對齊向量與源序列具有相同長度並在解碼器的每個時間步被計算
注意力權重
我們將softmax激活函數應用於對齊分數,以獲得注意力權重。
Softmax激活函數將得到和等於1的概率,這將有助於表示每個輸入序列的影響權重。輸入序列的注意力權重越高,對目標詞預測的影響越大。
在我們的例子中,我們看到一個更高的輸入詞的注意力權重值可以快速地預測目標詞,तेज़ी
上下文向量
上下文向量用於計算解碼器的最終輸出。上下文向量\(c_i\)是注意力權重和編碼器隱狀態(\(h_1\),\(h_2\),…,\(h_{tx}\))的加權和,它映射到輸入語句。
預測目標詞
為了預測目標詞,解碼器使用
- 上下文向量(\(c_i\)),
- 上一時間步的解碼器輸出(\(y_{i-1}\))和
- 前一解碼器的隱狀態(\(s_{i-1}\))
Luong注意力機制
Luong的注意力模型也被稱為乘法注意力。它通過簡單的矩陣乘法將編碼狀態和解碼狀態降為注意力得分。簡單的矩陣乘法使它更快,更節省空間。
根據注意力在源序列中的位置,Luong提出了兩種類型的注意力機制
- 全局注意力,關注所有來源位置
- 局部注意力,注意力只放在每個目標詞的源位置的一小部分上
全局注意力與地方關注的共性
- 在每個時間步t,在解碼階段,全局和局部注意的兩種方法都首先以堆疊的LSTM頂層的隱狀態\(h_t\)作為輸入。
- 這兩種方法的目標都是導出上下文向量,以獲取相關的源端信息,幫助預測當前的目標詞y
- 注意力向量被輸入到下一個時間步中,以告知模型過去的決策。
全局和局部注意模型的不同之處在於上下文向量是如何導出的
在討論全局和局部注意之前,讓我們先了解一下在給定的時間t內,Luong的注意力機制所使用的約定
- \(c_t\):上下文向量
- \(a_t\):對齊向量
- \(h_t\):當前目標隱狀態
- \(h_t\):當前源隱狀態
- \(y_t\):預測當前目標字
- \(h˜_t\)ₜ:注意向量
全局注意力
- 全局注意模型在計算上下文向量時考慮了編碼器的所有隱狀態。
- 通過比較當前目標隱狀態h與每個源隱狀態h的大小,導出了與源序列中的時間步數大小相等的可變長度對齊向量A
- 對齊分數被稱為基於內容的函數,我們考慮三種不同的選擇
- 全局上下文向量\(c_t\)是根據所有源隱狀態\(h_t\)上的對齊向量\(a_t\)計算的加權平均值
當源序列是一個大段落或一個大文檔時會發生什么?
由於全局注意模型考慮了源序列中的所有單詞來預測目標單詞,因此在計算上變得非常昂貴,並且很難翻譯出較長的句子
利用局部注意力可以解決全局注意模型的缺點
局部注意力
- 局部注意力只關注每個目標詞的源位置的一小部分,不像全局注意力那樣關注整個源序列
- 計算成本低於全局注意力
- 局部注意力模型首先在時間t為每個目標詞生成對齊位置\(p_t\)。
- 上下文向量\(c_t\)是在選定窗口內源隱狀態集上作為加權平均值導出的
- 對齊的位置可以單調地或預先地選擇
Bahdanau和Luong注意力機制的關鍵區別
Bahdanau和long注意力機制中的注意力計算
Bahdanau等人,在雙向編碼器中使用前向和后向隱狀態的串聯,在其非堆疊單向解碼器中使用前一個目標的隱狀態
Loung等人,注意力使用編碼器和解碼器的頂層LSTM層的隱狀態
Luong注意力機制使用當前解碼器的隱狀態來計算對齊向量,而Bahdanau使用上一個時間步的輸出
對齊函數
Bahdanau只使用concat分數對齊模型,而Luong使用dot、general和concat對齊分數模型
有了注意力機制的知識,你現在可以構建強大的深層NLP算法。
原文鏈接:https://towardsdatascience.com/sequence-2-sequence-model-with-attention-mechanism-9e9ca2a613a
歡迎關注磐創AI博客站:
http://panchuang.net/
sklearn機器學習中文官方文檔:
http://sklearn123.com/
歡迎關注磐創博客資源匯總站:
http://docs.panchuang.net/