トークナイゼーション
トークン化とは、テキストを「トークン」と呼ばれるより小さな単位に分割するプロセスです。トークンはシステムが実際に処理する単位です。 言語モデルにおいて、トークンとは通常、単語全体ではなく数値としてモデルに解釈される、サブワードの断片のことを指します。 従来の検索では、トークン化はテキストをインデックスの構築やクエリに使用される用語に分割します。 いずれにせよ、これは生のテキストをシステムが処理できる単位に変換するステップです。
端的に言うと、トークン化とは、テキストをトークンに分割することです。トークンとは、LLMが処理する単語の断片、あるいは検索インデックスが照合を行う対象となる用語のことです。
トークン化の仕組み
言語モデルでは、一般的なアプローチとしてサブワードのトークン化が用いられます:
- トークナイザーの選択: モデルは特定のトークン化スキームを使用します。 一般的な手法としては、バイト対符号化(BPE)、WordPiece、およびSentencePieceのバリエーションなどが挙げられます。いずれも、サブワード単位から固定の語彙を構築するものです。
- テキストの分割:入力テキストは、その語彙リストに基づいてトークンに分割されます。一般的な単語は1つのトークンとなりますが、珍しい単語、コード、絵文字は複数のトークンに分割されます。
- IDへのマッピング:モデルは数値を処理しますが、文字は直接認識しないため、各トークンは数値IDに変換されます。
- カウント:トークンの数は、テキストが コンテキストウィンドウ のうちどの程度の割合を占めるかを決定し、ほとんどのAPIにおいて、リクエストにかかるコストも決定します。
検索インデックス作成において、トークン化はより単純で、仕組みも異なります。テキストは、多くの場合、空白や句読点を区切りとして用語に分割され、それによって文書とクエリを照合できるようになります。 その後、検索アナライザーが、トークンの境界分割とは異なる正規化処理(小文字化、ステミング、またはレマティゼーションなど)を適用する場合があります。
重要な点は、トークン化はモデルや手法によって異なるということです。つまり、同じテキストであっても、使用するモデルやプロバイダー、またLLMで処理されるか検索インデックスで処理されるかによって、トークン数が異なってくる可能性があります。 システム間でトークンの数が引き継がれると想定しないようにしましょう。
トークン化とチャンキングおよび埋め込みの比較
- トークン化とは、テキストをモデルやインデックスが使用する最小単位に分割することです。チャンキング は、検索のためにドキュメントをより大きな文章のかたまりに分割することです。 トークンは小さな断片であり、チャンキングは文章のかたまりを指します。
- トークン化では、個別のトークンIDが生成されます。埋め込み は、トークンやチャンキングを連続的なベクトルに変換して意味を捉えます。 一つはルックアップであり、もう片方は学習された表現です。
- サブワード・トークン化(LLM向け)は、モデルの固定語彙に対して最適化されています。一方、検索用トークン化(インデックス作成向け)は、クエリとドキュメント間の用語の一致に対して最適化されています。
開発者にとってトークン化が重要な理由
- コストと制限:APIリクエストは通常、トークン単位で課金され、コンテキストウィンドウによって上限が設定されるため、トークンの数が価格と処理可能な範囲を直接決定します。
- レイテンシとリソース配分:トークンの数が増えると処理量も増え、その両方が レイテンシ に影響するため、プロンプトや取得したコンテキストを短縮することは、応答時間を短縮するための最適化策の一つとなります。
- キーワード検索:語彙インデックスの構築やクエリの実行には、ドキュメントとクエリを一貫してトークン化することが不可欠です。これが ハイブリッド検索におけるキーワードマッチングの基礎となります。
- LLMパイプラインにおける検索API:グラウンディングのために検索APIから返されるコンテンツは、モデルのコンテキストに入るとトークンを消費します。トークン効率の良い事前に抽出された結果を使用することで、回答パイプラインがトークン予算内に収まり、実行コストを削減できます。
トークン化は、問題が起きない限りその存在に気づかれません。モデルが何を読み取れるか、検索インデックスが何と照合できるか、そして各リクエストにかかるコストを、ひっそりと決定しているのです。
関連する用語
トークン、コンテキストウィンドウ、チャンキング、埋め込み、大規模言語モデル(LLM), バイト対符号化(BPE)、キーワード検索、 hハイブリッド検索, レイテンシ, 検索API。