1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

独自のドメイン知識を持ったカスタムLLMを構築するための、データクリーニングとトークナイザーのカスタマイズ

1
Posted at

独自のドメイン知識を持ったカスタムLLMを構築するための、データクリーニングとトークナイザーのカスタマイズ

Feature(88).png

はじめに

こんにちは、NKKTech Global 技術チームです。

医療、金融、製造、あるいは特定の企業独自の技術文書など、一般的なLLM(GPT-4やLlama 3など)が十分にカバーしていないドメイン知識を学習させる場合、単純にデータを流し込むだけでは十分な精度は得られません。

「Garbage In, Garbage Out(ゴミを入れればゴミが出る)」の原則通り、専門性の高いモデル構築において最も重要なのは、**「データの純度をどこまで高められるか」「専門用語を正しく認識できるか」**です。本記事ではその核心となる手法を解説します。


1. データクリーニング:質の高いドメイン知識を抽出する

ドメイン特化型モデルの学習では、汎用データセットに比べてデータ量が限られるため、1件あたりの「情報の密度」を最大化する必要があります。

① 重複排除(Deduplication)

Webスクレイピングや社内Wikiからデータを集めると、同じ内容やわずかに異なるだけの文章が大量に含まれます。これらは過学習(Overfitting)の原因となります。

  • 手法: MinHashLSH (Locality Sensitive Hashing) を用いて、意味的に近い文章を特定し、重複を排除します。

② ノイズ除去と構造化

PDFやHTMLから抽出したテキストには、ヘッダー、フッター、広告、文字化けした記号などの「ノイズ」が含まれます。

  • 手法: 正規表現による定型文の削除に加え、LLM自体(あるいは軽量な分類モデル)を用いて「その文章が学習に値する品質か」をスコアリングし、低品質なデータ(Perplexityが異常に高いものなど)を切り捨てます。

③ PII(個人情報)の削除

エンタープライズ用途では、顧客名や電話番号、機密情報が含まれないよう、NER(命名エンティティ認識)を用いてマスキング処理を徹底します。


2. トークナイザーのカスタマイズ:専門用語を「一塊」で扱う

LLMはテキストを「トークン」という単位に分割して処理します。デフォルトのトークナイザー(例:Llama 3のBPE)では、専門用語が細切れに分割されてしまい、学習効率が著しく低下することがあります。

なぜデフォルトでは不十分なのか?

例えば、「NKKTech」という固有名称をデフォルトのトークナイザーにかけると、N, KK, Tech のように3つのトークンに分かれるかもしれません。

  • 弊害: モデルは「3つのトークンの組み合わせ」として学習する必要があり、コンテキストウィンドウを無駄に消費し、意味の理解も不安定になります。

カスタマイズの戦略

  1. 新しいトークンの追加 (add_tokens):
    専門用語や製品IDなどを「1つのトークン」として辞書に追加します。既存の語彙を壊さずに済みますが、追加したトークンの埋め込み(Embedding)を一から学習させる必要があります。
  2. トークナイザーの再学習 (train_new_from_iterator):
    ドメインデータを用いて、トークナイザー自体をトレーニングし直します。
    • メリット: そのドメインで頻出する単語の組み合わせが最適化され、推論時のスループット(速度)も向上します。

実装イメージ(Hugging Face tokenizers

from tokenizers import ByteLevelBPETokenizer

# 既存のトークナイザーをベースにドメインデータで再学習
tokenizer = ByteLevelBPETokenizer()
paths = ["domain_specific_corpus.txt"]

tokenizer.train(files=paths, vocab_size=52000, min_frequency=2, special_tokens=[
    "<s>", "<pad>", "</s>", "<unk>", "<mask>",
])

# 専門用語が1つのトークンとして扱われるか確認
output = tokenizer.encode("NKKTechGlobal_Internal_System")
print(output.tokens)

3. 実践:データとトークナイザーの相乗効果

ドメイン特化型LLMを成功させるためのフローは以下の通りです。

  1. コーパス作成: 徹底的なクリーニングと、Markdown形式などへの構造化。
  2. 統計分析: 頻出する単語を抽出し、現在のトークナイザーでの分割状況を調査。
  3. トークナイザー調整: 頻出する専門用語が適切に1トークンになるまで調整。
  4. 継続的学習 (Continued Pre-training): 調整したトークナイザーとクリーニング済みデータを用いて学習。

まとめ

独自のドメイン知識を持つLLMの構築は、モデルの重みをいじる前に、**「言葉の定義(トークナイザー)」と「知識の純度(データクリーニング)」**を整えることから始まります。この基礎が盤石であれば、より少ない計算リソースで、より精度の高い専門特化モデルを生み出すことが可能です。

NKKTech Globalでは、各業界に特化したカスタムLLMの構築支援を行っています。データの収集から、最適なトークナイザーの設計、効率的な学習パイプラインの構築まで、グローバルな視点でサポートいたします。

お問い合わせ先

独自のデータセットを用いたAIモデルの開発や、LLMのカスタマイズに関する技術的なご相談は、下記よりお気軽にお問い合わせください。


著者:NKKTech Global 技術チーム
私たちは、グローバルな知見と確かな技術力で、次世代のAI活用を支える技術パートナーです。

1
1
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
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?