Кейс Elasticsearch RAG: настройка релевантности для гибридного поиска
Кейс Elasticsearch RAG: настройка релевантности для гибридного поиска

В нашей предыдущей статье《Случай Elasticsearch: код Baixing реализует RAG справочной документации Tencent ES》В этой статье мы познакомим вас, как быстро выполнить поиск с помощью комплексного поискового решения.выполнить RAG , чье внимание сосредоточено на эффективности —— Полный и удобный пакет решений,Это делает весь процесс создания и запуска RAG более эффективным, прилагая вдвое меньше усилий. И эта статья,МыСосредоточьтесь на результатах поиска, на том, как адаптироваться к различным ситуациям (разные привычки пользователей в поиске и возможные дефектные данные) и добиться оптимальных результатов.

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

Преимущества и ограничения векторного поиска

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

  • Во-первых, текст должен быть предварительно обработан, например, извлечение магистрали, фрагмент, карта и т. д., чтобы преобразовать текст в размер, подходящий для обработки модели встраивания слов, и установить связь между фрагментами и исходным документом.
  • Затем текст необходимо векторизовать, то есть фрагментированный текст представляется в виде многомерного числового вектора. Этого можно добиться с помощью некоторых моделей встраивания слов, таких как Word2Vec, GloVe, BERT и т. д.
  • Наконец, оператор запроса должен быть векторизован, то есть оператор запроса представлен в виде многомерного числового вектора. Этого можно достичь с помощью той же модели внедрения документа, что и сам документ, или с помощью некоторых специальных моделей внедрения запроса, таких как: Q-BERT, Q-трансформатор и т. д.
  • После получения векторного представления документа и оператора запроса сопоставление и поиск текста могут быть достигнуты путем расчета сходства между ними. Этого можно достичь с помощью некоторых мер сходства, таких как косинусное сходство, евклидово расстояние, манхэттенское расстояние и т. д. Обратите внимание, что расчеты сходства могут выполняться с несколькими векторными полями, а результаты в конечном итоге объединяются, а документ может иметь несколько фрагментов. Для сравнения общего балла документа необходимо взвешивать оценки векторного сходства фрагментов.

Векторный поиск имеет следующие преимущества:

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

Векторный поиск также имеет следующие ограничения:

  • Способность векторного поиска понимать естественный язык основана на моделях глубокого обучения.,Вместо индексации векторов и вычислений сходства векторов:
    • Для обучения и развертывания моделей глубокого обучения требуется большое количество вычислительных ресурсов и места для хранения данных.
    • Для обучения моделей глубокого обучения требуется большой объем аннотированных данных. Если данные низкого качества или не охватывают все возможные сценарии, модель может не обобщаться на новые данные.
    • Модели глубокого обучения необходимо регулярно обновлять, чтобы адаптироваться к изменениям в данных и поведении пользователей. Если модель устарела или неточна, это может повлиять на качество результатов поиска и удовлетворенность пользователей.
  • Необходимо учитывать размерность и плотность векторов, чтобы выбрать подходящие методы индексации и запроса. Если размерность вектора слишком велика или слишком мала или векторное распределение неравномерно, это может повлиять на эффективность и точность поиска.
  • Внедрение и обслуживание векторного поиска требует значительных вычислительных ресурсов и опыта. Для некоторых сценариев применения с ограниченными ресурсами этот вариант может оказаться неприемлемым.
  • В сценарии поиска короткого текста векторный поиск может столкнуться с проблемой семантического понимания. Хотя векторный поиск может выполнять семантический анализ запросов, при использовании коротких текстов представление и понимание семантики может быть недостаточно точным, что приводит к плохо релевантным результатам.
  • Векторный поиск представляет данные в виде векторных представлений слов, что создает естественные препятствия для людей с точки зрения прозрачности и интерпретируемости поиска. Люди не могут легко понять, почему два векторных представления похожи, а также сложно понять, как изменить функции, чтобы их можно было изменить. Улучшить релевантность;
  • Модификация модели внедрения、Тюнинг、переподготовкаДля большинства команд разработчиков порог слишком высок, а рентабельность инвестиций полна неопределенности.

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

Случаи, когда векторный поиск не дает результатов

Как мы упоминали в предыдущей статье Приложение RAG справочной документации Tencent ES в качестве примера. Давайте посмотрим на контрэффекты, которые мы получим в некоторых сценариях, если будем использовать только векторный поиск:

Когда мы знаем, что Tencent Cloud предлагает уникальные экономичные модели,Модель звездного моря,мы хотим знатьTencent Cloud ESВы когда-нибудь использовали эту модель?。но Когда пользователь не хочет вводить длинную строку предложений,Если мы будем искать только «Звездное море», мы увидим, что векторный поиск не может найти правильные результаты:

