言語モデル入門

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

David Cecchini

Data Scientist

文の確率

多様なモデル

  • 「I loved this movie」の確率。
  • ユニグラム
    • $$P(\text{sentence}) = P(\text{I})P(\text{loved})P(\text{this})P(\text{movie})$$
  • N-グラム
    • N = 2(バイグラム): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{loved})P(\text{movie} | \text{this})$$
    • N = 3(トライグラム): $$P(\text{sentence}) = P(\text{I})P(\text{loved} | \text{I})P(\text{this} | \text{I loved})P(\text{movie} | \text{loved this})$$
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

文の確率(続き)

  • スキップグラム
    • $$P(\text{sentence}) = P(\text{context of I} | \text{I})P(\text{context of loved} | \text{loved}) \ $$ $$P(\text{context of this} | \text{this})P(\text{context of movie} | \text{movie})$$
  • ニューラルネットワーク
    • 文の確率はネットワーク出力層の softmax により得られます
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

RNN との関連

RNN ではどこでも言語モデル!

  • ネットワーク自体

RNN は次の語を予測できるため、言語モデルとして捉えられる。

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

RNN との関連(続き)

  • 埋め込み層(Embedding)

モデルの層を大まかに示す。埋め込み層は入力層の直後に置き、単語を高密度表現に変換する。

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

語彙辞書の作成

# ユニークな単語を取得
unique_words = list(set(text.split(' ')))
# 辞書を作成: 単語がキー、インデックスが値
word_to_index = {k:v for (v,k) in enumerate(unique_words)}
# 辞書を作成: インデックスがキー、単語が値
index_to_word = {k:v for (k,v) in enumerate(unique_words)}
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

入力の前処理

# 変数 X と y を初期化
X = []
y = []

# テキストを `sentence_size` ずつ、ステップ幅 `step` で走査 for i in range(0, len(text) - sentence_size, step):
X.append(text[i:i + sentence_size]) y.append(text[i + sentence_size])
# 例(数値は語彙のインデックス):
# 文: "i loved this movie" -> (["i", "loved", "this"], "movie")
X[0],y[0] = ([10, 444, 11], 17)
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

新しいテキストの変換

# インデックス列の文を保持するリストを作成
new_text_split = []

# ループして辞書からインデックスを取得 for sentence in new_text:
sent_split = []
for wd in sentence.split(' '):
ix = wd_to_index[wd]
sent_split.append(ix)
new_text_split.append(sent_split)
Kerasで学ぶ言語モデリングのためのRecurrent Neural Networks (RNNs)

練習しましょう!

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

Preparing Video For Download...