【自然语言处理】:实验5,司法阅读理解

2024-02-23 11:20

本文主要是介绍【自然语言处理】:实验5,司法阅读理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

清华大学驭风计划课程链接 

学堂在线 - 精品在线课程学习平台 (xuetangx.com)

代码和报告均为本人自己实现(实验满分),只展示主要任务实验结果,如果需要详细的实验报告或者代码可以私聊博主

有任何疑问或者问题,也欢迎私信博主,大家可以相互讨论交流哟~~

任务说明

裁判文书中包含了丰富的案件信息,比如时间、地点、人物关系等等,通过机器智能化地阅读理解裁判文书,可以更快速、便捷地辅助法官、律师以及普通大众获取所需信息。 本次任务覆盖多种法律文书类型,包括民事、刑事、行政,问题类型为多步推理,即对于给定问题,只通过单句文本很难得出正确回答,模型需要结合多句话通过推理得出答案。

数据说明

本任务数据集包括约5100个问答对,其中民事、刑事、行政各约1700个问答对,均为需要多步推理的问题类型。为了进行评测,按照9:1的划分,数据集分为了训练集和测试集。注意 该数据仅用于本课程的学习,请勿进行传播。

发放的文件为train.jsondev.json,为字典列表,字典包含字段为:

  • _id:案例的唯一标识符。

  • context:案例内容,抽取自裁判文书的事实描述部分。数据格式与HotpotQA数据格式一致,不过只包含一个篇章,篇章包括标题(第一句话)和切割后的句子列表。

  • question:针对案例提出的问题,每个案例只标注一个问题。

  • answer:问题的回答,包括片段、YES/NO、据答几种类型,对于拒答类,答案应该是"unknown"。

  • supporting_facts:回答问题的依据,是个列表,每个元素包括标题(第一句话)和句子编号(从0开始)。

同学们需根据案例描述和问题,给出答案及答案依据,最终会综合两部分的效果并作为评判依据,评价方法与HotpotQA一致。

我们提供基础的模型代码在baseline目录下

评分要求

分数由两部分组成。首先,读懂已有代码并添加适量注释。使用已有代码在训练数据上进行训练,并且完成开发集评测,这部分占60%,评分依据为模型的开发集性能和报告,报告主要包括对于模型基本原理的介绍,需要同学阅读代码进行学习。 第二部分,进行进一步的探索和尝试,我们将在下一小节介绍可能的尝试,并在报告中汇报尝试的方法以及结果,这部分占40%。同学需要提交代码和报告,在报告中对于两部分的实验都进行介绍。

探索和尝试

  • 使用2019年的阅读理解数据集(CJRC)作为辅助数据集,帮助模型提高阅读理解能力

  • 使用别的预训练语言模型完成该实验,例如THUNLP提供的司法BERT

  • 对于新的模型架构进行探索,例如加入图神经网络(GNN)来加强模型的推理能力

参考资料

  • CAIL2020——阅读理解

实验结果 

基本模型训练+别的预训练模型训练

这 一 部 分 我 使 用 了 5 个 模 型 进 行 训 练 , 分 别 是 chinese-bert-wwm-ext, chinese_roberta_wwm_ext_pytorch, ms_BERT, xs_BERT, baidubaike_BERT 。训练完后需要
进行结果预测,通过查找资料找到了 hotpot_evaluate_v1.py ,运行这个文件就可以得出验证集的结果,下面是我汇总的结果

 除了 chinese_roberta_wwm_ext_pytorch 训练时候学习率为 4e-5,其他四个模型训练都用的 1e-5(因为 roberta 模型用 1e-5 学习率训练时候结果太差,通过查询参考资料看到这个模型最 佳学习率是 4e-5,所以试了发现效果不错)其他超参数都相同

