跳到正文
原文
Hacker News· erikkannike·· 3 小时前精选AI 评分59

Qwen3-4B 微调版去除 AI 写作痕迹发布

Show HN: Qwen3-4B with the AI writing tics trained out

AI 导读

作者基于 Qwen3-4B-Instruct 微调出 qwen3-4b-deslop,去除 em dash、not X but Y、三连等 AI 写作痕迹,量化版 2.5GB 可用 Ollama 运行。

推荐理由

原文给出了三轮蒸馏训练中具体的失败与修复细节,读者可以参照其评估脚本和任务拟合检查思路来改进自己的微调流程。

正文 · AI 翻译

只有你

一个小型开源模型,在 MacBook Air 上微调而成,写作时不使用破折号、"不是 X,而是 Y" 或三项并列句式,也无需系统提示词,你可以在本地用 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.5 GB。
  2. 在它训练时从未见过的 40 个提示上,每千字的废话得分从 121 降到 12.5,且有 68% 的回答得分落入人类写作的区间。破折号从每千字 20.5 个降为零。
  3. 它仍能正确回答 30 道事实题中的全部 30 道,且符合所要求体裁与长度的频率与原版相当。它在人类所写散文上的预测偏移,大约只有运行时引导的三分之一。
  4. 一个中间版本得分 9.9,但写得很差:观点文章里没有观点,编造研究,还养成了用 ", which" 连接每句话的新习惯。修复这一问题用了一个额外的过滤器,用于检查回答是否完成了提示所要求的内容。
  5. 语气平淡到了扁平的程度,而且仍会编造人名和地名。

我的家庭实验室就是一台 MacBook Air,所以这是一个用 161 条回答训练的 4B 模型。该方法不依赖于模型规模,下一步就是在更大的模型上运行。

在 40 个保留提示上的回答

这些是原版模型和发布版模型在 10 个主题、4 种体裁上对每个提示各采样一次的回答,未使用系统提示词。下划线标出的段落就是废话检测器计入的部分。

原版 Qwen3-4B-Instruct

去废话版

生成在 260 个 token 处停止,所以较长的回答会在句子中间截断。将鼠标悬停在带下划线的段落上可查看它属于哪种习惯。得分以每千字计;人类写作通常得分低于 15。

废话得分

该得分来自我根据 AI 写作习惯清单所写的检测器:破折号、"不是 X,而是 Y"、三项并列、当场作答的修辞性提问、"关键在于"这类提示语、用于强调的短句,以及 "delve"、"seamless" 这类词。每种习惯都有权重,得分是每千字的加权计数。严谨的人类作者写的一段话得分接近于零,而原版模型的平均分为 121。

正则表达式无法区分好文与劣文,所以下面的每个模型也都进行了损害检测。偏移度衡量的是它在 22 段人类散文上的预测相对于原版模型偏移了多远。一份 30 题的测验用于检查它是否仍掌握事实,基于规则的检查则会标记出诸如句首小写或跑题这类有缺陷的输出。我还阅读了每个模型的一批回答样本。

训练方法

一次早期实验在该模型上发现助手腔表现为模型内部的一个方向:在模型写作时将其减去,配合一段平淡风格的系统提示词,可将得分降至约 15,但它需要这段提示词和代码在生成时同时运行,而且会改变模型在普通文本上的预测。第二次实验逐个读取神经元,找到了其中四个,只要翻转其符号就能几乎无代价地去除 70% 的 "不是 X,而是 Y",不过只对这一种习惯奏效。

为了把这两点都纳入权重,我使用了蒸馏:用一位由迄今效果最好的方案组成的教师模型,对 288 条训练提示作答。我保留通过检查的答案,再用一个小型 LoRA 适配器学习仅凭裸提示复现这些答案。第一轮在不使用提示词和钩子的情况下,把分数做到了约 20。

第二轮

第二轮的教师由第一轮的模型、四个神经元的补丁以及朴素风格提示词组成。在此基础上再叠加方向引导,产生了迄今我测得的最低分 9.5,但得到的文本没有大写字母并跑题了,于是我把引导去掉。之后教师平均分 7.4,基于其 171 个最佳答案训练的学生得分 9.9,80% 的回答落在人类水平区间。

