生成AIやLLM(大規模言語モデル)の普及にともない、その内部で文章を処理する仕組みへの関心が高まっています。とりわけ、テキストをモデルが理解できる数値列へと変換する「トークナイザー」は、LLMの精度やコストを左右する重要な技術です。
しかし、トークナイザーとはそもそも何を意味するのか、BPEやWordPieceといったアルゴリズムはどう違うのか、日本語処理でトークン数が増えてしまう理由は何か、といった疑問を持つ方も多いのではないでしょうか。
本記事では、トークナイザーの定義や仕組みから、分割粒度の違い、主要アルゴリズムの比較、形態素解析との違い、日本語処理の課題と最新の改善動向、そしてLLMにおける役割まで、JAPAN AIが網羅的に解説します。
\ ChatGPTもClaudeもGeminiも使える! /
トークナイザーとは
トークナイザーとは、テキストをトークンと呼ばれる最小単位に分割し、各トークンに固有のID(数値)を割り当てることで、LLMが処理できる形式に変換するプログラムです。
自然言語処理やLLMの世界では、コンピュータは人間の言葉をそのまま理解できません。文字列を数値の列に変換する必要があり、この変換を担うのがトークナイザーです。トークナイザーはエンコードとデコードの双方向変換を行います。エンコードではテキストを受け取り、あらかじめ定められた語彙に基づいてトークンに分割したうえで、各トークンに対応する数値IDの列を出力します。デコードはその逆で、数値IDの列を受け取り、対応するトークンを結合して元のテキストに復元します。
なお、トークナイザーはLLMごとに専用のものが設計されており、GPT系ではBPEベースのtiktoken、BERT系ではWordPiece、LLaMA 1/2ではSentencePiece(BPEモード)、LLaMA 3以降ではtiktokenが採用されています。モデルとトークナイザーは必ずセットで使用する必要があり、異なるトークナイザーで処理したデータをモデルに入力すると、正しい結果が得られません。
トークナイザーの設計は、LLMの語彙サイズや処理効率、ひいてはAPI利用コストにまで影響を及ぼすため、LLMを理解するうえで欠かせない基礎知識といえます。
トークナイズの流れ
トークナイズとは、テキストをトークンに変換する一連の処理を指し、正規化・分割・ID変換の3ステップで構成されます。
まず正規化のステップでは、入力テキストに含まれる全角・半角の揺れや不要な空白、特殊文字などを統一的な形式に整えます。たとえば大文字を小文字に変換したり、Unicodeの正規化を行ったりすることで、後続の分割処理が安定して動作する土台をつくります。
次に分割のステップでは、正規化されたテキストを語彙に基づいてトークンに分割します。たとえば「機械学習は楽しい!」というテキストをサブワード方式で分割すると、「機械」「学習」「は」「楽し」「い」「!」のように、語彙に登録された単位で区切られます。分割の粒度や方式はトークナイザーのアルゴリズムによって異なり、同じテキストでもトークナイザーが変われば分割結果も変わります。
最後にID変換のステップでは、分割された各トークンに対して、語彙テーブル上の数値IDを割り当てます。「機械」→15234、「学習」→8901のように、すべてのトークンが一意の整数に変換され、LLMはこの数値列を入力として受け取り、推論を実行します。
この3ステップを正確に理解しておくことで、トークン数の見積もりやプロンプト設計の精度が向上し、LLMをより効果的に活用できます。
トークナイザーの分割粒度
トークナイザーの分割粒度には単語単位・文字単位・サブワード単位の3種類があり、現在のLLMでは語彙サイズの最適化と未知語対応を両立するサブワード単位が主流です。
それぞれの分割粒度にはメリットとデメリットがあり、どの粒度を選択するかによって語彙サイズ、未知語への対応力、学習効率が大きく変わります。以下に3つの分割粒度を整理します。
- 単語単位の分割:スペースや句読点で区切る直感的な方法だが、語彙数の爆発と未知語問題が課題
- 文字単位の分割:語彙サイズが極めて小さいが、1文字あたりの情報量が少なく学習が困難
- サブワード単位の分割:単語と文字の中間的な粒度で、語彙サイズと未知語対応のバランスに優れる
単語単位の分割
単語単位の分割は、テキストをスペースや句読点を基準に単語ごとに区切る方法であり、最も直感的な分割方式です。
英語のようにスペースで単語が区切られる言語では実装が容易で、各トークンが意味のある単語と一致するため、人間にとっても理解しやすい分割結果が得られます。
しかし、この方式には2つの深刻な問題があります。
1つ目は語彙数の爆発です。自然言語には活用形や派生語、複合語が無数に存在するため、すべての単語を語彙に登録しようとすると数十万〜数百万規模の語彙テーブルが必要になり、モデルの埋め込み層が肥大化して計算コストが増大します。
2つ目は未知語問題です。学習データに含まれていなかった新語や固有名詞が入力された場合、語彙に存在しないため「UNK」(未知語トークン)として一律に処理され、意味情報が完全に失われます。
これらの課題から、単語単位の分割は現在の大規模言語モデルではほとんど採用されていません。
文字単位の分割
文字単位の分割は、テキストを1文字ずつトークンとして扱う方法であり、語彙サイズを極めて小さく保てる点が特徴です。
英語であればアルファベット26文字と数字・記号を合わせても数百程度の語彙で済み、未知語が原理的に発生しません。しかし、1文字単位ではトークンあたりの情報量が極めて少なくなるため、モデルが文脈を学習する際の負担が大きくなります。
たとえば「machine」という7文字の単語は7つのトークンに分割され、各トークンのベクトルに「machine」という概念の意味を分散して保持しなければなりません。結果として、モデルが長距離の依存関係を捉えるために必要なコンテキスト長が増大し、学習効率が著しく低下します。
さらに、日本語や中国語のように1文字あたりの情報量が多い言語では、漢字だけでも数千種類の文字が存在するため、「語彙サイズが小さい」という文字単位の利点が薄れます。こうした理由から、文字単位の分割も単体での採用は限定的です。
サブワード単位の分割
サブワード単位の分割は、単語と文字の中間的な粒度でテキストを区切る方法であり、現在のLLMにおける標準的なトークナイズ手法です。この方式では、学習データ中に頻繁に出現する部分文字列をトークンとして語彙に登録します。
たとえば、「unhappiness」という単語は「un」「happi」「ness」のように、接頭辞・語幹・接尾辞に相当するサブワードに分割されます。頻出する「happy」はそのまま1トークンとして語彙に含まれる一方、出現頻度の低い単語はより細かいサブワードに分解されるため、限られた語彙サイズで幅広いテキストを表現できます。
サブワード分割の最大の利点は、語彙サイズの最適化と未知語対応の両立です。語彙に存在しない新語や固有名詞が入力された場合でも、既知のサブワードの組み合わせで表現できるため、「UNK」トークンの発生を大幅に抑制できます。BPEやWordPiece、SentencePieceといった主要なトークナイザーアルゴリズムは、いずれもこのサブワード分割の考え方を基盤としています。
サブワード単位の分割を理解することで、トークナイザーの種類やLLMの設計思想を理解できるようになるでしょう。
トークナイザーの種類
トークナイザーの主要なアルゴリズムにはBPE・WordPiece・SentencePiece(Unigram)の3種類があり、それぞれサブワードの構築方法と採用モデルが異なります。
以下の表に、各アルゴリズムの特徴・採用モデル・メリット・デメリットを整理します。
| アルゴリズム | 構築方法 | 主な採用モデル | メリット | デメリット |
|---|---|---|---|---|
| BPE | 頻度ベースのボトムアップ結合 | GPT-1/2/3/4/4o、LLaMA 1/2/3 | 実装がシンプル、高速 | 確率的な最適性は保証されない |
| WordPiece | 尤度ベースのボトムアップ結合 | BERT、DistilBERT | 言語的な意味をより反映 | 学習コストがやや高い |
| SentencePiece(Unigram) | 確率的なトップダウン刈り込み | T5、mT5、LLM-jp-4 | 言語非依存、多言語対応に強い | 学習に時間がかかる |
※LLaMA 1/2はSentencePieceライブラリのBPEモードを使用、LLaMA 3以降はtiktokenベースのBPEに変更。いずれもアルゴリズムとしてはBPEです。
BPE(Byte-Pair Encoding)
BPE(Byte-Pair Encoding)は、隣接する文字ペアの出現頻度をもとにボトムアップで結合していくサブワード分割手法であり、GPT系モデルで広く採用されています。
BPEの動作原理はシンプルです。まず、学習データ中のすべてのテキストを文字単位に分解します。
次に、隣接する2文字の組み合わせの中から最も出現頻度の高いペアを見つけ、それを1つの新しいトークンとして語彙に追加します。この結合操作を、あらかじめ設定した語彙サイズに達するまで繰り返します。たとえば「l」と「o」のペアが最頻出であれば「lo」として結合し、次に「lo」と「w」が最頻出なら「low」として結合する、という具合です。
この手法の利点は、実装がシンプルで処理速度が速い点にあります。GPT-1で採用されて以降、GPT-2ではバイトレベルBPEに拡張され、GPT-3からGPT-4、GPT-4oに至るまでBPEベースのトークナイザーが継続して使用されています。OpenAIが提供するtiktokenライブラリでは、cl100k_base(GPT-4世代)やo200k_base(GPT-4o世代)といったBPEベースのエンコーディングが実装されており、語彙サイズの拡大とともに日本語を含む多言語の処理効率が向上しています。
BPEは「頻度」という明快な基準でサブワードを構築するため、再現性が高く、大規模データでの学習にも適した手法です。
WordPiece
WordPieceは、BPEと同様にボトムアップでサブワードを構築する手法ですが、結合の基準に出現頻度ではなく尤度(スコア)を用いる点が異なります。
WordPieceでは、2つのサブワードを結合した場合に、学習データ全体の尤度(データが観測される確率)がどれだけ向上するかを計算し、尤度の増加量が最大となるペアを優先的に結合します。頻度だけでなく、各サブワードの独立した出現確率も考慮するため、言語的な意味をより深く反映したサブワード分割が実現します。
WordPieceの特徴的な仕様として、単語の先頭以外のサブワードに「##」という接頭辞を付与する点があります。たとえば「playing」は「play」と「##ing」に分割されます。この接頭辞により、トークンが単語の途中から始まるサブワードであることが明示され、デコード時に正確な復元が可能です。
WordPieceはGoogleが開発し、BERTやDistilBERTといった代表的なモデルで採用されています。BPEと比較すると学習コストがやや高い傾向にありますが、言語的な構造をより忠実に捉えたサブワード分割が得られる点が強みです。
SentencePiece・Unigram
SentencePieceは、テキストを事前に単語分割せず、生テキストから直接サブワードを学習する言語非依存のトークナイザーライブラリです。
従来のBPEやWordPieceは、英語のようにスペースで単語が区切られることを前提としており、日本語や中国語のようにスペースを持たない言語では、事前に形態素解析などで単語分割を行う必要がありました。SentencePieceはこの前処理を不要にし、生のテキストバイト列からサブワードを学習するため、言語に依存しない統一的なトークナイズが実現します。
SentencePieceにはBPEモードとUnigramモードの2つのアルゴリズムが実装されています。Unigramモードでは、まず大規模な候補語彙からスタートし、各サブワードを除去した場合の全体損失の増加量を評価しながら語彙を刈り込むトップダウン方式を採用します。最終的に残ったサブワードの確率分布に基づいて、入力テキストに対する最適な分割を確率的に選択します。BPEが決定論的に1つの分割結果を出力するのに対し、Unigramは複数の分割候補の中から最も確率の高い分割を選択する点が特徴です。
なお、LLaMA 1/2はSentencePieceライブラリを使用していますが、アルゴリズムとしてはBPEモードを採用しており、Unigramモードではありません。LLaMA 3以降はtiktokenベースのBPEに切り替わっています。
T5やmT5などの多言語対応モデルでUnigramモードが広く採用されているほか、国立情報学研究所が開発したLLM-jp-4では、llm-jp-tokenizer v4.0としてUnigram byte-fallback方式が採用されています。byte-fallbackにより、語彙に含まれない未知の文字列もバイト単位で確実にエンコードできるため、固有名詞や新語にも対応可能です。LLM-jp-4の語彙数は196,608に設定されており、日本語のトークン効率向上が図られています。
自然言語処理の基礎的な仕組みについては、「自然言語処理(NLP)とは?仕組み・活用事例・課題をわかりやすく解説」の記事で詳しく解説しています。
LLMの業務活用を加速するなら「JAPAN AI AGENT」
トークナイザーの仕組みを理解したうえでLLMを業務に活用するには、モデル選定やプロンプト設計だけでなく、社内データとの連携や業務フローへの組み込みが求められます。JAPAN AI AGENTは、ChatGPTやGemini、Claudeなど最新のLLMをノーコードで業務に組み込み、特定のタスクを自律的に実行する「AI社員」を構築できるプラットフォームです。高精度なRAG検索や外部ツール連携により、LLMの性能を最大限に引き出しながら、上場企業水準のセキュリティで安心して運用いただけます。

