惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Troy Hunt's Blog
F
Fortinet All Blogs
D
DataBreaches.Net
Google DeepMind News
Google DeepMind News
Y
Y Combinator Blog
The Register - Security
The Register - Security
T
Tailwind CSS Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
月光博客
月光博客
V
Vulnerabilities – Threatpost
S
Securelist
S
SegmentFault 最新的问题
T
Threat Research - Cisco Blogs
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
P
Privacy International News Feed
S
Schneier on Security
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
L
LangChain Blog
GbyAI
GbyAI
Apple Machine Learning Research
Apple Machine Learning Research
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
美团技术团队
Cyberwarzone
Cyberwarzone
C
Cisco Blogs
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google Online Security Blog
Google Online Security Blog
M
MIT News - Artificial intelligence
U
Unit 42
V
V2EX
C
CERT Recently Published Vulnerability Notes
云风的 BLOG
云风的 BLOG
B
Blog
博客园 - 叶小钗
Attack and Defense Labs
Attack and Defense Labs
Security Archives - TechRepublic
Security Archives - TechRepublic
aimingoo的专栏
aimingoo的专栏
Hacker News: Ask HN
Hacker News: Ask HN
博客园 - Franky
Engineering at Meta
Engineering at Meta
Schneier on Security
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
酷 壳 – CoolShell
酷 壳 – CoolShell
T
The Blog of Author Tim Ferriss
IT之家
IT之家
W
WeLiveSecurity
Cisco Talos Blog
Cisco Talos Blog
K
Kaspersky official blog
Martin Fowler
Martin Fowler
SecWiki News
SecWiki News

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
# Морфоанализатор ингушского языка: как мы научили словарь понимать словоформы — и что изменилось за два месяца
dofin · 2026-06-22 · via Все публикации подряд на Хабре

# Морфоанализатор ингушского языка: как мы научили словарь понимать словоформы — и что изменилось за два месяца

Средний

17 мин

0

Главная страница словаря PaydaDosh: поиск и слово дня

Главная страница словаря PaydaDosh: поиск и слово дня

PaydaDosh: поиск по словарю и «слово дня».

В апреле я писал тут про PaydaDosh — открытый словарь и корпус ингушского языка. Та статья была про «вот, собрали всё в одном месте»: 66 тысяч статей, параллельный корпус, ИИ в разделе вопросов. С тех пор прошло два месяца, и проект перестал быть просто словарём. Мы начали строить грамматику — движок, который понимает, как устроено ингушское слово.

Это статья про то, как мы это делаем технически: почему ингушская морфология — это больно, как устроен разбор словоформ, где он ломается и что мы с этим делаем. Плюс короткий обзор всего, что наросло вокруг за эти недели — корпус, инструменты, сообщество и первые встречи с академическим институтом.

Сразу оговорюсь про честность. Движок работает, но он в бете. Часть форм строится по правилам и может содержать неточности. Я буду показывать и то, что получилось, и то, что пока промахивается — потому что для малого языка вторая часть важнее первой.


Где мы сейчас в цифрах

Открытая статистика проекта PaydaDosh

Открытая статистика проекта PaydaDosh

Живая статистика: счётчики обновляются автоматически.

Чтобы был масштаб, вот снимок базы на 21 июня:

Что

Сколько

Толкований

97 487

из них лемм (начальных форм)

47 634

связанных форм и вариантов из источников

49 853

Морфологических форм в индексе

119 826

Предложений в корпусе

171 577

Связей корпус↔словарь

1 564 292

Пословиц

2 156

Фразеологизмов (устойчивых выражений)

2 150

Источников

28

И сразу — где у нас дыры, потому что про них врать смысла нет:

  • Примеры употребления — 24 617 лемм, это 51.7%. Хотим за 80%.

  • Привязка к корпусу — 30 598 лемм, 64.2%.

  • Озвучка — 41 лемма. 0.1%. Это главный провал проекта, и алгоритмом его не закрыть: голос должен записать носитель.

Все эти числа считаются из боевой базы при каждой загрузке страницы статистики — это не маркетинговый слайд, а живой счётчик.


Почему ингушскую морфологию нельзя просто заигнорить

