Sunday, November 07, 2021

NLP(四):ConvS2S

NLP(四):ConvS2S

2019/04/02

-----


Fig. ConvS2S(圖片來源:Pixabay)。

圖一、封面。

-----


圖二、Outline。

-----

Outline

1. ConvS2S
2. I/O Embedding
3. Padding and Mask
4. GLU
5. Encoder
6. Decoder
7. Multi-Hop Attention
8. Details

-----

背景介紹:

「用 CNN 來做時間序列預測分析,是一個非常難的問題。在此之前,CNN 在圖像領域大放異彩,橫掃物體識別、檢測、分割等不同場景。即便是應用到自然語言處理中,也只是簡單的從 embedding 中提取相鄰幾個單詞的特徵,再加上 pooling 層,變成固定高層特徵輸入到分類器中。

背景:Kalchbrenner & Blunson (2013) 提出過從句子中提取出固定長度的 embedding,Cho 等人 (2014) 提出帶門的遞歸 CNN 用來重複的產生向量 representation,直到一定長度就停止。但是這些模型都沒有 RNN、LSTM、GRU 等的效果好,單純的使用卷積層提取特徵,對於時間序列來說,這對於把握住單詞前後的特徵特別難。隨著 CNN 的越來越成熟,發展出了新的特性,包括attention mechanism、residual connection 以及一些工程上的 tricks,使得 CNN 的表徵能力越來越強。

最近比較有突破的進展如下。 Kalchbrenner 等人 (2016) 已經開始使用 CNN 模型應用到翻譯任務中,但是沒有使用 attention 機制,結果沒有達到預期。 Pham 等人 (2016) 將 CNN 成功用於語言模型,即便沒有超過 LSTM。

最新成果:自然語言處理包括眾多領域,機器翻譯、語言模型、NER、POS、QA 問答、多輪對話等,RNN 及其變種都取得了非常大的成功。然而,Facebook 一直堅持將 CNN 用於這些任務中,不得不說是工業界及學界的一股清流。最近的幾篇論文也非常有意思,先說結果。

第一篇叫 A convolutional encoder model for neural machine translation,去年11月份發的,採用了非常多的技巧,1. 加上 position embedding,解決單詞位置信息;2. 每層卷積的輸出都要加上其輸入,即殘差連接;3. attention 機制的使用,encoder 最後是兩個 stacked 卷積層,一個負責 encoder 的輸出,另一個負責 conditional input。」。

# 如何评价 Facebook 新推出的 CNN 机器翻译项目 Fairseq? - 知乎

https://www.zhihu.com/question/59645329

-----

1. ConvS2S

-----


# ConvS2S 論文 [1]。

圖三、ConvS2S 模型架構。

如同 Seq2seq 與 Attention,ConvS2S 也是 Encoder-Decoder 架構用於機器翻譯。Encoder 端,也就是 Source,假定是英文。Decoder 的 Output 端,假定是德文。

Seq2seq、Attention、ConvS2S,都可稱為 Source-Target-Output-Relational-Model(Storm)。最大的差別,是 ConvS2S 用一維卷積取代 Seq2seq 與 Attention 的 LSTM,GPU 的平行運算改善了速度。而一維卷積時間訊息消失的缺點,則以時間訊息另外編碼加入,加以改善。

-----

2. I/O Embedding

-----

Weight Matrix of Word2vec


https://mc.ai/deep-nlp-word-vectors-with-word2vec/

圖四、1-hot Encoding to Vector。

假定字彙數量是 10k,可以先經由 Word Embedding 壓縮成維度三百的向量。

-----



圖五、Word Embedding。

one hot encoding 壓縮成 768。

-----

768 轉成 512 或 1024 或 2048。

-----

3. Padding and Mask

-----





圖七a、Padding。





圖七b、Padding。


Padding 的部分,由於使用一維的 Conv3,Encoder 端的 They agree,除了先加上句末的標記 </s>,另外還要補上兩個 <p>。

Decoder 端的德文 Sie stimmen zu,除了句首的標記 <s>,也要補上兩個 <p>。Attention 的矩陣可以看到 <s> Sie stimmen tu 與 They agree </s> 的權重對應。具體來說,我們用零向量填充左側和右側的 k-1 個元素的輸入,然後從卷積輸出的末尾移除 k 個元素。參考圖七b。

此處  k 為 3。

-----

4. GLU

-----



# GLU 論文 [2]。

圖八、GLU。

