bilibot
bilibot copied to clipboard
我把项目实现了一遍,我发表一下让我很不爽的地方
我只能说up主是一个很会讲故事的人。
起初我对UP主在B站视频里讲的内容比较感兴趣,因为公司有资源,于是在Mac和Linux两个平台上将视频内容都实现了一遍,包括了up github中的默认训练参数,以及其他的一些自己调参。
这里先说几个结论,再说让我很不爽的点。
结论:
- 达到视频中最终效果的主要因素:每个问题前,加上了提示词:”你是一位B站老用户,请使用暴躁的语言风格,对以下问题给出简短、机智的回答:“。不用训练,直接用开源qwen模型,问题前面加上面说的提示词即可复现。
- 本项目提供的2万训练语料质量较差,并不是模型效果的主要贡献者,或者说对模型效果没有任何贡献。
- 要么不让模型学习到训练语料内容(或极小学习率假装学习下),模型但凡学习到训练语料内容,效果就会变差。
(提示词在 text/chat_template.txt 中可以发现)
不爽的点
- 视频模型效果对比没有维持单一变量对比,例如:up视频中展示开源qwen模型效果不行,而最终训练后的模型效果很好。这里有两个变量:a. 模型是否做finetune;b. 问题前是否加了提示词。 无法直接说明效果来源于哪个变量。但视频95%的内容都在说finetune怎么做的,让观众觉得finetune是模型效果的主要来源(至少一半归功于finetune),实际上,用这2万数据做finetune最最终模型效果作用基本为0,很大程度上误导了观众。
- 视频08:55 展示了只做finetune后的效果,但我猜测视频中间展示的是带有提示词的,例如 ”你是B站B友“等。
结束语 up主是一个很会讲故事和做视频的人,但视频中存在太多不严谨和误导性较强的地方。 自己花了几天时间,从头到尾实现,复现,调参,对比,最后发现,模型效果就仅来自于那句 ”你是一位B站老用户,请使用暴躁的语言风格,对以下问题给出简短、机智的回答:“ 提示词,很是失望。视频95%的内容都在讲如何finetune,up太会讲故事,知道用一个提示词能搞定的问题,就没人看了,不禁抱怨一句吧:在互联网行业,会讲故事的人往往是吃香的。唉自己兴高采烈的follow视频和项目过来,有种被欺骗的感觉。
有人可能会问,为什么不加大学习率或迭代轮数等手段,让模型强行学习到2万训练语料的内容? 这一点我也做了很多尝试,结论就是:训练语料质量很差,问答很多是没有逻辑的,模型一旦过多学习,整个模型逻辑会崩塌,回答会胡言乱语。 所以只能以很小学习率,基本不能让模型学习到训练语料中的内容,才能在加上提示词的基础上,做出视频效果的回答。 这样一来,95%视频内容再讲的训练,是没什么用的,只是为了讲故事用。
你们自己可以试一试,直接用qwen开源14B或32B模型,然后每个问题前加上上面结论提到的提示词,结果就是最终视频效果。
再补充下,2万条语料有个很大问题,是 训练问题和回答 很多都是同一句话或同一个意思,当模型充分学习后,基本上 你问模型什么,模型就把问题本身原样给你输出回来了。
直接用qwen开源14B或32B模型,然后每个问题前加上上面结论提到的提示词,结果就是最终视频效果。
还真是,纯纯被误导了。
也不能这么说,至少视频中的训练方法和脚本是有用的,并且通过mac进行微调的可行性得到了验证
使用ollama测试了下qwen72b模型,加上上面提示后确实直接出来视频中的效果;我在想是不是这些语料本身阿里云训练模型的时候就已经训练进去了,up主拿来训练其实是重叠了?
使用ollama测试了下qwen72b模型,加上上面提示后确实直接出来视频中的效果;我在想是不是这些语料本身阿里云训练模型的时候就已经训练进去了,up主拿来训练其实是重叠了?
不是重叠了,直接这么说吧,是压根就不能用该项目提供的语料训。说个不好听的,这里的训练只是装个样子,只能以极小的学习率训练,让模型基本学不到东西。一旦模型正常学习到语料中的东西(比如用正常的学习率),模型逻辑就崩塌了(胡言乱语回答),因为训练语料你自己review下,有三大问题:
- 问题和回答绝大部分没有逻辑对应关系
- 语气跟项目最终目标也不符
- 大量存在问题和回答相同的情况,例如问题问了一个东西,回答也是重复把问题说了一遍(也是疑问句)
所以模型只要学习到语料中的东西,只会有两个结果:1. 回答逻辑紊乱,胡言乱语;2. 问什么,回答直接把问题重复说了一遍(像复制粘贴一样)
我说的比较直白,本质就是这样的,做项目还是要有科学的态度,和单一变量控制的严谨,不能为了讲故事而误导大家。
用gemini试了一下,还真是
我也用gpt-4的fine-tuning试过,跟楼主的感觉一样,好像用了几万个语料训练没有任何效果,还不如prompt给人设。那fine-tuning真正的实现方式和语料jsonl应该怎么弄?
https://github.com/linyiLYi/bilibot/issues/28
研究了一下,应该RAG是更好的解决办法: https://github.com/infiniflow/ragflow
运行了ragflow,效果也是不太行的样子
我看视频的时候就怀疑数据数据是否经过自己的筛选,不然开放领域网友回复无法保证上下文相关性
我只能说up主是一个很会讲故事的人。
起初我对UP主在B站视频里讲的内容比较感兴趣,因为公司有资源,于是在Mac和Linux两个平台上将视频内容都实现了一遍,包括了up github中的默认训练参数,以及其他的一些自己调参。
这里先说几个结论,再说让我很不爽的点。
结论:
- 达到视频中最终效果的主要因素:每个问题前,加上了提示词:”你是一位B站老用户,请使用暴躁的语言风格,对以下问题给出简短、机智的回答:“。不用训练,直接用开源qwen模型,问题前面加上面说的提示词即可复现。
- 本项目提供的2万训练语料质量较差,并不是模型效果的主要贡献者,或者说对模型效果没有任何贡献。
- 要么不让模型学习到训练语料内容(或极小学习率假装学习下),模型但凡学习到训练语料内容,效果就会变差。
(提示词在 text/chat_template.txt 中可以发现)
不爽的点
- 视频模型效果对比没有维持单一变量对比,例如:up视频中展示开源qwen模型效果不行,而最终训练后的模型效果很好。这里有两个变量:a. 模型是否做finetune;b. 问题前是否加了提示词。 无法直接说明效果来源于哪个变量。但视频95%的内容都在说finetune怎么做的,让观众觉得finetune是模型效果的主要来源(至少一半归功于finetune),实际上,用这2万数据做finetune最最终模型效果作用基本为0,很大程度上误导了观众。
- 视频08:55 展示了只做finetune后的效果,但我猜测视频中间展示的是带有提示词的,例如 ”你是B站B友“等。
结束语 up主是一个很会讲故事和做视频的人,但视频中存在太多不严谨和误导性较强的地方。 自己花了几天时间,从头到尾实现,复现,调参,对比,最后发现,模型效果就仅来自于那句 ”你是一位B站老用户,请使用暴躁的语言风格,对以下问题给出简短、机智的回答:“ 提示词,很是失望。视频95%的内容都在讲如何finetune,up太会讲故事,知道用一个提示词能搞定的问题,就没人看了,不禁抱怨一句吧:在互联网行业,会讲故事的人往往是吃香的。唉自己兴高采烈的follow视频和项目过来,有种被欺骗的感觉。
有人可能会问,为什么不加大学习率或迭代轮数等手段,让模型强行学习到2万训练语料的内容? 这一点我也做了很多尝试,结论就是:训练语料质量很差,问答很多是没有逻辑的,模型一旦过多学习,整个模型逻辑会崩塌,回答会胡言乱语。 所以只能以很小学习率,基本不能让模型学习到训练语料中的内容,才能在加上提示词的基础上,做出视频效果的回答。 这样一来,95%视频内容再讲的训练,是没什么用的,只是为了讲故事用。
你们自己可以试一试,直接用qwen开源14B或32B模型,然后每个问题前加上上面结论提到的提示词,结果就是最终视频效果。
我最关注的是视频里的那句话,就是说单纯RAG只能生成形式相似但是不能掌握知识库语料的内容,所以我想问这个逻辑依然成立吗?这个工程里面训lora的套路是可行的吗?这个数据上学不到信息,在高质量数据上能学到信息吗?
现在基座大模型能力越来越强,单纯的模仿语气,确实不用微调了,而如果训练数据质量不高,会让模型变得非常傻。
很中肯的评价。
我关注up主那时没多少粉丝量,就是因为会讲故事,说话风趣。搞AI这种偏硬核研究后,就不怎么关注了。
我只能说up主是一个很会讲故事的人。 起初我对UP主在B站视频里讲的内容比较感兴趣,因为公司有资源,于是在Mac和Linux两个平台上将视频内容都实现了一遍,包括了up github中的默认训练参数,以及其他的一些自己调参。 这里先说几个结论,再说让我很不爽的点。 结论:
- 达到视频中最终效果的主要因素:每个问题前,加上了提示词:”你是一位B站老用户,请使用暴躁的语言风格,对以下问题给出简短、机智的回答:“。不用训练,直接用开源qwen模型,问题前面加上面说的提示词即可复现。
- 本项目提供的2万训练语料质量较差,并不是模型效果的主要贡献者,或者说对模型效果没有任何贡献。
- 要么不让模型学习到训练语料内容(或极小学习率假装学习下),模型但凡学习到训练语料内容,效果就会变差。
(提示词在 text/chat_template.txt 中可以发现) 不爽的点
- 视频模型效果对比没有维持单一变量对比,例如:up视频中展示开源qwen模型效果不行,而最终训练后的模型效果很好。这里有两个变量:a. 模型是否做finetune;b. 问题前是否加了提示词。 无法直接说明效果来源于哪个变量。但视频95%的内容都在说finetune怎么做的,让观众觉得finetune是模型效果的主要来源(至少一半归功于finetune),实际上,用这2万数据做finetune最最终模型效果作用基本为0,很大程度上误导了观众。
- 视频08:55 展示了只做finetune后的效果,但我猜测视频中间展示的是带有提示词的,例如 ”你是B站B友“等。
结束语 up主是一个很会讲故事和做视频的人,但视频中存在太多不严谨和误导性较强的地方。 自己花了几天时间,从头到尾实现,复现,调参,对比,最后发现,模型效果就仅来自于那句 ”你是一位B站老用户,请使用暴躁的语言风格,对以下问题给出简短、机智的回答:“ 提示词,很是失望。视频95%的内容都在讲如何finetune,up太会讲故事,知道用一个提示词能搞定的问题,就没人看了,不禁抱怨一句吧:在互联网行业,会讲故事的人往往是吃香的。唉自己兴高采烈的follow视频和项目过来,有种被欺骗的感觉。 有人可能会问,为什么不加大学习率或迭代轮数等手段,让模型强行学习到2万训练语料的内容? 这一点我也做了很多尝试,结论就是:训练语料质量很差,问答很多是没有逻辑的,模型一旦过多学习,整个模型逻辑会崩塌,回答会胡言乱语。 所以只能以很小学习率,基本不能让模型学习到训练语料中的内容,才能在加上提示词的基础上,做出视频效果的回答。 这样一来,95%视频内容再讲的训练,是没什么用的,只是为了讲故事用。 你们自己可以试一试,直接用qwen开源14B或32B模型,然后每个问题前加上上面结论提到的提示词,结果就是最终视频效果。
我最关注的是视频里的那句话,就是说单纯RAG只能生成形式相似但是不能掌握知识库语料的内容,所以我想问这个逻辑依然成立吗?这个工程里面训lora的套路是可行的吗?这个数据上学不到信息,在高质量数据上能学到信息吗?
lora 只是用来调整逻辑和训练数据集的,不是用来把LLM调整成某一个风格的方法 RAG其实也不是对风格的调整,只是向量数据库检索技术而已
真正的风格调整是prompt提示词调整,最近摸索了很多总结出来的。
我们孵化的一个web3指环项目收集了健康数据做健康建议,最后也只是prompt达到最佳效果
"你是b站老用户" “你是一个医生” “你是变态”
这样的prompt其实是起到关键作用的调整,目前看来claude达到最高水准和所谓的reflection的prompt都是对prompt进行改进得到的结果,当然parameters也要很好才行