Разработка цикла иерархического поиска: чтение длинного документа по его содержанию.
Enterprise Document Intelligence [Том 1 #7quater] – Определение документа 492 страницы имеет оглавление из 358 записей. Прочитать его корпус невозможно, поиск по каждому пункту top-k переключает найденный ответ с соседними страницами. Вместо этого используйте поиск по главному: замкнутый цикл внутри поиска функции, который экономит токены и повышает точность. class=»wp-block-post-featured-image»>
Эта статья является частью II части серии «Интеллектуальное управление документами на предприятии», в которой решается задача создания корпоративной системы RAG из четырех компонентов: анализа документов, анализа вопросов, поиска и генерации. Компонент поиска представляет собой трилогию:
- Статья 7А, Извлечение информации — это фильтрация, а не поиск: ментальная модель, фильтрация структурированных таблиц вместо поиска по векторам.
- Статья 7B, Обнаружение якорей: логические детекторы ключевых слов и встраиваний, а затем один вызов LLM в конце. выбор.
Это дополнение (7quater) Рассмотрим случай, с которым сталкивается кирпич в процессе производства: документ, слишком длинный для чтения, с оглавлением, слишком длинный для того, чтобы его выгрузить.

📓 Запускаемые сопутствующие блокноты, доступные на GitHub : документ-Intel/ноутбуки-vol1.

Мы работаем над этим на основе NIST SP 800-53 Rev. 5 (Контроль безопасности и конфиденциальности информационных систем и организаций, работа правительства США, общественное положение в США) и NIST Cybersecurity Framework 2.0. Исполняемые фрагменты кода вызывают сервисы OpenAI, регулируемые условия использования OpenAI.
1. Проблема: оглавление слишком длинное, чтобы его передать.
Стандарт NIST SP 800-53 состоит из 492 страниц. В этом случае меры безопасности, согласно которым должна соблюдаться федеральная система США, по мере одной, всего двадцать мер. Пользователь задает простой вопрос:
«Что требуется для управления учетными записями?»
Ответ занимает пять страниц, контроль AC-2, на страницах с 46 по 50. Наивный подход RAG встраивает каждую страницу и выбирает k наиболее похожих на вопрос. Здесь он терпит неудачу в одном конкретном случае: слова «учетная запись», «управление», «контроль» и «доступ» встречаются на сотнях страниц, потому что весь документ посвящен контролю. Поиск k возвращает AC-2 вперемешку с AC-3, AC-17, парой контрольных точек аудита и глоссарием, и модели генерации должны определить, какой именно пункт имелся в виду. В результате произошла травма в результате причинения вреда 492 страницам, ответ по-прежнему остается неясным.
Человек открывает оглавление. Вот в чем загвоздка, из-за которой эта статья необходима: самооглавление содержит 358 пунктов. Вы же не станете коллегами всего 358 строк, как и 492 страницы. Эксперт сначала просматривает список глав, одиннадцати заголовков, выбирает «Управление», организует его на двадцати четвертях, выбирает «Контроль доступа», открывает его на соответствующих элементах управления и останавливается на AC-2. Сначала верхний уровень, затем вниз, по одному небольшому решению за раз. Именно такой цикл строит эту статью, и это миниатюрная версия тезиса серии: усилить эксперта . Делайте то, что делает эксперт. Не вываливайте весь документ или все оглавление на модели сразу.
2. Оглавление, в трех уровнях вложенности.
Вот фактическое содержание документа, рядом с файлом toc_df который парсер считывает из своей исходной структуры.

Распечатанная страница останавливается на уровне собственных элементов. Парсер идет глубже. Статья 5B преобразует исходную структуру PDF в структуру toc_df , по одной строке для каждого заголовка, и для этого документа это 358 строкна трех уровнях, от одиннадцати глав верхних уровней до каждого из 316 нижних элементов управления (AC-1, AC-2 и остальных), каждый со своим диапазоном страниц. Двадцать семь элементов управления между ними. Именно по этому дереву и идет поиск. Когда в документе нет исходной структуры для обхода, статья 5septies восстанавливает ее из страницы; Здесь структура чистая, поэтому мы используем ее напрямую.Процесс поиска проходит по дереву сверху вниз. Он передает LLM только текущий уровень, первые одиннадцать названий, каждая глава в одной компактной строке: название, диапазон страниц, а если название неоднозначны, то и небольшое количество ключевых слов. Модель выбирает ветвь, которая отвечает за вопрос. Если эта ветвь широкая и имеет более мелкие дочерние ветви, поиск открывает ее, ее дочерние ветви становятся следующим уровнем, и шаг повторяется. Он останавливается на листе или на участке, достаточно затрат, чтобы его можно было прочитать целиком.

Из этой структуры вытекают две вещи. Длинное оглавление никогда не входит в единую группу: модель читает одиннадцать строк, затем вторую, затем около двадцати, никогда не 358 строк одновременно. И спуск на самом деле не является обязательным. В коротком документе верхний уровень не содержит дополнительных элементов для открытия, поэтому цикл выполняется один раз и ведет себя точно так же, как плоская маршрутизация. Модель на каждом уровне измеряет, есть ли смысл излучать дальше.
4. Этап маршрутизации в коде.
Этот шаг представляет собой одну функцию, reason_on_toc , вызываемую один раз для каждого уровня. Она уровень считывается как текст, а не как таблица, поэтому уровень из двадцати записей — это следующая строка, а не сетка, которая расширяется на один столбец в зависимости от ключевого слова.
# Сверху вниз: подача ОДНОГО уровня за раз, а не всего содержания из 358 строк. # Каждая запись представляет собой одну компактную строку: заголовок + диапазон страниц (+ совпадения ключевых слов). level = toc_df[toc_df.level == toc_df.level.min()] # 11 названий глав, пока True: Pick = Reason_on_toc(question, level, client=client) # один вызов LLMsection = level[level.id.isin(pick.section_ids)] Kids = Непосредственно_дети(toc_df, раздел) if Kids.empty илиsection.n_pages <= SMALL: # лист или достаточно маленький уровень перерыва = дети # открываем, спускаемся # 11 глав -> 20 семей -> 25 элементов управления -> УПРАВЛЕНИЕ АККАУНТАМИ AC-2 (стр. 46-50)
Запустите модель вопроса по управлению учетными записями, сопоставив ее с реальным документом, и она упадет на один уровень за раз. На каждом уровне модель считывает заголовки уровней, обоснования и выбирает ветвь для открытия. Приведенные ниже рассуждения являются собственными моделями рассуждений, дословно взятыми из результатов запуска.

Пятьдесят шесть записей считываются в ходе трех небольших вызовов, никогда не считываемая оглавление из 358 строк. Затем функция генерации считывает пять страниц, а остальные 315 элементов управления никогда не переходят в режим запроса.
Когда одного заголовка недостаточно для составления двух кандидатов, поиск основывается на подсчете ключевых слов, по-прежнему по одной строке в каждой записи: количество ключевых слов остается в этой ветви. Это решающий фактор в случае, когда термин используется в одном разделе, а определяется только в другом (принцип наименьших привилегий применяется во всех разделах «Контроль доступа», но определяется один раз в глоссарии). Он никогда не станет менять столбец для каждого ключевого слова.
5. Когда читается весь раздел.
Цикл останавливается в трех случаях: выбранная ветвь является листом, она уже достаточно мала для полного прочтения, или вопрос представляет собой список, для которого необходимы все элементы под ней. Случай со списком — это NIST CSF из статьи 12 (список): при запросе всех подкатегорий GOVERN выбирает все Приложение A. CSF Core, и, поскольку список требует всего этого, при получении данных приложение обрабатывает процессор, а не по одной подкатегории. список. Он достигает раздела, рассмотрения списка на одном уровне, и останавливается, потому что под ним в оглавлении ничего более подходящего нет.

элементов), завершениям (лист, небольшой участок или листинг) и восстановлением , которые конфигурируют что-то на каждой итерации (только спускается на уровень ниже, никогда не перечитывая только этот оцениваемый уровень), при этой глубине ограничена деревом, поэтому цикл не может вращаться. Он отличается от конвейерных циклов из части III темы, на что реагирует: на структуру документа, а не на результат генерации.
6. Токены и точность в раскрытии.
Иерархическая маршрутизация обеспечивает одновременное преимущество по обоим направлениям, что встречается редко.
Точность. Плоская верхняя панель k на 492 страницах конкурирует с AC-2 по всем другим элементам управления, в которых упоминаются учетные записи или доступ. Маршрутизация фиксирует управление учетными записями AC-2 по имени и читает его имя, поэтому пять страниц ответа появляются вместе, а не пересекаются с пятью соседними страницами.
Токены.Наивный конвейер встраивает 492 страницы один раз и оплачивает извлечение всех из них при каждом запросе. Маршрутизатор, работающий по принципу «сверху вниз», никогда не встраивает тело документа. Он читает шесть последовательных строк заголовка для трех вызовов, а затем пять страниц, на которых находится ответ. Даже оглавление никогда не было отправлено. В корпусе из тысяч таких документов эта разница составляет гранью между рабочей системой и системой, которая не работает.В этой статье создается один документ. Папка со всеми документами представляет собой ту же самую схему на одном уровне выше: верхний уровень — это список файлов, каждый с заголовком и кратким описанием в одной строке, а следующий уровень — это оглавление каждого файла. Этот маршрут не меняется: вы выбираете соответствующие файлы с верхних уровней, а затем переходите к их разделам точно так же, как эта статья переходит к элементам управления. Движение то же самое, только количество уровней увеличивается. Мы рассматривали этот случай с коллекцией в Части IV , начиная со статьи 14 (проблема корпуса) и таблиц корпуса ( corpus_toc_df , corpus_index ), которые содержит.
8. Заключение
Длинный документ подключается со своей собственной картой, и поиск проходит сверху вниз, вместо того, чтобы изучать каждую страницу. Маршрутизатор считывает один уровень оглавления за раз, по одной компактной строке записи и спускает вниз: одиннадцать глав к «Управлению», четвертый семейство к «Контролю доступа», около двадцати элементов управления к «Управлению учетными записями AC-2», пять страниц из 492, а остальные 315 элементов управления никогда не выполняются в подсказке. Он останавливается в конце, в разделе, достаточно затрат, чтобы прочитать его руководство, или в списке, который требует, чтобы все было подголовком. Это замкнутый цикл поиска внутри, необязательный, когда небольшое оглавление, и он одновременно экономит токены и точность, поэтому он масштабируется без изменений: папка с документами — это та же самая карта, но с одним дополнительным уровнем.
9. class=»wp-block-list»>
parse_pdf и toc_df через которые проходят динамические статьи.
Кежан Ши Посмотреть все Кежан Ши
Источник: towardsdatascience.com
Похожие записи
- 5 ошибок менеджера, внедряющего ИИ
- Директор Amazon по искусственному интеллекту заявил на конференции VB Transform 2026, что не возможности ИИ-агентств препятствуют их внедрению в корпоративной среде из-за низкой надежности.
- Страх перед человекоподобными роботами подтолкнул рабочих к забастовке на автомобильном заводе Hyundai.
Оцените материал:
Присоединяйтесь и подпишитесь на рассылку самых свежих новостей по Email
Получайте свежие новости и идеи на почту. Без спама — только самое интересное.
Нажимая «Подписаться», вы соглашаетесь с политикой конфиденциальности.
