第一次构建一个对话机器人流程解析(二)

1. 问答机器人的组成-基于知识图谱的搜索

  • 在教育场景下,若学生有关于学习内容的提问,或业务层面的提问,则要求问答机器人的回答必须精准,来满足业务的要求
  • 因此需要通过知识图谱来快速检索,所提内容的相关信息,并针对这些相关信息进行处理,得到精准的回答
  • 本次内容中直接应用了知识图谱基本功能,关系寻找及关系提取
  • 后续学习中会提供更多的应用

2. 伪代码实现

from py2neo import Graph #导入neo4j
from pyhanlp import * #导入nlp的工具包
from random import choice#知识图谱的初步应用
class GraphSearch():def __init__(self):self.graph = Graph("http://localhost:7474", username="graph.db", password="lesson1")self.iswho_sql = "profile match p=(n)<-[r]-(b) where n.name='%s' return n.name,r.name,b.name"self.isrelation_sql = "profile match p=(n)<-[r]-(b) where n.name=~'%s' and b.name=~'%s' return n.name,r.name,b.name" def search_answer(self,question):#使用HanLP进行词性判断sentence = HanLP.parseDependency(question)#后续可以替换成自己训练的模块首先针对句意进行分析,其次针对目标实体进行提取;但主要也是针对业务场景进行分析和处理seg = {}res_combine = ''for word in sentence.iterator(): ##只处理nr名词:人,v动词,n名词,针对进行提问进行词性分析if word.POSTAG[0] == 'n' or word.POSTAG in ['v','r']:if word.POSTAG not in seg:seg[word.POSTAG] = [word.LEMMA]else:seg[word.POSTAG].append(word.LEMMA)#简单基于词性和内容判断是否为目标句式'A是谁'以此使用知识图谱进行回答if 'v' in seg and '是' in seg['v']:if 'r' in seg and 'nr' in seg and '谁' in seg['r']:for person in seg['nr']:res = self.graph.run(self.iswho_sql%(person)).data()res_combine = []for i in res[:10]:res_combine.append('%s是:%s%s'%(i['n.name'],i['b.name'],i['r.name']))return choice(res_combine)#基于词性和内容判断是否为目标句式'A和B的关系'以此使用知识图谱进行回答if 'n' in seg and '关系' in seg['n']:if len(seg['nr']) == 2:res1 = self.graph.run(self.isrelation_sql%(seg['nr'][1],seg['nr'][0])).data()if res1 != []:res_combine = seg['nr'][0]+'的'+res2[0]['r.name']+'是'+seg['nr'][1]return res_combineres2 = self.graph.run(self.isrelation_sql%(seg['nr'][0],seg['nr'][1])).data()if res2 != []:res_combine = seg['nr'][1]+'的'+res2[0]['r.name']+'是'+seg['nr'][0]return res_combineif res_combine == '':return None

后续在完成业务场景下的实体提取和意图识别,学习及模型训练后,丰富该功能的问答

3. 问答机器人的组成-基于网络的回答

  • 在对话机器人构建的初期,常常面临数据不足,导致机器人无法进行准确回答,因此在前期会适当调用第三方对话的接口,来进行回答
  • 以此防止突然冷场或机器人对话失灵
  • 后续使用生成式的对话机器人,来解决此类问题
import requests
class InterNet():def __init__(self):passdef search_answer(self,question):url = 'https://api.ownthink.com/bot?appid=xiaosi&userid=user&spoken='try:text = requests.post(url+question).json()if 'message' in text and text['message'] == 'success':return text['data']['info']['text']else:return Noneexcept:return None

4. 服务的构建-什么是flask

5. 服务的构建-我的第一个flask

