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


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

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

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

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

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

Схема с записями JSON. Одно поле обогащено.

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

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

Замечание

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

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

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

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

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

  • Нормализованный текст. Нормализация текста в соответствии со стандартами, такими как расширение аббревиаций, преобразование чисел в слова и расширение контрактов, например расширение "Я" на "Я", может помочь повысить производительность векторных поисков.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Стоимость расширения

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

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