Меня зовут Аскольд Романов, я руковожу продуктовой командой в Яндекс Образовании. Сегодня я хочу поделиться историей своего проекта K2-18. Это опенсорс‑инструмент, который трансформирует учебный текст в семантический граф знаний с образовательными метриками. Я назвал его в честь экзопланеты, в атмосфере которой (предположительно) нашли водяной пар: тоже история об извлечении скрытой структуры из наблюдаемых данных. В этой статье — как устроен инструмент, какие решения за ним стоят и что с этим графом можно делать.

Моя основная задача в Образовании — внедрение AI‑технологий в образовательные процессы, и K2-18 вырос из этой работы напрямую. Мне нужно было решить конкретную задачу: как превратить учебный контент в структуру, с которой LLM сможет эффективно работать для построения различных образовательных сценариев.

Идея родилась не на пустом месте. Я окончил ВМК МГУ и аспирантуру там же с научным фокусом на компьютерной лингвистике. Сейчас, когда LLM научились читать текст, понимать его структуру и контекст, оказалось, что знания, опыт и контекст текущей работы позволяют решить эту задачу системно. 

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


Линейный текст и нелинейные знания

Откройте любой учебник по программированию. Глава 3 — массивы. Глава 7 — сортировка. Глава 12 — быстрая сортировка. Страницы идут одна за другой, и кажется, что знания устроены так же — линейно, последовательно, от первой страницы к последней.

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

Эта структура реально существует внутри любого учебного материала. Но линейная форма текста её не раскрывает, а скрывает. Учебник не плох и не устарел, просто формат «страница за страницей» не был рассчитан на то, чтобы эту структуру сделать явной, навигируемой, вычислимой.

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

До недавнего времени извлечение такой структуры из текста было ручной работой методиста. Буквально: человек читает учебник, выписывает понятия, рисует связи между ними, расставляет приоритеты. На один курс уходили недели и месяцы. Результат зависел от опыта конкретного специалиста и почти не масштабировался.

Сегодня это область knowledge extraction — автоматическое извлечение структуры знаний из текста. И она уже работает не только в теории.

  • Китайская платформа Squirrel AI построила граф из более чем 10 000 концептов только по математике — и на его основе адаптирует обучение для каждого школьника индивидуально (команда получила премию ЮНЕСКО в 2020 году за инновации в ИИ для образования). 

  • Проект MOOCCube объединил данные четырёх MOOC‑платформ в единый граф с 24 000 концептов и 300 000 связей — для анализа и сравнения онлайн‑курсов. 

  • Модель KGCAT использует граф знаний для адаптивного тестирования — выбирает следующий вопрос с учётом того, что студент уже знает и чего не знает.

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

Семантический граф знаний: на пересечении трёх дисциплин

Идея превратить текст в граф не новая. Графы знаний строят с 1960-х: ручные онтологии вроде WordNet и CYC, статистические методы (TF‑IDF, topic modeling), NLP‑пайплайны для извлечения именованных сущностей. Универсальные графы знаний — Google Knowledge Graph, Wikidata — содержат миллиарды фактов и связей.

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

K2-18 вырос на пересечении трёх направлений, и именно их сочетание сделало задачу решаемой.

Теория графов: вычислимая структура

Первое — формальный аппарат теории графов. Узлы, рёбра, метрики — PageRank, betweenness centrality, кластеризация. Это то, что превращает «картинку со стрелочками» в вычислимую структуру: можно измерить важность узла, найти кратчайший путь, обнаружить тематические кластеры. Без этого аппарата граф знаний остался бы иллюстрацией, а не инструментом.

Анализ дискурса: типизация отношений — ключ к смыслу

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

Типизация отношений между частями текста — это то, что превращает топологию в семантику. Граф, в котором ребро просто означает «связано», — это структура без смысла. Граф, в котором ребро говорит «A — предпосылка для B» или «A иллюстрирует B примером», — это граф с педагогическим смыслом.

