Затрудняетесь с ИИ или разработкой полного стека? Наши эксперты готовы помочь вам: индивидуальные консультации, техническая интеграция и многое другое. Обращайтесь по адресу [email protected].

Создание модели семантического поиска с помощью трансформаторов предложений для приложения RAG

Реализация конвейера Retrieval Augmented Generation (RAG) путем точной настройки собственной модели семантического поиска - это мощный подход к повышению точности и релевантности систем ответа на вопросы.

Эта техника сочетает в себе сильные стороны семантического поиска и генеративного ИИ, позволяя системе лучше понимать вопросы пользователей и генерировать более точные и контекстуально релевантные ответы. Тонкая настройка модели семантического поиска с помощью Sentence Transformers позволяет разработчикам адаптировать модель к конкретной области, повышая общую производительность конвейера RAG.

Семантический поиск

Что такое семантический поиск?

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

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

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

Что такое дополненное поколение (RAG)?

Семантический поиск

Retrieval Augmented Generation (RAG) - это технология, повышающая точность и надежность генеративных моделей ИИ, таких как большие языковые модели (LLM), за счет использования внешних источников данных для получения более точной и актуальной информации. Она объединяет поисковый компонент с генеративной моделью, позволяя системе искать и извлекать релевантную информацию из базы данных или базы знаний, чтобы дополнить свои внутренние знания при генерации ответов.

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

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

Что такое Библиотека трансформеров?

Трансформаторы приговоров

Библиотека Sentence Transformers - это мощный фреймворк на языке Python, предназначенный для современных текстовых вкраплений. Она построена на основе нейронных сетей-трансформаторов, таких как BERT, RoBERTa, XLM-R и других, что позволяет достичь высочайшей производительности в различных задачах, включая семантический поиск, поиск перефразировок, сравнение семантического сходства, кластеризацию и многое другое. Эта библиотека позволяет легко настраивать методы встраивания предложений, что дает возможность создавать встраивания предложений для конкретных задач, отвечающие конкретным потребностям. Подробнее на сайте Sentence Transformers

Библиотека предлагает широкий выбор предварительно обученных моделей Sentence Transformers для более чем 50 языков, доступных на платформе Hugging Face. Пользователи также могут обучать и настраивать свои собственные модели с помощью библиотеки, обеспечивая гибкость при создании пользовательских моделей для уникальных случаев использования. Команда разработчиков Sentence Transformers недавно выпустила новую основную версию (v3), которая значительно улучшает возможности библиотеки, особенно ее тонкую настройку.

Библиотека Sentence Transformers - быстрая, всеобъемлющая и хорошо поддерживаемая, поэтому мы используем ее в этом учебнике.

Создание собственной модели семантического поиска

Создание собственной модели семантического поиска - отличный способ получить точные результаты, обеспечив при этом очень низкую задержку. Это еще более верно, если развернуть собственную модель семантического поиска на GPU.

Для начала давайте создадим небольшой набор данных, содержащий наши данные. Создайте файл CSV с одним столбцом (под названием "dataset.csv"), содержащий следующую техническую документацию о принтерах HP (в реальном сценарии вы, конечно, захотите включить гораздо больше примеров):

"HP® LaserJets have unmatched printing speed, performance and reliability that you can trust. Enjoy Low Prices and Free Shipping when you buy now online."
"Every HP LaserJet comes with a one-year HP commercial warranty (or HP Limited Warranty)."
"HP LaserJet ; Lowest cost per page on mono laser printing. · $319.99 ; Wireless options available. · $109.00 ; Essential management features. · $209.00."

Каждая строка может содержать до 512 лексем (примерно эквивалентно 400 словам), но для достижения максимальной точности рекомендуется не превышать 128 лексем (примерно эквивалентно 100 словам). Теперь, когда у нас есть 3 фрагмента документации в нашем наборе данных, мы можем закодировать данные с помощью нашей модели с трансформаторами предложений. Создайте скрипт на Python, выполнив следующие действия (убедитесь, что установлены PyTorch и Sentence Transformers).

from sentence_transformers import SentenceTransformer
import csv
import torch

model_name = 'paraphrase-multilingual-mpnet-base-v2'
encoded_model_path = 'semantic_search_model.pt'
dataset_path = 'dataset.csv'

bi_encoder = SentenceTransformer(model_name)

