Создание интеллектуальной системы вопросов и ответов с использованием NLP и Milvus
Milvus Project:github.com/milvus-io/milvus
Система ответов на вопросы широко используется в области обработки естественного языка. Она используется для ответа на вопросы в форме естественного языка и имеет широкий спектр применений. Типичные применения включают: интеллектуальное голосовое взаимодействие, онлайн-службу поддержки клиентов, получение знаний, персонализированное эмоциональное общение и многое другое. Большинство систем ответов на вопросы можно классифицировать как: генеративные и поисковые системы ответов на вопросы, однораундовые и многораундовые системы ответов на вопросы, открытые системы ответов на вопросы и специализированные системы ответов на вопросы.
В этой статье в основном рассматривается QA-система, разработанная для конкретной области, которую обычно называют интеллектуальным роботом службы поддержки клиентов. В прошлом создание робота службы поддержки клиентов обычно требовало преобразования предметных знаний в серию правил и графов знаний. Процесс построения в значительной степени опирается на «человеческий» интеллект. Как только сценарии менялись, требовалось много повторяющейся работы. С применением глубокого обучения в обработке естественного языка (NLP) машинное чтение может автоматически находить ответы на соответствующие вопросы непосредственно в документах. Языковая модель глубокого обучения преобразует вопросы и документы в семантические векторы, чтобы найти соответствующий ответ.
В этой статье используются модель BERT с открытым исходным кодом от Google и Milvus, поисковая система векторов с открытым исходным кодом, чтобы быстро создать Q&A-бота на основе семантического понимания.
Общая архитектура
В этой статье реализуется система ответов на вопросы посредством сопоставления семантической схожести. Общий процесс построения выглядит следующим образом:
- Получить большое количество вопросов с ответами в конкретной области (стандартный набор вопросов).
- Использовать модель BERT для преобразования этих вопросов в векторы признаков и сохранить их в Milvus. И Milvus одновременно назначит vector ID каждому вектору признаков.
- Сохранить эти ID репрезентативных вопросов и соответствующие им ответы в PostgreSQL.
Когда пользователь задает вопрос:
- Модель BERT преобразует его в вектор признаков.
- Milvus выполняет поиск по схожести и извлекает ID, наиболее похожий на вопрос.
- PostgreSQL возвращает соответствующий ответ.
Схема архитектуры системы выглядит следующим образом (синие линии обозначают процесс импорта, а желтые линии обозначают процесс запроса):
Рисунок 1.
Далее мы покажем, как шаг за шагом создать онлайн-систему Q&A.
Шаги по созданию системы Q&A
Перед началом необходимо установить Milvus и PostgreSQL. Конкретные шаги установки см. на официальном сайте Milvus.
1. Подготовка данных
Экспериментальные данные в этой статье взяты из: https://github.com/chatopera/insuranceqa-corpus-zh
Набор данных содержит пары вопросов и ответов, связанные со страховой отраслью. В этой статье мы извлекаем из него 20 000 пар вопросов и ответов. С помощью этого набора данных вопросов и ответов вы можете быстро создать робота службы поддержки клиентов для страховой отрасли.
2. Генерация векторов признаков
Эта система использует модель, предварительно обученную BERT. Скачайте ее по ссылке ниже перед запуском сервиса: https://storage.googleapis.com/bert_models/2018_10_18/cased_L-24_H-1024_A-16.zip
Используйте эту модель для преобразования базы вопросов в векторы признаков для будущего поиска по схожести. Дополнительную информацию о сервисе BERT см. на https://github.com/hanxiao/bert-as-service.
Рисунок 2.
3. Импорт в Milvus и PostgreSQL
Нормализуйте и импортируйте сгенерированные векторы признаков в Milvus, а затем импортируйте ID, возвращенные Milvus, и соответствующие ответы в PostgreSQL. Ниже показана структура таблицы в PostgreSQL:
Рисунок 3.
Рисунок 4.
4. Получение ответов
Пользователь вводит вопрос, и после генерации вектора признаков с помощью BERT он может найти наиболее похожий вопрос в библиотеке Milvus. В этой статье используется косинусное расстояние для представления сходства между двумя предложениями. Поскольку все векторы нормализованы, чем ближе косинусное расстояние двух векторов признаков к 1, тем выше сходство.
На практике в вашей системе может не оказаться идеально совпадающих вопросов в библиотеке. Тогда вы можете установить порог 0,9. Если наибольшее найденное расстояние сходства меньше этого порога, система сообщит, что связанные вопросы отсутствуют.
Рисунок 5.
Демонстрация системы
Ниже показан пример интерфейса системы:
Рисунок 6.
Введите свой вопрос в диалоговое окно, и вы получите соответствующий ответ:
Рисунок 7.
Резюме
После прочтения этой статьи мы надеемся, что вам будет легко создать собственную систему вопросов и ответов.
С моделью BERT вам больше не нужно заранее сортировать и организовывать текстовые корпуса. В то же время, благодаря высокой производительности и высокой масштабируемости векторной поисковой системы Milvus с открытым исходным кодом, ваша система QA может поддерживать корпус объемом до сотен миллионов текстов.
Milvus официально присоединился к Linux AI (LF AI) Foundation для инкубации. Приглашаем вас присоединиться к сообществу Milvus и работать с нами, чтобы ускорить применение технологий ИИ!
=> Попробуйте нашу онлайн-демоверсию здесь: https://www.milvus.io/scenarios
Читать далее

Zilliz Named "Highest Performer" and "Easiest to Use" in G2's Summer 2025 Grid® Report for Vector Databases
Zilliz shines in G2's Summer 2025 Grid® Report as both "Highest Performer" and "Easiest to Use," solving the performance-usability dilemma.

Creating Collections in Zilliz Cloud Just Got Way Easier
We've enhanced the entire collection creation experience to bring advanced capabilities directly into the interface, making it faster and easier to build production-ready schemas without switching tools.

OpenAI o1: What Developers Need to Know
In this article, we will talk about the o1 series from a developer's perspective, exploring how these models can be implemented for sophisticated use cases.



