Реализация AI-исправления опечаток в поиске мобильного приложения

Мобильная клавиатура — источник систематических ошибок. Swipe-ввод, автозамена, маленькие клавиши — среднее количество опечаток при мобильном вводе в 2–3 раза выше, чем при десктопном. Каждая пятая опечатка приводит к нулевому результату поиска, и пользователь в 70% случаев закрывает приложение посл

Разработка и поддержка любых видов мобильных приложений:

Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

Это лишь некоторые из типы мобильных приложений, с которыми мы работаем, и каждый из них может иметь свои специфические особенности и функциональность, а также быть адаптированным под конкретные потребности и цели клиента.

Услуги, которые мы предлагаем
Показано 1 из 1Все 1734 услуг
Реализация AI-исправления опечаток в поиске мобильного приложения
Средний
~3-5 дней

Наши компетенции:

Часто задаваемые вопросы

Последние работы

  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    897
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    783
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1216
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    1079
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    1004
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    598

Мобильная клавиатура — источник систематических ошибок. Swipe-ввод, автозамена, маленькие клавиши — среднее количество опечаток при мобильном вводе в 2–3 раза выше, чем при десктопном. Каждая пятая опечатка приводит к нулевому результату поиска, и пользователь в 70% случаев закрывает приложение после этого. Мы, как команда мобильных разработчиков с 5+ летним опытом, ежедневно сталкиваемся с этой проблемой. Наши инженеры внедрили AI-коррекцию опечаток в 30+ проектах, снижая zero-result rate до 2% и увеличивая конверсию поиска на 9%. Наше решение справляется с нагрузкой свыше 1000 запросов/сек и обрабатывает опечатки за миллисекунды. Свяжитесь с нами для бесплатного аудита ваших поисковых логов.

Типы ошибок и подходы к исправлению

Ошибки в мобильном вводе делятся на три категории, и для каждой нужен свой инструмент:

  • Опечатки (transposition, deletion, substitution) — «кроссвки» вместо «кроссовки». Обрабатываются алгоритмами редакционного расстояния: Levenshtein, Damerau-Levenshtein (учитывает транспозицию соседних символов, что типично для мобиля).
  • Фонетические ошибки — пользователь пишет как слышит: «найк» → «nike», «адидас» → «adidas». Для русского языка: метафонный алгоритм или специализированный phonetic encoder под кириллицу.
  • Транслитерация — «krossovki», «кроссовки», «crossovki» должны давать одинаковый результат. Стандартные транслитерационные таблицы + нормализация перед индексацией.
Метод Скорость Точность Сложность внедрения
Levenshtein O(n²) Средняя Низкая
SymSpell O(1) lookup Высокая Средняя
ES fuzzy + jaro_winkler O(log n) Низкая (без контекста) Низкая (встроен)
SymSpell + N-gram LM O(1) + O(m) Очень высокая Высокая

Почему SymSpell быстрее Levenshtein?

Для продакшна при > 1000 запросов/сек стандартный Levenshtein не подходит из-за O(n²) сложности. SymSpell (Symmetric Delete) предвычисляет все возможные удаления до максимального edit distance и хранит в хэш-таблице. Время lookup — O(1) для большинства запросов. Как это выглядит на практике:

from symspellpy import SymSpell, Verbosity sym_spell = SymSpell(max_dictionary_edit_distance=2, prefix_length=7) sym_spell.load_dictionary("ru_frequency_dict.txt", term_index=0, count_index=1) def correct_query(query: str) -> str: suggestions = sym_spell.lookup_compound( query, max_edit_distance=2, transfer_casing=True ) if suggestions and suggestions[0].distance > 0: return suggestions[0].term return query 

Частотный словарь для русского языка строим из поисковых логов приложения — это важно: «кожаный ремень» будет в топе частотности именно в контексте вашего домена, а не «кожаная куртка» из универсального словаря Яндекса.

Как контекстная коррекция улучшает поиск?

SymSpell исправляет каждое слово независимо. «кросовки адидас» исправит оба слова правильно. Но «белие кроссовки» — SymSpell может предложить «белые» или «белее», не зная, какой вариант грамматически корректен в контексте. N-gram language model на поисковых логах помогает выбрать правильный вариант: P("белые кроссовки") >> P("белее кроссовки").

Без контекстной модели вы рискуете предложить пользователю неверный вариант, который всё равно не даст результатов. На практике это увеличивает zero-result rate на 5-7%. В наших проектах мы используем N-gram LM с окном 3 токенов, обученную на логах конкретного приложения. Это даёт прирост точности на 15-20%. Экономия на операционной поддержке поиска может достигать 2 000 000 рублей в год для приложений с высоким трафиком.

Elasticsearch: spell correction из коробки и его ограничения

ES предоставляет term suggester с fuzzy matching. Работает, но:

  • ищет ближайшие термины из индекса по edit distance — не учитывает контекст запроса
  • слабо работает для коротких токенов (< 4 символов) из-за количества вариантов с ed=1
  • нет учёта частотности: «найки» (опечатка) и «найки» (брендовый термин) получают одинаковый приоритет