通过汇总结果图表看出在 12 项评价指标中 chinese-bert-wwm-ext 模型的 8 项指标为最好,所 以 后 面 加 辅 助 数 据 集 进 行 训 练 的 时 候 也 是 选 择 这 个 模 型 , 其 次 比 较 好 的 是 chinese_bert_wwm_ext, 四项指标优于 chinese_roberta_wwm_ext 而其他三个模型训练出的
结果普遍不好,与前两个模型得出的结果有相当大的差距,个人认为造成这样的原因是那三个模型都是对于单个领域的专用模型,因为数据集是对于民事、刑事、行政这三种法律文书类型,所以即使对于单个领域预测好,但是平均三个领域下来结果就会被平均降低。

添加2019CJRC数据集作为辅助数据进行训练

这一步的难点主要是数据转换成 train.json 一样的格式 
因为 2019CJRC 数据集中是一个案例对应多个问题,而 train.json 文件中是一个案例对应一个问题,所以转换的时候多个问题的 id 就作为单个案例来处理 ( 比如一个案例对应三个问题,转化后就变成三个案例,所以数据量增加特别多)

 

通过上面代码再合并 train.json 文件和前面转换后的文件 CJRJ_data 文件,案例总数来到 35411, 约为原数据集的 8 倍,数据预处理的时候也很耗时,大约耗时 10 分钟。

最终使用 chinese-bert-wwm-ext 模型来进行训练,训练汇总结果如下 

从结果看出对比在不加辅助数据集的情况下在 12 项结果指标中 10 项指标都有比较明显的提
升,可以看出同模型同参数的情况下,训练数据的增大使得验证集的结果指标明显提升,这
部改进提升很成功

这篇关于【自然语言处理】:实验5,司法阅读理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/738458

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

Go语言使用Buffer实现高性能处理字节和字符

《Go语言使用Buffer实现高性能处理字节和字符》在Go中,bytes.Buffer是一个非常高效的类型,用于处理字节数据的读写操作,本文将详细介绍一下如何使用Buffer实现高性能处理字节和... 目录1. bytes.Buffer 的基本用法1.1. 创建和初始化 Buffer1.2. 使用 Writ

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

Python视频处理库VidGear使用小结

《Python视频处理库VidGear使用小结》VidGear是一个高性能的Python视频处理库,本文主要介绍了Python视频处理库VidGear使用小结,文中通过示例代码介绍的非常详细,对大家的... 目录一、VidGear的安装二、VidGear的主要功能三、VidGear的使用示例四、VidGea

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

Python结合requests和Cheerio处理网页内容的操作步骤

《Python结合requests和Cheerio处理网页内容的操作步骤》Python因其简洁明了的语法和强大的库支持,成为了编写爬虫程序的首选语言之一,requests库是Python中用于发送HT... 目录一、前言二、环境搭建三、requests库的基本使用四、Cheerio库的基本使用五、结合req

使用Python处理CSV和Excel文件的操作方法

《使用Python处理CSV和Excel文件的操作方法》在数据分析、自动化和日常开发中,CSV和Excel文件是非常常见的数据存储格式,ython提供了强大的工具来读取、编辑和保存这两种文件,满足从基... 目录1. CSV 文件概述和处理方法1.1 CSV 文件格式的基本介绍1.2 使用 python 内

如何使用celery进行异步处理和定时任务(django)

《如何使用celery进行异步处理和定时任务(django)》文章介绍了Celery的基本概念、安装方法、如何使用Celery进行异步任务处理以及如何设置定时任务,通过Celery,可以在Web应用中... 目录一、celery的作用二、安装celery三、使用celery 异步执行任务四、使用celery

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

SpringBoot操作spark处理hdfs文件的操作方法

《SpringBoot操作spark处理hdfs文件的操作方法》本文介绍了如何使用SpringBoot操作Spark处理HDFS文件,包括导入依赖、配置Spark信息、编写Controller和Ser... 目录SpringBoot操作spark处理hdfs文件1、导入依赖2、配置spark信息3、cont