AI・機械学習
上級

Contrastive Search(コントラスティブサーチ)(コントラスティブサーチ)

LLMデコーディングにおいて次トークンの確率(モデルスコア)と既生成トークンとの類似度(degeneration penaltyを差し引いた値)を組み合わせて選択する手法。繰り返し・退化現象を抑制し、一貫性と多様性を両立する。

0 回閲覧
0 いいね
2026/6/7 更新
関連タグ
contrastive-search
degeneration
decoding-strategy
llm-inference

Contrastive Searchとは

Contrastive Search(Su et al., NeurIPS 2022)はLLMの自己回帰生成における「退化問題(degeneration)」を解決するデコーディング手法です。退化問題とは、生成テキストが繰り返しや意味のないループに陥る現象です。

退化問題の仕組み

グリーディデコーディングやbeam searchでは、モデルが自信を持つトークンを繰り返し選ぶため、同じフレーズが何度も出現します。

悪い例(greedy decoding):
"The cat sat on the mat. The cat sat on the mat. The cat sat on the..."

top-k/top-pサンプリングは多様性を上げますが、一貫性が失われる場合があります。

Contrastive Searchの仕組み

スコアリング関数

Contrastive Searchは次のスコアで各候補トークンを評価します:

score(x) = (1-α) × p(x|context) - α × degeneration_penalty(x)

ここで:

  • p(x|context): モデルが予測する確率(高いほど良い)
  • degeneration_penalty(x): 過去トークンとの最大コサイン類似度(低いほど良い)
  • α: バランスパラメータ(推奨 0.6)

degeneration penaltyの詳細

def compute_degeneration_penalty(x, past_tokens):
    """過去トークンとの最大類似度を計算"""
    h_x = hidden_state(x)  # 候補トークンの隠れ状態
    similarities = [cosine_similarity(h_x, h_j) for h_j in past_tokens]
    return max(similarities)  # 最も類似した過去トークンとの類似度

候補トークンの隠れ状態が過去のトークンと類似しているほど、スコアが下がります。これにより繰り返しが自然に抑制されます。

パラメータ

α(penalty_alpha)

  • α = 0.0: 純粋にモデル確率のみ(greedy decodingに近い)
  • α = 0.6: 推奨値(一貫性と多様性のバランス)
  • α = 1.0: 純粋にdegeneration penaltyのみ(非実用的)

top-k

候補トークンの絞り込みに使用(通常k=5〜8)。

Hugging Faceでの使用

from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("gpt2-xl")
model = AutoModelForCausalLM.from_pretrained("gpt2-xl")

input_ids = tokenizer("A stunning image", return_tensors="pt").input_ids

# Contrastive Search
output = model.generate(
    input_ids,
    penalty_alpha=0.6,   # α値
    top_k=4,             # 候補数
    max_new_tokens=200,
)
print(tokenizer.decode(output[0]))

他デコーディング手法との比較

手法一貫性多様性繰り返し速度
Greedy高低多い速い
Beam Search高低中遅い
top-p (p=0.9)中高少ない速い
Contrastive Search高高少ない中

まとめ

Contrastive SearchはNeurIPS 2022で発表されたデコーディング手法で、理論的に退化問題を解決します。Hugging Face Transformersにpenalty_alphaパラメータとして実装されており、長文生成・要約・ストーリー生成などで特に効果的です。2025年時点でもローカルLLM実行環境での長文品質向上に活用されています。

この記事について
カテゴリーAI・機械学習
難易度上級
作成日2026/6/7