微软认知服务应用秘籍 – 与机器人聊知识

在本篇博客中,我们将会学习到零代码情况下,如何利用已有的技术建立自己的知识问答系统,这种系统的可以广泛适用于学校、企业、客服、政府公开信息等领域,代替传统的电话咨询、电子邮件沟通等高人工负荷的方式。

建立知识库

什么叫QnA Maker?

知识库,就是人们总结出的一些历史知识的集合,存储、索引以后,可以被方便的检索出来供后人查询/学习。QnA Maker是用于建立知识库的工具,使用 QnA Maker,可以根据 FAQ(常见问题解答)文档或者 URL 和产品手册等半结构化内容打造一项问题与解答服务。可以生成一个问题与解答模型,以便灵活地应对用户查询,即用户不必输入精确的查询条件,而是提供以自然对话方式受训的机器人来响应。

下图中是知识库与Bot Service的结合使用架构图:

与"半结构化数据"并列的是"结构化数据"和"非结构化数据",其中结构化数据可以用关系式数据库来解决,非结构化数据用搜索引擎技术来解决。实际上搜索引擎就是把散落在互联网各个角落的非结构信息变成半结构化或结构化信息。

不同于搜索引擎,本文介绍的基于半结构化数据的QnA系统实现方式,是基于小规模数据量的,比如Million级别,而搜索引擎的技术要高级很多,因为要面对Billion级别的数据。但是从原理上讲,大家可以管中窥豹可见一斑。

在Azure中申请QnA Maker服务

用MSA登录Azure门户,点击"创建资源",然后点击"AI + Machine Learning":

在下图中点击"查看全部":

在下图中点击"更多:"

在下图中点击"QnA Maker":

在下图中的有红色*的输入框中,输入必要的信息,比如在Name中输入" SchoolQASystem":

点击"创建"后,稍等一会儿,会得到以下通知消息:

小提示:可以点击"固定到仪表板",方便后续查找。

至此,我们的QnA服务已经申请好了,下一步是建立知识库,填写数据。

在QnA Maker网站上建立知识库

用Edge浏览器打开https://www.qnamaker.ai,登录自己的MSA账号。如果是第一进入该网站,你的My knowledge bases将会是空白页,点击Create a knowledge base来建立自己的第一个知识库:

小提示:这里用的MSA账号应该与申请认知服务的MSA账号相同。

STEP 1我们已经做过了,现在在STEP 2中从下拉列表中选择自己的相关信息:

在STEP 3中填写一个知识库的名字,比如SchoolQASystemKB:

在STEP 5中点击"Create your KB"来建立知识库:

小提示:STEP 4可以运行用户通过提供一个静态网页或者一个固定格式的文件,来自动提取问题和答案。

稍等一会儿,进入如下页面:

我们以学校中常用的一些问答信息为例,点击"+ Add QnA pair"填写如下数据:

当然可以根据实际情况,填写其它一些信息。需要注意的是,每个Question需要有唯一的一个Answer来对应,而每个Answer可以有很多个Question,是N:1的关系。

小提示:以上数据均为虚构,请填写符合自己学校实际情况的数据。

数据填写的差不多了(一次填写不完没关系,可以以后修改),点击"Save and train"按钮,稍等一会儿,点击那个"Test"按钮,进行在线测试。在问题框中输入"报销"或者一个整句“医疗费如何报销”,可以很快得到系统的回复,如下图就是测试结果:

此时也可以点击"Inspect"来看细节,比如Confidence score的值是79.75分,也可以在左侧填写更多的问题来对应这个答案,比如"看病报销":

觉得满意后,点击"PUBLISH"按钮来发布这个知识库:

稍等一会儿,得到如下信息:

好啦!到目前为止,我们已经成功建立了第一个知识库。

小提示:保留这个网页或者请记住上图中的信息,一会儿我们还会用到它。

下面我们有两个选择:

1)写代码来访问这个知识库,提供界面供他人使用。

