HN 日本語サマリー

← 一覧へ戻る
AI・機械学習

Show HN: AIの文章の癖を取り除いたQwen3-4B

Show HN: Qwen3-4B with the AI writing tics trained out (100toolkit.com)

121 pointsby erikkannike92 コメント

要約

この記事は、AIモデルが生成する文章によく見られる「AIライティングの癖」を軽減するための手法について解説しています。具体的には、Qwen3-4Bモデルを対象に、不要な表現やパターンを学習データから除去し、より自然で人間らしい文章を生成できるように訓練した結果が報告されています。

全文翻訳

AIの「癖」を訓練で除去したQwen3-4B

あなた自身

MacBook Airでファインチューニングされた、エマーシュ(em dash)や「XではなくY」といった表現、3つ組のリストを使わず、システムプロンプトも不要で、ローカルのOllamaで実行できる小さなオープンモデルです。

TL;DR
  1. Qwen3-4B-Instructのアシスタント的な文章の癖を訓練で除去し、qwen3-4b-deslopとしてリリースしました。Ollamaを使えば、ollama run hf.co/erikkannike/qwen3-4b-deslop-v4-GGUF:Q4_K_Mで2.5GBのダウンロードで利用できます。
  2. 訓練で一度も見たことのない40個のプロンプトに対するテストでは、スロップスコアが1000語あたり121から12.5に低下し、回答の68%が人間らしい文章のスコア範囲に入りました。エマーシュは1000語あたり20.5からゼロになりました。
  3. 依然として30個中30個の事実に関する質問に正しく回答し、元のモデルと同程度に要求されたジャンルと長さに適合します。人間が書いた文章に対する予測は、実行時のステアリングよりも約3分の1しか変化しませんでした。
  4. 中間バージョンは9.9のスコアを記録しましたが、意見のない意見記事や、捏造された研究、そして「, which」で全ての文を繋げる新しい癖を書きました。それを修正するには、回答がプロンプトの要求を満たしているかを確認する2番目のフィルターが必要でした。
  5. その声は平坦なほど素朴で、名前や場所は今でも発明します。

私のホームラボはMacBook Airなので、これは161個の回答で訓練された4Bモデルです。このレシピはモデルサイズに依存しないため、より大きなモデルでの実行が次のステップです。

40個の保留されたプロンプトに対する回答

これらは、元のモデルとリリースされたモデルから、10個のトピックと4つのジャンルで、システムプロンプトなしでサンプリングされた回答です。下線が引かれた部分は、スロップ検出器がカウントする箇所です。

トピック

元のQwen3-4B-Instruct

スロップ除去版

生成は260トークンで停止したため、長い回答は文の途中で終わります。下線が引かれた箇所にカーソルを合わせると、それがどの癖であるかがわかります。スコアは1000語あたりで、人間の文章は通常15未満のスコアです。

スロップスコア

このスコアは、AIの文章の癖に関するスタイルガイドから作成した検出器(エマーシュ、「XではなくY」、3つ組のリスト、その場で回答される疑問符、署名のような「要するに」「ポイントは」、強調のための短い断片、そして「delve」や「seamless」のような単語)から来ています。各癖には重みがあり、スコアは1000語あたりの重み付けされたカウントです。注意深い人間が書いた段落はゼロに近いスコアになり、元のモデルは平均121でした。

正規表現では良い文章と悪い文章を区別できないため、以下の全てのモデルはダメージチェックも行われました。ドリフトは、人間が書いた22の文章に対する予測が元のモデルからどれだけ変化したかを示します。30個の質問クイズは、モデルがまだ知識を持っているかを確認し、ルールベースのチェックは、文頭が小文字である、またはトピックが失われているといった壊れた出力をフラグ付けします。また、全てのモデルの回答サンプルを読みました。

トレーニング方法

