📚
トークン数の計算について
トークンとは
- 自然言語処理(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の実装
トークン数を計算する理由
トークン数を計算する理由は、以下のような実用的な目的があります:
-
最大トークン数の制限を超えないようにする
テキスト埋込モデルに処理できる最大トークン数がありますので、トークン数を事前に把握しておくことで、入力が長すぎてエラーになるのを防ぐことができます。 -
コストと処理時間の管理
トークン数が多いほど、モデルの処理にかかる計算コストや時間が増加しますので、課金がトークン数に基づいて行われることが多いため、コスト管理のためにも重要です。 -
長文処理の戦略を立てるため
長いテキストを処理する際、トークン数を見て以下のような判断ができます:- テキストを複数のチャンクに分割する必要があるかどうか
- 要約やフィルタリングを行うべきかどうか
-
検索や埋め込みの品質向上
トークン数が多すぎると、意味の希薄なベクトルになる可能性があり、検索精度が落ちることがありますので、適切な長さに調整することで、より意味のあるベクトル表現が得られ、検索や類似度計算の精度が向上します。
環境
項目 | バージョン |
---|---|
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