基于微信小程序的智能聊天机器人的开发

2019-08-20 标签:聊天机器人小程序 浏览数:174

摘要: 近年来,聊天机器人的发展已有了一次次技术飞跃,其功能在自然语言处理、JavaScript,Css,Html等技术支持下日渐强大,是眼下非常热的人工智能类研发与产品研究方向并在当今的互联网社会中扮演着越来越重要的角色。

资讯主图

0 引言

身处互联网的新时代,人们的生活已离不开多种多样的手机应用和软件:网络成为了人们学习,交流,工作的重要平台,微信则是时下应用最广的手机软件之一(手机覆盖率已超90%),融入了人们的日常生活,成了我们身边必不可少的一部分。固然,科技的发展为时代带来了空前的技术飞跃,然而,人际交流却随之跌入低谷。这种情况下,智能聊天机器人就显出了其重要性和优越性。它可以保证个人信息的安全性,涵盖范围广泛,运用自然语言反馈结果,迅速,准确,使用方便,贴近生活。与传统搜索软件不同,聊天机器人提高了用户获取信息的有效性,深刻的改变着人们的生活方式,促进了人机的互动和交流。因此,聊天机器人是目前非常热的一个人工智能研发与产品方向。

本人设计开发基于智能聊天机器人微信小程序,结合Html和微信小程序理论,调用图灵机器人API,研究了一个具有聊天问答、娱乐互动、信息查询等功能的微信智能聊天机器人程序。

聊天机器人在电商网站、聊天软件、智能设备等方面应用广泛。特别是近年来,聊天机器人的应用更加趋向场景化,拥有如客服、私人助理、知识问答、陪聊等现实意义的功能。客服机器人在电商平台运用广泛的主要功能是协助运营商的经营管理,自动回答用户提出的有关产品或服务的问题,使人力、物力、成本消耗最小化,用户也可以借此更好,更准确地了解产品信息。小京东JIMI机器人,阿里小蜜等就是此类代表;私人助理类聊天机器人的功能更加日常化,生活化,可以帮助用户实现天气预报,时间规划、购物、出行等生活事宜。如微软Cortana,出门问问软件等;闲聊类机器人主要实现对话式聊天功能,使交流更加人性化,充满真实感。比如先前的“小黄鸡”和微软“小冰”等;知识问答类的聊天机器人则可以运用自然语言提出的知识性问题,如Wolfram Alpha、讯飞的开心熊宝等,结合教育和娱乐,拓宽了教育市场。

自然语言处理中的问答系统一直是智能聊天机器人中备受关注的核心。而中文语言处理机制更加繁琐,也因此需要更高的技术水平。哈尔滨工业大学开发了相关自然语言处理应用,拥有适用于汉语的句法、语法分析、分词等功能;科大讯飞信息科技股份有限公司致力于语音识别开发,实现了较高精准度的语音输入,语音控制,一定程度上推动了聊天机器人的发展;台湾国防大学研制了中文回答系统CQAS,主攻命名实体和关系处理,以特征因子表示中文文字,有最终以串联方式进行搜索、反馈,交流、应答。

国外在问答系统方面涉足较早,目前来看,技术有更高的成熟度。如谷歌公司开发的助理类软件Google Now可以以Web为媒介,以服务形式回答用户问题,并可以猜测用户喜好,提出建议等,扩展了搜索引擎的功能;新加坡国立大学开发的LAMP系统可以保存网络信息并对其中的文档进行精度较高的语法分析,并将有效答案进行筛选呈递。

此项目主要基于微信小程序,核心技术是调用了图灵机器人API,实现了人机聊天的功能。先后进行了需求调研,功能设计,界面设计,代码编写,软件测试等环节。


1 相关技术

1.1 自然语言处理

1.1.1 分词

就像存储单位中的“字节”,在语言的成分中,“词”是最小的独立的成分,英文单词之间是有空格作为分界,而中文是把字作为基本单位,拥有一定的连贯性,没有明显的分隔标志。因而,如何分析中文词语显得尤为重要。分词方法大致可分为三类:基于字典、词库匹配的分词方法;基于词频度统计的分词方法;基于知识理解的分词方法。

应用词典匹配、汉语词法或语言知识进行分词,如:最大匹配法、最小分词方法。此方法较易实现且速率较快,然而汉语语言现象灵活多变,限制了较大规模范围的实现;第二类基于统计的分词方法基于字和词的统计,把相邻的字之间的词频等信息等应用于分词,实用性较强。

基于词的频度统计的分词方法属于全切分方法,统计文章中任意两字同时出现的频率,次数越高则组合成一个词语的可能性越大,这种方法可以发现所有切分时出现的异义,易进行词语,固定搭配等的提取。

