博舍

语音助手——简介与交互过程 手机语音小助手机器人

语音助手——简介与交互过程

语音助手简介

        语音助手这个产品的目的,是希望通过语音说话的方式,来实现闲聊陪伴、知识获取、设备控制等需求,对应的就有三种不同的助手类型:闲聊型、问答型、指令型。

        闲聊型助手用于实现闲聊陪伴的目的,通过AI的技术来与用户进行对话,感知用户情绪,比如微软小冰。

        问答型助手用于知识获取,通过对话的方式来获取知识,或者解决疑问,比较常见的应用则是各个平台的智能客服,比如京东、淘宝等都有对应的产品。

        指令型助手用于设备控制,通过对话的方式来控制智能设备,实现某种操作,比较常见的应用有智能音响、IOT设备等,比如,语音控制:“打开空调,然后调成25度”。

        而集成了这三个能力的语音助手,则是以一个集大成者的贴心助理的形式存在,比如vivo的Jovi语音助手、小米的小爱同学、IPhone的siri。        

语音助手交互过程

1、首先,来了解一下从用户发出指令到设备端执行,一共经历了哪些流程:

         由上图可以看出,用户发出语音指令,经过语音识别(ASR)服务器转换为文本,然后经过网关进入自然语言理解(NLU)服务器进行语义理解,理解之后经由对话管理中控(DM)进入技能工具箱得到结构化的控制指令,然后经过语音转文字(TTS)服务将文本信息转为语音信息,进入手机端执行命令并且回复用户。

2、下面我们来简单说下各个模块的作用:

        客户端:这里一般是指设备端,比如:手机、音响、智能设备等,用户通过该设备与语音助手进行交互,实现对话、控制设备等操作。 

        语音识别ASR:ASR实现的功能主要为将语音转换为文字,但其实这里还涉及很多其他技术,一个完整的ASR链路主要包括:语音唤醒、语音输入、静音检测(VAD)、信号处理、特征提取、模型转换等。

        网关服务:网关服务顾名思义,是一个网络连接到另一个网络的“关口”,承担了一些请求鉴权、服务转发、配置下发、流量控制等能力。

        语义理解NLU:语义理解的作用为根据文本信息理解句子的含义,这里包含了很多的模块和技术,一般主要分为query预处理和query理解两个部分,在query预处理中一般包含query纠错、问句改写等,在query理解中一般包含分词、依存句法分析、命名实体识别(NER)、场景识别、意图识别、槽位提取、情感分析等。

        对话管理DM:DM控制着人机对话的状态,他的输入为当前的用户输入(经过语义理解之后的内容),输出为下一步的系统行为和更新后的状态。DM中一般需要负责:BOT的分发、BOT结果排序、对话状态维护(DST),多轮会话一般就是在这里控制的,后续的文章中会详细讲解DM和多轮对话的实现。

        技能工具箱:这里存放着支持的各个技能,比如:播放音乐(play_music)、查询天气(weather_forecast)、闹钟操作(operate_alarm)等,这里的技能指的是客户端可以执行的内容,是语义内容经过技能封装、知识填充、知识校验等操作后生成的结构化的数据,客户端拿到后可以直接执行。        

打造Android的中文Siri语音助手(一)——小I机器人的接口

Iphone4S的Siri让人眼前一亮,网上出现了无数调戏Siri的视频。真是让android用户们心痒不已。好在随后android阵营中的高手迅速反击,推出了Iris。悲剧的是Iris仅支持英文,让我们这些英语烂的无比的人调戏Iris不成,反被它给调戏了。真是郁闷的不行啊~_~

