一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

基于BERT模型的新冠知识智能问答系统及方法

2022-10-26 07:44:34 来源:中国专利 TAG:

基于bert模型的新冠知识智能问答系统及方法
技术领域
1.本发明属于智能问答技术领域,具体涉及一种基于bert模型的新冠知识智能问答系统及方法。


背景技术:

2.智能问答技术领域的主要技术是自然语言处理技术(nlp)。问答系统可以分为基于知识图谱的问答系统、检索式问答系统、抽取式问答系统、生成式问答系统等。其运用的传统自然语言处理模型主要为word2vec、elmo、cnn、rnn、(bi)lstm、transformer、bert 等。其运用的传统向量检索算法主要包括暴力搜索算法、近似最近邻搜索方法等。
3.基于知识图谱的问答系统其在现实生活中的应用非常广泛。目前已经有很多典型的商业产品,各个领域都出现了对其技术的应用。例如在医疗领域应用的问答系统,极大方便购买者询问产品详细情况,同时节省了客服的人力,提升了服务质量与速度。
4.因为互联网络的发展及数据量的爆炸式增长,出现了基于检索匹配的问答系统。检索式问答系统是信息检索系统的一种高级形式。用户能够以自然语言的形式提出查询请求,系统则直接返回给用户准确、简洁的答案而非一组可能包含答案的相关文档,是一种事实检索系统。其思路是从用户的自然语言问句中提取关键字,并在文本库或网页中搜索相关的文档。
5.抽取式问答系统是给定问句语义分析结果,自动问答系统需要在已有语料库、知识库或问答库中匹配相关的信息,并抽取出相应的答案。传统答案抽取构建在浅层语义分析基础之上,采用关键词匹配策略。
6.生成式对话无需数据库,可以通过问题直接生成回复。在生成式对话系统中,用到的主要是编码-解码模型,其中最常见的有卷积神经网络(cnn)和循环神经网络(rnn)等。
7.传统的问答系统大都是基于规则的知识图谱方式实现,这种方式需要对大量的语料进行分类整理,前期工作很耗时,需要花费大量的人力和时间,难以实现问答库的快速更新。检索式问答系统在一段时间内取得了很好的效果,但仍未解决用户问题多样性以及自然语言复杂性的问题,在数据的质量方面,采用的都是从网页或文档中抽取的非结构化数据,质量参差不齐,导致数据处理效果不尽人意。抽取式问答系统能通过词汇与语句间的相似度计算进行简单的推理工作;使用模式匹配方法的问答系统能够根据推理模式来进行简单与复杂推理,然而推理模式的编写需要大量的人工工作。生成式问答对系统要求更高。“抽取 合成”的生成式问答系统模块之间独立性强,信息共享性差,产生错误难以解决。基于seq2seq模型的问答系统无法准确生成命名实体,容易出现答非所问的情况。
8.word2vec是一种编码模型,将一个个的词给编码成向量,但是被编码而成的向量并能够体现这些单词之间的关系。采用的简单查表获取唯一表示的词向量这种静态的方式虽然通用性强,但是无法针对特定任务做动态优化。
9.elmo是基于特征的语言模型,可以结合上下文语境对词进行建模,与word2vec不同, elmo中词向量表示的是内部网络状态函数,对于相同的词它所展现出来的词向量是动
态变化的。但elmo模型的训练速度较慢,对每个token编码都要通过language model计算得出。
10.卷积神经网络cnn可以对数据进行基于区域的小规模运算。卷积层可以自动提取特征向量,通过共享卷积层处理高维数据较容易,但采用梯度下降算法很容易使训练结果收敛于局部最小值而非全局最小值。
11.循环神经网络rnn以序列数据为输入,通过网络内部结构设计有效捕捉序列之间的关系特征,也以序列形式进行输出,应用于输入数据具有依赖性且是序列模式时的场景。与cnn 结构不同的是,rnn的隐藏层是循环的。这表明隐藏层的值不仅取决于当前的输入值,还取决于前一时刻隐藏层的值。具体的表现形式是,rnn“记住”前面的信息并将其应用于计算当前输出,这使得隐藏层之间的节点是有连接的。由于内部结构简单,对计算资源要求低,在短序列任务上性能、效果都表现优异。但传统rnn模型在解决长序列之间的关联时,表现很差,原因是在进行反向传播的时候,过长的序列导致梯度的计算异常,发生梯度消失或爆炸。
12.长短时记忆网络lstm是由当前时刻的输入、上一时刻的输出、上一时刻的记忆共同决策的,并且产生一个新的输出,同时又更新了内部的记忆。不同于rnn,它通过输入门来决定何时让输入进入细胞单元、通过遗忘门来决定何时应该记住前一时刻的记忆、通过输出门来决定何时让记忆流入到下一时刻;双向长短时记忆网络bilstm是由前向lstm与后向 lstm组合而成。bilstm的基本思想是提出的每一个训练序列向前和向后都是两个长短时记忆(lstm)网络,而且这两个都连接着一个输出层。这个结构能够提供给输出层输入序列中每一个点以完整的过去和未来的上下文信息。rnn的梯度问题在lstm及其变种里面得到了一定程度的解决,但还是不够。它可以处理100个量级的序列,而对于1000个量级,或者更长的序列则依然很麻烦;lstm计算费时。每一个lstm的细胞单元里面都意味着有4 个全连接层,如果lstm的时间跨度很大,并且网络又很深,这个计算量会很大,很耗时。此外,bilstm在并行处理上也存在缺陷。
13.transformer采用自注意力机制,注意层可以访问所有先前的状态并根据学习的相关性度量对其进行差分加权,从而提供有关遥远标记的相关信息。与rnn不同的是,transformer一次处理整个输入,这允许比rnn实现更多的并行化,因此减少了训练时间。相较于lstm, transformer不存在长距离带来的信息损失。但因其未结合rnn和cnn,transformer丧失了捕捉局部特征的能力,也并不具备cnn那样的平移不变性,因此在数据不足时泛化能力较差。
14.bert模型(bidirectional encoder representations from transformers)为当今nlp领域最先进的预训练的语言表征模型,它通过引入下一句子预测和预测屏蔽子词(先将句子中的部分子词屏蔽,再令模型去预测被屏蔽的子词)组合训练,获得了比词语更高级别的语句级别特征;通过多层自注意力机制使用,使其能进行token级预训练;使用先预训练,再微调的训练方式,使其适用于多个应用场景。以上突破性工作使得bert模型刷新了11项nlp任务处理的纪录。
15.暴力搜索算法指遍历一遍数据候选集里面的所有元素;近似最近邻搜索方法(ann)加快了搜索速度,在精确率和召回率上面就会做出一定的牺牲,但是其搜索速度相对暴力搜索有很大地提高,近似最近邻搜索方法一类是基于提升检索结构性能的方法,主要
方法大多是树形方法,另一类主要基于对数据本身的处理,包括哈希算法、量化方法等。暴力搜索算法当数据候选集特别大的时候就会耗费过多的时间。树形方法针对海量向量的计算成指数倍,计算复杂程度高,哈希方法基于二进制编码的近似最近邻查找虽然大大提高了检索效率,但其检索的准确度始终不高,但量化方法被认为可以解决上述问题。ivf是一种基于量化的向量索引类型,它通过聚类方法把空间里的点划分成多个单元,查询时先把目标向量与所有单元的中心做距离比较,选出几个最近单元。然后比较这些被选中单元里的所有向量,得到最终的结果。ivf_sq8是基于ivf的一种标量量化压缩算法,解决了全局暴力搜索中计算量大、耗时长的问题,减小了向量索引文件存储空间,在仅含cpu环境中也可运行。


