Home

Awesome

<div align="center">

ZH | EN

<h1>DISC-LawLLM</h1>

Generic badge license

Demo | 技术报告

</div>

DISC-LawLLM 是一个旨在为用户提供专业、智能、全面的法律服务的法律领域大模型,由复旦大学数据智能与社会计算实验室 (Fudan-DISC) 开发并开源。

我们将在该项目中开源如下资源:

您可以通过访问这个链接来在线体验我们的 DISC-LawLLM。

新闻

[2024/10/15] 🎉 我们开源了DISC-Law-SFT 数据集中的法律问答部分(DISC-Law-SFT-Pair-QA-released.jsonl和DISC-Law-SFT-Triplet-QA-released.jsonl)

[2024/03/15] 🎉🥳✨我们的论文 “LawLLM: Intelligent Legal System with Legal Reasoning and Verifiable Retrieval” 被 DASFAA 2024 (CCF-B) 的 Research Track 录用为长文.✨

[2023/12/20] 🎉 我们在最新的法律评测Benchmark Lawbench 上的评测了DISC-LawLLM,结果仅次于GPT-4,超出了GPT3.5和目前所有的法律大模型。

[2023/11/20] 🎉 我们开源了 DISC-Law-Eval Benchmark 的评测代码,更多详情请在此处查看。

[2023/10/19] 我们开源了 DISC-Law-Eval Benchmark 中的评测数据集(包括标准答案)。

[2023/09/26] DISC-LawLLM v1.0 已正式发布,开源 DISC-LawLLM-13B 模型DISC-Law-SFT 数据集

目录

概述

Image

<p></p>

DISC-LawLLM 是一个具有法律推理和知识检索能力的智能法律系统,它面向不同群体,能在不同应用场景下提供帮助,主要有以下几个特点:

除此之外,我们的研究过程还包括了如下贡献:

模型在Lawbench上的测试结果

DISC-LawLLM在Lawbench上的评测结果仅次于GPT-4,超出了目前所有的法律大模型。以下是DISC-LawLLM和其他模型在Lawbench上Zero-shot、One-shot的平均分数排序:

Zero-shot 性能

lawbench1

One-shot 性能

lawbench2

模型效果演示

法律咨询

consult_demo

协议撰写

document_demo

司法专业工具

tool_demo

考试助手

exam_ref_demo

法条检索

law_ref_demo

带检索的法律咨询

consult_ref_demo

DISC-Law-SFT 数据集

不同场景下的法律智能应用通常需要结合法律文本理解和生成的多种基本能力。为此,我们构建了一个高质量的监督微调数据集 DISC-Law-SFT,包括法律信息提取、判决预测、文档摘要和法律问题解答,确保覆盖不同司法应用场景。DISC-Law-SFT 包括两个子集,即 DISC-Law-SFT-Pair 和 DISC-Law-SFT-Triplet。前者旨在为 LLM 引入法律推理能力,后者则有助于提高模型利用外部知识的能力,具体的构建细节请参照我们的技术报告。数据集的分布如下所示:

<img src="" alt="" width=""/> <table> <tr> <th>数据集</th> <th>对应任务/来源</th> <th>样本量</th> <th>对应情境</th> </tr> <tr> <td rowspan="10">DISC-Law-SFT-Pair</td> <td>司法要素提取</td> <td>32K</td> <td rowspan="7">法律专业人员助手</td> </tr> <tr> <td>司法事件检测</td> <td>27K</td> </tr> <tr> <td>案件分类</td> <td>20K</td> </tr> <tr> <td>判决预测</td> <td>11K</td> </tr> <tr> <td>类案匹配</td> <td>8K</td> </tr> <tr> <td>司法摘要</td> <td>9K</td> </tr> <tr> <td>舆情摘要</td> <td>6K</td> </tr> <tr> <td>法律问答</td> <td>93K</td> <td>法律咨询服务</td> </tr> <tr> <td>司法阅读理解</td> <td>38K</td> <td rowspan="2">法律考试助手</td> </tr> <tr> <td>法律考试</td> <td>12K</td> </tr> <tr> <td rowspan="2">DISC-Law-SFT-Triplet</td> <td>判决预测</td> <td>16K</td> <td>法律专业人员助手</td> </tr> <tr> <td>法律问答</td> <td>23K</td> <td>法律咨询服务</td> </tr> <tr> <td rowspan="2">General</td> <td>Alpaca-GPT4</td> <td>48K</td> <td rowspan="2">通用场景</td> </tr> <tr> <td>Firefly</td> <td>60K</td> </tr> <tr> <td>总计</td> <td colspan="3">403K</td> </tr> </table>