Векторный поиск не может найти короткие ключевые слова
Векторный поиск не может найти короткие ключевые слова

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

Аналогичным образом, если мы запросим такие ключевые слова, как «8XLARGE64» и «99,9%», векторный поиск выдаст некоторый нерелевантный контент, что сделает стоящую за ним большую модель бесполезной и может даже ввести в заблуждение, и в этом отношении полнотекстовый поиск. легко справится с задачей:

Чтобы решить эту проблему, мы можем использовать некоторые методы, такие как:

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

Эти методы могут в определенной степени улучшить проблему векторного поиска при обработке коротких операторов запроса, но у них также есть некоторые недостатки, такие как:

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

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

Принципы и преимущества гибридного поиска

Гибридный поиск — это метод поиска, сочетающий в себе векторный поиск и поиск по ключевым словам.,Он может воспользоваться преимуществами эффективности векторного поиска и гибкости поиска по ключевым словам.,выполнить Быстрее、Более точный、Более разнообразные результаты поиска. Принципы и преимущества гибридного поиск следующий:

  • Принцип гибридного поиска заключается в том, чтобы сначала использовать двусторонний вызов для получения запроса пользователя. Векторизация и расчет сходства выполняются для операторов запроса и документов соответственно, а также полнотекстовый поиск на основе сегментации слов. Два запроса выполняются параллельно, а возвращенные результаты объединяются и сортируются в соответствии с определенной логикой (например, средневзвешенным значением, объединенной сортировкой и т. д.), и, наконец, получается окончательный набор результатов поиска.
  • Преимущества гибридного поиска:,Он может преодолеть ограничения векторного поиска и поиска по ключевым словам.,выполнить Улучшения в следующих аспектах:
    • Более точный Результаты поиска для。Гибридный поиск может использовать поиск по ключевым словам и векторный поиск для одновременного запроса данных.,Повысьте точность и надежность поиска
    • Более разнообразные результаты поиска. Гибридный поиск может использовать преимущества разнообразия векторного поиска.,Возвращает различные результаты поиска,Вместо того, чтобы просто возвращать лучший результат соответствия,Это может предоставить больше выбора и информации.,Удовлетворение различных потребностей и предпочтений пользователей в запросах
    • Более сложные требования к запросам。Гибридный поиск может использовать логические операции, сортировку, фильтрацию и другие функции поиска ключевых слов для достижения более сложных запросов.,Например, запросы, содержащие несколько условий, несколько полей, несколько правил сортировки и т. д.,Это улучшает функциональность и гибкость поиска.
    • Более интерпретируемые результаты поиска. Гибридный поиск может использовать сопоставление и выделение текста для поиска по ключевым словам.,Добейтесь более интерпретируемых результатов поиска,Например, он отображает степень соответствия, позицию совпадения, соответствие содержимого и т. д. между оператором запроса и документом.,Это может улучшить понимание и удовлетворенность пользователей результатами поиска.
С помощью гибридного поиска можно восполнить недостатки векторного поиска.
С помощью гибридного поиска можно восполнить недостатки векторного поиска.

Факторы, которые следует учитывать при реализации гибридного поиска

Чтобы хорошо выполнить работу в гибридном поиске, при оценке проекта необходимо обратить внимание на следующие аспекты:

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

Динамические и гибкие возможности поиска по запросу

Использование Elasticsearch предоставит нашим пользователям большую гибкость. Благодаря единому интерфейсу полнотекстовый поиск, векторный поиск и гибридный поиск можно использовать по требованию в любое время для достижения «оплаты по мере использования». В бессерверной модели динамически предоставляемые вычислительные ресурсы сочетаются с динамическими комбинациями интерфейсов. будет более гибким, контролируя наши расходы.

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

