1. Background与Motivation(模型构造思路)
本文认为,罪名预测有三个难点:①罪名易混淆。②多被告、多罪名的情况很复杂。③仅提供罪名很难令人说服,因此需要提供法条作为法律依据。
以前的模型有如下不足:严重依赖专家知识,仅使用相对简单的文本分类范式和浅文本分析,相关任务(如罪名预测和法条预测)被独立对待、导致它们无法互相提升。
2. 模型介绍
2.1 注意力机制的优势
Bi-GRU + two-stack attention mechanism:综合学习案例表征,无需显式的其他人工标注。
本文使用two-stack attention mechanism来捕获事实描述对法条的隐对应关系。
在事实侧,使用句子级别和文档级别的Bi-GRU模型来编码事实描述文本(参考文献:Neural machine translation by jointly learning to align and translate),注意力机制用来捕获词语和句子之间的关系,以捕获全局和细节信息。
在法条侧,给定事实描述表征后,用注意力机制来用multi-label范式选择与案例最相关的法条。
2.2 模型整体架构
2.3 Document Encoder
2.3.1 Bi-GRU Sequence Encoder
图中2个encoder用的都是Bi-GRU4。
2.3.2 Attentive Sequence Encoder
直接使用Bi-GRU得到的双向GRU的向量在序列很长时难以捕获全部信息,使用平均值会使无用元素与重要元素被同等对待。参考5,本文使用context vector来attentively聚合元素,但除在嵌入事实时使用的全局context vector,在有额外guidance可用时动态生成context vector(就是指用事实对法条做attention那块)。
词级别和句子级别分别做attention。
参考文献:Document Modeling with Gated Recurrent Neural Network for Sentiment Classification和5
2.4 使用法条
由于法条太多,所以在法条上应用复杂模型太耗时,而且难以scale。
第一步:构建快且易scale的分类器来过滤大量不相关法条,并保留k个最相关的法条。
第二步:用神经网络来表征这k个法条,然后用article-side attention module来选取最相关的一些法条来做罪名预测。
2.4.1 Top k Article Extractor
将相关法条抽取任务视作multiple binary classifications任务,即为每个法条构建一个binary classifier,这样比较容易对新的法条建立新模型。
参考Predicting associated statutes for legal problems6的preliminary分类阶段,本文使用了基于词的SVM做分类器,速度快,在文本分类上表现效果好。(参考文献:Learning to Classify Text Using Support Vector Machines: Methods, Theory and Algorithms和Baselines and bigrams: Simple, good sentiment and topic classification)
使用BoW TF-IDF特征,卡方选择,线性核。
2.4.2 Article Encoder
使用与前文所述相同的ducoment encoder生成每个法条的表征,使用的是前述事实描述文本生成的context vector:
2.4.3 Attentive Article Aggregator
使用RNN(k个法条的顺序并不完全可靠,但是根据Matching Networks for One Shot Learning,无序情况下使用Bi-RNN来表征全局仍然有效)获取相关法条的共现倾向。
使用本博文2.3.2部分介绍过的attentive sequence encoder,attention还是用前文提及过的:
通过attentive sequence encoder生成的attention values可被视作每个法条对输入案例的相关性,可用于排序和过滤最相关的k个法条。
结果可视作罪名预测任务的法律基础。
2.5 输出
将concat向量(也可以仅使用事实侧或法条侧向量)通过2个连续的全连接层,然后用softmax分类器生成预测罪名分布。
用验证集决定阈值τ \tauτ,输出概率高于τ \tauτ的罪名视作正预测结果。
训练阶段的损失函数是交叉熵:
2.5.1 Supervised Article Attention
利用真实法条来在训练时监督法条attention:要求k个法条的article attention distribution模拟target article distribution(类似罪名分布的处理方式)
使用交叉熵:
3. 实验
3.1 数据集
本文使用的数据集是直接从中国政府网站裁判文书网7爬取的公开法律文书,从2013年开始。用50000个文档作为训练集,5000个文档作为验证集,5000个文档作为测试集。为了保证每一罪名都有充分的训练数据,仅分类在训练集中出现超过80次的罪名,触犯其他罪名的文档作为negative data(这个negative data应该是指在训练过程中作为负标签,因为模型是将每个标签作为一个二分类任务嘛)。
本文使用简单的规则自动提取事实描述、相关法律和罪名,其中罪名部分是通过人工收集的罪名名单来识别的,法条部分则是通过正则表达式:第[、零〇一二两三四五六七八九十百千0-9]+条(之[一二两三四五六七八九十])?)来抽取的。
如图所示:
在事实描述部分出现的罪名被mask掉了(这种情况很少见)。
法条来自中国刑法。
最终的数据集包含50种罪名,321个法条,平均每个案例的事实描述文本长383个词,平均每个案例对应3.81个法条,3.56%的案例是多案例的。
罪名分布不平衡,最多的5个罪名涵盖了超过60%的案例。
由于将事实匹配到每个罪犯上的标注代价很高,所以本文仅考虑了单被告场景。
3.2 实验设置
分词和词性标注工具:HanLP
词向量:在裁判文书、法学论坛网页和百度百科上训练word2vec8词向量,含573353个词语,100维。
对每个词性标签随机初始化50维向量,与词向量concat,作为最终输入。
Bi-GRU的GRU的维度是75,输出层的2个全连接层维度分别是200和150,k是20,β 是0.1,τ 是0.4。
优化器是SGD,学习率是0.1,batch size是8。
SVM用卡方选择选择最相关的200维特征。
3.3 主实验结果
出于分布不平衡的考虑,本文使用macro和micro两个层面的precision, recall和F1值。
比较基线:去掉article attention supervision(输出部分的那个),仅使用事实描述(类似5。但是多标签分类)/法条侧表征来实现罪名预测,和SVM。
具体分析略,考虑抽取噪音……之类的。
3.4 模型分析
3.4.1 Case Study
罪名间存在star-like confusion patterns:一个罪名会被误分类为多种罪名。
3.4.2 Article Extraction Results
略。
3.4.3 Performance on News Data
略。
4. 代码复现
等我服务器好了再说。
这个数据集非常肖似CAIL数据集,很多做CAIL数据集的也会复现这个模型作为baseline,等我服务器好了就在pytorch_ljp项目里复现一下这个模型。