Модель большого языка
Оригинальное название: RAG Retrieval: Cosine Is Not the Foundation
Enterprise Document Intelligence [Vol.1 #7ter] — Шесть позиций на кирпиче поиска, которые противоречат косинусному рефлексу мейнстрима RAG
Кежан Ши
3 июля 2026 г.
7 минут читать
Поделиться
Фото Даниэля Брзденка, через Unsplash.
Эта статья является манифестом-компаньоном к серии Enterprise Document Intelligence, философия которой изложена в «Amplify the Expert». Он масштабируется на кирпиче 3 (поиск) архитектуры из четырёх кирпичей и отображает уроки, которые большинство учебников пропускают.
Основная история сводится к извлечению: вставить вопрос, вернуть топ-k по косинусу, необязательно перепроверить. Мы не согласны практически со всеми её частями. Retrieval — это фильтрация структурированных таблиц, а не поиск свободного текста. Встраивания — это необязательный запасной вариант, а не фундамент. Якорь и контекст — это две отдельные детали, а не одна. Каждый из них представляет собой позицию, которую мы можем защищать, с последствиями, которые вы можете измерить.

где эта статья находится в серии: кирпич 7 (поиск) выделен — Изображение автора
Записные книжки-компаньоны находятся на GitHub: doc-intel/notebooks-vol1.

Публичное репо кода компаньона в doc-intel/notebooks-vol1 — Изображение автора
Наивная основа этой статьи отталкивается от

Архитектурный контраст: один косинусоидальный сигнал в блоках и три параллельных сигнала в структурированных таблицах — Изображение автора
Наивный конвейер разбивает документ на блоки, вставляет каждый блок, вставляет вопрос, ранжирует по косинусу. Этот одиночный сигнал непрозрачен и нарушает структуру документа. Мы сохраняем документ как linedf + tocdf и параллельно запускаем три поисковых сигнала (ключевое слово в строках, вывод TOC, косинус вложения), затем позволяем арбитру LLM оценить один раз в конце, имея в виду все три набора совпадений.

Ключевые слова всегда актуальны, оглавление всегда приводит к логическим выводам, встраивания срабатывают только при несоответствии словарного запаса — Изображение автора
Ниже приведены шесть неучтённых уроков из этого раздела.
Урок 1 — Поиск — это фильтрация, а не поиск
Как только синтаксический анализ завершён, поиск представляет собой проблему фильтрации, подобную SQL, по linedf и tocdf, что является обратной процедурой кадрирования с использованием фрагмента-вставки-косинуса-вершины-k. Суть изменения проста: в вопросе есть столбцы, в документе есть столбцы, а поиск — это объединение.
Почему это важно. Поиск и фильтрация — не синонимы, у этих двух операций разная механика. Поиск оценивает каждого кандидата по непрерывному сходству (косинус, BM25), использует отсечку по максимуму и всегда что-то возвращает, даже если ответа нет в документе. Фильтр применяет логическое условие (line.contains(«X»), toc.title в [...]), сохраняет все совпадающие строки и не более и может возвращать нулевые строки, если документ не содержит ответа. Последствия аудита — это большая часть пробелов: состояние фильтра — это одна строка проверяемого кода, которая выполняется одинаково в течение шести месяцев; ранжирование в поиске зависит от того, какие аспекты внедрения имели значение, и вы не сможете повторить это решение, не запустив модель заново.
Конкретный контраст. Пользователь спрашивает: «Какая позиционная кодировка используется в статье?». Naive RAG вставляет вопрос, набирает более 300 фрагментов и возвращает топ-5. Серия RAG фильтрует linedf, где строка содержит «позиционную кодировку» (4 совпадения), фильтрует tocdf, где заголовок раздела содержит «позиционную» (1 раздел, 3,5 позиционной кодировки), и арбитр видит оба варианта, привязка: строка; область действия: раздел. Косинус не нужен.
→ Статья 7А: Поиск — это фильтрация, а не поиск по ментальной модели.
Урок 2 — Привязка и контекст, разделённые
Вы привязываетесь к единственной строке, в которой упоминается «премиум» (точно), но передаёте весь окружающий раздел в генерацию (достаточный контекст); их объединение нарушает точность и охват одним движением. Top-k заставляет вас выбирать: крошечные фрагменты теряют контекст, огромные — точность. Мы получаем и то, и другое, разделяя их.
Конкретный контраст. Для вопроса с определением привязка — это одна строка («франшиза — это сумма, которую страхователь выплачивает до начала страхового покрытия»), область охвата — это абзац вокруг него (три предложения контекста, необходимые магистру права для формулирования ответа). Наивный top-k возвращает либо строку (без контекста), либо абзац (привязка неясна). Поиск по серии возвращает привязку и область действия в виде типизированной пары.
→ Статья 7А: Поиск — это фильтрация, а не поиск, который проводит границу между привязкой и контекстом.
Урок 3. Вложения выполняются в последнюю очередь, а не в первую.
Ключевые слова всегда используются (дешёвые, детерминированные); собственное оглавление документа — это первоклассный метод поиска; вложения — это необязательный конечный сигнал, только когда ожидается несоответствие словарного запаса. Рефлекс 2024 года начинается с внедрения; мы оставляем их для случаев, когда более дешёвые сигналы не сработали.
Конкретный контраст. Поиск по страховому полису: «Дата вступления в силу?». Naive RAG внедряет, возвращает 5 фрагментов. Серия запускает ключевые слова в «effective» и «date» → найдена 1 строка → выполнено. Вложения так и не были выполнены. Стоимость: один проход регулярного выражения по line_df; несколько миллисекунд. Косинусный поиск по 2 центам не был выполнен.
→ Статья 7B: Поиск правильных привязок создаёт конвейер из трёх сигналов.
Урок 4. Ключевые слова доказывают отсутствие; встраивания не могут.
Ноль при поиске по ключевым словам означает, что ответа на самом деле нет; нулевое значение сходства при внедрении может означать отсутствие или просто разные слова, поэтому внедрение — это уточнение, а не решение. Такая асимметрия характерна для ключевых слов как основного сигнала в корпоративном RAG.
Конкретный контраст. Пользователь спрашивает: «Покрывает ли этот контракт ущерб от землетрясения?» — в отношении политики, касающейся только наводнений. Поиск по ключевому слову «землетрясение» возвращает ноль совпадений в строке linedf. Конвейер может с уверенностью выдать значение answerfound = False. Внедрение cosine возвращает 5 фрагментов (наиболее близких по тематике строк о стихийных бедствиях), и магистр права, увидев их, может сделать неверный вывод «да». Ключевые слова спасли ситуацию.
→ Статья 7B: Поиск правильных привязок объясняет принцип работы с ключевыми словами.
Урок 5. Совместное применение превосходит BM25 на узких корпусах.
BM25 ранжируется по частоте использования термина, но корпоративная форма ответа — это одно упоминание темы рядом с конкретным значением, поэтому показатели совпадения и привязки к регулярным выражениям с высокой стоимостью превосходят статистические данные по узким корпорациям. Предположения IDF расходятся с корпусом из 20 документов, где каждый термин является «редким» по стандартам Википедии.
Конкретный контраст. Возникает вопрос: «Какова сумма франшизы?». BM25 занимает первое место по частоте употребления слова «франшиза»; строка, которая встречается 12 раз в разделе глоссария, занимает первое место. Поиск по совпадению ранжирует строки, содержащие как «франшизу», так и число; фактическая строка страхового полиса («франшиза составляет 1000 долларов») занимает первое место, поскольку она совпадает с 1000 долларами, и LLM может безошибочно определить значение.
→ Статья 7B: Поиск правильных привязок позволяет оценить совпадение с BM25.
Урок 6. Один проход LLM по оглавлению
Передача 20–100 строк toc_df небольшой модели и запрос о том, какие разделы отвечают на вопрос, обходится в один кэшированный вызов и приводит к пропускам совпадения ключевых слов в парафразах («досрочный выход» ≈ «Завершение»).
Логическое обоснование оглавления — один из наиболее часто используемых поисковых сигналов в рабочей среде RAG.
Конкретный контраст. Пользователь спрашивает: «Когда я могу отказаться от политики досрочно?». Соответствие подстроки в поле «оставить» возвращает нулевые значения оглавления. Вызов LLM для полного оглавления (28 строк, помещаются в одно небольшое приглашение) возвращает раздел «Завершение и отмена», правильный пересказ. Один кэшированный вызов LLM, детерминированный впоследствии, и правильный якорь.
→ В статье 7B изложены доводы в пользу оглавления, а в статье 7C: Магистр права в качестве арбитра добавляет арбитра.
В шести уроках есть один общий ход: отказаться от косинусного отражения фрагментов и вместо этого рассматривать поиск как фильтрацию в структурированных таблицах. Ключевые слова всегда используются, потому что они указывают на отсутствие; оглавление — это первоклассный сигнал, потому что в документе уже указана его структура; вложения — это необязательное уточнение, а не основа. Программы для глубоких погружений (7A, 7B, 7C, 7bis) содержат код, который может быть использован в реальных документах; этот раздел является каталогом, который указывает на них.
В разных отраслях и профессиях
Во всех доменах используется одна и та же схема поиска из трёх сигналов (ключевое слово в linedf + логическое обоснование в tocdf + резервный вариант для встраивания). Словарный запас и глубина оглавления различаются; иерархия сигналов — нет. Пять секторов ниже, один шаблон поиска, одна трассировка аудита для каждого вызова.

Вставки запускаются только в медицинской строке, где словарный запас пользователя («тахикардия») отличается от словарного запаса документа («учащённое сердцебиение»). Остальные четыре строки полностью основаны на ключевом слове + оглавлении. Ключевые слова доказывают отсутствие (Урок 4), оглавление улавливает перефразировки (Урок 6), а разделение привязки/области видимости позволяет разделить точность и контекст (Урок 2) в каждой строке. Разница в затратах реальна: четыре строки с разрешением по ключевым словам выполняются за миллисекунды с нулевым количеством токенов LLM; медицинская строка оплачивается за один проход внедрения и один вызов арбитра.
Источники и дальнейшее чтение
Основная литература по поиску информации сформирована на основе веб‑поиска и более коротких потребительских материалов. Подход к серии предполагает использование материалов для небольших предприятий, структура которых известна, а словарный запас является ценным ресурсом.
Поиск — это фильтрация, а не поиск (статья 7А). Опубликованная статья «Ментальная модель: поиск как фильтрация в структурированных таблицах».
Встраивания — это не волшебство (Статья 2). Опубликованный каталог режимов сбоя для встраивания подобия.
Повторные ранжирования также не являются волшебством (Статья 2bis). Когда перекрёстное кодирование приносит свои плоды, а когда нет.
Автор
Кежан Ши
Смотрите всё, что написано Кежан Ши
Обработка документов, Llm, Rag, архитектура Rag, поиск информации
Поделитесь этой статьёй
Поделитесь на Facebook
Поделитесь на LinkedIn
Поделитесь на X
«На пути к науке о данных» — это публикация сообщества. Публикуйте свои идеи, чтобы охватить нашу глобальную аудиторию, и зарабатывайте с помощью авторской программы TDS.
Пишите для TDS