Теория риторических структур (RST) описывает порядка 30 типов дискурсивных отношений — для образовательной задачи этого слишком много. В K2-18 мы выбрали девять типов рёбер. Набор не жёсткий — он может сужаться или расширяться в зависимости от предметной области и задачи:

  • PREREQUISITE — нельзя понять B без понимания A. Самое сильное образовательное отношение.

  • ELABORATES — B раскрывает A глубже, детализирует.

  • EXAMPLE_OF — A является конкретным примером, иллюстрирующим B.

  • TESTS — задание проверяет понимание концепта.

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

  • HINT_FORWARD — предварительный обзор материала, который будет подробно раскрыт позже.

  • REFER_BACK — ссылка назад, на ранее изученный материал.

  • REVISION_OF — обновлённая или исправленная версия.

  • MENTIONS — фрагмент текста упоминает концепт (самая слабая связь).

Три типа узлов дополняют картину: Chunk (учебный фрагмент — абзац, объяснение, пример), Concept (доменное понятие из словаря) и Assessment (задание, вопрос, упражнение).

Сверху — три типа узлов. Ниже — фрагмент графа с шестью конкретными примерами связей: PREREQUISITE, ELABORATES, MENTIONS, PARALLEL, EXAMPLE_OF, TESTS
Сверху — три типа узлов. Ниже — фрагмент графа с шестью конкретными примерами связей: PREREQUISITE, ELABORATES, MENTIONS, PARALLEL, EXAMPLE_OF, TESTS

Возможности LLM: от «что» и «почему» к «зачем»

Третье — большие языковые модели. И здесь важно понимать, что именно они привносят.

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

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

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

Почему именно такое сочетание

Каждого из этих направлений по отдельности недостаточно. Теория графов даёт аппарат, но не понимает текст. Лингвистика даёт типизацию отношений, но не масштабируется на сотни страниц. LLM понимает семантику, но без формальной структуры выдаёт неструктурированный текст.

Вместе — это пайплайн, который читает учебник и строит из него вычислимый граф с образовательной семантикой. То, что раньше требовало команды лингвистов, методистов и программистов.

Ландшафт: как решают задачу knowledge graph construction

Автоматическое построение графов знаний из текста — активная область исследований, и к 2025 году сформировалось несколько подходов. У каждого — своя специфика, свои сильные стороны и свои ограничения. Прежде чем рассказывать о K2-18, стоит понять, на каком фоне он появился. Рассмотрим несколько популярных решений.

GraphRAG от Microsoft Research строит граф знаний для улучшения ответов LLM на сложные вопросы по большим документам. Процесс включает извлечение сущностей и связей из текста, их кластеризацию и генерацию резюме для тематических сообществ, с которыми работает модель при ответах. Система хорошо масштабируется и интегрируется с RAG, но не типизирует связи и не рассчитана на образовательные метрики, выступая лишь промежуточным инструментом для поиска.

KGGen (2025) решает проблему разреженности и дубликатов в автоматически извлечённых графах методом итеративной кластеризации: LLM объединяет семантически близкие сущности, устраняя дубликаты вроде New York City и NYC. В результате формируется более плотный и качественный граф по сравнению с наивной экстракцией. Однако KGGen работает в open‑domain‑режиме и не учитывает образовательные зависимости или специфику предметных областей.

iText2KG использует модульный пайплайн из четырёх этапов для извлечения сущностей и связей из текста и их интеграции в граф в zero‑shot‑режиме. Новая сущность сопоставляется с уже существующими, что уменьшает количество дубликатов и обеспечивает консистентность при добавлении новых документов. Метод хорошо подходит для инкрементального наращивания базы знаний, но не поддерживает доменную адаптацию, типизированные образовательные связи и выявление дальних зависимостей в тексте.

Supervised NER + RE использует обученные модели для распознавания сущностей (NER) и классификации отношений (RE) и показывает высокую точность на типовых задачах при большей скорости и меньших затратах по сравнению с LLM. Однако его гибкость ограничена: он находит только заранее определённые типы связей, а добавление новых требует разметки и переобучения. Кроме того, инструмент работает лишь на уровне предложения или абзаца, не выявляя дальних зависимостей в тексте.

Что остаётся за скобками

