📚

トークン数の計算について

に公開

トークンとは

  • 自然言語処理(NLP)や機械学習の分野で使われる単位です。
  • テキストを処理する際に、文章を小さな単位であるトークンに分けます。
    例:"king"という単語のトークン: [0.21, -0.34, 0.56, ..., 0.08]

トークンの種類と埋め込みの違い

トークンの種類 埋め込みの単位
単語ベース "apple", "run" 単語ごとに1ベクトル
サブワード "un", "break", "able" 単語を分割してベクトル化
文字ベース "a", "p", "p", "l", "e" 文字ごとにベクトル化

対象読者

  • 想定するスキルレベル: Python 中級者~
  • 必要な前提知識: Azure OpenAIのテキスト埋込モデルの最大トークン数
  • 想定ユースケース: RAGの実装

トークン数を計算する理由

トークン数を計算する理由は、以下のような実用的な目的があります:

  1. 最大トークン数の制限を超えないようにする
    テキスト埋込モデルに処理できる最大トークン数がありますので、トークン数を事前に把握しておくことで、入力が長すぎてエラーになるのを防ぐことができます。

  2. コストと処理時間の管理
    トークン数が多いほど、モデルの処理にかかる計算コストや時間が増加しますので、課金がトークン数に基づいて行われることが多いため、コスト管理のためにも重要です。

  3. 長文処理の戦略を立てるため
    長いテキストを処理する際、トークン数を見て以下のような判断ができます:

    1. テキストを複数のチャンクに分割する必要があるかどうか
    2. 要約やフィルタリングを行うべきかどうか
  4. 検索や埋め込みの品質向上
    トークン数が多すぎると、意味の希薄なベクトルになる可能性があり、検索精度が落ちることがありますので、適切な長さに調整することで、より意味のあるベクトル表現が得られ、検索や類似度計算の精度が向上します。

環境

項目 バージョン
OS Windows 11 Pro
ランタイム Python: 3.13.2
主要ライブラリ tiktoken

手順

ディレクトリ構造

./
├── requirements.txt #必須のパッケージ
└── token_check.py

pythonパッケージのインストール

  • スクリプトと同じ階層に、依存パッケージを記載した requirements.txt ファイルを用意しました。
  • requirements.txtファイルの中は以下のようです。
requirements.txt
tiktoken
  • 下記のコマンドを実行することで、requirements.txt に記載された依存パッケージをインストールできます。
pip install -r requirements.txt
  • ローカルでインストールされた全てのpythonパッケージをpip listコマンドで確認出来ます。
C:\Users\...\...> pip list
Package            Version
------------------ ---------
.
.
tiktoken            0.9.0
.
.

※2025年5月23日現在※

プログラムの構成

フローチャート

サンプルプログラム

token_check.py
import tiktoken

def count_tokens(input_text: str) -> int:
    """入力テキストのトークン数を計算する
    Args:
        input_text: 入力テキスト
    Returns:
        len(tokens): トークン数
    """ 
    # トークナイザーの設定
    # "cl100k_base"は、text-embedding-3-large、GPT-4、GPT-3.5 などのOpenAIモデルで使用されているトークナイザー
    tokenizer = tiktoken.get_encoding("cl100k_base")

    # トークン化する
    tokens = tokenizer.encode(input_text)
   
    # トークン数を渡す
    return len(tokens)

まとめ

  • ベクトル化前のトークン数を事前に計測することは、エラー防止・コスト管理・処理効率・品質向上のために非常に重要であることがよく分かりました。
  • 現在のローカル保存型プロトタイプでは、トークン数を計算し、最大トークン数の制限を超えていないかを確認したうえで、そのトークン数をメタデータとして保存しています。

参考リンク

セリオ株式会社 テックブログ

Discussion