以前の実験では、このモデルにアシスタントレジスタが方向性として存在することがわかりました。それをモデルが書いている間に減算し、プレーンなスタイルのシステムプロンプトと組み合わせることで、スコアは約15になりますが、プロンプトと生成中のコードが必要であり、通常のテキストに対するモデルの予測をシフトさせます。2番目の実験では、ニューロンを1つずつ読み取り、4つのニューロンの符号を反転させることで、「XではなくY」の70%をほとんどコストなしで除去できることがわかりましたが、それはその1つの癖に限られました。

両方を重みに組み込むために、蒸留を使用しました。教師モデル(これまで最も効果的だったものから構築)が288個のトレーニングプロンプトに回答します。チェックを通過した回答を保持し、小さなLoRAアダプターが、生のプロンプトからそれらを生成することを学習します。最初のラウンドで、プロンプトやフックなしでスコアは約20になりました。

ラウンド2

ラウンド2では、教師モデルはラウンド1のモデルに4ニューロンパッチとプレーンスタイルのプロンプトを追加したものでした。それに加えて方向性ステアリングをトップに追加すると、大文字のない、トピックから外れたテキストから測定された最も低いスコア9.5が得られたため、ステアリングを元に戻しました。その後、教師モデルは平均7.4になり、その171個の最良の回答で訓練された学生は9.9を記録し、回答の80%が人間の範囲内でした。

その回答では、企業の新しいCRMに関する意見記事は立場を取らず、インシデントレポートのように読めました。新しい都市への引っ越しに関するブログ記事は、漏水するアパートを持つ家族についての三人称の物語になりました。観葉植物に関する記事は「シドニー工科大学の研究」を引用しましたが、これはモデルが捏造したものでした。ほとんど全ての文が「, which」または「, so」で繋がっており、元のモデルの28倍の頻度でした。最後の癖は、モデルに「because, so, but, which」で文を繋ぐように指示した私の教師プロンプトから来ており、2回の模倣で増幅されました。

タスク適合チェック

回答がプロンプトの要求を満たしているかを確認するために、ルールベースのチェックを追加しました。意見記事は早い段階で立場を示す必要があり、個人的な感想は一人称である必要があり、メールは挨拶で始まる必要があり、長さは要求に大まかに一致する必要があります。さらに2つのチェックは、「, which」と「, so」の結合、および捏造された研究とパーセンテージをカウントします。これらのチェックにおいて、ラウンド2のモデルは要求を満たしていたのは60%で、元のモデルの78%と比較して低かったです。

ラウンド3

3番目の教師は、タスクを最優先するプロンプトを受け取りました。求められたら立場を取り、個人的な場合は一人称で書き、文を変化させ、研究や名前を捏造しないようにしました。プロンプトごとに3つの回答を生成し、スコアが12未満で、ダメージチェックをパスし、全てのタスクチェックをパスした回答のみが保持されました。約30%がこれを満たし、288個のプロンプトのうち161個をカバーしました。

それらの回答で訓練されたモデルが、リリースされたモデルです。スコアは9.9から12.5にわずかに上昇しましたが、タスク適合率は80%に戻り、「, which」の結合は100語あたり1.4から0.3に減少しました。捏造された研究とパーセンテージはほとんど消滅しました。

40個の保留されたプロンプトに対する1000語あたりのレート、元のモデルとリリースされたモデルの比較。

ダウンロードと使用方法

量子化されたビルド(Q4_K_M、2.5 GB)は、Ollamaまたはllama.cppを搭載したラップトップで実行できます。

ollama run hf.co/erikkannike/qwen3-4b-deslop-v4-GGUF:Q4_K_M
llama-cli -hf erikkannike/qwen3-4b-deslop-v4-GGUF:Q4_K_M

フルプレシジョンのウェイトは、任意のQwen3-4Bチェックポイントと同様に、transformersでロードできます。

