当前位置:网站首页>Sentence-BERT+Milvus实现智能问答系统
Sentence-BERT+Milvus实现智能问答系统
2022-07-22 18:12:00 【CityD】
Sentence-BERT+Milvus实现智能问答系统
本文主要介绍如何实现一个简单的智能问答系统,首先看一下最终实现的演示视频:
本系统为多领域智能问答系统。该系统与普通的问答系统不同,本系统根据用户所选择的语料库的不用切换应用领域,极大的方便了用户的使用。
本系统所使用的数据为问答对,即一个问题对应一个回答,如下表所示:
| question | answer |
|---|---|
| 问题1 | 回答1 |
| 问题2 | 回答2 |
| … | … |
本系统主要实现流程为:
- 首先将所有的问答对存放在
MySQL数据库中 - 使用预训练好的
Sentence-Bert模型将所有问题进行文本向量化 - 将问题向量存放在
Milvus存放在向量数据库中 - 在进行问答时,将问题使用
Sentence-Bert模型进行向量化,然后使用Milvus在其向量数据库中寻找与之相似的问题及索引,然后利用索引到MySQL数据库中寻找对应的答案。
本系统分为前端后端两部分,下面分别介绍一下前端和后端所使用的技术以及是如何使用这些技术实现本系统的,系统源码放在github上,链接如下:
https://github.com/TiancNing/question-answering-system
文件夹包含内容说明:
- question_answer_system:前端代码。
- QASys:后端代码。
前端部分
前端就比较简单,主要使用Vue2实现。使用了一个专门为聊天而设计的组件JwChat,感兴趣的可以通过以下链接玩一下:
https://codegi.gitee.io/jwchatdoc/
后端部分
后端部分主要使用Flask框架实现,然后使用axios与前端进行交互。所使用的包如下所示:
| 包 | 版本 |
|---|---|
| pymilvus | 2.0.0rc5 |
| sentence_transformer | 2.2.0 |
| pymysql | 1.0.2 |
| pandas | 1.2.4 |
| numpy | 1.21.6 |
| sklearn | 1.0.2 |
| flask | 2.1.2 |
| flask_cors | 3.0.10 |
Sentence-Bert模型使用了预训练好的模型,运行代码会下载已经与训练好的模型,因此在第一次运行时会花费较长时间来下载模型。
数据库部分
数据库使用MySQL数据库和Milvus向量数据库。在本项目中,这两个数据库均使用docker安装并运行,具体安装步骤如下:
MySQL数据库:
- 使用如下命令安装并启动MySQL数据库。
docker run -d -p 3306:3306 --privileged=true -v /tiancn /mysql/log:/var/log/mysql -v /tiancn/mysql/data:/var/lib/mysql -v /tiancn/mysql/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 --name mysql mysql:5.7
- 在/tiancn/mysql/conf文件夹下创建my.cnf文件并写入以下内容,这样做的目的是为了能够输入中文。
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
Mivus向量数据库:
- 下载milvus-standalone-docker-compose.yml配置文件并保存为 docker-compose.yml。
wget https://github.com/milvus-io/milvus/releases/download/v2.0.2/milvus-standalone-docker-compose.yml -O docker-compose.yml
- 启动Milvus单机版。
docker-compose up -d
如使用自己的环境,需要更改QaSys文件夹中app.py文件中第15、18行的IP地址。
其他
语料库可以自己制作也可以使用提供的关于保险和法律相关的两个语料库,这两个语料库在文件\QASys\corpus中。
边栏推荐
- Firewall Research Report
- get请求和post请求区别
- Introduction to programming 2 - find the minimum value
- Use of vim editor
- 【基础3】——结构与函数
- The difference between get request and post request and packet capturing
- 暑期提前学大学物理C知识记录【更新】
- UNIX实现IO多路复用之使用select函数实现网络socket服务端
- 洛谷回文质数 Prime Palindromes
- Difference between get request and post request
猜你喜欢
随机推荐
JMeter regular expression extractor
Input a string of characters from the keyboard, output different characters and the number of times each character appears. (the output is not in order) use the common methods of string class to solve
防火墙调研报告
Lire la lecture efficace - l'auto - investissement le plus rentable
A little life
嵌入式系统移植【1】————导学
正则表达式Ⅰ
DHCP原理与配置
LC:剑指 Offer 10- I. 斐波那契数列
Disk management operations
The difference between get request and post request
01. Introduction to large Internet Architecture
The use of file class, common APIs and how to traverse directories and subdirectories
Judge whether the map contains the specified key and value
指针学习日记(四)使用结构与指针(链表)
PXE高效批量网络装机
Regular expression I
RAID disk array
Confused may
推荐系统基础架构以及项目介绍