'''
我的第一个flask_service.py
'''
from flask_cors import cross_origin
from flask import Flask,request,redirect,url_for
import requests,json#初始化一个flask
app = Flask(__name__)@app.route('/test', methods=['GET', 'POST'])
@cross_origin()
def myfirst_service():if request.method ==  "POST":data = request.get_data().decode()data = json.loads(data)return json.dumps(data['question'],ensure_ascii=False)if __name__ == "__main__":app.run(host='0.0.0.0',port=8080,threaded=True)
'''
我的第一个send.py
'''
import requests
import json
url = 'http://127.0.0.1:8080/test'
question = '你好啊,我的第一个flask'
data = {'question':question}
print(requests.post(url,data=json.dumps(data)).json())
#service
from flask_cors import cross_origin
from flask import Flask,request,redirect,url_for
import requests,json
from mychatbot import template,CorpusSearch,GraphSearch,InterNet#global 
app = Flask(__name__)
#init the chatbot
template_model = template()
CorpusSearch_model = CorpusSearch()
GraphSearch_model = GraphSearch()
InterNet_model = InterNet()@app.route('/test', methods=['GET', 'POST'])
@cross_origin()
def myfirst_service():if request.method ==  "POST":#sta_post = time.time()data = request.get_data().decode()data = json.loads(data)return json.dumps('1',ensure_ascii=False)@app.route('/template', methods=['GET', 'POST'])
@cross_origin()
def test_template():if request.method ==  "POST":#sta_post = time.time()data = request.get_data().decode()data = json.loads(data)question = data['question']answer = template_model.search_answer(question)return json.dumps(answer,ensure_ascii=False)
@app.route('/CorpusSearch', methods=['GET', 'POST'])
@cross_origin()
def test_CorpusSearch():if request.method ==  "POST":#sta_post = time.time()data = request.get_data().decode()data = json.loads(data)question = data['question']answer = CorpusSearch_model.search_answer(question)return json.dumps(answer,ensure_ascii=False)@app.route('/GraphSearch', methods=['GET', 'POST'])
@cross_origin()
def test_GraphSearch():if request.method ==  "POST":#sta_post = time.time()data = request.get_data().decode()data = json.loads(data)question = data['question']answer = GraphSearch_model.search_answer(question)return json.dumps(answer,ensure_ascii=False)@app.route('/InterNet', methods=['GET', 'POST'])
@cross_origin()
def test_InterNet():if request.method ==  "POST":#sta_post = time.time()data = request.get_data().decode()data = json.loads(data)question = data['question']if '是谁' in question or '关系' in question:return json.dumps(None,ensure_ascii=False) try:answer = InterNet_model.search_answer(question)except:answer = None# except:# answer = '对不起啊,小智无法解决这个问题'return json.dumps(answer,ensure_ascii=False)
if __name__ == "__main__":app.run(host='0.0.0.0',port=8080,threaded=True)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/42329.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字系统与进制转换

数字系统 数字逻辑是计算机科学的基础&#xff0c;它研究的是如何通过逻辑门电路&#xff08;与门、或门、非门等&#xff09;实现各种逻辑功能。数字系统则是由数字逻辑电路组成的系统&#xff0c;可以实现各种复杂的运算和控制功能。在计算机科学中&#xff0c;数字逻辑和数…

自定义波形图View,LayoutInflater动态加载控件保存为本地图片

效果图: 页面布局: <?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:tools="http://schemas.android.com/tools"android:layout_width="…

Kubernetes基于helm部署jenkins

Kubernetes基于helm安装jenkins jenkins支持war包、docker镜像、系统安装包、helm安装等。在Kubernetes上使用Helm安装Jenkins可以简化安装和管理Jenkins的过程。同时借助Kubernetes&#xff0c;jenkins可以实现工作节点的动态调用伸缩&#xff0c;更好的提高资源利用率。通过…

MySQL Innodb存储引擎中,当页默认的大小是16K时,页中最多存放多少行的记录?

1、题目引入 Innodb存储引擎是面向行的(row-oriented)&#xff0c;也就是说数据的存放按行进行&#xff0c;每页存放的行记录是有硬性定义的&#xff0c;当页默认的大小是16K时&#xff0c;页中最多存放多少行的记录&#xff1f; A、1600 行B、8192 行C、16383 行D、7992 行 …

基于Python协同过滤的旅游景点推荐系统,采用Django框架,MySQL数据存储,Bootstrap前端,echarts可视化实现

随着旅游业的迅速发展&#xff0c;个性化旅游推荐系统成为提升用户体验和促进旅游市场增长的重要工具。本研究旨在设计并实现一种基于Python协同过滤的旅游景点推荐系统&#xff0c;结合Django框架、MySQL数据库存储、Bootstrap前端框架以及echarts数据可视化技术&#xff0c;为…

【粉丝福利 | 第8期】值得收藏!推荐10个好用的数据血缘工具

⛳️ 写在前面参与规则&#xff01;&#xff01;&#xff01; ✅参与方式&#xff1a;关注博主、点赞、收藏、评论&#xff0c;任意评论&#xff08;每人最多评论三次&#xff09; ⛳️本次送书1~4本【取决于阅读量&#xff0c;阅读量越多&#xff0c;送的越多】 目前市面上绝…

数据迁移探索

概念 数据迁移是指将数据从一个计算环境或存储系统移动到另一个计算环境或存储系统。 随着公司业务的发展&#xff0c;出于成本优化、系统升级、分库分表、整合数据等原因。数据迁移工作在日常工作中会陆续出现。 我们可以将数据迁移分成两个部分&#xff0c;第一部分是数据…

springboot高职院校毕业生信息管理系统-计算机毕业设计源码27889

摘 要 基于Java语言开发的高职院校毕业生信息管理系统旨在提供一个便捷、高效的方式来管理毕业生的相关信息。系统包括学生基本信息管理、成绩管理、就业信息管理等模块&#xff0c;通过界面友好、操作简单的设计&#xff0c;方便管理员快速查询和更新学生信息。系统还提供数据…

采用前后端分离技术架构+java语言开发的全套产科信息管理系统源码 可与医院HIS、LIS、PACS、RIS等系统进行对接

