网易首页 > 网易号 > 正文 申请入驻

IM全文检索技术(五):vivo敏感词匹配系统的技术实践

0
分享至

本文作者vivo互联网服务器团队Liang Kangwu,有修订。

1、引言

编者注:本文虽不是专门的全文检索技术文章,但文中涉及到的字词匹配算法等等都是一脉相承,所以也同样收录到了“IM全文检索技术”技术专题中,希望能给你启发。

谛听系统是vivo的内容审核平台,保障了vivo各互联网产品持续健康的发展。谛听支持审核多种内容类型,但日常主要审核的内容是文本,下图是一个完整的文本审核流程,包括名单匹配、敏感词匹配、AI机器审核、人工审核四个环节。待审核文本需要顺次通过名单匹配、敏感词匹配、AI机器审核三个流程,若结果为嫌疑则需要人工审核,否则将直接给出确定的结果。



敏感词匹配功能可以迅速地匹配文本中的敏感词汇,算法平均耗时为50ms,因其简单、快速、直接、灵活的特点,成为了审核人员对抗垃圾文本的利器。然而身处信息爆炸时代的网民们非常“优秀”,他们源源不断的发明各种新词、谐音词来绕过敏感词检测。例如某些用户会使用“啋票”、“采漂”等词汇来规避敏感词“彩票”,其中“啋票”不仅是谐音词,还包含多音字,常规的模式匹配算法很难保证完全命中。这不仅给运营规则带来挑战,也对匹配算法的精准度、漏杀率提出了要求。

本文将从算法选型入手,结合两个实际场景来介绍谛听系统的敏感词匹配算法。包括底层算法选型思路和两种实际场景下提升敏感词精准度、降低漏杀率的方案。



2、系列文章

本文是专题系列文章中的第5篇:

  1. 《IM全文检索技术(一):微信移动端的全文检索优化之路》
  2. 《IM全文检索技术(二):微信移动端的全文检索多音字问题解决方案》
  3. 《IM全文检索技术(三):网易云信Web端IM的聊天消息全文检索技术实践》
  4. 《IM全文检索技术(四):微信iOS端的最新全文检索技术优化实践》
  5. 《IM全文检索技术(五):vivo敏感词匹配系统的技术实践》(* 本文
3、敏感词匹配算法选型

敏感词匹配功能依托于模式匹配算法。模式匹配的定义是,给定一个子串,在某个字符串中找出与该子串相同的所有子串。其中给定的子串被称为模式串,被匹配的字符串被称为目标串。基于多个模式串进行匹配的算法被称为多模式匹配算法,目前成熟的多模式匹配算法有AC自动机和WM。

3.1 多模式匹配算法对比



谛听的敏感词匹配业务有如下特点:

  • 1)词库量大,需要维护和加载百万级别的词库(模式串);
  • 2)敏感词与业务特性、国家政策相关性强,无法统一约定长度、前缀等特征。

WM算法对模式串的长度和前缀存在一定的要求,可能会影响业务的使用。虽然AC自动机加载耗时长,内存占用大,但敏感词加载并不频繁,且服务器内存资源充足,所以我们最终选用AC自动机作为底层算法。

3.2 AC自动机算法介绍

AC自动机算法(Aho–Corasick算法)是一种字符串搜索算法,可以同时将目标串与所有模式串进行匹配,算法均摊情况下具有近似于线性的时间复杂度。

AC自动机的匹配原理有两个核心概念:Trie字典树、Fail指针。下面以模式串集合{“she”, “he”, “shers”, “his”, “era”}为例,来介绍这两个概念。

AC自动机算法启动时,需要将所有的模式串加载到内存中,构建成一个Trie字典树。

例如下图是以模式串集合{“she”, “he”, “shers”, “his”, “era”}构建的字典树,树中每个节点代表一个字符,从根节点到某一个节点的路径,即可表示一个模式串,且红色节点表示一个字符串的终结,例如图中最右边子树上的三个节点,可代表模式串“era”。从字典树的根节点出发,可以快速的查找到某个模式串。

此外,拥有相同前缀的模式串会合并到同一个子树中,例如中间子树表示模式串“he”、 “his”,这两个字符串分别是“h”节点的一个分支。AC自动机在搜索这类字符串时,可以节省匹配的次数。



