微调大语言模型以生成1995年代风格的文档

Hacker News Top 新闻

摘要

作者使用1990年代微软手册语料库,对本地大语言模型进行微调,以生成复古风格的文档,探索本地模型在技术写作中的定制化应用。

暂无内容
查看原文
查看缓存全文

缓存时间: 2026/06/05 08:08

# 微调LLM让文档写作回到1995年 来源:https://passo.uno/fine-tuning-docs-llm/ 发布于 2026年6月1日 · 阅读时间10分钟 在我写的 [2030年预测](https://passo.uno/my-day-tech-writer-2030/) 中,我曾提到技术写作者会使用专门的LLM,在本地强大硬件上运行。我在工程界评论家那里看到了这种"本地优先"趋势的迹象,但我们还没真正实现,部分原因在于联网前沿模型强大得多。不过这并不意味着我们无法尝试。这正是我上周做的事情:尝试微调一个指导模型,让它像80、90年代的软件技术写作者那样写作。 ## 召唤旧技术写作传说作为研究资料 要训练一个本地的个人模型像90年代技术写作者那样写作,需要大量书面来源。如果我要微调一个模型像我自己一样写作,我的博客就不够用——写这篇文章时博客大约只有10万字。你需要更多样本来进行彻底训练,而这些样本不容易获得,也不容易生成。唯一快速的方法是使用现成的语料库。哪里能找到呢? 认识一下 [Bitsavers](https://bitsavers.trailing-edge.com/):这是一个收集并扫描旧计算机手册和宣传册的网站。它是计算机历史和古老技术写作的宝贵仓库,有多个镜像可用。我偏爱90年代的微软手册,因此选择 [微软收藏集](https://archive.org/details/bitsavers_microsoft) 作为训练材料来源。该收藏包含1977年至2005年间出版的绝版文档:超过3700万词,覆盖旧系统和SDK。 MS 收藏 我下载了OCR文本文件,并用老式Python脚本清理了其中的伪影和杂乱内容(如索引和前言)。然后我通过 [OpenRouter](https://openrouter.ai/) 使用便宜且快速的模型 gemma-4-26b,根据可理解性将每个段落分类为"保留"或"丢弃"。这第二步花费约8美元。即使经过两次清理,训练数据中还是有噪音,我后来才发现,但对测试来说基本可以接受。 我将清理后的文本按段落和章节边界分割成训练样本,在标题处断开,保持代码块完整,每个块按照Claude的建议限制在约512个token。每个块与一个从模板生成的合成指令配对。最终我得到了192,456个JSONL格式的样本(每行一个JSON对象)。我本可以用一个小型模型生成更好的指令和问题,但我性急。 💡 材料说明:这是一个独立的非商业研究项目,与微软无关联、未受赞助或认可。我仅使用这些绝版手册进行个人风格迁移实验。语料库、训练数据和生成的适配器不进行分发,微调后的模型严格保留在我的本地机器上。 ## 微调:从头训练的替代方案 理想情况下,我有很多百万美元闲置,准备烧掉来创建自己的LLM *Fabrice*。既然我远非富有(否则就不会写这个了),替代方案就是微调——调整模型的权重,使每个生成的token都受训练材料的影响。我喜欢把微调想象成用拖船稍微改变一座巨大冰山的方向;只需一点点,就能达到预期效果。 为什么是微调,而不是检索增强生成(RAG)?因为在这个实验中,我不太关心检索事实(RAG擅长之处),而是更希望让LLM以特定风格行为和写作,无论其对上下文的了解如何。与完整训练相比,微调不需要海量数据,因此更便宜。另外,也是因为我一直想尝试微调这个技术,看看它有多可行。 为了避免在我那显卡较旧的电脑上花费数天或数周微调模型,我使用了 [Runpod](https://runpod.io/),一个面向AI开发者的在线服务,提供按需配置的GPU和工具,价格(相对)低廉。例如,每小时不到6美元就可以租用一块强大的Nvidia B200显卡(192GB内存)。该服务具有方便的API,可配置自动充值并控制成本。 Runpod ## 进入充满神秘术语的世界 决定微调模型后,我向Claude咨询了最合理的方法。我们确定了 [QLoRA](https://www.redhat.com/en/topics/ai/lora-vs-qlora)(量化低秩适配),它通过"冻结"LLM的权重并在其上放置适配器(有点像面具,可以这样理解)来实现微调,而不是改变每个权重。QLoRA中的Q表示结果被量化,即压缩,从而降低内存需求。 你还在跟上吗?很好。如果你觉得这很复杂,那是因为它确实复杂。 如今在家用LLM做任何事都是妥协的练习:要么牺牲时间,要么花钱,要么降低雄心目标。我试图在不到一个周末的时间里取得有意义的成果。我选择尝试对两个模型进行微调:Llama 3.1 8B Instruct 和 Qwen 2.5 7B Instruct。它们的大小(约8B)在Macbook Air上运行流畅。我还测试了一个Llama基础模型(*没有*经过问答训练)。 我在几种不同条件下测试微调:改变训练材料数量(子集 vs. 完整语料库)、训练轮数(epochs)以及结构参数如秩(rank)。我对此只有肤浅的了解,但我依赖我的智能体做出正确选择,同时在每个步骤愉快地质疑结果。例如,3个epoch在某些情况下会导致"过拟合";在LLM领域,这表现为过度训练。有趣。 适配器只能应用于你微调的目标模型。训练每个适配器后,我将它们导出到笔记本,转换并量化为GGUF LoRA文件,然后注册为本地Ollama模型,用于基准测试。本地转换方法更快且不需要GPU,但推理速度略慢于完全合并的模型。对于手头的测试,我不太关心速度。 对所有条件训练适配器花了一整天(包括休息时间),总花费50美元。过程中我损失了两个适配器:Runpod对预算不宽容,一旦资金为零就立即删除Pod(这是一个教训)。Claude负责设置每次运行并跟进Runpod的API。Claude Code的 `/goal` 命令对循环每个阶段很有帮助(回顾起来,我本应该以YOLO模式运行它)。 下表展示了我比较的所有模型及其条件: ## 微调后风格是否迁移了? 我对每个模型使用了相同的提示: - 记录malloc(),一个C基本函数,训练材料可能知道它。 - 记录一个虚构的ConnectWifi() Win32 API函数。训练材料中不存在。 - 以1990年代的微软风格解释什么是REST API(跨时代测试)。 你可以在这个 gist 中看到所有问题和答案。 对于malloc()测试,未修改的模型生成了现代风格的Markdown文档(类似README),而微调模型使用了符合时期的结构,包含Synopsis块、Return Value部分等。对于虚构的ConnectWifi()函数,只有3个epoch的模型保持了虚构,将其当作真实函数记录,而其他模型打破了第四面墙,依赖内部知识并抵抗训练。 REST API的练习也很有趣:Llama Instruct 40k失败,生成了平淡的营销文字。Claude将其归因于Llama经过的强强化训练(RLHF)使其友好易读。Qwen微调版更好地保持了语体,生成了具有时期结构的文档,使用HTTP方法名称作为动词,并使用正式标题。Qwen 192k最强,开头像Windows 2000资源包的章节。 真令人惊叹 让我重复一遍:一个7B模型,在1990年代的文档上训练,并在2000年代的概念上测试,产生了一个令人信服的章节开头,可能被误认为是真正的时期材料。风格迁移成功了。哇。另一方面,基础模型(未经问答训练,仅用于自动补全)惨败,几乎随机地喷出原始语料,成百上千行的垃圾。基础模型没有"回答这个问题"或"完成这个"的概念。 我通过比较Qwen模型的秩效果结束了实验,使用1个epoch,秩在8和16之间变化。如果我理解正确,秩8意味着每个适配器矩阵只能描述8个独立模式。就像有8个旋钮可以调节。旋钮这么少,适配器不能太聪明:它必须完全投入到训练数据中最强、最重复的模式中。秩16理论上更具表现力、更细腻。 秩比较表明,较小的适配器(自由度较少)更容易提交到虚构中,而较大的适配器(秩16)更容易"逃离"语料库。结果还显示,将1个epoch与中等秩16结合会使幻觉更频繁:适配器足够有表现力去触及相关概念,但不够强化以锚定提示要表达的内容。秩和epoch似乎相互作用——就像使用调音台。有趣的是,适配器越便宜,模仿越诚实。 ## 微调模型是出色的模仿者,但不能替代 微调后的模型是90年代末微软技术写作者的出色模仿者。语料库给模型注入了风格和语调,以及一些知识,同时大多数保留了模型描述新概念的能力。这是一个相对廉价的过程,可以产生有效的小模型,用于风格审查或按照内部风格指南起草新文档等任务。 但达到这一点并非轻而易举。微调模型虽然廉价,但需要大量高质量的训练数据,这并不容易生成。即使获得了数据,也需要选择一个合适的底层模型,能够接受附加训练。然后,你面临的多个参数使得将微调模型调整到最佳状态成为耗时的任务。 令人安心的结论是,这样的模型永远无法取代人类技术写作者,只能增强他们。微调后的模型与其未微调的同类一样缺乏判断力,并且需要大量指导。*Fabrice* 还得再等等。 ---

相似文章

从零构建一个复古风格的LLM

Hacker News Top

作者记录了从零构建一个340M参数LLM的过程,该模型仅使用1900年以前的文本进行训练,包括自定义数据集、训练脚本,并开源了模型和代码。

大语言模型微调指南:从零到精通

Reddit r/LocalLLaMA

本文介绍了大语言模型微调的完整指南,通过一项案例研究,对比了微调相较于RAG(检索增强生成)和系统提示词的优势。该研究显示,对Mistral 7B模型进行微调后,其医疗报告任务的准确性从35%提升至98%。

为了内容而内容

Armin Ronacher

作者探讨了LLM如何影响编码和日常语言中的用词,发现LLM偏好的词汇在编程会话和Google Trends中出现的频率均有所增加,这引发了人们对人类开始采用LLM写作风格的担忧。