写点什么

我们如何利用 ChatGLM-6B,在涉虚拟币犯罪判例检索问答领域落地?

  • 2023-11-11
    北京
  • 本文字数:6356 字

    阅读完需:约 21 分钟

大小:3.16M时长:18:23
我们如何利用ChatGLM-6B,在涉虚拟币犯罪判例检索问答领域落地?

在当今科技日新月异的时代,LLM(Large Language Model,大语言模型)作为一种创新性的人工智能技术,已逐渐成为驱动自然语言处理领域及社会科学研究方法变革的重要力量。它以其强大的自然语言理解和生成能力,引领着人工智能领域的新一轮革命,并为多个领域带来应用层面的突破性成果。LLM 为研究人员提供了一种高效、低成本的研究手段,成为改变我们生活、工作、思维方式的重要技术。

 

本文将重点关注 LLM 在法律领域的应用,探讨其如何在涉虚拟币犯罪判例检索问答方面发挥智能化应用价值和潜力,同时也为法律行业的智能化发展提供有益参考和启示。

 

LLM(Large Language Model),即大语言模型,是一种基于深度学习技术的自然语言处理模型,这些模型通常拥有数十亿到数万亿个参数,使用大规模的语料库进行训练,能够学习到自然语言的语法和语义,从而可以生成人类可读的文本,实现自然语言生成、文本分类、文本摘要、机器翻译、语音识别等任务。

 

近年来,自然语言处理(NLP)领域取得了突破性进展,大型预训练语言模型如 BERT、GPT 和 BART 等成为瞩目创新。注意力机制(Attention Mechanism)和 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 等具有代表性的模型,致力于利用先进的人工智能算法为法律行业提供智能化的解决方案。

 

为何要做虚拟币判例检索 LLM?

 

在利用当前主流的中文法律专业 LLM 进行涉虚拟币犯罪场景的测试过程中,我们发现其表现效果并不理想。针对涉虚拟币犯罪这一新兴领域,法律专业 LLM 的结果在准确性方面存在显著不足,且“睁眼说瞎话”的模型幻觉现象严重。此外,从用户使用场景来看,判例的关联度高且更新及时的结果更受关注,对此,模型的表现亦难以达到预期。

 

涉虚拟币犯罪属于新兴领域,取证、定罪判罚的界定模糊,需要广泛借鉴。

 

虚拟币作为一种新兴的数字资产,正日益受到全球范围内的关注。然而,伴随着虚拟币的发展,与之相关的各类犯罪活动也呈现出日益猖獗的态势,对全球法律界和司法体系提出严峻考验,传统法律框架在面对涉虚拟币犯罪活动时已显得模糊和不完善。

 

首先,在取证方面,虚拟币交易依托区块链技术进行,其去中心化和匿名特性使得犯罪分子难以被追踪,因此亟须针对这一新兴领域开发更高效精准的取证工具及策略方法;其次,在犯罪行为的界定方面,虚拟币犯罪类型丰富多样,包括诈骗、洗钱、黑客攻击及虚假 ICO(首次代币发行)等,虽然可参考传统犯罪类型,但涉虚拟币犯罪在某些方面具有独特性,有必要对其进行精确界定,以确保在定罪和量刑过程中保持公正和一致性。此外,在审理涉虚拟币犯罪案件时,法官定罪判罚需全面考虑多种因素,如犯罪严重程度、被害人损失、犯罪嫌疑人恶意意图等,以确保判决结果的合理性。

 

面对上述挑战,该领域相关用户迫切渴望拥有一款智能产品,可以帮助快速归纳总结历史判例信息,从而对当前涉虚拟币犯罪场景作出合理分析判断,进而为侦破和取证工作提供指导。

 

涉虚拟币犯罪判例检索 LLM 研发应用

 

鉴于上述结果,我们决定基于用户实际场景需求,快速搭建研发一款面向涉虚拟币犯罪特定领域的灵活实用型检索应用产品。该产品的首要目标是精准实用,杜绝模型幻觉,保证检索结果可为用户提供有针对性的、更高效的犯罪线索和证据整理指导;其次,我们力求低成本快速部署,无需进行 fine-tune(对预训练模型进行微调),无需多轮问答,直接充分利用现有的涉虚拟币犯罪判例库,实现高效应用。

 

