AI・機械学習
中級
繰り返しペナルティ(LLM)(クリカエシペナルティエルエルエム)
LLMが同じトークンや表現を繰り返し生成するのを抑制するデコーディングパラメータ。過去に生成したトークンのロジットをスケーリングして再選択確率を下げる。presence penalty・frequency penaltyとも関連。
0 回閲覧
0 いいね
2026/6/6 更新
関連タグ
LLM
繰り返し抑制
デコーディング
presence penalty
サンプリング
繰り返しペナルティ(LLM)とは
繰り返しペナルティ(Repetition Penalty)は、大規模言語モデル(LLM)がテキストを生成する際に、過去に出現したトークンが再び選ばれる確率を下げることで、同じ単語やフレーズが無限ループ状に繰り返される現象(repetition loop)を抑制するデコーディング手法の総称である。
主要な実装形式
1. Repetition Penalty(HuggingFace / llama.cpp形式)
過去の文脈に出現したトークンのロジットをペナルティ係数rで除算:
if logit > 0:
logit = logit / r
else:
logit = logit * r
- r = 1.0: ペナルティなし(デフォルト)
- r = 1.1〜1.3: 軽度のペナルティ(推奨範囲)
- r > 1.5: 強すぎてテキスト品質が低下するリスク
llama.cppでは--repeat-penalty 1.15で指定。
2. Presence Penalty(OpenAI形式)
すでに一度以上出現したトークンに対して固定値を加算/減算するペナルティ。出現回数によらず一定値。
- 値域: -2.0〜2.0(OpenAI API)
- 正の値: 繰り返しを抑制、新しいトピックへの言及を促進
- 推奨: 0.0〜0.6
3. Frequency Penalty(OpenAI形式)
出現頻度に比例するペナルティ。同じトークンが出るたびにペナルティが累積。頻繁に使われたトークンほど強くペナルティを受ける。
注意点とトレードオフ
- ペナルティが強すぎると「必要な繰り返し(名詞・専門用語)」まで抑制される
- コード生成では変数名の繰り返しが必要なため、repetition_penaltyは1.0〜1.05程度が適切
- 詩や歌詞など意図的な繰り返しが必要なタスクでは無効化または低値を推奨
- Presence/FrequencyPenaltyはOpenAI互換API(ローカルLLMサーバー含む)でも対応が増えている