基于知识理解的分词方法主要基于句法和语法的分析,并结合了语义分析,联系语境和上下文对词进行分析框定,这类方法类似于人对信息的理解过程,对知识和信息需求量大。

基于字符串匹配的分词方法,又叫机械分词方法。正向扫描实现的叫做正向匹配,相反则叫做逆向匹配。以长词为先的是最大匹配,短词优先的为最小匹配。最大正向匹配法 (MM法)在分词时首先为最长词设定一个字符长度,并相应地查找字典。若于字典中的长词,匹配,那么该词段被被整体化后分离出来;若无法匹配,则去掉该词段的最后一个字后重复以上过程,直到匹配成功为止,此时,原该此段剩余字符长度为0,完成匹配。逆向最大匹配法(RMM)与MM法过程原理大致相同 ,但分词切分的与前者反向且使用词段以倒序存储的逆序辞典。通常,用RMM发分词时要先将文档倒排,使之逆序儿符合分词顺序。然后,使用正向最大匹配法分词。逆向匹配的分词正确率更高,常常和正向匹配法结合成双向匹配法使用,从而即使发现并处理歧义。

联系实际,由于用户在聊天时通常简答,语句简短,而基于统计的分词方法和基于理解的分词方法若想成功准确地实现脱离不了段落,所以总结以上所述,比较看来,只有基于字符串匹配的分词是比较适合的。双向最大匹配法也是现今处理汉语正确率最高的方法。

实现过程:匹配。匹配大致可分为三步:(1)用户通过聊天界面发送信息;(2)系统对该信息进行分词处理;(3)在系统知识存储库中寻找相匹配的话语作为回复。

基于词典的分词分为词典加载、预处理、最大匹配和歧义消解:在预处理时,首先按照字符特点为文段断句,将文段分为若干仅有中文的短句,并将其单位化;再对短句子进行双向最大匹配分词,例如输入“北京太平洋”正向与反向切词结果均为《北京,太平洋》长词优先,所以只对“太平洋”做出响应;之后系统会对分词结果总结比较,找出歧义,并进行消除处理,重复以上步骤直到词切分彻底。

1.1.2 目前主流实现方法

(1)直接将问题和对应的答句写入数据库:这种方式操作简单,但不够精准,需要大量各式各样的语句作为基础,太过于机械化,不够灵活,不适用于聊天。

(2)使用AIML方式:较易获得,操作较简单,但它用空格作为分词标准,不适用于中文文字。

(3)使用搜索引擎的方式检索:和直接将问题和对应的答句写入数据库不同,使用这种方法可以扩大识别范围,但有时会因为不够精准降低回复质量,造成答不对问。

(4)未来新型高级技术:是人工智能有着类人类的神经系统甚至一定的思考能力、更精准灵活的语义识别能力和深度学习等技能。

1.2 微信小程序技术

1.2.1 逻辑层

小程序开发的逻辑层作为整个程序的框架,由JavaScript编写。逻辑层将数据进行处理后发送给视图层,同时接受视图层的事件反馈。在 JavaScript的基础上,做了一些修改,以方便地开发小程序。

(1) API

路桥施工质量的确保不仅依靠人力,也必须依靠相对应的科学技术来维持,只有这样才能监测施工质量达到最终目的。质量监测系统的有效成立,可以更加快速有效地了解桥梁质量等可靠信息,为施工队能够及时应对提供更为可靠的帮助,对于建筑工人的人身安全也能够提供更加专业的保护措施,而且可以从根本上提高整个工程的质量。为了改善我国当前的路桥质量状况,质量监测系统的建立是无可厚非的,养护工作需要长期提供实时的数据,这些都是需要考虑的问题,也是建立长期的质量观测点所带来的巨大益处,同时也为路桥的质量管理与控制提供了更为良好的实践基础[3]。

小程序开发框架提供许多原生api,可以最大化丰富微信的功能,如获取用户信息,本地存储,微信支付等。wx.on开头的API是监听某个时间发生的API接口,接受一个CALLBACK函数作为参数。当该时间触发的时候,会调用callback函数。默认状态下,其他的api接口都接受一个object作为参数。object中可以指定success(接口调用成功的回调函数), fail(接口调用失败的回调函数),complete(接口调用结束的回调函数,且调用成功、失败都会执行)来接收接口调用结果。

常见的api接口是wx.request 发起的是https网络请求。一个微信小程序,同时只能有5个网络请求连接。数据 API 列表:wx.getStorage(用来获取本地数据缓存);wx.setStorage(用来设置本地数据缓存);wx.clearStorage(清除本地数据缓存)。

