惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

P
Proofpoint News Feed
V
V2EX
博客园_首页
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
Recent Announcements
Recent Announcements
博客园 - 司徒正美
Microsoft Security Blog
Microsoft Security Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Latest news
Latest news
Vercel News
Vercel News
The Register - Security
The Register - Security
T
The Exploit Database - CXSecurity.com
S
Schneier on Security
N
Netflix TechBlog - Medium
WordPress大学
WordPress大学
小众软件
小众软件
L
Lohrmann on Cybersecurity
GbyAI
GbyAI
P
Privacy & Cybersecurity Law Blog
T
Tor Project blog
AWS News Blog
AWS News Blog
美团技术团队
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
K
Kaspersky official blog
B
Blog RSS Feed
G
Google Developers Blog
量子位
大猫的无限游戏
大猫的无限游戏
Google DeepMind News
Google DeepMind News
Scott Helme
Scott Helme
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
I
Intezer
雷峰网
雷峰网
Martin Fowler
Martin Fowler
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Blog — PlanetScale
Blog — PlanetScale
IT之家
IT之家
F
Full Disclosure
Apple Machine Learning Research
Apple Machine Learning Research
博客园 - 【当耐特】
The Hacker News
The Hacker News
U
Unit 42
S
SegmentFault 最新的问题
I
InfoQ
aimingoo的专栏
aimingoo的专栏
Y
Y Combinator Blog
宝玉的分享
宝玉的分享
罗磊的独立博客
Spread Privacy
Spread Privacy
C
CERT Recently Published Vulnerability Notes

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
通过微调,快速让大模型输出特定风格 - 少数派
2024-07-08 · via 少数派

前言

虽然网上有许多大模型可以使用,但输出的结果大多千篇一律,因为可以用来训练这些模型的数据集就那么几个。即便有一些独特的大模型,也多是基于其他人的数据集训练得到的,输出的风格和自己的要求之间还有不小的差距。从零开始训练一个大模型,需要海量的数据,相当长的时间,还有很高的算力。为了得到自己想要的风格,我开始探索如何用微调来快速的获取结果。

《瑞克和莫蒂》是我最喜欢的一部科幻情景喜剧,我喜欢这部作品的原因之一,就是每个角色都有鲜明的性格,而这种性格往往体现在角色的台词上,于是我就有了搭建一个聊天机器人,复刻角色的说话特点的想法,而且还想生成一个瑞克的图片。下文将围绕这两个任务进行,来展示如何让大模型输出我想要的风格。

生成特定风格的文本

如果是ChatGPT的付费用户,OpenAI提供了自制ChatGPT的功能,可以根据给定的文本来生成内容。我至今一直在使用免费的ChatGPT,所以需要另辟蹊径。我使用的是Hugging Face提供的GPT2模型,已经加载了预训练好的权重,只需要一些文本进行微调训练,下面以搭建一个聊天机器人来举例说明。

训练前还需要创建自己的数据集。Hugging Face上有前五季的台词,我做了一下处理,把角色的名字加在了每句台词之前,以便让模型识别出瑞克的说话风格。训练脚本的核心部分只有60行,先加载网上预训练好的模型和分词器,然后对用于微调的数据集进行分词处理,之后就是训练。我使用的设备是NUC 11,它搭载了Nvidia GeForce RTX 2060独立GPU,i7-1165G7处理器,RAM是2×DDR4-3200,使用的OS是Ubuntu 22.04,并且安装了12.1版本的CUDA。在NUC 11上,训练300个循环需要大概半小时的时间。

def train(): 
    # Load GPT-2 model and tokenizer
    tokenizer = GPT2TokenizerFast.from_pretrained("gpt2")
    config = GPT2Config.from_pretrained("gpt2")
    model = GPT2LMHeadModel.from_pretrained("gpt2", config=config)

    # Create dataset and data_collator
    results_root = os.path.join(os.getcwd(), "data")
    os.makedirs(results_root, exist_ok=True)

    results_path = "/home/nuc/workspace/build-gpt2/data/train.txt"
    train_dataset = TextDataset(
        tokenizer=tokenizer,
        file_path=results_path,
        block_size=128,
    )

    results_path = "/home/nuc/workspace/build-gpt2/data/val.txt"
    val_dataset = TextDataset(
        tokenizer=tokenizer,
        file_path=results_path,
        block_size=128,
    )

    data_collator = create_data_collator(tokenizer)

    # Configure Trainer instance
    training_args = TrainingArguments(
        output_dir="./output",
        overwrite_output_dir=True,
        num_train_epochs=100,
        per_device_train_batch_size=4,
        save_steps=10_000,
        save_total_limit=2,
        logging_steps=100,
    )

    trainer = Trainer(
        model=model,
        args=training_args,
        data_collator=data_collator,
        train_dataset=train_dataset,
        eval_dataset=val_dataset,
    )

    # Train the model
    train_result = trainer.train() 
    metrics = train_result.metrics
    trainer.save_model("./models")
    trainer.log_metrics("train", metrics)
    trainer.save_metrics("train", metrics)