AC自动机在Trie树的基础上,为每个节点加入了Fail指针,上图使用虚线画出了部分节点的Fail指针,未画出虚线的节点,其Fail指针指向根节点。算法在某个节点匹配失败时,可以通过该指针转移到其他包含相同前缀的分支上继续匹配。例如匹配目标串“shis”时,对于前两个字符“sh”,Trie字典树匹配到左边字数的“h”节点上,由于该节点的子节点是字符“e”,与目标串的下一个字符“i”不匹配,因此算法通过Fail指针转移到中间子树的“h”节点上继续匹配,最终命中字符串“his”。

上述的Trie字典树与Fail指针组成了AC自动机的数据模型。AC自动机匹配目标串时,会按顺序从目标串中取出字符,从Trie字典树的根节点出发,在子结点中寻找与该字符匹配的结点,若能找到,则转移到该节点,若找不到,则转移到Fail指针指向的节点。当状态转移到图中的红色节点时,就是命中了一个模式串。下图展示了AC自动机对目标串“merashisnx”进行匹配的过程。



4、vivo的谛听系统

谛听系统基于AC自动机算法构建了一套敏感词匹配服务,将敏感词作为模式串,文本内容作为目标串,可以实现常用的中、英文敏感词匹配。但是实际的业务有很多细分的场景,普通的AC自动机算法已不能满足业务使用需求,因此我们探索了组合敏感词匹配和拼音敏感词匹配两种匹配方式,下面分别介绍。

5、技术实践1:组合敏感词

常规的敏感词匹配算法通常匹配单个词或者短句,但某些词单独出现时并不违规,只有在与几个特定的词同时出现时,才能判定为违规。

组合敏感词的匹配算法依然基于AC自动机算法。由于AC自动机只能判断单个词的命中情况,因此我们将组合敏感词分割成单个敏感词,并维护各敏感词与组合间的映射关系,在AC自动机算法运行结束后,只有某个组合对应的敏感词全部命中时,才能判断该组合敏感词命中。

为此我们需要给AC自动机添加一些前置和后置的处理步骤,具体步骤如下:

  • 1)将组合敏感词分割为单个敏感词,并记录敏感词与组合的映射关系;
  • 2)将分割后的组合敏感词添加到AC自动机的Tire树中;
  • 3)运行AC自动机,匹配文本;
  • 4)遍历匹配结果,将匹配的结果根据映射关系映射到相应的组合上;
  • 5)记录组合的命中情况,得到最终匹配结果。



在步骤4中,算法将匹配的词映射到组合中,并标记对应的词命中。步骤5会根据各组合中单词的命中情况,来判断该组合是否命中,由于在步骤4中组合敏感词均被标记为命中,因此可判断该组合命中。



6、技术实践2:拼音敏感词

6.1 概述

在评论、弹幕等创作自由度很高的场景中,某些用户为了规避机器审核,会使用一些多音字、同音字来表达敏感词汇,例如用“啋票”来代表“彩票”等。

由于多音字、同音字变化较多,将一个词的所有谐音词都穷举出来是很困难的。因此我们实现了拼音敏感词的匹配方案,将中文文本转换为拼音再匹配,通过读音匹配敏感词,即可保证命中所有的同音字,运营直接配置敏感词的拼音,例如“CAI PIAO”,即可命中“啋票”、“彩票”、“采漂”等词汇。

6.2 匹配流程

常规的AC自动机算法是逐字符匹配的,因此Trie树上每个节点存储一个字符,但拼音敏感词需要按照音节匹配,因此我们将Trie树的节点数据类型由char改为String。

示例如下:



拼音敏感词的匹配关键在于将汉字准确的转换为拼音,这一点在多音字的场景下尤为重要。由于多音字的读音是受语境影响的,现有的技术条件很难确保能将多音字准确的转换为拼音,而上文提到同音词“啋票”是用户自行造的词,算法无法准确的识别语境,可能转换得到“CAI PIAO”、“XIAO PIAO”两种不同的结果。如果拼音转换不精准,则拼音敏感词也无法准确命中。

因此我们不依赖算法识别多音字的读音,而是将文本内容的所有读音都列出来匹配一遍,就可以避免避免拼音转换不精准的问题。