采用前后端分离技术架构java语言开发的全套产科信息管理系统源码 可与医院HIS、LIS、PACS、RIS等系统进行对接 什么是产科信息管理系统-建档管理&#xff1f; 产科信息管理系统建档管理通过信息技术实现了孕产妇健康信息的电子化、网络化和智能化管理&#xff0c;提高了医疗服…

Riscv 架构的合规测试

为啥直接关注riscv-arch-test&#xff0c;是因为RISCOF 测试框架使用的是riscv-arch-test 1. The architectural test 架构测试是一个单一的测试&#xff0c;代表了可编译和运行的最小测试代码。它是用汇编代码编写的&#xff0c;其产品是test signature。一个架构测试可能由…

微信小程序推送消息java版

需求背景 使用springboot2微信小程序推送消息。百度了一下看了一篇文章整体还可以&#xff0c;这里推荐一下。 教程解析 1、微信平台开通订阅消息。 2、添加模板。 3、springboot后台接口开发 微信平台验证地址接口开发&#xff0c;然后部署到公网服务器。 4、微信平台验…

基于FPGA的数字信号处理(15)--定点数的舍入模式(6)向0取整fix

前言 在之前的文章介绍了定点数为什么需要舍入和几种常见的舍入模式。今天我们再来看看另外一种舍入模式&#xff1a;向上取整fix。 10进制数的fix fix&#xff1a;也叫 向0取整。它的舍入方式是数据往0的方向&#xff0c;舍入到最近的整数&#xff0c;比如1.75 fix到2&#xf…

将WordPress的文章重新排序的3个方法

有效的调整文章显示顺序看开可以更好突出内容&#xff0c;还可以保持网站的新鲜感&#xff0c;今天我将带您了解三种方法&#xff0c;通过重新排序文章显著提升网站的吸引力。我们将逐步讲解从调整设置到使用插件以及“置顶”文章的每一种方法&#xff0c;确保WordPress 新手也…

利用python进行数据分析 —— python正则表达式(持续更新中!)

文章目录 利用python进行数据分析 —— python基础知识进阶重点笔记&#xff1a;正则表达式re.match 匹配开头re.search 全文匹配re.sub 替换删除re.compile 编译正则findall 返回列表finditer 返回迭代器re.split 分割返回列表(?P...) 分组匹配正则表达符号、修饰符通配符1 ^…

谷歌上新!最强开源模型Gemma 2,27B媲美LLaMA3 70B,挑战3140亿Grok-1

文章目录 LMSYS Chatbot Arena&#xff1a;开源模型性能第一Gemma为什么这么强&#xff1f;架构创新对AI安全性的提升 A领域竞争激烈&#xff0c;GPT-4o 和 Claude 3.5 Sonnet 持续发力&#xff0c;谷歌迅速跟进。 谷歌为应对AI竞争所采取的策略&#xff1a;依靠 Gemini 闭源模…

hdu物联网硬件实验3 按键和中断

学院 班级 学号 姓名 日期 成绩 实验题目 按键和中断 实验目的 实现闪灯功能转换 硬件原理 无 关键代码及注释 /* Button Turns on and off a light emitting diode(LED) connected to digital pin 13, when pressing a pushbutton attached…

解决WSL2报错:当前电脑配置不支持WSL2,请启用虚拟机平台 Windows 功能并确保在 BIOS 中启用虚拟化

事情要追溯到突发奇想下载了腾讯的手游模拟器开始。。。因为一直闪退&#xff0c;模拟器自检就要求把虚拟化功能关闭了&#xff0c;结果还是一直闪退&#xff0c;WSL2也给我报错了。。。大无语 主要通过以下两个步骤解决&#xff0c;操作了之后需要把电脑重启&#xff1a; 一、…

小程序做自定义分享封面图,Canvas base64图片数据真机上不显示?【已解决】

首选说一下需求&#xff0c;做一个小程序分享&#xff0c;但是封面图要自定义&#xff0c;除了要有对应商品还有有背景图&#xff0c;商品名。类似这种 实现逻辑&#xff0c;把商品图和背景图&#xff0c;再加上价格和商品名用canvas 渲染出来 这是弄好之后的效果图&#xff0…

SpringSecurity中文文档(Servlet Method Security)

Method Security 除了在请求级别进行建模授权之外&#xff0c;Spring Security 还支持在方法级别进行建模。 您可以在应用程序中激活它&#xff0c;方法是使用EnableMethodSecurity 注释任何Configuration 类&#xff0c;或者将 < method-security > 添加到任何 XML 配…

springbootAl农作物病虫害预警系统-计算机毕业设计源码21875

摘要 随着农业现代化的推进&#xff0c;农作物病虫害的防治已成为农业生产中的重要环节。传统的病虫害防治方法往往依赖于农民的经验和观察&#xff0c;难以准确、及时地预测和防控病虫害的发生。因此&#xff0c;开发一种基于现代信息技术的农作物病虫害预警系统&#xff0c;对…