Все перечисленные подходы решают задачу knowledge graph construction — и решают её хорошо, каждый в своей нише. Но ни один из них не был спроектирован для образовательных задач. Поэтому тут можно столкнуться с рядом серьёзных минусов.

  • Нет prerequisite chains. Цепочки «нельзя понять B без A» не извлекаются ни одним из подходов. GraphRAG и KGGen не типизируют рёбра, iText2KG не отличает предпосылку от упоминания, supervised‑пайплайн требует размеченных данных, которых для образовательных зависимостей почти нет.

  • Нет образовательных метрик. Learning_effort, prerequisite_depth, educational_importance не вычисляются. Эти метрики специфичны для обучения и требуют осмысленной типизации рёбер как входных данных.

  • Нет доменной адаптации. Нельзя переключиться между предметными областями (Computer Science, экономика, менеджмент) без переписывания кода. Большинство подходов либо теряют специфику, либо требуют переобучения.

  • Нет дальних зависимостей. LLM‑подходы частично справляются за счёт большого контекстного окна, но без специального механизма (вроде двухпроходного Refiner) многие связи теряются.

Пайплайн: текст → граф за пять шагов

Теперь к конкретике. Как именно учебный текст превращается в семантический граф? K2-18 состоит из пяти последовательных шагов, и у каждого — своя задача и своя причина существования.

Схема пайплайна. Цветовая логика: серый — вход, зелёный — подготовка, фиолетовый — ядро (словарь + граф), оранжевый — постобработка, жёлтый — результат. Слева пунктиром показано, что словарь связывает шаги 2 и 3. Справа — выходы каждого шага
Схема пайплайна. Цветовая логика: серый — вход, зелёный — подготовка, фиолетовый — ядро (словарь + граф), оранжевый — постобработка, жёлтый — результат. Слева пунктиром показано, что словарь связывает шаги 2 и 3. Справа — выходы каждого шага

Шаг 1. Slicer: нарезка с уважением к семантике

Учебник может содержать сотни страниц. Контекстное окно LLM — конечно. Текст нужно разделить на части, но не механически (каждые N токенов), а с учётом семантических границ: абзацев, заголовков, блоков кода, формул, списков.

Slicer делит текст на фрагменты (slices), стараясь не разрывать смысловые единицы. Граница абзаца предпочтительнее границы предложения, граница раздела — предпочтительнее границы абзаца. Это мелкая, но важная деталь: если разрезать определение пополам, LLM на следующем шаге получит обрубок и извлечёт из него ерунду.

Шаг 2. iText2KG Concepts: сначала словарь

Это ключевой архитектурный выбор, и он неочевиден.

Можно было бы сразу строить граф — подавать каждый фрагмент в LLM и просить извлечь узлы и рёбра. Проблема в том, что одно и то же понятие в разных частях текста будет сформулировано по‑разному: «быстрая сортировка», quicksort, «сортировка Хоара», «алгоритм с опорным элементом». Без общего словаря граф рассыпается на изолированные кластеры, где одно и то же понятие представлено пятью несвязанными узлами.

Поэтому K2-18 сначала строит ConceptDictionary — словарь всех концептов предметной области. Для каждого понятия фиксируется каноническое имя, алиасы и определение:

{
  "concept_id": "algo:p:quicksort",
  "term": {
    "primary": "Быстрая сортировка",
    "aliases": ["quicksort", "сортировка Хоара"]
  },
  "definition": "Алгоритм сортировки, использующий стратегию «разделяй и властвуй»..."
}

LLM обрабатывает фрагменты последовательно, и словарь растёт инкрементально: каждый следующий фрагмент обрабатывается с учётом уже извлечённых концептов. Если встречается новая формулировка известного понятия, она добавляется как алиас, а не как новый концепт.

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

Шаг 3. iText2KG Graph: расстановка рёбер

Теперь LLM получает фрагмент текста и готовый словарь концептов — и строит граф. Задача сужена: не «найди всё, что есть в тексте», а «определи, какие связи существуют между уже известными понятиями и этим фрагментом».

На выходе — LearningChunkGraph: узлы трёх типов (Chunk, Concept, Assessment), рёбра девяти типов с весами от 0,3 до 1,0. Вес отражает силу связи: PREREQUISITE между «массивами» и «сортировкой» получит высокий вес (0,9), а MENTIONS между фрагментом и мимоходом упомянутым термином — низкий (0,3).

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