句子的向量,先分別經過兩個一維卷積的運算。上半部經過 sigmoid 的運算,讓它具有 LSTM 的門的作用。然後再與另一半點乘。

-----




圖九、加上殘差的 GLU 圖解。

-----

5. Encoder

-----


https://reniew.github.io/44/

圖十、Encoder。

Encoder 最後一層的輸出,作為 Decoder 每一層(共八層) attention 的參考來源。

-----

6. Decoder 

-----


https://reniew.github.io/44/

圖十一、Decoder。

會用到 Attention 的權重來決定 Encoder 端每個字的份量。

-----




圖十二、Encoder 一次讀完,Decoder 逐字輸出。每次吐出一個字。

-----



圖十三、C = QKV。

last layer:encoder output 的最後一層。

每吐完四個字,hidden state 重新作為下一層的輸入。

-----

7. Multi-Hop Attention

-----


https://reniew.github.io/44/

圖十四、多層 Attention。

不同層有不同的意義。

----- 


# ConvS2S 論文 [1]。

圖十五、八層 Attention。

一、三、六:線性。
二、八:整個來源句的資訊。
四:名詞。
五、七:建立。配合德文(文法結構)的翻譯。

-----

8. Details

-----



圖十六、三個主要模組。

-----


https://norman3.github.io/papers/docs/fairseq.html

圖十七、公式與圖的搭配。

-----

◎ Encoder

-----

They agree:英文的輸入句。
<p>:Padding。
</s>:Sentence 的 End。

e:Embedding。e 是 w 與 p 的和(會經過殘差)。
w:Word Embedding。
p:Positional Embedding。

j:維度是 3,也就是英文,Encoder 字串(含 </s>)的長度。j 從 1 到 3,m 也就是 3。
d:word vector 的維度,本論文初始 d = 768。後可為 512 或 1024 或 2048。
k:kernel 的寬度,本論文 k = 3。
W(2d X kd):權重矩陣。跟 e 卷積後,會得到 A concate B。

v:GLU 的運算。
A:主體的資訊。
B:門的資訊。

z:Encoder 經過 GLU 後的輸出。
u:Encoder 的最後一層。

-----

◎ Decoder

-----

Sie stimmen zu:德文的輸出句。
<p>:Padding。
<s>:Sentence 的 Start。
</s>:Sentence 的 End。
i 的維度是 4,也就是德文,Decoder 字串(含 <s>)的長度。i 從 1 開始。到輸出字為 </s> 時結束。


-----

l:第 l 層。
hi[l] 與 hi[l-1] 的公式:Decoder 的卷積運算與殘差。
gi:上一個時間點 i − 1 的 target embedding。
di:decoder state summary。
aij:Attention Table 的元素。

-----

◎ Attention

-----

ci:Context Vector。

p(y(i+1)):輸入句 x 與輸出句 y 前 i 個字,應該再出現哪個字,的機率分布。輸出字就是取機率最大的那個字。

Wo:transforming the top decoder output hLi via a linear layer with weights Wo and bias bo。
W[l]:第 l 層的權重矩陣。
L:最後一層。

R:實數。
T:T possible next target elements。

-----




圖十八、LSTM + Seq2seq + Attention。

Soft Attention。

「hard / soft attention 是在文章《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》提出的概念,最直觀的一種理解是,hard attention 是一個隨機採樣,採樣集合是輸入向量的集合,採樣的機率分布是alignment function 產出的 attention weight。因此,hard attention 的輸出是某一個特定的輸入向量。soft attention 是一個帶權求和的過程,求和集合是輸入向量的集合,對應權重是 alignment function 產出的 attention weight。hard / soft attention 中,soft attention 是更常用的(後文提及的所有 attention 都在這個範疇),因為它可導,可直接嵌入到模型中進行訓練,hard attention 文中 suggests a Monte Carlo based sampling approximation of gradient。」。


-----




圖十九、Encoder 換成卷積。

-----




圖二十。Decoder 也換成卷積。

-----

在五篇 NLP 的經典論文中,比起之前的 LSTM、Seq2seq、Attention,以及稍後的 Transformer,這篇 ConvS2S 無疑是被低估的,引用次數也只有數千,不像其他動輒上萬。 

去年我選了這五篇論文,今年有深入一些。論文的圖其實就很清楚了。不過還是不夠清楚。

有位日本人把核心重新畫過,突顯了 QKV 的重要,QKV 也是 Transformer 的重點。在 Short Attention 那篇有深入的分析,引用次數則更少。 

