Реализация Natural Language Processing в мобильном приложении

TRUETECH занимается разработкой, поддержкой и обслуживанием мобильных приложений iOS, Android, PWA. Имеем большой опыт и экспертизу для публикации мобильных приложений в популярные маркеты Google Play, App Store, Amazon, AppGallery и другие.
Разработка и поддержка любых видов мобильных приложений:
Информационные и развлекательные мобильные приложения
Новостные приложения, игры, справочники, онлайн-каталоги, погодные, фитнес и здоровье, туристические, образовательные, социальные сети и мессенджеры, квиз, блоги и подкасты, форумы, агрегаторы
Мобильные приложения электронной коммерции
Интернет-магазины, B2B-приложения, маркетплейсы, онлайн-обменники, кэшбэк-сервисы, биржи, дропшиппинг-платформы, программы лояльности, доставка еды и товаров, платежные системы
Мобильные приложения для управления бизнес-процессами
CRM-системы, ERP-системы, управление проектами, инструменты для команды продаж, учет финансов, управление производством, логистика и доставка, управление персоналом, системы мониторинга данных
Мобильные приложения электронных услуг
Доски объявлений, онлайн-школы, онлайн-кинотеатры, платформы предоставления электронных услуг, платформы кешбека, видеохостинги, тематические порталы, платформы онлайн-бронирования и записи, платформы онлайн-торговли

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

Предлагаемые услуги
Показано 1 из 1 услугВсе 1735 услуг
Реализация Natural Language Processing в мобильном приложении
Сложная
~1-2 недели
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_mobile-applications_feedme_467_0.webp
    Разработка мобильного приложения для компании FEEDME
    756
  • image_mobile-applications_xoomer_471_0.webp
    Разработка мобильного приложения для компании XOOMER
    624
  • image_mobile-applications_rhl_428_0.webp
    Разработка мобильного приложения для компании RHL
    1054
  • image_mobile-applications_zippy_411_0.webp
    Разработка мобильного приложения для компании ZIPPY
    947
  • image_mobile-applications_affhome_429_0.webp
    Разработка мобильного приложения для компании Affhome
    862
  • image_mobile-applications_flavors_409_0.webp
    Разработка мобильного приложения для компании FLAVORS
    445

Реализация Natural Language Processing в мобильном приложении

NLP в мобильном контексте — это не одна задача, а несколько принципиально разных: классификация текста, извлечение сущностей (NER), анализ тональности, суммаризация, машинный перевод. Каждая решается разными инструментами с разными требованиями к ресурсам.

Платформенные NLP API

Начинать нужно с того, что уже есть на устройстве — это бесплатно по ресурсам и работает без интернета.

iOS — NaturalLanguage framework:

import NaturalLanguage

// Определение языка
let recognizer = NLLanguageRecognizer()
recognizer.processString("Привет, как дела?")
let language = recognizer.dominantLanguage // .russian

// Токенизация
let tokenizer = NLTokenizer(unit: .word)
tokenizer.string = text
tokenizer.enumerateTokens(in: text.startIndex..<text.endIndex) { range, _ in
    print(String(text[range]))
    return true
}

// Анализ тональности
let tagger = NLTagger(tagSchemes: [.sentimentScore])
tagger.string = text
let (sentiment, _) = tagger.tag(at: text.startIndex,
                                  unit: .paragraph,
                                  scheme: .sentimentScore)
let score = Double(sentiment?.rawValue ?? "0") ?? 0.0
// score: -1.0 (негатив) ... +1.0 (позитив)

Android — ML Kit Text APIs:

EntityExtraction (ML Kit) умеет находить адреса, телефоны, даты, трекинг-номера, деньги — без интернета, модель скачивается один раз (~8 МБ). LanguageIdentification — аналог NLLanguageRecognizer. Модель SmartReply — уже разобрана в другой услуге.

Классификация текста на TFLite

