微调大型语言模型,使其写作风格如同1995年
发布于2026年6月1日 · 阅读时间10分钟 在我对2030年的预测中,我写道技术写作者将使用专用的大型语言模型,运行在强大的本地硬件上。我在工程界的专家中看到了这种“本地优先”转变的迹象,但我们还没有到达这一点,部分原因是联网的前沿模型要强大得多。不过,这并不意味着我们不能进行实验。这正是我上周所做的,尝试微调一个指令模型,使其写作风格像是80和90年代的软件技术写作者。 召唤旧的技术写作知识进行研究 为了训练一个个人的本地模型,使其具备90年代技术写作者的写作风格,需要大量的书面资料。例如,如果我想微调一个模型使其写作风格像我自己,这个博客的内容是不够的,因为在发布时它只有不到10万字。你需要更多的样本进行深入训练,而这些样本又并不好找,也并不容易生成。唯一快速的方法是使用现有语料库。我可以从哪里获得一个呢? 认识Bitsavers:这是一个收集和扫描旧计算机手册与宣传册的网站。它是计算机历史和古老技术写作的宝贵资料库,镜像在各处都有提供。因为我喜欢90年代的微软手册,我选择了微软收藏作为训练材料的来源。这个收藏包含1977年至2005年间出版的绝版文档:超过3700万字,涵盖了旧系统和软件开发工具包。我下载了经过光学字符识别处理的文本文件,并使用老旧的Python脚本清理内容中的杂质和混乱(例如索引和前言)。然后,我通过OpenRouter使用一个便宜且快速的模型,gemma-4-26b,根据段落的可理解性将其分类为“保留”或“丢弃”。这个第二次处理的成本大约为8美元。尽管经过这两次清理,训练数据仍然保留了一些噪音,这些噪音我是后来才发现的,但这对我的测试大体来说是可以接受的。 我按照段落和章节的边界将清理后的文本拆分为训练示例,在标题处断开,并将代码块整体保留,每个块的大小约为512个标记,以符合Claude的建议。每个块与从模板抽取的合成指令配对。最终我得到了192,456个JSONL格式的示例(每行一个JSON对象)。我本可以使用一个小型模型来获得更好的指令和问题,但我性格急躁。💡 关于材料的注意事项:这是一个独立的、非商业的研究项目,未与微软有关联、赞助或认可。我仅将这些绝版手册用于个人风格迁移实验。语料库、训练数据和生成的适配器不被分发,而微调的模型仍然严格保留在我的机器上。 微调作为从头训练的替代方案 在理想的世界里,我会有几百万美元的预算,准备去创建自己的大型语言模型Fabrice。由于我远非富有(否则我不会写这篇文章),Fabrice的替代方案就是微调,涉及调整模型的“权重”,使得每个生成的标记都受到训练材料的影响。我喜欢将微调想象成通过拖船稍微引导巨大冰山的轨迹;只需一点点,以获得预期效果。 为什么选择微调而不是检索增强生成(RAG)?因为在这个实验中,我不仅仅对检索事实感兴趣(这是RAG擅长的),而是想让大型语言模型在特定风格下表现和写作,无论其对上下文的知识如何。与完全训练相比,微调不需要大量的数据,因此成本更低。此外,仅仅因为:我一直想尝试微调作为一种技术,看看其实用性如何。为了避免在我的计算机上花费数天或数周的时间进行微调(我的显卡相当旧),我依赖Runpod,这是一个提供按需服务的AI开发者在线平台,提供预配置的GPU和工具,以相对较小的价格。在不到每小时6美元的情况下,你可以租用一块强大的显卡,Nvidia B200(192GB内存)。该服务提供方便的API,具有可配置的自动充值和成本控制机制。 进入一个充满神秘流行语的世界 在决定微调模型后,我咨询了Claude关于最理智的实现方法。我们选择了QLoRA(量化低秩适配),它通过不改变大型语言模型的每个权重,而是“冻结”它们并在上方添加适配器—一个小文件,重新塑造模型行为(有点像面具)。QLoRA中的Q意味着结果是量化的,即压缩的,减少内存需求。你仍在跟我吗?很好。如果你觉得这很密集,那确实是这样的。如今在家中使用大型语言模型进行任何操作都是一个妥协的练习:你要么牺牲时间,要么花钱,要么限制你的可用性。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