Реализация фильтрации нецензурной лексики в STT

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Реализация фильтрации нецензурной лексики в STT
Простая
~1 рабочий день
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1240
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1167
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    867
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1084
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    563
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    829

Реализация фильтрации нецензурной лексики в STT

Фильтрация нецензурной лексики в транскрипциях необходима для публичных платформ, корпоративных систем и сервисов, работающих с детьми. Реализуется на нескольких уровнях: в STT-движке и/или на уровне post-processing.

Встроенные фильтры STT-провайдеров

Google STT:

config = speech.RecognitionConfig(
    profanity_filter=True,  # заменяет нецензурные слова на ***
    language_code="ru-RU"
)

AWS Transcribe:

transcribe.start_transcription_job(
    VocabularyFilterName='profanity-filter-ru',
    VocabularyFilterMethod='mask',  # 'mask' | 'remove' | 'tag'
)

Azure Speech:

speech_config.set_profanity(speechsdk.ProfanityOption.Masked)

Post-processing фильтр

Для движков без встроенного фильтра или для более тонкого контроля:

import re

PROFANITY_LIST_RU = [...]  # список слов в нормализованной форме

def filter_profanity(text: str, replacement: str = "***") -> str:
    """Фильтр с учётом морфологии через нормализацию"""
    import pymorphy3
    morph = pymorphy3.MorphAnalyzer()

    words = text.split()
    result = []
    for word in words:
        # Нормализуем слово (приводим к начальной форме)
        parsed = morph.parse(word)
        normal_form = parsed[0].normal_form if parsed else word.lower()
        if normal_form in PROFANITY_LIST_RU:
            result.append(replacement)
        else:
            result.append(word)
    return " ".join(result)

Использование pymorphy3 критично для русского: нецензурное слово может быть в любой грамматической форме.

Логирование без хранения

Для аудита без сохранения контента — логируем факт наличия нецензурной лексики и временную метку без самого слова.

Сроки: 1–2 дня.