Платформенные API не умеют в доменную классификацию — не скажут «это отзыв о еде» или «это технический запрос в поддержку». Нужна своя модель.

Типовой pipeline для мобильного NLP-классификатора:

  1. Обучение: BERT-tiny или MobileBERT (8 МБ vs 100 МБ у full BERT) на PyTorch/TF
  2. Конвертация: torch.onnx.export() → ONNX → onnxruntime-mobile, или tf2tflite.tflite
  3. Квантизация: int8 через TFLite Converter даёт ~4x сжатие с минимальной потерей точности
class TextClassifier(context: Context) {
    private val interpreter: Interpreter
    private val tokenizer: BertTokenizer

    init {
        val modelBuffer = loadModelFile(context, "bert_tiny_classifier.tflite")
        interpreter = Interpreter(modelBuffer, Interpreter.Options().apply {
            addDelegate(NnApiDelegate()) // Android Neural Networks API
        })
        tokenizer = BertTokenizer.fromAssets(context, "vocab.txt")
    }

    fun classify(text: String): ClassificationResult {
        val tokens = tokenizer.encode(text, maxLength = 128, truncate = true)
        val inputIds = Array(1) { tokens.inputIds.toIntArray() }
        val attentionMask = Array(1) { tokens.attentionMask.toIntArray() }
        val output = Array(1) { FloatArray(NUM_LABELS) }

        interpreter.runForMultipleInputsOutputs(
            arrayOf(inputIds, attentionMask),
            mapOf(0 to output)
        )
        return output[0].argmax().let { ClassificationResult(label = LABELS[it], confidence = output[0][it]) }
    }
}

NNAPI делегат на Android 8.1+ ускоряет инференс через DSP/NPU. На Pixel 7+ — ускорение до 10x. На бюджетных устройствах NNAPI может быть медленнее CPU — тестируйте на реальных девайсах.

Named Entity Recognition

NER — извлечение именованных сущностей из текста (персоны, организации, локации, даты). Примеры применения: автоматическое создание событий в календаре из сообщений, предзаполнение форм из CV, парсинг чеков.

ML Kit EntityExtraction покрывает типовые сущности без обучения. Для кастомных доменов — собственная NER-модель на базе BiLSTM+CRF или BERT. Размер модели: BiLSTM — 5–15 МБ, DistilBERT-NER — ~60 МБ в fp16.

На iOS NL framework возвращает NLTag с типами: .personalName, .placeName, .organizationName. Работает на устройстве без интернета.

Суммаризация и перевод

Суммаризация on-device требует тяжёлых моделей (BART, T5 минимум 60–100 МБ). Для мобильного — либо экстрактивная суммаризация (выбор ключевых предложений без генерации, работает через TF-IDF + MMR, ~100 КБ логики), либо cloud API (OpenAI, YandexGPT).

Машинный перевод: ML Kit Translation поддерживает 59 языков, модели скачиваются по запросу (~30 МБ на пару языков). На iOS — MLTranslation через Apple Intelligence (iOS 18+) или облачные API.

Обработка пользовательского ввода: очистка и нормализация

Часто упускаемый шаг — предобработка текста перед NLP-моделью. Опечатки, сленг, смайлы, смешанная раскладка (когда латиницей пишут русские слова) — всё это снижает точность. Apache Lucene Analyzers на Android или NLTokenizer с кастомными правилами на iOS помогают привести текст к нормальной форме.

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

Определение NLP-задач и требований к качеству. Выбор подхода: платформенные API, ML Kit или собственная модель. Для кастомных моделей: подготовка данных, обучение, квантизация, конвертация. Интеграция с NNAPI/Metal-делегатом для ускорения. Тестирование на языковом разнообразии (диалекты, ошибки ввода).

Ориентиры по срокам

Интеграция платформенных NLP API (тональность, токенизация, NER) — 3–5 дней. Кастомный классификатор с обучением и мобильной оптимизацией — 3–6 недель.