LLMのテキスト生成で同じトークンの繰り返しを抑制するパラメータ。Frequency Penaltyは既出トークンの出現回数に比例してペナルティを課し、Presence Penaltyは出現の有無に基づいて一律のペナルティを課す。両者を組み合わせることで自然で多様な出力を実現する。
Frequency Penalty と Presence Penalty は、LLM のテキスト生成において同じトークンや表現の繰り返しを抑制するためのパラメータである。Temperature や Top-p がサンプリングの「ランダム性」を制御するのに対し、これらは「反復の抑制」に特化している。
生成済みテキスト中にトークンが出現した回数に比例してペナルティを課す。同じ単語を繰り返すほどペナルティが増大し、3回目の出現は2回目よりさらに強く抑制される。
トークンが生成済みテキスト中に1回でも出現したかどうかに基づいて一律のペナルティを課す。出現回数に関係なく、「使ったか使っていないか」の二値判定である。
| 特性 | Frequency Penalty | Presence Penalty |
|---|---|---|
| ペナルティ基準 | 出現回数に比例 | 出現の有無(二値) |
| 効果 | 同一単語の連続使用を強く抑制 | 新トピック・新語彙の導入を促進 |
| 適用対象 | 単語レベルの繰り返し防止 | テーマレベルの多様化 |
| 典型的な使用値 | 0.0〜1.0 | 0.0〜1.0 |
| ユースケース | Frequency | Presence | 理由 |
|---|---|---|---|
| コード生成 | 0.0 | 0.0 | 変数名やキーワードの繰り返しは正常 |
| 記事執筆 | 0.3〜0.5 | 0.2〜0.4 | 適度な語彙の多様性を確保 |
| ブレインストーミング | 0.2 | 0.8〜1.2 | 新しいアイデアの導入を促進 |
| 要約 | 0.0〜0.2 | 0.0 | 原文の用語を維持する必要がある |
| 創作 | 0.5〜0.8 | 0.3〜0.5 | 表現の多様性と自然さの両立 |
| チャットボット | 0.3 | 0.3 |
| API | Frequency Penalty | Presence Penalty | 範囲 |
|---|---|---|---|
| OpenAI GPT-4o | frequency_penalty | presence_penalty | -2.0〜2.0 |
| Anthropic Claude | ×(未対応) | ×(未対応) | — |
| Google Gemini | frequency_penalty | presence_penalty | -2.0〜2.0 |
| Cohere Command R+ | frequency_penalty | presence_penalty | 0.0〜1.0 |
| llama.cpp | repeat_penalty | — | 0.0〜任意 |
Anthropic Claude API は Frequency/Presence Penalty パラメータを提供していない。代わりに Temperature と Top-p の調整でテキストの多様性を制御するアプローチを採用している。
ローカル LLM ランタイム(llama.cpp、Ollama、LM Studio)では repeat_penalty というパラメータが使われることが多い。これは Frequency Penalty に近い概念だが、直近 N トークン(repeat_last_n)のウィンドウ内でのみ適用される点が異なる。
A1: 併用可能で、OpenAI のドキュメントでも同時使用を想定している。一般的には両方を 0.0〜0.5 程度の控えめな値で設定し、出力を確認しながら調整する。
A2: 1.0 を超えると、一般的な接続詞や助詞までも抑制され、文法的に不自然な文章になる。特に日本語では助詞(は・が・の等)の繰り返しが必然的に多いため、高すぎるペナルティは文章を破壊する。
A3: 基本的には 0.0 を推奨する。コードでは変数名・関数名・キーワード(if, for, return 等)の繰り返しが正常な構造であり、ペナルティを課すと不正なコードが生成されるリスクがある。
| 自然な会話で同じフレーズを避ける |