Какие техники используются для обработки нецензурной лексики в тексте?

Обработка нецензурной лексики (обсценной, оскорбительной или токсичной) в тексте — важная задача в сфере NLP, особенно в системах модерации контента, чат-ботах, социальных сетях и образовательных приложениях. Методы делятся на три большие категории: обнаружение, маскирование/цензурирование и фильтрация/блокировка.

1. Обнаружение нецензурной лексики

A. Словари ругательств (Blacklists)

Наиболее простой метод — наличие словаря с "запрещёнными" словами. Применяется прямое сопоставление слов из текста со списком.

  • Примеры: английские словари (profanity lists), русские — из открытых источников (включая производные, мат и эвфемизмы)

  • Поддержка регулярных выражений и вариаций слов (например, с заменами букв на цифры: с*ка, suka, суkа, cyka)

Плюсы:

  • Простота

  • Высокая скорость

Минусы:

  • Низкая устойчивость к обходу (обфускации)

  • Много ложноположительных срабатываний (например, фамилии, географические названия)

  • Не покрывает сарказм, контекст

B. Регулярные выражения и эвристики

Обнаружение с учётом:

  • Латинизации (х** → h**)

  • Замены букв цифрами или символами (3б вместо еб)

  • Повторов (сууууууука)

  • Сокращений (пздц, жпг, бл, нах)

  • Использование Unicode-нормализации (одинаковый вид символов)

Пример:

import re
pattern = r'\\b(?:\[сc\]\[уy\]\[кk\]+\[аa@\*\]+)\\b'
re.findall(pattern, text.lower())

2. Маскирование/цензурирование

После обнаружения нежелательной лексики возможны:

A. Замена символов

  • Звёздочки (б****)

  • Частичная маскировка (су**)

  • Использование знаков ($@!%)

def mask_word(word):

return word[0] + "*" * (len(word)-1)

B. Замена синонимами/эвфемизмами

  • “собака” вместо “сука”

  • “чёрт побери” вместо матерных выражений

Используется в детских приложениях, юмористических системах или играх.

C. Удаление оскорбительных фраз

  • Удаление целого предложения, содержащего мат

  • Применяется в некоторых строгих форумах и чатах

3. Модели машинного обучения

Модельные методы распознают токсичность текста даже при отсутствии явных ругательств.

A. Классические ML

  • Использование TF-IDF + логистической регрессии или SVM

  • Обучение на размеченных данных (например, метки toxic / non-toxic)

  • Можно использовать n-граммы, эмбеддинги и прочие признаки

B. Нейросети

  • CNN или BiLSTM поверх векторизованного текста

  • Хорошо распознают ненормативную лексику и завуалированные выражения

C. Transformer-based модели

  • Использование BERT, RoBERTa, XLM-R, RuBERT

  • Обучение на датасетах типа Jigsaw Toxic Comments, RuToxic, ToxicQA

  • Возможность учитывать контекст, сарказм, обфускацию

Пример:

from transformers import pipeline
classifier = pipeline("text-classification", model="unitary/toxic-bert")
classifier("Ты дурак и идиот")

Модель возвращает вероятности токсичности.

4. Поддержка мультиязычности

Ругательства часто миксуются между языками ("русский мат + латиница", "английский текст с русским матом"). Меры:

  • Языковая нормализация (transliteration)

  • Использование мультилингвальных моделей (например, XLM-R)

  • Создание словарей на разных языках и их гибридов

5. Метрики оценки

  • Precision — насколько точны предсказания (важно избегать ложноположительных — false positives)

  • Recall — насколько полно система ловит все случаи

  • F1-score — гармоническое среднее

  • Визуализация: confusion matrix, false positives/negatives в контексте

6. Методы обхода фильтрации (атаки) и защита от них

Пользователи часто пытаются обмануть фильтры:

Метод обхода Пример Защита
Обфускация суkа, c*yka Регулярки, ML модели
--- --- ---
Латинизация blyad, cyka Транслитерация, embeddings
--- --- ---
Пробелы с у к а Удаление пробелов, tokenizer aware
--- --- ---
Символы б@н@н, х@ Нормализация символов
--- --- ---
Эвфемизмы жопа мира, иди ты Обученные модели
--- --- ---

7. Постобработка и реакция

В зависимости от политики платформы:

  • Мягкая реакция: предупреждение, временное скрытие

  • Жёсткая: бан, удаление, блокировка комментария

  • Интерактивная: предложение заменить слово, автоисправление

8. Примеры библиотек и инструментов

Библиотека/модель Описание
profanity-check Лёгкая модель на LogisticRegression
--- ---
profanity-filter Поддержка замены, обфускации, многозначных слов
--- ---
bad-words-list (GitHub) Словари для разных языков
--- ---
Toxic-BERT Модель от Unitary.ai для токсичности
--- ---
DeepPavlov Модели для анализа токсичности в русскоязычном тексте
--- ---
Perspective API API от Google Jigsaw для оценки токсичности
--- ---

9. Особенности для русского языка

  • Морфологическое разнообразие мата (корни, приставки, суффиксы)

  • Обилие сленга и завуалированных выражений

  • Большой пласт ругательств с двусмысленными значениями (например, “петух”, “козёл”, “сука”)

  • Эвфемизмы: “блин”, “ёшкин”, “фигня”, “жжжесть”

Для работы с русским:

  • Использовать pymorphy2 или Natasha для морфоанализа

  • Работать с RuBERT или DeepPavlov toxic-classifier

10. Этичность и риски

  • Ошибочная цензура нормального контента (false positives)

  • Культурные различия: в одном языке слово может быть оскорбительным, в другом — нет

  • Возможные способы дискриминации пользователей при ошибочной модерации

Поэтому важен тестинг на реальных данных, возможность ручного оспаривания, а также объяснение причин блокировки (explainability).