色情文章检测
背景
信息爆炸是当今互联网的一大特征,人们可以在互联网上搜索到各种各样的信息。互联网因为其传播的便利性,也成了很多作者发表文章的地方。现如今很多知名的作者都是通过发表网络小说而依据成名,包括我最喜欢的网络小说作家之一——天下霸唱。同时很多经典的名著也被制作成了电子书,方便人们阅读。
但是,有些作者发表的文章充斥着色情与暴力,一旦被青少年看到,会产生难以想象的后果。我们需要对网络上的文章进行检测,以标记出其是否为色情文章,如果是,那么我们就要将其过滤不予显示。而人工检测在信息爆炸的今天几乎不可能实现。所以,我们提出了基于神经网络的色情文章检测。
具体的模型工作原理可以参考我翻译的一个关于NLP中CNN研究的博文 。
数据
我们的数据保存在csv文件中,共两列,分别是:
- label:
- 1:色情文章;
- 0:非色情文章;
- fiction:数据。
其中色情文章11999篇,非色情文章11749篇,共23748篇文章。
数据处理
因为色情文章中往往会有较多的标点符号,而且网络小说中也会有各种乱码存在,对我们提取特征造成困难。所以,我们先把文章中的特殊字符与标点符号去掉。
然后,我们考虑到一篇小说可能会有上万字甚至更多。而文本卷积神经网络要求所有输入数据有一个统一的长度,如此长的数据对计算压力要求太高。而且如此长的数据对于模型来说没有很大意义。
考虑到一篇文章内,往往中间部分的内容比较能够代表本篇文章的主旨,所以我们数据的选取方式如下所示:
- 如果文章大于3000个词,则选取中间的1500个词;
- 如果文章小于3000个词,但是大于1500个词,则选取最后1500个词;
- 如果文章不大于1500个词,则利用特殊符号补全到1500个词。
我们的数据是中文数据,不像英文单词可以利用空格进行区分单词。我们使用的 jieba 库对文章进行分词。
将选取好的数据转换成数字后,文章数据如图所示:
模型
其中conv1的卷积核大小为2,也就是对嵌入矩阵的相邻两行进行卷积计算,conv2的卷积核大小为3,conv3的卷积核大小为4,conv4的卷积核大小为5。每个卷积的维度为2,也就是有两个大小相同的卷积核进行卷积。经过卷积之后生成了两个14991向量,两个14981向量,两个14971向量,两个14961向量。
在池化层对8个向量进行最大池化,分别从每个卷积提取出1个特征值。将8个特征值拼接成一个8*1维向量,至此,我们就把文章中的特征提取出来了。
最后,我们将提取出来的特征送入softmax层进行分类,获得最终结果。
神经网络具体工作流程见翻译的博文。
训练
参数设置
- batch_size = 16
- 循环次数 = 3
- 学习率 = 0.005
- 嵌入矩阵维度 = 32
交叉验证机与测试集选取
我们选取2000条数据作为测试集,剩余数据作为训练集。
然后在每次训练循环中随机抽取剩余数据的10%作为交叉验证集。
Accurate变化
可以看出,在训练稳定之后,训练集上的准确率保持在90%以上,平均准确率在98%以上。
在交叉验证集和测试集的平均准确率也在98%以上。
—— by yudake.
github地址:https://github.com/yudake/porn_fiction_classify
原文地址:http://yudake.xin/articles/2018/02/22/1519289676946.html
相关推荐
-
统计学习基础复习浓缩版 科学计算与大数据
2019-8-27
-
circular barplot(环状柱形图) 科学计算与大数据
2019-8-29
-
走进金融数据分析世界 科学计算与大数据
2019-10-10
-
7 款 Python 数据图表工具的比较 科学计算与大数据
2019-2-21
-
Pyechart入门 科学计算与大数据
2019-2-16
-
R实例:limma包分析Agilent 4x44K Arrays 科学计算与大数据
2019-8-29
-
Shiny生产环境部署与共享 科学计算与大数据
2019-8-29
-
用Python做地图投影 – 多面孔的世界 科学计算与大数据
2019-4-27
-
「Debug R」为什么你需要保持R包是最新的? 科学计算与大数据
2019-8-28
-
R小姐:描述性统计分析 科学计算与大数据
2019-8-28