任务描述
给你一个文本描述,推测相应的罪名。
比如:2010年7月2日21时许,被告人苏学君酒后独自一人走路去其妹妹苏某某家洗澡,当走到与其有矛盾的同村周某某家附近时,看见周某某站在门口,便走到周某某家门口,与周某某发生打斗,在打斗过程中,被告人苏学君用随身携带的刀刺中周某某腹部一刀,后逃离现场。周某某经送医院抢救无效死亡。
输出:故意伤害罪(注意,这是多标签分类任务。)
数据介绍
给定有573条犯罪事实与罪名的csv文件,如图1所示。
图1 犯罪事实与判决罪行
实验过程
要对一个中文文本进行分类,我们需要将文本用向量表示,再利用网络学习文本的表示,进而进行文本的分类。
文本向量化
为了将一个文本用一个向量表示,我们先对其进行切词,去掉其中的停用词,再建立词袋,向量化文本。
切词(也称为分词或词切分)是将连续的文本(如句子或段落)分解为单个的词汇单元的过程。停用词(Stop Words)在自然语言处理(NLP)中指的是在文本中频繁出现但通常不包含太多实际意义的词汇,如“的”、“是”、“在”等。这些词汇在文本中的存在虽然对语法结构有重要作用,但是对于案件的判决,这些词并没有多大的意义。图2展示了一句话切词,去停用词后的结果。
图2 切词,去停用词后的结果
为了向量化表示文本,我们首先要数字化词语。那就需要建立词袋。词袋就是一个词语字典,字典里记录了词语到具体数字的映射。但我们不是用字母顺序去排序词语,是采用词频方式,即该词越是高频,该词对应的数字越小。有了词袋后,我们就可以将文本向量化表示,如图3所示。那为什么有这么多0呢?因为,每个文本的长度不是固定的,我们一般选择一个比较大的长度作为每个文本向量的长度,那么没有词语的地方就填空字符,而该字符的表示恰好是数字0.图3 文本向量化表示
为了学习每个词语的表示,我们将文本转化为one-hot的矩阵,如图4所示。图4 文本转为one-hot矩阵
那么标签如何处理呢?同样的,我们建立一个罪名的字典,将罪名映射到数字,转为one-hot表示。罪名分类是多标签问题,对于一个事实可能会有多个罪名,我们只需要将对应事实不同罪名的one-hot表示相加,就得到了该事实的标签。
数据集的划分
为了进行公平的测试,我们将数据集划分为训练集,验证集和测试集,分别占比85%,10%,5%。
句子表示学习
我们采用两种深度学习方式,一种是直接将文本表示送入MLP进行预测,另一种采用自注意力+Gated网络方式。
MLP方式
如图4所示,一个文本可以表示为一个one-hot矩阵,其大小是112*1435. 因为我们设置文本长度为112并且词袋大小为1435. 通过一个线性层和ReLU激活函数,文本表示矩阵被转换为112*256。第一行对应的就是第一个词语的表示,我们将它得到的词语表示拼接起来,就得到了文本的表示,即一个文本对应112*256维的向量。再经过一个全连接神经网络,我们可以得到最终分类的结果。
自注意力+Gated网络方式
由于自注意力可以捕捉序列内部不同词语之间的依赖关系。我们将文本矩阵投影到256维后,送入若干的自注意力层。在我们模型中,经过了两个自注意力层后,得到了112*512的文本矩阵。那么如何将文本矩阵得到最终的文本向量呢?由于门控网络可以有效的进行特征融合,因此我们使用门控网络得到一个512维的向量作为最终的文本表示。通过一个全连接神经网络,我们可以得到最终的最分的结果。(PASS:模型图懒得画了,比较简单,xdm GitHub直接一看便懂)
模型损失与优化
交叉熵损失函数被用于计算上述模型的损失,如下述所示,
其中,是第个样本的标签的第个属性值,是模型预测的第个样本有第个标签的概率,为标签总数。 我们采用adam算法对我们模型进行优化。
结果评估
评估指标
分类常见的指标有准确率、精度、查全率、ROC曲线、PR曲线等。我们处理的是多标签分类问题,需要对每个标签单独计算,最后取平均作为最终结果。下面列表一些指标的计算。
- 准确率(Accuracy) 衡量所有标签被正确分类的比例。但在多标签分类中,只有当所有标签都预测正确时,才计算为一个正确的预测,因此可能过于严格。
- 精确率(Precision) 在所有被预测为正类的样本中,真正为正类的比例。在多标签分类中,需要针对每个标签单独计算。
- 召回率(Recall) 在所有真正的正类样本中,被正确预测为正类的比例。同样,多标签分类中需要针对每个标签进行计算。
模型评估
如表1所示,我们可以看出简单的MLP模型,学习时间很短,但是效果不如自注意力+Gated网络方式。这表明自注意力方式确实可以捕捉序列内的依赖关系,门控网络可以有效融合词语表示得到良好的文本表示。由于我们数据集比较小,这也限制了我们模型的表现,如果有更充分的数据进行训练,相信注意力+门控的模型会取得更好的效果。
表1 不同模型的评估结果
表2 不同模型各个罪名下的混淆矩阵
图5 MLP 网络下各个罪名的 AUC 和 AUPR
图6 自注意力+Gated 网络下各个罪名的 AUC
代码
具体代码,请参见我的github.
参考文献
[1] Ashish Vaswani, Noam Shazeer, Niki Parmar, Jakob Uszkoreit, Llion Jones, Aidan N. Gomez, Łukasz Kaiser, and Illia Polosukhin. 2017. Attention is all you need. In Proceedings of the 31st International Conference on Neural Information Processing Systems (NIPS'17). Curran Associates Inc., Red Hook, NY, USA, 6000–6010.
[2] 动手学习深度学习.pdf