seq2seq (sequence-to-sequence)

1. seq2seq (sequence-to-sequence)とは [概要]

seq2seq (sequence-to-sequence) とは,機械翻訳で初めに用いられた,テキストなど系列データ同士の系列変換モデルを,RNN2つの直列接続で構成されるRNN Encoder-Decoder [Cho et al., 2014] で学習する仕組みである [Kalchbrenner and Blunsom, 2013], [Sutskever et al., 2014] .

この記事では,seq2seqの機械翻訳向けの基本形について述べる.seq2seq は,のちにアテンション機構を加えたseq2seq with attention [Bahdanau et al., 2015] が提案されて,汎用的に様々な系列変換問題に使用されるようになる.

その後 Transformer へもつながる意味で,この最初のseq2seq (attentionまだ無し)の提案は,深層学習時代の最も重要なターニングポイントの1つである (※ 著者がOpenAI の Ilya Sutskever氏である点も重要).

2. seq2seq による機械翻訳

図1. seq2seq (sequence-to-sequence) による機械翻訳
図1. seq2seq (sequence-to-sequence) によるニューラル機械翻訳

seq2seqの機械翻訳問題では,系列長 $N$ の入力文 $\bm{X}$ (言語A: ここでは英語)と,入力文と同じ意味を持つ系列長 $M$ の変換後の出力文 $\bm{Y}$ (Aと異なる言語B:ここでは日本語)のペアを用意し,それらの言語間で自動翻訳が行えるようにseq2seqを学習する (図1):

3.1 seq2seqの構成

まず,入力文と出力文の正しいペア1つを,以下のように定義する:

  • 入力(ソース)文の単語ベクトル系列:
    • $\bm{X} = \{\bm{x}^{(1)},\bm{x}^{(2)}, \ldots,\bm{x}^{(N)} \}$
  • 出力(ターゲット)文の単語ベクトル系列:
    • $\bm{Y} = \{\bm{y}^{(1)},\bm{y}^{(2)}, \ldots,\bm{y}^{(M)} \}$

この翻訳文ペア(同じ意味同士の,異なる2言語の文)を,大量に用意した状態から,機械翻訳向けのseq2seq (初期提案では,LSTMを2つ直列接続したもの)を,入力文をもとに出力文を生成できる「系列変換モデル」として学習する.

ここで,入力系列の$j$番目の単語表現 $\bm{x}^{(j)}$ と,入力系列の$j$番目$\bm{y}^{(i)}$ を,RNNが計算しやすい低次元の潜在変数(図1 の隠れベクトル)へと変換するために,それぞれの言語用に,埋め込み層の投影行列(もとい全結合層) $\bm{E}^{X},\bm{E}^{Y} $を学習しておく(3.1.1節).

元のK = 15,000語彙中のどの単語かを指すone-hot表現 (単語ID) K次元ベクトルを,100~512次元程度の低次元ベクトル表現へと埋め込み層で射影した埋め込みベクトルを用いる [Cho et al., 2014].これにより,各フレームで,RNNには $\bm{E}^{X}$ で単語埋込みを行った低次元ベクトル $\bm{x}^{(j)}$ を各フレームで入力できるようになる(図1 最下段).

図1. seq2seq (sequence-to-sequence) による機械翻訳
図1(再掲). seq2seq (sequence-to-sequence) によるニューラル機械翻訳

さて,seq2seq (図1) による機械翻訳では,以下の2つの再帰型ニューラル言語モデル(RNNLM)を,中間の潜在ベクトル1つだけでお互い接続した,「RNN Encoder-Decoder」を使用して,言語間の変換を行う:

  • エンコーダRNN:入力系列をエンコードして単語系列を(潜在変数側で)符号化する (図1 青色)
  • デコーダRNN:出力系列をデコードし単語を予測して,1単語ずつ順に生成する (図1 赤色)