В английском морфология — это «прибавь -s и -ed, и почти всё». Можно построить поиск на голых строках и не сильно проиграть. В ингушском так не выйдет, и вот почему.

Ингушский — нахский язык, эргативного строя, с очень богатой словоизменительной системой:

  • Падежи — и их даже не посчитать однозначно. В монографии П. К. Услара отмечено 16 падежей, у З. К. Мальсагова — тоже 16 (десять основных и шесть «менее употребительных»), в вузовском учебнике «Современный ингушский язык» — 12, в трёх группах. Мы на карточках держим практичный набор из восьми основных — именительный (цӀера дожар), родительный, дательный, эргативный (дера дожар), союзный, сравнительный, вещественный, местный — плюс производные формы местного падежа. Сам факт, что число падежей у разных авторов гуляет от 8 до 16, — уже сигнал: готовой таблицы, которую можно просто зашить в код, не существует.

  • Грамматические классы в / й / б / д. Это аналог рода, но шире: класс согласуется не только в именной группе, но и в глаголе. Один и тот же глагол меняет начальную согласную под класс подлежащего/объекта: веза / йеза / беза / деза. Для словаря это значит, что «беза», «веза», «деза» — формально разные строки, а по сути одно слово. И наоборот: класс часто единственное, что отличает омонимы — про мукх (ячмень/нож/ржавчина) будет ниже.

  • Семь временных форм глагола в трёх сферах — настоящее, будущее, прошедшее, — причём прошедшее представлено сразу четырьмя формами: имперфект, аорист, перфект, плюсквамперфект. Незаконченные формы строятся от основы повелительного наклонения, законченные — от неопределённой формы. Плюс масдар, каузатив (понудительная форма), причастия, деепричастия, потенциалис.

  • Аблаут — чередования корневых гласных. При словоизменении меняется не хвост, а середина слова, причём по закономерным рядам: а → аь (ала → аьлар «сказал»), уо → иэ (мотта → меттар «показалось»), ов → эй (довза → дайзар «узнал»). Поэтому обрезать суффикс мало — нужно ещё уметь восстановить исходную гласную основы.

  • Морфонология на стыках. При образовании будущего времени сходятся три согласных (-ргд-, -ргб-) и срабатывает регрессивная ассимиляция: доагӀаргда → доагӀадда. Алгоритм, который этого не знает, такую словоформу не соберёт и не разберёт.

  • Эвиденциальность. Грамматически закодировано, видел ли говорящий событие сам или знает с чужих слов.

И вишенка: даже типов склонения у разных исследователей разное число — у Мальсагова три, у Яковлева четыре, у Оздоева шесть, а в академической «Морфологии» 2012 года — целых семнадцать. Всё потому, что склонение идёт по принципу двух основ (прямая и косвенная) и осложнено теми самыми чередованиями и наращениями, которые, по словам лингвистов, «никакими фонологическими условиями не обусловлены».

Складываем: одно слово реально даёт десятки форм. И теперь главная проблема обычного словаря. Он знает только начальную форму. Пользователь встречает в тексте «наха», «хиннав», «фето» — лезет в словарь — и не находит ничего, потому что в словаре лежат «нах», «хила», «фета». Слово есть, а человек его не достал.

Добавьте сюда, что одна и та же форма настоящего времени может означать три разных времени по контексту: чуйоагӀа — это и «прихожу домой» (сейчас), и «приходил» (вчера), и «приду» (завтра). Никакой парсер строк такое не разведёт — нужна модель грамматики.

Морфоанализатор — это то, что закрывает разрыв между формой в тексте и статьёй в словаре. В обе стороны:

  • форма → лемма: по любой словоформе вернуть начальную форму и разбор (падеж, время, класс);

  • лемма → парадигма: по начальной форме построить всю сетку склонения/спряжения.

наха   → нах   (люди; эргатив)
хиннав → хила  (быть; прош., перфект)
фето   → фета  (эргатив)
тайпара→ тайпа (разновидность; форма на -ара)

Эти стрелки выглядят просто. За каждой из них — слой работы, про который дальше.


Как устроен разбор: лексикон, правила и онома́стикон