下图展示了文本内容与拼音的对应关系,由于存在多音字,因此存储拼音的数组从一维扩展到了二维,更像是“图”的数据结构,下文将其称为拼音图。拼音图的起始节点和终止节点之间存在多条路径,这些路径对应了多音字的所有排列组合情况,为了避免漏杀,我们需要使用AC自动机将这些路径都匹配一遍。



从第二节的匹配流程可以看出,目标串是一维数组,因此AC自动机在匹配文本时,通常采用顺序遍历的方式。而在拼音敏感词中,由于目标串采用二维数组存储,是一种类似于“图”的数据结构,不再适合使用顺序遍历的方式,因此需要采用图的遍历算法。

图的遍历算法中,最常用的就是深度优先遍历(DFS)和广度优先遍历(BFS)。由于词语是前后关联的,为了使算法更符合人类思考习惯,我们选择了DFS。DFS算法使用栈存储节点信息,在当前分支遍历完成后,通过栈中的信息回溯到上一个分支处继续遍历。由于Trie树的状态位与拼音图的节点是相关的,在DFS回溯时,Trie树也需要同步回溯,因此需要将Trie树状态位与拼音图的节点信息一起保存到DFS栈中。

下图展示了拼音敏感词的匹配流程:



6.3 终止条件与剪枝策略

DFS的终止条件是当所有节点都被遍历过,且算法会确保每个节点只会被遍历一次。但是DFS遍历时会在分支处回溯,所以往往终止的节点并不是待匹配文本的终点,很有可能AC自动机的匹配并未完成。

例如在下图所示的匹配流程中,左图是基于待匹配文本“朱朝阳和朋友”构建的拼音图,右图是基于拼音敏感词“PENG YOU”、“ZHAO YANG”、“NI MA”、“MA DE”构建的Trie树。左图的拼音图采用DFS算法遍历,算法最后访问的节点是蓝色节点“ZHAO”,此时拼音图中所有节点均被遍历了一次,已经达到了DFS的终止条件。但右图中Trie树上的状态位处于蓝色节点“ZHAO”的位置,并没有达到终止状态,若此时停止匹配,则会导致无法命中敏感词“ZHAO YANG”,故算法应继续运行,直到AC自动机匹配失败为止。

因此合适的终止条件是:拼音图所有节点均被遍历 且 AC自动机匹配失败。





由于算法需要结合DFS和AC自动机的状态来判断终止条件,因此会出现拼音图中一个节点和路径被遍历多次的情况,当待匹配文本中多音字数量增多时,DFS遍历的路径数量会以笛卡尔积的形式增加。

而这些路径中会存在一部分重复的情况,因此在遍历的过程中需要采取合适的剪枝策略,避免搜索一些重复的路径。

例如下面左图所示的遍历情况,路径②上“PENG”、“ YOU”两个节点已被路径①遍历过,且对应的AC自动机状态位(参考右图)前缀并不包含当前遍历节点“HU”,所以“PENG”对应的敏感词与路径②无关,不必再搜索一次。

我们可以针对这种场景设计了剪枝策略,需要剪枝的路径需要满足两个条件:

  • 1)首先当前节点的下一节点已被遍历过;
  • 2)下一节点对应的AC自动机状态与当前节点无关。

我们为拼音图中的每个节点标记一个分支路径长度B,表示当前节点与上一个最近的分支节点间的路径长度,例如节点“PENG”对应的分支路径长度为B = 2(从“HU”到“PENG”),节点“YOU”的分支路径长度为B = 3(“HU”、“PENG”、“YOU”)。

在AC自动机的状态机中,记录Trie树上每个节点的深度D。例如状态机中“PENG”节点的深度D=1,“YOU”节点的深度D=2。从Trie树根节点到某一个节点的路径上经过的字符连接起来,为该节点对应的模式串,因此节点的深度D即为模式串的长度。当D < B时,表明当前正在匹配的模式串长度短于拼音图中当前节点的分支路径长度,所以当前的模式串与当前的路径无关。

总结一下,剪枝所需的条件为:

  • 1)拼音图中下一节点已被遍历;
  • 2)拼音图的分支路径长度B > Trie树节点的深度D。





7、写在最后

谛听系统基于AC自动机实现了普通敏感词、组合敏感词、拼音敏感词的匹配,其中组合敏感词和拼音敏感词还可以结合成为拼音组合敏感词,覆盖了大部分的文本审核场景,减轻了机审、人审的压力。