我们总共发布了近30万条训练数据,其中包括 DISC-Law-SFT-Pair 和 DISC-Law-SFT-Triplet。您可以访问这个链接下载数据集。

检索增强模块

我们在 DISC-LawLLM 的基础上增加了一个基于开源检索框架 Langchain-Chatchat 的检索模块。我们的知识库目前包括法条库和法考题库。

在未来,我们会增加更加丰富的知识库。我们还将进一步深入探索检索增强的 DISC-LawLLM,包括但不限于检索器与 LLM 的联合训练机制,各位有兴趣可以与我们一起交流。

推理和部署

开源版本的 DISC-LawLLM 是基于 Baichuan-13B-Base 进行微调训练得到的。您可以直接从 Hugging Face 上下载我们的模型权重,或者根据下面的代码样例自动获取。推理前请安装依赖:

pip install -r requirements.txt

Python

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from transformers.generation.utils import GenerationConfig

model_path = "ShengbinYue/DISC-LawLLM"
model = AutoModelForCausalLM.from_pretrained(
    model_path, torch_dtype=torch.float16, device_map="auto", trust_remote_code=True
)
model.generation_config = GenerationConfig.from_pretrained(model_path)
tokenizer = AutoTokenizer.from_pretrained(
    model_path, use_fast=False, trust_remote_code=True,
)

messages = [
    {"role": "user", "content": "生产销售假冒伪劣商品罪如何判刑?"},
]
response = model.chat(tokenizer, messages)

命令行工具

python cli_demo.py

网页 Demo

依靠 streamlit 工具运行以下命令,会在本地启动一个 web 服务,把控制台给出的地址输入浏览器即可访问:

streamlit run web_demo.py --server.port 8888

此外,目前版本的 DISC-LawLLM 是以 Baichuan-13B 作为基座的,您可以参照 Baichuan-13B 的介绍来进行 int8 或 int4 量化推理部署以及 CPU 部署。

模型微调

开发者可以对 DISC-LawLLM 进行微调使用。在此可以参照与 DISC-LawLLM 兼容的微调工具 LLaMA Efficient Tuning 或是我们的 DISC-MedLLM 医疗大模型。我们以 LLaMA Efficient Tuning 为例给出全量LoRA 两种微调示例。

首先,下载 LLaMA Efficient Tuning 并按其要求安装依赖。注意训练数据按照项目中的要求进行处理。下面我们给出两种微调场景下的脚本样例。

全量微调

我们在 8 * Nvidia A800 80 GB + deepspeed 的环境下进行了全量微调测试。训练启动脚本示例如下:

deepspeed --num_gpus=8 src/train_bash.py \
    --stage sft \
    --model_name_or_path S heng bin \
    --do_train \
    --dataset alpaca_gpt4_zh \
    --template baichuan \
    --finetuning_type full \
    --output_dir path_to_your_sft_checkpoint \
    --overwrite_cache \
    --per_device_train_batch_size 4 \ 
    --per_device_eval_batch_size 4 \ 
    --gradient_accumulation_steps 8 \ 
    --preprocessing_num_workers 8 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 100 \
    --eval_steps 100 \
    --learning_rate 5e-5 \
    --max_grad_norm 0.5 \
    --num_train_epochs 2.0 \
    --dev_ratio 0.01 \
    --evaluation_strategy steps \
    --load_best_model_at_end \
    --plot_loss \
    --fp16 \
    --deepspeed deepspeed.json

