1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LSTMを使用して文中の次の単語を予測してみた

Posted at

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"を入力し、この文の次に来る単語を予測してみましょう。
image.png
以上の通り、モデルの予測結果では"Your input text goes"の後には"here"が来ると予測できています。

まとめ

LSTMでは以上のように系列データに対して、予測を行うことができます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?