之前开发了一个《垃圾短信过滤 App 》- 胖鱼信使
为什么要重新造轮子?
主要是 2 个原因:
1: 市面上没有完全不联网的垃圾短信过滤 App
2: 想学习一下人工智能分类
192.36 GB 纯文本短信数据
上架研发初期,垃圾短信的训练样本都是来自互联网,然后加上自己和家人的几百条数据,
偶尔有用户会给我回馈几条,还能处理。
后来想更提高一把模型准确性,想多搞点样本,有个用户提供了这些个短信数据。

192,184,722,019 字节(磁盘上的 192.36 GB )

纯文本数据,这也太多了。。。。
有什么工具能对其进行批量标注吗?

刚刚进行精确统计了短信条数:718006912 ,7 亿条目前打算先清洗数据,这些数据存放到多个 json 文件中,每个文件中大约有 3-4 千万个数据,感觉要先存到数据库中?然后在数据库中去重?大家针对去重有啥好的建议吗?

部署个 qwen2.5 最新开源的大模型使用大模型快速标注

我粗略估算了一下,按照 utf8 编码,汉字大约占用 3 个字节。那么就是约 640 亿个汉字,假设每条短信按 30 个汉字算,大约有 21 亿条。如果考虑到去重,就算 80%是重复的,那么还得有 4 亿条。。。。由于大模型思考需要时间,就算 1 秒条,全部标注完也得 10 万小时起步了。。。

可以简单的使用文本正则处理一次,然后用这些基于正则的数据跑一个分类模型出来,再用这个分类模型(需要适当的调整下输入的数据)去处理剩余的数据,如果是我的话会这么处理,或者第一步用正则处理出来的数据+用大模型处理的一些数据来做

经过 2 楼的数据量估算,数据量太大了。数据条数都按亿为单位了,突然觉得没有必要全部都参与训练。感觉可以从中根据关键字主动选取垃圾短信,和正常短信。感觉训练数据样本再百万级别就已经很能打了

有吧?那个熊猫吃短信

可能我表达不太严谨。我想要的是这个应用完全离线,连网络权限都不申请那种。熊猫我记得提交反馈的时候会有网络权限申请

不联网怎么提交反馈呢

可以先用聚类试着清理掉重复度高的样本,然后选出一部分来训练就可以了。

没必要所有的短信都拿来训练,同意楼上所说,可以先聚类再挑选聚类中心的一部分短信来用于训练。没有被挑中的就拿来当测试集就 OK 了。因为聚成一类的大多数都是重复的模式。聚类的时候,可以先用正则等文本匹配来识别短信发送源,例如 [XX 应用] 之类的,然后在每个发送源下,使用文本嵌入模型转换向量,之后对向量进行聚类,建议聚多个类,挑选多个聚类中心的前 3~5%的短信来训练。足够有代表性。这一步可以很快,因为文本嵌入模型一般不大,运行速度尚可接受。至此筛选出 2-3kW 条典型短信。如果还想更快,可以使用分词+词表统计的方法统计词频生成稀疏向量再聚类的办法,这种方法也许更适合,如果数据集中同一来源的大多数短信是套取模板(比如运营商的话费流量短信)生成的,那么可以针对模板类短信取其中千分之一的样本,模板类短信之外的取较大比例的样本,覆盖度更好。之后就是用 LLM 来进行文本分类了,文本分类任务上,再优秀的传统模型的效果可能才刚好够上最烂的大模型。至于速度问题,可以搭配提示工程尝试效果不错的小模型,或者使用 Groq 等平台,它们提供了吞吐速度较快的大模型,分类任务足够了;而且可以搭配工程实现的优化:对于同一个聚类样本,例如 2K 条样本,如果在分类过程中前 1K 条样本有 95%以上都被判定为垃圾短信,那么可以将后 1K 条样本直接划为垃圾短信,这样做可以节省大量时间。同时也可以考虑多个平台多个账号并发处理,我认为资金充足的情况下,1 秒 10 个的处理速度还是可以达到的。按照这个速度,一个月可以弄完 2.5 kW 条样本的分类。