项目框架

 

判例检索 LLM 共完成两个任务,一个是基于 Embedding 的判例检索(替换现有关键词匹配的检索方式),可以更有效地检索和匹配相关判例;另一个是基于判例库的法律问答系统,理解用户提出的问题,并在判例库中寻找相关答案。



  1. 文本预处理与意图识别


在项目构建初期,我们对判例库中的文档进行预处理,并生成对应的 Embedding 向量进行存储。在后续的用户的请求过程中,系统直接从矢量数据库中进行向量检索即可,而无须实时调用模型对文本进行 Embedding 编码。该设计旨在提高检索效率,降低实时计算成本,快速准确响应用户需求。


判例库文档处理步骤如下:

 

a. 对判例库里的样本进行预处理和清洗,筛选出具有代表性的判例;

b. 对判例内容进行切分,根据特定策略将长文档切分为若干部分,并保留关键句子(包括案发过程、事实描述、法院观点、判决内容及所依据条款等),组合成高质量文档;

c. 为每个文档生成句级别的 Embedding,将其融合成判例级别的 Embedding,最后将这些 Embedding 存储在矢量数据库(Milvus)中。此过程为一次性任务。


此流程旨在确保判例库中的文档具有高度的代表性和准确性,为后续的向量检索和应用提供可靠的数据基础。在实施检索或问答任务之前,我们还需对“用户输入”进行意图识别。在法律查询场景中,用户的意图主要可分为以下几类:查询案例、查询判决结果、查询法律条款等。在此基础上,为涵盖其他可能的意图,我们还将添加一个“无意图、非法律”的类别,作为“Negative”处理。

 

  1. 判例检索


法律实践在很大程度上依赖于过去的判例,然而判例内容复杂多变,且需结合上下文场景进行理解。传统基于关键词的搜索方法会出现误召回问题。为提高检索效率和准确性,更为有效的方法是通过对查询文本的语义信息进行学习,然后借助判例库的语义表征来做匹配,进而召回相关判例。该方法有助于克服基于关键词搜索的局限性,从而提高法律实践中的检索效果。


此模块提供判例查询功能,通过运用 Embedding 模型将用户输入的查询文本转换为语义向量,再将所得向量与已编码的每个判例文档的语义向量进行相似度计算和排序,从而召回 TopN 向量所对应的原始文本。在判例检索过程中,无需使用大规模模型,我们采用 ChatLaw-Text2Vec 作为基础编码模型,用于生成文本的语义向量。


在获取判例文档的 Embedding 之后,就可以进行检索模块的构建,其主要步骤如下:

 

a. 对用户查询文本进行预处理,并进行意图识别。若意图类别为“查案例”,则向下执行“检索(Retrieval)”分支的任务;

b. 将用户的查询文本生成 Embedding(语义向量),并应用于矢量数据库检索;

c. 获取 TopN 的 Embedding 对应的原判例文本;

d. 展示判例列表,并附上判例链接。

 

  1. 法律问答

 

问答模型是基于检索功能的升级,增加了对问题理解及信息整理归纳的能力。针对用户提出的问题,问答模型充分利用大模型所具备的知识嵌入能力,首先进行判例检索,再基于检索出的判例,应用大模型进行归纳分析,并生成准确的回答。


问答模型的升级步骤如下:

 

a. 对用户查询文本进行预处理,并进行意图识别。若意图类别为“查判决结果”或“查法律条款”,则向下执行“问答(Chatbot)”分支的任务;

b. 将用户的问题文本生成 Embedding(语义向量),并应用于矢量数据库检索;同时,获取 TopN 的 Embedding 对应的原判例文本;

c. 基于对 Query(查询)的理解,生成 Question(基于模板),再将 Question 与候选的语义相关句子一同构成 Instruction(GPT 模型的指令);

d. 使用 GPT 模型,基于生成的 Instruction 生成回答;

e. 展示回答结果,并附上所依据判例的链接。

 

数据准备

 

  1. 语料准备和清洗

 

清洗和标准化数据,包括文本格式、编码、字符集等,步骤如下:

 

a. 进行数据去重,以确保每份判决文书具有唯一性;

b. 分句和筛选,只保留包含关键信息的句子;

c. 组合筛选后的句子,生成结构清晰、内容连贯的新文本段落。


 

  1. 文本向量化


