南宁电脑培训网站开发,襄阳网站建设首选公司哪家好,网站管理建设需进一步加强,天津业之峰装修公司地址一、前言我们都知道现在聊天对话机器是一个很有意思的东西#xff0c;比如说苹果siri#xff0c;比如说微软的小冰。聊天对话机器的应用场景也很广泛#xff0c;比如说#xff1a;银行的自助办卡机器人、展会讲解解说等等。我们对机器人说句话#xff0c;机器人从听取比如说苹果siri比如说微软的小冰。聊天对话机器的应用场景也很广泛比如说银行的自助办卡机器人、展会讲解解说等等。 我们对机器人说句话机器人从听取到语义识别认知转换到最后调出我们所想要的东西这个过程看似简单其实内藏许多黑科技让我们来一一解析一下。 1、我们对机器人说句话我想看一下今天的天气技术实现不论是语音、文字机器首先要采集到我们的问题语音还需要语音转换的一个过程且内容转换结果必须准确否则就有点像不同语言体系的人在对话有种鸡同鸭讲的感觉结果肯定也是一个大坑了。 2、语义识别技术实现通常这个阶段已经将内容转换为一段文字程序会对文字进行分词结合关键字截取拼接语义这里需要AI的训练3、认知转换技术实现上述的那就话中今天是个关键词天气是个关键词 在训练库中需要提炼词槽将可能语句尽可能提供给机器人 4、调用结果当认知转换完成后需要对关键词进行规则判断比如说 想看 今天 天气组成时候自动调用查询天气接口 上述的结果更多需要我们对机器人进行训练让它学习要不然结果肯定不是那么友好的。 二、技术需求 通过文字输入问题动态理解转化识别内容进行机器解答和语音提示。PS上述的需求基本可以理解为你叫机器人做一件事机器人领悟按照你的要求执行。进阶可以采用语音输入转换为文字之后的序列一样。需要阵列麦克风三、技术选型1、采用C# winform 作为程序主题2、采用win7 TTS 作为语音朗读功能3、采用百度理解交互技术 UNIT 作为识别基础 本篇的重点在于如何对机器UNIT 进行配置与训练机器识别会理解错误需要进行纠错最后的winform 只是调用结果显示不作为重点关注。四、实现1、新建winform 窗体 2、添加TTS引用System.Speech 3、进行 语音朗读测试 SpeechSynthesizer voice new SpeechSynthesizer(); //创建语音实例 voice.Rate 2; //设置语速,[-10,10] voice.Volume 100; //设置音量,[0,100] voice.SpeakAsync(“您好”); //播放指定的字符串,这是异步朗读 PS:有些win7 系统TTS 有问题需要自己百度查找下载TTS 进行安装。目前上述支持中文输入英文只会念字母因为需要朗读类别做转换详细请百度speech 操作。 4、结合百度理解与交互技术 百度提供的sdk 目前只支持android 和IOS但有提供http API所以笔者采用C#实现了。先去官网注册成为百度开发者。 1 创建应用 2 创建场景场景编号是后面需要用到的 3新建单元官方提供对话单元和问答单元我们选择创建对话单元 4、对对话单元进行配置新建词藻 新建词藻 词藻词典有自定义的也有系统的本文中选择系统通用的。也可以下载自定义模板写入自己的自定义词典 这个对话单元中有文本回复和执行函数我们这里选文本回复触发的规则会话规则中上述的词藻已填充那么文本内容才会出现 保存完成后再次新建对话单元主要说明介绍我们的公司 跳转到数据中心进行新建对话样本 添加 依法将公司介绍关键词添加 来的训练与验证板块输入打开菜单一开始输入可能得到错误答案你要 UNIT 纠正意图与词槽手动将关键词和意图、取词、词藻匹配上 完成后的结果 1、配置基本参数/// summary /// 理解与交互技术UNIT /// /summary public class ConfigUnit { /// summary /// Api key /// /summary public static String clientId ; // 百度云中开通对应服务应用的 Secret Key public static String clientSecret ; //场景Id public static string clientSceneId ; }部分解析实体modelusing System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BaiduAIAPI.Model.UnitModel{ public class UnitModel { public long log_id { get; set; } public string error_code { get; set; } public string error_msg { get; set; } public UnitResult result { get; set; } public bool IsSuccess { get; set; } public string returnSay { get; set; } } public class UnitResult { public string session_id { get; set; } public ListUnitAction_list action_list { get; set; } public object schema { get; set; } public object qu_res { get; set; } } public class UnitAction_list { public string action_id { get; set; } public object action_type { get; set; } public object arg_list { get; set; } public object code_actions { get; set; } public float confidence { get; set; } public object exe_status { get; set; } public string main_exe { get; set; } public string say { get; set; } public object hint_list { get; set; } } /// summary /// 其余的model 还没补充完整 /// /summary public class UnitSchema { }}错误信息定义using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace BaiduAIAPI.Type{ public class BaiduUnitType { public static string GetErrorCodeToDescription(string errorCode) { string errorDecrition ; switch (errorCode) { case 1: errorDecrition 服务器内部错误请再次请求 如果持续出现此类错误请通过QQ群224994340联系技术支持团队。; break; case 2: errorDecrition 服务暂不可用请再次请求 如果持续出现此类错误请通过QQ群224994340或工单联系技术支持团队。; break; case 3: errorDecrition 调用的API不存在请检查后重新尝试。; break; case 4: errorDecrition 集群超限额。; break; case 6: errorDecrition 无权限访问该用户数据。; break; case 14: errorDecrition IAM鉴权失败建议用户参照文档自查生成sign的方式是否正确或换用控制台中ak sk的方式调用。; break; case 17: errorDecrition 每天请求量超限额。; break; case 18: errorDecrition QPS超限额。; break; case 19: errorDecrition 请求总量超限额。; break; case 100: errorDecrition 无效的access_token参数请检查后重新尝试。; break; case 110: errorDecrition access token无效。; break; case 111: errorDecrition access token过期。; break; case 282004: errorDecrition 请求参数格式不正确。; break; case 282900: errorDecrition 必传字段为空。; break; case 282901: errorDecrition 场景ID校验失败请确认console中app和场景是否关联了https://console.bce.baidu.com/ai/#/ai/unit/app/list。; break; case 282902: errorDecrition UNIT环境启动中请稍后再试如果持续出现此类错误请通过QQ群224994340联系技术支持团队。; break; case 282903: errorDecrition UNIT系统异常如果持续出现此类错误请通过QQ群224994340联系技术支持团队。; break; case 282000: errorDecrition 服务器内部错误如果您使用的是高精度接口报这个错误码的原因可能是您上传的图片中文字过多识别超时导致的建议您对图片进行切割后再识别其他情况请再次请求 如果持续出现此类错误请通过QQ群631977213或工单联系技术支持团队。; break; default: errorDecrition 未知的错误; break; } return errorDecrition; } }}封装的接口方法using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Web.UI.WebControls;using AOP.Common;using BaiduAIAPI.Model.UnitModel;using BaiduAIAPI.Type;namespace BaiduAIAPI.UNIT{ public class UnderstandingAndInteractiveTechnology { // unit对话接口 public static UnitModel Unit_Utterance(string token, string sceneId, string query) { UnitModel result new UnitModel(); #region 基础校验 string error ; if (string.IsNullOrWhiteSpace(token)) { error token不能为空; } if (string.IsNullOrWhiteSpace(sceneId)) { error 场景编号不能为空; } if (string.IsNullOrWhiteSpace(query)) { error 询问问题不能为空; } if (!string.IsNullOrWhiteSpace(error)) { result.error_msg error; return result; } #endregion string host https://aip.baidubce.com/rpc/2.0/solution/v1/unit_utterance?access_token token; string str {\scene_id\: sceneId ,\query\:\ query \, \session_id\:\\}; // json格式 var tempResult HttpRequestHelper.Post(host, str); resultJson.ToObjectUnitModel(tempResult); if (!string.IsNullOrWhiteSpace(result.error_code)) { result.error_msg BaiduUnitType.GetErrorCodeToDescription(result.error_code); result.IsSuccess false; } else { result.IsSuccess true; result.returnSay result.result.action_list[0].say; } return result; } }}首先用单元测试结果using System;using BaiduAIAPI;using BaiduAIAPI.UNIT;using Microsoft.VisualStudio.TestTools.UnitTesting;namespace AIAPIUnitTestProject.BaiduAIAPI{ [TestClass] public class BaiduUnitTest { [TestMethod] public void TestChat() { var accessTokenModel Access_Token.GetAccessToken(ConfigUnit.clientId, ConfigUnit.clientSecret); if (accessTokenModel.IsSuccess) { string queryString 今天天气怎么样; var tempUnitResult UnderstandingAndInteractiveTechnology.Unit_Utterance(accessTokenModel.SuccessModel.access_token, ConfigUnit.clientSceneId, queryString); } } }}确定接口没有问题结合到我们的Demo程序中界面代码如下using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Speech.Synthesis;using BaiduAIAPI;using BaiduAIAPI.UNIT;using BaiduAIAPI.Model.UnitModel;namespace SpeechDemo{ public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (tb_YourSay.Text.Trim() ) { MessageBox.Show(请你输入你要说的话); return; } UnitModel result new UnitModel(); var accessTokenModel Access_Token.GetAccessToken(ConfigUnit.clientId, ConfigUnit.clientSecret); if (accessTokenModel.IsSuccess) { string queryString tb_YourSay.Text.Trim(); result UnderstandingAndInteractiveTechnology.Unit_Utterance(accessTokenModel.SuccessModel.access_token, ConfigUnit.clientSceneId, queryString); } else { result.returnSay result.error_msg; } tb_RobotSay.Text result.returnSay; SpeechSynthesizer voice new SpeechSynthesizer(); //创建语音实例 voice.Rate 2; //设置语速,[-10,10] voice.Volume 100; //设置音量,[0,100] voice.SpeakAsync(result.returnSay); //播放指定的字符串,这是异步朗读 } }}结果展示 评价理解和交互需要做大量的对话样本和语言交互纠错才可以实现相对比较精准的回答。相关文章基于Accord.Audio和百度语言识别认识微软Visual Studio Tools for AI基于Emgu CV百度人脸识别实现视频动态 人脸抓取与识别百度OCR文字识别-身份证识别微软人工智能和对话平台--知识商城体验原文地址:http://www.cnblogs.com/linbin524/p/8136799.html.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com