多语言垃圾邮件过滤器
许多垃圾邮件过滤器是为英文设计的。其他语言的垃圾邮件能从它们手中溜过,而其他语言的普通邮件却会因为文字而被标记。Spam Scanner 的设计正是为了避免这两种情况。
读取词语#
词语由 Intl.Segmenter 切分,即 Unicode 词边界规则,并为中文、日文、泰文、老挝文、高棉文和缅甸文配有词典。一句中文会被切分成恭喜、获得、大奖这样的词语,而不是一个永远不会重复的长字符串。
计数前会先还原伪装:词语中的不可见字符,拉丁字母词语中的西里尔字母或希腊字母(pаypal),以数字代替字母(v1agra),以及数学字母或带圈字母(𝐅𝐑𝐄𝐄)。每一种伪装本身也是一条线索。
不标记不了解的内容#
公开的垃圾邮件数据集中,外语垃圾邮件远多于外语正常邮件,因此简单的分类器会学到:阿拉伯文或韩文本身就是垃圾邮件。Spam Scanner 从不把语言当作线索,而是用每个词在其所属语言中的垃圾邮件和正常邮件计数来衡量它,并且某种语言的正常邮件见得越少,就越倾向于保持“不确定”。
在一项针对 21 种语言、内置模型从未见过的短信测试中,这使中文、阿拉伯语、韩语、日语、印地语、孟加拉语、乌尔都语、土耳其语、乌克兰语和瑞典语的误报降为零。
识别所有语言的垃圾邮件#
- 不读取词语的检查:仿冒域名、欺骗性链接、可执行文件、宏、SPFSender Policy Framework(发件人策略框架):一条 DNS 记录,列出允许代表某个域名发送邮件的服务器。、DKIMDomainKeys Identified Mail(域名密钥识别邮件):对邮件的签名,用发件人在 DNS 中发布的公钥验证。、DMARC一种 DNS 策略,告诉收件服务器:自称来自某个域名的邮件未通过 SPF 和 DKIM 对齐时该如何处理。 和黑名单。
- 语言模型处理不确定的邮件。Qwen 3.5 和 Gemma 4 等开放模型能读 140 到 200 种语言;端到端测试用真实模型检查中文、阿拉伯文、韩文、印地文和泰文的垃圾邮件和正常邮件。
- 你自己的邮件。某种语言的每类邮件只需几百封,用你的邮件训练的模型在该语言上就有十足的把握。
spamscanner scan message.eml --llm ollama --llm-model qwen3.5:4b
spamscanner train --spam ~/Maildir/.Junk --ham ~/Maildir/cur --out my-model.json如果只想接收某些语言,--allow-language en,de 会给被确定检测为其他任何语言的邮件加分。