エンコーダRNNの $j$ 番目の隠れ状態ベクトルを $\bm{s}^{(j)}$ とし,デコーダRNNの $i$ 番目の潜在状態ベクトルを $\bm{h}^{(i)}$ とする:

  • エンコーダRNNの隠れ状態系列:
    • $\{ \bm{s}^{(1)}, \bm{s}^{(2)}, \ldots,\bm{s}^{(j)}, \ldots, \bm{s}^{(N)} \}$
  • デコーダRNNの隠れ状態系列:
    • $\{ \bm{h}^{(1)}, \bm{h}^{(2)}, \ldots, \bm{h}^{(i)},\ldots, \bm{h}^{(M)}\}$

前半のエンコーダRNNでは,他言語に変換したい「ソース言語」の文章全体を,隠れ層ベクトル $\bm{s}^{(j)}$ へエンコードする.後半のデコーダRNNでは,エンコーダから受け渡された最後の隠れ層ベクトル $\bm{s}^{(N)}$ を最初の入力とし,以降は「ターゲット言語」の初の単語を1つずつRNNで生成していく.後半エンコーダの各フレームでは,生成された直前の予測単語を$ $\bm{E}^{Y}$ で埋め込んだベクトルも,次単語を予測する入力として用いながら,RNNで1単語ずつターゲット文を生成していく.

seq2seq with attention の論文 [Bahdanau et al., 2015] の supplemental material のA2 節「DETAILED DESCRIPTION OF THE MODEL」を読むと,(アテンションも加わっているが) seq2seqの手続きや構成要素を,詳細に説明してくれているので,seq2seqの全容を詳しく理解しやすい.

3.1.1 低次元の入力単語表現へ射影する「埋め込み層」の学習

ここで,入力 $\bm{x}^{(j)}$ と出力 $\bm{y}^{(i)}$ には,汎用的な単語の分散表現のベクトル(word2vecなど)を,用いるのも良い.しかし,機械翻訳ではソース言語とターゲット言語の統計から限定された語彙をデータセット文から構築することから,単語表現も学習可能である.

そこで,(word2vecで重みを初期化した)埋め込み層を用意しておいて,ソース言語の単語埋め込み層の$\bm{E}^{X}$と,ターゲット言語の単語埋込み層 $\bm{E}^{Y}$も,seq2seq と一緒に学習することが普通となっていった.

また,語彙 K = 15,000は,各言語における「頻出ワード上位15,000の単語」から,データセットの単語頻度解析を通じて決める.上位頻度単語群以外は,未知語として [UNK] (UnknownのUNK)という特別トークンとして取り扱い,語彙から除外して1クラスにまとめて(ノイズのように)とり扱えるようにする [Cho et al., 2014].以上が,埋め込み単語ベクトルの準備である.

以上のように,入力文のone-hotベクトルを,単語埋め込み層 $\bm{E}^{X}$で低次元埋め込みベクトルへ射影したのちEncoder(中身はLSTMGRU)へ入力するのが,(この当時の)NLPでは定石手段となっており,ターゲット言語でも,単語埋込層$\bm{E}^{Y}$を別途学習する.

これはVision-Language(例:画像キャプション生成)やText-to-Speechなど,異なるモーダル間の変換においてseq2seq(やseq2seq with attention)を用いる場合も同じで,言語ごとに単語埋込み層をデータセットの文章群から学習しておく.

Transformer 登場以降は,事前に自動トークナイザ (WordPieceやSentencePieceなど)を用いて,サブワードレベルまで分割した「トークンの辞書」を,NLP系列変換モデルの,各フレームの入力単位として用いる.つまり,ワード単位のトークンではなく,サブワードレベルまで分割したトークン辞書によるone-hot表現 (トークンID) を,Transformerの各フレームの入力トークンとして用いる.

3.2 処理手順

機械翻訳seq2seqは,前半RNN (RNNLMによる入力文解釈), 真ん中での隠れ状態の受け渡し, 後半RNN (RNNLM による出力文生成)の,「3段階の処理」で構成される:

(1) 前半RNNの処理 (翻訳元の言語Aのテキストを解釈)

前半(入力文)では,エンコーダのRNNを用いて,翻訳元であるソース言語のテキストの各単語を,隠れ層ベクトルにエンコードする.

(2) RNN間で潜在状態ベクトルを受け渡し