参考 ActiveLearner 主动学习 github.com/hrwleo/dwnlpinterview/blob/main/Trick/SmallSampleProblem/activeLearn/readme.md

#7 我的 app 的做法是:点击反馈跳转到网页,在网页里让用户主动粘贴。其实 App 有了联网权限,就有了把短信自动上传的可能性,当然如果你 100%信任作者或者不关心“可能短信会被收集”这件事,就无所谓了

#9 感谢,不过“使用文本嵌入模型转换向量”这听起来好像有点过于专业了,不太会实际操作。

短信现在感觉没有分类的意义了,长文本才有分类的意义,因为短文本本身就表意不明,长语句现在更倾向于微信说话最后分类出来要么是验证码要么是广告

可以使用智谱的 batch api

简单聚类然后抽出一部分样本做分类

是不是可以先从这 192G 文件里提取 1 ~ 100M 出来,分析下热点词什么的,再看有什么规律、共性

按我做推荐工程给算法同学打工的经验,第一步一定是洗数据🌚

这个方向不太建议,现在基本不会有人安装非系统自带的短信 app 了吧

技术相关的不太懂,个人使用上来说,除了验证码,都是垃圾短信。。。

autodl 租个 4090 跑起来

#14 open.bigmodel.cn/dev/howuse/batchapi 原来还有这种服务,学习了,不过第一件事确实得先选一下样本

#12 gpt 就有这个 api ,用就是了

#20 4090 我家里就有,但具体怎么跑呢?
fasttext 啊

#2 你并发 1w 个协程不就好了...

哥们,瓶颈在算力啊,一台 4090 部署 Qwen2.5 也就同时处理几十个请求。

#26 他 2L 说的请求 chatgpt 啊. 那样评价就是网络 io 了

先用 LLM 标注一部分,比如 1 万条,人工校对一下。然后用 bert 类的模型,例如 roberta 加几层预测标签来训练。这玩意是个体力活,有多少人工,就有多少智能

zap 短信,不需要联网,有个本地小模型,一直在用 还可以

不联网下还是有方式从网络传递数据哦 github.com/orgs/gkd-kit/discussions/199

#30 哈?在 iOS 系统下,不声明且不请求网络权限,不声明文件读写权限,有且只有读取短信的权限的前提下,请问如果做到不联网,且把数据通过网络传递出去呢?
在 Android 上,APP1 有网络权限,APP2 无网络文件权限,APP2 可以通过和 APP1 进程通信或者数据共享来间接获取网络数据而无需任何权限我没有 iOS 开发经验,不过假设 iOS 存在两个 APP 通信的机制且不能被用户权限控制,那就可以做到我搜索了一下,Keychain 和 iOS AppGroup 具有类似的功能,但是不知道对不对如果确实不存在那就是我说错了

提交反馈在 app store 上直接提交或者调用邮箱或者跳转到 github 提 issue 都可以,直接 app 内置反馈组件我觉得费事费力又不讨好用户

#32 从这个角度看,在 iOS 系统中,只安装这个开发者的“1 个 App”即可。Keychain 和 iOS AppGroup 互相通信,依赖同一个开发者的签名。

大可不必这么麻烦. 正常来说, 短信过滤只需要两道工序, 1 是用关键词黑名单直接 ban, 2 是用关键词白名单把步骤 1 筛出来的恢复正常. 能解决绝大部分辣鸡短信. 搞什么模型、AI 来处理, 有点杀鸡用牛刀的感觉了

使用大模型并没有 op 想象的那么久,我之前才用 vllm 部署 glm-4 ,用 3090 一个下午就把整个中文维基的标题分类完了。那个数量差不多也是几百万条。注意,一定是用 vllm 部署,这个框架的并发能力强的可怕。部署完就 python 写个脚本,并发写到 500 干他就完了。

数据抄送一份给我吧。我用最简单的分类就行。蚂蚁搬家不是常见的思维咩?

租用云算力, 只要舍得花钱, 很快就算完了

