整体架构
Milvus 项目:github.com/milvus-io/milvus
问题解答系统通常用于自然语言处理领域。它用于回答自然语言形式的问题,应用范围十分广泛。典型的应用包括:智能语音交互、在线客户服务、知识获取、个性化情感聊天等。大多数问题解答系统可分为:生成式问题解答系统和检索式问题解答系统、单轮问题解答系统和多轮问题解答系统、开放式问题解答系统和特定问题解答系统。
本文主要讨论针对特定领域设计的问答系统,也就是通常所说的智能客服机器人。过去,构建客服机器人通常需要将领域知识转化为一系列规则和知识图谱。构建过程在很大程度上依赖于 "人 "的智慧。随着深度学习在自然语言处理(NLP)中的应用,机器阅读可以直接从文档中自动找到匹配问题的答案。深度学习语言模型将问题和文档转换为语义向量,从而找到匹配的答案。
本文利用谷歌开源的 BERT 模型和开源向量搜索引擎 Milvus,快速构建了一个基于语义理解的问答机器人。
整体架构
本文通过语义相似性匹配实现了一个问题解答系统。一般构建过程如下:
- 获取大量带有特定领域答案的问题(标准问题集)。
- 使用 BERT 模型将这些问题转换成特征向量并存储到 Milvus 中。而 Milvus 会同时为每个特征向量分配一个向量 ID。
- 将这些具有代表性的问题 ID 及其对应的答案存储在 PostgreSQL 中。
当用户提问时:
- BERT 模型会将其转换为特征向量。
- Milvus 执行相似性搜索,检索与问题最相似的 ID。
- PostgreSQL 返回相应的答案。
系统架构图如下(蓝线代表导入过程,黄线代表查询过程):
1-system-architecture-milvus-bert-postgresql.png
接下来,我们将逐步向您介绍如何构建在线问答系统。
构建问答系统的步骤
在开始之前,你需要安装 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-code-block.png
3.导入 Milvus 和 PostgreSQL
将生成的特征向量规范化并导入到 Milvus,然后将 Milvus 返回的 ID 和相应的答案导入到 PostgreSQL。下图显示了 PostgreSQL 中的表结构:
3-import-milvus-postgresql.png
4-import-milvus-postgresql.png
4.获取答案
用户输入一个问题,通过 BERT 生成特征向量后,就可以在 Milvus 库中找到最相似的问题。本文使用余弦距离来表示两个句子之间的相似度。因为所有向量都是归一化的,所以两个特征向量的余弦距离越接近 1,相似度就越高。
实际上,您的系统库中可能没有完全匹配的问题。那么,您可以将阈值设为 0.9。如果检索到的最大相似度距离小于该阈值,系统将提示不包含相关问题。
4-retrieve-answers.png
系统演示
下图显示了系统的示例界面:
5-milvus-QA-system-application.png
在对话框中输入问题,您将收到相应的答案:
5-milvus-QA-system-application-2.png
摘要
阅读本文后,我们希望您能轻松建立自己的问答系统。
有了 BERT 模型,您不再需要事先对文本语料进行分类和整理。同时,得益于开源向量搜索引擎 Milvus 的高性能和高扩展性,您的问答系统可以支持多达数亿文本的语料库。
Milvus 已正式加入 Linux AI(LF AI)基金会进行孵化。欢迎您加入 Milvus 社区,与我们一起加速人工智能技术的应用!
=> 点击此处试用我们的在线演示:https://www.milvus.io/scenarios
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word