最近在做多伦多大学Rotman Commerce主办的boardroom的比赛,是一个business case商业案例类竞赛。今年的题目大致意思是一家律师事务所希望引入AI来提升工作效率。一拿到题目我就知道这把稳了。然后仔细分析,第一晚上就写出了项目初稿洋洋洒洒2400字。大体分析一下,律师行要使用AI,唯一的选择是NLP。想想其他的,cv的律师也不需要,ocr早就烂大街了,试问现在还有谁不会用扫描软件,至于处理数字的更是比较遥远。既然主题定下来了,就要思考NLP可以在哪些方面应用。我们把整个项目分成了internal内部和external外部两个部分。内部主要是针对生产流程的优化,比如文档整理,律师助手等等;外部主要是针对客户的,最简单就是做一个可以给客户咨询的LLM。详细的方案是:
-
文档管理系统(内部)
-
- 自动分类和标记:利用自然语言处理(NLP)和机器学习算法的AI文档管理系统,能够自动识别、分类和标记各种法律文件,如合同、案件卷宗和笔录。系统可以理解文档内容,提取关键信息,并将文档组织到预定义的类别中。这不仅减少了手动整理文件的时间,还提高了文件管理的准确性。
- 快速检索:通过关键词、标签、日期等方式,律师可以快速检索所需文件,提高工作效率。这种高效的检索功能使得律师能够在需要时迅速找到相关文件,支持他们的工作。
- 文件模板生成:AI可以生成合同、诉状、调解协议等标准化法律文件,自动填写当事人名称、案号等相关信息,减少律师撰写文件的工作量。这不仅提升了文件生成的效率,还保证了文件内容的一致性和准确性。
-
智能合约与客户服务(外部)
-
- 自动化客户咨询:AI可以处理与意向客户的初步咨询,提供标准化的回答。这不仅节省了律师的时间,还能确保每个客户都能及时得到回应。通过自动化客户服务,律师可以专注于更复杂的法律问题,而不是花费大量时间在重复性的客户咨询上。
- 智能合约生成:AI可以根据客户需求(生成标准化合同,满足客户的法律需求。对于那些需要标准化合同的客户,AI可以迅速生成合约,减少律师在重复性工作上的时间投入。
-
合规性审查(外部)
-
- 自动审查和标记:AI可以自动审查合同条款,标记任何不合规、不公平或含糊的条款,并提示律师注意。这种初步的自动化筛选可以帮助律师迅速识别潜在的风险点,从而更高效地进行合规审查。
- 初步筛选:AI可以快速完成初步的文件筛选,将关键问题提交给律师进行进一步分析。这种自动化的初步筛选不仅节省了时间,还提高了审查的准确性。
- 合规性审查:AI可以快速识别不符合各种法律法规的文段,标注具体不符合的法律文件并提示律师进行修改。这大大减少了律师进行文件审查的工作量,特别是在面对不断更新的法律条文和不同国家的法律法规时。
-
律师助手(外部)
-
- 日程管理:AI可以帮助律师安排和管理日程,提醒即将到来的会议和截止日期。这种智能化的日程管理不仅提高了时间管理的效率,还确保律师不会错过重要的时间节点。
- 文件查找:AI可以快速查找和整理所需文件,减少律师在文件管理上的时间。这种高效的文件查找功能使得律师能够将更多时间投入到实际的法律工作中,而不是花费在寻找文件上。
这是从我的初稿中截取出来的部分,实际上到了终稿,也基本上是这个框架。由此可见,几乎所有的业务都是基于NLP。因此,我们决定做一个demo,于是我首先做了这个关用于服务外部可的LLM的demo。
实际上这个模型制作起来并不复杂,简而言之就是基于已有的大模型进行微调,使用法律相关的数据集进行微调。我们选择的基础模型base model是llama3-8B,一是因为这是在这个参数量级别当今最强的模型,其二是因为相比于其他的解决方案,LLama的社区更加完善和庞大,finetune的解决方案也更多更成熟。我们最终选择了LLaMA-Factory这个项目作为微调的方案。
那么下一步就是选择数据集。我最初的设想是去一些法律论坛上怕一些问答下来,但是找了一圈发现美加这边的法律论坛大多都是有用户基于自己的经验回答,正确性暂且不论,言辞也不够严谨。最终选择了HuggingFace上的两个数据集:dzunggg/legal-qa-v1,ibunescu/qa_legal_dataset_train和coastalcph/lex_glue。其中第一个数据集我全部使用了,因为都是很专业的问答,问是真心问的(贴合实际的,生活中常见的),答也是认真答的(有参考依据的,用词严谨的)。第二个数据集更大,但是质量有所下降,我猜测就是从哪个法律论坛上爬取的。第三个数据集是质量最好的一个,分为好几个部分,case_hold是针对案例的描述引用出了对应的法律条文,严谨阐述罪名,scotus是美国最高法院的文书,unfair_tos是50个软件的“用户条例”分成一个一个句子,标出了其中包含不公平条款的句子。之所以没有使用这个数据集,是因为这个数据集没有贴合生活的问答,都是文书形式的,及其正式,但不可否认这一定是质量顶尖的NLP类法律数据集之一。使用dataset将数据集进行下载,使用LLaMA-Factory对数据集进行处理,就可以开始训练。
import json
import re
from datasets import load_dataset
# 加载数据集
dataset = load_dataset("dzunggg/legal-qa-v1")
# 定义一个函数去掉开头的“Q:”和“A:”
def remove_prefix(example):
if example['question'].startswith('Q:'):
example['question'] = example['question'][2:].strip()
if example['answer'].startswith('A:'):
example['answer'] = example['answer'][2:].strip()
return example
# 去掉转义字符和链接的函数
def clean_text(text):
# 去掉转义字符
text = text.replace('\n', ' ').replace('\r', ' ')
# 去掉链接
text = re.sub(r'http\S+|www\S+|https\S+', '', text, flags=re.MULTILINE)
return text
# 处理数据集
dataset = dataset.map(remove_prefix)
# 生成一个通用的instruction
def generate_instruction():
return "Please provide detailed answers to the following legal questions."
# 将数据集转换为新的格式
def convert_to_new_format(example):
question = clean_text(example['question'])
answer = clean_text(example['answer'])
return {
"instruction": generate_instruction(),
"input": question,
"output": answer
}
# 应用转换函数
new_dataset = {
}
new_dataset['train'] = [convert_to_new_format(example) for example