passages = []
with open(dataset_path) as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:
        passages.append(row[0])
        
corpus_embeddings = bi_encoder.encode(
    passages, batch_size=32, convert_to_tensor=True, show_progress_bar=True)

torch.save(corpus_embeddings, encoded_model_path)

Этот скрипт загружает и использует paraphrase-multilingual-mpnet-base-v2 в качестве базовой модели и использует ее для кодирования наших данных. Вы можете выбрать одну из многих доступных предварительно обученных моделей, в зависимости от ваших требований (размер модели, сценарий использования, поддерживаемые языки, ...). В зависимости от вашего оборудования вы можете изменить параметр "batch_size", чтобы ускорить процесс кодирования.

После создания модели вы можете использовать ее для выводов с помощью следующего сценария Python:

import csv
from sentence_transformers import SentenceTransformer, util
import torch

bi_encoder = SentenceTransformer('paraphrase-multilingual-mpnet-base-v2')
semantic_search_model = torch.load('semantic_search_model.pt')

passages = []
with open('app/custom_model/dataset.csv') as csv_file:
    csv_reader = csv.reader(csv_file)
    for row in csv_reader:
        passages.append(row[0])

question_embedding = bi_encoder.encode(
    "How long is the warranty on the HP Color LaserJet Pro?", convert_to_tensor=True)
hits = util.semantic_search(
    question_embedding, semantic_search_model, top_k=3)
hits = hits[0]

result = {"search_results": [
    {"score": hit['score'], "text": passages[hit['corpus_id']]} for hit in hits]}

Приведенный выше сценарий вывода дает следующие результаты:

{
"search_results": [
    {
        "score": 0.99,
        "text": "Every HP LaserJet comes with a one-year HP commercial warranty (or HP Limited Warranty)."
    },
    {
        "score": 0.74,
        "text": "All consumer PCs and printers come with a standard one-year warranty. Care packs provide an enhanced level of support and/or an extended period of coverage for your HP hardware. All commercial PCs and printers come with either a one-year or three-year warranty."
    },
    {
        "score": 0.68,
        "text": "In-warranty plan · Available in 2-, 3-, or 4-year extension plans · Includes remote problem diagnosis support and Next Business Day Exchange Service."
    },
    ]
}

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

Генерация ответа на естественном языке с помощью генеративного ИИ

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

Мы можем легко добиться этого, используя продвинутые LLM, такие как GPT-4 в OpenAI или LLaMA 3 и ChatDolphin в NLP Cloud. Вы можете либо оставить лучший результат из модели семантического поиска и передать его в качестве контекста в LLM, либо оставить несколько результатов. Вот пример подсказки с использованием только лучшего результата:

Context: Every HP LaserJet comes with a one-year HP commercial warranty (or HP Limited Warranty).
Based on the above context, answer the following question: How long is the warranty on the HP Color LaserJet Pro?

Этот запрос возвращает нечто подобное:

The warranty on the HP Color LasertJet Pro lasts at least 1 year.

Модель семантического поиска с кодированными данными VS хранение вкраплений в векторной базе данных

В системе Retrieval-Augmented Generation (RAG) создание модели семантического поиска с локальными кодированными данными или использование векторной базы данных - два интересных варианта.

При кодировании собственных данных мы преобразуем их в тензоры и затем имеем возможность загрузить их на GPU. С другой стороны, векторная база данных - это специализированная база данных, предназначенная для эффективного хранения, индексирования и запроса этих высокоразмерных векторов.

Для предприятий, желающих добиться очень низких задержек, рекомендуется кодировать собственные данные и загружать их в GPU, чтобы увеличить время вычислений. Однако это происходит за счет гибкости, так как данные приходится кодировать заново при каждом изменении набора данных. Если ваши базовые данные меняются очень часто, возможно, вам будет проще извлекать вкрапления и инкрементально хранить их в векторной базе данных (например, PG Vector).

Заключение

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

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

Если вам неинтересно самостоятельно создавать и внедрять собственную модель семантического поиска на основе Sentence Transformers, вы можете легко сделать это в один клик на NLP Cloud. Попробуйте семантический поиск на NLP Cloud прямо сейчас!

Если у вас есть вопросы о RAG, семантическом поиске и Sentence Transformers, не стесняйтесь, задавайте их нам, мы всегда рады помочь!

Julien
Технический директор NLP Cloud