(2) setData()函数

setData函数用于将数据从逻辑层发送到视图层,同时改变对应的this.data的值。(这里的this指的是.js文件)

(3) 页面的路由

小程序中所有页面的路由全部由框架进行管理。路由方式:(1)初始化:打开新页面,调用 API wx.navigateTo或使用组件<navigator />;(2)打开新页面,相当于iOS中的nav的push,调用 API wx.navigateTo 或使用组件<navigator />,调用后路由前页面函数onHide;(3) 页面重定向,调用 API wx.redirectTo 或使用组件<navigator/>,调用后路由前页面函数,onUnload;(4)页面返回,调用 API wx.navigateBack或用户按左上角返回按钮;(5)Tab切换,多Tab模式下用户切换Tab。

1.2.2 视图层

2)风险管理是安全管理的一种,安全管理最终目标是本质安全管理,无论是风险管理还是隐患排查均是其手段. 本质安全管理强调从根源上着手保证系统安全并注重系统中各要素之间最佳匹配的一种状态[9]. 但目前,高速公路风险管理模式尚未从系统角度出发全面考虑外部相关组织与风险管理体系内部组织架构之间的有机联系.

(1)数据绑定

WXML中的动态数据均来自对应Page的data。简单绑定:数据绑定使用”Mustache”语法(变量要用大括号包起来),可以作用于(内容):<view> {{ message }} </view>

(2)列表渲染

wx:for:在组件上使用 wx:for 控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。

默认数组的当前项的下标变量名默认为 index,数组当前项的变量名默认为 item

(3)条件渲染

wx:if:在框架中,我们用wx:if=”{{condition}}”来判断是否需要渲染该代码块:

(4)事件

事件是视图层到逻辑层的通讯方式,可以将用户的行为反馈到逻辑层进行处理;可以绑定在组件上,当达到触发事件,就会执行逻辑层中对应的事件处理函数;事件对象可以携带额外信息,如id, dataset, touches。type,通用事件类型;target,触发事件的源组件。

Detail,自定义事件所携带的数据,如表单组件的提交事件会携带用户的输入,媒体的错误事件会携带错误信息,详见组件定义中各个事件的定义。点击事件的detail 带有的 x, y 同 pageX, pageY 代表距离文档左上角的距离。

(5)语句

if-else语句:用于基于不同的条件来执行不同的动作。只有当指定条件为 true 时,该语句才会执行代码。

if (条件)

需要执行的代码


2 具体实现

2.1 功能描述

此小程序实现了用户与图灵机器人聊天的功能。用户在对话框中输入消息,点击发送按钮发送消息,微信小程序将通过图灵机器人返回相应的回复。小程序界面如图1所示。

图1 聊天界面

2.2 目录结构

微信智能聊天机器人程序目录共分为四个主要部分,目录结构如图2所示。

图2 目录结构

(1)image文件夹,其下存有应用图片;

(2)pages文件夹,包含自定义子文件夹chat(含有chat.js ,chat.json ,chat.wxml, chat.wxss 四个文件)和pic,存放照片,(含 pic.js ,pic.json ,pic.wxml ,pic.wxss四个文件);

(3)utils文件夹,存放辅助性文件,含util.js;

(4)app文件,描述整体程序框架(含app.js ,app,json ,app,wxml ,app.wxss,分别描述页面逻辑,页面配置,页面结构和页面样式)。

2.3 代码实现

用户在对话框中输入文字,点击发送按钮发送文字,此时调用了chat.js文件中的send函数。send函数实现了通过网络请求调用图灵机器人接口,请求成功后通过 success.res函数返回响应信息,最后将返回的信息赋值给chat.wxml文件中text的value。

2.3.1 小程序配置

(1)app.json文件

此文件是微信小程序中不可缺少的一部分,做为入口来配置文件。此文件可以实现对小程序全面布局的配置,可以设置小程序的标题;导航栏的样式,颜色;背景色,窗口等,在app.json中设置页面布局。其中在window中通过backgroundTextStyle设置背景文字样式,在navigationBarBackgroundColor设置导航栏背景颜色,navigationBarTitleText设置导航栏标题,navigationBarTextStyle设置导航栏文字样式;在tabBar中通过backgroundColor设置背景颜色,SelectedColor设置图标颜色,最后在其下list数组中通过iconPath和text设置了图标和其对应标题。

(2)app.js文件