日本企業のための
最も実用的なAIエージェントへ!
AIが企業の様々な職種の
方々が
普段行っている
タスクを自律的に実行
JAPAN AI AGENT
実用性の高いAIエージェンを提供
無料の伴走サポート
高いカスタマイズ性
目標設定をだけで自律的にAIが各タスクを実行

トークナイザーと形態素解析の違い
トークナイザーと形態素解析は、いずれもテキストを小さな単位に分割する技術ですが、分割の基準と目的が根本的に異なります。
形態素解析は、MeCabやSudachiなどの辞書ベースのツールを用いて、テキストを「形態素」と呼ばれる意味を持つ最小単位に分割し、各形態素に品詞情報を付与する日本語固有の手法です。
たとえば「東京都に住んでいる」というテキストは、「東京都(名詞)」「に(助詞)」「住ん(動詞)」「で(助詞)」「いる(動詞)」のように分割されます。辞書に登録された語彙と文法規則に基づいて処理するため、品詞の特定や係り受け解析といった言語学的な分析に適しています。
一方、BPEやWordPieceなどのトークナイザーは、辞書を使わず、学習データの統計情報からサブワードを自動的に構築するデータ駆動型の手法です。品詞情報は付与せず、テキストをLLMが処理しやすい数値列に変換することが目的です。言語固有の辞書や文法規則に依存しないため、英語・日本語・中国語など複数の言語を統一的に処理できます。
実務では、両者を組み合わせるアプローチも採用されています。
たとえば、日本語テキストをまずMeCabで形態素に分割し、その結果をBPEでさらにサブワードに分割する方法です。この組み合わせにより、日本語の語彙構造を活かしつつ、サブワード分割の柔軟性も確保できます。日本語特化のLLM開発では、形態素解析とサブワード分割のハイブリッド方式が日本語のトークン効率を向上させる有効な手段として活用されています。
トークナイザーと形態素解析の違いを正しく理解しておくことで、日本語LLMのモデル選定やプロンプト設計において、より適切な判断が可能です。
日本語処理での注意点
日本語はスペースで単語が区切られないため、トークナイザーにとって処理が難しい言語であり、英語と比較してトークン消費量が多くなる構造的な課題があります。
o200k_base世代のトークナイザーを用いた場合でも、日本語のトークン消費は英語と比較して依然として多い状態です。このトークン消費の差は、API利用料金やコンテキスト長の制約に直結するため、日本語でLLMを活用する際には十分な注意が必要です。
日本語のトークン消費が多い理由
日本語のトークン消費が英語より多い根本的な原因は、漢字・ひらがな・カタカナの3文字体系と、単語間にスペースを持たない表記体系にあります。
英語はアルファベット26文字で構成され、単語間がスペースで明確に区切られているため、トークナイザーは効率的にサブワードを構築できます。一方、日本語は常用漢字だけでも2,136字、ひらがな・カタカナを合わせると数千種類の文字を使用します。トークナイザーの語彙テーブルには各文字やサブワードを登録する必要があるため、英語と同じ語彙サイズでは日本語の文字をカバーしきれず、結果として1文字が複数のトークンに分割されるケースが頻発します。
さらに、日本語はスペースで単語が区切られないため、トークナイザーは文字列のどこで区切るべきかを統計的に判断しなければなりません。英語であれば「artificial intelligence」は2つの単語として容易に認識されますが、日本語の「人工知能」はスペースなしの4文字であり、トークナイザーの語彙に「人工知能」が登録されていなければ「人工」「知能」や「人」「工」「知」「能」のように細かく分割される可能性があります。
この構造的な差異が、日本語のトークン消費を英語より多くする主要因であり、LLMの利用コストやコンテキスト長の制約に影響を及ぼします。
o200k_baseによるCJK効率の改善
OpenAIがGPT-4oとともに導入したo200k_baseトークナイザーにより、日本語のトークン消費はcl100k_base(GPT-4世代)比で約25%改善されています。
IIJの技術検証によると、全角53文字の日本語例文をcl100k_baseでエンコードすると59トークン、o200k_baseでは44トークンとなり、約25.4%の削減が確認されています。語彙サイズが約100,256から約199,997に拡大されたことで、日本語の漢字やひらがな・カタカナのサブワードがより多く語彙に登録され、1トークンあたりの文字数が増加しました。
ただし、この改善によって日本語が「英語並み」のトークン効率に達したわけではありません。o200k_base世代でも日本語は英語と比較してトークン消費が多い構造は変わっておらず、日本語でLLMのAPIを利用する場合、英語と比較してコストが高くなる傾向が依然として存在します。プロンプトの簡潔化やモデル選定時のトークン効率の比較が引き続き重要です。
GPT-4oの仕組みやアーキテクチャの詳細については、「ChatGPTの仕組みとは?Transformer・学習プロセス・推論の流れをわかりやすく解説」の記事で詳しく解説しています。
出典:IIJエンジニアブログ「GPT-4oから登場した新しいトークナイザ『o200k_base』」
LLMにおけるトークナイザーの役割
トークナイザーはLLMの事前学習から推論に至るすべてのフェーズで不可欠な役割を果たしており、モデルの性能とコストの両方を左右する基盤技術です。
LLMがテキストを処理するあらゆる場面で、トークナイザーは入口と出口の変換を担っています。事前学習時には膨大なテキストデータをトークン列に変換し、推論時にはユーザーの入力をエンコードし、モデルの出力をデコードして人間が読めるテキストに復元します。
事前学習から推論までの流れ
LLMの事前学習では、まずトークナイザーが学習データ全体をトークン列に変換し、モデルはこの数値列をもとに言語パターンを学習します。
事前学習の段階では、数兆トークン規模のテキストデータがトークナイザーによってエンコードされ、モデルは「次のトークンを予測する」というタスクを通じて言語の構造や知識を獲得します。このとき、トークナイザーの語彙設計がモデルの学習効率に直結します。語彙サイズが小さすぎると1つの単語が多くのトークンに分割され、モデルが長距離の依存関係を学習しにくくなります。逆に語彙サイズが大きすぎると、埋め込み層のパラメータ数が増大し、計算コストが膨らみます。
継続事前学習(追加学習)の段階では、日本語データを追加して学習させる際に、語彙拡張が行われることがあります。英語中心の語彙に日本語のサブワードを追加することで、日本語テキストのトークン効率を改善し、同じコンテキスト長でより多くの日本語テキストを処理できるようにします。
推論時には、ユーザーが入力したテキストをトークナイザーがエンコードし、モデルが生成した数値列をデコードして応答テキストに変換します。この双方向変換がリアルタイムで行われるため、トークナイザーの処理速度も応答速度に影響を及ぼします。
トークナイザーの設計は、モデルの学習効率・推論速度・対応言語の幅を決定づける重要な要素です。
トークン数とコストの関係
LLMのAPI利用料金はトークン数に基づく従量課金制であり、トークン数が増えるほどコストが直線的に増加します。
GPT-4oのAPI料金は、入力が100万トークンあたり2.50ドル、出力が100万トークンあたり10.00ドルに設定されています(2026年6月時点)。日本語は英語と比較して同じ内容を表現するのに多くのトークンを消費するため、日本語でのAPI利用コストは英語より高くなる傾向にあります。
たとえば、英語で1,000トークンの入力に相当する内容が、日本語ではそれ以上のトークン数を要するため、入力コストに差が生じます。
コスト最適化のためには、まずプロンプトを簡潔に設計してトークン数を抑えることが有効です。冗長な指示や不要な修飾語を削ることで、入力トークン数を削減できます。
また、日本語に最適化されたトークナイザーを持つモデルを選定することも重要です。日本語特化トークナイザーを採用したモデルでは、1トークンあたりの日本語文字数が多くなるため、同じ内容でもトークン消費を抑えられます。
さらに、コンテキスト長の制約にもトークン数は影響します。モデルが一度に処理できるトークン数には上限があり、日本語のトークン消費が多いと、同じコンテキスト長でも英語より少ない文字数しか入力できません。長文の処理や複雑なプロンプト設計を行う際には、トークン数の見積もりが不可欠です。
GPTシリーズの進化とアーキテクチャの詳細については、「GPTとは?仕組み・できること・GPT-5までの進化をわかりやすく解説」の記事もあわせてご覧ください。
トークナイザーに関してよくある質問
トークナイザーはモデルごとに異なるのですか?
はい、LLMごとに専用のトークナイザーが設計されています。GPT系はBPEベースのtiktoken、BERT系はWordPiece、LLaMA 1/2ではSentencePiece(BPEモード)、LLaMA 3以降ではtiktokenを採用しており、モデルとトークナイザーは必ずセットで使用する必要があります。異なるトークナイザーで処理したデータを入力すると、トークンIDとモデルの語彙テーブルが一致せず、正しい結果が得られません。
日本語のトークン消費を抑える方法はあるのですか?
日本語特化トークナイザーを採用したモデルを選ぶことで改善可能です。llm-jp-tokenizerやNovelAI Tokenizerなど、日本語の語彙を豊富に持つトークナイザーでは、1トークンあたりの日本語文字数が増加し、トークン消費を抑えられます。また、o200k_base世代のモデルはCJK効率が約25%向上しており、GPT-4世代と比較してコスト削減が期待できます。
トークナイザーと形態素解析は同じものですか?
異なる技術です。形態素解析はMeCabやSudachiなどの辞書ベースで品詞情報を付与する日本語固有の手法であり、トークナイザーはBPEやWordPieceなどのデータ駆動型でサブワード分割を行う汎用手法です。目的も異なり、形態素解析は言語学的な分析、トークナイザーはLLMへの入力変換を担います。両者を組み合わせて日本語のトークン効率を高める手法も実務では採用されています。
トークナイザーを理解してLLM活用の精度を高めよう
トークナイザーは、テキストをLLMが処理できるトークンに分割し、数値IDに変換する基盤技術です。本記事では、トークナイザーの定義から分割粒度の違い、BPE・WordPiece・SentencePieceの各アルゴリズムの特徴、形態素解析との違い、日本語処理の課題と最新の改善動向、そしてLLMにおける役割とコストへの影響までを体系的に解説しました。
トークナイザーの仕組みを理解することは、LLMの活用精度を高めるうえで大きな意味を持ちます。プロンプト設計においてはトークン数を意識した簡潔な記述が可能になり、モデル選定においては日本語のトークン効率を比較基準に加えることで、コスト最適化やコンテキスト長の有効活用につながります。
実践的な第一歩として、OpenAIが提供するtiktokenのトークナイザーツールや、Hugging FaceのTransformersライブラリのトークナイザー機能を使い、実際の日本語テキストがどのようにトークンに分割されるかを確認してみてください。トークナイザーへの理解が深まるほど、LLMをより効果的に、より低コストで活用できるようになります。