Движок собран из трёх компонентов данных:

  1. Лексикон — выверенное ядро: леммы, их классы, основы, известные формы. Он у нас уже восьмой версии — цифра честно отражает, сколько раз мы переразбирали всю модель.

  2. Курированные формы — формы, которые вручную подтвердил носитель или редактор. Это «золотой» слой: он всегда перебивает то, что насчитал алгоритм.

  3. Онома́стикон — справочник имён и топонимов. Вынесен отдельно, потому что имена ломают разбор сильнее всего.

Когда на вход приходит словоформа, движок возвращает список разборов-кандидатов, у каждого — лемма, часть речи, набор грамматических признаков, метод (как форма получена) и уверенность. Метод — это важная штука: форма может быть «из словаря», «курированная», «по правилу» или «догадка». Чем надёжнее метод, тем выше форма ранжируется и тем «надёжнее» точка рядом с ней на карточке.

На карточке слова это видно прямо в интерфейсе. Каждая форма в парадигме помечена цветной точкой по источнику:

  • выверено — подтверждено носителем/редактором;

  • словарь — взято из словарной статьи;

  • корпус — встретилось в реальном тексте;

  • синтетика (бета) — построено по правилу, может врать.

Рядом с каждой формой — флажок 🚩, которым модератор отмечает форму как ошибочную. Это не косметика: ниже объясню, почему ручная отметка для нас дороже любого алгоритма.

Парадигма слова хила с цветными точками источника

Парадигма слова хила с цветными точками источника

Парадигма на карточке: цвет точки = источник формы, флажок — пометить ошибку.

Карточка слова хила: переводы и примеры

Карточка слова хила: переводы и примеры

Карточка слова: переводы из разных словарей и живые примеры.


Парадигмы на карточках

Обратная задача — лемма → парадигма — это то, что видно на карточке как раздел «Парадигма (бета)». Вот, например, глагол къажде («качать, раскачивать»):

Инфинитив     къажде
Наст.         къажду
Прош. (аорист) къаждир, къаждаьд
Перфект       къаждаьд
Будущее       къаждергда
Деепричастие  къаждеш

А вот глагол хила («быть») — один из самых частотных и неправильных, у него парадигма разъезжается во все стороны:

Инфинитив     хила
Наст.         хул, хулий, хилац
Прош. (аорист) хилари, хиланзар, хилацар, хиннавацар, хиннадацар
Перфект       хинна, хиннав, хиннай, хиннаб, хиннадац
Будущее       хургба, хургва, хургбац, Хургдац, хургья
Повелит.      хилалахь, долда, хилалаш
Деепричастие  хулаш, хилча, хуллаш
Причастие     хиннача, болчча, хиннараш, хиннацох, волчоа

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

Парадигмы помечены «бета» осознанно. Часть ячеек заполнена выверенными формами из словарей (БДИМТ09 дал нам около 27 600 глагольных форм с метками наст./прош./перф./буд.), часть достроена синтетикой по правилам. Мы показываем источник каждой формы, а не прячем — потому что пользователь имеет право знать, где данные твёрдые, а где гипотеза.


Самое интересное — там, где движок промахивается

Узнавать 80% словоформ корпуса научиться несложно: частотные формы частотных слов разбираются легко, и они дают основной объём. Сложность — в хвосте. В оставшихся процентах сидят ровно те случаи, которые делают язык языком: неправильные глаголы, классные чередования, аблаут, омонимия имени и нарицательного.

Чтобы системно выгрести этот хвост, мы сделали детерминированный пре-пасс — отдельный прогон, который не угадывает ответ, а готовит контекст для человека, который ответит. Логика такая:

1. токенизируем корпус (регуляркой, сохраняя палочку Ӏ как часть слова) → частоты форм
2. оставляем формы, которые есть в реестре словоформ И встречаются в корпусе с freq ≥ 3
3. разбираем каждую форму движком
4. форма попадает в MISS, если у неё нет ни одного разбора
   с confidence ≥ 0.6 и методом надёжнее, чем «догадка»
5. для каждого промаха собираем «пакет контекста»:
     • примеры из корпуса (переведённые — первыми)
     • словарные кандидаты на лемму
     • догадки анализатора (даже слабые, ниже порога)