此文件也是微信小程序必不可少的组成成分,此文件处理了小程序的生命周期,并声明全局变量。小程序注册程序在加载时调用function函数,使用到了wx.getStorageSync和wx.setStorageSync两个api,进行数据存储,并定义’logs’为本地缓存的key,logs为存储内容,用来存储日志。然后通过wx.login()得到登录凭证,使用wx.getSetting({获取用户当前设置,用户如果已经授权,则 key 为scope 值,value 为Bool 值,直接调用getUserInfo,将res 发送给后台

(3)app.wxss文件

app.wxss 是整个小程序的公共样式表。在.container中定义了height,display, fl ex-direction使灵活项目纵向对齐,align-items使 fl ex中项目在当前 fl ex纵轴方向上居中对齐。,justify-content使在弹性盒对象的元素中的各项周围留有空白,padding来设置内边距属性,box-sizing使元素的任何内边距和边框都将在已经设定的宽度和高度内进行设定。

2.3.2 视图层

(1)chat.wxml文件

在滚动视图中设置允许横向滚动,scroll-y=”true”,用style定义其高度,并用scroll-top设置滚动条位置。使用block wx:for进行渲染,循环列表变量{{msglist}},在视图容器view下判断,若item.type==0则为发送状态时,发送的消息绑定在text的value上,并使用image调用image中的存储图片,显示本机头像;若item.type==1,则为返回状态时,则调用image图像显示对方头像,收到的文字同样绑定。用户在文本区域textarea中输入文字,点击发送按钮,触发form表单的submit事件,此时调用chat.js中的send函数,具体实现代码是:;text组件,显示发送的文字;photo组件,应用image文件夹中存放的头像图片。其中,send函数中定义了一个数组变量为msg,msg中有两个key,分别是{{item.msg}}和{{item.type}},无论是发送的数据还是接收的数据,都会存在msg中,只不过type值不同。

(2)chat.wxss

设置.reply样式:横向对齐,外边距大小10px;设置.send样式:右对齐;设置.photo样式:宽度40px,高度40px,背景颜色为#999;设置.text样式:用marginleft设置左外边距为10px,margin-right设置右外边距10px,内边距10px,背景色#999,使用border-radius设置对话外框圆角的弧度;设置.sendMsg样式:外边距和底边距均10px;设置.inputMsg:背景色#999,字体颜色#あf,高度30px,使用font-size设定字号大小12px。

(3)chat.js

应用page()函数,分别输入object参数:data,定义页面初始化数据,并显示文字“This is page data”;onLoad,描述小程序生命周期,加载监听页面同时可调用某函数function(),在页面加载时实现功能;onReady,完成监听页面的初次渲染,在页面加载完成时实现其功能;onShow监听页面显示时实现功能,onHide小程序后台运行或跳转到其他页面时触发,onUnload页面关闭时触发;onPullDownRefresh,页面下拉时触发;onReachBottom,页面触底时触发;onShareAppMessage,用户点击分享时触发。send函数通过wx.request进行网络请求,调用图灵机器人API接口,发送msg数组取出数据,

如果请求发送成功,图灵API接收到请求后调用了getReplay函数返回结果,使用success接收开发者服务成功返回的回调函数,在对话框中显示回复的信息,同时滚动条自动下拉,与用户进行对话。


3 总结

全文首先结合现状写了智能聊天机器人的研究意义和发展状况;然后介绍了微信智能聊天机器人运用的相关技术,包括自然语言处理原理、实现过程和微信小程序的理论、技术,并加以展望;然后介绍了微信智能聊天机器人的具体实现过程和分步代码解析。此研究成功实现了微信小程序和图灵机器人API相结合的人机网络聊天,以展现了该程序一定的聊天问答、娱乐互动、信息查询等功能,充满趣味性。

通过本次的研究,本人对微信小程序相关技术及开发有了一定理解,但与此同时,本成果在程序编写和页面布局等方面还有部分值得雕琢和完善之处,创新思想仍需锻炼,对复杂化功能的设计和应用能力还待提高。今后,本人打算在提升个人技术的基础上,进一步融入人工智能的发展的时代潮流,充分利用其优势,结合社会现状,把握好发展前景,将智能聊天机器人更好应用于教育业中,解决一定的基础性教育问题,提高教育资源人力物力等的利用率以及更高效的进行教育普及及宣传,实现如“在线智能辅导”,“学习性人机对话互动交流”等多样化功能并进行相应的产品设计。

米维信息认为当今的互联网和人工智能是科技的结晶更是时代的主导,若在相关技术开发中加以正确的利用,一定可以更好的造福全人类。


关键字: 聊天机器人小程序,衡阳微信小程序

衡阳网站建设,APP开发活动入口
热门资讯
提供衡阳微信小程序开发,微信营销功能开发、公众号开发等开发服务