Perplexity
パープレキシティは、テキストに対するモデルの交差エントロピーを指数変換した値です。計算方法、公平なモデル比較の方法、スコアリング以外の用途を解説します。
パープレキシティは、確率モデルが系列をどれだけ適切に予測するかを測定する指標です。実際の次のトークンごとにモデルが割り当てた負の対数尤度を平均し、その指数を取って計算します。値が低いほど良好です。パープレキシティが10なら、モデルは各ステップで10個の選択肢から一様に選ぶ場合と同程度の不確実性を平均的に持つことを意味します。そのため、この数値は実効的な分岐数として解釈されることがよくあります。Frederick Jelinek、Robert Mercer、Lalit Bahl、James Bakerは、音声認識タスクの難易度を測定するために、1977年にIBMでこの指標を導入しました。現在も言語モデリングの標準的な内在評価指標です。たとえば、パラメーター数15億のOpenAI GPT-2は、2019年にWikiText-103ベンチマークで学習することなく、パープレキシティ17.48を達成しました。
この語は、互いに無関係な2つの対象の名称にも使われます。Perplexity AIはAI検索エンジン企業です。また、t-SNEにはハイパーパラメーターのパープレキシティがあり、t-SNEが高次元データの2Dマップを作成する際に、各点が考慮する近傍のおおよその数を設定します。
パープレキシティの計算#
N個のトークンからなる系列について、パープレキシティ = exp(-(1/N) x log p(token_i | それ以前のすべてのトークン)の合計)です。指数の中の値はテキストとモデルの予測の間の交差エントロピーであり、大規模言語モデル(LLMs)の学習にも使われる同じ損失関数です。自然対数を使う場合は底がe、底2の対数を使う場合は底が2になりますが、どちらでもパープレキシティは同じです。PyTorchの交差エントロピー損失は自然対数を使い、デフォルトではトークン全体の平均を取るため、言語モデルのパープレキシティは単にexp(loss)です。
import math
# Probability the model assigned to each correct next token
token_probs = [0.50, 0.25, 0.80, 0.40]
# Cross-entropy is the average negative log-likelihood, in nats
cross_entropy = -sum(math.log(p) for p in token_probs) / len(token_probs)
print(f"Cross-entropy: {cross_entropy:.3f}, perplexity: {math.exp(cross_entropy):.2f}")
# A model that spreads probability evenly over 10 tokens has perplexity 10
uniform = -sum(math.log(0.1) for _ in token_probs) / len(token_probs)
print(f"Uniform perplexity: {math.exp(uniform):.2f}")4つの確率から交差エントロピーは0.805ナット、パープレキシティは2.24となります。これは、各ステップでほぼ同じ確率の2つのトークンから選ぶようにモデルが振る舞うことを意味します。一様分布の場合も分岐数としての解釈を裏付けます。正しいトークンごとの確率が0.1なら、パープレキシティはちょうど10です。
長い文書には注意が必要です。固定のコンテキストウィンドウを持つモデルは、テキストをチャンクに分けてスコアリングします。重複しないチャンクの先頭にあるトークンは、ほとんどコンテキストを参照できないため、パープレキシティが上がります。スライディングウィンドウ評価ではチャンクを重ね、各トークンにモデルが許容する範囲で最大限の先行コンテキストを与えますが、計算量は増加します。
モデルを公平に比較する#
パープレキシティを比較できるのは、同じテキストを同じトークナイゼーションで評価したモデル同士に限られます。語彙数の多いモデルはテキストをより少ない数の予測しにくいトークンに分割するため、トークン単位のパープレキシティを、より小さなトークンを使うモデルと直接比較できません。総対数尤度をバイト数または文字数で正規化し、バイトあたりのビット数または文字あたりのビット数として報告すれば、この依存性を取り除けます。
テストデータは学習データに含まれていてはなりません。モデルが以前に見た文章には異常に高い確率を割り当てるため、この種のデータリークによってパープレキシティは実際の性能より良く見えます。同じ現象は、疑わしいほど低いパープレキシティを示すテキストを学習データの可能性が高いものとして特定するメンバーシップ推論攻撃にも利用されます。
パープレキシティは、固定されたテキストに対する次トークン予測を評価します。チャットモデルは、リクエストに従い人間の好みに合わせるために、指示チューニングと人間のフィードバックによる強化学習(RLHF)を行うため、タスクベンチマークや人間による選好評価で比較します。
モデル比較以外での用途#
データキュレーションは、主要な用途の1つです。2019年にFacebook AIの研究者が公開したCCNetパイプラインは、Wikipediaで学習した言語モデルを使ってCommon Crawlのページをスコアリングし、パープレキシティに基づいて上位、中位、下位の3分位に分けました。パープレキシティが低い上位群は、最も品質の高いテキストと見なされました。多くの事前学習パイプラインも同様の方法でウェブデータをフィルタリングします。これはウェブ規模でのデータクリーニングの一段階です。GPTZeroなどのAI文章検出器もパープレキシティをスコアリングします。言語モデルからサンプリングされたテキストは、人間の文章より予測しやすい傾向があるためです。
この式は、交差エントロピーでトレーニングしたあらゆるモデルに当てはまります。Ultralytics YOLO26の分類モデルは平均交差エントロピー損失でトレーニングされるため、exp(検証損失)が正解クラスラベルに対するパープレキシティとなります。検証損失が0.35の場合、パープレキシティは約1.42です。これは、平均的な画像について、モデルが約1.4個のクラスの間で迷うように信頼度を配分することを意味します。










