В нашей предыдущей статье《Случай Elasticsearch: код Baixing реализует RAG справочной документации Tencent ES》В этой статье мы познакомим вас, как быстро выполнить поиск с помощью комплексного поискового решения.выполнить RAG , чье внимание сосредоточено на эффективности —— Полный и удобный пакет решений,Это делает весь процесс создания и запуска RAG более эффективным, прилагая вдвое меньше усилий. И эта статья,МыСосредоточьтесь на результатах поиска, на том, как адаптироваться к различным ситуациям (разные привычки пользователей в поиске и возможные дефектные данные) и добиться оптимальных результатов.。
как было сказано ранее,Нелегко по-настоящему понять, что такое RAG.,выполнитьRAGЭто еще сложнее。Текущая ситуация такова, что большую часть времени пользователи простовыполнитьRAGПонимается как добавлениевекторная база данных。ноRAGэто сложное понятие,Это не просто векторная база данных,Внедрение RAG требует глубокого понимания бизнес-сценариев.,И требует большой обработки данных и оптимизации алгоритмов.,Понимание и обратная связь поведения пользователей также являются важным ключом к достижению конечного эффекта.。Итак, нам нужно скорее гибридное поисковое решение, а не просто векторный поиск.。
Мы знаем, что векторный поиск — это метод поиска, основанный на модели векторного пространства, который может преобразовывать текст в математические векторы, а затем достигать сопоставления и поиска текста путем расчета сходства между векторами. Принцип и процесс векторного поиска примерно следующие:
Одно предложение итог,Просто векторный поиск выглядит хорошо,Но это слишком сложно реализовать,И векторный поиск должен обеспечивать точный поиск.,Также есть требования к пользователям。
Как мы упоминали в предыдущей статье Приложение RAG справочной документации Tencent ES в качестве примера. Давайте посмотрим на контрэффекты, которые мы получим в некоторых сценариях, если будем использовать только векторный поиск:
Когда мы знаем, что Tencent Cloud предлагает уникальные экономичные модели,Модель звездного моря,мы хотим знатьTencent Cloud ESВы когда-нибудь использовали эту модель?。но Когда пользователь не хочет вводить длинную строку предложений,Если мы будем искать только «Звездное море», мы увидим, что векторный поиск не может найти правильные результаты:
Это связано с тем, что векторный поиск основан на вычислении сходства векторов слов, а векторы слов обучаются с помощью большого количества текстовых данных и часто содержат некоторую семантическую и контекстную информацию. Если оператор запроса слишком короткий, например, содержит только идентификатор, хеш-код или название продукта, то их векторы слов могут не отражать их истинное значение, и они не могут эффективно сопоставляться с другими связанными документами. Это приведет к неточным результатам векторного поиска или даже к совершенно нерелевантному контенту.
Аналогичным образом, если мы запросим такие ключевые слова, как «8XLARGE64» и «99,9%», векторный поиск выдаст некоторый нерелевантный контент, что сделает стоящую за ним большую модель бесполезной и может даже ввести в заблуждение, и в этом отношении полнотекстовый поиск. легко справится с задачей:
Чтобы решить эту проблему, мы можем использовать некоторые методы, такие как:
Эти методы могут в определенной степени улучшить проблему векторного поиска при обработке коротких операторов запроса, но у них также есть некоторые недостатки, такие как:
поэтому,нам нужен лучший способ,Решить проблему векторного поиска при обработке коротких операторов запроса.,Здесь на помощь приходит гибридный поиск. Гибридный поиск может сочетать в себе преимущества векторного поиска и поиска по ключевым словам.,Добейтесь более быстрых, точных и разнообразных результатов поиска. в следующей части,Мы подробно представим Принципы и преимущества гибридного поиска。
Гибридный поиск — это метод поиска, сочетающий в себе векторный поиск и поиск по ключевым словам.,Он может воспользоваться преимуществами эффективности векторного поиска и гибкости поиска по ключевым словам.,выполнить Быстрее、Более точный、Более разнообразные результаты поиска. Принципы и преимущества гибридного поиск следующий:
Чтобы хорошо выполнить работу в гибридном поиске, при оценке проекта необходимо обратить внимание на следующие аспекты:
Использование Elasticsearch предоставит нашим пользователям большую гибкость. Благодаря единому интерфейсу полнотекстовый поиск, векторный поиск и гибридный поиск можно использовать по требованию в любое время для достижения «оплаты по мере использования». В бессерверной модели динамически предоставляемые вычислительные ресурсы сочетаются с динамическими комбинациями интерфейсов. будет более гибким, контролируя наши расходы.
Например, посредством определения следующей функции мы можем определить, как выполнять поиск на основе динамических условий в любое время, не внося изменений в код:
# 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)два пути。этотдва пути Все можно легко изменить в функции,Как в примере кода, приведенном выше:
"boost":1
; knn: "boost": 24
rank ={"rrf":{"window_size":5,"rank_constant":2}}
Когда мы обнаруживаем, что результаты полнотекстового поиска более важны во время использования,Мы можем настроить параметры соответствующим образом,Ниже приводитсяquery:"boost":1
иquery:"boost":24
Разница:
Конечно, корректировка посредством взвешенной оценки не является панацеей. Часто из-за разных методов оценки релевантности разные методы поиска дают очень разные оценки релевантности. Единому весу трудно справиться с различными сценариями, потому что вес полнотекстового поиска увеличивается, что делает для нас это невозможным. ответить на вопросы, связанные с семантическим поиском. Вопрос:
Поэтому мы также предоставляем возможность эффективно объединять и ранжировать результаты без необходимости оценивать их по релевантности. —— RRF。
После использования RRF результаты больше не содержат оценок релевантности, а объединяются на основе ранжирования документов при многостороннем отзыве:
Помимо сортировки, фильтрация также является очень важной возможностью в гибридном поиске или векторном поиске. Исключение некоторых документов, которые не соответствуют условиям, может не только сделать наши запросы более эффективными, но и сделать конечные результаты более точными. и Elasticsearch По сравнению с другими базами данных,Легче добиться этого,Конкретные причины см.《Векторный поиск в Elasticsearch: обоснование конструкции》одно предложение。
Например, определив фильтр непустой строки (здесь следует отметить, что Elasticsearch Функция корпоративного поиска создает различные типы полей, необходимые для настройки каждого важного поля при создании индекса, что позволяет нам фильтровать его, например, здесь body_content.enum
,Он автоматически создается приложением. keyword
тип):
body_content_filter = {
"bool": {
"must": [],
"filter": [],
"should": [],
"must_not": [
{
"bool": {
"minimum_should_match": 1,
"should": [
{
"match_phrase": {
"body_content.enum": ""
}
}
]
}
}
]
}
}
Мы можем искать в векторе необычные документы, которые могут совпадать(Такие как здесьbody_content
Документы, представляющие собой пустые строки)отфильтровать:
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, мы можем легко получить помощь по различным каналам для настройки запросов. Это имеет решающее значение для выбора технологии и успеха или провала конечного проекта.
Иногда правильный выбор перевешивает усилия.