一、过滤敏感词的常见做法
1.1 基于黑名单的过滤法
我们需要维护一个敏感内容的黑名单,黑名单的内容可以有如下的搜集方法:
- 从一些公开渠道获取常见的敏感内容存入黑名单;
- 通过客户标记举报的内容经筛选后存入黑名单;
- 通过自身业务场景划定一些敏感内容存入黑名单;
黑名单的存放可以选择多种数据结构,比如,如果数据量不是很大,那么可以考虑散列表、二叉树、Trie树等;如果数据量比较大的话,可以考虑使用位图配合布隆过滤器的方法;如果数据量很大而且对判断的准确性要求高的话,那就建议把敏感内容存放在数据库,由后端程序来进行校验,但是这样就只有在联网的时候且后端程序可用的情况下,才能正常工作。
优点:实现简单,方便数据量的扩展。
缺点:只能识别已经被黑名单记录的敏感内容,对新的内容无能为力。
1.2 基于规则引擎的过滤法
对敏感内容进行特性分析,总结出一些规则。比如涉及一些违法词汇的、要求别人加联系方式的、推荐投资理财产品的,只要内容满足其中的一个或者多个就可以认定大概率下该内容是敏感内容。
还有的情况我们并不知道哪些词会导致敏感内容,我们可以对大数据量的敏感内容样本进行分词统计,统计出来哪些词语在敏感内容中高频出现,其出现的概率远远高于在普通内容中出现的概率,那么这个词就是特殊敏感单词。同样的,对于要判断的内容,如果包含了一个或者多个这样的特殊敏感单词,那么就很大概率会是敏感内容。
优点:可以对未知的新的内容进行预判。
缺点:需要人工制定和更新规则,存在局限性。而且规则是可以被精心设计的内容绕过,从而导致误判。
二、使用朴素贝叶斯算法
朴素贝叶斯算法的核心内容就是下面这一个公式:

学过概率论的对这个公式应该非常熟悉。大致解释一下:
- 事件A发生的概率我们记为P(A),事件B发生的概率我们记为P(B);
- 在A发生的前提下,B发生的概率记为P(B|A);在B发生的前提下,A发生的概率为P(A|B);
- A发生的概率P(A)乘以P(B|A),等于,B发生的概率P(B)乘以P(|AB);
根据以上内容,我们就可以使用朴素贝叶斯算法来进行敏感内容的识别。
Step1:我们把内容进行分词,得到w1,w2,w3...wn这样一组特征项,那么判定当前这条信息是否为敏感信息的问题就转变成了,求解在w1,w2,w3...wn这样一组特征项存在的情况下,当前信息为敏感内容的概率,可以记为:P(敏感信息|w1,w2,w3...wn同时出现)
。
Step2:我们为了求解上面的概率值,利用朴素贝叶斯公式,就可以进一步把问题转化为求解:
P(敏感信息|w1,w2,w3...wn同时出现)=P(w1,w2,w3...wn同时出现|敏感信息)*P(敏感信息)/p(w1,w2,w3...wn同时出现)
Step3:求解P(w1,w2,w3...wn同时出现|敏感信息)
,我们知道独立事件发生的概率计算公式为P(AB)=P(A)*P(B)
,所以这个概率可以转化为求解如下的问题:
P(w1,w2,w3...wn同时出现|敏感信息)=P(w1|敏感信息)*P(w2|敏感信息)*P(w3|敏感信息)*...*P(wn|敏感信息)
P(wn|敏感信息)的概率值我们是可以借助统计样本来获取的,只要样本足够大,足够客观,那么概率值就具有很高的准确性。
Step4:求解P(敏感信息)
,这个也不难,在总的样本中,样本数量为n,其中判定是敏感信息的个数是m,那么P(敏感信息)=m/n
;
Step5:求解p(w1,w2,w3...wn同时出现)
,也可以按照Step3的样子,拆成独立事件的乘积,由此,我们就可以得到最初想要求解的目标值了。
三、总结
如上基于黑名单、规则引擎、朴素贝叶斯是过滤场景中常用的三种方法,可以运用在拦截和过滤敏感词、垃圾短信、垃圾邮件等领域。
我们甚至可以同时运用这三种方法,当其中两种或者三种都表明目标内容是敏感内容时,才判定其是敏感内容,这样的话就会更加地精准。当然,在实际的使用场景中,准确率还受样本的大小和特定决定,我们需要大量的实验和不断地调整策略来提高准确率。
网友评论