Sentence-BERT+Milvus实现智能问答系统

本文主要介绍如何实现一个简单的智能问答系统,首先看一下最终实现的演示视频:

本系统为多领域智能问答系统。该系统与普通的问答系统不同,本系统根据用户所选择的语料库的不用切换应用领域,极大的方便了用户的使用。

本系统所使用的数据为问答对,即一个问题对应一个回答,如下表所示:

questionanswer
问题1回答1
问题2回答2

本系统主要实现流程为:

  1. 首先将所有的问答对存放在MySQL数据库中
  2. 使用预训练好的Sentence-Bert模型将所有问题进行文本向量化
  3. 将问题向量存放在Milvus存放在向量数据库中
  4. 在进行问答时,将问题使用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与前端进行交互。所使用的包如下所示:

版本
pymilvus2.0.0rc5
sentence_transformer2.2.0
pymysql1.0.2
pandas1.2.4
numpy1.21.6
sklearn1.0.2
flask2.1.2
flask_cors3.0.10

Sentence-Bert模型使用了预训练好的模型,运行代码会下载已经与训练好的模型,因此在第一次运行时会花费较长时间来下载模型。

数据库部分

数据库使用MySQL数据库和Milvus向量数据库。在本项目中,这两个数据库均使用docker安装并运行,具体安装步骤如下:

MySQL数据库:

  1. 使用如下命令安装并启动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
  1. 在/tiancn/mysql/conf文件夹下创建my.cnf文件并写入以下内容,这样做的目的是为了能够输入中文。
[client]default_character_set=utf8[mysqld]collation_server = utf8_general_cicharacter_set_server = utf8

Mivus向量数据库:

  1. 下载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
  1. 启动Milvus单机版。
 docker-compose up -d

如使用自己的环境,需要更改QaSys文件夹中app.py文件中第15、18行的IP地址。

其他

语料库可以自己制作也可以使用提供的关于保险和法律相关的两个语料库,这两个语料库在文件\QASys\corpus中。