Tokenizerとpad_sequencesによるテキスト前処理

Kerasにおける「Tokenizer」と「pad_sequences」は、自然言語処理(NLP)でテキストデータをニューラルネットワークに入力できる数値形式に変換するための基本的な前処理ツールです。以下にそれぞれの役割と使い方を詳しく説明します。


1. Tokenizerとは

Tokenizerは、テキストを整数の列に変換するためのユーティリティクラスです。各単語や文字に対して一意のインデックス(トークン)を割り当てます。

主な機能

  • 語彙の構築(頻度に基づいてインデックスを付与)

  • テキストの整数シーケンス化(数値のリストに変換)

  • ワンホットエンコーディングの生成(必要に応じて)

  • 単語とインデックスの相互変換(word_indexindex_word

使い方

python
from keras.preprocessing.text import Tokenizer texts = ["私は猫です", "私は犬が好きです"] tokenizer = Tokenizer(num_words=10000) # 語彙数の上限を設定 tokenizer.fit_on_texts(texts) # 単語とインデックスの辞書を取得 print(tokenizer.word_index) # {'私': 1, 'です': 2, '猫': 3, '犬': 4, 'が': 5, '好き': 6} # テキストを数値のリストに変換 sequences = tokenizer.texts_to_sequences(texts) print(sequences) # [[1, 3, 2], [1, 4, 5, 6, 2]]

2. pad_sequencesとは

pad_sequencesは、長さが異なるシーケンスを指定した長さに揃えるための関数です。ニューラルネットワークでは入力の次元を固定する必要があるため、短いシーケンスにはパディング(補完)を、長いシーケンスにはカット(切り捨て)を行います。

主な引数

  • sequences: リストのリスト(各リストは整数のトークン列)

  • maxlen: 出力の長さ(指定しない場合は最長のシーケンスに合わせる)

  • padding: 'pre'または'post'(前か後にパディング)

  • truncating: 'pre'または'post'(前か後を切り捨てる)

  • value: パディングに使う数値(デフォルトは0)

使い方

python
from keras.preprocessing.sequence import pad_sequences # 上で作成したシーケンス sequences = [[1, 3, 2], [1, 4, 5, 6, 2]] # 長さを最大4に揃える(短い方に0を追加) padded = pad_sequences(sequences, maxlen=4, padding='pre') print(padded) # [[0, 1, 3, 2], # [4, 5, 6, 2]]

3. 一連のテキスト前処理フロー(まとめ)

python
texts = ["私は猫です", "私は犬が好きです"] # 1. Tokenizerで数値化 tokenizer = Tokenizer() tokenizer.fit_on_texts(texts) sequences = tokenizer.texts_to_sequences(texts) # 2. pad_sequencesで長さを統一 padded_sequences = pad_sequences(sequences, maxlen=5)

4. 注意点

  • Tokenizerはデフォルトで小文字変換や句読点の除去を行う英語向け仕様。日本語では事前に形態素解析(例:MeCabやJanome)が必要な場合もあります。

  • 語彙数が多い場合はnum_wordsで制限し、未知語への対応も検討します(oov_token引数を活用)。


5. 実用例(分類タスク前処理)

python
from keras.models import Sequential from keras.layers import Embedding, Flatten, Dense model = Sequential() model.add(Embedding(input_dim=10000, output_dim=16, input_length=5)) # 5はpad_sequencesのmaxlen model.add(Flatten()) model.add(Dense(1, activation='sigmoid'))

このように、Tokenizerpad_sequencesを組み合わせることで、任意の長さのテキストデータをニューラルネットワークが処理可能な形式に前処理することができます。必要に応じて形態素解析や前処理関数と組み合わせることで、さらに高度なテキスト処理が可能です。

生成日:2025/05/22