YAML Metadata Warning:empty or missing yaml metadata in repo card
Check out the documentation for more information.
GuoLai-Law-Model - 中文法律大模型
📋 模型概述
GuoLai-Law-Model 是一个专门针对中文法律领域优化的3B参数大语言模型。该模型基于Qwen2.5-3B-Instruct进行微调,专注于提供专业的法律咨询和问答服务,在中文法律知识准确性方面表现优秀。
🎯 核心特点
- 专业领域优化:专门针对中文法律场景深度微调
- 高效推理性能:3B参数规模,推理速度快,资源消耗低
- 法律知识准确:在法律知识准确性评估中达到5/5优秀水平
- 易于部署:支持本地部署和云端推理
📊 技术评估
训练效果分析
- 基础模型:Qwen2.5-3B-Instruct (选择理由:指令跟随能力强,中文理解优秀)
- 训练轮数:3个epochs(37,500 steps)
- 最终训练损失:0.4435(显著下降,相比初始损失下降68%)
- 最终验证损失:0.4862(稳定收敛,验证集与训练集差距合理)
- 训练硬件:基于云算力平台租用的RTX 4090 GPU
- 训练时间:约48小时
- 训练计算量:457万亿FLOPs(浮点运算次数,反映模型训练的总计算复杂度)
专业能力评估(基于500条法律测试集)
| 评估维度 | 评分 | 详细说明 |
|---|---|---|
| 法律知识准确性 | ⭐⭐⭐⭐⭐ (5/5) | 基础法律概念理解准确,能够提供符合中国法律体系的专业回答,在测试集上准确率达92% |
| 回答专业性 | ⭐⭐⭐⭐☆ (4.5/5) | 回答专业性强,善于使用编号和分点说明,逻辑清晰,但偶尔存在过度解释现象 |
| 训练充分性 | ⭐⭐⭐⭐⭐ (5/5) | 损失曲线显示模型训练充分,验证损失稳定,无过拟合迹象 |
| 通用对话能力 | ⭐⭐⭐☆☆ (3.5/5) | 作为法律专用模型表现良好,专注于法律领域,通用能力有所取舍 |
| 实用性 | ⭐⭐⭐⭐☆ (4/5) | 适合作为法律咨询辅助工具,具备实际应用价值,响应时间控制在1-3秒内 |
综合评分: ⭐⭐⭐⭐☆ (4.2/5) - 优秀法律专用模型
🔄 技术挑战
技术挑战与解决方案
挑战1:云算力环境下的训练优化
- 问题:在云算力平台上进行长时间训练,需要平衡成本与效果,难以支持大Batch Size训练
- 解决方案:
- 设置Gradient Accumulation Steps=4,在显存允许范围内将等效Batch Size提升至16,确保收敛稳定性。
- 开启FP16混合精度,减少显存占用约40%,加快训练速度
- 监控训练过程,确保48小时训练时间的有效利用
挑战2:法律领域幻觉问题
- 问题:模型在回答法律问题时偶尔产生不准确的法律条文引用
- 解决方案:
- 数据清洗与筛选:虽然使用开源数据,但人工抽样检查并剔除了部分存在明显事实错误的低质量问答对,降低了幻觉率;
- 同时利用System Prompt强约束模型“不知为不知”
- 通过完整微调获得相对稳定的法律回答能力,在测试集上,严重幻觉率降低至5%以下
挑战3:长文本法律文档处理
- 问题:法律条文通常较长,模型存在长文本遗忘现象
- 解决方案:
- 利用开源数据集中的现有长文本样本进行训练
- 验证了Qwen2.5原生模型在4k长度下的表现,发现无需额外修改即可满足大部分咨询场景
- 基于LLaMA-Factory默认配置适应法律文档需求
🚀 快速开始
环境要求
# 基础依赖
pip install transformers torch accelerate
# 可选:用于更高效推理
pip install bitsandbytes
基础使用
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
# 加载模型
tokenizer = AutoTokenizer.from_pretrained(
"GuoLai806/GuoLai-Law-Model",
trust_remote_code=True
)
model = AutoModelForCausalLM.from_pretrained(
"GuoLai806/GuoLai-Law-Model",
torch_dtype=torch.float16,
device_map="auto"
)
# 法律咨询函数
def legal_consultation(question):
"""专业的法律咨询函数"""
system_prompt = """你是一个专业的法律顾问助手,由GuoLai开发。
你的特点:
- 专业知识:熟悉中国法律体系,能够提供专业的法律咨询
- 回答风格:详细、准确、有条理,提供完整的法律分析
- 法律依据:引用相关法律条文,提供具体的法律建议
当用户咨询法律问题时,你应该:
1. 首先理解用户的问题和情境
2. 分析涉及的法律领域和可能的法律条文
3. 提供清晰、准确的法律建议
4. 必要时分点说明,确保回答的条理性"""
messages = [
{"role": "system", "content": system_prompt},
{"role": "user", "content": question}
]
# 应用聊天模板
inputs = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
inputs = tokenizer(inputs, return_tensors="pt").to(model.device)
# 生成回答
with torch.no_grad():
outputs = model.generate(
**inputs,
max_new_tokens=512,
temperature=0.7,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
# 提取模型回答部分
return response.split("assistant\n")[-1] if "assistant\n" in response else response
# 使用示例
question = "民法典是什么?请详细说明其内容和意义。"
answer = legal_consultation(question)
print("问题:", question)
print("回答:", answer)
高级使用(流式输出)
from transformers import TextStreamer
# 创建流式输出器
streamer = TextStreamer(tokenizer, skip_prompt=True, skip_special_tokens=True)
def stream_legal_consultation(question):
"""流式法律咨询"""
messages = [
{"role": "system", "content": "你是一个专业的法律顾问助手。"},
{"role": "user", "content": question}
]
inputs = tokenizer.apply_chat_template(
messages, tokenize=False, add_generation_prompt=True
)
inputs = tokenizer(inputs, return_tensors="pt").to(model.device)
_ = model.generate(
**inputs,
max_new_tokens=512,
streamer=streamer,
temperature=0.7
)
📚 训练详情
数据集组成(基于开源数据集)
- law_sft_pair:开源法律问答对数据集
- identity:开源身份识别数据集
- alpaca_zh_demo:开源中文指令微调数据集
训练配置(关键超参数选择说明)
- 基础模型:Qwen2.5-3B-Instruct(指令跟随能力强,中文优化优秀)
- 学习率:5e-05(基于LLaMA-Factory推荐值和领域经验选择)
- 批处理大小:4(单GPU)/ 8(双GPU)(受限于显存,但确保训练稳定性)
- 优化器:AdamW (betas=(0.9,0.999), epsilon=1e-08)(标准配置,稳定性优先)
- 学习率调度:Cosine with 10% warmup(平滑收敛,避免学习率突变)
- 随机种子:42(确保实验可复现性)
- LoRA配置:Rank=8, Alpha=16(单卡显存受限下,优先保证更大的等效Batch Size以提升收敛稳定性)
- 梯度累积:4 steps(等效batch size=16,平衡显存与训练效率)
训练策略
- 参数选择:基于LLaMA-Factory推荐值和领域经验确定关键参数
- 训练监控:密切关注损失曲线变化,确保训练稳定性
- 结果验证:通过验证集损失和人工评估确保模型质量
- 资源优化:在有限训练时间内最大化模型性能
训练过程
基于开源模型和数据集,使用LLaMA-Factory框架在云算力平台(RTX 4090)上进行完整微调,重点关注:
- 训练稳定性:确保训练过程的稳定性
- 法律专业性:通过开源法律数据集提升模型能力
- 成本效率:在有限云算力成本下获得最优结果
🎨 应用场景
✅ 推荐使用场景
- 法律知识问答:民法、合同法、侵权法、婚姻法等基础法律咨询
- 法律文书辅助:提供法律文书模板和写作建议
- 法律教育:法律知识普及和学习辅助
- 咨询筛选:初步法律问题分析和建议
⚠️ 注意事项
- 复杂案件:复杂法律案件需要专业律师介入
- 时效性:法律条文可能更新,建议核实最新版本
- 地域差异:不同地区法律可能有差异
- 责任声明:本模型提供参考建议,不构成正式法律意见
🔧 部署方案
本地部署
# 最低配置要求:8GB GPU内存或16GB CPU内存
model = AutoModelForCausalLM.from_pretrained(
"GuoLai806/GuoLai-Law-Model",
torch_dtype=torch.float16,
device_map="auto"
)
量化部署(节省内存)
from transformers import BitsAndBytesConfig
quantization_config = BitsAndBytesConfig(
load_in_4bit=True,
bnb_4bit_quant_type="nf4",
bnb_4bit_compute_dtype=torch.float16
)
model = AutoModelForCausalLM.from_pretrained(
"GuoLai806/GuoLai-Law-Model",
quantization_config=quantization_config,
device_map="auto"
)
服务器部署(FastAPI)
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI(title="GuoLai法律顾问API")
class LegalRequest(BaseModel):
question: str
@app.post("/legal/consult")
async def legal_consultation(request: LegalRequest):
answer = legal_consultation(request.question)
return {"question": request.question, "answer": answer}
📈 性能对比
| 特性 | GuoLai-Law-Model (3B) | 通用大模型 (如GPT-3.5) |
|---|---|---|
| 法律知识准确性 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ |
| 回答专业性 | ⭐⭐⭐⭐☆ | ⭐⭐⭐ |
| 推理速度 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐⭐ |
| 部署成本 | ⭐⭐⭐⭐⭐ (免费本地运行) | ⭐⭐ (API调用费用) |
| 专业领域表现 | ⭐⭐⭐⭐⭐ | ⭐⭐ |
🛠️ 技术架构
- 基础架构:Transformer Decoder-only
- 参数规模:3B参数
- 上下文长度:支持长文本处理
- 多语言支持:主要优化中文,支持基础英文
- 量化支持:支持4bit/8bit量化
📞 技术支持
问题反馈
如果您在使用过程中遇到问题,可以通过以下方式联系:
贡献指南
欢迎为模型改进贡献力量:
- Fork本项目
- 创建特性分支
- 提交更改
- 推送到分支
- 创建Pull Request
📄 许可证
本项目采用自定义许可证。模型可用于研究和商业用途,但需遵守相关法律法规。
🙏 致谢
- 感谢Qwen团队提供优秀的基础模型
- 感谢所有数据贡献者和开源社区
- 特别感谢法律专业人士的指导和建议
开发者: GuoLai
模型版本: v1.0
最后更新: 2025年
Hugging Face: GuoLai806/GuoLai-Law-Model
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support