另外,在政策风向发生变化时,敏感词匹配功能为运营同事提供了一种快速变更审核策略的手段,使谛听的文本审核能力更加灵活。

目前谛听线上已经配置了数量超过100万的敏感词,极大程度的保障了公司的内容安全。

未来我们将结合业务使用场景继续优化敏感词匹配的能力,提升精准度和命中率:

  • 1)一方面我们可以采用某种方式实现“非”的逻辑,这样可以在配置敏感词时排除bad case,提升命中的精准度;
  • 2)另一方面,我们可以实现敏感词的模糊命中,提升敏感词的命中率。
8、相关资料

[1] 零基础IM开发入门(一):什么是IM聊天系统?

[2] 新手入门一篇就够:从零开发移动端IM

[3] IM消息ID技术专题(七):深度解密vivo的自研分布式ID服务(鲁班)

[4] 阿里IM技术分享(七):某鱼IM的在线、离线聊天数据同步机制优化实践

[5] 探探的IM长连接技术实践:技术选型、架构设计、性能优化

[6] IM开发干货分享:浅谈IM系统中离线消息、历史消息的最佳实践

[7] 得物自研移动端弱网诊断工具的技术实践分享

[8] 如何保障分布式IM聊天系统的消息有序性(即消息不乱)

[9] 社交场景下的统一即时通讯im消息流交互层模块化技术实践

[10] 直播系统聊天技术(八):vivo直播系统中IM消息模块的架构实践

[11] 得物从0到1自研客服IM系统的技术实践之路

[12] 海量用户IM聊天室的架构设计与实践

[13] 一套分布式IM即时通讯系统的技术选型和架构设计

[14] 陌陌技术分享:陌陌IM在后端KV缓存架构上的技术实践

[15] 来看看某信十年前的IM消息收发架构,你做到了吗

[16] 携程技术分享:亿级流量的办公IM及开放平台技术实践

[17] 转转平台IM系统架构设计与实践(一):整体架构设计

[18] 支持百万人超大群聊的Web端IM架构设计与实践

[19] 转转客服IM聊天系统背后的技术挑战和实践分享

[20] B站IM消息系统的新架构升级实践

[21] 如何保障分布式IM聊天系统的消息有序性(即消息不乱)

[22] 即时通讯IM离线消息该怎么存?全面盘点主流存储方案

即时通讯技术学习:
- 移动端IM开发入门文章:《新手入门一篇就够:从零开发移动端IM》
- 开源IM框架源码:https://github.com/JackJiang2011/MobileIMSDK(备用地址点此)

