文章目录
- 动机
- 数据组成
- 模型框架
- 模型评估
北大团队发布首个的中文法律大模型落地产品ChatLaw,为大众提供普惠法律服务。模型支持文件、语音输出,同时支持法律文书写作、法律建议、法律援助推荐。
github地址:https://github.com/PKU-YuanGroup/ChatLaw
Chatlaw官网(体验地址):https://www.chatlaw.cloud/
论文地址:ChatLaw: Open-Source Legal Large Language Model with Integrated External Knowledge Bases
动机
ChatGPT带来的LLM浪潮席卷了各个垂直领域,如医疗,金融等领域,各种垂直领域的大模型层出不穷,如BloombergGPT、本草、华佗、ChatMed等,在法律领域也有LawGPT、lawyer-llama两款初步的开源模型。而这些大模型的做法是使用特定领域的数据来对大模型进行微调或二次预训练,但由于在一些具体业务中对准确性的要求,这种做法并不能真正获得令人满意,较为准确结果,也不足以支撑场景落地的需求。在涉及法律问题时,即使是像GPT4这样最先进的模型,也会出现幻觉和胡说八道的现象。因此,LLM+知识库相结合的技术是迫切被需要的,因为有些问题是适合让类似拥有智能的大模型去回答的,但有些问题是需要传统的硬性检索来做的,让“模型做模型的事,检索做检索的事”,共同组成一个大模型产品。
数据组成
数据主要由论坛、新闻、法条、司法解释、法律咨询、法考题、判决文书组成,随后经过清洗、数据增强等来构造对话数据。详细的参考数据在ChatLaw训练数据demo,以下是数据样例:
question | answer | Subject |
---|---|---|
如果一个人故意驾车向人群冲撞,但没有造成重大损失,会被怎样处罚? | 依据刑法条文第一百一十四条,如果一个人故意以危险方法危害公共安全,但尚未造成严重后果,将被处三年以上十年以下有期徒刑。因此,如果这个人故意驾车向人群冲撞,但没有造成重大损失,将被处以三年以上十年以下有期徒刑。 | 法律咨询 |
如果一个邮政工作人员私自开拆了一个邮件,但只是为了查看其中的收件人地址,而并未泄露邮件内容,是否构成什么罪行? | 构成私自开拆、隐匿、毁弃邮件、电报罪。本罪客观方面有两个特点:一是必须有私自开拆、隐匿、毁弃邮件、电报的行为。所谓私自开拆,是指非法擅自开拆他人邮件、电报,使封缄失效的行为,合法行为不在此限;二是必须有利用职务之便的行为,才能构成本罪。即使只是查看收件人地址也违反了邮政工作人员的职责,属于利用职务之便的行为,因此构成本罪。 | 法律概念 |
如果某个工人每天工作10小时,那么每周工作时间超过了规定吗? | 根据《劳动法》第三十六条,每日工作时间不得超过8小时,因此每周工 作时间将超过44小时,超过了规定。 | 法律咨询 |
甲公司注册资金为120万元,主营建材,乙厂为生产瓷砖的合伙企业。甲公司为稳定货源,决定投资30万元入伙乙厂。对此项投资的效力,下列表述哪一项是正确的? A)须经甲公司股东会全体通过方为有效 B)须经甲公司董事会全体通过方为有效 C)须经乙厂全体合伙人同意方为有效 D)无效 | 按照最新《公司法》的规定,本题无答案。《公司法》第15条规定,公司可以向其他企业投资;但是,除法律另有规定外,不得成为对所投资企业的债务承担连带责任的出资人… | 法律选择题 |
数据集构建过程:
- 从大量原始的法律知识构建数据集。
主要来自法律新闻、社交媒体内容和法律论坛的讨论。这些数据提供了各式各样的现实世界的法律文本,提供了各种法律话题和讨论的洞见。 - 基于法律法规和司法解释构建数据集。
为了确保法律知识的全面覆盖,将相关法律法规和司法解释纳入数据集中,确保数据集里反映了法律框架并提供准确的消息。 - 爬取真实的法律咨询数据。
- 从司法考试多项选择题构建数据集。
作者创建了一套专门为司法考试设计的多项选择题,这些问题涵盖了各种法律主题以及检测用户对法律法规的理解。
上述数据经过严格的清洗过程,例如过滤短文本以及不连贯的回复,确保数据集中只含有高质量文本。除此之外,还使用了ChatGPT进行辅助构造,能基于现有的数据生成一些补充说明。
模型框架
- ChatLaw:LLaMA模型 + LoRA微调。
- 关键词LLM:微调一个关键词LLM模型,使模型能根据用户查询获取合适的若干关键词。
- Law LLM:使用了93w个国家法律判例训练数据训练模型,利用embedding信息,根据算法1(下图)获取与用户查询匹配相应的法律条文和司法解释。
为什么要先找关键词,再进行匹配?
根据用户询问,从垂直领域的文档中抽取相关信息/文本是非常重要的,最初尝试了传统的Mysql/Elasticsearch做索引,效果不行;又尝试了Bert-Embedding+Faiss做向量cosine相似度,取top-k个相关法规,但这一套往往抽不准,尤其用户输入是模糊的时候。
因此提出先找关键字,再用关键字的向量Vector,微调LLM来抽取关键词。
关键词LLM
具体流程如下:
输入:法规数据库,用户问题
-
使用关键字LLM从用户询问中抽取关键字,把每个关键字通过Bert得到K个vector;将用户的输入送到Bert模型,得到整个句子的Query向量
-
对每个关键字得到关键字+用户Query的组合vector
v i = k i ∥ k i ∥ + α s ∥ s ∥ v_i=\frac{k_i}{\left\|k_i\right\|}+\alpha \frac{s}{\|s\|} vi=∥ki∥ki+α∥s∥s -
除以 ∣ ∣ k i ∣ ∣ ||k_i|| ∣∣ki∣∣应该代表对向量进行归一化, α \alpha α 对应关键词的超参权重;
-
对每个法规,计算法规 l j l_j lj 与刚刚得到的 v i v_i vi 的相似性 s j s_j sj;
-
最后选择top-k个相似法规。
Law LLM
用937k个国家法律案例来训练Bert,使得能够通过用户query,找到相应到法规与判决解释,结果如下。
流程总结:首先利用关键词LLM从用户查询中输出若干法律相关的关键词。基于 LawLLM 和 算法1,找到与这些关键词语义向量topk个最相近的法律条文作为领域知识。将用户查询和领域知识投入到微调过的法律语言大模型中,获取最终输出。
ChatLaw法律大模型目前开源的仅供学术参考的版本底座为姜子牙-13B、Anima-33B,使用大量法律新闻、法律论坛、法条、司法解释、法律咨询、法考题、判决文书等原始文本来构造对话数据。
LLM模型
ChatLaw-13B,此版本为学术demo版,基于姜子牙Ziya-LLaMA-13B-v1训练而来。
- 优点:得益于姜子牙的优秀中文能力以及对数据清洗、数据增强过程的严格要求,在逻辑简单的法律任务上表现优异。
- 缺点:对逻辑复杂的法律问答效果不佳,需要用更大参数的模型来解决。
ChatLaw-33B,此版本为学术demo版,增加了训练数据,且基于Anima-33B训练而来。
- 优点:逻辑推理能力大幅提升。
- 缺点:因为Anima的中文语料过少,导致问答时常会出现英文数据。
匹配模型
ChatLaw-Text2Vec,使用93w条判决案例做成的数据集基于BERT训练了一个相似度匹配模型,可将用户提问信息和对应的法条相匹配,例如:
“请问如果借款没还怎么办。”
“合同法(1999-03-15): 第二百零六条 借款人应当按照约定的期限返还借款。对借款期限没有约定或者约定不明确,依照本法第六十一条的规定仍不能确定的,借款人可以随时返还;贷款人可以催告借款人在合理期限内返还。”
两段文本的相似度计算为0.9960
基于可商用的模型训练而成的版本会作为后续产品内部接入的版本,对外不开源,可以在这里进行开源版本模型的试用。
模型评估
收集了十年来的全国司法考试题目,并编制了一个测试数据集,包含2000个问题及其标准答案,以衡量模型处理法律多项选择题的能力。 然而,发现模型的准确率普遍较低。在这种情况下,仅仅比较准确率似乎没有什么意义。
因此,建立了一个基于Elo积分的模型竞赛评估机制,受到电子竞技比赛匹配机制和Chatbot Arena设计的启发,以更有效地评估模型处理法律多项选择题的能力。
结论:
(1)引入与法律相关的问答和法规数据可以在一定程度上提高模型在多项选择题上的性能;
(2)添加特定任务类型的训练可以显著提高模型在该类型任务上的性能。例如,ChatLaw模型表现优于GPT-4的原因是我们使用了大量的多项选择题作为训练数据;
(3)法律多项选择题需要复杂的逻辑推理,因此具有更多参数的模型通常表现更好。