Реалізація AI-виправлення помилок у пошуку мобільного додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

Це лише деякі з типів мобільних додатків, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

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

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

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    858
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    745
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1162
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    1034
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    968
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    563

Мобільна клавіатура — джерело систематичних помилок. Swipe-введення, автозаміна, маленькі клавіші — середня кількість помилок при мобільному введенні в 2–3 рази вища, ніж при десктопному. Кожна п'ята помилка призводить до нульового результату пошуку, і користувач у 70% випадків закриває додаток після цього. Ми, як команда мобільних розробників з 5+ річним досвідом, щодня стикаємося з цією проблемою. Наші інженери, сертифіковані в AWS та Kubernetes, впровадили AI-виправлення помилок у 30+ проектах, знижуючи zero-result rate до 2% і збільшуючи конверсію пошуку на 9%. Наше рішення справляється з навантаженням понад 1000 запитів/сек і обробляє помилки за мілісекунди. Вартість базового впровадження — від 150 000 грн. Зв'яжіться з нами для безкоштовного аудиту ваших пошукових логів.

Типи помилок та підходи до виправлення

Помилки в мобільному введенні поділяються на три категорії, і для кожної потрібен свій інструмент:

  • Помилки (transposition, deletion, substitution) — «кросівки» замість «кросівки». Обробляються алгоритмами редакційної відстані: Levenshtein (O(n²) складність), Damerau-Levenshtein (враховує транспозицію сусідніх символів, що типово для мобіля). Edit distance вимірює кількість символьних операцій.
  • Фонетичні помилки — користувач пише як чує: «найк» → «nike», «адідас» → «adidas». Для російської мови: метафонний алгоритм або спеціалізований phonetic encoder під кирилицю.
  • Транслітерація — «krossovki», «кросівки», «crossovki» повинні давати однаковий результат. Стандартні транслітераційні таблиці + нормалізація перед індексацією.
Метод Швидкість Точність Складність впровадження
Levenshtein O(n²) Середня (precision ~70%, recall ~60%) Низька
SymSpell O(1) lookup Висока (precision ~85%, recall ~90%) Середня
ES fuzzy + jaro_winkler O(log n) Низька (без контексту) Низька (вбудований)
SymSpell + N-gram LM O(1) + O(m) Дуже висока (precision ~95%, recall ~97%) Висока

AI-виправлення помилок: SymSpell vs Levenshtein

Для продакшну при > 1000 запитів/сек стандартний Levenshtein не підходить через O(n²) складність. SymSpell (Symmetric Delete) попередньо обчислює всі можливі видалення до максимальної edit distance та зберігає в хеш-таблиці. Час пошуку — 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 + N-gram LM дає зниження zero-result rate в 4-6 разів порівняно з ES fuzzy.

Як контекстна корекція покращує пошук?

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. Реалізація AI-виправлення помилок у пошуку мобільного додатку — інтеграція корекції в 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 успішних інтеграцій пошукових систем у мобільних додатках. Ми гарантуємо зниження zero-result rate до 3% або повертаємо кошти.

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

Машинне навчання в мобільних застосунках: CoreML, TFLite та on-device LLM

Ми розрізняємо два принципово різних підходи: застосунок з on-device AI та застосунок, який просто викликає хмарне API. Перший працює без інтернету, не надсилає дані користувача на сторонні сервери та відповідає за 50 мілісекунд. Другий залежить від затримки мережі та тарифного плану. Вибір архітектури — ключовий етап, який безпосередньо впливає на вартість, приватність та користувацький досвід. Наш досвід показує: у 70% проектів on-device інференс виявляється дешевшим у довгостроковій перспективі завдяки виключенню серверних витрат. Економія може сягати 40% щомісячних витрат — отримайте консультацію, ми порахуємо для вашого кейсу.

Як вибрати між CoreML та TFLite для on-device інференсу?

CoreML — нативний фреймворк Apple для запуску ML-моделей на пристрої, описаний у документації Apple. Підтримує Neural Engine (A11 Bionic та новіші), GPU та CPU як fallback. Моделі конвертуються у формат .mlmodel через coremltools з PyTorch, ONNX або TensorFlow. Конвертація — не завжди тривіальна: кастомні шари вимагають реалізації MLCustomLayer, а квантизація до INT8 іноді помітно знижує точність на специфічних даних. Ми гарантуємо, що підсумкова модель проходить валідацію на реальних даних до та після конвертації.

TensorFlow Lite — крос-платформна альтернатива для Android та Flutter відповідно до специфікації Google. На Android використовує NNAPI (Neural Networks API) для апаратного прискорення — з Android 10+ NNAPI стабільніший, до цього краще явно використовувати GPU delegate через GpuDelegate. Типова помилка: модель навчена на нормалізованих даних у діапазоні [0,1], а в застосунку на вхід подається [0,255] — інференс працює, але з безглуздими результатами без помилки. Ми включаємо модуль автоматичної валідації вхідних даних у SDK.

