Что такое граф знаний
Граф знаний — это данные, записанные как сущности и связи между ними: «деталь входит в узел», «сотрудник отвечает за процесс», «тема опирается на другую тему». Смысл здесь хранится в самих связях, поэтому граф умеет отвечать на вопросы, требующие нескольких шагов: не «что похоже на это», а «что случится с производством, если выйдет из строя вот этот станок».
Что такое векторный поиск
Векторная база данных хранит фрагменты текста в виде чисел, отражающих смысл. Запрос превращается в такой же набор чисел, и база возвращает ближайшие фрагменты. Это даёт устойчивость к переформулировкам: «как оформить отпуск» найдёт пункт регламента про «предоставление ежегодного оплачиваемого отпуска», хотя ни одно слово не совпало.
Принципиальная разница
- Векторный поиск отвечает на вопрос «что похоже на это». Граф отвечает на вопрос «что с этим связано и через что».
- Вектор не знает ничего о структуре: два фрагмента с одинаковыми словами для него близки, даже если относятся к разным договорам.
- Граф не терпит неточных формулировок: если сущность не извлечена и связь не проложена, вопрос останется без ответа.
- Вектор дёшево наполняется — достаточно нарезать документы. Граф требует онтологии: решить, какие бывают типы сущностей и связей.
Какие вопросы тянет каждый подход
Векторный поиск сильнее, когда
- знание живёт в тексте: регламенты, инструкции, переписка, база поддержки;
- пользователь спрашивает своими словами, а не терминами системы;
- корпус большой и разнородный, а размечать его некому;
- нужен быстрый старт и обновление документов «на лету».
Граф знаний сильнее, когда
- ответ требует пути: причина → следствие, деталь → узел → изделие, тема → предшествующая тема;
- важна полнота обхода: перечислить всё, что зависит от объекта, ничего не пропустив;
- нужны ограничения и правила: что с чем несовместимо, какой порядок обязателен;
- одни и те же сущности встречаются в разных документах и их надо свести воедино.
Как их сочетают
В работающих системах это не выбор «или — или». Типичное разделение обязанностей выглядит так:
- Вектор принимает вопрос пользователя в свободной формулировке и находит точку входа — фрагменты и упомянутые сущности.
- Граф от этой точки достраивает контекст: связанные объекты, зависимости, ограничения, актуальную версию.
- Модель получает и текстовые фрагменты, и структурированный контекст — и отвечает, ссылаясь на источники.
Такая связка заметно устойчивее чистого поиска по смыслу на вопросах, где важна полнота, и заметно дешевле в наполнении, чем попытка загнать в граф вообще всё.
Где граф ломается
Онтология «на все случаи жизни»
Соблазн описать предметную область целиком приводит к схеме, которую невозможно наполнить и никто не понимает. Рабочий подход — минимальная онтология под конкретные вопросы, с расширением по мере появления новых.
Извлечение сущностей из текста
Автоматическое построение графа языковой моделью даёт черновик, а не результат: одна сущность приезжает в трёх написаниях, связи дублируются, часть отношений выдумана. Нужны нормализация, дедупликация и выборочная проверка человеком — это работа, а не галочка.
Поддержка актуальности
Граф, который не обновляется вместе с источниками, начинает врать увереннее, чем поиск: он выглядит структурным и авторитетным. Правило обновления должно проектироваться вместе с графом.
Как выбрать за четыре вопроса
- Ответ на типовой вопрос — это фрагмент текста или обход связей? Первое — вектор, второе — граф.
- Есть ли цена у неполноты ответа? Если пропуск одного элемента списка стоит дорого, нужен граф.
- Кто будет поддерживать структуру? Если никто — граф не взлетит, начинайте с вектора.
- Как часто меняются документы? Чем чаще, тем важнее дешёвое обновление, то есть вектор или гибрид.
Наш опыт
Мы эксплуатируем обе технологии в своих продуктах: графовую базу — для модели предметной области и связей между темами, векторную — для поиска по формулировкам пользователя. Разделение обязанностей между ними мы получили не из статей, а из отладки собственных систем, где чистый поиск по смыслу переставал справляться ровно там, где от ответа требовалась полнота.