トークナイゼーションとは?LLMのテキスト処理の基本を解説

トークナイゼーション:LLMがテキストを理解する最初のステップ

AI初心者

AIを知りたい

先生、ChatGPTなどのLLMは「トークン数」で料金が決まりますよね。そもそもトークンって何なんですか?

AIエンジニア

AIエンジニア

いい質問だね。LLMは人間のようにテキストをそのまま読むことができないんだ。トークナイゼーション(Tokenization)とは、テキストを「トークン」と呼ばれる小さな単位に分割する処理のことだよ。英語の場合、1トークンは大体1単語の4分の3くらいの長さで、「Hello」は1トークン、「unbelievable」は3トークンに分割されるんだ。

AI初心者

AIを知りたい

単語ごとに分けるのではなく、単語をさらに細かく分けることもあるんですか?

AIエンジニア

AIエンジニア

その通り。現代のLLMの多くは「サブワード分割」という手法を使い、頻出する部分文字列をトークンとして扱うんだ。例えば「playing」は「play」+「ing」の2トークンに分割される。こうすることで、語彙数を抑えながらも未知の単語にも対応できるんだよ。英語の100万単語を全て覚えるのは非効率だけど、3〜5万のサブワードトークンがあれば大半のテキストをカバーできるんだ。

トークナイゼーションとは。

トークナイゼーション(Tokenization)は、テキストを「トークン」と呼ばれる処理単位に分割する自然言語処理の基本操作です。大規模言語モデル(LLM)では、入力テキストをトークン列に変換してからモデルに入力し、モデルの出力もトークン列として生成されます。現代のLLMでは、BPE(Byte Pair Encoding)、WordPiece、SentencePieceなどのサブワード分割アルゴリズムが標準的に使用されています。GPT-4はcl100kベースのBPE、Claudeは独自のBPE、GeminiはSentencePieceを採用しています。トークン数はLLM APIの利用料金やコンテキストウィンドウの上限に直結するため、ビジネスでLLMを活用する際にはトークナイゼーションの理解が不可欠です。特に日本語は1文字あたりのトークン数が英語より多くなる傾向があり、コスト最適化の観点からも重要な知識です。

主要なトークナイゼーション手法の比較

LLMで使われるトークナイゼーション手法にはいくつかの種類があり、それぞれ特徴が異なります

手法 開発元 仕組み 採用モデル 特徴
BPE(Byte Pair Encoding) Sennrich et al. (2016) 頻出する文字ペアを順次マージ GPT-4, Claude, Llama 3 最も広く使用、バランスが良い
WordPiece Google (2016) 尤度ベースで最適なサブワードを選択 BERT, DistilBERT ##プレフィックスで分割位置を表示
SentencePiece Google (2018) 言語非依存のサブワード分割 Gemini, T5, mBART 前処理不要、多言語に強い
Unigram LM Kudo (2018) ユニグラム言語モデルに基づく確率的分割 XLNet, ALBERT 複数の分割候補を確率的に扱える
Byte-level BPE OpenAI (2019) バイト単位でBPEを適用 GPT-2, GPT-3, RoBERTa 未知文字なし、全Unicode対応

AI初心者

AIを知りたい

日本語のトークナイゼーションは英語と違うんですか?「日本語は不利」と聞いたことがあるのですが。

AIエンジニア

AIエンジニア

鋭い指摘だね。日本語は英語と比べて1文字あたりのトークン消費量が多いというのは事実だよ。英語では「Hello」が1トークンだけど、日本語の「こんにちは」は3〜5トークンになることがある。これはBPEの学習データに英語が多く含まれているため、英語のサブワードが効率的に圧縮される一方、日本語は漢字・ひらがな・カタカナの文字種が多く、効率が下がるんだ。GPT-4のcl100kトークナイザーでは改善が進んだけど、それでも同じ意味を表現するのに日本語は英語の1.5〜2倍のトークンを消費する傾向があるよ。

トークナイゼーションの実務的な影響とコスト最適化

LLM APIを業務で使う際、トークン数は直接コストに影響します。効率的な運用のためのポイントを整理します。

観点 影響 最適化のコツ
API利用料金 入力・出力トークン数に比例して課金 プロンプトを簡潔に、不要な修飾を削除
コンテキストウィンドウ 最大トークン数を超えると処理不可 要約やチャンク分割で入力を圧縮
レスポンス速度 トークン数が多いほど生成が遅い max_tokensパラメータで出力長を制限
日本語コスト 英語の1.5〜2倍のトークンを消費 重要部分のみ日本語、定型文は短縮
特殊文字・コード 記号やコードは想定外のトークン数になりがち tiktokenなどで事前にトークン数を確認

AI初心者

AIを知りたい

トークン数を事前に確認する方法はありますか?

AIエンジニア

AIエンジニア

OpenAIのモデルなら「tiktoken」というPythonライブラリで正確にトークン数を計算できるよ。pip install tiktokenでインストールして、encoding.encode(text)でテキストをトークン列に変換すれば、そのリストの長さがトークン数になる。OpenAIの公式サイトにも「Tokenizer」というWebツールがあって、ブラウザ上でトークン分割を可視化できるよ。LLMを業務で活用するなら、トークナイゼーションへの理解は必須の基礎知識だから、ぜひ実際に試してみてね。

AI初心者

AIを知りたい

トークナイゼーションってLLMの裏側で行われる地味な処理だと思っていましたが、コストや性能に直結する重要な技術なんですね。tiktokenを使って自分のプロンプトのトークン数を確認してみます!