业务背景
背景:某金融APP的有料社区中,存在潜在用户发布垃圾信息(敏感、广告)等信息,需要构建一个文本分类模型进行相应拦截。
业务特点:广告占主要部分,含有微信、借贷、基金、股票等,敏感占次要。
我遇到的问题:前期获取数据量少,需要人工处理,需要自定义分词词库和主题词词库,文本预处理过程复杂,需要全方位思考。
数据准备
- 先来看看数据的模样:
- 正常:
![基于贝叶斯分类器的社区UGC反垃圾模型_第1张图片](http://img.e-com-net.com/image/info8/6b8a923520224ce0ae47d87721e3f086.jpg)
- 广告:
![基于贝叶斯分类器的社区UGC反垃圾模型_第2张图片](http://img.e-com-net.com/image/info8/56c2bfcf99554cb2bc1d86e9cc5a4aa2.jpg)
- 训练数据量:不便透露,使用过采样对样本少的类别进行数据集扩增。
主体思路及具体实现
- 主体思路:灵感来源于论文,使用基于词的过滤和贝叶斯分类器。
- 流程:
- 训练离线分类模型:训练数据集 —> 文本清洗 —> jieba分词去停用词 —> 使用TF-IDF构建词向量 —> 使用NB算法结合K折交叉验证训练二分类模型(广告/非广告)。
- 在线分类:训练数据集 —> 文本清洗 —> jieba分词去停用词 —> 使用TF-IDF构建词向量 —> 使用分类模型进行分类,标记广告类,对非广告类别使用敏感词库直接判别,标记正常和敏感信息。
- 文本清洗详解:
分为以下几个方面:特殊符号、日期、特殊字体字、拼写错误、电话、QQ、微信号、股票、拼音、基金号,以上各自都有各自的处理方式。比如特殊符号和日期直接去除,微信、QQ等广告关键信息的统一等等。
- 定制词库:
定制了以下词库:停用词词库、敏感词库。
TF-IDF算法存在的问题
- 以词频衡量一个词的重要性不够全面;
- 算法无法体现词的位置信息。
总结
我在三个月的实习过程中,接触到了完全真实的业务场景,这是我以前所没有的。
虽然这个模型部署到线上之后效果还不错,但是回想起来还有很多值得改进的地方,也有很多想做的尝试。
尝试和改进的地方:
- 图片的处理;
- 增加对用户行为的挖掘。
社区反作弊文章
https://blog.csdn.net/joylnwang/article/details/6831565
https://www.zhihu.com/question/20103086
https://www.jianshu.com/p/065fb03cf921