Как известно, LLM - это машина, которая “видела” “весь Интернет”, много чего запомнила и много чему научилась. Задавая ей правильные вопросы можно получать “правильные” ответы (где “правильные” стоит понимать в статистическом смысле). Широта и универсальность таких способностей дает возможность ставить новые универсальные задачи и получать общее решение таких задач.

В этой статье рассмотрим универсальную задачу “удаления избыточных терминов из заданного списка без потери информации в рамках заданной перспективы”. Эта задача рано или поздно появляется у всех, кто разрабатывает документацию, и перед кем стоит задача изложить материал и передать его другим людям как можно проще, логичнее, оптимальнее. Такая задача также возникает, когда требуется объединить ответы от разных LLM, заданные как список терминов. В каком-то смысле это обратная задача к задаче генерации информации и можно ожидать, что с ростом количества сгенерированной информации потребность в решении такой задачи будет также возрастать.

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

С точки зрения мета-знаний задача представляется следующим образом:

  • из описание перспективы требуется определить полные детали перспективы: 1.point_of_view - точка зрения наблюдателя — это позиция, с которой рассматривается или оценивается информация, определяющая, какие термины считаются избыточными в заданном контексте 2.basis_of_consideration - основание рассмотрения - это совокупность критериев и принципов, определяющих, какие термины считаются избыточными и подлежат удалению, а какие сохраняются для обеспечения полноты информации в рамках заданной перспективы 3.perspective_observer_strategy - стратегия наблюдателя, которая дополняет определение перспективы рассмотрения basis_of_consideration и perspective_observer_strategy введены дополнительно к point_of_view, т.к. известно, что простой точки зрения наблюдателя для определения полной перспективы рассмотрения недостаточно.

  • для каждого термина из заданного списка требуется определить отношения этого термина к другим терминам. Как известно из теории Логики: всё, что человек может помыслить является, либо “понятием”, либо “атрибутом” понятия, либо “отношением” между понятиями. Стоит отметить, что все LLM это знают, понимают и используют смысл категорий понятие", “атрибут” и “отношение”. Это позволяет использовать следующий подход:

    • определим онтологию как упрощенную схему данных для определения элементов данных и отдельно от нее непосредственную онтологию как коллекцию JSON-based элементов данных, заданную согласно схеме данных

    • в term-elimination онтологии (схема+онтология) определим ключевые отношения: sameIdentityAs, instanceOf, subclassOf, partOf, которые соответствуют отношениям, которые современные LLM-модели вполне распознают. Эти отношения выбраны так, чтобы по их наличию и отсутствию можно было судить о том, какой термин можно признать избыточным:

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

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

      • если какой-то термин является подклассом (subclassOf) другого термина и присутствует в том же самом контексте, то его можно отбросить из этого контекста, т.к. этот контекст является для подкласса слишком широким. На практике на этапе “расшифровки” терминов это означает, что сначала требуется “расшифровать” родительский термин и уже после этого, на отдельном шаге, можно “расшифровать” дочерние термины (подклассы)

      • partOf отношение означает, что понятие является частью (составной или пространственной частью) другого понятия. Также можно считать, что в рамках одного контекста понятие-часть и понятие-целое несовместимы в одном контексте и поэтому понятие-часть можно откинуть из этого контекста без потери смысла

    • отношения между понятиями могут образовать достаточно разветвленный граф. Для выбора минимального количества понятий, “содержащих в себе” другие понятия, и в сумме “покрывающие” все исходные понятия требуется решение комбинаторной задачи поиска минимального количества множеств, покрывающих все элементы (“задача о покрытии множества”). Для решения этой задачи используем интеграцию с ASP-движком Clingo

Для решения этой задачи в фреймворке core-kbt сделана ИИ-функция concept_set_covering, реализующая вышеизложенную логику, по которой можно откинуть термины без потери смысла.

ИИ-функцию concept_set_covering можно также вызывать из Google Colab ноутбука и мы можем продемонстрировать пример ноутбука с решением этой задачи для 5 примеров в совершенно разных областях:

  • 1. Удаление избыточных терминов по биологической классификации

  • 2. Выбор верхнеуровных терминов для каталога компьютерных комплектующих

  • 3. Удаление избыточных терминов в описании этапов разработки программного обеспечения

  • 4. Создание глоссария для внутреннего руководства по разработке программного обеспечения

  • 5. Оптимизация набора ключевых тем для статьи

Комментарии к таблицам в сolab-ноутбуке:

  • таблица total_dt:

    • input_terms - исходный список терминов

    • deleted_terms - удаленные термины

    • result_terms - получившийся список терминов

  • таблица details_dt - список удаленных терминов, с указанием списка отношений к другим терминам, из-за которых этот термин был удален

    • в колонке relations - список отношений термина к другим терминам

С другими деталями о core-kbt фреймворке можно ознакомиться в README.ru.md проекта.

Итого, что можно было узнать в этой статье:

  • постановку важной задачи: удаление избыточных терминов из заданного списка без потери информации в рамках заданной перспективы

  • представление этой задачи в категориях мета-знаний и вариант её решения

  • вариант решения этой задачи в фреймворке core-kbt через ИИ-функцию concept_set_covering

  • приведен пример Colab-ноутбука с решением задачи для 5 примеров в совершенно разных областях: от каталога компьютерных комплектующих до оптимизация набора ключевых тем для статьи.


Предложения, отзывы и любая обратная связь приветствуется.