Почему языку луганда нужна своя LLM, а не переводчик Google
Google Translate поддерживает около 150 языков. Луганда, на котором говорит 20 миллионов человек в Уганде, не входит в их число. На 2026 год ситуация не изменилась. Большие коммерческие модели вроде GPT-4o или Gemini 2.0 Pro знают про луганда лишь то, что это язык. Спроси их что-то — получишь галлюцинацию на плохом английском с парой случайных слов. Это не технологический пробел. Это цифровое неравенство.
Проект LugandaLM родился из простой идеи: если технология не приходит к людям, люди должны забрать технологию себе. Не адаптировать англоцентричную модель, а вырастить свою. С нуля. На текстах, собранных с местных форумов, из WhatsApp-чатов, оцифрованных книг и школьных учебников.
Сбор данных: охота за текстами на вымирающем языке
Первый и самый болезненный этап. Для английского есть терабайты чистых данных. Для луганда — гигабайты сырого, неструктурированного, часто ошибочного текста. Мы скребли сайты местных газент, договаривались с библиотеками, просили волонтеров переписывать от руки тексты. Получили датасет в 800 МБ чистого текста — смехотворно мало по меркам LLM. Но этого хватило.
Архитектура модели: меньше, но умнее
Мы не могли позволить себе 7-миллиардную параметрическую махину. Цель — телефон без GPU. Выбрали архитектуру, вдохновленную Kakugo: маленькая, но эффективная. На базе Transformer, но с хитростями: сжатые эмбеддинги, shared weights, grouped-query attention из LLaMA 3.1. Итог: 124 миллиона параметров. Модель помещается в 500 МБ оперативки.
Токенизатор — отдельная история. SentencePiece на сырых данных создавал ужасные куски. Мы обучили BPE-токенизатор с нуля, специально для луганда, что дало +15% к перплексии на валидации.
Обучение на коленке: без суперкомпьютеров и миллионов долларов
Никакого кластера A100. Два бывших в употреблении RTX 3090 на Colab Pro+. Обучение заняло три недели. Использовали фреймворк Transformer от Hugging Face (актуальная версия на март 2026 — 5.12.0) с оптимизациями типа FlashAttention-3 и смешанной точностью bfloat16. Кривая обучения сначала напоминала кардиограмму покойника, но после тонкой накидки гиперпараметров и увеличения батча — пошла вниз.
Главная ошибка новичков: пытаться повторить учебный план больших моделей. Не надо 300 эпох. Ранняя остановка после 10-15 эпох часто дает лучший результат, так как модель не успевает переобучиться на скудных данных.
Сжатие и оптимизация: как впихнуть невпихуемое в телефон
Сырая модель в FP16 — около 250 МБ. Для Android-приложения это многовато. Применили пост-тренировочное квантование до INT8 через библиотеку TensorFlow Lite (актуальная версия 2.17.0). Потери в качестве — менее 3%, выигрыш в размере — в 2 раза. Дальше — оптимизация графа, удаление ненужных операций. Итоговый файл .tflite весит 118 МБ.
Для инференса используем TFLite Inference API. На среднем телефоне (Snapdragon 678, 6 ГБ ОЗУ) генерация одного токена занимает ~120 мс. Медленно? Для чат-бота — да. Для приложения, которое переводит медицинские инструкции или помогает с домашним заданием — идеально. Более подробно о тонкостях запуска на слабом железе читайте в нашем практическом гайде.
Android-приложение: интерфейс для бабушек и дедушек
Приложение написано на Kotlin с Jetpack Compose. Дизайн — минималистичный, с крупными кнопками. Основные функции: чат-бот для практики языка, перевод с английского на луганда (наша специализация), генерация простых историй для детей. Всё работает полностью офлайн. Модель запакована в assets.
Самое сложное — управление памятью. Если не выгружать модель из памяти правильно, приложение падает через 10 минут. Пришлось реализовать ленивую загрузку и агрессивный кэш. Но оно работает. Даже на старом Samsung A12.
Альтернативы: почему fine-tuning больших моделей не всегда работает
Стандартный путь — взять многоязычную модель типа Gemma 3N (9B) или Qwen2.5-Math (7B) и дообучить на своих данных. Мы пробовали. Результат — модель, которая начинает говорить на луганда, но с английским синтаксисом и логикой. Она не понимает культурный контекст. Это как надеть европейский костюм на африканское тело — сидит криво.
| Метод | Качество текста | Размер модели | Сложность |
|---|---|---|---|
| Обучение с нуля (наш подход) | Высокое, аутентичное | ~120 МБ | Очень высокая |
| Fine-tuning многоязычной модели | Среднее, с акцентом | От 2 ГБ | Средняя |
| Использование облачного API | Низкое (галлюцинации) | 0 МБ (но нужен интернет) | Низкая |
Феномен, описанный в статье "Парадокс fine-tuning", проявился в полной мере: даже небольшое количество английских данных в предобучении большой модели доминирует над тоннами данных низкоресурсного языка при дообучении.
Кому это нужно? От исследователей до активистов
Этот подход — не для всех. Он грязный, трудоемкий и требует фанатизма. Но он идеально подходит:
- Лингвистам и активистам сохранения языков: чтобы создать цифровое присутствие для языка, который отсутствует в цифровом мире.
- Разработчикам в регионах с низким интернет-покрытием: для создания офлайн-сервисов — образовательных, медицинских, сельскохозяйственных.
- Исследователям AI для социального блага: как кейс, доказывающий, что AI можно демократизировать.
- Хакерам-одиночкам: которым важно доказать, что всё можно сделать самому, без доступа к корпоративным ресурсам.
Следующий шаг — добавить RAG. Чтобы модель могла отвечать на вопросы по локальной базе знаний, например, по законодательству Уганды. Технически, это уже реализуемо, как описано в руководстве по офлайн RAG на Android. Но для этого нужны силы и время.
Итог: модель LugandaLM и приложение — это proof of concept. Доказательство того, что сообщество, вооруженное современными (но доступными) инструментами, может создавать AI, который служит им, а не наоборот. Это не про технологию. Это про справедливость.