llama.cppのtemperature・top-p・min-pは何を変える?

目次
llama.cppで生成結果を調整するとき、temperature、top-p、min-pを一度に変えると、何が結果へ効いたのか分からなくなりやすい。
まず同じモデル・プロンプト・seedの基準を保存し、一項目ずつ変える。
図: 容量・設定値・段階差の判断軸を1枚に整理。数値の条件は本文を優先する。
3つはどれもtokenの選び方に関わる
役割を大まかに分けると次のようになる。
| 設定 | 主に変えるもの | 比較で見ること |
|---|---|---|
| temperature | tokenの確率分布の鋭さ | 出力の揺れ方がどう変わるか |
| top-p | 累積確率で残す候補の範囲 | 候補範囲を変えたときの差 |
| min-p | 上位tokenの確率を基準にした相対的なしきい値 | 低確率候補を除いたときの差 |
オプション名や既定値はllama.cppの更新で変わる可能性があるため、使用中のバージョンの--helpも確認する。
temperatureは分布の鋭さを変える
temperatureを下げると高確率の候補へ集中しやすく、上げると確率差がなだらかになりやすい。
ただし、「低いほど正確」「高いほど創造的」と品質を一言で決めることはできない。
比較ではtop-pとmin-pを固定し、temperatureだけを変える。
top-pは累積確率で候補を絞る
top-pは、確率の高いtokenから累積して一定の範囲までを候補として残す方法だ。
値を変えると候補集合が変わる。temperatureも同時に変更すると、確率分布と候補範囲の両方が変わるため、差を追いにくい。
min-pは上位候補を基準に相対的に絞る
min-pは、最も確率の高いtokenを基準に、相対的に確率の低い候補を除くための設定としてllama.cppで使える。
これもtop-pなどと同時に大きく変えず、基準設定からmin-pだけを変更して比較する。
設定と出力を一緒に保存する
比較結果を再利用するなら、次を残す。
llama.cppのバージョン:
モデル・GGUF:
プロンプト:
seed:
temperature:
top-p:
min-p:
その他のsampling設定:
出力:
seedを同じにしても、llama.cppのビルドやバックエンドなどが変われば完全に同じ出力になるとは限らない。比較条件の一つとして記録する。
用途ごとに評価項目を変える
情報抽出なら、指定形式を守ったか、元文にない内容を加えていないかを見る。文章生成なら重複や表現、コードなら構文やテスト結果などを見る。
特定のtemperature値を万能なおすすめとして覚えるより、自分の用途で何を良い結果とするかを先に決める。
一度に一項目だけ変える
比較順は単純でよい。
基準設定
→ temperatureだけ変更
→ 基準へ戻す
→ top-pだけ変更
→ 基準へ戻す
→ min-pだけ変更
差が見えた設定だけ、次に狭い範囲で調整する。こうすればモデルを交換したときも、同じ方法で生成設定を比較し直せる。
コンテキスト長やKV cacheの設定を調整したい場合は、llama.cppのコンテキスト長とKV cacheを別の設定として確認する。
まとめ
- temperature・top-p・min-pはいずれも次に選ばれるtokenの候補や確率へ影響するが、役割は同じではない
- temperatureは確率分布の鋭さ、top-pは累積確率による候補範囲、min-pは上位tokenを基準にした相対的なしきい値へ関係する
- 複数の設定を同時に変えると、どの変更が出力差を作ったか判断しにくい
- 万能な設定値を探すより、同じプロンプトとseedから一項目ずつ比較する
公式サイトで次に進む
この記事で明示的に扱うソフトだけを表示します。配布・手順は各公式ページで確認してください。
llama.cpp
local-gen.jpがファイルを配布するものではなく、互換性を保証するものでもありません。
この記事で扱ったデータ
モデル・GPU・実行ソフトの確認済みデータを、記事とは別に確かめられます。