V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
SlipStupig
V2EX  ›  程序员

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

  •  
  •   SlipStupig · 2020-02-20 11:14:19 +08:00 · 8110 次点击
    这是一个创建于 1720 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    第 1 条附言  ·  2020-02-20 18:37:29 +08:00

    各位说买服务的兄弟,如果花钱能解决,我只需要劝一劝老板,花钱还是解决不了怎么办? 至于说加入审核,我们公司根本不是什么大公司,没有从事审核的人员,也养不起

    目前由于前期一些机制不完善,无法做到行为审计,文本审计这块能也不要求做到100%,能到90%+就行,还是希望各位能多给一些文本分类的建议

    71 条回复    2020-02-27 15:52:59 +08:00
    xfelix
        1
    xfelix  
       2020-02-20 11:19:14 +08:00
    不要光考虑评论内容,试着从其他特征入手,比如 ip 地址,client type 等。
    mcone
        2
    mcone  
       2020-02-20 11:20:40 +08:00
    之前做过一个类似的,首先我觉得你们思路就不太对
    > “但是太容易绕过了”
    你们不能简单粗暴地直接拒绝提交评论或者直接屏蔽掉,而是应该让这段内容不对其他用户显示,对发布 spam 的真人 /bot 透明,这样就能轻松很多了

    至于模型,我也没有特别好的 idea,之前被折磨地很痛苦,对“在别人的大段真实评论里插入几个字(甚至是火星文)”的广告,我至今都没什么好想法……
    murmur
        3
    murmur  
       2020-02-20 11:21:23 +08:00   ❤️ 1
    关评论,筛选,实名
    feng12345
        4
    feng12345  
       2020-02-20 11:23:14 +08:00
    看下市面上有没有合适的商用产品,有时候花点钱还是挺值得
    SlipStupig
        5
    SlipStupig  
    OP
       2020-02-20 11:26:45 +08:00
    @murmur 关评论我会被骂死的。。

    @feng12345 公司穷不可能额外花钱
    SlipStupig
        6
    SlipStupig  
    OP
       2020-02-20 11:28:41 +08:00
    @xfelix 能说的具体一点嘛
    huayumo
        7
    huayumo  
       2020-02-20 11:31:12 +08:00
    发帖审核,要么关键字过滤,不然这产品迟早要完,要么加强账号审核,登录什么的
    cmdOptionKana
        8
    cmdOptionKana  
       2020-02-20 11:32:36 +08:00
    提高注册门槛,封号。这样广告账号的注册成本提高了,自然就会减少。(比如需要做一些任务才能发评论)
    learnshare
        9
    learnshare  
       2020-02-20 11:33:53 +08:00
    不审核,轻则暂停访问整改,重则永久封掉
    murmur
        10
    murmur  
       2020-02-20 11:39:31 +08:00
    你们是大陆地区的产品么,没有审核没有实名制是严重问题
    xuanbg
        11
    xuanbg  
       2020-02-20 11:41:59 +08:00
    评论的套路难道不都是审核后才能让别人看得到吗?然后问题就变成了怎么审核的问题。一般来说都是机器为主人工补充。就是符合通过和驳回规则的直接就通过或驳回了,剩下的人工来审核。
    SlipStupig
        12
    SlipStupig  
    OP
       2020-02-20 11:42:24 +08:00
    @murmur
    @cmdOptionKana

    目前这个情况没办法实名验证,之前弄了手机验证,好像完全没用
    cmdOptionKana
        13
    cmdOptionKana  
       2020-02-20 12:10:00 +08:00
    @SlipStupig 没有实名制,广告还算小事情了,万一被人家搞,给你发敏感词,再一举报。
    Juszoe
        14
    Juszoe  
       2020-02-20 12:15:00 +08:00
    同意二楼,这种很类似贴吧
    SquirrelMAN
        15
    SquirrelMAN  
       2020-02-20 12:47:34 +08:00
    有个 iOS 应用 熊猫吃短信 过滤垃圾文本做的非常好
    bitholic
        16
    bitholic  
       2020-02-20 13:04:59 +08:00 via iPhone
    如果有资金,可以考虑第三方反垃圾服务
    WebKit
        17
    WebKit  
       2020-02-20 13:14:08 +08:00 via Android
    大陆地区的评论没有实名,你们怕是要被永久封停
    fonlan
        18
    fonlan  
       2020-02-20 13:22:32 +08:00 via Android
    用这些嵌入式文本继续训练你的模型啊,另外可以用模型给出一个疑似度值,高于某个门限的需要人工审核
    Cbdy
        19
    Cbdy  
       2020-02-20 13:27:02 +08:00 via Android
    朴素贝叶斯解君愁
    qq316107934
        20
    qq316107934  
       2020-02-20 13:32:41 +08:00
    新注册账号 2h 内禁止发言,账号需要验证邮箱,发帖需要验证码,发帖量在 3 个以下的需要手动发表审核。我就不信还有。
    fantastM
        21
    fantastM  
       2020-02-20 13:32:57 +08:00
    学习一下 t66y 社区的管理方式
    dayeye2006199
        22
    dayeye2006199  
       2020-02-20 13:35:27 +08:00
    试试中文分词+fasttext。这种模型使用了 ngram,所以 棋牌,游戏 这种 2-gram 可能可以被模型捕捉到。

    如果在 fancy 一点上深度学习: https://github.com/facebookresearch/pytext
    iConnect
        23
    iConnect  
       2020-02-20 13:39:16 +08:00 via Android
    你用机器算法屏蔽,别人也会机器算法反屏蔽,猫和老鼠的游戏。除非你的数据特别大,否则很难彻底杜绝 Spam
    opengps
        24
    opengps  
       2020-02-20 13:48:28 +08:00
    先买成品敏感词过滤服务,现学来不及
    tfdetang
        25
    tfdetang  
       2020-02-20 13:48:51 +08:00
    可以用一个半监督的流程,让机器不停的自己标数据,然后人工抽样复合,再用这些数据生成模型,形成一个正向循环
    DoubleShut
        26
    DoubleShut  
       2020-02-20 13:51:03 +08:00
    评论,加验证码
    DoubleShut
        27
    DoubleShut  
       2020-02-20 13:51:12 +08:00
    行为验证码
    littiefish
        28
    littiefish  
       2020-02-20 13:59:56 +08:00 via iPhone
    屏蔽,棋牌,真人,娱乐,一对一,收益,兼职
    sethverlo
        29
    sethverlo  
       2020-02-20 14:01:11 +08:00
    亲测显而易见的问题,中文分词 + fasttext 效果拔群,训练速度也快,不用 gpu
    pythonee
        30
    pythonee  
       2020-02-20 14:09:31 +08:00
    这个之前个人博客也很多类似的,应该有一些评论插件或软件吧
    flavoury
        31
    flavoury  
       2020-02-20 14:10:27 +08:00
    你可以看看熊猫吃短信---我没说这个可以解决问题,或许能提供给你一些思路
    zscself
        32
    zscself  
       2020-02-20 14:14:55 +08:00
    我也是刚接触机器学习,有哪里不对的欢迎指出。楼主你这个算是传统的机器学习方法了吧。我觉得你可以换成神经网络试一试?词嵌入加神经网络,如果样本足够大的话。比如最初级的文本分类问题-情感分类器的一种实现就是 word2vec 来进行词嵌入,然后交给神经网络( RNN、LSTM、CNN 都可以)来生成句子向量来进行判断。
    zgzhang
        33
    zgzhang  
       2020-02-20 14:47:15 +08:00   ❤️ 3
    @SlipStupig 以下是我做过的 UGC 内容的风控工作的一些经验,你看下是否有帮助:
    1. 无论是正则 match 敏感词或者分词+native bayes 甚至神经网络,如果想绕过一定能绕过,想想异形字、拼音混合、火星文等等,如果支持图片那就更是噩梦,OCR 就是一个非常大的问题。
    2. 业界的基本操作基本上都是模型打分,分数不仅仅是依赖内容自身可能还有用户的一些历史行为维度,超出阈值部分人工审核,再审核通过前,仅作者可见(那些自以为沙发的评价)
    3. 换个维度解决问题,针对违规用户一定要处罚,禁言、封号,不然永远都是对抗
    4. 提高用户门槛,包括注册门槛,发言门槛,总之要提升成本
    5. 风控策略防止及其行为和团伙作案,IP、设备维度等维度的限制等
    6. 完善的应急制度,针对极度敏感内容要有预案能快速删除,以防封站
    swulling
        34
    swulling  
       2020-02-20 14:56:38 +08:00 via iPhone
    思路转变下

    第一提高评论门槛。发评论需要用手机号登录新用户 2 小时只能发一条评论。一天内评论超过三天上复杂验证码。
    第二增加封禁机制,发现一条封一个手机号,来源 ip 封 48h,也是提高 spam 门槛。
    第三机器审核和人工审核并行。算法很多很成熟了,重点是思路转变,要识别正常评论,而不是广告评论。火星文,异形字很容易从正常评论筛选出来。然后调低阈值,用人工标注不断的喂数据进去。也可以购买专门的标注服务,不贵。
    summerwar
        35
    summerwar  
       2020-02-20 15:21:06 +08:00
    如果评论之后审核才显示,那么就无利可图,他们也就不发了,因为发了也没用。

    审核的时候挑正常的显示就好了
    danhahaha
        36
    danhahaha  
       2020-02-20 16:14:22 +08:00
    分词+贝叶斯算法

    然后人工添加几百个评论学习

    这种最直接简单了,曾经帮一个论坛搞了一个插件,从此各种广告绝迹
    RangerWolf
        37
    RangerWolf  
       2020-02-20 16:18:57 +08:00
    不知道你有没有看过阿里云或者百度的接口,这种接口几乎不要钱。。。
    xupefei
        38
    xupefei  
       2020-02-20 16:42:51 +08:00
    屏蔽 spam 而已还自己动手训练?现成的 Akismet 有啥不能满足的需求吗
    SlipStupig
        39
    SlipStupig  
    OP
       2020-02-20 17:32:43 +08:00
    @zgzhang 绕过是能接受的,我需要能干掉 85%以上的就行。现状是:
    垃圾文本干不掉,正常用户被干扰。

    我很想知道你们是基于何种 metric, 对模型进行打分的? 希望能透露一二


    @zscself word2vec 如果在正确分词的情况下可能会很好,但是对方发的词千奇百怪,基本上人阅读都困难,你的 word embedding 可能会很 hit hard😭
    id7368
        40
    id7368  
       2020-02-20 17:38:05 +08:00 via iPhone
    先审后发 一个月就没人拿脚本刷了
    shm7
        41
    shm7  
       2020-02-20 19:24:59 +08:00 via iPhone
    前面有人讲过 fasttext 了,本质是一种结构稍微简单点的 nn,词向量平均一下做特征,代替 tfidf。

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

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

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

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

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

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

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

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

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

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

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

    简单一招就干掉了 90%的广告。
    shm7
        61
    shm7  
       2020-02-21 09:19:37 +08:00 via iPhone
    文本分类本身有很多模型和研究了,套不套得上靠你自己了。模型+规则匹配应该更靠谱
    fiht
        62
    fiht  
       2020-02-21 09:29:37 +08:00   ❤️ 1
    各位说买服务的兄弟,如果花钱能解决,我只需要劝一劝老板,花钱还是解决不了怎么办? 至于说加入审核,我们公司根本不是什么大公司,没有从事审核的人员,也养不起
    -------------------------------
    找售前要个试用,万一能解决呢?腾讯云天御了解一下 https://cloud.tencent.com/product/tms
    SlipStupig
        63
    SlipStupig  
    OP
       2020-02-21 09:55:31 +08:00
    @encro 总算有个说到正题上的人了,十分感谢!
    loryyang
        64
    loryyang  
       2020-02-21 10:03:08 +08:00
    这个真的很难,我不知道你评论有多少,不多的话,还不如雇一个人专门来删。先用程序简单定性一下,然后给人来过
    这个 spam 评论别看好像很简单,但是要全部干掉也不容易,至少需要一个小团队来专门解决
    yzc27
        65
    yzc27  
       2020-02-21 10:20:45 +08:00
    文本分类试一下 fasttext
    zjuster
        66
    zjuster  
       2020-02-21 10:52:31 +08:00
    你的思路还停留在针对问题发生的事后分析。
    一般成功防治的经验是
    1、购买第三方服务;
    2、评估评论的用途,非生存必备,关闭评论(大概某部门还没找过你们);
    3、自己聘用专门的外包进行处理和服务(结合第 2 条,有 UPGC 内容的平台,有关部门是有要求进行有效防范措施,否则可以惩罚至关停网站)
    4、要求实名认证等手段,加大垃圾评论发送的成本
    等等

    如果你还坚持自己处理的,花点时间看下垃圾内容的特征,然后收集这些内容输入用户的物理特征:账号字段、头像、ip 字段、电话号段、活跃时间等等,做用户风控模型。

    你可以看看 微博公众号 半佛仙人
    facert
        67
    facert  
       2020-02-21 13:43:11 +08:00
    建立一个完整的反作弊系统,从前期数据收集到后期屏蔽方式都需要一个过程。算法模型是可以检测出一些垃圾文本,但也需要一定数据量学习的过程。针对楼主的问题,其实最简单快速的还是关键词策略,对于单一团伙,他们为了达到辨识度再加上机器发布,整体关键词分布都有规律,几种关键词匹配策略一上,基本能干掉 90% 。 前提是做好文本的预处理(简繁转换,数字转换,html 文本提取)。
    gladuo
        68
    gladuo  
       2020-02-21 14:45:11 +08:00
    如果考虑自己做,且有人力标注数据,模型部分可以考虑 fasttext,达到了成本和效率比较好的平衡; nlp 相关问题可以回复我,可以给你一些专业建议;
    如其他网友所说,基于 ip id 时间屏蔽,可能是更立竿见影的手段;
    解决猫和老鼠的问题,首先还是要想清楚老鼠的动机是什么,能让他就算绕过 spam detection 也没有很大的收益的策略是什么,类似增加账号系统,账号需要有一些非常 postive 的评论,通过审核,认为是 human 用户,才会展示别的评论,有 2 条被判为 spam,整个账号所有评论都被隐藏,类似这样的一些策略,让老鼠觉得非常辛苦,边际效应非常低,他就没有动力去做了;
    62D0oo7AxBv8qn17
        69
    62D0oo7AxBv8qn17  
       2020-02-21 17:00:11 +08:00
    如果是 wordpress 的话,可装个 Akismet Anti-Spam 插件,效果出奇的好
    SlipStupig
        70
    SlipStupig  
    OP
       2020-02-22 00:49:40 +08:00
    @gladuo 能加个微信详聊不😊
    gladuo
        71
    gladuo  
       2020-02-27 15:52:59 +08:00
    @SlipStupig Z2xhZGR1bw==
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3118 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 14:01 · PVG 22:01 · LAX 06:01 · JFK 09:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.