from transformers import AutoModelForCausalLM, AutoTokenizer
name = "erikkannike/qwen3-4b-deslop-v4"
tok = AutoTokenizer.from_pretrained(name)
model = AutoModelForCausalLM.from_pretrained(name, torch_dtype="auto")
msgs = [{"role": "user", "content": "Write a LinkedIn post about switching to a four-day week."}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt")
out = model.generate(ids, max_new_tokens=300, do_sample=True, temperature=0.7)
print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True))

リポジトリには、個別のコンポーネントも含まれています。LoRAアダプター(126 MB)とニューロン編集(4つの重み列とそのスケールを示す175バイトのリスト)です。アダプターは編集がアクティブな状態でトレーニングされたため、この2つはセットで機能します。

制限事項

声は平坦です。モデルは短い宣言文の連続を書き、個人的な文章は日記のエントリのように読めます。

また、今でも物事を捏造します。研究やパーセンテージは稀になりましたが、名前や場所の捏造は一般的です。例えば、マリアという女性が経営するメイプルストリートのコーヒーショップなどです。これは、全てのラウンドで具体的な詳細が報酬として与えられたためです。また、長文になりがちで、「約150語」という指示に対して、しばしば200語近くになります。

これらのジャンルでは、短い英語の散文のみをテストしました。コード、長い会話、他の言語、ツールの使用は、元のモデルと同等か、それ以下かもしれません。スコアは正規表現で記述された私のスタイルガイドであり、読者によるブラインドテストはまだ行われていません。また、数値は実行ごとに変動します。同じモデルが、アダプター経由では10.2、マージされたウェイトでは12.5というスコアを記録しました。これはサンプリングの違いのみによるものです。

次のステップ

各学生モデルは、教師が書ける最良の回答と同程度になったため、より良いモデルにはより良い教師が必要です。私は、優れた人間の文章、パブリックドメインのエッセイや手紙、そして現代の作品のセットを、ベースモデルの例として使用するためにまとめています。ベースモデルはアシスタントトレーニングを受けておらず、学習した人々のように文章を書きます。もしその教師がこのモデルよりも良く書けるなら、同じレシピで、クリーンな習慣とある程度のセンスを持つ学生を生成できるはずです。その後、7〜8Bモデルと約30Bモデルで同じパイプラインを実行し、人々がより良いテキストを選ぶブラインドテストを行います。

メソッドノートと注意点

  • ベースモデル: Qwen3-4B-Instruct-2507 (bf16)。各アダプターは、全ての注意機構とMLP射影に対するランク16のLoRAであり、生のユーザープロンプトで2エポックトレーニングされ、応答のみに損失を適用します。M2 MacBook Airで1〜3時間/ラウンドかかります。
  • テストセット: トレーニングで使用されなかった10個のトピックを、それぞれ4つのジャンル(ブログ記事、LinkedIn投稿、解説、意見記事)で、温度0.7でサンプリングされた回答を1つずつ、システムプロンプトなしでテストしました。ドリフトは、人間が書いた22の文章に対する元のモデルからのKLダイバージェンスです。
  • タスク適合チェックは単純なルール(意見記事の冒頭近くのスタンスワード、感想文の一人称代名詞、メールの挨拶、単語数)であり、読者が気づくような点は見逃します。トレーニングデータはここで報告されている同じチェックでフィルタリングされているため、タスク適合率はモデルをやや良く見せています。
  • ニューロン編集は、4つのMLPニューロン(レイヤー32ニューロン4852、レイヤー33ニューロン348、レイヤー28ニューロン1121、レイヤー32ニューロン5418)の符号を反転させます。これは、それらのレイヤーのダウンプロジェクションウェイトの4つの列を否定することと同じです。GGUFビルドは、マージされたウェイトのQ8_0変換から量子化されました。
  • リーダーのチャットとライブカーソルは、WebRTC(パブリックNostrリレーを使用したTrystero)を介して読者を直接接続します。ピアは互いのIPアドレスを見ることができ、何も保存されず、「非表示」はあなたを切断します。