单卡 3090 能运行 glm-4 么?效果咋样

能分享吗这个数据集

先用小模型洗数据呗,白嫖 aistudio 啥的,用百度的模型先把营销短信洗出来,其他的再慢慢打标签, 全给 LLM 跑消耗太高了

hrwhisper/SpamMessage: 中文垃圾短信识别(手写分类器) github.com/hrwhisper/SpamMessagejunxincai/ChineseTextClassification: 自然语言处理之中文文本分类(以垃圾短信识别为例) github.com/junxincai/ChineseTextClassification单纯要识别垃圾短信/正常短信,就是个二分类的问题,使用传统方法即可。如果要多标签的话就是个体力活了,因为您这个应该是没有任何标签的。你首先需要分类打标签,才能使用机器学习也好大模型也好才能训练。或者干脆分类也交给机器学习(AI)来搞定,这种情况下建议像楼上说的那样先聚类,挑选聚类中心的一部分短信来用于训练识别某类短信,然后再用训练好的模型重新给短信打标签,再训练。最简单的方法就是二分类+白名单关键词。

一个简单的个人思路是:如果使用二分类方案的话,用白名单关键词+自己整理一些特定的正则表达式匹配。对上即是正样本。跑一遍没对上的,全归为负样本。然后就可以用传统方法开始训练了,传统方法对硬件要求不高,没 GPU 都没问题。然后拿模型开始验证即可,效果不好就调参,漫长的调参,调整白名单关键词+自己整理一些特定的正则表达式匹配,直到满意为止。(另外同求数据集

把大象装进冰箱需要几步?

程序员真的是,就关心技术问题。这么多个人隐私数据,就是个烫手山芋,你先看下是否合规吧,别把自己弄进去了

还有求分享的,你真不怕是钓鱼么……

把大象装进冰箱需要几步?0 、如何吧文本词条化?然后把词条变成向量,然后吧每个短信的词条向量算出来。中文词汇五万六千余条,每个短信词汇大概在 5-10 。1 、如何合理的抽样数据?大样本太多,需要降低样本。可以用随机抽样?2 、对降低的样本进行人工标记。标记种类,比如骚扰、乱码文字、京东、淘宝、诈骗、淫秽等等。3 、对标记样本的词汇向量机器监督学习( CNN ,RNN ,KNN 等)。分为两拨,一波学习一波测试。4 、学习完成之后,再抽样大样本数据进行评价(样本数据划分词条,然后使用词条作为输入,标签作为输出)。5 、评价结果如果和人的评价结果一基本一致的话,表示这个模型就很好了。

最近正好在搞类似工作,有个很有意思的框架叫 TnT-LLM 可以借鉴一下。大体思路是让模型去概括信息、提炼分类、标注样本,然后训练小模型去实际分类。

这个 TnT 很 cool

得看具体数据分布,大体思路可以先用人工筛选规则降量,再用其他手段( LLM 等)处理长尾assumption: 有大量同一类型、具备明确模式的数据没处理过垃圾短信,但处理过其他类型的短信数据,不一定有用

对标注不太懂,但这个数据量,处理起来确实比较麻烦,可以考虑 clickhouse 或者 duckdb前者是数据库,比较重。后者是单文件,轻量级一些,建议用后者。先把原始文件切割成小份的,csv 格式最佳,然后用 duckdb 把 csv 清洗压缩成 parquet 格式,压缩率极高,性能也极好。推荐阅读: mp.weixin.qq.com/s/z-_ixPeksB_PjFMNL7NA8Q

这个太好了,我现在正在我的 Mac 上一条一条往 MySQL 里导入。我都不确定 MySql 能不能处理 7 亿条数据😵‍💫数据清理还真的依赖一个牛逼的数据库才行

这个不知道最终的效果如何,如果我只想进行二元标注,就是分垃圾短信和正常短信,一旦标注出错,训练出来的模型感觉效果就差一些。

mega 网盘分享 应该不会出问题

大数据,spark ,hadoop 了解下

有些比较长的是商业合规短信,各种乱码超短短信铁定是垃圾短信