Почему freq ≥ 3 и только пересечение с корпусом: нет смысла разбирать форму, которой в живых текстах нет — она подождёт. А вот форма, которая встретилась в корпусе несколько раз и при этом не разбирается — это конкретный, заметный пробел. Его и надо закрыть в первую очередь.

На выходе — не «бесконечный океан языка», а конечный, обозримый список форм, к каждой из которых уже приложен контекст: кандидаты, примеры, переводы. Такой список реально пройти руками носителей. И, что важно, прогон по всему корпусу занимает считанные секунды — список можно пересобирать после каждого пополнения данных и смотреть, что осталось разобрать.

Как генерируются кандидаты на лемму

Для каждого промаха движок предлагает до 14 вариантов начальной формы — не чтобы выбрать автоматически, а чтобы носителю было из чего выбрать одним кликом. Стратегий четыре, по убыванию надёжности:

  1. Точное совпадение — форма уже есть в словаре как заголовок (бывает, что слово есть, а связь потерялась).

  2. Отрезание суффикса с восстановлением гласной. Перебираем падежные и множественные суффиксы (плюс набор частых «хвостов» вроде -арча, -ашка, -гахьа), отрезаем, и — поскольку в основе гулял аблаут — пробуем дорастить основу гласной: а, е, и, о, ӏ.

  3. Догадки анализатора — даже те, что не дотянули до порога.

  4. Перекрытие по началу слова — для аблаутных случаев, когда менялась середина: ищем леммы с тем же началом и близкой длиной.

Вот как это выглядит на реальной форме тайпара (частота в корпусе — 1971):

### тайпара  freq=1971
  кандидаты: тайпа (д,д) «разновидность» (−ара+а)
             тайпа (д,д) «структурно-семантический тип» (−ара+а)
             тайпан «родовой, фамильный» (prefix)
  пример [словарь]: тайп-тайпара басараш вӏашагӏъэде деза
                    ru: Нужно смешать разные краски

Носитель видит форму, три-четыре осмысленных кандидата с пометами классов, и живой пример с переводом для контекста. Дальше — один клик, и форма привязана к правильной лемме навсегда, уже с методом «выверено».

Главная отдача: движок находит слова, которых в словаре не было

Самым неожиданным оказалось вот что. Значительная часть «промахов» — это не «движок не смог разобрать форму», а «слова просто нет в словаре». Кандидаты на лемму, которые предлагает пре-пасс, постоянно указывают на отсутствующую начальную форму другого слова — и тогда задача носителя не «привязать форму», а «добавить недостающую статью».

Так морфоанализатор превратился ещё и в инструмент пополнения словаря. За один проход мы выявили и добавили 52 слова, которых в базе не было, — и почти все это глаголы пространственного направления, образованные превербами (приставками дӀа-, ӏо-, хьа-, чу-, ара-, духьал-, тӀа-, юкъе-). Это ровно тот пласт, который в научной литературе описывают как основной способ глагольного словообразования в нахских языках: преверб не меняет грамматику основы, но даёт ей новое лексическое значение и пространственную привязку.

Вот часть того, что добавили:

  • дӀа- (от говорящего, в сторону): дӀаберза (отвернуться), дӀаякха (погасить), дӀахьуладе (скрыть, спрятать), дӀатаба (притаиться), дӀасоцаде (остановить, пресечь), дӀалелха (убежать), дӀакъовса (схватиться, сразиться), дӀакхаста (закружить), дӀайистхила (обратиться, заговорить), дӀадовла (уйти, разойтись), дӀагаргагӀерта (приближаться), дӀаберзабе (уладить, довести дело до конца);

  • ӏо- (вниз): ӏочакхдувла (проникать сквозь), ӏохоададе (отрезать, разграничить), ӏотатта (толкнуть вниз), ӏомоассаде (вылить, высыпать), ӏолитта (изложить, излить), ӏолелха (сбежать вниз), ӏодагарде (отсчитать), ӏобоассабе (вытряхнуть);

  • хьа- (сюда, к говорящему): хьаховша (подсесть), хьатакха (подползти), хьакховдаде (подать, протянуть), хьагӀовтта (вскочить, восстать), хьаготасса (обойти вокруг), хьабожабе (выронить, уронить), хьабоаттӀабе (разорвать, вспороть), хьаберзабе (повернуть к себе);

  • духьал- (навстречу): духьалкхаста (кружиться навстречу), духьалтовса (метать навстречу), духьалбахка (выйти навстречу), духьалба (двигаться навстречу);

  • остальные направления: чу- — чухийца (спустить внутрь), чувоаллаве (запирать); ара- — араэца (вынести), аратувса (выбросить наружу), арабала (выходить); тӀа- — тӀаӏеха (лаять на), тӀабетта (приложить, набросить); юкъе- — юкъелатта (встать между, вмешаться).