2)用微软的另外一项技术 – 聊天机器人技术,以问答方式来提供访问该知识库的界面。这个内容我们在下一个大章节讲述。

用代码访问QnA知识库

打开利器VS2017,新建一个Windows Desktop WPF项目,给个名字叫QAClient:

在MainWindow.xaml中填写如下XAML界面设计代码:

<Window x:Class="QAClient.MainWindow"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"xmlns:local="clr-namespace:QAClient"mc:Ignorable="d"Title="MainWindow" Height="450" Width="800"><Grid><Grid.RowDefinitions><RowDefinition Height="*"/><RowDefinition Height="40"/></Grid.RowDefinitions><TextBox Name="tb_Dialog" Grid.Row="0"/><Grid Grid.Row="1"><Grid.ColumnDefinitions><ColumnDefinition Width="*"/><ColumnDefinition Width="80"/></Grid.ColumnDefinitions><TextBox Name="tb_Question" MaxLines="1" Grid.Column="0"/><Button Name="btn_Send" Content="Send" Grid.Column="1" Click="btn_Send_Click"/></Grid></Grid>
</Window>

 

在MainWindow.xaml.cs中添加按钮事件处理函数:

    public partial class MainWindow : Window{public MainWindow(){InitializeComponent();}private async void btn_Send_Click(object sender, RoutedEventArgs e){// send http post request to qa serviceAnswers results = await QAServiceAgent.DoQuery(this.tb_Question.Text);if (results.answers != null && results.answers.Length > 0){this.tb_Dialog.Text += "问:" + this.tb_Question.Text + "\r\n";this.tb_Dialog.Text += results.answers[0].ToString() + "\r\n";}}
}

 

在工程中添加QAServiceAgent.cs文件,填写以下内容:

using System;
using System.Diagnostics;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;namespace QAClient
{class QAServiceAgent{const string Endpoint = "/knowledgebases/90690b7-dae-4e0d-bda9-16c05e0f163/generateAnswer";const string Host = "https://openmindqnamaker.azurewebsites.net/qnamaker";const string Key = "e7e3c51-dc5-4d65-aa3-8da1024c3e13";const string ContentType = "application/json";// {"question":"<Your question>"}public static async Task<Answers> DoQuery(string question){try{using (HttpClient hc = new HttpClient()){hc.DefaultRequestHeaders.Add("authorization", "EndpointKey " + Key);string jsonBody = CreateJsonBodyElement(question);StringContent content = new StringContent(jsonBody, Encoding.UTF8, ContentType);string uri = Host + Endpoint;HttpResponseMessage resp = await hc.PostAsync(uri, content);string json = await resp.Content.ReadAsStringAsync();var ro = Newtonsoft.Json.JsonConvert.DeserializeObject<Answers>(json);return ro;}}catch (Exception ex){Debug.WriteLine(ex.Message);return null;}}private static string CreateJsonBodyElement(string question){string a = "{\"question\":\"" + question + "\"}";return a;}}
}

 

小提示:上面代码中的Endpoint和Key已经经过修改,是不可用的,请用你自己申请的数据来代替。

在工程中添加另外一个文件Result.cs,用于反序列化JSON数据:

namespace QAClient
{public class Answers{public Answer[] answers { get; set; }}public class Answer{public string[] questions { get; set; }public string answer { get; set; }public float score { get; set; }public int id { get; set; }public string source { get; set; }public object[] metadata { get; set; }public override string ToString(){return string.Format("Answer: {0}, Score:{1}", answer, score);}}
}

 

代码完成!搓搓双手,按Ctrl+F5走起一波!哇哦!好俊的界面:

在下方的输入框中输入"报销"、"开学日期"、"补考"等问题,都会得到预定的答案。输入"校长是谁"就没有match到任何答案,因为我们没有在数据中准备这个问题。

我们是用客户端形式做了一个问答界面,当然也可以在网站上用REST API实现同样的功能。同时,微软提供了Bot Service,下一章我们看看如何在不写任何代码的情况下,完成机器人与QnA服务的集成。

建立对话机器人服务

什么是机器人服务?

机器人是用户使用文本、图形(卡片)或语音通过聊天的方式进行交互的应用。它可以是一个简单的问答对话,也可以是一个复杂的机器人,允许用户使用模式匹配、状态跟踪和与现有业务服务完美集成的人工智能技术通过智能的方式与服务进行交互。常见的机器人服务有以下几类:

  • 商务/金融服务,如银行提供的在线客服
  • 信息服务,如政府部门的常用信息问答服务
  • 产品服务,如企业提供的产品咨询服务

总之,机器人服务就是用计算机代替人来完成一些具有标准化流程的人机对话服务。

微软提供的机器人服务的概述在这个链接里面,建立一个机器人服务和一般的软件其实没多大区别,也要经过以下几个步骤然后再迭代:

计划:确定需求,需要什么类型的机器人服务

构建:选择工具/语言/框架等等

测试:机器人其实知识界面,后端连接了一堆智能服务,要通过机器人界面测试好所有功能

发布:发布的Azure上或者自己的Web服务器上

连接:可以将机器人连接到以有的客户端软件上,方便用户接入,比如Cortana、Skype等

评估:根据运行日志获得基本运行指标,如流量、延迟、故障等等,作为迭代的依据

创建对话机器人

用MSA登录Azure门户,点击"创建资源":

小提示:此MSA账号需要与前面的QnA服务的MSA账号相同。

选择"AI + Machine Learning",在右侧选择"Web App Bot":

在上图中选择Web App Bot,在右侧弹出的窗口中点击"创建"按钮,得到下图:

在上图中填写必要的信息,比如机器人名称是"SchoolQnAWebBot",机器人模板要选择"Question and Answer",可以关闭Application Insights来简化过程。

小提示:记住要点击"选择"按钮,否则不生效。

最后点击"创建"按钮,稍等一会儿,得到以下通知:

小提示:此时可以固定到仪表板,方便以后访问。

连接知识库

在仪表板上点击这个机器人,然后点击左侧的"网络聊天测试":

在上图中下方输入"报销",机器人傻傻的回了一句"you said 报销"。因为这个机器人刚刚建立,还没有连到上面创建的知识库上,所以它并不知道如何回答你的问题。所以点击左侧的"应用程序设置",看到一个吓人的页面,不要慌,镇定地向下卷滚,直到看到QnA开头的项目,一共有三个,如下图:

 

这三个值本来是空的,我们需要用以前得到一个信息来填写:

把颜色对应的信息填写到空白处就可以了。填写完毕后,点击最上方的"保存"按钮,稍等一会儿,这个Bot service会被重新编译部署。等到部署完毕收到通知后,可以再测试一下,输入"报销"并回车,机器人就会给你返回知识库中的答案:

WoW! 我们没写一行code,就完成了知识库和机器人的连接,龙颜大悦,喝口燕窝银耳汤,看看还有什么好玩儿的!

连接已有应用

这个机器人虽然已经建立起来了,可是用什么常见的客户端来激活这个机器人呢?

我们在下图中点击左侧那个"信道"看看:

很神奇的样子,好像可以连接这么多种客户端!我们用Skype先试验一下。点击Skype图标,进入一个页面,但是可以不管它,退回到"信道"页面,可以看到下图:

点击那个"Skype"文字链接(不是点击图标),会另起一个网页:

点击"Add to Contacts",如果机器上安装了Skype UWP版(如下图),就可以启动它了。如果没有安装,刚才那个网页会给你一个"Download Skype"的选项。

Skype启动后,SchoolQnAWebBot会作为一个联系人出现在对话中,我们可以问它一些事情,如下图所示,"报销"、"补考"、"开学"等,机器人都可以回答。但是输入比如"谁是校长"之类的不在知识库里的词汇,机器人就只能装傻充愣了。

 

 

 

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

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

相关文章

.net 开发怎么实现前后端分离_ASP.NET Core模块化前后端分离快速开发框架介绍

源码地址GitHub&#xff1a;https://github.com/iamoldli/NetModular演示地址地址&#xff1a;http://118.24.75.170:6220/账户&#xff1a;admin密码&#xff1a;admin前端框架演示地址(临时)地址&#xff1a;http://progqx5cu.bkt.clouddn.com/skins/index.html#/账户&#x…

微软认知服务应用秘籍 – 支持跨平台客户端的视觉服务中间层

不断演进的应用场景 初级应用场景—宅在家里 场景&#xff1a;Bob同学有一天在网上看到了一张建筑物的图片&#xff0c;大发感慨&#xff1a;"好漂亮啊&#xff01;这是哪里&#xff1f;我要去亲眼看看&#xff01;"Bob同学不想问别人&#xff0c;可笑的自尊心让他…

python建立列表并输入_python操作列表

遍历列表 for magic = [a,b,c] for m in magic: print(m) 输出控制台 image.png 深入for以及for之后进行操作 for m in magic: print(m.title()+ good boy) print(hahaha) 输出控制台 image.png 创建数值列表 使用函数range for value in range(1,5): print(value) 输出控制台 …

现代软件工程 作业 原型设计

[ 现代软件工程 作业系列] [ 这个作业来自福州大学 ] 软件工程课不是大家埋头写程序的课&#xff0c; 而是教给大家在软件需求 - 设计 - 实现 - 测试 - 维护 过程中的原理&#xff0c;方法和工具。下面我们就看如何用原型设计工具来帮助我们理清用户需求。 一、阅读《构建之法…

就业技术书文件表格_429页标准指南,教你如何管理工程监理文件资料,丰富图表一看就会...

房屋建筑工程监理文件资料的管理&#xff0c;参差不齐&#xff0c;也给监理工作带来了很大障碍。这份房建工程监理文件资料管理标准指南&#xff0c;能够帮助广大监理和资料员们实现监理文件资料标准化管理&#xff0c;能够有效地补充和支撑现场监理工作&#xff0c;对于工程资…

微软认知服务应用秘籍 – 君子动口不动手

概述 科技的不断发展带动着人们生活质量不断的提升&#xff0c;其中一方面就体现在日常家庭生活中&#xff0c;智能设备层出不穷&#xff0c;给人们的生活带来了很大的便利。 以电视为例&#xff0c;几十年前的电视还是按钮式的&#xff0c;每次换台还要跑到电视跟前&#xf…

一阶广义差分模型_经济学中的序列相关(自相关)

序列相关性异方差性表现于模型的随机误差项。我们将讨论模型的随机误差项违背了互相独立的基本假设的情况&#xff0c;称为序列相关性。序列相关性同样表现于模型的随机误差项。一、序列相关性(Serial Correlation )对于模型i1,2,…,n随机误差项互相独立的基本假设表现为&#…

AI应用开发实战 - 手写算式计算器

扩展手写数字识别应用 识别并计算简单手写数学表达式 主要知识点 了解MNIST数据集了解如何扩展数据集实现手写算式计算器 简介 本文将介绍一例支持识别手写数学表达式并对其进行计算的人工智能应用的开发案例。本文的应用是基于前文“手写识别应用入门”中的基础应用进行扩…

sed 删除某一行_Linux常用命令三剑客之sed,您真的会用吗?

请关注本头条号&#xff0c;每天坚持更新原创干货技术文章。如需学习视频&#xff0c;请在微信搜索公众号“智传网优”直接开始自助视频学习1. 前言本文主要讲解Linux系统中的sed命令的作用与使用案例。sed用于查找、过滤、文本替换、替换和插入、删除等文本操作。它是Linux/Un…

现代软件工程 期中/期末总结博客作业

(软件工程作业列表) 经历了一个学期的学习&#xff0c; 可以把经历和收获总结一下。 第一部分 耕耘 请说明你付出了多少时间&#xff0c;写了多少代码&#xff0c;多少注释&#xff0c;多少文档(博客)&#xff0c;多少次签入&#xff0c;最好用折线图或其他合适的图形化的方式…

idea怎么更改推到github的路径_IDEA 拉取、上传、更新 项目到 Gitee+GitHub_超详细超简单版...

注&#xff1a;本人使用的idea是最新版(2019.1.2)&#xff0c;要是其他的版本的不要惊慌〜&#xff0c;基本上都一样&#xff0c;没有什么太大的差别的首先我要说一下&#xff0c;拉取项目分两个&#xff0c;一个&#xff0c;你就没有项目&#xff0c;拉取仓库的整个项目&#…

现代软件工程 作业 结对编程 模板

【现代软件工程作业汇总】 技术要求部分 请看以前的各项结对作业的技术要求&#xff0c;例如(电梯调度&#xff0c;四则运算&#xff0c;数独&#xff0c;地铁出行&#xff0c;黄金点游戏) 博客要求部分 1)在博客开头给出作业要求的博客链接&#xff0c; 你们项目的Github地址 …

caj转pdf python_PDF怎么转换成Word?2种方法3秒一键转换!建议收藏

Hello&#xff0c;大家好&#xff01;今天给大家带来&#xff1a;PDF一键转Word的干货&#xff01;保证全方位满足你工作和学习的需求~01Word转换法适用&#xff1a;纯文字简单型PDF文件。其实对于简单纯文字的PDF文件&#xff0c;直接使用Word就能转换&#xff0c;操作也非常简…

AI应用开发基础傻瓜书系列1-神经网络的基本工作原理

Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源&#xff0c;请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.0-反向传播与梯度下…

动力环境监控系统论文_浅谈动力环境监控系统技术标准

动力环境监控系统技术标准规定了监控系统各因素指标、功能&#xff0c;对实现机房设备故障自动检测、无人化值守、降低维护保养成本的动环系统有重要的作用和意义。运用动环监控&#xff0c;能解决成本高、效率低、告警慢、信息落后能问题。一、动环监控系统的技术标准1、可靠性…

现代软件工程 作业 团队项目计划

【现代软件工程作业汇总】 团队项目计划 计划包括下列内容&#xff1a; 1)  写出项目的NABCD (链接)&#xff0c; 可以录制视频&#xff1b; 2) 对目标用户的用户调研&#xff0c;选取一种调研方式&#xff0c;记录调研的过程和结果&#xff0c;可以录制视频。 3) 团队在 alp…

cmd python封装成exe_别再问我怎么Python打包成exe了!

也许我们不一定是专业的程序员&#xff0c;但是我们仍然可以通过代码提高我们的效率&#xff0c;尽量少加班&#xff0c;多陪陪媳妇&#xff08;如果有&#xff09;。再不行&#xff0c;让代码替我们干着重复的工作&#xff0c;我们有节省出来的时间打游戏不好嘛&#xff0c;是…

AI应用开发基础傻瓜书系列目录

AI应用开发基础傻瓜书系列的目录~ 写在前面&#xff0c;为啥要出这个系列的教程呢&#xff1f; 总的说来&#xff0c;我们现在有了很多非常厉害的深度学习框架&#xff0c;比如tensorflow&#xff0c;pytorch&#xff0c;paddlepaddle&#xff0c;caffe2等等等等。然而&#…

监听router_深入揭秘前端路由本质,手写 mini-router

前言前端路由一直是一个很经典的话题&#xff0c;不管是日常的使用还是面试中都会经常遇到。本文通过实现一个简单版的 react-router 来一起揭开路由的神秘面纱。通过本文&#xff0c;你可以学习到&#xff1a;前端路由本质上是什么。前端路由里的一些坑和注意点。hash 路由和 …

AI应用开发基础傻瓜书系列附录-基本数学导数公式

基本函数导数公式 Copyright © Microsoft Corporation. All rights reserved. 适用于License版权许可 更多微软人工智能学习资源&#xff0c;请见微软人工智能教育与学习共建社区 Content01.0-神经网络的基本工作原理01.1-基本数学导数公式01.2-Python-Numpy库的点滴02.…