自从多年前看过黑镜,对其第二季克隆男友那集感到非常震惊,简单来说就是将男友的社交网络信息以及聊天记录上传后,可以生成一个说话方式和男友很像的聊天机器人。
最近LLM(大语言模型)非常火热,涌现了很多开源的 LLM,诸如国外的LLaMA、国内的ChatGLM,这些开源的模型可以进行低成本的 finetune,于是冒出个想法,就是使用聊天对话数据,能不能造出一个拥有和被模仿者相似语言习惯以及记忆的 LLM。
搜集资料
目前国内暂未收集到相关的资料,国外有找到一个类似的让llama像homer simpson一样说话 。
数据准备
前段时间看到有人通过sovits模仿了甄嬛的声音,因此想着就用甄嬛的对话进行微调。接着就收集到了集甄嬛传对话脚本数据,同时编写脚本对数据集进行了简单处理,最终数据处理后的格式为:
...
{"id": 9, "paragraph": [{"q": "你是谁?n", "a": ["家父是大理寺少卿甄远道。n"]}]}
...
微调LLM
我目前采用的是这个repo ssbuild/chatglm_finetuning 提供的微调方案,因为机器资源有限,我采用在int4模型的基础上进行微调,同时为了进一步减少GPU资源消耗,我选择只训练20层参数。训练的整个流程和结果以及数据集上传到 GitHub 欢迎Star。
效果
在数据集中的数据已经得到记忆
你是谁: 家父是大理寺少卿甄远道。
大理寺少卿,也不是什么高官: 凡事不论官位高低,只论个理字。
小主怎么了?脸色怎么这么差: 我心里慌得厉害。浣碧,你去找温太医来瞧瞧——记得,温大人请起,眉姐姐的身子要往场场请安,本宫的宫外用香也无碍,你且去送过东西没有?
对在数据集中的问题进行轻微改动也可正常回答
原:弘曕到底是不是朕的儿子?
弘曕是不是朕的孩子?: 当然,天下万民都是皇上您的子民
原:年羹尧不是骁勇善战吗,怎么不让他去平定准葛尔的边患?
为什么不让骁勇善战年羹尧去平?: 能用一个女子就能平息的事情,何必动用千军万马?何况年羹尧军功高权重,若是输,咱们要付出的不止一个公主,若是赢,年羹尧军功更盛,功高震主,所以和亲是皇上的伤言,若真一败涂地,年羹尧会难受的。
不在数据集中的数据会胡编乱造,但好像又有一点道理
你有没有私通: 臣妾失德,不宜侍奉皇上。
你就要行册封礼,好好歇着: 多谢皇后娘娘。
华妃娘娘来找你来: 眉姐姐在吗?
像第一个回答,属实非常有趣。
结论
- prompt需要修改一下,否则会有很多原有的知识遗忘;
- 采用lora的方式似乎更好,但是成本相对而言就高了很多;
- 甄嬛的对话数据有很多文白交叉,拐弯抹角不够直接,效果不是太好;
- 数据预处理简单粗暴,数据只有3k多条,有些少。