Каждое из этих слов теперь — полноценная статья в словаре. Для языка, где словарь десятилетиями собирался вручную, «движок, который сам подсказывает пропущенные слова» — это качественно другой темп работы.

Омонимия и полисемия: один облик — сколько слов?

Короткие ингушские слова чудовищно многозначны. Но «многозначность» — это сразу две разные вещи, и словарь обязан их различать. Полисемия — это одно слово с разошедшимися значениями. Омонимия — это разные слова, случайно совпавшие в начальной форме. Как отличить одно от другого? Критерий простой, и он же объясняет, зачем нам вообще нужны полные парадигмы:

Если у двух карточек с одним заголовком все формы парадигмы совпадают — это одно слово (полисемия). Если расходятся хоть в одной позиции — это разные слова (омонимия).

Возьмём цӀи. Две карточки — «огонь» и «имя», — но парадигма у них одна до буквы: эргатив цӀеро, множественное цӀераш, класс й. По критерию это одно слово с двумя значениями — полисемия. (Связь между ними, возможно, не случайна — по одной из версий, имя ребёнка у ингушей ассоциировалось с огнём родового очага, — но это уже гипотеза.)

А теперь ха. Под одной формой именительного падежа — четыре разных набора форм:

ха (хано, ханаш), класс д — стража, караул, охрана
ха (хано, ханаш), класс й — время, пора, срок
ха (хаьно, хаьнаш), класс д — бедро, бок
ха (хов, хайнад), глагол    — знать, уметь

Парадигмы разные — значит, это четыре разных слова, случайно (или нет…?) совпавших в заголовке. Омонимия. Причём «стража» и «время» расходятся вообще только классом (д против й): склоняются одинаково, а в речи дают разное согласование — «охранник пришёл» и «время пришло» строятся по-разному.

Тот же случай с мукх — три слова под одной строкой, и развести их можно только по классу:

мукх (б) — ячмень
мукх (д) — складной нож, ножик
мукх (й) — ржавчина
Поисковая выдача слова хила

Поисковая выдача слова хила

Одно слово — десятки значений и живых примеров.

И ка: ка (б, д) — «баран» или «колос», ка (й) — «рука, хватка». И де — два глагола под одним обликом: де (ду, даьд) «делать» и де (дув, дийнад) «убить», различишь только по спряжению.

Вывод для движка прямой: класс и полная парадигма — это не украшение карточки, а признаки, без которых нельзя ни отличить «ячмень» от «ножа», ни понять, одно перед нами слово или три. Поэтому класс мы протаскиваем через весь разбор, а спорные случаи (где разводить надо по смыслу предложения) уходят к носителю. Сюда же — имена собственные: «СаргӀилг» в одном предложении человек, а в другом часть оборота; для них есть отдельный онома́стикон и пометка «подозрение: имя», но окончательно разводит их живой глаз.

И это не пара курьёзов: тот же критерий, прогнанный по всей базе, выявил около 2 100 заголовков, под которыми прячется больше одной леммы (а у да́ккха, дохка, далар — по шесть–восемь). Разобрать этот пласт — отдельная большая работа по ревизии словаря, и парадигмы движка как раз дают для неё инструмент.

И совсем тяжёлый случай — кандидатов нет вообще

Есть формы, к которым движок не нашёл ни одной зацепки:

язъяь  — причастие «написанный» (от язде)
еча    — форма с классным / аблаутным сдвигом
деце   — «если нет» (отрицательная форма связки)

