テキストデータの処理(トークナイズ、パディング)

TensorFlowにおけるテキストデータの前処理は、機械学習モデル(特に自然言語処理モデル)に入力できる形式にテキストを変換する重要なステップです。主な処理には「トークナイズ(tokenization)」と「パディング(padding)」があります。以下にそれぞれの処理について詳しく説明します。


1. トークナイズ(Tokenization)

概要:

テキストを単語やサブワード、文字などの単位に分割し、それを数値に変換する処理です。モデルはテキストをそのまま扱うことができないため、数値化する必要があります。

一般的な手順:

  1. 単語単位の分割(word-level tokenization)

    • 例: "TensorFlow is powerful."["TensorFlow", "is", "powerful", "."]

  2. 数値への変換(整数エンコーディング)

    • 単語ごとにユニークな整数IDを割り当てる。

    • 例: {"TensorFlow": 1, "is": 2, "powerful": 3, ".": 4}

TensorFlowでの実装(Tokenizer):

python
from tensorflow.keras.preprocessing.text import Tokenizer texts = ["TensorFlow is powerful", "Tokenization is essential"] tokenizer = Tokenizer() tokenizer.fit_on_texts(texts) sequences = tokenizer.texts_to_sequences(texts) print(sequences) # [[1, 2, 3], [4, 2, 5]]

補足:

  • tokenizer.word_indexを使うと語彙とIDの対応を確認できます。

  • サブワード単位のトークナイズやSentencePieceなども別のトークナイザーとして使用されます。


2. パディング(Padding)

概要:

モデルの入力テンソルは固定サイズである必要がありますが、文の長さは可変です。そこで、短い文に対しては指定した長さに揃えるために「パディング」を行います。

例:

python
sequences = [[1, 2, 3], [4, 2]]

→ パディング後:

python
[[1, 2, 3], [0, 4, 2]]

TensorFlowでの実装(pad_sequences):

python
from tensorflow.keras.preprocessing.sequence import pad_sequences padded = pad_sequences(sequences, padding='pre') print(padded)

パラメータ:

  • padding='pre' または 'post'(どちら側に0を追加するか)

  • maxlen=指定長(最大長を指定してカット/パディングする)

  • truncating='pre' または 'post'(長すぎるシーケンスをどちら側からカットするか)


応用例:テキストの前処理フロー

python
texts = ["I love deep learning", "TensorFlow makes it easy"] # トークナイズ tokenizer = Tokenizer() tokenizer.fit_on_texts(texts) sequences = tokenizer.texts_to_sequences(texts) # パディング padded_sequences = pad_sequences(sequences, padding='post')

注意点

  • トークナイザーは訓練データでfitし、検証/テストデータにも同じ設定で使う必要があります。

  • 未知語(語彙に存在しない単語)への対応としてoov_token(out-of-vocabulary)を設定することが推奨されます。


まとめ

ステップ 目的 主なAPI
トークナイズ テキスト → 整数IDの列 Tokenizer
パディング 長さを統一してテンソル化 pad_sequences

これらの処理を適切に行うことで、テキストデータをニューラルネットワークに入力可能な形式に変換できます。

必要に応じて、Subword Tokenizer(tensorflow_textやTFDSのSubwordTextEncoderなど)や、TextVectorizationレイヤー(Kerasの高水準API)も活用できます。

生成日:2025/05/22