被 spam 评论给弄疯了,如何有效的建立机器学习模型呢?

2020-02-20 11:14:19 +08:00
 SlipStupig

公司产品评论区里面老是出现一些乱七八糟的评论,开始用正则表达式,但是太容易绕过了,而且还容易误杀。 后来用了 tfidf+native bayes 做个一个模型,开始还行,后来出现了一些内容嵌入发帖,例如:

深度考察. 2019 年 10 月 23 日 23:16.棋牌游戏一对一真钱_新布丁娱乐大厅拼三张可以作弊吗. 关于棋牌游戏一对一 883321.com 真钱的 创新是民族进步之魂,创新型青年人才是国家的未来。周女士也想提醒广大家长,在孩子入学的问题上,一定要 ... 障用户更加便捷地在快手记录分享生活、学习、娱乐和社交,甚至获得经济收入。

这种类似的文本,使用 tfidf 去提取文本特征,提取出来的特征基本上对这种文本没有什么用,大家有什么好的办法嘛

8208 次点击
所在节点    程序员
71 条回复
shm7
2020-02-20 19:24:59 +08:00
前面有人讲过 fasttext 了,本质是一种结构稍微简单点的 nn,词向量平均一下做特征,代替 tfidf。

你可以试试 fasttext 或者其他网络模型训练,比如扔一个 2 层 lstm+attention 的结构。

还有一点,用模型训练的话,数据不能太少了。你得懂 train val test 数据集合怎么一回事。按你的描述,隔一段时间,你得重新加入新数据训练。
encro
2020-02-20 19:26:54 +08:00
比如参考 v2,注册后需要一天才能发信息;
比如参考恩山,需要邀请或者花钱才能注册;

33 楼的可以根据实际情况,找到办法解决。
shm7
2020-02-20 19:29:14 +08:00
tfidf 首先就涉及分词、词语粒度。中文天然不具备很好的分词、词性标注,比起英语。所以你提取词频、tfidf 的特征可能会受到影响。

也可能你数据太少。一般要 1w 到几万条数据。
encro
2020-02-20 19:32:24 +08:00
重要的是你连自己要防的是对象人还是机器都没有确定。

假设对方是人,如果你不提高注册门槛,根本没法用机器的方式防住,

贴吧,V2 很多论坛都有人工复审
encro
2020-02-20 19:47:44 +08:00
要自动发现垃圾信息,不用机器学习,简单分词即可:
1,比如将所有历史垃圾内容进行分词,抽取特征词库(其实也可以人工建立和导入网络上的词库);
2,对发布的内容进行分词,如果发现特征词超过一定数量,且存在疑似联系方式的的(这点很重要,因为都会留联系方式,而识别联系方式很简单,甚至有这一点你分词可以不做),直接进入待审核,用户账号进入禁言状态;

但是必须还需要提高作案成本,比如:
1,防止自动发帖工具(验证码,手机注册);
2,防止人工发垃圾帖( IP 黑名单,手机号黑名单);
dadieshaonian
2020-02-20 20:13:20 +08:00
单说模型,为什么不用 bert ?我很奇怪。。
missdeer
2020-02-20 20:23:33 +08:00
先看看 Akismet 满不满足要求,人家干这行好多年了,好多年前就工作得非常好
zbz
2020-02-20 20:54:57 +08:00
之前做过相关的 spam 过滤(工程应用,算法没深入研究),简单总结一下:
1. 如果要准确率(95%+),那么召回率会比较低;反之误伤比较大
2. 如果 spam 的内容类别优先,那么用规则准确率+召回率都非常高;当然规则不是简单的正则了,当时实现了一个简单的 DSL 来描述规则,例如出:
encro
2020-02-20 21:18:08 +08:00
新鲜出炉的 BLOG 文章:
论坛和社区如何防止垃圾文章和评论: https://c4ys.com/archives/2058

包含:
通过关键词库识别 spam 内容
通过联系方式特征识别 spam 内容
通过用户身份识别 spam 内容
通过操作特征识别 spam 内容
识别后的处理
开源方案
商业方案
stabc
2020-02-20 21:21:36 +08:00
有个 stopformspam 的网站,有 SPAM IP 列表,有接口,英文站我试过很好用。
SlipStupig
2020-02-20 21:40:07 +08:00
@encro 关键词库基本上别想了,各种符号被绕过,还出现拼接的:弓虽, 行为数据没有,注意看我的 append
SlipStupig
2020-02-20 21:42:53 +08:00
@shm7 数据挺多的,tfidf 是基于文本加权,而目前 spamer 要表达的文本 tf-idf 值很低
wangyzj
2020-02-20 21:51:51 +08:00
我昨天刚买了 spam 午餐肉
看到了 spam 就点了进来
encro
2020-02-20 22:43:20 +08:00
@SlipStupig

曾经负责两个世界排名 1000 以内的社区,
每天发布内容条数十万以上吧,
识别联系方式过滤是最有效的,
逐渐优化后达到 95%以上。

既然是小公司,追求智能不一定划算,因为样本不够,且调试过程比你逐渐完善过滤机制代价更大。
当然如果是公司事少、不考虑成本、或者学习目的,那么肯定是可以的。
我文章中开源方案提到一个,我没有实际使用过,[使用 TensorLayer 训练一个垃圾文本分类器] https://github.com/pakrchen/text-antispam
Eleutherios
2020-02-20 23:56:53 +08:00
熊猫吃短信是开源的么
Marmot
2020-02-21 00:02:44 +08:00
1,人工审核是绕不开
2,考虑从根源解决,spam 需要通过特征来下手,封账号
nobird
2020-02-21 00:25:37 +08:00
有些第三方 spam 检测服务的。百度就有。
DevRoss
2020-02-21 00:56:27 +08:00
异常检测(领域外检测,out of domain detection )这个估计是你要的关键词
siyemiaokube
2020-02-21 02:33:10 +08:00
1.提高对方连续发言的成本
2.提高对方识别发言是否通过的成本
lihongming
2020-02-21 04:16:41 +08:00
打蛇打七寸,不用认识蛇,认识七寸就行了。无论他们拿什么混淆,最终总要把用户引导到他们的联系方式(网址、电话号码之类的),所以识别这个就行了。

我以前是做了个库,把各种英文字母和数字的火星文都转成正常字母和数字,然后用正则检查有没有类似于网址和电话号码的子串,有就进入人工审核。

简单一招就干掉了 90%的广告。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/646050

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX