找外包公司做网站,网站打开为建设中,企业精髓八个字,沈阳市网站设计公司大全目录 1 项目背景
2 关键技术
2.1 Transeformer模型
2.2 Milvus向量数据库 3 系统代码实现
3.1 运行环境构建
3.2 数据集介绍
3.3 预训练模型下载
3.4 代码实现
3.4.1 创建向量表和索引 3.4.2 构建向量编码模型
3.4.3 数据向量化与加载
3.4.4 构建检索web
3.5 运行结…目录 1 项目背景
2 关键技术
2.1 Transeformer模型
2.2 Milvus向量数据库 3 系统代码实现
3.1 运行环境构建
3.2 数据集介绍
3.3 预训练模型下载
3.4 代码实现
3.4.1 创建向量表和索引 3.4.2 构建向量编码模型
3.4.3 数据向量化与加载
3.4.4 构建检索web
3.5 运行结果
3.6 完整代码
4 总结 1 项目背景
人工智能问答系统是信息检索系统的一种高级形式用准确简洁的自然语言回答用户所提出的问题是NLP领域一个备受关注并具有广泛发展前景的方向。人工智能问答系统常用于智能客服、知识检索、技术支持等领域。智能问答系统涉及到的技术点如下
如何通过模型对文本数据进行向量化如何对向量化后的文本进行存储如何快速对海量的向量数据进行检索
本项目基于谷歌的Transeformer模型结合Milvus向量数据库在“百科健康”数据集上实现了智能问答系统读者可以将数据集扩展到其它领域构建满足自身业务的智能问答系统。
2 关键技术
2.1 Transeformer模型
Transformer模型是Google2017年提出的一种用于机器翻译的模型完全摒弃了传统循环神经网络的结构采用了完全基于注意力机制的结构取得了相当显著的效果并且从此使得完全注意力机制这种模型设计模型从NLP领域出圈到计算机视觉领域比如VIT就是基于Transformer的一种视觉模型终结了CNN多年在图像领域的统治地位。
论文地址https://arxiv.org/pdf/1706.03762.pdf
网络结构 encoder包含两层一个self-attention层和一个前馈神经网络self-attention能帮助当前节点不仅仅只关注当前的词从而能获取到上下文的语义。decoder包含encoder提到的两层网络但是在这两层中间还有一层attention层帮助当前节点获取到当前需要关注的重点内容。 Transeformer模型的特点 自注意力有时被称为内部注意力是一种注意力机制将单个序列的不同位置联系起来以计算序列的表示。自注意力已经成功地应用于各种任务包括阅读理解、抽象总结、语篇蕴涵与学习任务无关的句子表征。 端到端记忆网络基于重复注意力机制而不是顺序一致的重复并且在简单的语言问答和语言建模任务中表现良好。 Transformer是第一个完全依靠自注意力来计算其输入和输出表示的转导模型而不使用序列对齐RNN或卷积。 Transformer库
Transformers 库是一个开源库其提供的所有预训练模型都是基于transformer模型结构的。我们可以使用 Transformers 库提供的 API 轻松下载和训练最先进的预训练模型。使用预训练模型可以降低计算成本以及节省从头开始训练模型的时间。这些模型可用于不同模态的任务例如
文本文本分类、信息抽取、问答系统、文本摘要、机器翻译和文本生成。图像图像分类、目标检测和图像分割。音频语音识别和音频分类。多模态表格问答系统、OCR、扫描文档信息抽取、视频分类和视觉问答。
代码地址https://github.com/huggingface/transformers
官方文档https://huggingface.co/docs/transformers/index
预训练模型https://huggingface.co/models
2.2 Milvus向量数据库
Milvus 是一款云原生向量数据库它具备高可用、高性能、易拓展的特点用于海量向量数据的实时召回。
Milvus 基于FAISS、Annoy、HNSW 等向量搜索库构建核心是解决稠密向量相似度检索的问题。在向量检索库的基础上Milvus 支持数据分区分片、数据持久化、增量数据摄取、标量向量混合查询、time travel 等功能同时大幅优化了向量检索的性能可满足任何向量检索场景的应用需求。通常建议用户使用 Kubernetes 部署 Milvus以获得最佳可用性和弹性。
Milvus 采用共享存储架构存储计算完全分离计算节点支持横向扩展。从架构上来看Milvus 遵循数据流和控制流分离整体分为了四个层次分别为接入层access layer、协调服务coordinator service、执行节点worker node和存储层storage。各个层次相互独立独立扩展和容灾。 Milvus 向量数据库能够帮助用户轻松应对海量非结构化数据图片/视频/语音/文本检索。单节点 Milvus 可以在秒内完成十亿级的向量搜索分布式架构亦能满足用户的水平扩展需求。
milvus特点总结如下
高性能性能高超可对海量数据集进行向量相似度检索。高可用、高可靠Milvus 支持在云上扩展其容灾能力能够保证服务高可用。混合查询Milvus 支持在向量相似度检索过程中进行标量字段过滤实现混合查询。开发者友好支持多语言、多工具的 Milvus 生态系统。
Milvus详细介绍Miluvs详解 3 系统代码实现
3.1 运行环境构建
conda环境准备详见annoconda
git clone https://gitcode.net/ai-medical/ai_robot.git
cd ai_robotpip install -r requirements.txt
3.2 数据集介绍
本项目使用从百度百科中抽取的30条医疗健康数据集进行演示文件名称为baike_qa.csv数据内容如下
serial|question|answer
1|牙龈包住牙齿怎么办|病情分析\n你好,牙龈出血以局部原因最为常见,但也有是其他疾病在牙龈组织上出现的一种症状.\n指导意见\n局部原因为牙龈炎和牙周炎,主要是口腔卫生不佳,牙垢,牙结石,不良修复体,补牙材料,食物嵌塞等局部刺激因素引起牙龈充血肿胀,在刷牙,咬硬物,吃水果时发生牙龈出血,有时可有少许的自发性渗血.将刺激因素去除后,出血即会好转.牙龈外伤主要是指剔牙时造成的牙龈损伤,致使牙龈出血.这样情况应采取正确的剔牙方法,保护牙龈.全身因素有血液病如血友病,白血病,再生障碍性贫血等,有相当一部分患者是最初以牙龈出血而到口腔科就诊的.其他一些慢性疾病亦可导致牙龈出血,如糖尿病,维生素C缺乏及一些消耗性疾病.肝脏疾病可因影响凝血因素的合成,也会有牙龈出血.发现牙龈出血,不可过度紧张,应及时去医院检查,如为局部因素引起,经口腔科治疗即可.如出血量多不易止血时,应到内科诊治,要及时做血液系统检查。
2|你好我家宝宝7多月这几天拉肚子去医院检查说是细菌感染肠炎吃什么药?|给宝宝吃点妈咪爱。
3|工作太累会造成便秘吗?整天干重体力劳动,大便老是不通,排不净|工作不会直接影响大便但是由于工作是定时的当在工作的时候往往会忽略便意而便意是很短暂的如果没有及时去解手就不再有大便的感觉了。时间久了肠子的运动功能会削弱。\r\n\r\n另外身体虚弱的人包括亚健康的人内脏功能较差肠蠕动也慢常常伴有体虚型便秘这时候如果用泻药犹如雪上加霜从中医角度来说正确的方法是以补促泻也就是通过滋补让身体强壮提高肠子运动力达到治本的目的。\r\n\r\n干重体力活的人要注意饭后休息至少半小时在这段时间培养便意特别是早饭后不论有没有便意都要养成上厕所的习惯坚持一段时间会让肠子产生反射便秘问题就可以从根本上解决了。\r\n\r\n良好的排泄功能于健康很重要所以为了健康快快调整生活习惯吧祝你健康。
4|怀孕什么时候能感觉到初期症状都有什么怀孕什么时候能感觉到初期症状都有什么|1、停经月经过期10日以上怀疑妊娠.2、早孕反应60以上的妇女在妊娠6周以后会出现畏寒、头晕、乏力、流涎、嗜睡、食欲不振、喜食酸物或厌食油腻、恶心和晨起呕吐等现象称早孕反应持续2个月后自行消失\n 3、尿频。\n 4、乳房变化查体时可见乳房逐渐变大有胀痛感。\n 5、妊娠早期乳房增大明显充血水肿随着乳腺管的增生皮下浅静脉清晰可见。6、受精卵着床部位变软妊娠67周后双合诊检查子宫峡部极软子宫体和宫颈似不相连称黑加征是早期妊娠的特征性变化。\n 7、B超早期检查最早以妊娠囊为判断妊娠标准。\n 8、超生多普勒检查\n 9、宫颈粘液检查未见羊齿植物叶状结晶妊娠的可能性大。\n 10、妊娠试验妊娠79日后可以查妇女血βHCG判断妊娠。\n 11、基础体温BBT的测定如果高温相持续18日不降妊娠可能性大如果持续3周不降妊娠的可能性更大。
5|拉肚子以后,身体虚弱,应该吃些什么东西调养,有什么应该注意的?|一、饮食治疗目的\r预防并纠正水及电解质平衡失调供给充足营养改善营养状况。避免机械性及性刺激使肠道得到适当休息有利于病情早日恢复。\r\r二、饮食治疗原则\r(一)怠性腹泻饮食治疗\r1急性期禁食急性水泻期需暂时禁食使肠道完全休息。必要时由静脉输液以防失水过多而脱水。\r2清淡流质饮食不需禁食者发病初宜给清淡流质饮食。如蛋白水、果汁、米汤、薄面汤等以咸为主。早期禁牛奶、蔗糖等易产气的流质饮食。有些患者对牛奶不适应服牛奶后常加重腹泻。\r3根据病情调整饮食排便次数减少症状缓解后改为低脂流质饮食或低脂少渣、细软易消化的半流质饮食如大米粥、藕粉、烂面条、面片等。\r4饮食选择腹泻基本停止后可供给低脂少渣半流质饮食或软食。少量多餐以利于消化如面条、粥、馒头、烂米饭、瘦肉泥等。仍应适当限制含粗纤维多的蔬菜水果等以后逐渐过渡到普食。
6|生活饮食习惯对人体健康的影响饮食的健康会对人体产生怎样的影响|现在的人工作压力都很大不按时吃饭的大有人在暴饮暴食的也很多。这就是为什么现在亚健康的人群巨大的原因。良好的饮食习惯对你以后上了岁数会有很大帮助会长寿的。
7|维生素C什么时候吃好饭前还是饭后有没有副作用|维生素C是水溶性维生素什么时候服用都可以一般在空腹时服用效果最好。 \r\n注意要点水溶性维生素不能在体内保存吃多了会排出。
8|乙肝患者的饮食的宜忌|不喝酒少吃脂肪高的食物。
9|15个月的宝宝消化不好呕吐拉肚子能吃点肠炎宁吗|病情分析 考虑是消化不良引起的肠胃炎急性肠胃炎是胃肠粘膜的急性炎症临床表现主要为恶心、呕吐、腹痛、腹泻、发热等。本病常见于夏秋季其发生多由于饮食不当暴饮暴食或食入生冷腐馊、秽浊不洁的食品。中医根据病因和体质的差别将胃肠炎分为湿热、寒湿和积滞等不同类型。\n意见建议孩子发烧可用恬倩退烧呕吐拉肚子可用思密达和肠炎宁一起服用如效果不佳请及时就诊。
10|验血看结果两次都是血小板平均体积mpv小于正常值请问有什么问题?|血小板平均体积mpv小于正常值,如果血小板计数不低那没什么临床意义因为现在都是仪器检测的所测值只是供临床参考还要结合其他情况一起分析如其他一切正常的话根本不用管它。
11|椎管狭窄对身体有什么影响|这要看个人的具体的情况\r\n有些人也没什么事像 我也是比正常的狭窄了一点可以没有什么问题。当然女性的话对生殖是有点影响。
12|小孩子抽搐是什么情况引起的|家族是否有癫痫病史如果有应该给孩子做个脑电图检验是否有放电异常的现象如果有异常就给孩子按照癫痫来治疗。如果没有放电异常不要轻易给孩子下病因定论使用抗癫药物时间特长对孩子影响很大。家长要慎重处理。
13|秋天爱出汗我一到秋天就特别爱出汗坐在这里什么也不干也会无缘无故出汗|1.有的人特别爱出汗无论是夏天还是冬天吃顿饭、做点事情常常是满头大汗稍一紧张就汗流浃背这种人在医学上称为多汗症。多汗症可由发热性疾病、代谢性疾病以及精神因素等引起。夏天气候炎热人处于高温之下多汗是一种正常现象如果在气温低的情况下也是这样就应注意一下了。 \r\r引起多汗症的疾病主要有以下几种 \r 一是低血糖症。引起低血糖症的原因很多发作时以交感神经过度兴奋症状为主要表现因血糖突然下降刺激交感神经兴奋释放出大量肾上腺素可导致病人面色苍白、出冷汗、手足震颤等。 \r 二是甲状腺机能亢进简称为甲亢。怕热多汗是这一疾病的特征之一而且还表现为精神紧张、性格改变、烦躁不安、注意力不能集中、难以入睡等症状。另外患了甲亢食欲增大吃得多人反而消瘦。甲亢使胃肠功能增强多数患者大便次数增多同样有心慌、工作效率下降等症状。
14|如何恢复视力我的眼睛还算比较好但是最近有所下降有什么有效方法|放心吧暂时的近视是可以恢复的。\r\n\r\n关键是1保持良好的用眼习惯。每次看书40~50分钟应该让眼睛尽量看看远处的绿色植物以达到放松眼睛的目的。\r\n\r\n 2看书的光线一定要够300勒克斯两支40W的日光灯一支处于桌子正前方上约1.5m另一支位于侧面并且是均匀的光线禁止用台灯。\r\n 台灯是导致眼睛近视的根源----使眼睛处于“明”“暗”强烈对比的光线环境中极易造成眼睛疲劳引起近视\r\n\r\n许多家庭的灯光都不适合看书学习光线太暗-----导致近视。\r\n\r\n祝你顺利}
15|去医院检查腰疼医生说骨头都没问题有点肾气不足肾气不足怎么办?|肾气不足我建议是吃黑豆。还有同时吃黑五类也是对肾气和肾阴虚都是很好的黑五类有黑豆黑芝麻黑枣黑米核桃。都是非药用补肾的食物慢慢的吃这些食物肾精显头发头发会变得越来越黑手指甲上的白色月牙会越来越多抵抗力会越来越强。
16|糖尿病高血压病人能否服用口腔溃疡意可贴|糖尿病人应慎用激素类药物。\r\n虽然糖尿病由于疾病本身的原因引起代谢紊乱免疫力下降消化功能紊乱及营养缺乏容易发生口腔溃疡。但糖尿病人自身免疫力下降容易诱发感染而且有时感染是致命的。控制血糖和预防感染是糖尿病人尤为应重视的问题。\r\n意可贴的成分为醋酸地塞米松可局部抑制口腔溃疡炎症减轻疼痛。但其副作用是诱发口腔内细菌及念珠菌感染和其他激素类的副作用。所以糖尿病人应慎用意可贴。可选用比较安全的不含激素的治疗口腔溃疡药物如氨来?闩悼谇惶取?\n同理由于激素的副作用可引起水钠储留和肾上腺的代谢诱发血压增高所以高血压病人也应慎用意可贴、氯已定地塞米松等激素类药物。
17|左肾多个结石,右肾囊怎样治疗是最好的办法,病情严重吗?|你好,你的情况治疗上要分两方面,分别为多发结石和囊肿两部分, \r\n 1,针对多发结石,囊肿若在0.5厘米之内,常规服用排石汤即可;结石体积在0.5-0.8之间,建议在碎石后在给与溶石汤治疗;如若结石0.8厘米建议手术处理. \r\n 具体治疗除了要依据结石的大小、数量、位置还要依据结石梗阻是否引发了积水等 \r\n 2囊肿的治疗囊肿体积在4厘米之内如无明显症状可暂不处理体积在4厘米可选择穿刺抽液或微创手术处理若为多发就不适合外科治疗因为大的囊肿去除后小囊肿会失去周围的压力而迅速长大只可应用中药活性物质经皮肤渗透直接作用于肾脏扩张肾脏血管增加肾脏的血流灌注改善肾脏的微循环加速囊液的自行吸收。
18|为什么冬天人的脸上会出现脱皮的现象|冬天的冷空气把皮肤的水分和油脂带走了皮肤没有了保护膜就会缺水处于不良状态所以会有一切表皮细胞死亡。
19|右腿酸我今年26岁最近一段时间总是感觉右腿有酸酸的感觉。我平时很少出门总是开车。|哪个部位酸 大腿、小腿、还是膝盖 另外已经持续多长时间了
20|亚健康吃什么好呢如题有什么好的保健品可以治疗啊。感觉许多保健品|我不知道什么保健品但是我认为如果能有规律地吃健康食物如五谷杂粮水果蔬菜豆类核桃芝麻等等。你的身体就会慢慢变好的。我认为什么药物都是有副作用的食物是最好的药物。供你参考。祝你越来越健康。
21|低血糖该如何治疗我经常会感到很困尤其是夏天热的时候就会浑身软|低营养与饮食疗法\r低血糖是糖尿病的反面身体分泌的胰岛素超过所需造成胰岛素过度地把葡萄糖载离血液无法留下足够的葡萄糖提供活力所需。低血糖不会致命但会让你很难受。没有糖尿病的人可能受低血糖所苦糖尿病患者如果注射胰岛素的时间和身体需求不一致同样也会出现低血糖症状。\r 遗传可能是造成因素然最常见的还是由饮食不当所造成的。这里指的即是机能性低血糖症(functional hypoglycemia简称fh)。fh的症状直接与最后一餐所吃的种类及用餐时间有关。低血糖症可能出现下列任何一项或全部的症状疲劳、头晕、头痛及不适(当错过一餐时)、忧郁、焦虑、渴望甜食、头脑错乱、盗汗、腿软无力、足部肿大、胸部紧闷、经常饥饿、身体各部疼痛(尤其是眼睛)、习惯性紧张、精神不定、失眠。
22|为什么肚子老是饭后就痛呢我每次吃完一样东西后肚子就会痛那是怎么回事|胃不好别跑什么的。
23|肋软骨炎的治疗求求求有什么好的治疗肋软骨炎的方法没有的|肋软骨炎是指发生在肋软骨部位的慢性非特异性炎症, 又称非化脓性肋软骨炎肋软骨增生病。思华堂认为营卫不和气血虚弱风寒湿邪乘虚入侵阻塞筋络以致胸胁气血运行不通不通则痛。思华堂骨科舒肋消肿膏为传统黑膏药使用时直接贴敷于患处体表药效透皮吸收祛风除湿温经通络使气血运行通畅从而迅速消除肋软骨炎胸胁疼痛的症状。中医认为肋软骨炎疼痛窜及胸胁 上臂乃气滞 局部隆起压痛明显痛点固定不移乃血瘀。气滞血瘀风热入侵经络毒热交炽气血壅遏不通。 不通则痛。\r\n\r\n肋软骨炎的日常护理要点\r\n1、劳动时注意提高防护意识最好不要搬抬重物做其他事时不要用力过猛提防胸肋软骨、韧带的损伤。注意劳逸结合不要过于疲惫。\r\n2、要经常开窗通气保持室内空气新鲜多参加体育活动增强自身的抵抗力。\r\n3、平时注意保暖防止受寒。\r\n4、经常感冒者必要时可以注射流感疫苗。\r\n5、衣着要松软、干燥、避免潮湿。
24|肾结石是怎么回事啊得了之后应该怎样治疗啊我朋友说自己得了肾结。|你跟朋友说结石是种常见病不用太过紧张。\r\n至于原理和症状表现楼上的贴的太全面你慢慢看但我想你不是医学专业理解上有点困难。\r\n我简单的告诉你如果你朋友的结石直径小于6cm是可以用多喝水、多蹦跳的方法自己排出来的如果稍大就去医院开点排石的中成药服药配合喝水及蹦跳。如果腰疼了就要吃消炎药了而且结石痛用消炎药一般止不了真到那一步就必须在医院打止痛针了然后体外碎石。结石多于夜间痛让你朋友多吃西瓜等利尿水果。
25|眼睛流泪我有时候晚上睡觉时右眼老流泪怎么回事|可能是眼睛太疲劳了就像我有时上网时间太长也会出现这样的症状。如果没有用眼过度可能是得了沙眼了建议你去眼科检查一下。
26|心脑血管疾病主要包括哪些|您好希望我的回答对您有所帮助心脑血管疾病是心脏血管和脑血管疾病的总称也被成为富贵病老年人是主要患者很多人患有高血压的同时还患有高血糖或高血脂心脑血管疾病的发病率很高死亡率和复发率比比较频繁所以患者要特别注意控制治疗。平时除了在饮食上需要多注意多吃些鱼肉或者是富含叶酸的食物比如菠菜、苹果、豆类、龙须菜、芦笋、洋葱、菠萝、山楂、海带、橄榄油之类的除了食物预防治疗的同时也可以针对患者所需适当的服用一些常用改善心脑血管的保健品--绿色动力1型益康胶囊达到有效的改善老年人的心脑血管系统功能提高身体活力延缓衰老。
27|如何锻炼心肺功能我有哮喘史不能做较激烈的运动。|上楼梯跳绳散步深呼吸。
28|对糖尿病人有益的食品有哪些|南瓜南瓜中含有能促使胰岛素分泌作用的物质。其实让糖尿病人每天煮吃新鲜南瓜400500克照样能取得满意的效果。\r 苦瓜苦瓜是蔬菜中唯一以“苦”而独具特色的瓜果菜。苦瓜虽苦但它味苦性凉、爽口不腻人吃了以后会感到凉爽舒适。近年来科学家们发现苦瓜中含有类似胰岛素的物质有明显的降低血糖作用是糖尿病患者理想的疗效食品。可用苦瓜250克洗净切块烧、炒后随饭吃宜经常服用。\r 黄鳝 据临床观察黄鳝对糖尿病有良好的治疗作用。糖尿病主要表现为血糖升高。而黄鳝体内含有两种物质即黄鳝素A、B。这两种物质有显著的降血糖的作用因而治疗糖尿病效果较好。糖尿病患者如常吃黄鳝既能补充蛋白质又有助于治疗一举两得。
29|幼儿咳嗽引起呕吐怎么办我的女儿28个月大。感冒咳嗽已有十天左右|建议到医院看看医生原因之一可能是孩子痰液比较多又不会吐直接经食道吞咽到胃刺激消化道引起的呕吐。其二剧烈咳嗽刺激延髓中枢引起呕吐。最好到医院看看是不是转为肺炎了及时治疗以免延误病情
30|视神经炎如何治疗方法有哪些|病因分析视神经炎或视神经乳头炎是指视神经任何部位发炎的总称,临床上根据发病的部位不同,视神经炎分为球内和球后两种,前者指视盘炎,后者系球后视神经炎。\r\n 就医指导以清肝平火清散风热祛风止痒滋阴祛火养阴生津消炎止痛祛淤明目为原则达到平稳眼压平衡房水生成和排除营养视神经、视乳头、视网膜扩大视野的功效坚持治疗是可以有比较理想的效果的。 根据您的描述尚不能确诊分型为哪一种。视神经炎的症状有视力突然下降进展有快有慢眼球转动有痛感等。\r\n 指导意见\r\n 建议进一步检查排除鞍区占位并确诊分型。目前治疗主要有激素活血化淤药物抗感染及b族维生素的对症支持治疗。预后好坏需要看疾病类型。视神经炎可以选择中医的方法来进行治疗中医对视神经炎的治疗效果还是不错的也是目前临床上应用较为广泛的治疗方法。
3.3 预训练模型下载
模型下载地址https://huggingface.co/bert-base-chinese/tree/main 下载红色标注的5个文件放入D:\models\bert-base-chinese目录下下载完成后如下所示 3.4 代码实现
3.4.1 创建向量表和索引
from pymilvus import connections, dbconn connections.connect(host192.168.1.156, port19530)
database db.create_database(ai_robot_db)db.using_database(ai_robot_db)
print(db.list_database())
创建collection
from pymilvus import CollectionSchema, FieldSchema, DataType
from pymilvus import Collection, db, connectionsconn connections.connect(host192.168.1.156, port19530)
db.using_database(ai_robot_db)m_id FieldSchema(namem_id, dtypeDataType.INT64, is_primaryTrue,)
embeding FieldSchema(nameembeding, dtypeDataType.FLOAT_VECTOR, dim768,)
question FieldSchema(namequestion, dtypeDataType.VARCHAR, max_length512,)
answer FieldSchema(nameanswer, dtypeDataType.VARCHAR, max_length2048,)
schema CollectionSchema(fields[m_id, embeding, question, answer],descriptionintelligence answer table,enable_dynamic_fieldTrue
)collection_name question_answer_vector
collection Collection(namecollection_name, schemaschema, usingdefault, shards_num2)
创建index
from pymilvus import Collection, utility, connections, dbconn connections.connect(host192.168.1.156, port19530)
db.using_database(ai_robot_db)index_params {metric_type: IP,index_type: IVF_FLAT,params: {nlist: 1024}
}collection Collection(question_answer_vector)
collection.create_index(field_nameembeding,index_paramsindex_params
)utility.index_building_progress(question_answer_vector) 3.4.2 构建向量编码模型
加载预训练模型通过transeformer模型对文本进行编码编码后输出特征维度为768
import torch
from transformers import BertTokenizer, BertModelclass TranseformerEmbeding:device cuda if torch.cuda.is_available() else cpumodel_path rD:/models/bert-base-chinesedef __init__(self):self.model BertModel.from_pretrained(self.model_path)self.tokenizer BertTokenizer.from_pretrained(self.model_path)def embeding(self, text: str):inputs self.tokenizer(text, return_tensorspt, paddingTrue)outpus self.model(input_idsinputs[input_ids], attention_maskinputs[attention_mask], return_dictTrue)# shape is [batch_size, seq_len, hidden_size]text_embeddings outpus.last_hidden_state[:, 0, :]return text_embeddings[0]transeformer_embeding TranseformerEmbeding()if __name__ __main__:result transeformer_embeding.embeding(今天心情不错)print(result)
3.4.3 数据向量化与加载
from transefromer_embeding import transeformer_embeding
from milvus_operator import text_vector, MilvusOperator
import pandas as pddef update_text_vector(data_path, operator: MilvusOperator):idxs, embedings, questions, answers [], [], [], []df pd.read_csv(data_path, delimiter|)for idx in range(len(df[serial])):idxs.append(int(df[serial][idx]))text_encode transeformer_embeding.embeding(df[question][idx])embedings.append(text_encode.detach().numpy().tolist())questions.append(df[question][idx])answers.append(df[answer][idx])data [idxs, embedings, questions, answers]operator.insert_data(data)print(ffinish update {operator.coll_name} items:{len(idxs)})if __name__ __main__:data_dir ../data/baike_qa.csvupdate_text_vector(data_dir, text_vector) 3.4.4 构建检索web
import gradio as gr
import torch
import argparse
from net_helper import net_helper
from transefromer_embeding import transeformer_embeding
from milvus_operator import text_vectordef text_search(text):if text is None:return None# clip编码imput_embeding transeformer_embeding.embeding(text)imput_embeding imput_embeding.detach().cpu().numpy()results text_vector.search_data(imput_embeding)answers []for result in results:answers.append(result[question]\r\n\r\nresult[answer])return answersif __name__ __main__:parser argparse.ArgumentParser()parser.add_argument(--share, actionstore_true,defaultFalse, helpshare gradio app)args parser.parse_args()device torch.device(cuda if torch.cuda.is_available() else cpu)css h1 { text-align: center } .about { text-align: justify; padding-left: 10%; padding-right: 10%; } \.gradio-container {background-color: #445566}app gr.Blocks(themeMonochrome, titlepatent, csscss)with app:with gr.Tabs():with gr.TabItem(人工智能问答系统):with gr.Row():with gr.Column():text gr.TextArea(labelText, placeholderdescription, value,)btn gr.Button(labelsearch)with gr.Column():with gr.Row():output_texts [gr.outputs.Textbox() for _ in range(3)]btn.click(text_search, inputstext, outputsoutput_texts, show_progressTrue)ip_addr net_helper.get_host_ip()app.queue(concurrency_count3).launch(show_apiFalse, shareTrue, server_nameip_addr, server_port9099)3.5 运行结果 3.6 完整代码
代码地址https://gitcode.net/ai-medical/ai_robot
4 总结
本项目基于谷歌的Transeformer模型及milvus向量数据库两个关键技术构建了人工智能问答系统经过Transeformer模型编码后每个question输出向量维度为768存入milvus向量数据库为保证向量检索的效率通过脚本在milvus向量数据库中构建了向量索引。