之前开发了一个《垃圾短信过滤 App 》- 胖鱼信使
主要是 2 个原因:
1: 市面上没有完全不联网
的垃圾短信过滤 App
2: 想学习一下人工智能分类
上架研发初期,垃圾短信的训练样本都是来自互联网,然后加上自己和家人的几百条数据,
偶尔有用户会给我回馈几条,还能处理。
后来想更提高一把模型准确性,想多搞点样本,有个用户提供了这些个短信数据。
192,184,722,019 字节(磁盘上的 192.36 GB )
纯文本数据,这也太多了。。。。
有什么工具能对其进行批量标注吗?
1
raycool 53 天前
部署个 qwen2.5 最新开源的大模型
使用大模型快速标注 |
2
andforce OP @raycool 我粗略估算了一下,按照 utf8 编码,汉字大约占用 3 个字节。那么就是约 640 亿个汉字,假设每条短信按 30 个汉字算,大约有 21 亿条。
如果考虑到去重,就算 80%是重复的,那么还得有 4 亿条。。。。 由于大模型思考需要时间,就算 1 秒条,全部标注完也得 10 万小时起步了。。。 |
3
lozzow 53 天前
可以简单的使用文本正则处理一次,然后用这些基于正则的数据跑一个分类模型出来,再用这个分类模型(需要适当的调整下输入的数据)去处理剩余的数据,如果是我的话会这么处理,或者第一步用正则处理出来的数据+用大模型处理的一些数据来做
|
4
andforce OP @lozzow 经过 2 楼的数据量估算,数据量太大了。
数据条数都按亿为单位了,突然觉得没有必要全部都参与训练。 感觉可以从中根据关键字主动选取垃圾短信,和正常短信。 感觉训练数据样本再百万级别就已经很能打了 |
5
guiyumin 53 天前 1
有吧?那个熊猫吃短信
|
8
rechardwong0522 53 天前
可以先用聚类试着清理掉重复度高的样本,然后选出一部分来训练就可以了。
|
9
syaoranex 53 天前 6
没必要所有的短信都拿来训练,同意楼上所说,可以先聚类再挑选聚类中心的一部分短信来用于训练。没有被挑中的就拿来当测试集就 OK 了。因为聚成一类的大多数都是重复的模式。
聚类的时候,可以先用正则等文本匹配来识别短信发送源,例如 [XX 应用] 之类的,然后在每个发送源下,使用文本嵌入模型转换向量,之后对向量进行聚类,建议聚多个类,挑选多个聚类中心的前 3~5%的短信来训练。足够有代表性。这一步可以很快,因为文本嵌入模型一般不大,运行速度尚可接受。至此筛选出 2-3kW 条典型短信。 如果还想更快,可以使用分词+词表统计的方法统计词频生成稀疏向量再聚类的办法,这种方法也许更适合,如果数据集中同一来源的大多数短信是套取模板(比如运营商的话费流量短信)生成的,那么可以针对模板类短信取其中千分之一的样本,模板类短信之外的取较大比例的样本,覆盖度更好。 之后就是用 LLM 来进行文本分类了,文本分类任务上,再优秀的传统模型的效果可能才刚好够上最烂的大模型。至于速度问题,可以搭配提示工程尝试效果不错的小模型,或者使用 Groq 等平台,它们提供了吞吐速度较快的大模型,分类任务足够了;而且可以搭配工程实现的优化:对于同一个聚类样本,例如 2K 条样本,如果在分类过程中前 1K 条样本有 95%以上都被判定为垃圾短信,那么可以将后 1K 条样本直接划为垃圾短信,这样做可以节省大量时间。同时也可以考虑多个平台多个账号并发处理,我认为资金充足的情况下,1 秒 10 个的处理速度还是可以达到的。按照这个速度,一个月可以弄完 2.5 kW 条样本的分类。 |
10
GeekGao 52 天前
|
11
andforce OP @noqwerty #7 我的 app 的做法是:点击反馈跳转到网页,在网页里让用户主动粘贴。
其实 App 有了联网权限,就有了把短信自动上传的可能性,当然如果你 100%信任作者或者不关心“可能短信会被收集”这件事,就无所谓了 |
13
murmur 52 天前
短信现在感觉没有分类的意义了,长文本才有分类的意义,因为短文本本身就表意不明,长语句现在更倾向于微信说话
最后分类出来要么是验证码要么是广告 |
14
ibazhx 52 天前
可以使用智谱的 batch api
|
15
Pteromyini 52 天前
简单聚类然后抽出一部分样本做分类
|
16
weofuh 52 天前
是不是可以先从这 192G 文件里提取 1 ~ 100M 出来,分析下热点词什么的,再看有什么规律、共性
|
17
securityCoding 52 天前 via Android
按我做推荐工程给算法同学打工的经验,第一步一定是洗数据🌚
|
18
sxfscool 52 天前
这个方向不太建议,现在基本不会有人安装非系统自带的短信 app 了吧
|
19
dhb233 52 天前
技术相关的不太懂,个人使用上来说,除了验证码,都是垃圾短信。。。
|
20
TimeStudy 52 天前
autodl 租个 4090 跑起来
|
21
andforce OP @ibazhx #14 https://open.bigmodel.cn/dev/howuse/batchapi 原来还有这种服务,学习了,不过第一件事确实得先选一下样本
|
24
yushi17 52 天前
fasttext 啊
|
28
keakon 52 天前
先用 LLM 标注一部分,比如 1 万条,人工校对一下。然后用 bert 类的模型,例如 roberta 加几层预测标签来训练。
这玩意是个体力活,有多少人工,就有多少智能 |
29
bbxx11 52 天前
zap 短信,不需要联网,有个本地小模型,一直在用 还可以
|
30
lisongeee 52 天前
|
31
andforce OP |
32
lisongeee 52 天前
在 Android 上,APP1 有网络权限,APP2 无网络文件权限,APP2 可以通过和 APP1 进程通信或者数据共享来间接获取网络数据而无需任何权限
我没有 iOS 开发经验,不过假设 iOS 存在两个 APP 通信的机制且不能被用户权限控制,那就可以做到 我搜索了一下,Keychain 和 iOS AppGroup 具有类似的功能,但是不知道对不对 如果确实不存在那就是我说错了 |
33
xing7673 52 天前
@noqwerty 提交反馈在 app store 上直接提交或者调用邮箱或者跳转到 github 提 issue 都可以,直接 app 内置反馈组件我觉得费事费力又不讨好用户
|
34
andforce OP |
35
wu67 52 天前
大可不必这么麻烦.
正常来说, 短信过滤只需要两道工序, 1 是用关键词黑名单直接 ban, 2 是用关键词白名单把步骤 1 筛出来的恢复正常. 能解决绝大部分辣鸡短信. 搞什么模型、AI 来处理, 有点杀鸡用牛刀的感觉了 |
36
naclfish2333 52 天前 via iPhone
使用大模型并没有 op 想象的那么久,我之前才用 vllm 部署 glm-4 ,用 3090 一个下午就把整个中文维基的标题分类完了。那个数量差不多也是几百万条。
注意,一定是用 vllm 部署,这个框架的并发能力强的可怕。部署完就 python 写个脚本,并发写到 500 干他就完了。 |
37
enrolls 52 天前
数据抄送一份给我吧。我用最简单的分类就行。蚂蚁搬家不是常见的思维咩?
|
38
bthulu 52 天前
租用云算力, 只要舍得花钱, 很快就算完了
|
39
yuxizhe 52 天前
@naclfish2333 单卡 3090 能运行 glm-4 么?效果咋样
|
40
Cola90 52 天前
能分享吗这个数据集
|
41
paopjian 52 天前
先用小模型洗数据呗,白嫖 aistudio 啥的,用百度的模型先把营销短信洗出来,其他的再慢慢打标签, 全给 LLM 跑消耗太高了
|
42
aoguai 52 天前
hrwhisper/SpamMessage: 中文垃圾短信识别(手写分类器)
https://github.com/hrwhisper/SpamMessage junxincai/ChineseTextClassification: 自然语言处理之中文文本分类(以垃圾短信识别为例) https://github.com/junxincai/ChineseTextClassification 单纯要识别垃圾短信/正常短信,就是个二分类的问题,使用传统方法即可。 如果要多标签的话就是个体力活了,因为您这个应该是没有任何标签的。你首先需要分类打标签,才能使用机器学习也好大模型也好才能训练。 或者干脆分类也交给机器学习(AI)来搞定,这种情况下建议像楼上说的那样先聚类,挑选聚类中心的一部分短信来用于训练识别某类短信,然后再用训练好的模型重新给短信打标签,再训练。 最简单的方法就是二分类+白名单关键词。 |
43
aoguai 52 天前 1
一个简单的个人思路是:
如果使用二分类方案的话,用白名单关键词+自己整理一些特定的正则表达式匹配。对上即是正样本。 跑一遍没对上的,全归为负样本。 然后就可以用传统方法开始训练了,传统方法对硬件要求不高,没 GPU 都没问题。 然后拿模型开始验证即可,效果不好就调参,漫长的调参,调整白名单关键词+自己整理一些特定的正则表达式匹配,直到满意为止。 (另外同求数据集 |
44
yuchting 52 天前
把大象装进冰箱需要几步?
|
45
ospider 52 天前
程序员真的是,就关心技术问题。这么多个人隐私数据,就是个烫手山芋,你先看下是否合规吧,别把自己弄进去了
|
46
ospider 52 天前
还有求分享的,你真不怕是钓鱼么……
|
47
yuchting 52 天前 1
把大象装进冰箱需要几步?
0 、如何吧文本词条化?然后把词条变成向量,然后吧每个短信的词条向量算出来。中文词汇五万六千余条,每个短信词汇大概在 5-10 。 1 、如何合理的抽样数据?大样本太多,需要降低样本。可以用随机抽样? 2 、对降低的样本进行人工标记。标记种类,比如骚扰、乱码文字、京东、淘宝、诈骗、淫秽等等。 3 、对标记样本的词汇向量机器监督学习( CNN ,RNN ,KNN 等)。分为两拨,一波学习一波测试。 4 、学习完成之后,再抽样大样本数据进行评价(样本数据划分词条,然后使用词条作为输入,标签作为输出)。 5 、评价结果如果和人的评价结果一基本一致的话,表示这个模型就很好了。 |
48
CapNemo 52 天前
最近正好在搞类似工作,有个很有意思的框架叫 TnT-LLM 可以借鉴一下。大体思路是让模型去概括信息、提炼分类、标注样本,然后训练小模型去实际分类。
|
50
thevita 52 天前
得看具体数据分布,大体思路可以先用人工筛选规则降量,再用其他手段( LLM 等)处理长尾
assumption: 有大量同一类型、具备明确模式的数据 没处理过垃圾短信,但处理过其他类型的短信数据,不一定有用 |
51
512357301 52 天前 via Android 1
对标注不太懂,但这个数据量,处理起来确实比较麻烦,可以考虑 clickhouse 或者 duckdb
前者是数据库,比较重。 后者是单文件,轻量级一些,建议用后者。 先把原始文件切割成小份的,csv 格式最佳,然后用 duckdb 把 csv 清洗压缩成 parquet 格式,压缩率极高,性能也极好。 推荐阅读: https://mp.weixin.qq.com/s/z-_ixPeksB_PjFMNL7NA8Q |
52
andforce OP |
53
andforce OP @CapNemo 这个不知道最终的效果如何,如果我只想进行二元标注,就是分垃圾短信和正常短信,一旦标注出错,训练出来的模型感觉效果就差一些。
|
54
chempotato 51 天前 via Android
@ospider mega 网盘分享 应该不会出问题
|
55
yuankui 51 天前
大数据,spark ,hadoop 了解下
|
56
dode 51 天前
有些比较长的是商业合规短信,各种乱码超短短信铁定是垃圾短信
|
57
naclfish2333 51 天前 via iPhone
@yuxizhe 能不能跑起来主要看显存,glm-4 是 9B 的模型,全精度大概要占用到 17G 左右的显存。3090 单卡好像是 25G 左右,是足够了,但是 vllm 这个框架的策略是尽量占满显存的。
至于效果,只能是差强人意,我是要求模型分析词语和某个领域的相关性。直接输出输出一个 1 到 5 的数字,代表这个词和这个领域的相关性。 最后确实是可以正确分类,但是可能是 prompt 没写好或者分类的颗粒度分得太细了,导致分类的结果不是很一致。比如“电阻”模型会给出“5”,但是“电容”又会给出“4”。 |
58
locoz 51 天前 via Android
7 亿条里大概率有极其大量的重复内容,先去重、人工标记把一些一眼就能分类的都筛掉,应该会少很多
|
59
cocogovern 51 天前
先通过一个规模模型来做筛选,然后你再通过人工智能来分类不能完成的部分。
|
60
realpg 51 天前
会不会源文件 192GB 去掉包含"验证码"三个字的还剩 36MB
|
61
andforce OP |
62
unco020511 51 天前
@andforce #12 其实就是 API,听起来高大上而已
|
63
naoying 51 天前
集成端侧离线小模型
|