跳到正文
Hacker News· erikkannike·· 5 小时前AI 评分38

在 MacBook Air 上微调 Qwen3-4B,训练出没有 AI 写作腔的 qwen3-4b-deslop

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

AI 导读

开发者将 Qwen3-4B-Instruct 微调为 qwen3-4b-deslop,去掉了破折号、"不是 X 而是 Y"、三段式列举等 AI 写作习惯,无需系统提示词即可用 Ollama 本地运行,量化版 2.5 GB。

正文 · 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 个训练中从未见过的提示词上,slop 分数从每 1000 词 121 降到 12.5,68% 的回答得分落在人类写作的范围内。破折号从每 1000 词 20.5 个降到零。
  3. 它仍然能正确回答 30 道事实性问题中的 30 道,并且在符合要求的体裁和长度方面与原模型一样频繁。它在人类撰写散文上的预测偏移量约为运行时引导的三分之一。
  4. 一个中间版本得分为 9.9,但写得很差:没有观点的评论文章、编造的研究,以及一种新习惯——用 ", which" 连接每个句子。修复这个问题需要第二个过滤器,用来检查回答是否完成了提示词的要求。
  5. 文风平实到近乎平淡,而且它仍然会编造人名和地名。

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

40 个留出提示词上的回答

这些是原始模型和发布模型在每个提示词上各采样一个回答,涵盖四个体裁的十个主题,不使用系统提示词。带下划线的段落是 slop 检测器所统计的内容。

原始 Qwen3-4B-Instruct

去 slop 后

生成在 260 个 token 处停止,因此长回答会在句子中间结束。将鼠标悬停在带下划线的段落上可查看它属于哪种习惯。分数按每 1000 词计算;人类写作通常得分低于 15。

slop 分数

该分数来自我根据 AI 写作习惯风格指南编写的检测器:破折号、"不是 X,而是 Y"、三连列表、自问自答的反问句、"here's the thing" 之类的路标语、用于强调的短片段,以及 "delve" 和 "seamless" 之类的词。每种习惯都有一个权重,分数是每 1000 词的加权计数。一位细心的人类写作者所写的段落得分接近零,而原始模型平均为 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%,“, 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)和神经元编辑,后者是一个 175 字节的列表,包含四个权重列及其缩放系数。适配器是在编辑生效的情况下训练的,所以两者要一起使用。

局限性

语气平淡:模型会写一连串简短的陈述句,其个人文章读起来像日记。

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

我只在这些体裁上测试过简短的英文散文。代码、长对话、其他语言和工具使用可能不比原模型更好,甚至更差。评分标准是我用正则表达式写成的风格指南,目前还没有与读者进行过盲测来检验它。数字在不同运行之间也会有波动:同一个模型通过适配器评分为 10.2,作为合并权重评分为 12.5,这仅仅是采样差异造成的。

下一步

每个学生最终都大致达到了其老师所能写出的最佳答案的水平,因此更好的模型需要更好的老师。我正在整理一套优秀的人类写作素材,包括公有领域的散文和书信以及现代作品,用作基础模型的示例。基础模型从未经过助手训练,仍然像它所学习的人那样写作。如果那位老师写得比这个模型更好,同样的配方应该能培养出一个既有一定品味又有良好习惯的学生。之后是在一个 7 到 8B 模型和一个约 30B 模型上运行同样的流程,并进行一次由人们挑选更好文本的盲测。

方法说明与注意事项

  • 基础模型:bf16 格式的 Qwen3-4B-Instruct-2507。每个适配器都是作用于所有注意力和 MLP 投影的 rank-16 LoRA,在仅含用户提示的输入上训练两个 epoch,损失仅计算响应部分,每轮在 M2 MacBook Air 上耗时一到三小时。
  • 测试集:十个训练中从未使用过的主题,每个主题四种体裁(博客文章、LinkedIn 帖子、解释性文章、观点文章),每个提示在温度 0.7 下采样一个答案,无系统提示。漂移是指在 22 段人类散文上相对于原模型的 KL 散度。
  • 任务契合度检查是简单的规则(观点文章开头附近的立场词、反思中的第一人称代词、电子邮件中的问候语、字数),它们会漏掉读者能捕捉到的问题。训练数据是用这里报告的相同检查过滤的,因此任务契合度数字在一定程度上美化了模型。
  • 神经元编辑翻转了四个 MLP 神经元的符号(第 32 层神经元 4852、第 33 层神经元 348、第 28 层神经元 1121、第 32 层神经元 5418),这等同于对其所在层下投影权重的四列取负。GGUF 构建是从合并权重的 Q8_0 转换量化而来的。
  • 读者的聊天和实时光标通过 WebRTC(Trystero 配合公共 Nostr 中继)直接连接读者。对等方可以看到彼此的 IP 地址,不会保存任何内容,"隐藏"会断开你的连接。

来源:Hacker News · 100toolkit.com