こんな症状に心当たりはありませんか?
で日本語チャOrnith-1.0-9Bでチャットをしていて、ある日突然こんな出力が出てくる——
政府の補助金には企业振兴事业补助金があります…
背景: 시는 세계적으로 유명한…(後半まるごと韓国語に)
- 日本語の文章に**簡体字(中国の漢字)**が混ざる
- ひどいときは応答の途中から丸ごと中国語や韓国語になる
- 同じ文章を延々と繰り返すループが起きる
- 応答が空っぽで返ってくる
実はこれ、モデルの故障でも設定ミスの寄せ集めでもなく、たった1つのサンプラー設定が原因であることが多いのです。この記事では、丸一日かけた原因調査と実測の結果を整理します。
結論:犯人は「DRYサンプラー」だった
**DRY(Don't Repeat Yourself)**は「同じフレーズの繰り返しを罰する」仕組みです。2024年頃、創作・ロールプレイ用途のコミュニティで「反復地獄の特効薬」として広まりました。当時としては正しい評判でした。
しかし2026年の今、思考(reasoning)するモデルや、表・箇条書き・ツール呼び出しを多用する使い方では、DRYは牙をむきます。
なぜDRYで言語が壊れるのか
LLMは文章を「トークン」という単位で生成します。DRYは「さっき出したトークン列をまた出そうとしたら罰点」を与えます。
ところが——
- 表や箇条書きは、同じ形式・同じ単語が繰り返されるのが正常です
- 「株式会社○○振興事業補助金」のような固有名詞は、一字一句同じに書き写すのが正解です
DRYはこれらを「悪い繰り返し」と誤解して、正しいトークンに罰点を与え続けます。すると、モデルは罰されていない「同じ意味の別のトークン」へ逃げます。それが……
- 「振興」→「振兴」(簡体字)
- 「事業」→「事业」(簡体字)
- 日本語の文→韓国語の同じ意味の文
つまり、日本語・中国語・韓国語で漢字や語彙を共有していることが、逃げ道になってしまうのです。この現象はllama.cppコミュニティでも2026年に実測で確認されており(DRYオンでパス転写エラー率100%→オフで17%、除去で退化・空応答・無限ループが全解消)、私の環境の症状と完全に一致しました。
おまけの落とし穴:DRY作者自身の推奨と違う使い方をしていた
DRYの作者は当初から「DRY使用時はrepetition penaltyを無効か1.02以下に」「Min-Pと併用」と明言していました。私の環境は「DRY+repetition penalty 1.05+Min-Pなし」という、作者非推奨の組み合わせで動いていました。コミュニティの設定値だけをコピーして、使い方の前提を見落としていた形です。
推奨設定(2026-07-27時点・実測ベース)
日本語でのチャット・アシスタント用途(思考型モデル含む)での推奨です。今回はOrnith
| パラメータ | 推奨値 | 補足 |
|---|---|---|
| temperature | モデル公式推奨に従う(本環境は0.6) | 高いほど多彩だが崩壊しやすい。1.0で多言語混入が再発した実測あり。必ずモデルカードを確認 |
| top_p | 0.95 | 公式推奨値をそのまま |
| top_k | 20 | 公式推奨値をそのまま |
| min_p | 0.05 | ★今回のMVP。「最有力トークンの5%未満の確率しかない候補を足切り」。中国語・韓国語への"逃げトークン"は低確率側なので、これが構造的に塞いでくれる |
| repetition_penalty | 1.05(1.0〜1.1の範囲で) | 軽い反復抑制。上げすぎ注意:1.15以上で出力失敗が増える実測あり。一般に言われる「1.2目安」はモデルによっては強すぎる |
| DRY (dry_multiplier等) | オフ(0) | 思考型モデル・表や列挙・ツール使用・長い固有名詞の転写がある用途ではオフ推奨。純粋な創作・ロールプレイでのみ検討 |
| presence/frequency_penalty | 0(使わない) | 負の値は「反復促進剤」になる(frequency=-1.0で全プロンプトがループ化した実測あり) |
ポイント: 「反復を止めたい」ときの第一選択は repetition_penalty 1.05 と min_p 0.05 の組み合わせ。DRYはそれでもダメだった時の最終手段(その場合も作者推奨に従い、repetition penaltyを1.02以下に下げて併用を避ける)。
本当に直ったの?
21.9万トークンの限界テスト
設定変更後、1つの会話を100ターン・21万9千トークン(このモデルの上限26万の83%)まで育てる耐久テストをしました。わざと意地悪な条件です:
- 表・箇条書きを大量に書かせる(DRYで壊れていた形式)
- 中国・韓国・北朝鮮の話題を繰り返し振る(外国語トークンを誘発する最悪条件)
- 技術資料を貼って固有名詞を正確に転写させる
結果:
| 項目 | 結果 |
|---|---|
| 文章まるごとの繰り返しループ | 0件 |
| 韓国語(ハングル)混入 | 0件 |
| 簡体字混入 | 実質1箇所(「创新」の2文字、15万トークン生成中) |
| 応答の破綻・空応答 | 0件 |
完璧なゼロではありませんが(これはモデル自体が持つ性質の下限)、「会話が長くなると壊れる」状態からは完全に脱出しました。
ついでに分かった:長い会話はどのくらい遅くなる?
| 会話の長さ(トークン) | 生成速度 |
|---|---|
| 1回目 | 77.2 tok/s |
| 4万 | 52.7 tok/s |
| 8万 | 40.7 tok/s |
| 14万 | 31.0 tok/s |
| 21.9万 | 23.4 tok/s |
きれいな右肩下がりで、急な崖はありません。また、速度計測は「測り方」で大きく変わります(キャッシュの効かない一発測定だと10万トークンで27 tok/s、実際の会話の続きだと同37〜39 tok/s)。ベンチ数値を比較するときは測定方式の確認を。
まとめ
- 日本語ローカルLLMの「中国語・韓国語化」「ループ」「空応答」は、DRYサンプラーが原因のことがある
- 特に思考型モデル×表・列挙・ツール使用の組み合わせで発症しやすい
- 対策は「DRYオフ+min_p 0.05+repetition_penalty 1.05」
- サンプラー設定はモデルの公式推奨値を起点に、コミュニティの値は「いつの時代の・何の用途の推奨か」を確認してから使う
- 数値は全て2026-07-27時点・筆者環境での実測。モデルや推論エンジンが違えば結果も変わるので、最後は自分の環境で測るのが確実