UADetox

Переписує образливі українські коментарі чемною літературною мовою і зберігає думку автора. Невеликий класифікатор вирішує, що переписати, а модель на 1,84 ГБ працює на звичайному процесорі.

Приклади

КоментарПереказ
Ти дебіл, закрий ротаТи, добродію, помиляєшся, тож помовч-но краще.
Та йди ти нахуй зі своїми порадамиТа йди собі, чоловіче добрий, своєю дорогою зі своїми порадами.
Пиздець, а не дороги, мер тільки бабло пиляєОй лишенько, а не дороги, а мер, бач, тільки гроші розкрадає!
Дякую за новину, дуже корисноБез змін: коментар не образливий.

Результати

Частка добрих переказів на 1966 коментарях валідаційної вибірки. Як рахуємо — нижче.

МодельРозмірДобрі, %
Gemma 4 31B, донавчена, з підказкою стилю31B78,4
Gemma 4 31B, донавчена31B73,2
Gemma 4 26B-A4B, донавчена26B70,5
UADetox E2B, для пристрою2B59,5

Без донавчання Gemma 4 E2B дає лише близько 20% добрих переказів.

Як рахуємо

Кожен переказ оцінює LLM-суддя (DeepSeek V4.1 Flash). Він бачить лише коментар і переказ, без еталона, і позначає вади: лишилася образа, втрачено чи змінено зміст, мовні помилки, незграбність, брак літературності, надмірна стилізація.

Переказ добрий, якщо водночас:

Усі моделі оцінено на тих самих коментарях тим самим суддею з однаковими налаштуваннями. Метрика розрізняє якість: еталонні перекази отримують 91,6%, а незмінений коментар чи коментар із видаленою лайкою — близько 0%. Суддя суворіший за людину: на 95 оцінках автора він ставить «добре» приблизно на 15 пунктів рідше, тож наведені цифри радше занижені.

Як навчали

  1. SFT. LoRA-адаптер на близько 40 тисячах пар «коментар — літературний переказ». Запит — лише сам коментар, без інструкцій.
  2. Он-політична дистиляція з донавченої 31B. Модель генерує власні перекази, а 31B оцінює кожен їхній токен; модель навчається наближатися до вибору вчителя. Частка добрих не змінилася, але втрата змісту зменшилася на 4,9 п. [−7,2; −2,7].
  3. Навчання з урахуванням 4-бітного квантування. Адаптер навчали крізь точне округлення Q4_0 злитих ваг, тому злиття з QAT-вагами Gemma майже не шкодить якості.
  4. Скорочення словника з 262 до 88 тисяч токенів: українські, пунктуація та найчастіші латинські. Модель меншає з 3,35 до 1,84 ГБ і генерує швидше.

Також пробували DPO, відбір найкращих відповідей (RS-SFT), послідовнісну дистиляцію та продовжене передтренування. За правилами, заданими до запуску, приросту вони не дали.

Окремий адаптер чи злиття

ЗбіркаРозмірГенерація, ток/сДобрі, зміна
Google Q4_0 + окремий LoRA3,35 + 0,19 ГБ14,5−0,3 [−2,3; +1,8]
LoRA злито, звичайне навчання3,35 ГБ15,8−4,8 [−6,9; −2,7]
LoRA злито, навчання крізь Q4_03,35 ГБ15,8−1,4 [−3,6; +0,7]
Те саме + скорочений словник1,84 ГБ20,1+0,05

Генерація на Hetzner CAX21 (4 ядра ARM), llama.cpp; обидва злиття мають однакову структуру файлу. Зміна якості — порівняно з тією самою моделлю в bf16, для словника — з повною збіркою. Злиття вигідніше окремого адаптера: на 9% швидше, а зі скороченим словником — на 39%. Збірка конвертується в MLX без переквантування (ті самі 4-бітні блоки), тож той самий адаптер працює й на Apple.

Запуск

У Telegram: напишіть боту @uadetoxdevbot, наберіть @uadetoxdevbot і текст у будь-якому чаті або додайте його до групи.

Локально через llama.cpp (близько 4 с на коментар на 4 ядрах ARM):

llama-server -m uadetox_e2b_q4.gguf -c 1024 -t 4 --no-cache-prompt \
  --chat-template-kwargs '{"enable_thinking":false}'

curl -s localhost:8080/completion -d '{
  "prompt": "<|turn>user\nТи дебіл, закрий рота<turn|>\n<|turn>model\n",
  "temperature": 0, "stop": ["<turn|>"]
}' | jq -r .content

Ваги та датасет готуються до публікації.

Обмеження