# ES term suggester — базовый уровень response = await es.search( index="products", body={ "suggest": { "spell_suggest": { "text": query, "term": { "field": "title", "suggest_mode": "missing", # только если термин не найден "max_edits": 2, "min_word_length": 4, "string_distance": "jaro_winkler" } } } } ) 

jaro_winkler лучше подходит для коротких строк, чем levenshtein — он придаёт больший вес совпадениям в начале строки.

Как мы это делаем: кейс из практики

Для клиента — интернет-магазина обуви с каталогом 50 000 товаров и 200 000 активных пользователей — мы внедрили связку SymSpell + N-gram LM. Исходный zero-result rate был 12%, после внедрения он снизился до 2.3%. Ключевые шаги:

  1. Собрали 2 млн поисковых запросов за 3 месяца, очистили от ботов.
  2. Построили частотный словарь и N-gram LM (триграммы).
  3. Настроили fallback: если SymSpell даёт несколько вариантов, выбираем тот, что максимизирует вероятность по LM.
  4. На клиенте добавили UX-компонент с возможностью отката к оригинальному запросу.

Результат: пользователи принимают исправление в 85% случаев, конверсия поиска выросла на 9%, а операционные затраты на поддержку поиска снизились на 30%.

Детали настройки SymSpell для русского языка

Для построения частотного словаря мы используем только релевантные запросы из логов, исключая ботов и тестовые сессии. Минимальная частота вхождения слова — 3. Для фонетических ошибок применяем метафонный encoder, адаптированный под кириллицу. Словарь содержит около 200 000 уникальных слов.

Что входит в работу

  • Анализ логов и построение частотного словаря на основе ваших данных
  • Разработка и настройка SymSpell + N-gram LM под специфику вашего домена
  • Интеграция в search API (REST или GraphQL) с учётом текущей архитектуры
  • Мобильные компоненты (Android Compose, iOS SwiftUI) с UX-паттерном отката
  • Документация по эксплуатации и мониторинг ключевых метрик
  • Код и доступы к репозиторию с CI/CD
  • Поддержка в течение 1 месяца после деплоя

Мобильная интеграция: UX исправления

// Android: отображение исправления с возможностью отмены @Composable fun SearchResultsHeader( originalQuery: String, correctedQuery: String?, onRevertToOriginal: () -> Unit ) { if (correctedQuery != null && correctedQuery != originalQuery) { Row( modifier = Modifier.padding(horizontal = 16.dp, vertical = 8.dp), verticalAlignment = Alignment.CenterVertically ) { Text( text = buildAnnotatedString { append("Результаты для: ") withStyle(SpanStyle(fontWeight = FontWeight.Bold)) { append(correctedQuery) } } ) Spacer(modifier = Modifier.weight(1f)) TextButton(onClick = onRevertToOriginal) { Text("Искать «$originalQuery»") } } } } 

Паттерн «мы исправили — но вы можете вернуть оригинал» — стандарт индустрии. Не навязывайте исправление без escape hatch.

// iOS: аналогичный подход через SwiftUI struct CorrectionNoticeView: View { let original: String let corrected: String let onRevert: () -> Void var body: some View { HStack { Text("Показываем результаты для «\(corrected)»") .font(.subheadline) Spacer() Button("Искать «\(original)»", action: onRevert) .font(.subheadline) } .padding(.horizontal) .padding(.vertical, 6) .background(Color(.systemGray6)) } } 

Процесс работы и сроки

  1. Аналитика — сбор и очистка поисковых логов, определение частотности и типичных опечаток (1-2 дня).
  2. Проектирование — выбор стека (SymSpell, N-gram LM, fallback), настройка словарей (1-2 дня).
  3. Реализация — интеграция коррекции в search API, написание клиентских компонентов (iOS/Android) — 2-5 дней.
  4. Тестирование — A/B тест на 10% трафика, сравнение zero-result rate и метрик юзабилити (2-3 дня).
  5. Деплой — поэтапный rollout с мониторингом (1-2 дня).

Ориентировочные сроки: ES fuzzy + SymSpell с готовым словарём — 2-4 дня; с кастомным словарём и N-gram LM — 1-2 недели. Подробный план составляем после аудита ваших данных. Закажите внедрение AI-коррекции.

Как выбрать подходящий алгоритм?

Если трафик менее 100 запросов/сек и не критична точность — достаточно ES fuzzy. Для высоких нагрузок и требований к качеству выбирайте SymSpell + N-gram LM. Ниже сравнительная таблица эффективности разных подходов:

Метрика ES fuzzy только SymSpell SymSpell + N-gram LM
Zero-result rate 8-12% 4-6% 2-3%
Время ответа (p95) < 20 мс < 5 мс < 10 мс
Доля принятых исправлений 50-60% 70-80% 80-90%
Сложность внедрения Низкая Средняя Высокая

Мы поможем определиться: свяжитесь с нами для бесплатной оценки вашего проекта. Опыт нашей команды — более 30 успешных интеграций поисковых систем в мобильных приложениях.

Согласно Human Interface Guidelines от Apple, поиск должен быть устойчивым к опечаткам и предлагать релевантные результаты (раздел «Search»).