采用预训练的 ChatLaw-Text2Vec 模型,将文本段落转换为稠密向量,并将转换后的向量导入 Milvus 数据库,设置向量字段的索引为 INV_FLAT 类型。

 

 

  1. 向量数据库的构建


构建 Milvus 数据库,用于高效存储向量化的文本数据。确保数据库的高效索引和查询性能,以满足文本检索需求。

 

 

模型训练

 

  1. 用户意图预判断:法律 VS 非法律(二分类)

 

建立一个用于法律意图分类的深度学习模型,使用 BERT 等预训练模型,标注样本量 200 个。对用户提示词进行法律相关和非法律相关的二分类;训练和评估模型,以确保高准确性:

 

a. 如果预判断为“非法律”时,任务终止,并返回“无法为您提供相关帮助”;

b. 如果预判断为“法律”时,则进入四分类意图判断。

 

 

  1. 用户意图分类判断(四分类),确定进入检索(Retrieval)分支或问答(Chatbot)分支

 

为了使问题的范围更精确,四分类模型将用户 Query(查询)在法律相关范围内进一步划分为:案例、定罪、条款、无意图。我们采用了 GPT 方式生成数据集:给定一些初始样本,并设定好目标要求,输入 GPT 来生成训练样本,标注样本量 2000 个。

 

输入样本:

Plain Text

我想做法律搜索的词条分类任务(共3个类别:案例、定罪、条款),请帮我生成一些标注数据。我给你一些样例:

text1: "偷了一只鸡判什么罪", label1: "定罪";

text2: "给我一个区块链欺诈的判决案例", label2: "案例";

text3: "开设赌场罪的判决参考哪法法律法规", label3: "条款"。

生成数据:

Plain Text

text: "杀人罪的量刑标准是什么",label: "定罪"

text: "最高法关于合同违约的判例有哪些",label: "案例"

text: "盗窃罪的相关法律条款在哪里可以找到",label: "条款"

text: "最高法院针对猥亵儿童的判决案例有哪些",label: "案例"

text: "故意伤害罪的构成要件是什么",label: "定罪"

text: "行政违法罚款的法规在哪里可以查到",label: "条款"

text: "法院如何定罪故意杀人案",label: "定罪"

text: "最高法关于合同解除的判例有哪些",label: "案例"

text: "毒品罪的刑罚在哪个法律条款中规定",label: "条款"

text: "最高法院针对贪污犯罪的判决案例有哪些",label: "案例"

……

 

在模型训练过程中,除了设置一些模型的超参数以防止过拟合现象外,我们还对输入数据进行了数据增强(Data Augmention)处理。数据增强主要包括以下两方面:

 

a. 关键词替换:随机对关键词进行替换,以增强模型在具体案件或意图上的泛化能力。例如,“开设赌场犯什么罪”可以被替换为“洗钱犯什么罪”、“开设赌场怎么判”等。

b. 随机 Mask 关键词:对关键词进行随机 Mask 处理,以增强模型对意图词的着重理解。例如,“开设赌场犯什么罪”可以被替换为“[MASK]犯什么罪”、“[MASK]怎么判”等。

 

模型输出结果展示:

 

模型推理

 

在检索阶段,我们采用 Milvus 数据库进行相似度检索,根据用户输入的查询条件,从数据库中筛选出与用户需求相似度较高的文档,并将其作为检索结果返回。

 

 

图 11 模型推理检索阶段

 

在对话生成阶段,我们采用预先构建好的 Instruction 来指导大模型生成相应的回答。

 

 

回答结果:


 

模型研发过程中的难点及解决方法

 

  1. 开源模型选用

 

目前,我们采用的是 ChatGLM-6B 模型进行推理,ChatGLM 模型优势如下:

 

a. 发布时间早:ChatGLM 发布时间较早,使得它一定程度上成为自然语言处理领域的历史见证和技术发展的缩影;

b. 资源要求低:ChatGLM-6B 的部署所需资源相对较低,它可以在各种设备和环境中轻松运行,降低了使用门槛;

c. 非商业化开源使用:ChatGLM 遵循开源协议,允许非商业化使用,这为研究和开发者提供了良好的基础平台;

