LSTMやってみた
この記事では、TensorFlowとKerasを使用してLSTM(Long Short-Term Memory)を用いた与えられたテキストの一部から次の単語を予測するモデルを構築します。
ライブラリのインポート
import numpy as np
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Embedding, LSTM, Dense
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
テキストデータの準備
# 複数のテキストデータの用意
texts = ["Your input text goes here.", "Another example text for the model."]
# すべてのテキストを1つのテキストに結合
combined_text = " ".join(texts)
# テキストをトークン化
tokenizer = Tokenizer()
tokenizer.fit_on_texts([combined_text])
# 各テキストを整数の系列に変換
sequences_list = [tokenizer.texts_to_sequences([text])[0] for text in texts]
# 入力データとターゲットデータの作成
X_list = []
y_list = []
for sequences in sequences_list:
for i in range(1, len(sequences)):
input_sequence = sequences[:i]
target_word = sequences[i]
X_list.append(input_sequence)
y_list.append(target_word)
X = np.array(X_list)
y = np.array(y_list)
# 入力データのパディング
X = pad_sequences(X)
入力は現在の単語、ターゲットデータは次の単語になるようにしています。
LSTMモデルの構築
total_words = len(tokenizer.word_index) + 1
model = Sequential()
model.add(Embedding(total_words, 50, input_length=X.shape[1]))
model.add(LSTM(100))
model.add(Dense(total_words, activation='softmax'))
model.compile(loss='sparse_categorical_crossentropy', optimizer='adam')
予測
モデルを使用して、与えられたテキストの一部から次の単語を予測します。予測結果は確率的に選ばれ、最も確率の高い単語が次の単語として表示されます。
input_text = "Your input text goes"
input_sequence = tokenizer.texts_to_sequences([input_text])[0]
input_sequence = pad_sequences([input_sequence], maxlen=X.shape[1], padding='post')
predicted_word_index = np.argmax(model.predict(input_sequence), axis=-1)[0]
predicted_word = tokenizer.index_word[predicted_word_index]
print(f"Predicted next word: {predicted_word}")
実行結果
モデル学習した文章は"Your input text goes here."です。
それではモデルに"Your input text goes"を入力し、この文の次に来る単語を予測してみましょう。
以上の通り、モデルの予測結果では"Your input text goes"の後には"here"が来ると予測できています。
まとめ
LSTMでは以上のように系列データに対して、予測を行うことができます。