AI-автоматическое тегирование контента в мобильном приложении
Типичная ситуация: пользователь загружает фото в приложение, но чтобы добавить тег, приходится вручную выбирать из сотен вариантов или писать текст. Теряются контекст и время. Мы внедряем автоматическое тегирование на основе AI — изображения, текст и видео получают метки без участия человека. Наш опыт — более 20 проектов, от маркетплейсов до соцсетей, с кастомными таксономиями. Решение подходит для любой предметной области: медицина, недвижимость, ритейл, образование. Точность on-device моделей достигает 92%, а серверных — 98% при правильно настроенном confidence score.
Например, для интернет-магазина одежды мы обучили модель распознавать 150 категорий с точностью 91%. Теперь каждый загруженный товар автоматически получает теги: «Платье», «Хлопок», «Лето». Это сократило время модерации в 4 раза и позволило сэкономить около 500 000 руб. в год на ручной разметке.
Apple Core ML documentation рекомендует Transfer Learning для создания компактных моделей с 20+ примерами на категорию.
Как AI тегирует изображения в iOS и Android?
Стандартная связка — VNClassifyImageRequest (iOS) + ImageLabeler (Android). Они выдают общие метки вроде «Food», «Sky», «Cat». Для бизнес-задач нужна кастомная таксономия: не «Одежда», а «Кожаная куртка», «Платье в цветочек». Обучаем модель через CreateML (iOS) или TensorFlow Lite (Android). Ниже — пример обучения кастомной модели под iOS.
// Обучение через CreateML (запускать на Mac, не на устройстве)
import CreateML
let trainingData = MLImageClassifier.DataSource.labeledDirectories(
at: URL(fileURLWithPath: "/training_data")
// Структура: /training_data/jacket/, /training_data/shoes/, /training_data/bag/
)
var params = MLImageClassifier.ModelParameters()
params.maxIterations = 25
params.validationData = .split(strategy: .automatic)
params.featureExtractor = .scenePrint(revision: 2) // Transfer learning от Apple
let model = try MLImageClassifier(trainingData: trainingData, parameters: params)
try model.write(to: URL(fileURLWithPath: "/model.mlmodel"), metadata: nil)
20–50 примеров на категорию, 15–30 минут обучения на MacBook Pro M2 — получаем компактную модель. Core ML Model Deployment позволяет обновлять её без публикации новой версии в App Store.
Почему иерархические теги ускоряют поиск?
Плоский список тегов — хаос. Иерархия «Еда → Итальянская кухня → Паста» даёт структурированный поиск и фильтры. Реализуем через деревья:
// Android: TagTree
data class Tag(
val id: String,
val name: String,
val parentId: String?,
val synonyms: List<String> = emptyList()
)
// При тегировании: если назначен тег "Паста" — автоматически добавляем родительские
fun expandWithParents(tagId: String, tagTree: Map<String, Tag>): Set<String> {
val result = mutableSetOf(tagId)
var current = tagTree[tagId]
while (current?.parentId != null) {
current = tagTree[current.parentId]
current?.let { result.add(it.id) }
}
return result
}
Для хранения используем отдельную таблицу с полем source (auto, user, admin). Автотеги видны только поиску, пользовательские — в UI.
Сравнение on-device и серверного тегирования
| Характеристика | On-device (CreateML / TensorFlow Lite) | Серверное (OpenAI / Claude) |
|---|---|---|
| Задержка | Мгновенно (5-50 мс) | 0.5-2 с |
| Офлайн-режим | Да | Нет |
| Приватность | Данные не покидают устройство | Данные уходят на сервер |
| Точность | 85-92% на узкой таксономии | 95-98% на сложных запросах |
| Стоимость | Бесплатно (вычислительные ресурсы устройств) | Плата за API-запросы |
Мы комбинируем: основные теги ставим на устройстве, для сложных случаев отправляем запрос на сервер. On-device тегирование в 3-10 раз быстрее серверного при аналогичной точности для типовых категорий.
Как работает confidence score?
Каждая модель возвращает вероятность принадлежности к категории от 0 до 1. Настраиваем порог (обычно 0.7-0.9) — теги ниже порога отбрасываются. Администратор может просматривать и корректировать автотеги. A/B тестирование разных порогов позволяет подобрать оптимальный баланс между точностью и полнотой.Как повысить точность тегов?
Если точность ниже ожидаемой, увеличьте объём обучающей выборки до 100+ примеров на категорию или используйте серверную модель для сложных случаев. Регулярное дообучение на новых данных поддерживает актуальность таксономии. Мы рекомендуем ежемесячно переобучать модель при появлении новых типов контента.
Тегирование текста и видео
Текстовые посты — NLP-классификация on-device через Natural Language Framework или на сервере. Промпт: «Определи 3-5 тегов из списка: ...». JSON-ответ парсится на клиенте.
Видео — анализ ключевых кадров:
func tagVideo(at url: URL) async throws -> Set<String> {
let asset = AVURLAsset(url: url)
let duration = asset.duration.seconds
let generator = AVAssetImageGenerator(asset: asset)
generator.maximumSize = CGSize(width: 224, height: 224)
var allTags = Set<String>()
var time = 0.0
while time < duration {
let cgImage = try generator.copyCGImage(at: CMTime(seconds: time, preferredTimescale: 600), actualTime: nil)
let frameTags = try await classifyImage(cgImage)
allTags.formUnion(frameTags)
time += 3.0 // каждые 3 секунды
}
return allTags
}
Для длинных видео используем фоновые задачи (BackgroundFetch на iOS, WorkManager на Android) или отправляем на backend.
Что входит в нашу работу
- Аудит текущего контента и бизнес-требований
- Проектирование таксономии тегов (плоская или иерархическая)
- Сбор и разметка обучающей выборки (минимум 20 примеров на категорию)
- Обучение моделей (CreateML, TensorFlow Lite, Core ML)
- Интеграция в iOS (Swift, SwiftUI) и Android (Kotlin, Jetpack Compose)
- Реализация поиска и фильтрации по тегам
- On-device + серверная архитектура (Firebase, Supabase или ваш бэкенд)
- Документация по таксономии и API
- Обучение команды (1-2 воркшопа)
- Техподдержка 1 месяц после релиза
Сроки реализации
| Этап | Срок |
|---|---|
| On-device тегирование изображений (готовые модели) | 3-5 дней |
| Кастомная таксономия + обучение под домен | 1-2 недели |
| Тегирование текста + видео + иерархия | 2-4 недели |
| Полный цикл (аналитика → дизайн → тест → деплой) | от 3 до 8 недель |
Стоимость рассчитывается индивидуально. Для точной оценки пришлите описание вашего проекта — мы подготовим коммерческое предложение за 1-2 дня.
Свяжитесь с нами для консультации. Закажите бесплатный аудит вашего проекта — мы проанализируем объём контента и предложим оптимальную архитектуру.