所以我打算使用android的资源自己打造一个中文版的Siri,让我们用中文随意的来调戏它。(我自己做了一个简单的,哈哈,放在优亿市场里,有兴趣的童鞋可以去体验下http://www.eoemarket.com/apps/61634)

   首先,我们来分析Siri的构成,应该大致可以分为3个组成部份:语音识别、自然语言处理、语音输出。对于语音识别,我们可以使用google的语音识别API进行语音的识别,讲语音转成文字。语音输出,其实就是使用TTS,讲文字进行语音合成播放出来,这个android也是有接口可以利用的。真正核心的是自然语言识别处理这个部分,Siri功能的好坏判断很大一部分是取决于此的,这需要很大一个数据库来维持运转,在本地是无法实现的,即使iphone的Siri也是讲语音识别的指令语音上传到Apple的服务器上去解析后返回。由于apple的接口不开放,所以我们无法使用他们的接口,好在世界上拥有这样服务器的不止苹果一家,android上的Iris利用的就是http://start.csail.mit.edu/(自然语音问答系统)这个网站提供的接口以及一个叫做cleverbot的一款智能聊天平台http://www.cleverbot.com/这个聊天网站是支持汉语的,不过,只是支持拼音输入——汗啊。

  所以我们的核心任务就是寻找一个支持中文汉字输入的问答系统。经过在网络上长时间的搜索,结果发现——很遗憾,没有找到(PS:如果有谁找到了比较好的网址,麻烦共享,告诉我一声),不过对于我们调戏Siri的这个需求,我找到了一个较好的替代品——聊天机器人.http://www.xiaoi.com/widget/1007/小i智能聊天机器人。

  经过短时间的摸索,我实现了一个类来,初始化连接小i机器人的接口,发送数据以及接受反馈。用到的接口地址如下:

privateStringWebbot_Path="http://webbot.xiaoi.com/engine/widget1007/webbot.js?encoding=utf-8";privateStringSend_Path="http://122.226.240.164/engine/widget1007/send.js?encoding=utf-8&";privateStringRecv_Path="http://122.226.240.164/engine/widget1007/recv.js?encoding=utf-8&";

   http连接上边的Webbot_Path,会反馈回来一些数据:

varL_IDS_SEND_MESSAGE_URL="http://122.226.240.164/engine/widget1007/send.js?encoding=utf-8&";varL_IDS_RECV_MESSAGE_URL="http://122.226.240.164/engine/widget1007/recv.js?encoding=utf-8&";varL_IDS_GET_RESOURCE_URL="http://122.226.240.164/engine/widget1007/getres.do";var__sessionId="86491993134658194";document.write("");

    反馈回来的数据包 括上边的发送和接收地址,以及一个sessionId,这个sessionId很重要,类似于一个key,用于后边的会话中。由于发送和接收地址是固定的,可以直接写死,但是sessionId是变动的,所以首先需要将它从反馈回来的茫茫数据中提取出来,我使用的是一个简单的正则表达式:

StringstrResult=EntityUtils.toString(httpResponse.getEntity());Patternp=Pattern.compile("sessionId=.(\d+)");//getsessionIdMatcherm=p.matcher(strResult);if(m.find())mSessionId=m.group(1);   

得到sessionId后,我们就可以进行初始化了,初始化的过程很简单,将sessionId将填入下边格式中,发送到服务器去就行了。

StringstrSendJoin=Send_Path+"SID="+mSessionId+"&USR="+mSessionId+"&CMD=JOIN&r=";

初始化完成后,就可以使用下边的格式网址发送问题以及接收答案:

StringstrSend=Send_Path+"SID="+mSessionId+"&USR="+mSessionId+"&CMD=CHAT&SIG=You&MSG="+msg+"&FTN=&FTS=&FTC=&r=";StringstrRec=Recv_Path+"SID="+mSessionId+"&USR="+mSessionId+"&r=";xiaoi.sendMsg(mQuestion);results=xiaoi.revMsg();

接收到的内容也是需要提取的,使用的是正则表达式:

StringmsgTmp=EntityUtils.toString(httpResponse.getEntity());Patternp=Pattern.compile(""MSG":"(.*?)"");Matcherm=p.matcher(msgTmp);(m.find()){msg=m.group(1);

  通过上述的小i聊天机器人的接口,你便可以实现一个简单的,可以自由聊天对话的Siri。小I机器人还是很智能的,聊天的对话也很有意思,但是仅仅只能聊天,这个和iphoneSiri的差距太大了,所以稍后我们将给它添加另外一个智能的大脑。

本文完整代码如下:

publicclassXiaoI{privateStringWebbot_Path="http://webbot.xiaoi.com/engine/widget1007/webbot.js?encoding=utf-8";privateStringSend_Path="http://122.226.240.164/engine/widget1007/send.js?encoding=utf-8&";privateStringRecv_Path="http://122.226.240.164/engine/widget1007/recv.js?encoding=utf-8&";privateStringmSessionId=null;privateHttpClienthttpClient=null;publicbooleaninitialize(){booleansuccess=false;HttpParamshttpParams=newBasicHttpParams();HttpConnectionParams.setConnectionTimeout(httpParams,30000);HttpConnectionParams.setSoTimeout(httpParams,30000);httpClient=newDefaultHttpClient(httpParams);try{StringstrGetId=Webbot_Path;HttpGethttpRequest=newHttpGet(strGetId);HttpResponsehttpResponse=httpClient.execute(httpRequest);if(httpResponse.getStatusLine().getStatusCode()==HttpURLConnection.HTTP_OK){StringstrResult=EntityUtils.toString(httpResponse.getEntity());Patternp=Pattern.compile("sessionId=.(\d+)");//getsessionIdMatcherm=p.matcher(strResult);if(m.find()){mSessionId=m.group(1);StringstrSendJoin=Send_Path+"SID="+mSessionId+"&USR="+mSessionId+"&CMD=JOIN&r=";HttpGethttpRequest1=newHttpGet(strSendJoin);httpResponse=httpClient.execute(httpRequest1);StringstrRevAsk=Recv_Path+"SID="+mSessionId+"&USR="+mSessionId+"&r=";HttpGethttpRequest2=newHttpGet(strRevAsk);httpResponse=httpClient.execute(httpRequest2);success=true;}}}catch(ClientProtocolExceptione){e.printStackTrace();}catch(IOExceptione){e.printStackTrace();}catch(Exceptione){e.printStackTrace();}finally{returnsuccess;}}publicvoidsendMsg(Stringmsg){StringstrTalksend=Send_Path+"SID="+mSessionId+"&USR="+mSessionId+"&CMD=CHAT&SIG=You&MSG="+msg+"&FTN=&FTS=&FTC=&r=";HttpGethttpRequest=newHttpGet(strTalksend);try{httpClient.execute(httpRequest);}catch(ClientProtocolExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}}publicStringrevMsg(){StringstrTalkRec=Recv_Path+"SID="+mSessionId+"&USR="+mSessionId+"&r=";HttpGethttpRequest=newHttpGet(strTalkRec);Stringmsg=null;try{HttpResponsehttpResponse=httpClient.execute(httpRequest);if(httpResponse.getStatusLine().getStatusCode()==200){StringmsgTmp=EntityUtils.toString(httpResponse.getEntity());Patternp=Pattern.compile(""MSG":"(.*?)"");Matcherm=p.matcher(msgTmp);if(m.find()){msg=m.group(1);}}}catch(ClientProtocolExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}catch(IOExceptione){//TODOAuto-generatedcatchblocke.printStackTrace();}returnmsg;}}使用方法:XiaoI xiaoi=newXiaoI();        xiaoi.initialize();        xiaoi.sendMsg(mQuestion);    results=xiaoi.revMsg();

由于发送接收耗时较多,最好放后台处理。

原文地址:点击打开链接

华为手机小e机器人在哪

导语本文整理了华为手机小e机器人在哪知识,不管是了解相关知识,还是写作素材整理,都是理想的参考文章,希望对您有所帮助!

以华为nova5手机为例,开启小艺机器人语音助手的方法:

1、首先在手机桌面使用双指从屏幕空白处向内滑动,打开桌面设置页面。

2、选择右下方设置,将智能助手的开关开启即可。

华为nova5是华为技术有限公司于2019年6月21日在武汉光谷国际网球中心发布的一款智能手机。华为nova5外观采用6.39英寸oled屏,搭载麒麟810处理器,使用7nm制程手机soc芯片,它首次采用了全场景ai四摄方案,使用户能够轻松获得更清晰的照片。华为nova5系列搭载6.39英寸fhd+oled屏,支持108%dci-p3色域与全程dc调光,采用7.33mm机身、钻石切割工艺,以及全对称金属中框。采用7.33mm厚度机身、钻石切割工艺,以及全对称金属中框,拥有绮境森林、仲夏紫、亮黑色三种配色。为nova5搭载麒麟810处理器,使用7nm制程手机soc芯片。支持只读文件系统erofs、方舟编译器、gputurbo、ai美音与超级nfc。

延伸阅读

不支持otg的手机怎么用u盘

1、如果需要在手机和u盘之间传输数据,通过otg线可读取u盘的数据。

2、用usbotg数据线将手机和u盘连接起来,打开“文件管理>本地>u盘”,浏览u盘的数据,选择需要复制的数据,拷贝到目标文件夹。

3、然后点击“设置>高级设置>内存和存储>u盘>弹出”,即可断开手机和u盘之间的usbotg数据线。

魅族5s手机怎么设置锁屏壁纸

魅族5s手机设置锁屏壁纸的方法及步骤如下:

1、进入手机图库,找到一张要设置锁屏的图片;

2、点击图片,下面会出现一排菜单,点击“三个点”,点击“设为壁纸”;

3、点击右下角“√设为壁纸”,点击“设为锁屏”即可。

触摸手机屏幕出现水纹如何处理

1、由于手机套封闭的原因,水蒸气进入屏幕。取出手机套风干一段时间即可;

2、手机屏幕长期处于压力下,导致手机屏幕出现水纹。对于这种情况,换新的屏幕保护膜即可;

3、手机本身显示屏连接主板上的排线接触不良。出现这种情况,可以将手机送到手机维修站进行维修。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。

上一篇

下一篇