Мови

Спам надходить будь-якою мовою, як і звичайна пошта. 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 виправляє це трьома способами:

  1. Мова ніколи не є доказом. Визначені мова й писемність не використовуються як ознаки.
  2. Слова зважуються в межах своєї мови. Імовірність спаму для слова обчислюється відносно кількості листів зі спамом і з ham, які класифікатор бачив мовою цього листа, а не всіма мовами. Повсякденне португальське слово в моделі, яка бачила переважно португальський спам, залишається нейтральним.
  3. Упевненість залежить від покриття. Результат зсувається до «невизначено» тим сильніше, чим менше листів кожного типу класифікатор бачив цією мовою: для повної впевненості потрібно по 1000 кожного (або 2 % меншого класу для малих персональних моделей). Мова без ham у навчальних даних завжди отримує «невизначено».

Вбудована модель ніколи не бачила SMS Spam Multilingual Collection — SMS-повідомлень, машинно перекладених 21 мовою. До цих правил вона позначала як спам 5,7 % цього ham, зокрема 55 % португальського і 41 % французького. З ними — 0,18 %: жодного китайською, арабською, корейською, японською, гінді, португальською, французькою чи ще 20 мовами, і 0,27 % англійською.

Виявлення спаму цими мовами#

«Невизначено» — безпечно, але спаму не ловить. Його ловлять три речі:

  • Інші перевірки не залежать від мови: схожі домени, оманливі посилання, виконувані файли, макроси, автентифікація, чорні списки, правила.
  • Мовна модель. Сучасні відкриті моделі читають від 100 до 200 мов, і Spam Scanner запитує модель щоразу, коли класифікатор не впевнений. Наскрізні тести перевіряють, що qwen3.5:4b ловить спам і пропускає ham китайською, арабською, корейською, гінді та тайською. Мовні моделі
  • Навчання на вашій пошті. У моделі, навченій на вашій власній пошті, кількох сотень листів кожного типу певною мовою достатньо для повної впевненості класифікатора в цій мові. Навчання і додатковий набір даних, що додає 21 мову.

Редагувати цю сторінку на GitHub · Markdown ·