«язъяь» — это причастие («филологе Ӏилман доктор хила язъяь диссертаци» — «диссертация на соискание степени доктора филологических наук»). «деце» — отрицательная форма от «да / дац» в условном контексте. Это не редкие слова — это очень частотная грамматика, просто хитро устроенная. Именно такие формы и есть настоящая граница между «поиском по строкам» и «движком, который знает язык».


Почему всё держится на носителях, а не на модели

У нас нет иллюзий, что хороший морфоанализатор ингушского языка можно «сгенерить» большой моделью. Данных в обучении почти нет — ингушского в интернете исчезающе мало, и то, что есть, частью в старой орфографии и с ошибками распознавания со сканов. Модель будет уверенно галлюцинировать парадигмы.

Поэтому архитектура у нас обратная привычной: алгоритм не выдаёт ответ, он готовит вопрос. Машина делает то, что умеет хорошо и быстро — токенизирует корпус, считает частоты, перебирает суффиксы, поднимает кандидатов и подкладывает переведённые примеры. А решение — какая лемма верная, правильно ли построена ячейка парадигмы — принимает носитель, в один клик, по уже подготовленному контексту. Каждая выверенная форма уходит в курированный слой и больше не пересчитывается.

ИИ при этом не выкинут — он работает там, где силён:

  • в разборе морфоанализатор подсказывает встроенному ИИ-переводчику падежи, классы и кто подлежащее в эргативной конструкции — и перевод становится точнее;

  • в разделе вопросов (Хаттараш) к каждому новому вопросу формируется предварительный ответ на основе словаря, корпуса и грамматики — он опирается на реальные данные через RAG, а не сочиняет, и носители его правят или принимают как лучший.

Но фундамент — выверенные людьми формы. «Каждая выверенная носителем форма для нас дороже любого алгоритма» — это не лозунг, это буквально про то, какой слой данных перебивает какой.

Вопрос в Хаттараш с ИИ-ответом и ответом носителя

Вопрос в Хаттараш с ИИ-ответом и ответом носителя

ИИ даёт черновой ответ по словарю, носитель уточняет и записывает звук.


Что ещё наросло за два месяца

Морфоанализатор — главное, но не единственное. Коротко по остальному, потому что многое из этого кормит тот же движок.

Корпус заметно прибавил. Кроме «Магас Благословенный» Кодзоева, добавили:

  • исторический эпос Кодзоева «Магате-Фаьрате» — около 6 800 предложений (для ~930 есть изданный авторский перевод как эталон сверки);

  • роман Дахкильгова «Берд» (1990) — 5 796 предложений с русским переводом, плюс повесть «Кукий денал» (235);

  • сборник Джека Лондона «Дувцараш» в переводе А. Плиева 1941 года — оцифровали со скана;

  • учебник Яковлева «Синтаксис ингушского литературного языка» — 2 361 параллельное предложение, со старой орфографией, которая теперь модернизируется при поиске на лету.

Каждый такой текст — это и материал для чтения, и топливо для анализатора: из него движок учит новые формы и имена. Параллельных выровненных корпусов для нахских языков почти нет, так что каждая такая книга — реальный ресурс для вычислительной лингвистики.

Источники корпуса: собрания параллельных предложений

Источники корпуса: собрания параллельных предложений

Параллельный корпус: ингушский и русский выровнены по предложениям.

Большой словарь БДИМТ09 (Тариева, Бекова и др., 2009, 24 000 слов) перезалили с улучшенным распознаванием: 21 893 чистые карточки, около 27 600 глагольных форм с парадигмами, 22 497 примеров, и — важное для движка — 574 связи между классными вариантами глаголов (Б↔В↔Д↔Й↔Я).

Числа прописью — отдельный инструмент. Ингушский счёт двадцатеричный (база-20): 40 — это «два по двадцать» (шовзткъа), 60 — «три по двадцать» (кховзткъа), 80 — дезткъа, а 99 — «восемьдесят и девятнадцать» (дезткъе ткъеста). Конвертер берёт любое число до квинтиллиона и пишет его словами, с переключателем количественное ↔ порядковое. Это та грамматика, которую руками не наберёшь — а она нужна и людям, и тому же ИИ.