Шаг 4. Dedup: одна идея — один узел

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

Dedup решает эту задачу через эмбеддинги: каждый узел представляется вектором и FAISS находит пары с высоким косинусным сходством. Транзитивные отношения обрабатываются через Union‑Find: если A похоже на B, а B похоже на C, то все три схлопываются в один узел. Из дубликатов сохраняется лучшая версия — с наиболее полным текстом и определением.

Шаг 5. Refiner: дальние зависимости

Самый неочевидный, но критически важный шаг.

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

Refiner проходит по графу в два прохода — forward и backward. Для каждого узла он ищет семантически близкие узлы из других частей графа через эмбеддинги, а затем LLM проверяет, есть ли между ними образовательная связь. Какого типа? Какой силы?

Двухпроходность важна: forward‑проход находит связи «от ранних тем к поздним», backward — «от поздних к ранним» (например, REFER_BACK). Без Refiner граф остаётся локально связным, но глобально фрагментированным — как учебник, в котором каждая глава живёт сама по себе.

Почему именно такая архитектура

Пять шагов — не случайность. Каждый решает конкретную проблему:

  • Slicer — ограничение контекстного окна LLM;

  • Concepts — проблему несогласованности терминологии;

  • Graph — задачу типизированного извлечения связей;

  • Dedup — семантическую избыточность;

  • Refiner — потерю дальних зависимостей при инкрементальной обработке.

Шаги 2, 3 и 5 используют LLM и требуют доменной адаптации: промпты должны содержать примеры и критерии, специфичные для предметной области. Об этом — в разделе «Доменная адаптация».

Результат — JSON‑файл с полным графом: узлы с текстами и определениями, рёбра с типами и весами. Самодостаточный, работает без серверов и API. Но чтобы превратить его в инструмент, нужен ещё один шаг — вычисление метрик.

От теории графов к образовательным метрикам

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

K2-18 вычисляет 12 метрик на каждом узле. Часть из них — стандартные графовые, переосмысленные в образовательном контексте. Часть — специфические, которых в классической теории графов нет.

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

Стандартные метрики в новой роли

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

Но обычный PageRank учитывает все рёбра, включая MENTIONS — самую слабую связь. Поэтому K2-18 дополнительно вычисляет educational_importance — PageRank только по образовательным рёбрам (PREREQUISITE, ELABORATES, TESTS, EXAMPLE_OF). Это фильтрует шум и показывает важность узла именно для процесса обучения.

Betweenness centrality — доля кратчайших путей графа, проходящих через узел. В образовательном контексте это узкие места курса: концепты, без которых невозможно перейти от одной группы тем к другой. Высокий betweenness у «функций» означает, что это критический мост между базовыми понятиями и продвинутыми темами. Если студент не освоил такой узел — он застрянет.

Closeness centrality (в нашем случае out‑closeness — по исходящим рёбрам) показывает, насколько легко от узла добраться до остальных. Высокий closeness — концепт, который «открывает двери»: изучив его, студент получает доступ ко многим другим темам.

Метрики, которых в классической теории нет

prerequisite_depth — уровень узла в иерархии предпосылок. Вычисляется как максимальная длина пути по рёбрам PREREQUISITE от «корневых» узлов (тех, у которых нет входящих PREREQUISITE). Уровень 0 — базовые понятия, с которых начинается изучение. Уровень 3 — концепт, до которого нужно пройти как минимум три ступени предпосылок. Это прямая мера «продвинутости» темы.

learning_effort — накопленная сложность с учётом всей цепочки предпосылок. Не просто «насколько сложна эта тема», а «сколько совокупно усилий нужно, чтобы до неё добраться». Учебник может оценить сложность отдельной главы, но не скажет, сколько стоит путь до неё. learning_effort — скажет.

Кластеризация: почему Louvain, а не иерархия

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

Поэтому K2-18 использует алгоритм Louvain — метод обнаружения сообществ (community detection), работающий с топологией связей. Louvain находит плотные группы узлов, внутри которых связей больше, чем между группами. Он работает на неориентированной проекции графа (направления рёбер для кластеризации не важны, важна сама связность) с агрегацией весов для двунаправленных рёбер.