(本文同步发布于: http://www.52im.net/thread-4923-1-1.html)

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
取消特权,全民赞成!退休金设计者郑秉文,55年出生,他会怎样?

取消特权,全民赞成!退休金设计者郑秉文,55年出生,他会怎样?

阿伧说事
2026-07-29 15:03:38
因为“真有人用”,所以取消了所有福利?这波操作太真实了

因为“真有人用”,所以取消了所有福利?这波操作太真实了

夜深爱杂谈
2026-10-03 20:30:57
日乒万万没想到!故意硬拖时间消耗王曼昱,结果自己反而先栽了

日乒万万没想到!故意硬拖时间消耗王曼昱,结果自己反而先栽了

哄动一时啊
2026-10-12 09:46:42
何智丽近况:61岁仍单身,膝下无子女,仍在日本工作,想回国养老

何智丽近况:61岁仍单身,膝下无子女,仍在日本工作,想回国养老

大西体育
2026-10-12 11:55:23
沙特民航总局:11日利雅得机场再次遇袭造成1死11伤

沙特民航总局:11日利雅得机场再次遇袭造成1死11伤

环球网资讯
2026-10-12 06:53:32
最后一位中顾委常委,副国级,101岁去世,终生憾事未报祖母恩

最后一位中顾委常委,副国级,101岁去世,终生憾事未报祖母恩

比利
2026-10-12 15:37:34
《兰香如故》:看到韩粱的历史原型,才知道许兰香确实配不上他,林锦岐根本比不上他

《兰香如故》:看到韩粱的历史原型,才知道许兰香确实配不上他,林锦岐根本比不上他

北方丽人读书观史
2026-10-12 16:19:55
中超无罚分积分榜:蓉城领先国安6分,津门虎位居第七

中超无罚分积分榜:蓉城领先国安6分,津门虎位居第七

懂球帝
2026-10-11 22:45:27
高超音速导弹一夜烂大街?7个国家已经突破,东风-17优势没有了?

高超音速导弹一夜烂大街?7个国家已经突破,东风-17优势没有了?

共工之锚
2026-10-11 23:33:55
拼不动、退不了,我国大批70后,已陷入"停滞式生活":只剩硬熬

拼不动、退不了,我国大批70后,已陷入"停滞式生活":只剩硬熬

大鱼简科
2026-10-10 14:20:11
不查不知道,一查吓一跳,住北京大豪宅的岳云鹏,私生活这么壕

不查不知道,一查吓一跳,住北京大豪宅的岳云鹏,私生活这么壕

翰飞观事
2026-10-12 11:34:26
中国女人很争气!女副市长3小时奔波28公里 为王曼昱郑钦文颁奖

中国女人很争气!女副市长3小时奔波28公里 为王曼昱郑钦文颁奖

念洲
2026-10-12 14:59:07
恩佐社媒发文:客场胜利太棒了,大家好好享受吧

恩佐社媒发文:客场胜利太棒了,大家好好享受吧

懂球帝
2026-10-12 12:44:21
张学良晚年坦言:长征能活下来,不是靠运气,全靠毛主席的顶级布局

张学良晚年坦言:长征能活下来,不是靠运气,全靠毛主席的顶级布局

陈莓特色体育解说
2026-10-12 10:27:36
日本议员上交和解方案,希望中方放过一马:高市太难了,没法撤回

日本议员上交和解方案,希望中方放过一马:高市太难了,没法撤回

健身狂人
2026-10-11 11:08:45
随着张雪机车的两名车手分别以第3和第12完赛,WSBK最新积分榜出炉

随着张雪机车的两名车手分别以第3和第12完赛,WSBK最新积分榜出炉

侧身凌空斩
2026-10-11 22:08:37
连续轰炸俄罗斯关键输油枢纽!任何乌克兰总统都不会跟特朗普做交易

连续轰炸俄罗斯关键输油枢纽!任何乌克兰总统都不会跟特朗普做交易

鹰眼Defence
2026-10-11 15:12:12
正式确定!2米13大中锋回归,重返CBA赛场,携手庞峥麟

正式确定!2米13大中锋回归,重返CBA赛场,携手庞峥麟

体坛瞎白话
2026-10-12 09:06:11
迈阿密主帅谈可能参加解放者杯:这是梅西为数不多还缺的冠军

迈阿密主帅谈可能参加解放者杯:这是梅西为数不多还缺的冠军

懂球帝
2026-10-12 11:30:50
“生了5个送外卖的料子!”农村父亲晒5娃,真实评价毫不留情面

“生了5个送外卖的料子!”农村父亲晒5娃,真实评价毫不留情面

番外行
2026-10-12 09:49:40
2026-10-12 19:08:49
即时通讯技术分享
即时通讯技术分享
即时通讯相关技术的研究与分享
489文章数 3621关注度
往期回顾 全部

科技要闻

尊界:10月底确认制动踏板支架升级方案

头条要闻

8千元小狗遭仅退款 商家驱车600公里上门顾客称狗已死

头条要闻

8千元小狗遭仅退款 商家驱车600公里上门顾客称狗已死

体育要闻

一周吃6顿披萨的胖子,也能单防姆巴佩?

娱乐要闻

张艺谋身体状况曝光 陈婷不再顾及体面

财经要闻

尊界,是江淮的救命车还是失血引擎?

汽车要闻

全新smart精灵2号来了 两门两座 传承经典纯电进化

态度原创

本地
时尚
房产
亲子
数码

本地新闻

踏访沙县第一村,寻国民小吃本源

秀场如战场,女明星重妆出击

房产要闻

等了半年!今年海口最值得期待的新盘,即将亮相!

亲子要闻

可持续推荐|一份来自秋天的礼物:全国0-6岁宝宝,申领免费阅芽包

数码要闻

网友发现自家智能咖啡机10天产生超1TB上行流量

无障碍浏览 进入关怀版