# Competition_CAIL
![比赛图标](https://github.com/renjunxiang/Competition_CAIL/blob/master/picture/比赛图标.png)<br>
## **比赛简介**
为了促进法律智能相关技术的发展,在最高人民法院信息中心、共青团中央青年发展部的指导下,中国司法大数据研究院、中国中文信息学会、中电科系统团委联合清华大学、北京大学、中国科学院软件研究所共同举办“2018中国‘法研杯’法律智能挑战赛(CAIL2018)”。<br>
## 比赛任务:
**罪名预测:根据刑事法律文书中的案情描述和事实部分,预测被告人被判的罪名;**<br>
**法条推荐:根据刑事法律文书中的案情描述和事实部分,预测本案涉及的相关法条;**<br>
**刑期预测:根据刑事法律文书中的案情描述和事实部分,预测被告人的刑期长短。**<br>
## **2018.07.13说明:**
转眼间第一阶段的比赛还有两天就结束了,实现之前的承诺,**公开全部代码和分析思路**。ps:后来用公司注册的账号,自己的账号提交了三四次就不用了,反正很伤心555~<br>
说实话还是有点小郁闷的。因为没有用服务器参赛的经验,一开始是8G内存1060maxq的游戏本;在6月5日配的一块P4显卡服务器开始做正赛,训练速度只有1060maxq的一半,一层最简单的卷积要训练2.5小时;后来在7月5号新配了一台一块P100的服务器,速度是P4的7倍,但是在数据加强后超过三层的CNN和单层RNN依然需要将近2小时才能完成一轮训练,所剩无几的时间也基本放弃了,提交了一次简单数据加强后的模型第一问成绩提高了0.5%。虽然在一开始三问成绩都还不错,但是后来大牛越来越多、大家使用的模型越来越复杂,硬件不足以再深入研究更多的模型和优化方法。还是要向nevermore、HFL等大神致敬,赛后要多学习他们的处理方法!<br>
后面提供的分析思路、网络代码、效果分析、模型评估,都是在**不超过2层卷积和轻度数据增强**的基础上实现的,不代表复杂模型的效果,仅供参考!<br>
PS:因为不同时间在不同机器上做的,有几个版本找不到了,代码可能不连贯、存在路径错误或者函数丢失,各位轻喷~
## **2018.06.20说明:**
**鉴于主办方禁止共享代码和模型,代码更新将在比赛结束后进行。**<br>
此前上传的代码(2018.5.24)仅仅是刚刚参赛时的一个分析思路,但足够超过基准线。但是要获得好名次,需要对预处理和神经网络做不少调整。毕竟,数据决定模型能达到的高度,模型仅能逼近那个高度。<br>
**20180525成绩**<br>
![](https://github.com/renjunxiang/Competition_CAIL/blob/master/picture/20180525成绩.png)<br>
针对比赛群还有github的小伙伴的一些疑问,统一回复:<br>
<br>
问:xx函数有错误哎?<br>
答:一个原因可能是模块的版本不一样导致函数用法有变动,另一个原因是代码我一开始很粗糙写的交交差啦,后面做了不少修改。<br>
<br>
问:代码好像没写完哎,能上传全部吗?<br>
答:我的本意是上传全部代码供交流的,后来主办方警告说发现代码雷同者成绩作废,吓得我瑟瑟发抖,毕竟这是一项工作任务,只能比赛结束上传全部代码了。<br>
<br>
问:你是怎么对训练模型做评价的,F1得分好像不高,你的成绩如何?<br>
答:我这人比较懒,直接用准确率了(就是结果是否完全一样)。发布的训练数据和官网评测数据绝对不是同分布的,各位用valid和test测一下就会发现差很多。所以啥得分高上传啥模型也会有很多意外的哈哈。<br>
<br>
问:大数据集你的代码内存不够<br>
答:大数据集要特别处理的,要一次跑完内存最少80G。我针对大数据集重写了预处理过程,处理后的序列数据都有5G,中间步骤的数据大概在50G左右。老大前几天给我配了96G内存的服务器,可惜我都预处理完了...另外我小数据集成绩不错的模型传到大数据评测惨不忍睹啊,用大数据重新训练的还不错曾经暂居第一(真的很看运气的,拿不到奖的话不知道会不会被老大暴打一顿...希望各路大神让让小弟,奖金请你们吃饭~)<br>
![](https://github.com/renjunxiang/Competition_CAIL/blob/master/picture/20180615成绩.png)<br>
**暂时就这些,平时我只上传代码没看过评论,所以不能及时回复各位请海涵~由于老大要每周汇报进展,这是20180531的排名(现在已经不知道掉哪里去了,哈哈),相信各位都能取得好成绩**<br>
![](https://github.com/renjunxiang/Competition_CAIL/blob/master/picture/20180531成绩.png)<br>
## **分析思路:**
**我理想中的流程是:**<br>
第一轮: 分词 》 剔除停用词 》 特征表达 》 单一模型训练 》评估 》优化<br>
第二轮: 数据增强 》 单一模型训练 》评估 》优化<br>
第三轮: 模型融合 》 评估 》优化<br>
<br>
**基于此,我的做法是:**<br>
**分词**:结巴,可以考虑引入外部词库提高分词精确性<br>
<br>
**剔除停用词**:我直接把长度为1的字符串删了,这个也是偷懒但还挺有效的方法,标点、语气词等一般都是1个长度<br>
<br>
**特征表达**:我是先将词语转成id,一开始保留4万个词语效果不太好,成绩大致是86-83-72;后来保留8万个词语,成绩大概是87.5-84-73.5,然后接入embedding层计算词向量。词语少了特征表达不足,多了很多低频词汇干扰词向量的表达效果。这里可以尝试tf-idf来选择保留哪些词语,不过很多人名地名会有特殊性,有能力的还可以采用实体识别的方式做过滤<br>
<br>
**单一模型训练**:受限于硬件,Embedding(80000词语,400长度,词向量512维),接一层CNN1D(512个卷积核、卷积核大小3),接全局最大池化(GlobalMaxPool1D),再正则化(BN)后接全连接,最后用sigmod做类别得分,第三问用relu。因为没有足够的时间去训练深度网络和模型融合,只能力求增加模型宽度+BN加速收敛<br>
另外第三问有很多人用分类模型,我在训练赛试过成绩不太好。我猜测是分类的话可能稍有不慎就归到了差距很大的类别,如果当成连续变量至多是两类的平均数,所以我更倾向于用连续变量来做。<br>
<br>
**评估**:一开始我是用准确率(accu)来做的,因为一开始探索的时候训练一般都是不充分的,accu可以看出多类别是不是能有效预测出来,训练赛感觉提交分数和accu的结果正相关;后来大数据集的时候多标签的样本显著减少,并且数据大了容易达到数据和模型的瓶颈,就考虑和官网一样用f1来评估,关注样本少的类别效果。<br>
<br>
**优化**:我能做的也只是1层变2层、RNN换CNN、增加词向量维度、增加卷积核数量和改变卷积核尺寸。测试下来1-3层卷积的成绩差不多,2层是最好的,但也只是高了0.1%左右,很可能只是运气问题。词向量512要高于256、卷积核数量512要高于256,rnn效果不如cnn(后面我会谈一下原因,但是多层的话我就不知道了)<br>
<br>
**数据增强**:因为句子长度差距比较大(我记得200长度好像92%,300长度95%,400长度98%),我最终是取了400长度。<br>
尝试过对句子内部词语做混洗打乱顺序,成绩只降低了一点点。结合断案的思路,一般也是看fact的关键词,所以我认为CNN在这里的特征提取表现会好于RNN的上下文理解。<br>尝试过对类别样本少的做重抽样,试了几次扩大不超过60000、扩大倍数不超过10的效果比较好,扩大不超过100000、扩大倍数不超过100效果很�
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
【资源说明】 1、该资源包括项目的全部源码,下载可以直接使用! 2、本项目适合作为计算机、数学、电子信息等专业的竞赛项目学习资料,作为参考学习借鉴。 3、本资源作为“参考资料”如果需要实现其他功能,需要能看懂代码,并且热爱钻研,自行调试。 中国法研杯法律智能挑战赛参赛源码+学习说明(CAIL2018).zip
资源推荐
资源详情
资源评论
收起资源包目录
中国法研杯法律智能挑战赛参赛源码+学习说明(CAIL2018).zip (30个子文件)
code_20105
evaluate.py 2KB
picture
attention.png 92KB
resnet_sample.png 43KB
比赛图标.png 429KB
20180525成绩.png 11KB
20180531成绩.png 1.33MB
Bidirectional_GRU_GlobalMaxPool1D_epochs.png 16KB
部分预测结果.png 185KB
predictor演示.png 135KB
TextCNN.png 160KB
20180615成绩.png 13KB
model_RES_accusation.py 3KB
model_CNN_accusation.py 3KB
model_CNN_attention_accusation.py 3KB
data_transform.py 6KB
model_CNN_TextCNN_accusation.py 3KB
data_preprocessing
data_cut.py 2KB
fit_tokenizer_to_sequences.py 3KB
data_label.py 2KB
data_augmentation
数据增强_fact_shuffle.py 538B
数据增强_accusation.py 4KB
数据增强_relevant_articles.py 3KB
resnet.py 1KB
.gitignore 12B
predictor
__init__.py 32B
predictor.py 3KB
data_transform.py 6KB
textcnn.py 2KB
README.md 14KB
attention.py 1KB
共 30 条
- 1
资源评论
- 莪、纯属譃构゛6872024-06-13感谢大佬,让我及时解决了当下的问题,解燃眉之急,必须支持!
- imp11451419198102024-06-10资源太好了,解决了我当下遇到的难题,抱紧大佬的大腿~
土豆片片
- 粉丝: 1844
- 资源: 5849
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 1732669747878.jpg
- 8613985ec49eb8f757ae6439e879bb2a_holmes_logindex
- 使用Spring Boot处理大文件上传有哪些技巧?
- GRE隧道是Openwrt系统的常用功能之一,在两台Openwrt设备之间建立GRE隧道,可通过两台设备在公网上建立一个虚拟局域网
- 机器学习领域中的Iris数据集探索与分析技术解析及建模流程
- 本科毕业设计-Java Web学院的实验课选课及实验室管理系统.zip
- MySQL在Linux安装和集群搭建-一主一备
- Python中检查文件是否存在的几种方法
- 02b97e6de561b351e3db753f4abedc7b.rar
- java JDK11版本安装包
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功