Слева — иерархия. «Сложность» вынуждена жить под «сортировкой», а связь с «графами» потеряна (красная перечёркнутая линия). Справа — Louvain-сообщества. Тот же узел свободно связан с обоими кластерами, bridge_score показывает его мостовую роль (все числовые значения вымышленные)
Слева — иерархия. «Сложность» вынуждена жить под «сортировкой», а связь с «графами» потеряна (красная перечёркнутая линия). Справа — Louvain‑сообщества. Тот же узел свободно связан с обоими кластерами, bridge_score показывает его мостовую роль (все числовые значения вымышленные)

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

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

Пример: один узел со всеми метриками

Чтобы всё это стало конкретным, вот пример, как мог бы выглядеть узел «Быстрая сортировка» с вычисленными метриками. Пример составлен в демонстрационных целях: на реальном графе конкретные значения будут зависеть от исходного текста, его объёма и структуры.

Метрика

Значение

Что это означает

degree_in

3

Зависит от трёх концептов (массивы, сортировка, «разделяй и властвуй»)

degree_out

7

Открывает семь новых тем

PageRank

0,023

Высокая общая важность

educational_importance

0,028

Ещё выше по образовательным связям

betweenness

0,15

Через него проходит 15% кратчайших путей — критический мост

out‑closeness

0,73

Хорошо «открывает двери» к другим темам

prerequisite_depth

3

Уровень 3: основы → сортировка → «разделяй и властвуй» → quicksort

learning_effort

42,5

Суммарная сложность пути до этого концепта

cluster_id

7

Кластер «Продвинутые алгоритмы сортировки»

bridge_score

0,85

Сильный мост между теорией и практикой алгоритмов

Каждая строка — не абстрактная цифра, а ответ на конкретный вопрос преподавателя или методиста. Насколько важен этот концепт? Что будет, если студент его пропустит? Сколько усилий нужно, чтобы до него добраться? К какой теме он относится и какие темы связывает?

Это то, что раньше было интуицией опытного преподавателя. Теперь — вычислимо.

Практические сценарии

Граф с метриками — это не конечный продукт, а основа для множества применений. Ниже — несколько примеров того, что можно делать с семантическим графом знаний. Список далеко не исчерпывающий: конкретные сценарии зависят от продукта, в который граф встраивается.

Учебные пути

Студент хочет изучить рекурсию. Какова минимальная длина маршрута от его текущих знаний до цели?

Граф позволяет вычислить кратчайший путь с учётом цепочек PREREQUISITE. Это не просто «ближайшие узлы», а последовательность, в которой каждый следующий шаг опирается на предыдущий. 

Маршрут можно адаптировать. Для студента, который испытывает затруднения, — более длинный путь через дополнительные примеры и узлы с низкой сложностью. Для продвинутого — прямой маршрут через ключевые концепты, без иллюстративного материала. Веса рёбер и метрики узлов (difficulty, learning_effort) дают всё необходимое для такой адаптации.

Диагностика пробелов

Студент прошёл несколько тем и хочет перейти к новой. Система проверяет по графу: все ли предпосылки выполнены? Если нет — показывает, чего не хватает.

Это не просто «вы не прошли главу 5». Граф знает конкретные концепты‑предпосылки и их глубину. Может оказаться, что для перехода к «быстрой сортировке» студенту не хватает не всей главы о сортировке, а одного конкретного понятия — «стратегия „разделяй и властвуй“„. Точечная диагностика вместо ковровой.“»

Анализ структуры курса

Какие концепты центральные? Где узкие места? Как сгруппирован материал тематически?

Раньше ответы на эти вопросы были интуицией преподавателя. С графом они становятся измеримыми. Высокий PageRank — центральный концепт, на котором держится курс. Высокий betweenness — узкое место, без которого студент не перейдёт от одной темы к другой. Кластеры — естественная тематическая группировка, которая может не совпадать с делением на главы в учебнике (и это само по себе ценное наблюдение для методиста).

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

И это только начало

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