技术实现要素:

16.基于上述问题,本发明提供一种基于bert模型的新冠知识智能问答系统及方法,通过 bert的sentencetransformer模型与milvus向量搜向量索引擎的结合提高训练速度和匹配度,运用基于ivf_sq8量化的向量索引算法提升了搜索速度和准确度。本发明提供问题和答案的对应关系,通过对问题库提取语义特征向量存入milvus中,然后对用户的问题也进行语义特征向量提取,通过对向量特征的匹配实现自动回复,在问答语言处理方面简化了对语料的预处理,解决传统问答系统耗费人力、时间成本高、问答匹配度差的难题。
17.一种基于bert模型的新冠知识智能问答系统,包括:数据采集模块、数据存储模块、自然语言处理模块、服务器模块、网页前端模块;
18.所述数据采集模块用于采集有关新冠疫情日常防护、治疗、新冠疫苗及新冠病理特征的问题和答案;
19.所述数据存储模块用于将采集到的问题和答案一一对应存储在数据库中;
20.所述自然语言处理模块用于将非结构化数据转换为特征向量,并将特征向量与数据库中问题进行相似度检索处理;
21.所述服务器模块用于前后端交互,根据用户输入的问题返回数据库数据给前端;
22.所述网页前端模块用于生成新冠疫情防控的聊天界面,实现以对话形式的问答功能。
23.所述自然语言处理模块包括:特征向量生成模块、向量索引建立模块、相似度匹配模块;
24.所述特征向量生成模块用于通过bert模型将非结构化数据提取为特征向量;
25.所述向量索引建立模块用于通过向量搜索引擎milvus对特征向量进行计算并建立向量索引;
26.所述相似度匹配模块用于实现特征向量的分析与检索。
27.一种基于bert模型的新冠知识智能问答方法,包括:
28.步骤1:采集有关新冠疫情日常防护、治疗、新冠疫苗及新冠病理特征的问题和答案;具体表述为:
29.步骤1.1:针对全球新冠肺炎共享实战平台,用urllib模拟浏览器向服务器发送请求,从而获取相应网页源码;
30.步骤1.2:在pycharm中输入xpath语句解析网页源码,解析服务器响应的文本,从
而获取有关新冠疫情日常防护、治疗、新冠疫苗及新冠病理特征的问题和答案数据;
31.步骤2:将采集到的问题和答案一一对应存储在数据库中;具体表述为:
32.步骤2.1:首先初始化属性,指定本地ip、mysql启动端口、用户名、密码、数据库名称;
33.步骤2.2:链接相应的数据库对应的表格,输入本地ip、mysql启动端口、用户名、密码、数据库名称,规定编码格式;
34.步骤2.3:连接数据库,在数据库中生成问题和答案后,调用数据插入方法,创建实例化对象,最后设定循环次数,在mysql数据库的表格中插入一定数量的数据;
35.步骤3:将非结构化数据转换为特征向量,并将特征向量与数据库中问题进行相似度检索处理;具体表述为:
36.步骤3.1:调用bert模型将非结构化数据转换为特征向量;具体表述为:
37.步骤3.1.1:调用包模型sentencetransformer,并用数据预处理工具 metricsklearn.preprocessing调用包normalize进行规范化处理,调用模型路径model_path,工具包gdown在网址上下载压缩的sentencetransformer的bert模型;
38.步骤3.1.2:提取数据库中问题列的已有数据;
39.步骤3.1.3:对从爬虫到数据库中得到的问题列的语句进行编码操作;具体表述为:
40.a1)如果model_path路径不存在,则用os.makedirs方法创建model_path目录,如果压缩文件sentencetransformer不存在,则在开源网站下载该文件,然后解压全部的压缩文件;
41.a2)对问句增加分词并增加特殊标记,在分词器tokenizer中添加特殊占位符;
42.a3)将标记列表传入网络层bert,bert为每一个token输出一个embedding,将输出进入一个池化层pooling,然后采用均值池化,将所有token embedding的均值作为输出,得到跟输入句子长度无关的一个定长的句子嵌入sentence embedding,得到被标记的问句特征向量;
43.步骤3.2:通过milvus对获取的特征向量进行计算并建立向量索引;具体表述为:
44.步骤3.2.1:将特征向量和问题数据合并到一个列表中,分别将特征向量导入数据预处理函数,问题数据导入mysql;
45.步骤3.2.2:将特征向量转为二维向量;
46.步骤3.2.3:对特征向量存储并建立向量索引;具体表述为:
47.b1)导入相应的包connections(连接)、fieldschema(字段模式)、collectionschema(集合模式)、datatype(数据类型)、collection(集合)、utility(实用程序)、milvus主机、端口、vector_dimension(向量维度)、metric_type(度量标准类型)、logger(记录器);
48.b2)初始化一个milvus类,创建集合,设置相关参数,设定如果milvus表包含该集合则返回,如果不包含则创建集合,然后批量导入特征向量到集合,导入向量的维度与建表时的维度一致;
49.b3)在集合上创建ivf_sq8向量索引,将二维向量进行标量量化并设置其参数,包括设置16384个聚类,规定使用内积作为度量值,同时设置删除milvus表的函数,方便对不
需要的数据进行删除;
50.步骤3.3:利用ivf_sq8算法对特征向量进行分析与检索;具体表述为:
51.步骤3.3.1:针对用户输入的问句,经过bert和池化层将其转成定长特征向量,将特征向量转换为二维向量;
52.步骤3.3.2:在milvus的集合中搜索相似向量索引;具体表述为:
53.c1)将二维向量进行标量量化;
54.c2)用k-means算法将n个y向量分为16384个聚类,分别获得聚类中心c1,c2,
……
,c
16384
, 将输入特征向量x与n个y向量的距离记为x与y向量所在的聚类中心的距离;
55.c3)比对输入特征向量x与16384个聚类中心的距离,找到和输入特征向量距离最小的 16个聚类,然后对这16个聚类中全部的向量通过内积执行距离比对;
56.c4)在milvus中检索查询记录得到与该向量组相似度最高的top_k个向量并打印其在集合中对应的序号,返回序号数值;
57.c5)连接mysql数据库,建游标,若表格不存在则创建mysql表,将milvus序号和镜像文件路径批量插入mysql,根据milvus序号获取镜像文件路径,用sql语句在对应的表格中选择问句文本内容;
58.c6)将对应的一系列问题返回前端,点击相似问题会返回对应答案;
59.步骤4:前后端交互,根据用户输入的问题返回数据库数据给前端;具体表述为:通过服务器主函数,调用编码函数通过sentencetransformer模型将用户问题编码为特征向量,然后调用milvus函数和mysql函数将特征向量与数据库中问题进行相似度检索形成向量索引返回前端;
60.步骤5:生成新冠疫情防控的聊天界面,实现以对话形式的问答功能。
61.本发明的有益效果是:
62.本发明提出了一种基于bert模型的新冠知识智能问答系统及方法,通过bert模型将非结构化数据提取为特征向量,然后通过milvus对这些特征向量进行计算并建立向量索引,最后利用ivf_sq8算法实现对非结构化数据的检索。与现有技术相比,在这种架构下,一方面用bert模型提高了特征词向量转化的准确度,去除了繁杂的预处理工作,解决了传统nlp 模型训练速度较慢、计算量大、人工操作复杂、词向量转换效果较差的问题,另一方面用高性能milvus向量搜向量索引擎实现了高维向量的存储与检索工作,应用ivf_sq8基于量化的向量索引算法提升了匹配精准度,并减小了内存,降低了人力、时间、资金等成本。
附图说明
63.图1为本发明中基于bert模型的新冠知识智能问答系统框图;
64.图2为本发明中问答聊天界面展示图。
65.图3为本发明中问句与特征向量的转换关系原理图。
具体实施方式
66.下面结合附图和具体实施实例对发明做进一步说明。全球新冠肺炎疫情已肆虐三年,有关新冠疫情防护、治疗和新冠疫苗、奥密克戎变异毒株等问题仍旧不断涌现。本发明结合bert模型与milvus的诸多优点提出一种基于bert模型的新冠知识智能问答系统及方
法,该发明具有即时、权威、便利、强针对性的特点,以便给医护工作者提供及时的防护救助指导、给病患提供及时的疑难解答、给用户提供全面的防疫知识科普。
67.系统配置:
68.操作系统:windows 10
69.处理器:amd ryzen 7 5800h with radeon graphics,3201mhz,8个内核,16个逻辑处理器
70.版本:python3.8以上,mysql5.7以上,nodejs16以上,pytorch1.6以上
71.框架:fastapi
72.服务器:uvicorn
73.milvus主机:3.238.5.225
74.milvus端口:19530
75.vector_dimension(向量维度):768
76.index_file_size(指定数据存储时单个文件的大小):1024
77.metric_type(度量标准类型):ip(内积)
78.top_k(选出概率最大的10个向量):10
79.mysql主机:127.0.0.1
80.mysql端口:3306
81.mysql用户名:root
82.如图1所示,本发明所提出的一种基于bert模型的新冠知识智能问答系统,包括:数据采集模块、数据存储模块、自然语言处理模块、服务器模块、网页前端模块;
83.所述数据采集模块用于采集有关新冠疫情日常防护、治疗、新冠疫苗及新冠病理特征的问题和答案;
84.所述数据存储模块用于将采集到的问题和答案一一对应存储在数据库中;
85.所述自然语言处理模块用于将这些非结构化数据转换为特征向量,并将特征向量与数据库中问题进行相似度检索处理;
86.所述服务器模块用于前后端交互,根据用户输入的问题返回数据库数据给前端;
87.所述网页前端模块用于生成新冠疫情防控的聊天界面,实现以对话形式的问答功能。
88.所述自然语言处理模块包括:特征向量生成模块、向量索引建立模块、相似度匹配模块;
89.所述特征向量生成模块用于通过bert模型将非结构化数据提取为特征向量;
90.所述向量索引建立模块用于通过向量搜索引擎milvus对特征向量进行计算并建立向量索引;
91.所述相似度匹配模块用于实现特征向量的分析与检索。
92.一种基于bert模型的新冠知识智能问答方法,包括:
93.步骤1:采集有关新冠疫情日常防护、治疗、新冠疫苗及新冠病理特征的问题和答案;
94.本实施例采用python网络爬虫技术搜集国家卫健委、中国疾控中心、世卫组织、gmcc 全球新冠肺炎共享实战平台等网站获取有关新冠疫情日常防护、治疗、新冠疫苗及新
冠病理特征问题和答案。
95.get请求。对请求对象的定制,url为国家卫健委、中国疾控中心、世卫组织、gmcc全球新冠肺炎共享实战平台等网址,输入http headers,用urllib模拟浏览器向服务器发送请求,从而获取相应网页源码;
96.xpath解析。首先需要安装lxml库并导入lxml.etree,chrome浏览器中下载xpath插件并找出网页问答语句对应xpath的语句,pycharm中输入xpath语句用于解析网页源码,解析服务器响应的文本,从而获取数据。
97.步骤2:将采集到的问题和答案一一对应存储在数据库中;具体应用从爬虫到mysql数据库的方法,在数据库中将问题和答案一一对应,并能呈现出来。
98.步骤2.1:首先初始化属性,指定本地ip、mysql启动端口port:3306、用户名、密码、数据库名称;
99.步骤2.2:链接相应的数据库对应的表格,输入本地ip、mysql启动端口port:3306、用户名、密码、数据库名称、规定编码格式为utf8;
100.步骤2.3:插入数据。连接数据库,创建游标,用sql命令以字符串格式嵌入表格,执行 sql命令,然后关闭游标并提交,并关闭数据库连接,在数据库中生成问题和答案后,调用数据插入方法,创建实例化对象,最后设定循环次数,在mysql数据库的表格中插入对应数量的数据。
101.步骤3:将非结构化数据转换为特征向量,并将特征向量与数据库中问题进行相似度检索处理;包括:
102.步骤3.1:调用bert模型将非结构化数据转换为特征向量;
103.步骤3.1.1:调用模型。调用包sentencetransformer(模型),并用数据预处理工具 metricsklearn.preprocessing调用包normalize(规范化),调用model_path(模型路径),gdown (一种工具包)在网址上下载压缩的sentencetransformer的bert模型;
104.步骤3.1.2:提取数据库中问题列的已有数据;
105.步骤3.1.3:对从爬虫到数据库中得到的问题列的语句进行编码操作;具体表述为:
106.a1)如果模型文件路径不存在,则用os.makedirs方法创建model_path目录,如果压缩文件sentencetransformer不存在,则在开源网站下载该文件,然后解压全部的压缩文件。
107.a2)对问句增加分词并增加特殊标记,在分词器tokenizer中添加特殊占位符,效果如下所示:
108.sentence 1:新冠疫苗有效吗?
109.tokens 1:[

[cls]','新','冠','疫','苗’,'有','效','吗','?','[sep]’]
[0110]
a3)接着把标记列表传入网络层bert,bert为每一个token输出一个embedding,接着将输出进入一个池化层(pooling),然后采用均值池化,将所有token embedding的均值作为输出,所以得到跟输入句子长度无关的一个定长的句子嵌入sentence embedding(768维),用r[cls]表示该被标记的问句特征向量,得到sentence representation:如图3所示;
[0111]
sentence representation=r[cls]
[0112]
步骤3.2:通过milvus对获取的特征向量进行计算并建立向量索引;具体表述为:
[0113]
步骤3.2.1:将特征向量和问题数据合并到一个列表中,分别将特征向量导入数据预处理函数,问题数据导入数据库;
[0114]
步骤3.2.2:数据预处理。由于milvus支持的向量数据为浮点型(小数)的二维向量,故而用python代码将特征向量转为二维向量;
[0115]
步骤3.2.3:对特征向量存储并建立向量索引;具体表述为:
[0116]
b1)导入相应的包connections(连接),fieldschema(字段模式),collectionschema(集合模式),datatype(数据类型),collection(集合),utility(实用程序),milvus主机、端口,vector_dimension(向量维度),metric_type(度量标准类型),logger(记录器);
[0117]
b2)初始化一个milvus类,创建集合,设置相关参数,设定如果milvus表包含该集合则返回,如果不包含则创建集合,然后批量导入特征向量到集合,导入向量的维度与建表时的维度一致;
[0118]
b3)在集合上创建ivf_sq8向量索引,将二维向量进行标量量化并设置其参数,包括设置16384个聚类,规定使用内积作为度量值,同时设置删除milvus表的函数,方便对不需要的数据进行删除;
[0119]
步骤3.3:利用ivf_sq8算法对特征向量进行分析与检索;具体表述为:
[0120]
步骤3.3.1:当用户输入一个问句时,经过bert和池化层将其转成定长特征向量并通过数据预处理将其转为二维向量;
[0121]
步骤3.3.2:搜索相似的向量索引。在milvus的collection(集合)中进行搜索,打开collection,设置度量标准为内积,设置ivf-sq8参数,指定query_ranges(检索范围),设置参数 query_records(查询记录)和top_k(相似度最高的k个向量),对特征向量的检索过程如下:
[0122]
向量处理后均为二维向量,然后进行标量量化,把向量的两个维度从4个字节的浮点数转为1个字节的无符号整数向量,将整数二维向量看成2d平面上的点,用k-means算法将n 个y向量分为16384个聚类(nlist),分别获得聚类中心c1,c2,
……
,c
16384
,将x与n个y向量的距离记为x与y向量所在的聚类中心的距离,所以首先执行16384次检索,比对输入特征向量x与16384个聚类中心的距离,找到和输入特征向量距离最小的16个聚类(nprobe),然后对这16个聚类中全部的向量通过内积执行距离比对。即
[0123]
x
·
y=x1·
y1 x2·
y2[0124]
共2次乘法,1次加法,设总向量个数为n,暴力搜索(不分聚类)的总计算量为3n;ivf 方法的计算量为可见ivf方法的计算量少于暴力搜索算法计算量的千分之一。
[0125]
在milvus中检索query_records(查询记录)得到与该向量组相似度最高的top_k个向量并打印其在collection中对应的序号,返回序号数值。
[0126]
数据库匹配。首先导入相应的包mysql_db(用于建立、删除、导入和导出数据库的模块)、logger(记录器),连接已经搭建完成的mysql数据库,创建游标,若表格不存在则创建mysql表,将milvus序号和img路径批量插入mysql,根据milvus序号获取img 路径,用sql语句在对应的表格中选择问句文本内容;
[0127]
问题返回前端。将对应的一系列问题返回前端,点击相似问题会返回对应答案;
[0128]
步骤4:前后端交互,根据用户输入的问题返回数据库数据给前端;
[0129]
服务器可完整实现前后端交互,包含了将用户输入的问题传递给特征向量生成模块并计算相似度、返回数据库数据给前端。前端输入问题后可通过服务器主函数,调用encoder函数用sentencetransformer模型将用户问题编码为特征向量,然后调用milvus函数和mysql函数两个函数将特征向量与数据库中问题进行相似度检索形成向量索引返回前端。
[0130]
首先导入相应的包:os包(操作系统驱动)file(文件)、uploadfile(上传文件)、 corsmiddleware(cors中间件)、do_load(上传)、do_search(搜索)、do_get_answer(获取答案)、do_count(计数)、do_drop(删除)、logger(记录器)、sentencemodel(句子模型)。
[0131]
调用不同的包实现不同功能,包括用http请求post方法/qa/load_data用于将问答数据集导入系统;http请求get方法/qa/search用于获取系统中的类似问题;http请求get方法/qa/answer 用于获取系统中给定问题的答案;http请求post方法/qa/count用于获取系统中的问题数量; http请求post方法/qa/drop用于删除指定的集合,最后对uvicorn设置端口运行服务器指令ip 地址为127.0.0.1,端口为8080。
[0132]
设计一个函数测试fastapi的接口,声明将实例化对象传入用于测试下载、搜索、回答、计数、删除功能。
[0133]
步骤5:生成新冠疫情防控的聊天界面,实现以对话形式的问答功能。
[0134]
通过对milvus聊天界面进行微调创建新冠疫情防控的聊天界面,实现以对话形式的问答功能。此处采用人性化的对话设计,类似微信的问答界面,满足用户最好的问答体验,增加上传和删除功能,能上传和删除最新的问答数据集,经过bert词向量形成及milvus向量搜索匹配功能,可以在几秒内将数据库更新,并可在前端查询到更新后的问答,该模块适应疫情数据快速更新形势,方便用户为数据库新增最近的疫情信息。
[0135]
本发明采用bert提高特征向量转化的准确度。通过引入下一句子预测和预测屏蔽子词(先将句子中的部分子词屏蔽,再令模型去预测被屏蔽的子词)组合训练,获得了比词语更高级别的语句级别特征;通过多层自注意力机制使用,使其能进行token级预训练;使用先预训练,再微调的训练方式,使其适用于多个应用场景。sentencetransformers是一个可以用于句子、文本和图像嵌入的库,该框架基于pytorch和transformers,并提供了大量针对各种任务的预训练模型,可以很容易根据自己的模型进行微调。正因为这些优势的存在,所以此项目中词向量的转换使用的就是bert sentencetransformers模型。
[0136]
再者,bert减小繁杂的工作量。在bert模型里充分的表现和描述了各种字符级、词语数量级、句子数量级乃至于句间之间相互关系的基本特征,因此在不同的nlp任务中,只需要给每个任务设置一个很轻量级的输入层即可,减小了工作量。
[0137]
本发明使用milvus向量存储引擎。该系统没有使用最常见的mysql数据库存储特征向量,因为传统关系型数据库针对字母数字类数据而设计,把不同数据整理归纳为相互关联的集合,而milvus基于faiss、annoy、hnsw,使该系统具有针对特征向量的管理和向量索引方式,可以支持处理海量的高维特征向量。
[0138]
本发明使用ivf_sq8基于量化的向量索引。ivf_sq8是基于ivf_flat的一种向量数据压缩算法,结合了inverted file system(倒排索引算法)和scalar quantizer(标量量
化算法) 的优势。该发明通过使用ivf_sq8,用ivf解决了全局暴力搜索中计算量大、耗时长的问题,在ivf的基础上对放入单元中的每一条向量把原来向量的由4个字节的浮点数改变为1个字节的无符号整数来进行标量的量化,磁盘和内存占用比原来降至1/4,减小了向量索引文件存储空间,在仅含cpu环境中也可运行。优势:高速查询,速度比ivf_flat快,磁盘、内存占用为原始数据30%。
[0139]
本发明使用内积计算提高向量的相似匹配率。因为本发明需要大量数据的查询检索,经过理论分析和实际检验,使用内积(ip)作为项目的向量间距离计算方式,以提高向量相似匹配率。
[0140]
本发明使用mysql存储问答数据集。mysql运行速度快并且功能体积小,也因此拥有更低的费用和成本,并且同时支持多种操作系统。
[0141]
本发明提出的技术方案中通过bert模型可以将这些非结构化数据提取为特征向量,然后通过milvus对这些特征向量进行计算并建立向量索引,最后利用ivf_sq8算法实现对非结构化数据的检索。与现有技术相比,在这种架构下,我们一方面用bert模型提高了特征词向量转化的准确度,去除了繁杂的预处理工作,解决了传统nlp模型训练速度较慢、计算量大、人工操作复杂、词向量转换效果较差的问题,另一方面用高性能milvus向量搜索引擎实现了高维向量的存储与检索工作,并基于ivf_sq8基于量化的向量索引算法提升了匹配精准度,并减小了内存,降低了人力、时间、资金等成本。
[0142]
如图2为问答聊天界面展示(具体操作:点击下方输入框输入您的问题,系统会返回您的问题并建立问句索引,点击索引可看到答案)。随着疫情形势的变化,我们后端数据库的问答内容也在不断更新推进。
再多了解一些

本文用于创业者技术爱好者查询,仅供学习研究,如用于商业用途,请联系技术所有人。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献