deep_speed.json 配置示例如下:

{
    "train_micro_batch_size_per_gpu": "auto",
    "zero_allow_untested_optimizer": true,
    "fp16": {
        "enabled": "auto",
        "loss_scale": 0,
        "initial_scale_power": 16, 
        "loss_scale_window": 1000,
        "hysteresis": 2,
        "min_loss_scale": 1
    },  
    "zero_optimization": {
        "stage": 2,
        "allgather_partitions": true,
        "allgather_bucket_size": 5e8,
        "overlap_comm": false,
        "reduce_scatter": true,
        "reduce_bucket_size": 5e8,
        "contiguous_gradients" : true
    }
}

LoRA 微调

我们在 4 * Nvidia A800 80G 显卡上进行了 LoRA 微调测试。训练启动脚本示例如下:

torchrun --nproc_per_node 4 src/train_bash.py \
    --stage sft \
    --model_name_or_path ShengbinYue/DISC-LawLLM \
    --do_train \
    --dataset alpaca_gpt4_zh \
    --template baichuan \
    --finetuning_type lora \
    --lora_rank 8 \ 
    --lora_target W_pack \
    --output_dir path_to_your_sft_checkpoint \
    --overwrite_cache \
    --per_device_train_batch_size 4 \ 
    --per_device_eval_batch_size 4 \ 
    --gradient_accumulation_steps 8 \ 
    --preprocessing_num_workers 16 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 100 \
    --eval_steps 100 \
    --learning_rate 1e-5 \
    --max_grad_norm 0.5 \
    --num_train_epochs 2.0 \
    --dev_ratio 0.01 \
    --evaluation_strategy steps \
    --load_best_model_at_end \
    --plot_loss \
    --fp16

DISC-Law-Eval-Benchmark

受司法考试构成的启发,我们开发了一个公平的评估框架 —— DISC-Law-Eval Benchmark,从客观和主观两个角度对法律大语言模型的性能进行评估,以考察模型在中国法律领域的性能。您可以点击在这里查看 DISC-Law-Eval Benchmark 的更多详情。我们还开发了名为 ml3m 的 Python 套件,取自 Multilevel Legal LLM。您可以在这里查看其技术文档。

客观评测

为了客观、定量地评估智能法律系统的法律知识和推理能力,客观的评价数据集由一系列中国法律标准化考试和知识竞赛的单项和多项选择题组成,并根据内容复杂性和演绎难度,将问题分为困难、中等和简单三个层次。它可以提供一个更具挑战性和可靠的方法来衡量模型是否可以利用其知识来推理正确的答案。我们通过一系列正则表达式来匹配模型回复中所选择的选项,并将其与标准答案比对,最终通过计算模型回答争取的题目的百分比来衡量模型的客观题答题性能。你可以在这里查看我们的客观评测集。数据集具体构成如下:

<table> <tr> <th>科目</th> <th>难度等级</th> <th>单选题数量</th> <th>多选题数量</th> <th>总数</th> </tr> <tr> <td>NJE:国家统一法律职业资格考试</td> <td rowspan="3">困难</td> <td>537</td> <td>463</td> <td>1000</td> </tr> <tr> <td>PAE:专利代理人考试</td> <td>118</td> <td>276</td> <td>394</td> </tr> <tr> <td>CPA:注册会计师资格考试</td> <td>197</td> <td>120</td> <td>317</td> </tr> <tr> <td>UNGEE:法学专硕全国统考试题</td> <td>中等</td> <td>320</td> <td>87</td> <td>407</td> </tr> <tr> <td>LBK:法律基础知识题库</td> <td rowspan="2">简单</td> <td>275</td> <td>-</td> <td>275</td> </tr> <tr> <td>PFE:事业编、公务员考试法律试题</td> <td>170</td> <td>-</td> <td>170</td> </tr> </table>