训练部分的代码如上所示,这是完整的代码库。如果对模型的实现细节感兴趣,还可以参考我在B站发布的一系列从零实现LLM的视频。

GPT2只可以做文本的生成,训练集是动画的台词,模型也就只能输出台词,真正的聊天需要使用DialoGPT之类的模型。我不想把这个项目搞得很复杂,这里使用了一个技巧让输出看起来像是在和瑞克对话。动画中,和瑞克互动最多的角色是莫蒂。所以每一个用户的输入,我都在前面加上"Morty: Hi Rick.",造成一种这是莫蒂对瑞克说出的台词的假象。输出的时候,再把"Rick:"去掉,把瑞克对莫蒂的回答,变成对用户说的话。前端使用Streamlit搭建,添加了用户输入文本的输入框,并且以对话的形式展示瑞克的回答,这里是项目页面,可以体验一下聊天机器人的效果。

我问了模型一些简单的问题,比如"你是谁"之类的,模型有时确实会回答说"Rick",而且输出的文本里有结巴的现象,动画中瑞克经常会喝醉,然后变得语无伦次。最能体现瑞克风格的例子无疑是下图。"Wubba Lubba dub-dub"是瑞克的口头禅之一,当他开心或者想要开玩笑的时候就会这么说。

image
模型说出了瑞克的口头禅"Wubba Lubba dub-dub"

生成特定风格的图片

相比文本,平时遇到的更多的需求是如何生成特定风格的图片。处理图片需要更多的算力,NUC 11显得捉襟见肘,所以我使用的是Replicate网站提供的免费算力,试用期只能微调一个模型,之后需要按时间收费。接下来还是收集训练集,我从网上下载了15张动画里瑞克的截图,然后把图片压缩成一个.zip压缩包。Replicate提供了LoRA模型,在下图中灰色方框内上传压缩包即可,相比普通的Stable Diffusion模型,LoRA训练时间更短,模型也更小。模型的训练任务有三种可选的类型,分别是人脸,物体,和风格,这里选择的是风格,其他参数不需要改动。

在灰色的方框内,上传自己的训练集

几分钟后训练完毕,在页面的右侧会看到类似下图的内容。右键点击Preview下方带有下载图标的方框,然后复制链接。打开一个可以接收微调权重的模型,比如这个,这一步会提示要登录才能跑模型,有GitHub账户的话可以直接登录。

接着在prompt一栏中输入类似a photo of an astronaut riding a horse in the style of <1>的语句,其中<1>表示的是在下面lora_urls一栏里输入的模型,也就是刚才训练好模型后,权重的链接。

在prompt(提示词)一栏中输入提示词, nagative_prompt是不想让模型生成什么的屏蔽词汇,同时还需要把微调后得到的权重输入到lora_urls一栏种
output
模型根据我的提示词,输出的一个穿着绿色衣服的瑞克。我使用的训练集比较小,模型的可玩度不是很高,所以输出也比较简单,这里的结果仅仅是一个示范

也可以训练多个模型,每个模型在一个特定风格上微调,把输出的模型放在一起使用,这时<1>, <2>, <3>...分别表示不同模型的代号, 还要在lora_urls一栏用竖杠符号分割链接。如果觉得效果不够理想,可以调整lora_scales一栏的值,默认是0.5,可以增大或者减小试试。

结语

本文介绍了如何通过大模型的微调快速获得特定风格,并列举了文本生成和图片生成的两个实例作为参考。随着flash attention和英伟达Apex工具的出现,模型的训练越来越快,但对算力的要求还是很高。我尝试过类似Sora的大模型进行视频生成,但需要好几张A100显卡才能跑通,内存要求在24GB以上,我的显卡内存只有8GB,远远达不到要求,所以还没找到合适的方法微调生成视频的模型。另外,本文介绍的方式都是免费的,付费的方式也留待之后再去探索。