Языки
Спам приходит на любом языке, как и обычная почта. Spam Scanner читает и то и другое и осторожен с языками, о которых знает мало: спам-фильтр, помечающий каждое письмо на арабском или китайском, хуже, чем никакого.
Чтение любой письменности#
- Слова. Текст разбивается с помощью
Intl.Segmenter, который следует правилам границ слов Unicode и использует словари для китайского, японского, тайского, лаосского, кхмерского и бирманского — письменностей без пробелов. Длинные тексты сначала делятся на части, потому что сегментатор в Node.js 18 замедляется на очень длинных строках. - Нормализация. Unicode NFKC превращает полноширинные и большинство стилизованных букв (𝐅𝐑𝐄𝐄, Ⓕⓡⓔⓔ) в обычные. Текст приводится к нижнему регистру по правилам Unicode.
- Маскировка. Невидимые символы внутри слов (
freeс пробелом нулевой ширины между двумя буквами, мягкие переносы) удаляются и подсчитываются. Слова, смешивающие алфавиты, напримерpаypalс кириллической «а», возвращаются к одному алфавиту и подсчитываются. Цифры, использованные вместо букв (v1agra), заменяются буквами. Каждый вид маскировки — отдельный признак, а три и более невидимых символа или два и более смешанных слова также добавляют баллы.
Определение языка#
Язык каждого письма определяется по письменности, а для письменностей, общих для многих языков, — по буквам:
- Хангыль означает корейский; хирагана и катакана означают японский; тайская, греческая, еврейская, армянская, грузинская, бенгальская, тамильская и другие письменности одного языка указывают на него напрямую.
- Кириллические буквы, встречающиеся только в одном языке, позволяют выбрать между украинским (і, ї, є, ґ), белорусским (ў), сербским (ђ, ћ, џ), македонским (ѓ, ќ, ѕ) и русским (ы, э, ё).
- Текст в письменностях, общих для нескольких языков (латиница, кириллица, арабское письмо, деванагари и другие), если его достаточно для суждения, передаётся в franc с ограничением на языки, распространённые в почте, чтобы короткие письма не получали метки редких языков.
Язык сообщается в result.language, а allowedLanguages: ['en', 'de'] (--allow-language en,de) добавляет 3 балла письмам, уверенно определённым на любом другом языке.
Языки, о которых модель знает мало#
Классификатор учится на примерах. В публичных наборах данных со спамом гораздо больше спама на иностранных языках, чем hamНужная почта: противоположность спама. на иностранных языках, поэтому наивный классификатор усваивает, что китайский или арабский текст сам по себе означает спам. Spam Scanner исправляет это тремя способами:
- Язык никогда не служит доказательством. Определённые язык и письменность не используются как признаки.
- Слова взвешиваются внутри своего языка. Вероятность спама для слова вычисляется относительно количества писем со спамом и ham, которые классификатор видел на языке письма, а не на всех языках. Обычное португальское слово в модели, которая видела в основном португальский спам, остаётся нейтральным.
- Уверенность следует за охватом. Результат притягивается к «unsure» пропорционально тому, сколько писем каждого вида классификатор видел на этом языке: для полной уверенности нужно по 1000 каждого (или 2 % меньшего класса для небольших личных моделей). Язык без ham в обучающих данных всегда получает «unsure».
Встроенная модель никогда не видела SMS Spam Multilingual Collection — SMS-сообщения, машинно переведённые на 21 язык. До этих правил она помечала как спам 5,7 % этого ham, включая 55 % португальского и 41 % французского. С ними — 0,18 %: ни одного на китайском, арабском, корейском, японском, хинди, португальском, французском и 20 других языках и 0,27 % на английском.
Как ловить спам на этих языках#
Ответ «unsure» безопасен, но спам он не ловит. Ловят три вещи:
- Остальные проверки не зависят от языка: похожие домены, обманные ссылки, исполняемые файлы, макросы, аутентификация, чёрные списки, правила.
- Языковая модель. Современные открытые модели читают на 100–200 языках, и Spam Scanner обращается к модели всякий раз, когда классификатор не уверен. Сквозные тесты проверяют, что
qwen3.5:4bловит спам и пропускает ham на китайском, арабском, корейском, хинди и тайском. Языковые модели - Обучение на вашей почте. В модели, обученной на вашей собственной почте, нескольких сотен писем каждого вида на языке достаточно для полной уверенности классификатора на нём. Обучение и дополнительный набор данных, который добавляет 21 язык.