Инструмент «Число прописью» на ингушском

Инструмент «Число прописью» на ингушском

Двадцатеричный счёт: любое число словами на ингушском.

Викторина (/quiz) — игровой режим на 14 976 карточек: показываем ингушское слово и четыре русских варианта. Формы, заимствования и имена отфильтрованы автоматически (чтобы не было задач «автобус → автобус»), полисемия учтена — любое из значений многозначного слова засчитывается.

Карточка викторины: угадай перевод слова

Карточка викторины: угадай перевод слова

Викторина: угадай перевод — игровой режим словаря.

Раздел Хаттараш: вопросы и носители

Раздел Хаттараш: вопросы и носители

Хаттараш: сообщество отвечает, носители получают пометку.

Хаттараш и Хранители — социальный слой. В разделе вопросов уже сформирована начальная база носителей и вопросов с ответами: появились шаблоны ответов, векторный поиск похожих вопросов перед публикацией, запись аудио прямо в форму ответа. А система «Хранители» — это геймификация вклада: уровни от ондарг до Ӏилманхо, восемь категорий бейджей за слова, примеры, озвучки, исправления. Знание носителей теперь течёт обратно в словарь — ответ можно прикрепить к карточке слова.


Наука подключилась

В июне у нас прошли две рабочие встречи с Ингушским НИИ гуманитарных наук им. Ч. Э. Ахриева. Это для проекта поворотный момент: до сих пор это была история одного разработчика и сообщества энтузиастов, а теперь к ней подключается академический институт — авторы тех самых словарей, которые лежат у нас в базе.

Что из этого вышло конкретно:

  • Сделал рабочий кабинет для учёных — детальная правка статей, текстов и словоформ, плюс возможность ставить материалу статус «проверено специалистом». Это поднимает планку с «выверено носителем» до академической точности.

  • Внедрил логирование модерации — каждая правка видна прямо на сайте, с автором и историей. Для академической работы прозрачность правок обязательна.

  • Институт заявил о готовности передать свои научные материалы и электронные данные в базу. Мы, в свою очередь, используем выверенные академические словари и параллельные корпуса для обучения встроенного ИИ.

  • Шеф-редактор газеты «Сердало» Ибрагим Курскиев показал свой опыт цифровизации — ингушскую раскладку клавиатуры, спеллчекер для MS Office и корпус из 96 тысяч параллельных предложений для интеграции в «Яндекс.Переводчик». Будем обсуждать обмен данными.

  • Главный итог — решение создать на базе ИнгНИИ рабочую группу по цифровым языковым технологиям, чтобы свести в одну точку академическую науку, разработку и медиа.


Планы — что хотим сделать дальше

Держу планы открытыми — часть из них это приглашение помочь, а не дорожная карта в вакууме.

По морфоанализатору:

  • Закрыть хвост непокрытых форм руками носителей — пакеты контекста уже готовы, нужен проход.

  • Поднять долю узнавания словоформ корпуса с ~80% к 98%+, в первую очередь за счёт классных вариантов (в/й/б/д) и аблаутных чередований — это самые системные ошибки.

  • Развести омонимию имени и нарицательного: довести онома́стикон и проверку «подозрение: имя» до автоматического разрешения по контексту предложения.

  • Снять с парадигм метку «бета» там, где все ячейки выверены — карточка за карточкой.

  • Достроить классы склонения существительных и основы глаголов как формальную модель, а не набор частных правил — это то, где особенно нужны лингвисты.

По данным и текстам:

  • Поднять покрытие примерами с 51.7% выше 80%.

  • Перевести и выверить черновые машинные переводы корпуса (Магас, Берд) — статус «выверено носителем» ставится только после проверки.

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

Звук: от живых озвучек к синтезу речи.

  • Набрать базу озвучек носителями — сейчас 0.1%, это стыдный провал. Запись в одну кнопку везде: на сайте, в боте, в приложении.

  • На собранных голосах обучить TTS (синтез речи) для ингушского — чтобы любое слово и любой пример озвучивались автоматически даже там, где живой записи нет. Для этого нужен корпус «текст + чистый звук», и копим мы его именно сейчас.

  • Записать эталонно, в студийном качестве, звуки и фонемы языка — фарингальные, абруптивы, ту самую палочку Ӏ и звуки кӀ, кх, хӀ и прочие. На бытовых записях они слышны плохо, а для учащихся это критично.

