Многоязычный спам-фильтр
Многие спам-фильтры создавались для английского. Спам на других языках проходит мимо них, а обычная почта на других языках помечается из-за письменности. Spam Scanner устроен так, чтобы избежать и того и другого.
Чтение слов#
Слова выделяются с помощью Intl.Segmenter — правил границ слов Unicode со словарями для китайского, японского, тайского, лаосского, кхмерского и бирманского. Китайское предложение превращается в слова вроде 恭喜, 获得 и 大奖, а не в одну длинную строку, которая никогда не повторяется.
Маскировка снимается до подсчёта: невидимые символы внутри слов, кириллические или греческие буквы внутри латинских слов (pаypal), цифры вместо букв (v1agra), математические или обведённые буквы (𝐅𝐑𝐄𝐄). Каждый вид маскировки также служит отдельным признаком.
Не помечать незнакомое#
В публичных наборах данных гораздо больше спама на иностранных языках, чем hamНужная почта: противоположность спама. на иностранных языках, поэтому наивный классификатор усваивает, что арабский или корейский текст сам по себе — спам. Spam Scanner никогда не использует язык как признак, взвешивает каждое слово относительно счётчиков спама и ham на его собственном языке и остаётся в состоянии «unsure» пропорционально тому, как мало ham он видел на этом языке.
В тесте на SMS-сообщениях на 21 языке, которых встроенная модель никогда не видела, это свело её ложные срабатывания на китайском, арабском, корейском, японском, хинди, бенгальском, урду, турецком, украинском и шведском к нулю.
Ловить спам на любом языке#
- Проверки, которые не читают слова: похожие домены, обманные ссылки, исполняемые файлы, макросы, SPFSender Policy Framework: запись в DNS со списком серверов, которым разрешено отправлять почту от имени домена., DKIMDomainKeys Identified Mail: подпись письма, которая проверяется открытым ключом, опубликованным в DNS отправителя., DMARCПолитика в DNS, которая сообщает получателям, что делать с письмом от имени домена, не прошедшим выравнивание SPF и DKIM. и чёрные списки.
- Языковая модель для писем с ответом «unsure». Открытые модели, такие как Qwen 3.5 и Gemma 4, читают на 140–200 языках; сквозные тесты проверяют спам и ham на китайском, арабском, корейском, хинди и тайском на реальной модели.
- Ваша собственная почта. Нескольких сотен писем каждого вида на языке достаточно, чтобы модель, обученная на вашей почте, была на нём полностью уверена.
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 добавляет баллы письмам, уверенно определённым на любом другом языке.