LLM(LargeLanguageModel),即大语言模型,是一种基于深度学习技术的自然语言处理模型,这些模型通常拥有数十亿到数万亿个参数,使用大规模的语料库进行训练,能够学习到自然语言的语法和语义,从而可以生成人类可读的文本,实现自然语言生成、文本分类、文本摘要、机器翻译、语音识别等任务。
近年来,自然语言处理(NLP)领域取得了突破性进展,大型预训练语言模型如BERT、GPT和BART等成为瞩目创新。注意力机制(AttentionMechanism)和Transformer网络架构的引入,大幅提升了神经语言模型的能力。BERT模型开创了“预训练-微调”的成功范式,极大推动了NLP的进步,并为NLP的工程化应用提供了便利。如今,预训练模型、迁移学习和零样本学习等技术仍在不断发展和演进。2022年底,ChatGPT的问世揭示了LLM大规模应用的潜力,促使各领域各类基于LLM的应用纷纷涌现。
在法律领域,LLM虽无法短期内替代律师角色,但能提升其工作效率,并在合同审核、合同分析、资料查找和法律研究,以及合同起草、法律结果预测、量刑建议和保释建议等场景展现出巨大应用潜力。
海外方面,OpenAI领投了AI法律顾问Harvey的500万美元种子轮融资,全球最大律所已与Harvey达成合作,引入其对话式AI聊天机器人,可自动化处理法律文件并研究客户案例;Casetext公司推出了由GPT-4支持的CoCounsel(AI法律助理),可协助客户快速进行法律研究和准备证词,识别关键文件和信息,还能在客户上传合同和政策需求后,识别关键条款、解决冲突和风险,并提出修改建议;ROSS公司也与OpenAI合作推出了用于法律研究的API。
在国内,最高人民法院提出的“多元解纷和诉源治理”的指导思想,为人工智能在金融法律纠纷解决全流程中发挥重要作用提供了契机。目前,LLM已涉及的场景包括:法律文书的自动生成、法条文书的语义解析、法律问题问答、案件检索、智能合同管理、法律合规检查。
LLM的引入正以前所未有的方式改变法律领域的面貌,重塑法律行业格局,助力提高工作效率和准确性,为律师和客户开创更加高效、便捷、智能化的法律服务新时代。
目前,通用中文LLM已有ChatGLM、Baichuan、Ziya-LLaMA等模型。在司法领域,已涌现出诸如LaWGPT、ChatLaw和LexiLaw等具有代表性的模型,致力于利用先进的人工智能算法为法律行业提供智能化的解决方案。
涉虚拟币犯罪属于新兴领域,取证、定罪判罚的界定模糊,需要广泛借鉴。
首先,在取证方面,虚拟币交易依托区块链技术进行,其去中心化和匿名特性使得犯罪分子难以被追踪,因此亟须针对这一新兴领域开发更高效精准的取证工具及策略方法;其次,在犯罪行为的界定方面,虚拟币犯罪类型丰富多样,包括诈骗、洗钱、黑客攻击及虚假ICO(首次代币发行)等,虽然可参考传统犯罪类型,但涉虚拟币犯罪在某些方面具有独特性,有必要对其进行精确界定,以确保在定罪和量刑过程中保持公正和一致性。此外,在审理涉虚拟币犯罪案件时,法官定罪判罚需全面考虑多种因素,如犯罪严重程度、被害人损失、犯罪嫌疑人恶意意图等,以确保判决结果的合理性。
鉴于上述结果,我们决定基于用户实际场景需求,快速搭建研发一款面向涉虚拟币犯罪特定领域的灵活实用型检索应用产品。该产品的首要目标是精准实用,杜绝模型幻觉,保证检索结果可为用户提供有针对性的、更高效的犯罪线索和证据整理指导;其次,我们力求低成本快速部署,无需进行fine-tune(对预训练模型进行微调),无需多轮问答,直接充分利用现有的涉虚拟币犯罪判例库,实现高效应用。
在项目构建初期,我们对判例库中的文档进行预处理,并生成对应的Embedding向量进行存储。在后续的用户的请求过程中,系统直接从矢量数据库中进行向量检索即可,而无须实时调用模型对文本进行Embedding编码。该设计旨在提高检索效率,降低实时计算成本,快速准确响应用户需求。
判例库文档处理步骤如下:
a.对判例库里的样本进行预处理和清洗,筛选出具有代表性的判例;
b.对判例内容进行切分,根据特定策略将长文档切分为若干部分,并保留关键句子(包括案发过程、事实描述、法院观点、判决内容及所依据条款等),组合成高质量文档;
c.为每个文档生成句级别的Embedding,将其融合成判例级别的Embedding,最后将这些Embedding存储在矢量数据库(Milvus)中。此过程为一次性任务。
此流程旨在确保判例库中的文档具有高度的代表性和准确性,为后续的向量检索和应用提供可靠的数据基础。在实施检索或问答任务之前,我们还需对“用户输入”进行意图识别。在法律查询场景中,用户的意图主要可分为以下几类:查询案例、查询判决结果、查询法律条款等。在此基础上,为涵盖其他可能的意图,我们还将添加一个“无意图、非法律”的类别,作为“Negative”处理。
此模块提供判例查询功能,通过运用Embedding模型将用户输入的查询文本转换为语义向量,再将所得向量与已编码的每个判例文档的语义向量进行相似度计算和排序,从而召回TopN向量所对应的原始文本。在判例检索过程中,无需使用大规模模型,我们采用ChatLaw-Text2Vec作为基础编码模型,用于生成文本的语义向量。
在获取判例文档的Embedding之后,就可以进行检索模块的构建,其主要步骤如下:
a.对用户查询文本进行预处理,并进行意图识别。若意图类别为“查案例”,则向下执行“检索(Retrieval)”分支的任务;
b.将用户的查询文本生成Embedding(语义向量),并应用于矢量数据库检索;
c.获取TopN的Embedding对应的原判例文本;
d.展示判例列表,并附上判例链接。
问答模型是基于检索功能的升级,增加了对问题理解及信息整理归纳的能力。针对用户提出的问题,问答模型充分利用大模型所具备的知识嵌入能力,首先进行判例检索,再基于检索出的判例,应用大模型进行归纳分析,并生成准确的回答。
问答模型的升级步骤如下:
a.对用户查询文本进行预处理,并进行意图识别。若意图类别为“查判决结果”或“查法律条款”,则向下执行“问答(Chatbot)”分支的任务;
b.将用户的问题文本生成Embedding(语义向量),并应用于矢量数据库检索;同时,获取TopN的Embedding对应的原判例文本;
d.使用GPT模型,基于生成的Instruction生成回答;
e.展示回答结果,并附上所依据判例的链接。
清洗和标准化数据,包括文本格式、编码、字符集等,步骤如下:
a.进行数据去重,以确保每份判决文书具有唯一性;
b.分句和筛选,只保留包含关键信息的句子;
c.组合筛选后的句子,生成结构清晰、内容连贯的新文本段落。
采用预训练的ChatLaw-Text2Vec模型,将文本段落转换为稠密向量,并将转换后的向量导入Milvus数据库,设置向量字段的索引为INV_FLAT类型。
构建Milvus数据库,用于高效存储向量化的文本数据。确保数据库的高效索引和查询性能,以满足文本检索需求。
b.如果预判断为“法律”时,则进入四分类意图判断。
输入样本:
PlainText我想做法律搜索的词条分类任务(共3个类别:案例、定罪、条款),请帮我生成一些标注数据。我给你一些样例:text1:"偷了一只鸡判什么罪",label1:"定罪";text2:"给我一个区块链欺诈的判决案例",label2:"案例";text3:"开设赌场罪的判决参考哪法法律法规",label3:"条款"。
生成数据:
在模型训练过程中,除了设置一些模型的超参数以防止过拟合现象外,我们还对输入数据进行了数据增强(DataAugmention)处理。数据增强主要包括以下两方面:
a.关键词替换:随机对关键词进行替换,以增强模型在具体案件或意图上的泛化能力。例如,“开设赌场犯什么罪”可以被替换为“洗钱犯什么罪”、“开设赌场怎么判”等。
b.随机Mask关键词:对关键词进行随机Mask处理,以增强模型对意图词的着重理解。例如,“开设赌场犯什么罪”可以被替换为“[MASK]犯什么罪”、“[MASK]怎么判”等。
模型输出结果展示:
在检索阶段,我们采用Milvus数据库进行相似度检索,根据用户输入的查询条件,从数据库中筛选出与用户需求相似度较高的文档,并将其作为检索结果返回。
图11模型推理检索阶段
在对话生成阶段,我们采用预先构建好的Instruction来指导大模型生成相应的回答。
回答结果:
目前,我们采用的是ChatGLM-6B模型进行推理,ChatGLM模型优势如下:
b.资源要求低:ChatGLM-6B的部署所需资源相对较低,它可以在各种设备和环境中轻松运行,降低了使用门槛;
c.非商业化开源使用:ChatGLM遵循开源协议,允许非商业化使用,这为研究和开发者提供了良好的基础平台;
d.中文场景优化:ChatGLM使用海量中文语料数据,并对中文对话场景进行了大量优化,使其在中文场景下拥有出色表现。ChatGLM在中文自然语言处理领域具有较高的应用价值。
其他模型应用劣势:
a.LaWGPT:该模型在某些情况下的回答效果不够稳定,尤其在给定参考文档的检索问答场景下,其表现相较于纯生成问答场景并未出现明显提升。
b.ChatLaw:由于模型的基座Ziya模型采用了LLaMA,其参数并未开源,因此无法直接应用。
c.LangChain:该模型支持ChatGPT接口调用,但调用速度慢,且费用较高。
d.FastGPT:该模型支持上传知识库文档以及ChatGPT接口调用,但费用较高,且在灵活性方面表现较差。
难点1:判例超长,简单切句造成语义断开
在数据处理阶段,我们面临的主要挑战是处理超长文书,这些文书的长度远超过LLM所支持的最大输入长度,且大部分文本并未包含关键信息,这对大模型的推理造成一定困难。同时,若单纯按句子级别进行切分,然后筛选,将可能导致语义中断,即多个连续句子在描述同一件事,切割后单个句子与原文档的语义存在一定差异。
解决方法:为解决这一问题,我们设计了一系列关键词和表达模板,用于识别提取在描述重要信息的句子。
难点2:意图分类训练缺乏数据标注
解决方法:为克服这一挑战,我们设计了一系列半自动化的数据标注与数据增强方法(前面数据层模块已有描述),利用ChatGPT的能力,生成较为准确的标注样本。同时,通过数据增强策略对样本进行扩充,从而提高模型的训练质量和性能。
难点1:单位文件太大,无法读入内存
在判例清洗阶段,需处理的大文件体积庞大,这导致文件读取速度缓慢,降低整体效率;当大量数据涌入内存,Jupyter可能会因内存不足而崩溃,导致程序中断;同时,大量数据也会导致预处理环节耗时较长,进一步影响整个清洗阶段的进度。
解决方法:我们采用“数据流读取”的方式逐批次读取数据,以降低内存占用,提高数据读取速度;同时设置“多进程并行执行”数据清洗任务,以进程数量切分数据,处理完成后再按照切分的顺序拼接。
难点2:无法实现快速向量检索
我们一次性将全量判例数据进行Embedding之后,需要存储起来以供服务使用,常规的方法例如存入本地磁盘或者关系型数据库,无法实现快速的向量检索,只能遍历所有数据并计算相似度。
解决方法:向量数据库的使用。通过引用向量数据库,实现了基于向量的检索,极大降低查询耗时。
我们使用真实的判例数据作为外挂知识库,这使得我们的模型在法律场景下拥有较高的准确率,即当用户在询问涉及“查定罪”、“查条款”以及“查案例”等场景时,模型生成的效果明显优于纯LLM的生成结果。此外,LLM的幻觉问题也随着外挂知识库的引入有所缓解。
以下是模型效果:
PlainText从网上爬数据犯什么罪?复制代码
PlainText为赌博人员提供四方支付平台怎么判?复制代码
可以看出,模型准确地生成了判定结果、依据条例。
(一)提高意图多样性表达的支持
在意图识别阶段,我们经过自主生成的数据集进行训练。尽管已对某些意图词进行了数据增强,例如将“如何定罪”替换为“怎么判”、“犯什么罪”、“违法吗”、“合法吗”等同义词、近义词、模糊词,但用户的表达方式千差万别。因此,我们致力于进一步扩展法律场景下各种意图的表达逻辑,了解用户的不同表达方式和需求,以提高模型的泛化能力。
(二)复杂推理能力不足
目前,我们的模型虽在明确意图的法律问题上表现准确,但在涉及复杂逻辑推理的场景下,能力尚且不足。例如用户提供了一段关于复杂案件经过的描述,但并未明确给出有关案件的结果,这时模型难以提供满意的回答。因此,模型有待优化,上下文理解能力有待强化。
(三)推理成本
当前,我们选用的是ChatGLM-6B模型进行推理。ChatGLM官方团队还发布了该模型的量化版本(ChatGLM-6B-int4,ChatGLM-6B-int8),这些版本可以显著降低部署和单次推理所需的资源消耗。但经过我们的试用后,发现这些量化版本的效果并不理想,因此未将其纳入使用。鉴于此,我们将继续寻找性价比更高的模型,以满足我们的需求。