d. 中文场景优化:ChatGLM 使用海量中文语料数据,并对中文对话场景进行了大量优化,使其在中文场景下拥有出色表现。ChatGLM 在中文自然语言处理领域具有较高的应用价值。

 

其他模型应用劣势:

 

a. LaWGPT:该模型在某些情况下的回答效果不够稳定,尤其在给定参考文档的检索问答场景下,其表现相较于纯生成问答场景并未出现明显提升。

b. ChatLaw:由于模型的基座 Ziya 模型采用了 LLaMA,其参数并未开源,因此无法直接应用。

c. LangChain:该模型支持 ChatGPT 接口调用,但调用速度慢,且费用较高。

d. FastGPT:该模型支持上传知识库文档以及 ChatGPT 接口调用,但费用较高,且在灵活性方面表现较差。

 

  1. 模型训练阶段

 

• 难点 1:判例超长,简单切句造成语义断开

 

在数据处理阶段,我们面临的主要挑战是处理超长文书,这些文书的长度远超过 LLM 所支持的最大输入长度,且大部分文本并未包含关键信息,这对大模型的推理造成一定困难。同时,若单纯按句子级别进行切分,然后筛选,将可能导致语义中断,即多个连续句子在描述同一件事,切割后单个句子与原文档的语义存在一定差异。

 

解决方法:为解决这一问题,我们设计了一系列关键词和表达模板,用于识别提取在描述重要信息的句子。

 

• 难点 2:意图分类训练缺乏数据标注

 

在意图分类模型训练阶段,我们面临的一个重要问题是缺乏相关的标注数据。

 

解决方法:为克服这一挑战,我们设计了一系列半自动化的数据标注与数据增强方法(前面数据层模块已有描述),利用 ChatGPT 的能力,生成较为准确的标注样本。同时,通过数据增强策略对样本进行扩充,从而提高模型的训练质量和性能。

 

  1. 数据处理与存储阶段

 

• 难点 1:单位文件太大,无法读入内存

 

在判例清洗阶段,需处理的大文件体积庞大,这导致文件读取速度缓慢,降低整体效率;当大量数据涌入内存,Jupyter 可能会因内存不足而崩溃,导致程序中断;同时,大量数据也会导致预处理环节耗时较长,进一步影响整个清洗阶段的进度。

 

解决方法:我们采用“数据流读取”的方式逐批次读取数据,以降低内存占用,提高数据读取速度;同时设置“多进程并行执行”数据清洗任务,以进程数量切分数据,处理完成后再按照切分的顺序拼接。

 

• 难点 2:无法实现快速向量检索

 

我们一次性将全量判例数据进行 Embedding 之后,需要存储起来以供服务使用,常规的方法例如存入本地磁盘或者关系型数据库,无法实现快速的向量检索,只能遍历所有数据并计算相似度。

 

解决方法:向量数据库的使用。通过引用向量数据库,实现了基于向量的检索,极大降低查询耗时。

 

应用场景和实战效果

 

我们使用真实的判例数据作为外挂知识库,这使得我们的模型在法律场景下拥有较高的准确率,即当用户在询问涉及“查定罪”、“查条款”以及“查案例”等场景时,模型生成的效果明显优于纯 LLM 的生成结果。此外,LLM 的幻觉问题也随着外挂知识库的引入有所缓解。

 

以下是模型效果:

 

Plain Text从网上爬数据犯什么罪?
复制代码

 

 

Plain Text为赌博人员提供四方支付平台怎么判?
复制代码

 

 

可以看出,模型准确地生成了判定结果、依据条例。

 

当前模型的不足及优化空间

 

(一)提高意图多样性表达的支持

 

在意图识别阶段,我们经过自主生成的数据集进行训练。尽管已对某些意图词进行了数据增强,例如将“如何定罪”替换为“怎么判”、“犯什么罪”、“违法吗”、“合法吗”等同义词、近义词、模糊词,但用户的表达方式千差万别。因此,我们致力于进一步扩展法律场景下各种意图的表达逻辑,了解用户的不同表达方式和需求,以提高模型的泛化能力。

 

(二)复杂推理能力不足

 

目前,我们的模型虽在明确意图的法律问题上表现准确,但在涉及复杂逻辑推理的场景下,能力尚且不足。例如用户提供了一段关于复杂案件经过的描述,但并未明确给出有关案件的结果,这时模型难以提供满意的回答。因此,模型有待优化,上下文理解能力有待强化。

 

