2.2 LLMのトレーニングデータ準備と前処理|Pythonでのデータクレンジングとトークナイゼーション

公開日: 2024-11-07 最終更新日: 2026-08-24 バージョン: 4
2.2 LLMのトレーニングデータ準備と前処理|Pythonでのデータクレンジングとトークナイゼーション

前のセクション「Hugging FaceのTransformersを使ったファインチューニング」では、ファインチューニングの手法とBERTモデルの具体例を紹介しました。

トレーニングデータの準備と前処理

LLM(大規模言語モデル)のファインチューニングでは、適切なトレーニングデータの準備と前処理が欠かせません。データの品質はモデルのパフォーマンスに直結します。このセクションでは、テキストデータのクレンジング、トークナイゼーション、そして効率的なデータ準備の方法について解説します。

前処理ステップ目的代表的なツール
クレンジングHTMLタグ・記号・重複空白を除去re、BeautifulSoup
正規化全角/半角・大文字/小文字を統一unicodedata
トークナイゼーションモデルが扱える単位に分割transformers.Tokenizer
バッチ整形長さを揃え、padding/truncation を適用datasets.map

データクレンジング

まずはデータクレンジングです。テキストデータには、不要な空白、特殊文字、HTMLタグなどが含まれていることが多いため、これらを取り除く処理が必要です。以下は、Pythonを使った簡単なクレンジングの例です。


import re

# テキストのクレンジング関数
def clean_text(text):
    text = re.sub(r"<.*?>", "", text)  # HTMLタグの削除
    text = re.sub(r"[^a-zA-Z0-9\s]", "", text)  # 特殊文字の削除
    text = re.sub(r"\s+", " ", text)  # 複数の空白を一つに
    return text.strip()

# 使用例
sample_text = "Hello, world! 
This is a sample text." cleaned_text = clean_text(sample_text) print(cleaned_text) # 出力: "Hello world This is a sample text"

トークナイゼーション

次に、トークナイゼーションです。これは、テキストをモデルが扱える形式に変換する工程です。Hugging FaceのTransformersライブラリを使うと、少ないコードでトークナイゼーションを行えます。


from transformers import BertTokenizer

# BERT用のトークナイザーの読み込み
tokenizer = BertTokenizer.from_pretrained("bert-base-uncased")

# サンプルテキストのトークナイゼーション
text = "Hello, this is a sample text for tokenization."
tokens = tokenizer.tokenize(text)
input_ids = tokenizer.encode(text, add_special_tokens=True)

print("Tokens:", tokens)
print("Input IDs:", input_ids)
        

データセットの準備

トレーニングデータをモデルに入力する前に、データセットを整える必要があります。Hugging Faceのdatasetsライブラリを使えば、効率的にデータセットを準備できます。


from datasets import load_dataset

# IMDbデータセットの読み込み
dataset = load_dataset("imdb")

# データの前処理関数
def preprocess(data):
    text = clean_text(data["text"])
    tokens = tokenizer(text, truncation=True, padding="max_length")
    return tokens

# データのトークナイズ
train_data = dataset["train"].map(preprocess, batched=True)
test_data = dataset["test"].map(preprocess, batched=True)

# データ形式の確認
print(train_data[0])
        
ひとことで言うと

クレンジング → 正規化 → トークナイゼーション → バッチ整形の順で整えることで、モデルにとって扱いやすい入力になり、学習の安定性と精度が上がります。

データ前処理のポイント

  • データの多様性: データセットに多様なトピックや文脈が含まれていると、モデルの汎用性が高まります。
  • データのバランス: クラスが偏っている場合、モデルが偏った予測をしてしまうことがあるため、クラス間のバランスを整えることが大切です。
  • 効率的なバッチ処理: 大規模データセットでは、バッチ処理を活用することでトレーニングが効率化します。

次のセクション「2.3 トレーニングの実行とモデル評価」では、トレーニングの実行方法とモデルの評価手法について詳しく解説します。


下田 昌平
下田 昌平
開発と設計を担当。1994年からプログラミングを始め、今もなお最新技術への探究心を持ち続けています。

質問と回答

このトピックについて質問はありますか?以下からお気軽にどうぞ(登録不要)。担当チームが内容を確認し、回答します。

まだ質問はありません。最初の質問をどうぞ。

質問する

確認のため、入力されたメールアドレス宛に一度だけ確認メールをお送りします。質問は確認後に公開されます。