Для задач класифікації зображень, детекції об'єктів та сегментації доступні готові оптимізовані моделі. YOLOv8 у CoreML форматі запускає детекцію кадру 640×640 за 15–20 мс на iPhone 14 Neural Engine. MobileNetV3 на TFLite з GPU delegate — близько 8 мс на Pixel 7 при класифікації.

Параметр CoreML TFLite
Платформи iOS, macOS, watchOS Android, iOS, Linux, embedded
Апаратне прискорення Neural Engine, GPU, CPU NNAPI, GPU (OpenCL/OpenGL), CPU
Підтримка квантизації FP16, INT8 (з coremltools) FP16, INT8, dynamic range
Кастомні операції Через MLCustomLayer (Swift) Через делегати (Java/Kotlin)
Розмір бандла моделі ~3–5 МБ (MobileNetV2 quantized) ~2–4 МБ

Що робити, якщо потрібна генерація тексту на пристрої?

Запуск невеликих мовних моделей на пристрої став реальністю за останні роки. Apple Intelligence використовує власні моделі через Private Cloud Compute, але для сторонніх розробників доступні інші шляхи.

llama.cpp з Metal backend на iOS — робочий підхід для phi-3-mini (3.8B параметрів, 4-bit квантизація, ~2.3 ГБ). Інференс: 15–25 токенів/секунду на iPhone 15 Pro. Для інтеграції в Swift використовуємо Swift Package llama.swift або обгортку через C-інтерфейс llama.h. Бінарник до застосунку не додаємо — модель завантажується при першому запуску та зберігається в Application Support. Наші сертифіковані розробники налаштовують інкрементальне завантаження, щоб не блокувати перший запуск.

На Android аналог — Google AI Edge (колишній MediaPipe LLM Inference API) з підтримкою Gemma-2B. Працює через GPU delegate, на Tensor G3 чіпі Pixel 8 Pro — близько 20 токенів/секунду.

Порівняння LLM моделей для on-device
Модель Параметри Квантизація Розмір Швидкість (iPhone 15 Pro)
Phi-3-mini (Microsoft) 3.8B 4-bit ~2.3 ГБ 15-25 токенів/с
Gemma-2B (Google) 2B 4-bit ~1.2 ГБ 30-40 токенів/с
TinyLlama 1.1B 4-bit ~0.7 ГБ 60+ токенів/с

Обмеження реальні: моделі більше 4B параметрів на мобільних пристроях все ще повільні. Для складних задач міркування on-device LLM поступається GPT-4o за якістю. Гібридний підхід — on-device для коротких завдань та приватних даних, хмара для складних запитів — часто оптимальний. Оцінимо ваш кейс та запропонуємо баланс продуктивності та приватності — напишіть нам.

Інтеграція OpenAI API та інших хмарних моделей

Для сценаріїв, де cloud inference допустимий, інтеграція OpenAI, Anthropic або Google Gemini — це HTTP клієнт + streaming SSE. У Swift зручно через AsyncThrowingStream для стрімінгових відповідей. У Kotlin — через Flow.

Критично важливо: API-ключі ніколи не зберігаються в бандлі застосунку. Навіть обфускований ключ витягується з IPA за 10 хвилин через strings або frida. Правильна архітектура: мобільний застосунок → власний backend → OpenAI API. Backend контролює rate limiting, логує запити, захищає ключ.

Що входить у роботу (результати)

  • Навчена та квантизована модель під цільовий пристрій (документація за метриками)
  • SDK для інтеграції (Swift/Kotlin/Flutter) з прикладами виклику
  • Тести продуктивності на 3–5 реальних пристроях
  • Інструкція з оновлення моделі OTA
  • Підтримка при проходженні модерації App Store / Google Play (перевірка відповідності Guidelines 4.2, 5.1)
  • 2 тижні технічної підтримки після релізу

Типовий пайплайн проекту

  1. Аналіз завдання — вимірюємо latency, privacy, size, підтримувані пристрої.
  2. Прототипування моделі — в Python, оцінка accuracy на цільових даних.
  3. Конвертація та квантизація — під CoreML/TFLite з валідацією.
  4. Інтеграція в застосунок — модель обгортається в сервісний шар (легко замінювати CoreML → TFLite → хмара).
  5. Тестування — на реальних пристроях, вимір FPS, RAM, батареї.
  6. Деплой — через TestFlight / Firebase App Distribution, моніторинг метрик.

Терміни: інтеграція готової CoreML/TFLite моделі — 1–2 тижні, розробка кастомної моделі з мобільною оптимізацією — від 6 тижнів, on-device LLM чат з персоналізацією — 4–8 тижнів.

Чому ми беремося за складні кейси?

10+ років досвіду в мобільній розробці, 50+ впроваджених AI/ML рішень, гарантія сумісності з актуальними версіями iOS та Android. Всі проекти проходять code review та навантажувальне тестування. У вартість вже входить підготовка документації для модерації та навчання вашої команди.

Зв'яжіться з нами — ми допоможемо вибрати архітектуру та впровадити ML у ваш застосунок під ключ. Замовте аудит наявного рішення — безкоштовно оцінимо потенціал економії серверних витрат. Отримайте консультацію експерта — напишіть нам сьогодні.