解读Lawyer LLaMA,延申自己领域大模型微调:数据集构建,模型训练
欢迎大家点赞关注,一起交流
专业领域的大模型应用需要具备三种能力,
为了能够实现这些能力,可以使用LLaMa模型来具体实现这些功能,
为提升模型在中文专业领域的回答表现,防止模型在学习专业领域数据后灾难性遗忘问题,该工作采用两种语料对LLaMA模型进行持续性训练,
首先在一个普通的多语言语料库上训练模型,以提升模型的中文能力,然后使用另一个专业领域的语料库来增强模型。
由于LLaMA主要是在英语和其他语言语料库进行训练,因此它在理解和生成中文语句方面并不完美, 为了解决这个问题,同时收集中文预训练英文语料库进行记忆重放,以避免灾难性遗忘, 具体的,为构建中文通用语料库,可以从WuDaoCorpora、CLUECorpus2020和维基百科的简体中文版本中抽取文章。 对于英文通用语料,从C4语料库中抽取文章,
各种途径获取专业领域的数据,并按照专业和来源分类,然后解析专业数据,生成各种专业数据有没有什么比例,解析的格式是按照段落进行分段学习,问答和文本生成有没有什么区别的对待
https://github.com/chaoswork/sft_datasets/tree/master
为了保证单轮和多轮能力,同时收集单轮和多轮对话能力,同时为了提高生成式的回答准确性,将检索文章添加到提示词中,帮助ChatGPT生成准确的回复,
让chatgpt扮演回答者,回应客户的问题,并在输入提示中,生成的回答应该满足以下要求。 1.正确引用制度条文; 2.正确理解问句含义和制度条文给出有根据的分析; 3.全面回答并分析潜在的可能性; 4.提出适当为问题来挖掘事实以帮助进一步的回答; 5.使用平实的语言; 6.给出初步意见和咨询结论。 输入ChatGPT格式例如:
{
"instruction": "阅读以下文章:[],请回答:[]",
"input": "",
"output": "[答案]"
}
生成格式如下:
生成多轮对话,需要设计两个不同的提示词,让ChatGPT分别扮演两个对话着角色,交替使用两个提示,连同对话历史作为ChatGPT的输入
下面是github具体开放的数据例子:
最后收集大约16000个单论和5000个2或3轮对话。
对于单轮问答,使用文本检索工具选择前3篇相关文章输入到提示词中,
对于多轮问答,假设对话的主题不变,继续使用相同的3篇相关文章
或者不用训练模型,直接使用现成的文本检索框架,请参考我的另一篇博文
文本检索系统 或者使用LangChain地址
微调开源模型LLaMA的步骤,如下图从S1逐步到S12
可以看到,训练是逐步进行的,并做了系列对比实验
表中显示了模型再不同阶段对NLP任务的表现,其中每个阶段的细节,可以参考上图,(1)~(6)代表不同阶段用于训练LLaMAd的预训练语料或监督微调数据集,(1)为多语言通用语料库,(2)为中文法律语料库,(3)为通用SFT数据集,(4)为司法考试和法律咨询,(5)为多轮法律对话,(6)为多轮法律对话中增加了检索的法律文章。勾号意味着相应的语料库/数据集已在前一阶段使用,而花号意味着该语料库/数据集在当前阶段被用于训练。
为提升LLaMA的中文理解和生成能力,在中文通用语料库对LLaMA进行持续的预训练,Chinese-LLaMA采用的是使用汉字扩充词表的方式, 使用英文和中文的混合语料,模型很多复杂的推理能力可能来自于英文的训练,希望模型在持续的预训练中保持这些能力。
加入专业领域文本进行预训练,学习专业领域的能力
收集专业领域真实场景的问答对,并要求ChatGPT为提供详细的解释,在训练过程中,QA对被视为指令,模型要求给出解释。
让模型学习到单轮问答和多轮问答数据的能力,为用户的特定查询生成合适的回复。
引入法律条文检索模块,使得模型能够产生可信的回复 这里初步的实验结果表明,即使模型在持续的训练阶段反复学习这些文章,它也不能在生成时正确的使用他们,它也可能引用不相关的法律条文,或者使用语句相似的词来代替一个术语,而这个词在法律领域中的含义是截然不同的意思
这时候,我们需要一个可靠的模型来召回和用户搜索词相关的三条文档,具体的,训练一个检索模型,数据集构成方面,收集一些用户的咨询问题,并要求专业人士为每个问题标注最多3篇必要文章回复,然后训练一个基于RoBERTa或者双塔模型的文本检索模型,该模型在被保留的测试集上可以达到0.85的召recall@1和0.94的recall@5。
并且,该工作还发现,直接将检索的文章和用户的问题串联起来作为新的输入,该模型会倾向于在其响应中引用所提供的文章,而不区分它们是否与当前情景正在相关
收集不同领域的英文和中文通用任务,包括自然语言推理,情感分析,常识推理,对话问题回答等,测试模型在不同阶段推理表现
首先,比较s0和s1的结果,可以发现LLaMA在C3上获得了+5.3%的准确率;英语常识推理方面,s1在SciQ和PIQA的时的表现也不比s0差。这表明对多语种语料库的预训练可以增强模型对中文的表达能力,而不会牺牲其对英文的表达能力。
其次,比较s2和s3,s7和s9/s8/s6的CMNLI的结果,可以发现s3/s9/s8/s6的模型,经过司法考试的例子和法律咨询的微调,可以更好地处理中文NLI任务,准确率提高到+9.3%。
最后,该模型不能处理英语NLI和情感分析任务。在所有阶段,该模型只能对所有的MRPC实例输出Yes,而当不断地训练LLaMA时,它对SST-2也不能获得明显的改善,猜测这是因为没有足够的英语NLI和情感分析的SFT例子。那么该模型就不能理解这种任务的提示中的指令。
大模型微调思路和数据集构建方式大致是如此,实操中发现项目最难的一点在于怎么构建自己的数据,无监督数据量太大,解析起来很费功夫,有监督的数据怎么完美构建等,因此需要数据梳理之处将数据有效分类很重要, 提高模型识别其最核心的结论在于,通过加入检索模块,可以提升问答的可靠性,并且通过引入垂直领域的预巡数据和微调数据,都可以提升其领域性能。但在具体实践中,还需要考虑到领域数据和通用数据的组成情况,以及与下游任务之间的对齐情况。