サブワード分割(サブワードブンカツ)
サブワード分割(Subword Segmentation)は、テキストを単語よりも細かいサブワード単位に分割するNLP技術の総称で、BPE・WordPiece・Unigram LM・SentencePieceなどのアルゴリズムがある。未知語問題の解消と語彙サイズの抑制を両立し、GPT-4o・Llama 3・Gemma 2など全ての現代LLMが採用している基盤技術である。
サブワード分割とは
サブワード分割(Subword Segmentation)は、テキストを単語単位でもなく文字単位でもなく、その中間の「サブワード」単位に分割する自然言語処理の基盤技術である。GPT-4o、Claude 3.5 Sonnet、Llama 3.1、Gemma 2、Qwen 2.5、Mistral Largeなど、2026年現在の全ての主要LLMがサブワード分割をテキスト処理の前処理として採用している。
概要
自然言語処理において、テキストをどの粒度で分割するかは根本的な設計選択である。歴史的に3つのアプローチが存在する:
- 単語分割: 空白・句読点で区切る(英語向き)。語彙サイズが膨大(英語だけで数十万単語)になり、未知語(OOV: Out-of-Vocabulary)問題が発生する
- 文字分割: 1文字ずつ分割する。語彙サイズは小さい(英語26文字+記号)が、シーケンスが極端に長くなりTransformerの計算量O(n²)が爆発する
- サブワード分割: 頻出文字列パターンをまとめた「サブワード」単位で分割。語彙サイズとシーケンス長のバランスを取る
サブワード分割は2016年にSennrichらがBPEをニューラル機械翻訳に適用して以降、NLPの標準的な前処理となった。
主要サブワード分割アルゴリズムの比較
| アルゴリズム | 提案年 | 分割方式 | 代表的なモデル | 特徴 |
|---|---|---|---|---|
| BPE | 2016 (NLP適用) | ボトムアップ(マージ) | GPT-4o, Llama 3, Mistral | 頻度ベースの貪欲マージ、高速 |
| WordPiece | 2016 | ボトムアップ(マージ) | BERT, DistilBERT, ELECTRA | 尤度ベースのマージ、##プレフィックス |
| Unigram LM | 2018 | トップダウン(削減) | T5, mBART, Gemma 2, ALBERT | 確率モデルによる最適分割選択 |
| SentencePiece | 2018 | BPE or Unigram | Llama 2, mT5, XLM-R | 言語非依存、空白を▁で表現 |
サブワード分割の仕組み
サブワード分割の基本的な考え方は「よく使われる文字列パターンはまとめて1トークンにする」である。
BPEによるサブワード分割の例
入力テキスト「unhappiness」をBPEで分割する場合:
- 初期状態(文字分割):
u n h a p p i n e s s - 学習済みマージルール適用:
p + p→pph + a→haha + pp→happi + n→inn + e→nene + ss→nessin + ess→inesshapp + iness→happinessun + happiness→unhappiness(語彙に存在する場合)
- 最終分割:
un happinessまたはun happi ness(語彙サイズに依存)
頻出語「the」「and」「of」は単一トークンとなり、低頻出語「pneumonoultramicroscopicsilicovolcanoconiosis」は細かいサブワードに分割される。この適応的な粒度調整がサブワード分割の強みである。
日本語のサブワード分割
日本語テキスト「自然言語処理」のサブワード分割例:
- GPT-4o (o200k_base):
自然言語処理(3トークン) - Llama 3:
自然言語処理(4トークン) - Mistral:
自然言語処理(6トークン) - Qwen 2.5:
自然言語処理(1トークン)
語彙テーブルに日本語の漢字熟語がどれだけ含まれているかで、日本語テキストのトークン効率が大きく変わる。
サブワード分割が解決する問題
未知語(OOV)問題の解消
単語レベルの辞書では、学習データに含まれない新語(「ChatGPT」「VisionPro」など)が出現すると[UNK](未知トークン)に置換され、情報が失われる。サブワード分割では任意の文字列をサブワード(最悪の場合は文字・バイト単位)に分解して表現できるため、OOVが発生しない。
形態素の共有
「play」「playing」「played」「player」は単語辞書では4つの別エントリだが、サブワード分割では「play」「ing」「ed」「er」の組み合わせで表現される。これにより語彙サイズを抑えつつ、「play」の意味的な共通性をモデルが学習しやすくなる。
語彙サイズの制御
単語レベルの英語辞書は20〜50万エントリが必要だが、BPEサブワードでは32K〜256Kエントリで全テキストをカバーできる。語彙サイズの削減は埋め込み層のパラメータ数削減に直結し、モデルのメモリ効率を高める。
サブワード分割の課題と限界
- 言語間不公平: 英語1単語が1トークンで済む場合でも、日本語の同義語は3〜6トークンを消費する。API課金がトークン数ベースのため、非英語ユーザーのコストが相対的に高くなる
- 意味境界との不一致: BPEは頻度ベースでマージするため、意味的な形態素境界と一致しない分割が発生する(例:「unfortunately」→
unfortunatelyのような非直感的分割) - 数値の分割: 「1234567」が
1234567のように分割されると、数値の大きさの理解が困難になる - トークナイザー依存性: モデルとトークナイザーは不可分で、異なるトークナイザーを持つモデル間でのtransfer learningが困難
よくある質問(FAQ)
Q1: サブワード分割と形態素解析は何が違いますか? A: 形態素解析は言語学的な知識に基づいて意味のある最小単位(形態素)に分割する手法で、MeCabやJumanなどのツールが代表的です。サブワード分割はコーパスの統計情報のみに基づいて分割する言語非依存の手法で、必ずしも意味のある単位にはなりません。LLMでは言語非依存性と実装の簡便さからサブワード分割が標準です。
Q2: なぜ文字単位の分割ではダメなのですか? A: 文字単位で分割するとシーケンス長が極端に長くなります。例えば「The quick brown fox」は文字分割で19トークン、BPEでは4トークンです。Transformerの自己注意機構はO(n²)の計算量を持つため、シーケンスが5倍長くなると計算量は25倍に増加します。128Kコンテキストのモデルでは文字分割は非現実的です。
Q3: サブワード分割のアルゴリズムはどれを選べばよいですか? A: 2026年現在、BPE(特にバイトレベルBPE)が最も安全な選択です。GPT-4o・Llama 3・Mistralが採用しており、tiktokenやHuggingFace Tokenizersの成熟したツールチェーンがあります。多言語性能を重視する場合はSentencePiece Unigram(Gemma 2方式)も有力な選択肢です。
まとめ
- サブワード分割は単語分割と文字分割の中間で、語彙サイズとシーケンス長のバランスを取る基盤技術
- BPE・WordPiece・Unigram LM・SentencePieceの4つが主要アルゴリズム
- 2026年の全ての主要LLM(GPT-4o、Claude、Llama 3、Gemma 2等)がサブワード分割を採用
- 未知語問題の解消・形態素の共有・語彙サイズの制御という3つの利点を同時に実現
- 日本語トークン効率はモデルごとに0.9〜2.5トークン/文字と大きく異なる