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

RAG: ответы на вопросы на основе знаний о домене с помощью семантического поиска и генеративного ИИ

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

Ответы на вопросы

Проблемы, связанные с ответами на вопросы о знаниях домена

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

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

All NLP Cloud plans can be stopped anytime. You only pay for the time you used the service. In case of a downgrade, you will get a discount on your next invoice.

Теперь вы можете задать следующий вопрос:

When can plans be stopped?

ИИ ответит примерно так:

Anytime

Более подробную информацию можно найти в нашей документации по ответам на вопросы здесь.

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

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

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

Семантический поиск VS генеративный ИИ

Когда речь идет об ответах на вопросы, можно использовать два вида технологий. Генерация текста (генеративный ИИ) и семантический поиск.

Первая, генерация текста, - это в основном то, что я только что показал выше. Обычно для этого используется продвинутая модель генерации текста, такая как ChatDolphin, LLaMA, ChatGPT, GPT-4... Она способна понять человеческий вопрос и ответить на него как человек. Однако она не работает с большими документами. Тонкая настройка генеративной модели ИИ с помощью ваших знаний о предметной области не принесет желаемого результата, поскольку тонкая настройка не является хорошей техникой для добавления знаний в модель.

Семантический поиск - это, по сути, поиск документа тем же способом, что и Google, но на основе ваших собственных знаний о домене.

Для этого необходимо преобразовать внутренние документы в векторы (также известные как "вкрапления"). Затем следует преобразовать ваш вопрос в вектор, а затем выполнить векторный поиск (также известный как "семантическое сходство"), чтобы извлечь ту часть знаний о вашем домене, которая наиболее близка к вашему вопросу.

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

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

Более подробную информацию можно найти в нашей документации о семантическом поиске здесь.

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

Ответы на вопросы, сочетающие семантический поиск и генеративный ИИ

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

Допустим, мы являемся реселлером принтеров HP и хотим отвечать на вопросы наших клиентов на нашем сайте.

Сначала нам нужно будет вычислить вкрапления и сохранить их в векторной базе данных, либо создать собственную модель семантического поиска. Здесь она будет состоять всего из 3 примеров, но в реальной жизни вы можете включить до 1 миллиона примеров при использовании семантического поиска на NLP Cloud. Мы просто создаем CSV-файл и помещаем в него следующее:

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 printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert.
HP LaserJet ; Lowest cost per page on mono laser printing. · $319.99 ; Wireless options available. · $109.00 ; Essential management features. · $209.00.

Затем мы загружаем наш набор данных CSV в NLP Cloud и нажимаем кнопку "Создать модель". Через некоторое время наша собственная модель семантического поиска, содержащая наши собственные знания о домене, будет готова, и мы получим частный URL-адрес API, чтобы использовать ее.

Давайте зададим вопрос нашей новой модели с помощью клиента NLP Cloud Python:

import nlpcloud

# We use a fake model name and a fake API key for illustration reasons.
client = nlpcloud.Client("custom-model/5d8e6s8w5", "poigre5754gaefdsf5486gdsa56", gpu=True)
client.semantic_search("How long is the warranty on the HP Color LaserJet Pro?")

Модель быстро выдает следующие данные с коротким временем отклика:

{
"search_results": [
    {
        "score": 0.99,
        "text": "Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert."
    },
    {
        "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."
    },
    ]
}

Теперь мы извлекаем ответ, набравший наибольшее количество баллов (в идеале можно извлечь и несколько ответов): "Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert."

Этот ответ правильный, но он не очень удобен для пользователя, так как для получения ответа ему нужно прочитать довольно длинный кусок текста. Поэтому теперь мы снова зададим тот же вопрос нашей конечной точке ответа на вопрос, используя модель ChatDolphin. В качестве контекста мы будем использовать ответ семантического поиска:

import nlpcloud

client = nlpcloud.Client("chatdolphin", "poigre5754gaefdsf5486gdsa56", gpu=True)
client.question(
    """How long is the warranty on the HP Color LaserJet Pro?""",
    context="""Every HP printer comes with at least a one-year HP commercial warranty (or HP Limited Warranty). Some models automatically benefit from a three-year warranty, which is the case of the HP Color LaserJet Plus, the HP Color LaserJet Pro, and the HP Color LaserJet Expert."""
)

Он возвращает следующий ответ:

{
    "answer": "The warranty lasts for three years."
}

Неплохо, правда?

Заключение

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

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

Если вы хотите реализовать эту стратегию, смело создавайте собственную модель семантического поиска на NLP Cloud: см. соответствующую документацию здесь!

Mark
Инженер по приложениям в NLP Cloud