テキスト分類とシーケンス予測(LSTM)

Kerasを用いた「テキスト分類」および「シーケンス予測」において、LSTM(Long Short-Term Memory)は、系列データの文脈を保持するために広く使用されているRNN(再帰型ニューラルネットワーク)の一種です。以下では、テキスト分類とシーケンス予測の目的、LSTMの特徴、およびKerasによる実装方法について詳しく解説します。


1. テキスト分類とシーケンス予測の違い

項目 テキスト分類 シーケンス予測
入力データ テキスト(文、文書など) 連続したトークン系列(例:単語、文字など)
出力 ラベル(カテゴリ) 次のトークン、系列など
目的 感情分析、スパム検出など 自然言語生成、株価予測など

2. LSTMの特徴と利点

  • 長期依存関係の学習が可能:従来のRNNでは困難だった長い文脈の保持が可能。

  • 勾配消失問題に強い:セル状態(cell state)によって情報の伝搬が安定。

  • シーケンス全体の構造を保持:単語や文字の順序情報を保持したまま学習可能。


3. Kerasによるテキスト分類の実装(LSTM使用)

データ準備(例:IMDb感情分類)

python
from keras.datasets import imdb from keras.preprocessing.sequence import pad_sequences # データのロード max_features = 10000 # 単語の語彙数 maxlen = 500 # 1レビューあたりの最大単語数 (x_train, y_train), (x_test, y_test) = imdb.load_data(num_words=max_features) # パディング(長さを揃える) x_train = pad_sequences(x_train, maxlen=maxlen) x_test = pad_sequences(x_test, maxlen=maxlen)

モデル構築と学習

python
from keras.models import Sequential from keras.layers import Embedding, LSTM, Dense model = Sequential() model.add(Embedding(max_features, 128, input_length=maxlen)) # 単語をベクトルに model.add(LSTM(64)) # LSTM層 model.add(Dense(1, activation='sigmoid')) # 出力層(バイナリ分類) model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(x_train, y_train, batch_size=32, epochs=5, validation_split=0.2)

4. Kerasによるシーケンス予測の実装(LSTM使用)

データ例:単語系列から次の単語を予測

python
import numpy as np from keras.preprocessing.text import Tokenizer from keras.preprocessing.sequence import pad_sequences from keras.utils import to_categorical texts = ["I like machine learning", "I like deep learning", "I enjoy learning"] tokenizer = Tokenizer() tokenizer.fit_on_texts(texts) sequences = [] # 入力と出力の系列を生成(教師あり形式) for line in texts: token_list = tokenizer.texts_to_sequences([line])[0] for i in range(1, len(token_list)): n_gram_seq = token_list[:i+1] sequences.append(n_gram_seq) # パディングと分割 max_seq_len = max(len(x) for x in sequences) sequences = pad_sequences(sequences, maxlen=max_seq_len) x, y = sequences[:, :-1], sequences[:, -1] y = to_categorical(y, num_classes=len(tokenizer.word_index)+1)

モデル構築

python
model = Sequential() model.add(Embedding(len(tokenizer.word_index)+1, 10, input_length=max_seq_len-1)) model.add(LSTM(64)) model.add(Dense(len(tokenizer.word_index)+1, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) model.fit(x, y, epochs=200, verbose=2)

5. まとめ

ポイント 説明
テキスト分類 LSTMを使って系列の意味を保持しながら分類モデルを構築
シーケンス予測 LSTMで系列の前後関係を学習し、次のトークンを予測
Kerasの利便性 SequentialモデルとEmbedding、LSTMレイヤーにより少ないコードで構築可能

これらの実装は、文書分類やチャットボット、言語モデルなど様々なNLP分野に応用可能です。

生成日:2025/05/22