Обучение: приложения для детей и взрослых.

  • Две траектории: для детей — игровая, через картинки, звук и повторение; для взрослых — с грамматикой, разбором форм, опорой на словарь и корпус.

  • Два уровня сложности: начальный (алфавит, базовая лексика, простые фразы — на готовых уроках разговорника и викторине) и продвинутый (падежи, классы, времена глагола — на парадигмах морфоанализатора и примерах из корпуса).

  • Морфоанализатор здесь — ядро: он показывает форму, разбирает её и строит парадигму, а это ровно то, на чём держатся упражнения «поставь слово в нужный падеж, класс, время».

По сотрудничеству:

  • Запустить рабочую группу при ИнгНИИ и наладить регулярный обмен данными с институтом, «Сердало» и другими заинтересованными лицами.

  • Договориться об объединении наших морфологических форм с уже существующими параллельными корпусами и о совместной интеграции в массовые переводчики (тот же «Яндекс.Переводчик») — чтобы усилия разных команд не дублировались, а складывались.

Ахча — без этого дальше не уехать.

До сих пор проект держался на чистом энтузиазме: код, оцифровка, модерация — всё бесплатно и силами сообщества. Но следующий рубеж бесплатно не берётся. Качественная озвучка десятков тысяч слов, студийная запись звуков и фонем, обучение TTS, перевод и верификация корпуса профессиональными лингвистами — это оплачиваемая работа, и её много. Поэтому честный пункт плана — искать финансирование: гранты на сохранение языков, поддержку институтов и фондов, краудфандинг сообщества. Модель видится смешанной: оплачиваемое добавление озвучек носителями, оплата лингвистам за выверку парадигм и переводов, студийная запись звука — при том что сам словарь, корпус и инструменты остаются открытыми и бесплатными для всех. Если у вас есть опыт с грантами на сохранение малых языков — это та помощь, которой нам сейчас особенно не хватает.

Открытость. Базовое остаётся бесплатным и открытым. Цель — не «удобный переводчик», а работающая инфраструктура для исследователей, преподавателей и тех, кто учит язык всерьёз.


Что почитать про грамматику, на которую опирается движок

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

Раздел статей об ингушском языке

Раздел статей об ингушском языке

Раздел статей: оцифрованная академическая грамматика.


Если хотите помочь

Проект упирается ровно в три типа людей, и если вы из любого — напишите.

  • Носители языка — самое ценное. Увидели на карточке неверную форму — жмите флажок «Сообщить об ошибке». Добавляйте живые примеры и озвучку. Одна выверенная форма закрывает то, что алгоритм не закроет никогда.

  • Лингвисты и преподаватели — нужны классы склонения, основы глаголов, правила чередований, разведение омонимов. Это та формальная грамматика, на которой движок стоит. Редактор парадигм уже готов и ждёт своих героев лингвистов.

  • NLP-инженеры и те, кто работал с эргативными языками, нестандартной графикой или строил морфоанализаторы для малых языков — нам особенно интересен ваш опыт. Где вы ловили грабли на классном согласовании и аблауте? Как разводили онома́стикон и нарицательную лексику?

Всё открыто на paydadosh.ru. Журнал всех обновлений — на /updates, живая статистика — на /about/stats, а морфоанализатор можно потрогать прямо на карточках слов в разделе «Парадигма».

Буду рад вопросам в комментариях — особенно по грамматике (которую я сам не знаю) и по тому, как такие вещи делают для других малых языков.


Проект целиком — на paydadosh.ru: словарь и поиск по формам, параллельный корпус, морфоанализатор на карточках слов, статьи о грамматике ингушского языка, словарь в цифрах и журнал обновлений.

Подписаться и поставить: Telegram-канал @paydadosh и бот-словарь · ВКонтакте · Instagram · Facebook · Android — PaydaDosh и офлайн-словарь.