- 「Seq2Seq」について学びたいけど理解できるか不安・・・
- 「Seq2Seq」についてどこから学んでいいか分からない?
- 「Seq2Seq」を体系的に教えて!
人工知能(AI)における自然言語処理の手法である「Seq2Seq(Sequence To Sequence)」は機械対話や、機械翻訳などに使用されていますが、興味があっても難しそうで何から学んだらよいか分からず、勉強のやる気を失うケースは非常に多いです。
私は過去に基本情報技術者試験(旧:第二種情報処理技術者試験)に合格し、2年程前に「一般社団法人 日本ディープラーニング協会」が主催の「G検定試験」に合格しました。現在、「E資格」にチャレンジ中ですが3回不合格になり、この経験から学習の要点について学ぶ機会がありました。
そこでこの記事では、「Seq2Seq」の要点を解説します。
この記事を参考にして「Seq2Seq」の要点が理解できれば、E資格に合格できるはずです。
<<「Seq2Seq」に関する学習のポイントを今すぐ知りたい方はこちら
1.Seq2Seq
- EncorderーDecorderモデルの一種を指す。

- 具体的な用途
機械対話や機械翻訳などに使用されている。
2.Encoder RNN
- Encoder RNNとはユーザーがインプットしたテキストデータを、単語等のトークンに区切って渡す構造。
補足)トークン(token)とは直訳すると「しるし」「象徴」のこと。

Taking:文章を単語等のトークン毎に分割し、トークン毎のIDに分割する。
Embedding:IDから、そのトークンを表す分散表現ベクトルに変換。
Encoder RNN:ベクトルを順番にRNNに入力していく。
食べ 刺し 大丈 でし 。
た 身 夫 たか
単語 | ID | oneーhot 10,000 | embedding ~数百 |
---|---|---|---|
私 | 1 | [1,0,0・・・0] | [0.2 0.4 0.6・・・0.1] |
は | 2 | [0,1,0・・・0] | [ ・・・ ] |
刺身 | 3 | [0,0,1・・・0] | [ ・・・ ] |
昨日 | 4 | [ ・・・ ] | [ ・・・ ] |
・ ・ ・ | ・ ・ ・ | ・ ・ ・ | ・ ・ ・ |
××× | 10,000 | [0,0,0 ・・・ 1] | [ ・・・ ] |
- vec1をRNNに入力し、hidden stateを出力。
このhidden stateと次の入力vec2をまたRNNに入力してきたhidden stateを出力という流れを繰り返す。 - 最後のvecを入れたときのhidden stateをfinal stateとしてとっておく。
このfinal stateがthought vectorと呼ばれ、入力した文の意味を表すベクトルとなる。
BERT(Googleが開発した自然言語処理モデル)
↑ MLMーMasked Language Modelを採用
私 は 昨日 ラーメン を 食べ ました
[・・・] [・・・] [・・・] [・・・] [・・・] [・・・] [・・・]
×
3.Decoder RNN
- Decoder RNNとはシステムがアウトプットデータを、単語等のトークンごとに生成する構造。

- Decoder RNN:Encoder RNN の final state(thought vector)から、
各tokenの生成確率を出力していくfinal state を Decorder RNN のinitial state
として設定し、Embedding を入力。 - Sampling:生成確率にもとづいて token をランダムに選ぶ。
- Embedding: 2で選ばれた token を Embedding して Decoder RNN への次の入力とする。
- Detokenize: 1-3 を繰り返し、2で得られた token を文字列に直す。
問題1
Q.下記の選択肢から、Seq2Seqについて説明しているものを選べ。
(1)時刻に関して順方向と逆方向のRNNを構成し、それら2つの中間層表現を特徴量として利用するものである。
(2)RNNを用いたEncoder-Decoderモデルの一種であり、機械翻訳などのモデルに使われる。
(3)構文木などの木構造に対して、隣接単語から表現ベクトル(フレーズ)を作るという再帰的に行い(重みは共通)、文全体の表現ベクトルを得るニューラルネットワークである。
(4)RNNの一種であり、単純なRNNにおいて問題となる勾配消失問題をCECとゲートの概念を導入することで解決したものである。
A.(2)
問題2
Q.機械翻訳タスクにおいて、入力は複数の単語から成る文(文章)であり、それぞれの単語はone-hotベクトルで表現されている。Encoderにおいて、それらの単語は単語埋め込みにより特徴量に変換され、そこからRNNによって(一般にはLSTMを使うことが多い)時系列の情報をもつ特徴へとエンコードされる。以下は、入力である文(文章)を時系列の情報をもつ特徴量へとエンコードする関数である。ただし_activation関数はなんらかの活性化関数を表すとする。(き)にあてはまるものはどれか。
def encode(word, E, W, U, b):
“””
words: sequence words(sentence), onehot vector, (n_words, vocab_size)
E: word embeding matrix, (embed_size, vocab_size)
W: upward weight, (hidden_size, hidden_size)
U: lateral weights, (hidden_size, embed_size)
b: bias, (hidden_size,)
“””
hidden_size = W.shape[0]
h = np.zeros(hidden_size)
for w in word:
e = (き)
h = _activation(W.dot(e) + U.dot(h) + b)
return h
A.E.dot(W)
〈補足〉dot()関数はベクトルの内積や行列の積を計算する関数
E.dot(W)は行列EとベクトルWの積を求めている。
4.機械翻訳の評価
- BLEUの定義

- BP(Brevity Penalty)は c<r の場合にペナルティが科せられている。
Brevity:直訳すると「簡潔な」 - 対数加重平均をとる理由
・Pn(modified n-gram precision)は指数的に小さくなる傾向がある。
→対数加重平均をとって平坦化
・nが小さい時のスコア・・・妥当性を評価
・nが大きい時のスコア・・・流暢性を評価
5.まとめ
最後まで読んで頂きありがとうございます。
皆様のキャリアアップを応援しています!!
コメント