有位韓國人把圖加上公式,就更清楚了。可惜還是不夠清楚,因為模型其實是立體的,Decoder 有八層。 

-----

References

◎ 論文

[1] ConvS2S
Gehring, Jonas, et al. "Convolutional sequence to sequence learning." Proceedings of the 34th International Conference on Machine Learning-Volume 70. JMLR. org, 2017.
https://arxiv.org/pdf/1705.03122.pdf

[2] GLU
Dauphin, Yann N., et al. "Language modeling with gated convolutional networks." Proceedings of the 34th International Conference on Machine Learning-Volume 70. JMLR. org, 2017.
https://arxiv.org/pdf/1612.08083.pdf

-----

◎ 英文參考資料

# 論文作者的投影片
2_1-Yarats
https://aiukraine.com/wp-content/uploads/2017/10/2_1-Yarats.pdf

# 綜述
Understanding incremental decoding in fairseq – Telesens
http://www.telesens.co/2019/04/21/understanding-incremental-decoding-in-fairseq/

claps
Seq2Seq model using Convolutional Neural Network – Gautam Karmakar – Medium
https://medium.com/@gautam.karmakar/summary-seq2seq-model-using-convolutional-neural-network-b1eb100fb4c4

-----

◎ 日文參考資料

論文解説 Convolutional Sequence to Sequence Learning (ConvS2S) - ディープラーニングブログ
http://deeplearning.hatenablog.com/entry/convs2s 

fairseq – PyTorch
http://torch.classcat.com/category/fairseq/

-----

◎ 韓文參考資料

ConvS2S  Convolutional Sequence to Sequence Learning
https://reniew.github.io/44/

Convolutional Sequence to Sequence Learning
https://norman3.github.io/papers/docs/fairseq.html

Convolutional Sequence to Sequence Learning
http://jeonseoungseon.blogspot.com/2017/06/convolutional-sequence-to-sequence.html

-----

◎ 簡體中文參考資料

从《Convolutional Sequence to Sequence Learning》到《Attention Is All You Need》 - 知乎
https://zhuanlan.zhihu.com/p/27464080

《Convolutional Sequence to Sequence Learning》阅读笔记 - 知乎
https://zhuanlan.zhihu.com/p/26918935

机器翻译模型之Fairseq:《Convolutional Sequence to Sequence Learning》 - 技术成长笔记 - CSDN博客
https://blog.csdn.net/u012931582/article/details/83719158

如何使用fairseq复现Transformer NMT _ Weekly Review
http://www.linzehui.me/2019/01/28/%E7%A2%8E%E7%89%87%E7%9F%A5%E8%AF%86/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8fairseq%E5%A4%8D%E7%8E%B0Transformer%20NMT/

如何评价 Facebook 新推出的 CNN 机器翻译项目 Fairseq  - 知乎
https://www.zhihu.com/question/59645329

论文笔记(1) ConvS2S Convolutional Seq to Seq Learning - 知乎
https://zhuanlan.zhihu.com/p/60524073

-----

◎ 繁體中文參考資料

論文筆記 Convolutional Sequence to Sequence Learning _ Y.C. Tseng’s Site
https://ycts.github.io/weeklypapers/convSeq2seq/ 

-----

◎ 代碼實作

convs2s — OpenSeq2Seq 0.2 documentation
https://nvidia.github.io/OpenSeq2Seq/html/api-docs/parts.convs2s.html

GitHub - hongweizeng_cnn-seq2seq
https://github.com/hongweizeng/cnn-seq2seq

XSum_XSum-ConvS2S at master · EdinburghNLP_XSum · GitHub
https://github.com/EdinburghNLP/XSum/tree/master/XSum-ConvS2S

GitHub - BruceChaun_NMT  Neural Machine Translation with RNN_ConvS2S_Transoformer
https://github.com/BruceChaun/NMT

GitHub - tobyyouup_conv_seq2seq  A tensorflow implementation of Fairseq Convolutional Sequence to Sequence Learning(Gehring et al. 2017)
https://github.com/tobyyouup/conv_seq2seq

GitHub - pytorch_fairseq  Facebook AI Research Sequence-to-Sequence Toolkit written in Python
https://github.com/pytorch/fairseq 

GitHub - facebookresearch_fairseq  Facebook AI Research Sequence-to-Sequence Toolkit
https://github.com/facebookresearch/fairseq

No comments: