对话机器人之QnA Maker
以下这篇文章主要介绍微软的对话机器人框架,转载自
https://blog.csdn.net/weixin_33979745/article/details/85926649
实现的大致效果是可以询问微软俱乐部的相关情况,并且查询天气。效果演示如下:
下面我会将整个过程进行详细的表述。
1. 什么是Bot Framework?
Bot Framework就是帮你快速搭建智能服务的后端,快速在各种终端和服务上提供服务。包括三大组件。
Bot Builder SDKs:
这个是Bot的生成器,快速生成一个ASP.NET和Node.js的后端服务,提供了像Dialog、FormFlow帮你管理与用户的会话。
Bot Connector:
这是个Bot的Channel,帮你把你的服务快速发布到各个渠道,比如说Skype,Facebook Messager等等。这样用户就可以在Skype等Channel上使用你的服务了。
Bot Directory:
这个算是Bot 的商店,在这里可以找到各个bot,你也可以把自己的Bot发布出来,从而大家都可以看到你的Bot。
官方网址:https://docs.microsoft.com/zh-cn/bot-framework,用你的微软账户登录就行。
界面如图所示:
2. 什么是LUIS?
说到LUIS,我们首先谈一下Cognitive Services(认知服务)。
Cognitive Services(认知服务)的前身是Project Oxford(牛津计划),正式发布的时候更名的。这是微软将研究院研究的技术以API和SDK的形式开放给开发者的一系列智能化服务。
主要包括5大类的服务:视觉、语言、语言、知识和搜索。
其实就包括我们今天要讲的"语言理解(Language Understanding Intelligent Service,简称LUIS)"。
LUIS的官网介绍:https://www.luis.ai,用你的微软账户登录就行。
界面如图所示:
点击"App"这一栏,咱们先点击"new App"新建一个app。
新建完成后,点击应用的名称,进入编辑这个应用。
我们先看以下左边的tab,可以看到有仪表盘,意图(Intents),实体(Entities),功能以及发布应用。。。。
Intents:就是意图,比如咱们现在要提供天气查询的服务,那么咱们就创建一个"查询天气"的Intent。
实体里头有两类:
Entities:实体,比如在查询天气的时候需要有地理位置信息,需要把用户的语言里头的地点提取出来,这个地点就是这个句子里头的实例,咱们创建一个"地点"的实例。
Pre-built Entities(预建实体):这个是预置好的实例,比如说时间,数字等等,我加了一个datetime的预置实例。
在功能里头会有:
Phrase List Features(短语列表功能):固定的一些短语,能够直接识别,比如说航空公司的名字等已知信息
Pattern Features(模式功能):正则表达式,可以匹配出相应的一些字段,比如说航班号。
咱们现在来创建一个能够识别查询天气的语言理解服务。
首先,查询天气需要地点信息,咱们先创建一个"地点"的实例。
点击到“实体”里头,“添加自定义实体”:
添加一个“预建实体” datetime:
再创建一个叫做"查询天气"的Intent。
点击save之后会出现以下界面:
在“句式”中,输入几个例子,比如说“北京天气怎么样”,可以多输入几个句子的类型,比如“北京今天有雾霾吗?”等等,没输入完一句按一下回车。
如果北京等地点信息没有显示标记的话,选中北京两个字,然后选择"地点"标注。然后点击"保存"。
之后点击"发布应用",点击该界面里头的"Train"按钮。
开始训练,可能需要点时间,你可以做点其他事情。
训练完成之后,Publish按钮,发布成api的形式。
大家可以看到有“Endpoint url”这个选项,这个url后面加上查询语句就是API了。
如:https://westus.api.cognitive.microsoft.com/luis/v2.0/apps/LUIS_APP_ID?subscription-key=LUIS_subscription-key&timezoneOffset=0.0&verbose=true&q=北京今天天气怎么样?
把LUIS的ID(就是apps后面那串字符)和subscription-key记下来,后面需要用到。
在URL后面可以输入相关的语句,然后回车,就可以看到返回的json字符串了。
3. 什么是QnA Maker?
QnA Maker可以创建、训练并发布一个基于问题对的智能匹配,可以通过简单的训练来组织问题对,特别适合处理的就是标准问答的形式,比如“微软学生俱乐部是什么?”“如何加入微软俱乐部?”等等,后面匹配上标准的答案。
官方网址:https://qnamaker.ai
界面如下:
第一次进入,我们点击Create new Service,进入创建界面。
SERVICE NAME:随便起,我起的BOPdemo。
FAQ URL(S):如果你有相关的URL,可以填写,没有可以不写。样式参考:http://studentclub.msra.cn/bop2017/qa这种格式。
中间记得用tab键隔开。至此,就创建完了。
创建完了之后,你会发现在My services多了一个刚才创建的服务,如下:
还可以通过Add new QnA pair添加单独的问题对。添加完了之后别忘了Save and retrain,之后你就可以通过Test进行测试,比如我输入Hi,机器人回复Hello。
通过URL,File以及单独添加的问题对都训练完并且测试满足条件之后,你就可以Publish发布了。
这时你肯定想问,怎么通过自己的代码进行访问啊?我以C#为例:参考文档:https://qnamaker.ai/Documentation/ApiReference
Publish之后,会形成如下HTTP样式:
POST /knowledgebases/<Your KB ID>/generateAnswer HTTP/1.1 Host: https://westus.api.cognitive.microsoft.com/qnamaker/v1.0 Ocp-Apim-Subscription-Key: <Your Subscription key> Content-Type: application/json Cache-Control: no-cache {"question": "Question goes here"}
请求的代码:
string responseString = string.Empty;
var query = “hi”; //User Query
var knowledgebaseId = “YOUR_KNOWLEDGE_BASE_ID”; // Use knowledge base id created.
var qnamakerSubscriptionKey = “YOUR_SUBSCRIPTION_KEY”; //Use subscription key assigned to you.
//Build the URI
Uri qnamakerUriBase = new Uri(“https://westus.api.cognitive.microsoft.com/qnamaker/v1.0”);
var builder = new UriBuilder($"{qnamakerUriBase}/knowledgebases/{knowledgebaseId}/generateAnswer");
//Add the question as part of the body
var postBody = $"{{“question”: “{query}”}}";
//Send the POST request
using (WebClient client = new WebClient())
{
//Set the encoding to UTF8
client.Encoding = System.Text.Encoding.UTF8;
</span><span style="color:#008000;">//</span><span style="color:#008000;">Add the subscription key header</span>
client.Headers.Add(<span style="color:#800000;">"</span><span style="color:#800000;">Ocp-Apim-Subscription-Key</span><span style="color:#800000;">"</span><span style="color:#000000;">, qnamakerSubscriptionKey);
client.Headers.Add(</span><span style="color:#800000;">"</span><span style="color:#800000;">Content-Type</span><span style="color:#800000;">"</span>, <span style="color:#800000;">"</span><span style="color:#800000;">application/json</span><span style="color:#800000;">"</span><span style="color:#000000;">);
responseString </span>=<span style="color:#000000;"> client.UploadString(builder.Uri, postBody);
}
View Code
得到的响应格式是JSON,如下:
{ "Answer": "Sample response", "Score": "0" }
4. 开发流程
1) 首先获取Bot Builder SDK和Bot模拟器
可以去https://docs.microsoft.com/en-us/bot-framework/resources-tools-downloads进行参考。
首先,请下载Bot Framework的SDK,建议下载Bot Framework的Visual Studio的模板Bot Application。
下载下来的模板(不用解压)请直接放置到C:\Users\你的用户名\Documents\Visual Studio 2017\Templates\ProjectTemplates\Visual C# 下面,这样你在C#下面就可以看到有Bot Application的模板了。
如果是使用NuGet来下载SDK,请参考:
- 右键你的C#项目,选择"Manage NuGet Packages".
- 在"Browse"的tab页,输入"Microsoft.Bot.Builder".
- 点击"Install"的按钮.
下载模拟器的地址为:https://github.com/Microsoft/BotFramework-Emulator/releases/tag/v3.5.31
选择.exe那个,直接下一步,下一步就行了。
2)创建一个新项目
快速开始,参考:https://docs.microsoft.com/en-us/bot-framework/dotnet/bot-builder-dotnet-quickstart
创建完之后,默认就是一个完整的项目,可以直接运行。直接点击运行,会打开一个web页面,地址栏如下:
打开模拟器输入URL:http://localhost:3979/api/messages
直接点击Connect即可。此时,你输入一段话,对方就会回一段话,显示你发送的内容,并说明这句话有多少字符。
这个基本的模型就建好了。
看一下项目目录,我们需要写的就是在Dialogs文件夹下新建Dialog,每次新增完在Controllers文件夹下的MessagesController.cs中记得更改一下,如图:
3)将应用发布到Azure云
首先注册中国区Azure云并申请1元订阅。
第一步:搜索引擎输入关键字“世纪互联Azure”,进入世纪互联azure官网,并点击申请试用,如下图红色框所示
图1:中国区Azure官网页面
第二步:点击申请试用后,弹出链接,填写电话号码与手机收到的验证码。
第三步:填写完验证码后将弹出下图页面,将必要信息填入到网页中。身份证正反面扫描件或者照片均可,建议选手在身份证正反面照片中打上水印,如“仅限申请Azure账户使用”,但不应该遮蔽身份证号码等必要的验证信息。
图2:Azure试用申请表
第四步:提交之后,你将收到一封邮件(可能稍有延迟)。打开你上图中填写的邮箱,查看主题为“Azure一元试用激活码”的邮件,邮件正文如下图所示:
图3:Azure一元试用激活码邮件内容
第五步:执行邮件的正文中的第一步“点击进入输入激活码页”
第六步:执行邮件正文中的第二步,创建用户账号并付费完成注册。第七步的具体过程如下:
- 点击邮件中的链接进入如下界面,填写相关信息,由此生成登录账号。
图4:填写信息
- 设置账号密码(密码需要包含大小写字母、符号和数字),并填写手机号获取验证码。
图5:填写信息
- 自动跳转登录界面,输入密码登录。
图6:登录页面
- 选择支付宝,支付一元钱。
图7:一元订阅支付页面
第七步:收到主题为“由世纪互联运营的 Windows Azure 购买确认”邮件以及主题为“欢迎使用 Windows Azure Active Directory”表示azure注册成功。具体图片分别如下图8和9所示:
图8:邮件主题为“由世纪互联运营的 Windows Azure 购买确认”截图
图9:邮件主题为“欢迎使用 Windows Azure Active Directory”截图
申请完之后,需要用VS链接到中国区Azure,参考:
https://www.azure.cn/documentation/articles/developerdifferences/
也许这一块你还会有其他很多问题,别着急,在http://studentclub.msra.cn/bop2017/qa肯定能找到答案。
回到VS,点击项目名,右键,发布,最后效果:
此时已经部署到云了。
4)在Bot Framework网站上注册应用
登录 Bot Fraework网站,https://dev.botframework.com/ 如果你还没有账号,请先注册一个。
点击"Register a Bot"https://dev.botframework.com/bots/new 注册一个
填写相关的信息:
"Name":你的bot的名字,比如我的叫做"萌萌"。
"Bot Handle":随便写一串字母,比如我的写"mengmeng",其实就是你的Bot的id。
"Description":你的Bot的描述,会在你的publish之后主页上显示。
下面需要填写你的endpoint,就是你后台服务的地址:https://你的服务器地址/api/messages (刚才咱们发布的template的默认接口)
你需要点击"Create Microsoft App ID and password",创建App ID和Password(注意,切记把这个app password记下来,只显示一次)
下面的必填的一些选项随便填一下就可以了。
点击保存。
在右边的"Channels"里头可以看到"Web Chat",这个网页端的一个channel,已经帮你写好的一个frame,咱们点击"Edit"更新。
生成Web Chat的密钥之后,把密钥复制,点击"I'm done configuring Web Chat"。
5)更新你的后端服务
在你的Web.config里,填上你的botId,刚才创建的App ID和app password。
打开网站的起始页default.htm
复制以下代码:
<!DOCTYPE html> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> <html> <head> <title>小驰</title> <meta charset="utf-8" /> </head> <body style="font-family:'Segoe UI'"> <iframe name="myframe" scrolling="auto" width="100%" height="100%" onload="document.all['myframe'].style.height=myframe.document.body.scrollHeight" src="https://webchat.botframework.com/embed/mengmeng?s=你 自 己 的 Web Chat 密 钥 " style="height: 502px; max-height: 502px;"></iframe> </body> </html>
然后右键项目工程,点击"publish",之后你就可以拥有一个简单的Bot啦。
注意:此时你再想通过模拟器调试,需要加上app id和password了。
学习资料:
http://studentclub.msra.cn/bop2017/qa
http://studentclub.msra.cn/bop2017/rules/learning
对话机器人之QnA Maker相关推荐
- 如何提高QnA maker机器人训练中文语义理解的能力
这是一个常见的问题,在人工智能的世界里面,图像理解.语言及语义理解.数据理解是三个核心领域.而关于语言及语义理解,又与具体的语言和文字密切相关.目前来说,大家都是用机器学习去训练模型,如果要更好的理解 ...
- 构建azure对话机器人_如何在5分钟内使用Azure创建聊天机器人
构建azure对话机器人 介绍 (Introduction) As we enter an era of artificial intelligence and serverless computin ...
- 微软认知服务:QnA Maker使用示例
简介 QnA Maker 从用户提供的内容(包括 FAQ URL.文档和编辑内容)中提取所有可能存在的问答对:利用易于使用的界面编辑.删除和添加问答对,然后将知识库作为 API 终结点进行发布:QnA ...
- 快速搭建对话机器人,就用这一招!
作者 | Milvus.io 责编 | 胡巍巍 问答系统是自然语言处理领域一个很经典的问题,它用于回答人们以自然语言形式提出的问题,有着广泛的应用.其经典应用场景包括:智能语音交互.在线客服.知识获取 ...
- (推荐)叮当——中文语音对话机器人
叮当是一款可以工作在 Raspberry Pi 上的开源中文语音对话机器人/智能音箱项目,目的是让中国的Hacker们也能快速打造个性化的智能音箱. github地址:https://github.c ...
- 如何判断一个对话机器人有多智能?
有些对话机器人总让人崩溃,也许是智能级别不够高.本文,就来一起看看如何判断一个机器人的智能程度. 随着智能对话技术的发展,对话机器人越来越多地出现在人们的日常工作和生活中. 从企业的角度,在合适的业务 ...
- 有没有python与机械结合的工作-Python3从零开始搭建一个语音对话机器人的实现...
01-初心缘由 最近在研究语音识别方向,看了很多的语音识别的资料和文章,了解了一下语音识别的前世今生,其中包含了很多算法的演变,目前来说最流行的语音识别算法主要是依赖于深度学习的神经网络算法,其中RN ...
- 客服机器人源码_快速搭建对话机器人,就用这一招!
问答系统是自然语言处理领域一个很经典的问题,它用于回答人们以自然语言形式提出的问题,有着广泛的应用.其经典应用场景包括:智能语音交互.在线客服.知识获取.情感类聊天等.常见的分类有:生成型.检索型问答 ...
- 「比人还会聊天」百度PLATO对话机器人开放体验
聊天大师--百度PLATO来了! 这个内置业界首个突破百亿级参数的对话大模型PLATO-XL的对话机器人,一经问世就给大家带来了不一般的对话体验.它可以俏皮可爱.也可以老练深沉,既能陪你谈家长里短.也 ...
最新文章
- 2017,AI偏见为何如此受关注?
- python——杂货铺
- MySQL数据库的sql语句的导出与导入
- SpringBoot图文教程9—SpringBoot 导入导出 Excel 「Apache Poi」(亲测)
- iPad连android热点掉线,苹果终于承认,iOS 13有这个问题,网络断连的原因找到了...
- NSTimer注意内存泄露(真该死)
- windows下手动配置ipv6地址
- (文中有惊喜)走进云时代的数据库
- BarnBridge更新路线图计划或于Q2推出SMART Alpha
- 匿名函数php作用,深入理解PHP中的匿名函数
- Web渗透测试实战——(1)Web渗透测试简介
- java文件上传下载接口_java 文件上传下载
- Python print语句输出重定向到网页前端
- html字母分别代表什么,HTML 编码
- DNA计算 与 肽展公式 推导 AOPM-A 变胸腺苷, AOPM-O尿胞变腺苷, AOPM-P尿胞变鸟苷, AOPM-M鸟腺苷的 S形螺旋纹 血氧峰 触发器分子式 严谨完整过程
- 微信小程序自定义card图文组件
- raid卡缓存对硬盘性能_可能是最简单的组raid教程
- rtos中的喂狗思路——freertos
- Unreal Engin_画廊制作笔记 _012修改World Settings设置
- 【已解决】Https请求报错:unable to find valid certification path to requested target