0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【記事ドラフト】Ornith-1.0-9B(Qwen3.5 9B)の日本語が突然「中国語・韓国語まじり」になる問題 — 原因と推奨設定(実測つき)

0
Last updated at Posted at 2026-07-27

こんな症状に心当たりはありませんか?

で日本語チャ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)。ベンチ数値を比較するときは測定方式の確認を。


まとめ

  1. 日本語ローカルLLMの「中国語・韓国語化」「ループ」「空応答」は、DRYサンプラーが原因のことがある
  2. 特に思考型モデル×表・列挙・ツール使用の組み合わせで発症しやすい
  3. 対策は「DRYオフ+min_p 0.05+repetition_penalty 1.05」
  4. サンプラー設定はモデルの公式推奨値を起点に、コミュニティの値は「いつの時代の・何の用途の推奨か」を確認してから使う
  5. 数値は全て2026-07-27時点・筆者環境での実測。モデルや推論エンジンが違えば結果も変わるので、最後は自分の環境で測るのが確実

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?