主观评测

在主观评测部分,我们采用问答题形式进行评估,模拟主观考试问题的过程。我们从法律咨询、在线论坛、与司法相关的出版物和法律文件中手工构建了一个高质量的测试集。我们用 GPT-3.5 Turbo 作为裁判模型来评估模型的输出,并基于标准答案用准确性、完整性和清晰度这三个标准提供 1-5 的评分。详见 ml3m 文档

主观题数据集从来源于法律咨询、网上发帖、司法相关出版物和法律文书中手动构建的一个高质量的测试集,其中包括 300 个示例,涵盖了法律知识问答、法律咨询和判决预测等场景。你可以在这里查看我们的主观评测集。

评测结果

客观题评测采用 few-shot 方式,结果(%)如下:

模型NJE 单选NJE 多选PAE 单选PAE 多选CPA 单选CPA 多选UNGEE 单选UNGEE 多选PFE 单选LBK 单选平均
ChatGLM31.661.0827.972.9037.0613.3339.6920.6937.6542.9124.66
Baichuan-Chat31.4710.1529.668.7035.5319.1750.0027.5953.1253.4530.78
Chinese-Alpaca-225.7010.1530.5111.5932.9919.1740.9421.8444.1243.2726.73
GPT-3.5-turbo36.5010.5837.2917.0342.1321.6751.2528.7453.5354.1834.10
LexiLaw20.117.5623.7310.1424.8719.1731.5616.0931.7640.3621.50
LawGPT22.916.2631.367.6125.3816.6730.3113.7934.7129.0920.60
Lawyer LLaMa35.755.6232.206.5229.9513.3332.5014.9439.4139.6425.05
ChatLaw27.567.9931.369.4235.5311.6735.6217.2442.3541.0925.20
DISC-LawLLM42.0919.8740.6818.4839.5919.1750.9425.2957.0654.9137.10

主观题评测分数为 1-5,结果如下:

模型准确性完整性清晰性平均
ChatGLM2.642.753.232.87
Baichuan-Chat3.223.343.183.25
Chinese-Alpaca-23.133.233.173.17
LexiLaw3.062.623.002.90
LawGPT3.022.582.962.86
Lawyer LLaMa3.132.833.353.10
ChatLaw3.312.903.353.19
DISC-LawLLM3.463.123.593.39

致谢

本项目基于如下开源项目展开,在此对相关项目和开发人员表示诚挚的感谢:

同样感谢其他限于篇幅未能列举的为本项目提供了重要帮助的工作。

声明

DISC-LawLLM 有着目前大语言模型尚无法克服的问题和缺陷,尽管它能够在许多任务和情境上提供法律服务,但模型应当仅供用户参考使用,并不能替代专业律师和法律专家,我们希望 DISC-LawLLM 的用户以批判性的眼光去评估模型。我们不对因使用 DISC-LawLLM 所引发的任何问题、风险或不良后果承担责任。

引用

如果我们的项目对您的研究和工作有帮助,请如下引用我们的项目:

@misc{yue2023disclawllm,
    title={DISC-LawLLM: Fine-tuning Large Language Models for Intelligent Legal Services}, 
    author={Shengbin Yue and Wei Chen and Siyuan Wang and Bingxuan Li and Chenchen Shen and Shujun Liu and Yuxuan Zhou and Yao Xiao and Song Yun and Xuanjing Huang and Zhongyu Wei},
    year={2023},
    eprint={2309.11325},
    archivePrefix={arXiv},
    primaryClass={cs.CL}
}

协议

DISC-LawLLM 可在 Apache 许可证下使用。请查看 LICENSE 文件获取更多信息。

Star History

<picture> <source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=FudanDISC/DISC-LawLLM&type=Date&theme=dark" /> <source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=FudanDISC/DISC-LawLLM&type=Date" /> <img alt="Star History Chart" src="https://api.star-history.com/svg?repos=FudanDISC/DISC-LawLLM&type=Date" /> </picture>