Encoder RNNの最後の隠れ層ベクトル $\bm{s}^{(N)}$が,Decoder RNNの最初の $\bm{h}^{(1)}$ (図3 中央のピンクの潜在変数ベクトル)に接続している.

この橋渡しにより,Encoder RNNで「系列全体の情報が符号化された潜在変数ベクトル」がDecoder RNNへと受け渡され,それをもとにDecoder RNNを用いて,翻訳後の言語での文章生成が開始される.

(3) 後半RNNの処理 (翻訳先の言語Bのテキストを生成)

後半(出力文)では,デコーダのRNNで,エンコーダから得たソース言語の隠れ層のベクトル(潜在状態ベクトル)を最初の入力として,単語を1つ生成しては,その生成された単語も(再度ターゲット埋め込み層で埋め込みベクトル化して),次の単語を予測する入力に,用いながら,文章全体をデコーダのRNNで再帰的に1フレームずつ生成する.

Decorder-RNNの各ステップでは,次の潜在変数ベクトル $\bm{h}^{(i+1)}$ を,1つ前の予測単語を埋込んだベクトル $\bm{y}_{i-1}$ と,隠れ状態 $\bm{h}^{(i)}$ から予測する (図3, 右側).特集トークンの<EOS> =End of Sentence が予測された時点で,文生成は終わるので,翻訳は終了である.

4. seq2seq with attention への発展

seq2seqでは入力系列が長い場合に,RNNが推定していく潜在変数が,初期の単語の情報を覚えておくことができず,出力単語数が多いとその潜在変数の値が似通ってしまう問題があった.

そこで,この問題を解決するために,seq2seqに「アテンション機構」を挿入して拡張をおこなった seq2seq with attention [Bahdanau et al., 2015], [Luong et al., 2015] が提案された.seq2seq with attention では,デコード中の各フレームで動的に変化する入力コンテキストを得られる.これにより,毎フレーム $t$ で各入力全単語への注目度重みづけ係数(=アテンション係数)を変えて,文章の生成が可能になった.

( 詳しくは,親記事の系列対系列変換とアテンション機構の記事も参照)

また,seq2seq with attentionは,その他の「言語 v.s 別モーダル間」の変換モデルに応用されていく.例えば音声認識やText-to-speechに,画像キャプショニングやAudio Visual Embeddingなどで,seq2seq with attentionは応用される.そして,その「あらゆる系列変換問題でseq2seq with attentionを使う」という,流れはTransformerが登場すると,Transformerが代替品となり継承することとなった.

5. まとめ

この記事では,機械翻訳向けに提案されたseq2seq (RNN Encoder-decoder)を紹介した.seq2seqによる言語翻訳は,再帰型ニューラル言語モデルを2つ繋げた拡張版として登場し,ニューラル機械翻訳を実現し,現代の高精度な機械翻訳製品の登場につながっていく,大元の技術となった.すぐにseq2seq with attentionに発展し,その後のTransforrmerやBERTにつながる重要な技術である.

References

  • [Bahdanau et al., 2015] Bahdanau, Dzmitry, Kyunghyun Cho, and Yoshua Bengio. “Neural machine translation by jointly learning to align and translate.” In ICLR, 2015.
  • [Cho et al., 2014] Kyunghyun Cho, Bart van Merrienboer, Caglar Gulcehre, Fethi Bougares, Holger Schwenk, and Yoshua Bengio. 2014. Learning phrase representations using RNN encoder-decoder for statistical machine translation. In EMNLP.
  • [Kalchbrenner and Blunsom, 2013] N. Kalchbrenner and P. Blunsom, “Recurrent continuous translation models,” In EMNLP, 2013.
  • [Luong et al., 2015] M.-T. Luong, H. Pham, and C. D. Manning, Effective approaches to attention-based neural machine translation. In EMNLP, 2015.
  • [Sutskever et al., 2014] Sutskever, I., Vinyals, O., and Le, Q. V. Sequence to sequence learning with neural networks. In NIPS, 2014.
  • 増村亮. “深層学習に基づく言語モデルと音声言語理解.” 日本音響学会誌 73.1 (2017): 39-46.

参照外部リンク

参考書籍