在它生成的回复中,一篇关于某公司新 CRM 的观点文从不下结论,读起来像事故报告。一篇关于搬到新城市的博文变成了第三人称故事,主角是一家人和一间漏水的公寓。一篇关于室内绿植的文章引用了「悉尼科技大学的一项研究」,这是模型自己编造的。几乎每个句子都用「, which」或「, so」连接到下一句,出现频率是原模型的 28 倍。最后这个习惯来自我自己的教师提示词——它曾让模型用「because、so、but、which」连接句子,而两轮模仿放大了这一点。

任务契合度检查

我加入了基于规则的检查,看答案是否按提示词的要求作答。观点文必须在开头表明立场,个人随笔必须使用第一人称,邮件必须以问候语开头,长度要大致符合要求。还有两项检查统计「, which」与「, so」连接的出现次数,以及编造的研究和百分比。在这些项目上,第二轮的模型只有 60% 的时间按要求作答,原模型则为 78%。

第三轮

第三轮的教师收到一段把任务放在前面的提示词:被要求表态时就表态,涉及个人经历时用第一人称,句子要有变化,不要编造研究或名字。它对每个提示生成三个答案,只有得分低于 12、通过损伤检查并通过所有任务检查的答案才被保留。大约 30% 的答案做到了,覆盖了 288 个提示中的 161 个。

用这些答案训练得到的模型就是公开发布的版本。它的得分由 9.9 微升至 12.5,任务契合度回升到 80%,每 100 词中「, which」连接从 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)以及神经元编辑——一个 175 字节的列表,包含四个权重列及其缩放因子。适配器是在编辑生效的状态下训练的,因此两者需要配合使用。

局限性

语调平淡:模型写出一连串短陈述句,其个人化篇章读起来像日记。

它仍然会编造内容:研究和百分比现在已很少见,但虚构的人名和地名仍很常见,比如枫树街上由一位名叫 Maria 的女士经营的咖啡店,因为每一轮奖励的都是具体细节。它还容易写长,对「约 150 字」的回复常常接近 200 字。

我只测试过这些体裁中的短篇英文散文。代码、长对话、其他语言和工具使用可能不比原模型更好,甚至更差。评分是我以正则表达式写成的风格指南,尚未经过任何盲测检验。分数在多次运行之间也会波动:仅由于采样差异,同一个模型通过适配器评分为 10.2,合并权重后评分为 12.5。

下一步

每个学生模型最终都做到了与其老师所能写出的最佳答案相当的水平,因此更好的模型需要更好的老师。我正在整理一批优秀的人类写作——公有领域的散文和信件,加上一些现代作品——用作基础模型的示例。基础模型从未经过助手训练,仍然像它所学的人类那样写作。如果这位老师写得比这个模型更好,同样的方法应该能培养出一个既有一定品味又有整洁习惯的学生模型。之后会使用相同的流程,在 7 到 8B 的模型和约 30B 的模型上各做一次,并进行一次盲测,让人们选出更好的文本。

方法说明与注意事项

  • 基础模型:Qwen3-4B-Instruct-2507,bf16 精度。每个适配器都是作用于所有注意力和 MLP 投影的 rank-16 LoRA,在裸用户提示上训练两轮,仅对回复计算损失,每轮在一台 M2 MacBook Air 上耗时一到三小时。
  • 测试集:十个从未在训练中使用的主题,每个主题分四种体裁(博客文章、LinkedIn 文章、说明文、观点文章),每个提示在温度 0.7 下采样一个答案,不使用系统提示。Drift 是原始模型在 22 段人类散文上的 KL 散度。
  • 任务契合度检查是一些简单的规则(观点文章开头附近有一个立场词,反思类文章使用第一人称代词,邮件中有问候语,词数统计),它们会遗漏读者能发现的东西。训练数据也按此处报告的同一套检查进行了过滤,所以任务契合度数字在一定程度上美化了模型。
  • 神经元编辑翻转了四个 MLP 神经元的符号(第 32 层 4852 号、第 33 层 348 号、第 28 层 1121 号、第 32 层 5418 号神经元),等同于将它们所在层下投影权重的四列取负。GGUF 版本是从合并权重的 Q8_0 转换量化而来。
  • 读者的聊天和实时光标通过 WebRTC(使用 Trystero 和公共 Nostr 中继)直接将读者彼此相连。对等节点可以看到彼此的 IP 地址,不保存任何信息,「隐藏」会断开你的连接。

来源:Hacker News · 100toolkit.com