Язык кода:javascript
копировать
# Search ElasticSearch index and return body and URL of the result
def search(es, embedding_model, query_text, search_mode):

    source_fields = ["body_content", "url", "title"]
    query = None
    knn = []
    highlight = None
    rank = None

    if search_mode in ["Полнотекстовый поиск", "Гибридный поиск"]:
        query = {
            "multi_match": {
                "query": query_text,
                "fields": ["body_content^2","title","headings"],
                "boost": 1,
                "type": "most_fields",
                "analyzer": "ik_max_word"
            }
        }
    if search_mode in ["Плотный векторный поиск",  «Смешанный поиск»]:
        knn = [{
            "field": "ml.inference.headings_embeddings.predicted_value",
            "query_vector_builder": {
                "text_embedding": {
                    "model_id": embedding_model,
                    "model_text": query_text
                }
            },
            "k": 5,
            "num_candidates": 10,
            "boost": 24
        }, {
            "field": "ml.inference.body_content_embeddings.predicted_value",
            "query_vector_builder": {
                "text_embedding": {
                    "model_id": embedding_model,
                    "model_text": query_text
                }
            },
            "k": 5,
            "num_candidates": 10,
            "boost": 24
        },
        ]
    if search_mode == «Полнотекстовый поиск»:
        highlight= {
            "pre_tags": ["`"],
            "post_tags": ["`"], 
            "fields": {
            "body_content": {}
            }
        }
    if search_mode == «Смешанный поиск»:
        rank = {
            "rrf":{
                "window_size": 5,
                "rank_constant": 2
            }
        }
    resp = es.search(
        index="search-tencent-es-doc",
        fields=source_fields,
        query=query,
        knn=knn,
        highlight = highlight,
        rank = rank,
        size=3,
        source=False)
    return resp

Пользователи могут выбирать по своему желанию
Пользователи могут выбирать по своему желанию

Эффективно комбинируйте и сортируйте результаты многосторонних отзывов.

Когда результаты векторного поиска и поиска по ключевым словам противоречивы и противоречивы,,Elasticsearch также предоставляет множество методов, упрощающих отладку результатов. в настоящий момент,elasticsearchОбеспечивает, например.:Линейная взвешенная сумма и объединенный ранжирование на основе обратного результата.(RRF)два пути。этотдва пути Все можно легко изменить в функции,Как в примере кода, приведенном выше:

  • линейно-взвешенная сумма:query:"boost":1; knn: "boost": 24

  • RRF: rank ={"rrf":{"window_size":5,"rank_constant":2}}

Когда мы обнаруживаем, что результаты полнотекстового поиска более важны во время использования,Мы можем настроить параметры соответствующим образом,Ниже приводитсяquery:"boost":1

иquery:"boost":24Разница:

query boost :1 vs 24
query boost :1 vs 24

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

Найти наиболее подходящие веса сложно.
Найти наиболее подходящие веса сложно.

Поэтому мы также предоставляем возможность эффективно объединять и ранжировать результаты без необходимости оценивать их по релевантности. —— RRF

После использования RRF результаты больше не содержат оценок релевантности, а объединяются на основе ранжирования документов при многостороннем отзыве:

Фильтровать условия поиска

Помимо сортировки, фильтрация также является очень важной возможностью в гибридном поиске или векторном поиске. Исключение некоторых документов, которые не соответствуют условиям, может не только сделать наши запросы более эффективными, но и сделать конечные результаты более точными. и Elasticsearch По сравнению с другими базами данных,Легче добиться этого,Конкретные причины см.《Векторный поиск в Elasticsearch: обоснование конструкции》одно предложение。

Например, определив фильтр непустой строки (здесь следует отметить, что Elasticsearch Функция корпоративного поиска создает различные типы полей, необходимые для настройки каждого важного поля при создании индекса, что позволяет нам фильтровать его, например, здесь body_content.enum,Он автоматически создается приложением. keyword тип):

Язык кода:python
кодКоличество запусков:0
копировать
body_content_filter = {
                "bool": {
                "must": [],
                "filter": [],
                "should": [],
                "must_not": [
                    {
                    "bool": {
                        "minimum_should_match": 1,
                        "should": [
                        {
                            "match_phrase": {
                            "body_content.enum": ""
                            }
                        }
                        ]
                    }
                    }
                ]
                }
            }

Мы можем искать в векторе необычные документы, которые могут совпадать(Такие как здесьbody_contentДокументы, представляющие собой пустые строки)отфильтровать:

Язык кода:python
кодКоличество запусков:0
копировать
    if search_mode in ["Плотный векторный поиск",  «Смешанный поиск»]:
        knn = [{
            "field": "ml.inference.headings_embeddings.predicted_value",
            "query_vector_builder": {
                "text_embedding": {
                    "model_id": embedding_model,
                    "model_text": query_text
                }
            },
            "k": 5,
            "num_candidates": 10,
            "boost": 24,
            "filter": body_content_filter
        }, {
            "field": "ml.inference.body_content_embeddings.predicted_value",
            "query_vector_builder": {
                "text_embedding": {
                    "model_id": embedding_model,
                    "model_text": query_text
                }
            },
            "k": 5,
            "num_candidates": 10,
            "boost": 24,
           "filter": body_content_filter
        },
        ]

Сравнение эффектов после добавления фильтров
Сравнение эффектов после добавления фильтров

Подвести итог

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

Иногда правильный выбор перевешивает усилия.

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose