google/sentencepiece

Unsupervised text tokenizer for Neural Network-based text generation.

SentencePiece – 言語に依存しないサブワードトークナイザー

概要 – SentencePieceは、高速で軽量なライブラリ(C++コアにPython、Go、Rustなどのバインディング)で、生テキストから直接サブワードトークナイゼーションモデルを学習し、適用します。Byte‑Pair Encoding(BPE)とUnigram言語モデルという2つの最も一般的なサブワードアルゴリズムをサポートし、追加の前処理なしでどこでも使用できる単一の自己完結型.modelファイルを生成します。

AIにとって重要な理由 – 最新のニューラル言語モデル(例:LLM、翻訳システム、音声認識パイプライン)には固定サイズの語彙が必要です。SentencePieceを使用すると、完全にデータ駆動でその語彙を作成でき、空白、Unicode、明示的な単語境界のない言語(中国語、日本語、タイ語など)を、言語固有のトークナイザーなしで処理できます。トークナイゼーションは可逆的(ロスレス)で、元の文字列を正確に再構築できるため、デトークナイゼーションが簡単になります。

主な機能

  • 言語に依存しないトレーニング – 生の文を入力するだけ。外部トークナイザーは不要。
  • 2つのサブワードアルゴリズム – BPEとUnigram。どちらもオプションのサブワード正則化(サンプリング)とデータ拡張のためのBPE‑Dropoutをサポート。
  • 高速なC++実装 – 約50k文/秒、メモリ使用量約6MiB。
  • 依存関係ゼロのランタイム(SentencePiece Lite) – メモリマップ可能な小型C++20ライブラリ(約45KBの静的ライブラリ)。オンデバイスや高スループットのサーバーで使用可能。
  • クロス言語バインディング – Python(pip install sentencepiece)、Go、Rust、純粋なC API。
  • 自己完結型モデルファイル – .modelファイルには語彙、正規化ルール、セグメンテーションロジックがバンドルされ、プラットフォーム間で同一の結果を保証。
  • ベンチマーク済みのパフォーマンス – マルチスレッドワークロードでHugging Faceのfast tokenizersを4〜10倍上回る(READMEの表を参照)。

典型的なワークフロー(Python)

import sentencepiece as spm
# 1️⃣ 生テキストファイルからトレーニング
spm.SentencePieceTrainer.train(
    input='data.txt', model_prefix='my', vocab_size=8000)

# 2️⃣ モデルをロード
sp = spm.SentencePieceProcessor(model_file='my.model')

# 3️⃣ エンコード/デコード
ids   = sp.encode('Hello world!', return_type=int)
pieces = sp.encode('Hello world!', return_type=str)
print(sp.decode(ids))   # → "Hello world!"

同じモデルをC++、Go、Rustから同等のAPIで使用できます。

使用すべき場面

  • カスタムのサブワード語彙を必要とする新しいLLM、翻訳、音声モデルの構築。
  • 明確な単語区切りがない言語を扱う場合。
  • エッジデバイスや高スループットのサーバーで、依存関係のない小さなランタイムが必要な場合。
  • 複数のプログラミング環境で決定論的で可逆的なトークナイゼーションが必要な場合。

リソース – リポジトリには、詳細なドキュメント(CLIガイド、C++/Python APIリファレンス、トレーニングオプションのチートシート、Dockerデプロイ手順)と、再現性のためのパフォーマンスベンチマークスイートが含まれています。

ライセンス – Apache 2.0(寛容で商用利用に適しています)。

関連

  • プロジェクト
  • Dispatch
  • Dispatch
  • プロジェクト
  • プロジェクト