一、总体结构
基于搜索的语义检索和检索式问答系统的总体架构如下图所示:
注:蓝色线为数据导入过程(index阶段),橘黄色线为用户查询过程(query阶段)。
首先,本文使用开源的RocketQA框架zh_dureader_de_v2语言模型做为句子编码器,将question数据转化为固定长度为 768 维的特征向量。
然后,将特征向量存入Milvus 库中,同时 Milvus 会给这些特征向量分配一个 ID,将 ID 和对应的question文本和answer文本存储在 Redis中。
最后,用户输入一个question,模型将其转成特征向量。Milvus 对特征向量进行相似度检索,得到相似的question的 ID ,在 Redis 中找出 ID 对应的question和answer返回。
二、细节实现
I准备工作
python依赖包
requirements.txt
rocketqa~=1.1.0
pymilvus==1.1.0
redis~=4.1.4
启动milvus服务
docker run --name milvus_cpu_1.1 -d -p 19530:19530 -p 19121:19121
milvusdb/milvus:1.1.0-cpu-d050721-5e559c
检查milvus服务情况
docker logs milvus_cpu_1.1
连接milvus
from pymilvus import Milvus
milv = Milvus(host='192.168.**.***', port='19530')
print(milv)
print("Connect success!")
连接Redis
import redis
# 本地连接,创建数据库连接对象
redis_client = redis.Redis(host='127.0.0.1', port=6379, db=0)