トークナイザー とーくないざー
トークナイザーTokenizerテキスト分割BPESentencePiece語彙
トークナイザーについて教えて
簡単に言うとこんな感じ!
「人間が書いた文章」をAIが処理できる「数字の列(トークンID)」に変換する翻訳機だよ!「こんにちは」→[12345, 6789, …]みたいに変換するんだ。同じ文章でもトークナイザーが違うと分割の仕方が変わって、処理効率やコストが変わってくるよ!
トークナイザーとは
トークナイザー(Tokenizer) とは、生のテキスト文字列を、LLMが処理できるトークンIDの数値列に変換するプログラムです。逆に、LLMが出力した数値列をテキストに戻すデコードも担当します。各LLMは専用のトークナイザーを持ち、モデルと一緒に配布されます。
トークナイザーはまず大量のテキストから語彙(Vocabulary) を構築します。語彙は「頻繁に出現する文字列のパターン」の集合で、GPT-4のGPT2トークナイザーは約50,000〜100,000の語彙を持ちます。テキストが入力されると、語彙に基づいてサブワード分割を行い、各部分に対応するIDを返します。
トークナイズの流れ
入力テキスト: 「機械学習は楽しい!」
ステップ1: 正規化・前処理
→ 「機械学習は楽しい!」(Unicode正規化等)
ステップ2: サブワード分割(BPEの場合)
→ 「機械」「学習」「は」「楽し」「い」「!」
ステップ3: トークンIDへの変換
→ [5432, 2891, 12, 7654, 89, 2]
この数値列がLLMへの入力になる
出力も数値列 → デコードでテキストに変換
主要なトークナイザーの種類
| 種類 | 特徴 | 採用例 |
|---|---|---|
| WordPiece | 語彙効率が良い、BERT用 | BERT、ALBERT |
| BPE | 高頻度パターンを結合 | GPT-2/3/4、LLaMA |
| SentencePiece | 言語非依存、多言語対応 | T5、mT5、LLaMA 2 |
| Tiktoken | OpenAI独自の高速BPE | GPT-4o、o1 |
歴史と背景
- 2016年:Googleが「SentencePiece」を公開、多言語対応が向上
- 2018年:BERTのWordPieceが広く普及
- 2019年:GPT-2でBPEが大規模LLMに採用
- 2022年:OpenAIが「tiktoken」を公開し、高速・軽量な実装が標準化
- 現在:日本語の効率的なトークナイズは引き続き課題(英語比で2〜3倍のトークンが必要)
日本語処理での注意点
英語: "machine learning" → 2〜3トークン
日本語: 「機械学習」→ 4〜6トークン
日本語は英語より多くのトークンを消費するため:
1. APIコストが英語より高くなる
2. 同じコンテキスト長でも格納できる文字数が少ない
3. 日本語特化モデル(Rinna、PLaMoなど)は日本語効率が改善
関連用語
- トークン — トークナイザーが生成する基本処理単位
- BPE — GPT系で使われるトークナイザーアルゴリズム
- SentencePiece — 多言語対応の代表的なトークナイザー
- 埋め込み表現 — トークンIDを高次元ベクトルに変換した表現
- 語彙(Vocabulary) — トークナイザーが持つトークンの集合