(三)推理成本

 

当前,我们选用的是 ChatGLM-6B 模型进行推理。ChatGLM 官方团队还发布了该模型的量化版本(ChatGLM-6B-int4,ChatGLM-6B-int8),这些版本可以显著降低部署和单次推理所需的资源消耗。但经过我们的试用后,发现这些量化版本的效果并不理想,因此未将其纳入使用。鉴于此,我们将继续寻找性价比更高的模型,以满足我们的需求。

2023-11-11 11:565891

评论 1 条评论

发布
用户头像
“c. LangChain:该模型支持 ChatGPT 接口调用,但调用速度慢,且费用较高” Langchain是个开发框架,什么时候变成模型了?
2023-11-22 10:48 · 北京
回复
没有更多了
发现更多内容

接口测试要测试什么?

与风逐梦

软件测试 接口测试

华为云严选上新啦!高效准确的数据同步方案来了

华为云开发者联盟

数据库 华为云 数据同步 英方软件 严选商城

mycat入门:简介和安装

小鲍侃java

9月日更

智汇华云 | ArSDN之分布式路由及浮动IP简介

华云数据

华云大咖说 | 混合IT架构的统一管理——安超云套件产品介绍

华云数据

9月日更挑战正式开始啦~

InfoQ写作社区官方

9月日更 热门活动

第一波场DAPP系统搭建|DAPP介绍

Geek_23f0c3

DAPP智能合约交易系统开发 波场链DAPP开发 第一波场

深入了解现代web浏览器(第三部分)

GKNick

webpack5之HMR原理探究

rayyang00

大前端 webpack

接口测试进阶接口脚本使用--apipost(预/后执行脚本)

Proud lion

大前端 后端 Postman 开发工具 接口文档

configparser 配置文件解析器

林十二XII

华为云数据库内核专家为您揭秘:GaussDB(for MySQL)并行查询有多快?

华为云开发者联盟

MySQL 关系型数据库 华为云数据库 GaussDB(for MySQL) 并行查询

Promise.any() 原理解析及使用指南

devpoint

Promise 9月日更

自动化测试框架指南

FunTester

自动化测试 测试框架 数据驱动 FunTester 测试自动化

Tapdata肖贝贝:实时数据引擎系列(三) - 流处理引擎对比

tapdata

职场奇袭!3分钟完成一天工作

博文视点Broadview

String split()方法踩坑

梁小航航

string

云行·数治·慧用丨边缘云一体机赋能基层实现边缘侧数据智能

云计算

五岳核心版上线!这份阿里开发手册核心版又将被多少人疯狂转载?

公众号_愿天堂没有BUG

Java 编程 程序员 架构 面试

4种Golang并发操作中常见的死锁情形

华为云开发者联盟

缓存 协程 并发 死锁 Go 语言

Tapdata 在线研讨会:实时数据同步应用场景及实现方案探讨

tapdata

MySQL oracle mongodb

华云大咖说 | 对象存储在金融行业的应用

华云数据

Week2 Homework

Ray_c

#架构实战营

☕【JVM技术指南】「难点-核心-遗漏」TLAB内存分配+锁的碰撞(技术串烧)!

洛神灬殇

JVM TLAB 锁升级 内存分配 9月日更

为了让医院把医护还给患者,他们用了这个….

华为云开发者联盟

数字化转型 医院 华为云 devcloud 全流程一体化

Nebula Graph 源码解读系列 | Vol.00 序言

NebulaGraph

图数据库 源码解读 分布式图数据库

【重磅】微信开源PhxSQL:高可用、强一致的MySQL集群

OpenIM

去中心化钱包开发,imtoken钱包开发

IOS技术分享| 在iOS WebRTC 中添加美颜滤镜

anyRTC开发者

音视频 WebRTC 视频通话 ios技术分享 美颜

智汇华云 | 混合IT下的云管理套件核心技术解析

华云数据

Apache Pulsar 新增 2 位 PMC 成员:林琳与陈航

Apache Pulsar

腾讯云 Apache Pulsar

我们如何利用ChatGLM-6B,在涉虚拟币犯罪判例检索问答领域落地?_生成式 AI_中科链源数据平台_InfoQ精选文章