ニューラル機械翻訳

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

David Cecchini

Data Scientist

エンコーダとデコーダ

ニューラル機械翻訳のアーキテクチャ。入力言語用のエンコーダと出力言語用のデコーダに分かれる。エンコーダは入力言語の言語モデル、デコーダは出力言語の言語モデルを学習する。エンコーダの最終状態がデコーダに渡され、他の入力はない。

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

エンコーダ例

# モデルを作成
model = Sequential()

# 入力言語の埋め込み層 model.add(Embedding(input_language_size, input_wordvec_dim, input_length=input_language_len, mask_zero=True))
# LSTM 層を追加 model.add(LSTM(128))
# 最後のベクトルを反復 model.add(RepeatVector(output_language_len))
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

デコーダ例

# エンコーダ直後
model.add(LSTM(128, return_sequences=True))

# TimeDistributed を追加 model.add(TimeDistributed(Dense(eng_vocab_size, activation='softmax')))
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

データ準備

エンコーダ/デコーダのテキスト前処理。エンコーダでは入力言語を数値インデックス列に変換し、デコーダでは出力言語に対して同様に変換し、さらに各インデックスをワンホット化する

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

入力言語のデータ準備

# モジュールをインポート
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
# Tokenizer クラスを使用
tokenizer = Tokenizer()
tokenizer.fit_on_texts(input_texts_list)

# テキストを数値インデックス列へ X = tokenizer.texts_to_sequences(input_texts_list)
# シーケンスをパディング X = pad_sequences(X, maxlen=length, padding='post')
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

出力言語のトークナイズ

# Tokenizer クラスを使用
tokenizer = Tokenizer()
tokenizer.fit_on_texts(output_texts_list)

# テキストを数値インデックス列へ Y = tokenizer.texts_to_sequences(output_texts_list)
# シーケンスをパディング Y = pad_sequences(Y, maxlen=length, padding='post')
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

出力言語のワンホット化

# 一時変数を作成
ylist = list()

# 数値インデックス列をループ for sequence in Y:
# 各インデックスをワンホット化 encoded = to_categorical(sequence, num_classes=vocab_size)
# ワンホットをリストに追加 ylist.append(encoded)
# np.array にして整形 Y = np.array(ylist).reshape(Y.shape[0], Y.shape[1], vocab_size)
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

学習と評価の要点

モデル学習:

model.fit(X, Y, epochs=N)

評価:

  • BLEU を使用
    • nltk.translate.bleu_score
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

Passons à la pratique !

Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

Preparing Video For Download...