Поделиться через


Этап обогащения блока RAG

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

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

Замечание

В этой статье рассматриваются только векторные решения для генерации с дополнением на основе поиска (RAG). Стратегии, основанные на графах, агентно-ориентированные, с добавлением тегов (TAG) и другие решения RAG, не входят в сферу рассмотрения.

Эта статья является частью серии. Прочитайте введение.

На следующем рисунке показан пример кода блоков, обогащенных данными.

Схема с записями JSON.

Очистка данных

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

Замечание

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

Рассмотрим следующие распространенные процедуры очистки:

  • Реализуйте стратегии нижнего уровня. Нижнее число позволяет словам, которые прописываются в начале предложения, чтобы соответствовать соответствующим словам в предложении. Внедрение обычно учитывает регистр, поэтому "Cheetah" и "cheetah" приведет к другому вектору для одного логического слова. Например, для внедренного запроса "что быстрее, гееты или пума?" внедрение "гееты быстрее, чем pumas", является более близким совпадением, чем "Cheetahs быстрее, чем pumas". Некоторые стратегии нижнего регистра строчные буквы всех слов, включая правильные существительные, в то время как другие стратегии строчные только первые слова в предложениях.

  • Предотвращайте атаки инъекции контекста. Если злоумышленник знает, что репозиторий содержимого обрабатывается для индексирования, злоумышленник может попытаться добавить содержимое в репозиторий, включающее инструкции по оценке языковых моделей и агентов. Никогда не используйте данные из содержимого в качестве источника инструкций во время любых задач обработки.

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

  • Удалите стоп-слова. Стоп-слова — это слова, такие как "a", "an" и "the". Вы можете удалить стоп-слова, чтобы уменьшить размерность результирующего вектора. Если удалить стоп-слова в предыдущем примере, "гепард быстрее, чем пума" и "гепард быстрее, чем пума", векторно равно "гепард быстрее пума". Но важно понимать, что некоторые стоп-слова содержат семантический смысл. Например, "не" может рассматриваться как стоп-слово, но имеет значительное семантический смысл. Необходимо проверить, чтобы определить эффект удаления стоп-слов.

  • Исправление ошибок орфографии. Неправильное слово не совпадает с правильно написанным словом в модели внедрения. Например, "обман" не совпадает с "геетой" в внедрении. Чтобы устранить эту проблему, следует устранить ошибки орфографии.

  • Удалите символы Юникода. Удалите символы Юникода, чтобы уменьшить шум в блоках и уменьшить размерность. Как и стоп-слова, некоторые символы Юникода могут содержать соответствующие сведения. Важно провести тестирование, чтобы понять последствия удаления символов Юникода.

  • Нормализованный текст. Нормализуйте текст в соответствии со стандартами, такими как расширение аббревиатур, преобразование чисел в слова и расширение сокращений, например расширение "I'm" на "I am". Такой подход может помочь повысить производительность векторных поисковых запросов.

  • Нормализация локализации. Предпочесть локализацию на уровне документа и повторно обработать каждый язык отдельно. Избегайте хранения неоцененных переводов. Убедитесь, что модель внедрения поддерживает многоязычные входные данные.

Расширение блоков

Семантические поиски по векторным блокам хорошо работают для некоторых типов запросов, но не для других. В зависимости от типов запросов, необходимых для поддержки, может потребоваться расширить блоки с дополнительными сведениями. Дополнительные поля метаданных хранятся в той же строке, что и встраивания, и их можно использовать в поисковом решении в качестве фильтров или части поиска.

На следующем рисунке показан JSON полностью обогащенного содержимого и описывается, как платформа поиска может использовать метаданные.

Схема, показывающая JSON полно обогащенного содержимого и способ использования метаданных платформой поиска.

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

В следующем списке описываются общие поля метаданных, исходный текст блока, потенциальные использование и средства или методы, которые создают содержимое метаданных.

  • ИДЕНТИФИКАТОР. Идентификатор однозначно идентифицирует блок. Уникальный идентификатор полезен во время обработки, чтобы определить, существует ли блок в хранилище. Идентификатор может быть хэшом определенного ключевого поля. Средства: библиотека для хеширования.

  • Титул. Заголовок — это полезное возвращаемое значение для блока. Он содержит краткую сводку содержимого в блоке. Сводка также может быть полезна для запроса с индексированного поиска, так как она может содержать ключевые слова для сопоставления. Инструменты: Языковая модель.

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

  • Рефрессирование блока. Рефрессирование блока может оказаться полезным в качестве поля векторного поиска, так как рефрессирование фиксирует варианты языка, например синонимы и парафразирование. Инструменты: Языковая модель.

  • Ключевые слова. Поиск по ключевым словам полезен для данных, не являющихся неконтекстальными, для поиска точного совпадения, а также при наличии определенного термина или значения. Например, у автоматического производителя могут быть проверки или данные о производительности для каждой модели в течение нескольких лет. "Обзор продукта X за год 2009 года" семантический, как "Обзор продукта X для 2010" и "Обзор продукта Y в 2009 году". В этом случае более эффективно соответствовать ключевым словам для продукта и года. Инструменты: Языковая модель, RAKE, KeyBERT, multi-rake.

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

  • Сущности. Сущности — это определенные элементы информации, такие как люди, организации и расположения. Как и ключевые слова, сущности хорошо подходит для точного поиска соответствия или когда конкретные сущности важны. Инструменты: spaCy, Стэнфордский распознаватель именованных сущностей (Стэнфорд NER), scikit-learn и набор средств для естественного языка (NLTK).

  • Чистый фрагмент текста. Текст очистки блока. Инструменты: Языковая модель.

  • Ответы на вопросы, на которые может ответить блок. Иногда внедренный запрос не является точным соответствием внедренному фрагменту. Например, запрос может быть небольшим относительно размера блока. Возможно, лучше сформулировать запросы, которые блок может ответить, и выполнить векторный поиск между фактическим запросом пользователя и предварительно сформированными запросами. Инструменты: Языковая модель.

  • Источник. Источник блока может быть ценным в качестве возврата запросов. Возврат источника позволяет запрашивающим ссылаться на исходный источник.

  • Язык. Язык блока может быть полезен в качестве фильтра в запросах.

Рассмотрите рекомендации по многомодальному обогащению

При работе с видео, изображением или звуковым носителем рассмотрите следующие рекомендации.

  • Создайте описательный текст для каждого артефакта и включите локализованные переводы.
  • Создайте несколько представлений для каждого артефакта.

Вычисление стоимости расширения

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

Следующий шаг