Donate
CC BY NC SA 4.0 (Unless specified) [TOC]
1. Introduction
Anti-spam(反垃圾)已经成为了互联网用户的永久命题之一。其本身是一个“魔高一尺、道高一丈”的问题:随着Anti-spam filter的成长,Spam message也会随之发生变化规避新的filter,造成一个不可解的无限循环。Anti-spam在各个领域都有应用,从一开始的SMS,通话,到现在的Facebook, Twitter等社交媒体平台,以及我们本文的主人公聊天软件Telegram。
使用Telegram的各位相信都遇到过发送垃圾信息的bot,从博彩、币圈投资建议,到R-18网站、政治宣传…Telegram平台本身就是黑灰产业的避风港,这种类似信息几乎是防不胜防。Telegram自身对于200人以上的群组有Agressive Anti-Spam (AAS)机制,但是其由于毫无人情的误杀被很多用户诟病;类似于Shieldy的免费Anti-spam机器人并不少见,但是其误杀率和命中率比AAS还要糟糕;通过社群维护的黑名单,大量、多群组发送垃圾消息的机器人很容易被封禁,但是由于Telegram注册账号的容易性,即用即弃帐号被用于垃圾消息的概率非常大。如果愿意下本钱的话,也有一部分高科技的解决方案,但是对于一(bai)般(piao)用户来说,目前社群仍未开发出能够让人满意的wholesome, round-about solution。
现在市面上的确存在大量已有的解决方案,然而Telegram绝对的特殊性使得很多的已有方案不能直接被迁移到Telegram进行使用。Telegram作为聊天软件,其信息较SMS、邮件等更为多样化,而且面临多语言、多模态的问题。任何人可以利用Telegram的任何一个提供的方式进行SPAM行为,比如用户名、图片、不可直接追踪的GIF贴纸、视频、文字。Telegram的信息也较为超前和前卫,对于Anti-spam这样一个日夜进化的问题,使用已有的公开方法是不可取的。
大语言模型(Large Language Model, LLM)作为目前最新的科技产物,对于实现这样一个需要多模态、多方面、多需求的问题有着独特的优越性。尽管LLM以“语言”为中心,目前的发展使得其对其他模态的适应更加充分,例如GPT-4o对于图片的理解;同时,大语言模型基于Prompt的user engagement使得不同群组的用户能够针对其自身需求迅捷的开发出适用于自身场景的解决方案,使全面性的问题解决成为可能;再有,大语言模型日新月异,其理解能力和自身语料库也随着时间提升,对于日夜进化的Anti-spam问题再好不过。
然而,LLM也有着很多不适合于解决此类模型、或者尚未被明确的问题。例如,LLM作为黑盒,其可靠性被大众质疑,且亦未被在Telegram的Anti-spam问题中进行深度的讨论;尽管LLM可以通过新的语料进行微调,在一个大众使用的场景,希望每个用户在每次基础模型更新时基于自身语料进行去中心化微调/ Prompt Engineering 并不现实,而通过中心化微调的模型也很容易被针对性的绕过;LLM与传统的分类、回归模型不同,对于输出结果并没有明确的一个classification界限,我们也无法可解释的调整LLM的输出结果从而控制其严格程度(即对于False negative/False positive的注力不同)。
基于上述问题,本文对目前市面上的部分基础开源LLM的Anti-SPAM能力进行基本的探索,并且基于Prompt Engineering,对有效的prompt,特别是对于false negative/positive问题有效的prompt进行探索。同时本文希望通过Ensemble LLM的方式,通过集成各模型输出的方式增强单模型的判断能力。
2. Review and Methodology
2.1 Short Literature Review
Anti-Spam是互联网时代下的一个不停进化的问题。在互联网历史的初期,Anti-spam问题通常针对不快的、未经许可的邮件,而随着时间发展逐渐向欺诈、钓鱼以及恶意软件转变1。日前针对Anti-Spam task的研究繁多,同时也都能取得相当不错的效果。比如Salman等人使用BERT,ELMo等变体模型对比CNN、BiLSTM、CNN-BiGRU Ensemble模型等,发现绝大多数的模型都能取得超过95%的准确率以及95%的F-1值2。再比如说,Dhal和Azad基于自己提出的基于Bat Algorithm和Grey Wolf Optimization的Feature Selection方法,大幅度的提升了包括传统机器学习(LR,RF)以及深度学习(MLP)方法的垃圾邮件分类表现3。很多学者认为Anti-Spam是一个已经被基本解决的问题,近年此类问题发表的期刊级别也并不高。
但是现实生活中我们还是不停的被各个不同平台上的Spam message以及其防止措施干扰。尽管垃圾邮件的分类一般都比较准确,但同时正常邮件被标为垃圾邮件的概率也很高。再者,不同平台上的防垃圾措施不同,导致不同平台上呈现完全不同的垃圾处理表现:微信上一般垃圾信息少,因为其实名性和好友验证;Twitter上黄色信息极多,而私信骚扰也不胜其烦;Robocall和垃圾电话几乎占了全美接受电话的30%4,这其中50%以上是诈骗/推销电话5。从最新的部分研究中我们也能看出目前提供的方法的部分表象,比如,上述Salman等人的论文中所属的方法,其表现最好的RoBERTa模型有着5%以上的False Positive rate2。5%的FP rate可能并不起眼,但是现实社会中如果有5%的正常信息被标注成SPAM甚至scam,将会造成对分类方法极大的不信任(这里请读者思考一下,如果你和你的家人的对话20条里就有1条被标注成spam,你会怎么想)。作为辅助手段,用户特征和场景(上下文)特征有时也会被考虑进来。例如,给特定的用户白名单已经是大部分平台的固定操作,TG上的Shieldy也有类似于对萌新ID的黑名单功能。然而,至少在TG平台上来说,目前市面上尚不存在整合性强、泛用性广、可靠性高的Anti-SPAM方法。
学术界认为Anti-spam的难点在于“SPAM message与正常信息之间细微的差别”,而模型需要对语言中的nuance有着深度的了解6。同时,SPAM还具有Dataset shift的问题,具体表现于实际生活中的数据随着时间变化而变化(同时难度也有增加)1。Spammer会利用比如hidden salting, text poisoning等各类方法规避现有的系统。随着信息的复杂度增加以及信息多模态化,我们会发现Anti-spam这个task变得越来越复杂,而首当其冲的就是互联网上的聊天/社交平台,比如Telegram。
Telegram给我们带来的挑战是独特的。作为一个以“自由,开放”7为标榜的聊天平台,Telegram的注册步骤简单(只需要一个手机号,甚至是虚拟的手机号),且提供大量发送消息的方法和模态,但也同时给Spammer提供了很多的漏洞。Spammer可以发送文字、图片、视讯、自制的贴纸、GIF、文件,甚至通过自己的用户名也能够达到其Spamming的目的。一个多模态的、专精于Telegram反Spam的模型的确是一个可能的选择,但是这对于普通用户的使用并不友好;同时,中心化、专精化的训练也使得其容易被绕过,失效。换句话说,这是一个拥有大量财力、精力、算力的“平台”会选择的道路,而不是普通用户,或者“小频道主”会选择的道路。同理的,基于在线学习、终身学习理念的,随时更新Spam库并进行微调的方式,也并非普通用户的技术能够达到的程度。
近些日子,基于未加变动的预训练语言模型的abnomality detection方法逐渐进入学者们的眼帘。比如,Zhang等人使用未经进一步微调的LLM(例如Llama-7B等)在out-of-distribution (OOD) detection task和Spam detection task上获得了相当可观的效果,并说明即使未经进一步微调的大语言模型,其本身的训练集已经足以支撑其完成类似task8。还有,Kojima等人发现可以通过Prompt Engineering的方式使的LLM的推理能力增强,即使是在Zero-shot的情况下9。直接使用未加变动的预训练语言模型有着自己独特的优势和问题。其优势在于简便、可以依赖不同服务商取得相同效果、无需多余算力、语料和技术功底等;其劣势在于专精度差、稳定性低。
Spam的定义其实一直并不明确。对于很多研究来说,Spam就是Spam,并不去进行更深层次的定义10。这样其实也并不特殊:Spam本身就是一个以人类需求定义的category。很多时候,对于一个人可能是spam的信息,对于另外一个人可能就会是valuable的。从这一点来说我们可以总结Spam Detection实际上是一个”Human Easy, Machine Hard”的问题,即类似于莫拉维克悖论(Moravec’s paradox)中陈述的情况11。对于一个个人来说,可能很容易的就能判断出一封邮件/一条信息是否是Spam:通过直感、看一眼就是了;对于机器来说,这个问题就变得很困难,需要对信息的动机、语言、以及人类需求进行多方面的分析。
2.2 Methodology
2.2.1 Telegram Chinese Anti-SPAM Dataset (TC-A-SPAM)
由于目前并不存在开源的TG中文Anti-SPAM数据集,我们以自建数据集的方法展开实验。
Spam是一个二分类问题,Positive数据由本文的合作者(@Laoself)提供,总共869条各类模态不一的SPAM message。Negative数据由作者的频道讯息构成,从2023年8月1日到2024年6月7日,总共1,824条非SPAM message。所有信息都通过Telegram自带的Export Chat History进行获取,汇总为JSON文件。
作为Telegram数据集,我们可以观察到数据集当中含有大量不同种类的数据,包括图片信息、文字信息、纯链接的信息等。
2.2.2 Large Language Model As-a-service for Spam Detection Task
我们使用了3个不同的LLM As-a-service提供商进行我们的实验:Cloudflare Worker AI, Openrouter AI, OpenAI。Cloudflare提供了大量免费的小型(0.8B - 14B)以及经过量化(AWQ)的模型,由于成本限制,这将作为我们主要依赖的服务。Openrouter主要以中型(7B - 70B)的开源模型为主,所有服务均由第三方提供,适合于对比试验。OpenAI提供了State-of-the-art的大型闭源模型,比如GPT-4o, GPT-3.5-turbo等,同样适用于对比试验。
我们对Cloudflare提供的全部免费Beta模型进行了测试,使用相同的Prompt,并对输出稳定(即能够稳定输出“Yes”或”No”的模型12)进行了基于上述TC-A-SPAM数据集的基准测试。
3. Experiment Result
3.1 Base Model Results
我们首先对部分基准模型进行了Baseline test13,结果如下。
| Model Name | Provider | Arena ELO | F1 Score | Accuracy | Specificity | Sensitivity |
|---|---|---|---|---|---|---|
| meta-llama-3-8b-instruct | Cloudflare | 1153 | 0.7053 | 0.7410 | 0.6367 | 0.9597 |
| qwen1.5-7b-chat-awq | Cloudflare | 1070-AWQ | 0.5975 | 0.5884 | 0.4180 | 0.9448 |
| qwen1.5-14b-chat-awq | Cloudflare | 1108-AWQ | 0.6190 | 0.6179 | 0.4539 | 0.9620 |
| neural-chat-7b-v3-1-awq | Cloudflare | ?-AWQ | 0.8141 | 0.8927 | 0.9709 | 0.7284 |
| openchat-3.5-0106 | Cloudflare | 1076 | 0.1817 | 0.6334 | 0.8725 | 0.1269 |
| hermes-2-pro-mistral-7b | Cloudflare | 1084 | 0.5268 | 0.6816 | 0.7449 | 0.5489 |
| openhermes-2.5-mistral-7b-awq | Cloudflare | 1074-AWQ | 0.5720 | 0.6675 | 0.6577 | 0.6881 |
| una-cybertron-7b-v2-bf16 | Cloudflare | ? | 0.8300 | 0.8915 | 0.9249 | 0.8214 |
| gpt-3.5-turbo-012514 | OpenAI | 1103 | 0.5198 | 0.4214 | 0.1595 | 0.9756 |
| llama-3-8b-instruct | Cloudflare | 1153 | 0.6267 | 0.5978 | 0.3942 | 0.9931 |
| GPT-4o14 | OpenAI | 1287 | 0.8790 | 0.9164 | 0.8979 | 0.9561 |
| Claude-3-Haiku14 | OpenRouter | 1178 | 0.7870 | 0.7857 | 0.6996 | 0.8940 |
基于如上结果,我们发现其实在Anti-spam这个task上模型与模型之间的区别是非常明显的。即使是LMSYS Arena ELO非常相像的模型,在实际操作时也会出现明显的性能差别。另外我们还观察到一个有趣的现象:以Mistral 7B为基准的模型的表现要总体比以Llama 8B为基准的模型的表现要好得多,然而由于Mistral 7B base model连“只回复一个单词”都不会,无法在实验结果中出现,也是让人很惋惜。绝大多数的模型的偏向性严重,比如GPT-3.5,Llama-3-8B-Instruct对SPAM的识别率几乎为100%,但是误杀率也极高;Openchat-3.5-7B的误杀率比较低,但实际的spam识别效果并不好。综合比较后,我们发现Intel-Neural-chat-7B和Una/Cybertron-7B-v2两个模型的综合表现最佳,尤其是误杀率低,但是对spam信息的识别率也仅为80%不到。总体来说比较大的模型,比如GPT-4o和Claude-3-Haiku的表现比小模型更稳健,但是这不代表我们可以/有资源使用这类模型。
根据以上的结果,我们选择了表现最良好的三个模型,即Neural-chat-7B, Cybertron-7B, Meta-Llama-8B-Instruct,进入下一步的实验。
3.2 Prompt Engineering
3.2.1 Human Prompt Engineering: Attention
对于我们的Base Prompt,可以进行各式各样的修改,由于LLM首先是一个基于Multi-head attention架构,我们首先使用插入提起注意语句的方式进行微调,例如:
| Base Prompt: | Updated Prompt: |
|---|---|
| You are a spam detection bot. Your job is to reply and to only return ‘Yes’ or ‘No’ to content provided by user. If the user input is a spam message, reply ‘Yes’. If it is possible to not be a spam, reply ‘No’. Only reply Yes/No, nothing else, no fullstop, no comma, no space. | You are a spam detection bot. Your job is to reply and to only return ‘Yes’ or ‘No’ to content provided by user. If the user input is a spam message, reply ‘Yes’. If it is possible to not be a spam, reply ‘No’. Please pay attention to be ____. Only reply Yes/No, nothing else, no fullstop, no comma, no space. |
我们对上述的数个模型进行进一步的实验:
| Prompt | Model Name | F1 Score | Accuracy | Specificity | Sensitivity |
|---|---|---|---|---|---|
| Please pay attention to be cautious. | meta-llama-3-8b-instruct | 0.6250(↓) | 0.6168(↓) | 0.4391(↓) | 0.9896(↑) |
| neural-chat-7b-v3-1-awq | 0.8000(↓) | 0.8887(↓) | 0.9775(↑) | 0.6987(↓) | |
| una-cybertron-7b-v2-bf16 | 0.8367(↑) | 0.9001(↑) | 0.9512(↑) | 0.7929(↓) | |
| Please pay attention to be aggressive. | meta-llama-3-8b-instruct | 0.5618(↓) | 0.5006(↓) | 0.2665(↓) | 0.9908(↑) |
| neural-chat-7b-v3-1-awq | 0.8404(↑) | 0.9001(↑) | 0.9408(↓) | 0.8147(↑) | |
| una-cybertron-7b-v2-bf16 | 0.8355(↑) | 0.8919(↑) | 0.9116(↓) | 0.8504(↑) | |
| Please pay attention to be accurate. | meta-llama-3-8b-instruct | 0.6453(↓) | 0.6503(↓) | 0.4901(↓) | 0.9873(↑) |
| neural-chat-7b-v3-1-awq | 0.8176(↑) | 0.8952(↑) | 0.9748(↑) | 0.7281(↓) | |
| una-cybertron-7b-v2-bf16 | 0.8371(↑) | 0.8995(↑) | 0.9408(↑) | 0.8110(↓) | |
| Please pay attention to be strict. | meta-llama-3-8b-instruct | 0.5619(↓) | 0.5009(↓) | 0.2672(↓) | 0.9908(↑) |
| neural-chat-7b-v3-1-awq | 0.8196(↑) | 0.8945(↑) | 0.9671(↑) | 0.7422(↓) | |
| una-cybertron-7b-v2-bf16 | 0.8366(↑) | 0.8970(↑) | 0.9347(↑) | 0.8178(↓) | |
| Please pay attention to be malicious15. | meta-llama-3-8b-instruct | 0.5842(↓) | 0.5454(↓) | 0.3339(↓) | 0.9885(↑) |
| neural-chat-7b-v3-1-awq | 0.8323(↑) | 0.9016(↑) | 0.9682(↓) | 0.7607(↑) | |
| una-cybertron-7b-v2-bf16 | 0.8419(↑) | 0.9008(↑) | 0.9402(↑) | 0.8182(↓) |
3.2.2 Human Prompt Engineering: Definition of Spam
| Base Prompt: | Updated Prompt: |
|---|---|
| You are a spam detection bot. Your job is to reply and to only return ‘Yes’ or ‘No’ to content provided by user. If the user input is a spam message, reply ‘Yes’. If it is possible to not be a spam, reply ‘No’. Only reply Yes/No, nothing else, no fullstop, no comma, no space. | You are a spam detection bot. Your job is to reply and to only return ‘Yes’ or ‘No’ to content provided by user. If the user input is a spam message, reply ‘Yes’. If it is possible to not be a spam, reply ‘No’. The definition of spam message is: “______”. Only reply Yes/No, nothing else, no fullstop, no comma, no space. |
| Prompt | Model Name | F1 Score | Accuracy | Specificity | Sensitivity |
|---|---|---|---|---|---|
| is: unwanted, unwarrented messages. | meta-llama-3-8b-instruct | 0.5753(↓) | 0.5277(↓) | 0.3068(↓) | 0.9908(↑) |
| neural-chat-7b-v3-1-awq | 0.8257(↑) | 0.9005(↑) | 0.9814(↑) | 0.7307(↑) | |
| una-cybertron-7b-v2-bf16 | 0.8468(↑) | 0.9090(↑) | 0.9709(↑) | 0.7791(↓) | |
| is: potentially harmful and scamming messages. | meta-llama-3-8b-instruct | 0.7052(↓) | 0.7367(↓) | 0.6228(↓) | 0.9758(↓) |
| neural-chat-7b-v3-1-awq | 0.7981(↓) | 0.8884(↓) | 0.9836(↑) | 0.6871(↓) | |
| una-cybertron-7b-v2-bf16 | 0.8415(↑) | 0.9086(↑) | 0.9830(↑) | 0.7523(↓) | |
| is: advertisement-like contents. | meta-llama-3-8b-instruct | 0.7112(↑) | 0.7482(↑) | 0.6469(↑) | 0.9609(↓) |
| neural-chat-7b-v3-1-awq | 0.8186(↑) | 0.8914(↑) | 0.9550(↓) | 0.7583(↑) | |
| una-cybertron-7b-v2-bf16 | 0.8324 | 0.8923 | 0.9227 | 0.8285 |
3.2.3 Human Prompt Engineering: One shot & Few shot
| Base Prompt: | Updated Prompt: |
|---|---|
| You are a spam detection bot. Your job is to reply and to only return ‘Yes’ or ‘No’ to content provided by user. If the user input is a spam message, reply ‘Yes’. If it is possible to not be a spam, reply ‘No’. Only reply Yes/No, nothing else, no fullstop, no comma, no space. | You are a spam detection bot. Your job is to reply and to only return ‘Yes’ or ‘No’ to content provided by user. If the user input is a spam message, reply ‘Yes’. If it is possible to not be a spam, reply ‘No’. Only reply Yes/No, nothing else, no fullstop, no comma, no space. Here are a few examples of spam and non-spam messages: <proceeded by 5+ examples> |
3.2.4 Automated Prompt Engineering
Discussion
Limitation
Conclusion
References
Notes
Jáñez-Martino, Francisco, Rocío Alaiz-Rodríguez, Víctor González-Castro, Eduardo Fidalgo, and Enrique Alegre. “A Review of Spam Email Detection: Analysis of Spammer Strategies and the Dataset Shift Problem.” Artificial Intelligence Review 56, no. 2 (February 1, 2023): 1145–73. https://doi.org/10.1007/s10462-022-10195-4. ↩ ↩2
Salman, Muhammad, Muhammad Ikram, and Mohamed Ali Kaafar. “Investigating Evasive Techniques in SMS Spam Filtering: A Comparative Analysis of Machine Learning Models.” IEEE Access 12 (2024): 24306–24. https://doi.org/10.1109/ACCESS.2024.3364671. ↩ ↩2
Dhal, Pradip, and Chandrashekhar Azad. “Hybrid Momentum Accelerated Bat Algorithm with GWO Based Optimization Approach for Spam Classification.” Multimedia Tools and Applications 83, no. 9 (March 1, 2024): 26929–69. https://doi.org/10.1007/s11042-023-16448-w. ↩
https://www.komando.com/news/research-50-of-all-calls-are-robocalls-how-to-stop-them-on-your-phone/489341/ ↩
https://www.prnewswire.com/news-releases/us-consumers-received-just-under-4-5-billion-robocalls-in-may-according-to-youmail-robocall-index-302164214.html ↩
Ahmad, Norliza Binti. “Application of Pre-Trained Models (PTMs) in Sentiment Analysis, News Classification, Anti-Spam Detection, and Information Extraction.” Journal of Computational Social Dynamics 8, no. 9 (September 23, 2023): 1–12. ↩
https://apps.apple.com/us/app/telegram-messenger/id686449807 ↩
Zhang, Andi, Tim Z. Xiao, Weiyang Liu, Robert Bamler, and Damon Wischik. “Your Finetuned Large Language Model Is Already a Powerful Out-of-Distribution Detector.” arXiv, April 7, 2024. https://doi.org/10.48550/arXiv.2404.08679. ↩
Kojima, Takeshi, Shixiang Shane Gu, Machel Reid, Yutaka Matsuo, and Yusuke Iwasawa. “Large Language Models Are Zero-Shot Reasoners.” arXiv, January 29, 2023. https://doi.org/10.48550/arXiv.2205.11916. ↩
Shue, Craig A., Minaxi Gupta, John J. Lubia, Chin Hua Kong, and Asim Yuksel. “Spamology: A Study of Spam Origins.” In The 6th Conference on Email and Anti-Spam (CEAS), 2009. http://web.cs.wpi.edu/~cshue/research/ceas09.pdf. ↩
Arora, Anmol. “Moravec’s Paradox and the Fear of Job Automation in Health Care.” The Lancet 402, no. 10397 (July 15, 2023): 180–81. https://doi.org/10.1016/S0140-6736(23)01129-7. ↩
我们发现,有很多模型甚至无法遵守最基本的输出限制,这在没有经过Instruct的Mistral模型之上极为明显,除此以外,Zephyr, Gamma,Deepseek, Falcon, Starling等模型也有类似的问题,故我们未将这些模型列入考虑 。一部分模型的输出会带有换行符(比如“\n Yes”),一部分模型会在输出前增加一个空格,还有一部分模型会对输出的结果进行详细的解释(即使是在明令禁止解释的prompt之上)。 ↩
配置如下:prompt: “You are a spam detection bot. Your job is to reply and to only return ‘Yes’ or ‘No’ to content provided by user. If the user input is a spam message, reply ‘Yes’. If it is possible to not be a spam, reply ‘No’. Only reply Yes/No, nothing else, no fullstop, no comma, no space.”; temperature = 0. ↩
对比试验。 ↩