事情是这样子的: 我们项目需要移动端本地的敏感词检测服务,之前使用三方的收费太贵,现在打算自研。
这几天调研了 DFA 、Trie 、AC 这类的实现方案,对于几 w 的敏感词库,CPU 、内存尚可,有误杀的几率;老板比较有野心,说要搞几十 w 的敏感词库,我觉得移动端方案估计靠不住了。
求 V 站大佬提供一些本地化的检测方案,主要性能要可靠,感激不尽。
1
adminvtoex 2023-09-14 10:26:19 +08:00
DFA 、Trie 这些基于搜索的方案只要遇上谐音、特殊字符混淆等、相似字符等基本就白瞎。第三方基本都是模型审核+人工审核兜底,想又可靠又成本低,目前来说别想了。
|
2
stinkytofu 2023-09-14 10:29:53 +08:00 1
几十万的敏感词库!!! 汉字的排列组合都被你们干完了
|
3
binbin0915jjpp 2023-09-14 10:30:21 +08:00 5
调用文心一言 如果他说换个话题 就敏感(手动狗头)
|
4
c2const 2023-09-14 10:35:40 +08:00
自研可能需要长时间实践来迭代哦 :(
特别是各种谐音、拼音、英文,还有 unicode 特殊字符,unicode 超平面字符(比如 emoji 表情)之类的,规则太多了,还要不断更新 :( |
5
WillBeethoven 2023-09-14 10:36:28 +08:00
三国杀是我见过的最强文字狱。
|
6
babyoung 2023-09-14 10:41:02 +08:00 via iPhone
有那么多敏感词吗
|
7
SilentRhythm 2023-09-14 10:41:56 +08:00 1
自研最大的问题还是维护词库,新闻天天有,敏感词也一样。
|
8
NessajCN 2023-09-14 10:44:01 +08:00
建议禁用整个 CJK 编码
|
9
tomczhen 2023-09-14 10:44:10 +08:00 via Android
自研,还要比现有收费贵的第三方服务效果好?
凭啥啊,搞出来自己成立个公司专门提供收费服务不香吗? |
10
sanyang001 OP 哦哦,忘记告知了,我们是海外产品,不需要处理中文。
|
11
sanyang001 OP @stinkytofu 忘记说了,我们海外的产品,不用考虑太多中文。
|
12
1996v 2023-09-14 10:52:23 +08:00
github 很多共享的词库
|
13
buaacss 2023-09-14 10:54:36 +08:00 1
贡献个低成本的方案
首先是分词,用 hanlp 的多语言分词模型就不错,tok 的分词效率很高。可以把自家的敏感词当作 force 字典加进去,然后对于误杀的,只要保证词长度比敏感词更长就能解决。 然后对每个分词作 ac 自动机检测,只要有一个命中就报错出来。 然后可以再做一层 zero-shot-classification ,把每个敏感词分个类,比如刀属于管制器械,但是刀剑神域是游戏,命中的时候判断刀剑神域是不是管制器械,可以进一步降低误杀概率,hg 上一大堆 zsc 的模型。随便搞一个,之后还能积累一波数据做个微调。 我们的场景相对来说没有太多敏感词,所以主要的性能消耗在 hanlp 的分词,实际运行效率非常高。10 万量级的词库,50 个 30-50 个字符的检测差不多 200-300ms 。 |
14
danhahaha 2023-09-14 11:01:04 +08:00
这么复杂不如加一个举报按钮
|
15
wyk111wyk 2023-09-14 11:06:30 +08:00
你们不如自研一个专门的大模型算了
|
16
pengtdyd 2023-09-14 11:13:09 +08:00 3
《三方的收费太贵,现在打算自研》这句话根本不成立,自研的成本肯定远远大于使用第三方的成本,你们老板不是一个聪明人。
|
17
vivisidea 2023-09-14 11:17:18 +08:00
@sanyang001 实际情况会复杂很多,即使是外语,简单的以骂人为例,你以为会规规矩矩的骂"fuck you" 么?
实际上可能是这样的 f*ck you! fuuuuuck you! f[emoji]ck you! f.u.c.k you! f.......u...---c*k you! …… |
18
unii23i 2023-09-14 11:20:31 +08:00
海外产品也这么怕审查吗,还以为可以绕过去
我倒是做了一个常用骂人词库,基本上已经覆盖我们平台的骂人词汇了,这些词汇我们也接了第三方,第三方过滤不了 |
19
sketcherly 2023-09-14 11:45:36 +08:00
Trie 只缓存前一部分,命中的部分再延迟加载?这样肯定不如全部缓存快
Trie 本身就是空间换时间,又不想空间占用又想快的方案应该是没有,只能尝试一个折中的方案 然后自建逻辑过了的话再走一遍三方服务应该能在保证准确度的前提下降本,但是耗时又会有增加 又快资源占用又小还省钱的方案,em... |
20
sketcherly 2023-09-14 12:02:17 +08:00
@sketcherly #19 忽略我,想多了,审核的时候大多应该是正常的,然后还要走一遍三方,没啥效果,当我没说。
|
21
streamrx 2023-09-14 12:04:09 +08:00 via iPhone
你想做一个比第三方好用的 还要比用他便宜,这东西又不是靠什么技术,要一直维护一直更新。 不可能做的比第三方提供的好用还比他便宜
|
22
jackOff 2023-09-14 12:37:36 +08:00 via Android
几十万条必须要设计特殊的 trie 树结构字典来减少判断基数字典(把几十万跳规则里剔除基本不可能有交集的规则,参考 adguardhome 的那种对域名进行的结构拆分),然后匹配规则肯定需要相似度百分比阈值,前缀,后缀,去除基础无意义符号(空格,.、_-这种),这个在各种智能识别里算是最基础的。最主要的是这个字典应该是精简的,无垃圾无意义符号加空格的
|
23
smilenceX 2023-09-14 12:37:45 +08:00 via Android
问 chatgpt ,它说有就有
|
24
jackOff 2023-09-14 12:50:01 +08:00 via Android
@sanyang001 海外的话好像简单一点,trie 树似乎可以试试,字典的数据要剔除无意义字符(,.、这种不可能产生图示意义的符号)加空格,全部最小化,这个规则也对查询的对象使用进行入参清洗,然后是相似度判断是不是敏感词,清洗后的入参应该可以通过关键字,前后缀什么的识别出一些简单的有问题的东西,或者把入参打印成图像再通过图像识别类似于降噪处理啥的丢弃一些无关键的对象来清洗获得一个比较简单的图像识别的文字结果,之后通过人脸识别的机制来进行相似度匹配,这个大部分场景的物体识别还是很成熟和准确的,它允许丢弃不少细节。入参的筛选还可以通过盲审核这句话能不能通读成日常交流语来减少进入上述复杂匹配机制,这个感觉需要 ai 还是啥?
|
25
sanyang001 OP @buaacss 非常感谢
|
26
sighforever 2023-09-14 13:59:20 +08:00
还不如接入 gpt 呢
|
27
sanyang001 OP @jackOff 感谢大佬
|
28
codeself 2023-09-14 14:22:30 +08:00 4
不存在完美的,自然语言太灵活了,前几天看到两个 B 站的评论,是这样的,啥机器都反应不过来的.
《诗经·梅木》 梅木冬溪,思慕晚意 飞舞洒碧,碧漾东西 梅覆梅木,梅游佳亭 泉佳似广,梅忧寂极 糙泥马壁,坻石洞溪 时复思母,消愁东曦 初生东曦贴绯雾,赤石去罢嘶笺中。 逆马抽鞭草拦路,无恼晚意日宁朦。 |
29
akring 2023-09-14 14:38:02 +08:00
建议花小钱省大麻烦
|
30
timnottom 2023-09-14 14:49:12 +08:00 3
|
31
nrtEBH 2023-09-14 14:50:41 +08:00
敏感词需要定期更新的 不然出了什么热点你没过滤踩到雷就很危险
不建议在这里省钱 这是在中国大陆做 ICP 必备的合规成本 |
32
cbythe434 2023-09-14 15:27:50 +08:00
老板比较有野心。。老板铁憨憨要扛锅吧。。
本来有锅了 pua 乙方,现在等着自己扛吧 |
33
chrosing 2023-09-14 15:45:53 +08:00
@binbin0915jjpp 真机灵啊
|
34
polo3584 2023-09-14 16:01:27 +08:00
我司是自己维护屏蔽库,时不时更新,客服和网警会给反馈,按时加就完事了。但是图片就不好搞了,人工审核成本不低。
|
35
17681880207 2023-09-14 16:39:03 +08:00 3
最终方案:
一个下拉框,内置了相关的发言条目,例如: 1. 你是 GG 还是 MM ? 2. 快点吧,我等到花儿也谢了。 3. 你的牌打的太好啦~ 4. 怎么又断线了网络怎么这么差。 与其规定别人不能说什么,不如规定别人只能说什么来的安全。🤓 |
36
PiersSoCool 2023-09-14 16:53:04 +08:00
有没有 chatgpt 过滤敏感词,好像 embedding 适合做这件事?
|
37
islandempty 2023-09-14 19:09:46 +08:00
抖音的敏感词库用的 ac 自动机,几百万 qps
|
38
Tyrant1984 2023-09-14 19:25:22 +08:00
各家用的敏感词库都是自家的,而且都是不公开的,干过一段审核,也干过一段运营搬砖,自己用的敏感词都是自己写的,或者有人会明确告诉你那些敏感了,你记住。然后去试别人的敏感词库就非常痛苦,经常是一旦提交提示失败需要修改,就知道踩中敏感词了,但是找不到,或者说太难找,直接放弃,不浪费这时间了。
|
39
cest 2023-09-14 19:32:07 +08:00
|
40
cncmmdwl 2023-09-14 19:53:30 +08:00
@17681880207 打的不错 抱歉 你看,炉石这样都能嘲讽他人
|
41
dingyaguang117 2023-09-15 08:51:17 +08:00
AC 自动机 O(N) 时间复杂度,主要是内存占用问题
|
42
sanyang001 OP @dingyaguang117 是的,试了几个 AC 方案,内存占用居高不下。
|
43
dif 2023-09-15 10:03:29 +08:00
直接学国内,一刀切不就行了。之前在某游戏论坛,打了不到几十个字,说我敏感了,我翻来覆去的看也不知道哪里敏感了。所以,懂了吧。
|
44
kangkkk 2023-09-15 11:46:18 +08:00
第三方阿里的不贵吧
|
45
noyidoit 2023-09-15 14:08:54 +08:00
我之前做过服务端的敏感词过滤,好奇你们是什么业务背景,需要在移动端本地进行
|
46
cosiner 2023-09-15 14:51:37 +08:00
要全, 要快, 要小, 要本地....................
|
47
777777 2023-09-15 14:55:43 +08:00
采用 NFA ,内存占用小,还能支持正则。
|
48
codelover2016 2023-09-15 15:14:30 +08:00
@stinkytofu 你过于小看劳动人民的智慧了
|
49
lbfjkaou 2023-09-15 16:28:00 +08:00
移动端本地的敏感词检测服务 -> 能不能拆成请求服务器
|
51
noyidoit 2023-09-15 17:56:50 +08:00 1
@lbfjkaou 两年前做的,具体细节已经忘了......大体上,初始化单例时载入审核方提供的词库,几万个词,对内存没什么影响(叠甲:单例可以满足当时的需求);算法印象中是基于 AC 自动机,可以检出特殊字符混淆,但谐音只能靠扩充词库。其他应该没什么好说的了,网上类似的解决方案一大堆,github 也有现成的库,实在不行也有第三方接口可以用
|
52
jimczj007 2023-09-15 19:46:58 +08:00
本地敏感词检测完,服务器不用检测了么
|
53
hellomynameis 2023-09-16 15:01:13 +08:00
@codeself #28 只是因为你这首诗里没有真正涉敏的关键词,阿瓦隆放行了。
bilibili 阿瓦隆其实完全支持谐音、拼音识别。 不信你可以用小号发条 “戏婧乒” “鹏灾周” 之类的 b 站评论,用大号看能不能看到 |