Facico / Chinese-Vicuna

Chinese-Vicuna: A Chinese Instruction-following LLaMA-based Model —— 一个中文低资源的llama+lora方案,结构参考alpaca
https://github.com/Facico/Chinese-Vicuna
Apache License 2.0
4.14k stars 425 forks source link

开炉炼丹6.5万首诗词问答的疑问,怎样确定语料数量与训练数量的关系? #163

Closed grantchenhuarong closed 1 year ago

grantchenhuarong commented 1 year ago

大佬好,最近在构造6.5万首诗词问答,单指令语料,使用13B底模,在Chinese-Vicuna-lora-13b-belle-and-guanaco/checkpoint-3000 基础上,用other_continue方式训练。目前已经完成20个epochs左右,效果是通用能力已丢失,目前还未记忆到相关回答。如下所示:

企业微信截图_1684371563507 企业微信截图_168437157442 20个epochs,还是没记住,确实是在自我创作,虽然有点那“味”,呵呵。

企业微信截图_16843716246973 企业微信截图_16843718928161 这还挺像回事的。凤箫吹玉管,龙舆拥金阙。瑶姬彩衣出,珠帘满天明。

企业微信截图_16843721108889 企业微信截图_16843722468433

初步结论,6.5万首诗词,训练20个epochs之后,基本丢失原有通用能力,而且还没记忆住额外的语料。那就很奇怪啊,20万的医疗语料,训练3个epochs之后,回复基本就像模像样了。。。问题来了。。。

更多语料数量,只要更少的epochs训练就能记住?有点反常识啊。。。看Facico大佬项目最新的法律问答2.3万语料,也只训练了6个epochs就有相应效果了。还有我之前的347首诗词,也需要训练40~60epochs后才有相对好的效果,再多也回复胡话或者英文了。。。

怎么样子来解释呢?

grantchenhuarong commented 1 year ago

难道语料之间的逻辑关系强弱,也是非常有关系的?

可能古诗词太精炼,高度浓缩,其中的token间的相关性较弱,而且与通用语料间token关联关系比较不同,导致神经网络在归类特征的时候,需要做更多更多的调整么?

这个是个人猜测,毕竟网络模型也只是在做文字接龙,在比较概率,相关性越强的语料,网络猜对的机率就更加高;相关性越弱的token,猜测试起来就没那么容易了。需要重复训练的次数也就多了10倍了呢。

而且,通用语料训练出来的LORA网络模型被调整的越多,那自然也就会伤害到原有的网络能力了。类比如人类,如果只学习文言文,那就会挤占掉原有的白话文知识,直接先来个“之乎者也”了。一段时间只使用英文,估计也比较难直接回到母语思考的吧。

grantchenhuarong commented 1 year ago

再训两个epoch,真的感觉会吟诗了,只是记忆还不对。。。 image

grantchenhuarong commented 1 year ago

英文能力还在 image image

但是用回它推荐的instructions就坏事了 image

有些事实也不对了。 image image image

死活不肯比较乔丹和姚明。。。 image

好吧 image

grantchenhuarong commented 1 year ago

其实,换个玩法,不背诵诗词,改成创作诗词,也还是挺好玩的。反正比我写诗词的能力强大。。。 image image image

请以XX的风格,以题目田园风光创作诗词,长度超过100字。 image image image image

grantchenhuarong commented 1 year ago

本来想训练背诵的,已经跑了20多个epoch,结果还是背诵不出来。结果换个玩法,让模型创作诗词,还蛮好玩的。毕竟生成式大模型,长项在于创造,而不是记忆。 请以诗人李清照的风格,以题目声声慢创作诗词,长度超过100字。 image

请以唐朝诗人白居易的风格,以题目云山上上签创作诗词,长度超过100字。 image image image

grantchenhuarong commented 1 year ago

80多个epochs之后,通用模型就变成专用模型了。。。 image image

只是还没有记住对应内容,也有可能是语料出现重复诗人、题目的不同内容,让网络迷惑了么?不是一对一的语料,有可能是一对N的。。。

Facico commented 1 year ago

哈哈哈,你生成的例子还挺有意思。我觉得古诗的生成在生成难度上是大于医疗问答的(普通话和文言文的区别),而且这个东西不好评测(作为诗词文盲的我基本只能看着乐)。 关于背这件事,第一个是你训练的够久,它肯定会背下来但会失去泛化(创造)能力;而且对于大量的数据要让他完全背下来其实也挺难的,对于lora来说难度较大,lora做的更多的是挖掘模型原本的能力,塞太多的复杂的知识可能记不下。 其实你想完全背下来感觉可以构造的知识库再结合模型,比如那些结合langchain、llama-index的项目,比如这个https://github.com/csunny/DB-GPT。 我们一直想搞,不过最近事情太多一直没把langchain弄进来。不过这些支持llama的仓库也可以直接套一套。