Введение

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

Постановка задачи

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

  1. Проблема классификации. В этом методе мы размещаем вопрос и его варианты под тегом вместе с ответом на него. Учитывая запрос, наша модель должна классифицировать, к какому тегу он принадлежит, чтобы дать соответствующий ответ.
  2. Косинусное сходство и встраивание векторов. В этом методе при заданном запросе нам нужно определить, на какой вопрос похож данный запрос, и вернуть сопоставленный с ним ответ. Добавление векторных вложений помогает найти семантическое сходство.
  3. Сиамская сеть: этот метод похож на поиск сходства между вопросами, но вместо того, чтобы зависеть от косинусного сходства, мы используем сверточные нейронные сети для определения сходства.
  4. Последовательность за последовательностью. В этом методе мы прогнозируем выходную последовательность (ответ) на основе входной последовательности (запроса). Для решения этой проблемы мы используем архитектуру кодер-декодер.
  5. График знаний и НЛП. В этом методе на основе ответов необходимо построить базу знаний. Мы должны использовать методы НЛП, чтобы определить цель вопросов и сопоставить ее с правильным ответом.
  6. Обучение с подкреплением. В этом методе агент (бот) рассматривает диалог как последовательность состояний и действий, стремясь максимизировать вознаграждение. Бот учится, наблюдая за последовательностью диалогов (вопрос и ответ), а затем пытается воспроизвести ее.

Вышеупомянутые методы — это не обширный список, а подмножество решений.

Создание бота

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

Шаг 1: Подготовка данных

Нам нужны заранее определенные вопросы и ответы, сопоставленные, как показано ниже.

questions = ["hi", "What is the product", "what is the cost of the product"] 
answers = ["Hi there, How can I help you", "The product is a QA chatbot", "The product is available for free"]

Шаг 2: Создайте векторные вложения для вопросов

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

model = SentenceTransformer("sentence-transformers/all-mpnet-base-v2")
model.max_seq_length = 512
embeddings = model.encode(
        questions,
        show_progress_bar=True,
        convert_to_tensor=True
    )

Шаг 3: Определите косинусное сходство

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

query_embeddings = model.encode(query, convert_to_tensor=True)
cosine_scores = util.cos_sim(query_embeddings, embeddings)
similarity_score = torch.max(cosine_scores)
answer_idx = torch.argmax(cosine_scores)
answer = answers[answer_idx]

Вуаля! Мы создали чат-бота.

Улучшение решения

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

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

Полный код этого бота можно найти здесь

Если вам интересен мой пост и вы хотите поддержать меня, купите мне кофе.

Удачного кодирования!!

Первоначально опубликовано на https://vamsigutta.dev 23 июля 2023 г.