Доменная адаптация: один пайплайн — разные предметы

K2-18 разрабатывался на материалах по Computer Science (CS) и сейчас адаптирован и протестирован на пяти предметных областях: CS, экономика, менеджмент, маркетинг и коммуникации. 

Давайте разберёмся, как устроена эта адаптация и почему она вообще нужна. Например, попытаемся построить граф для темы по экономике, применяя пайплайн для тем по Computer Science.

Без адаптации ничего хорошего у нас не выйдет. LLM, получившая промпты с CS‑примерами, начинает искать «алгоритмические» паттерны в неалгоритмических текстах. Конкретные проблемы:

  • Некорректная типизация связей. «Спрос влияет на цену» — это не PREREQUISITE (нельзя понять цену без спроса), а ELABORATES (одно раскрывает другое). Но промпт с примерами из CS, где «массивы → сортировка» — типичный PREREQUISITE, подталкивает модель к неверной классификации.

  • Неадекватная оценка сложности. В CS difficulty = 5 означает «research‑level‑алгоритмы». В экономике пятёрка должна означать эконометрические модели. В менеджменте — стратегический анализ с учётом неопределённости. Шкала одна, но калибровка — разная.

  • Потеря доменной специфики. Экономические теории и модели плохо укладываются в паттерн «алгоритм». Причинно‑следственные связи в гуманитарных науках устроены иначе, чем технические зависимости.

Ключевой принцип адаптации в K2-18: код остаётся неизменным, меняются только промпты. JSON‑схемы данных, девять типов рёбер, весовая шкала 0,3–1,0, алгоритмы метрик — всё это инвариантно. Адаптируется то, что видит LLM при извлечении: примеры, критерии оценки сложности, эвристики для типизации связей.

На практике это выглядит как набор доменных суффиксов к промптам. Базовый промпт описывает задачу и формат ответа. Доменный суффикс добавляет:

  • примеры концептов из конкретной области (не quicksort, а «эластичность спроса» или «SWOT‑анализ»);

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

  • heuristics guide — подсказки для корректной типизации связей в дисциплине.

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

Опенсорс и современный подход к разработке

K2-18 — опенсорс‑проект, код доступен на GitHub. Разработка построена через детальные спецификации: каждый из 18 модулей описан отдельным документом с API, зависимостями, форматами ввода‑вывода и ожидаемым поведением. AI‑агент пишет код по этим спецификациям, человек проектирует архитектуру, определяет алгоритмы и валидирует результат. Такой подход позволяет одному инженеру поддерживать кодовую базу, которая иначе потребовала бы небольшой команды, при этом ключевые решения остаются за человеком.

Если перевести проект в цифры, то получится такая картина:

  • ~24 000 строк Python (18 модулей, 7 утилит, 2 модуля визуализации).

  • ~3 000 строк JavaScript для интерактивного UI.

  • 750+ тестов с 85%‑ным покрытием кода. 

Результат работы — самодостаточные JSON‑ и HTML‑файлы, которые работают без серверов и API и при необходимости загружаются в Neo4j.

Что дальше

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

Метасловари: связь между дисциплинами. ConceptDictionary — словарь конкретного учебника. Но что происходит, когда графов несколько — скажем, по разным курсам, по разным дисциплинам?

Метасловарь — это надстройка над отдельными словарями, связывающая похожие, но не тождественные концепты из разных дисциплин (например, «функция» в математике и программировании). Такой слой описывает междисциплинарные связи — concept bridges между графами разных областей. Это позволяет строить по‑настоящему междисциплинарные образовательные траектории.

Новые предметные области. Механика доменной адаптации отработана на пяти областях. Добавление нового домена — это набор промптов с характерными примерами концептов, связей и уровней сложности. Код не меняется, JSON‑схемы и типы рёбер остаются теми же. Нужен эксперт в предметной области и несколько итераций калибровки, а не месяцы разработки.


K2-18 — это результат моего личного интереса и часов экспериментов вне основной работы. Я убеждён, что открытые, прозрачные инструменты, позволяющие автоматически извлекать и анализировать реальные образовательные связи, нужны каждому, кто учит или учится. 

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