许孟雪,曹雅丹,邵慕义,曹滋悦,黄志静
(北京信息科技大学 计算机学院,北京 100101)
NAO是广泛应用的人形机器人。Aldebaran Robotics公司将NAO的技术开放给所有的高等教育项目,并于2010年成立基金会,支持在机器人及其应用领域的教学项目。NAO可以通过现成的指令块进行可视化编程,因此,其允许用户探索各种领域、运用编程达到用户想要的各种不同效果。教学用机器人有趣、有挑战性和能激发想象力,是教与学的得力助手,超过5000个NAO已经被全球50个国家的550所顶尖高校和实验室购买作为研究工具。高校不仅将NAO运用在机器人研究、人工智能、工程学、数学、物理学和计算机科学领域,还运用在社会学和医疗保健领域。NAO参与的研究项目包括语音识别、视频处理、模式识别、自闭症治疗、多智能体系统、全身运动以及路径规划等。本文基于NAO机器人的基础功能设计并实现了北京信息科技大学计算机学院的介绍和健翔桥校区的导游功能。
基于NAO机器人针对北京信息科技大学健翔桥校区制作的校园导游机器人。对机器人的交互控制是让机器人识别接收到有效对话和语音操作指令,根据识别结果做出应答或完成指定操作。通过这种方式来应对介绍工作,如:特色教室、特色教学和历史成就等。此外,为增加导游机器人的趣味性,通过编写程序,实现可交互的娱乐功能,如:指挥NAO机器人唱歌跳舞、与NAO机器人进行基本的交谈等,激发了学生学习专业知识的兴趣,使学生更快的了解校园。
系统由以下3部分组成:
NAO端:向服务器发送语音文件并接收服务器的反馈;
Web端:用于对数据库里的问答内容进行增删改查。
服务器端:接收NAO传来的语音文件,处理后向NAO端发送反馈。
系统架构图如图1所示。
图1 系统架构图Fig.1 System architecture diagram
首先,将学生可能会问的问题和交流对话等存入服务端数据库,NAO机器人作为一个客户端,当用户触摸其头部的感应器,系统便启动;接收语音输入并传给服务器端,服务端将语音识别成文本后利用自然语言处理技术对文本进行处理,将处理后的文本与数据库语料进行相似度匹配,最终返回结果至客户端,回答学生的问题。
使用语音识别、自然语言处理技术和与数据库相关的技术来实现相应的功能。语音识别技术能够将人类语言信息转化为计算机可以处理的如按键、二进制编码或者字符序列等的序列;自然语言处理技术主要通过对gensim库的应用,利用TF-IDF、LSA、LDA和word2vec在内的多种主题模型算法,及库内自带的相似度计算,信息检索等一些常用任务的API接口实现问题答案的寻找和反馈。
本文利用MySql数据库创建数据库储存问答语句,设置和预设答案。在数据库中创建了语料库表,用来存储关于学校各种规章制度的问题及答案,包括问题的ID,问题及答案,见表1。
表1 语料表Tab.1 Corpus table
服务器端接收NAO端传来的语音文件,并利用语音识别技术将其转换成文本文件,若接收的语音文件内容为空,则给出提示信息0;利用关键词检索找出该文本中的关键词,若文本文件不包含关键词表中的关键词,也给出提示信息0,若语音文件内容不为空,且转换成的文本中含有关键词表的关键词,找出数据库中所有关键词和转换成的文本的关键词相同的语料,形成备用数据集,否则给出提示信息0;将备用数据集里的每个数据和该文本进行相似度计算并排序,并按排序结果将备用数据集重新存储;再按照排序结果由高到低的顺序将重新存储的备用数据集里的数据逐一反馈给NAO端,并接收NAO端的反馈,直到NAO端表示接收到满足要求的数据或者数据全部反馈为止。若NAO端表示接收到满足要求的数据,则将数据库中该数据所对应的答案信息反馈给NAO端,通过触摸不同的感应器来实现不同的功能。
主要流程如图2所示。
图2 主要流程图Fig.2 Main flow chart
Choregraphe是一款用于连接NAO机器人以及可视化机器人实时状态的软件,目前支持Windows、Mac OS、Linux 3种系统,采用图形化编程,将机器人不同的功能封装成一个个指令盒,用户可以通过拖拽指令盒的方式将许多简单功能组合起来实现一个复杂的行为,即使不写代码也可以开发出简单的项目。
NAO使用NAOqi系统,现阶段NAOqi系统只支持Python2,所以本项目选用Python2开发。
Python是多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。
问答系统的实现包括服务器端和客户端两部分。
服务器端:接收NAO传来的语音文件并将其转文本、获取文本关键词、筛选数据库中与关键词相同的问题集,提供最优答案集。
(1)获取通行关键字。在百度语音识别官网创建任务后,官网会分配相应的密钥用来获取令牌。
(2)使用百度语音识别API将语音转文本。首先拼凑JSON数据,再以字节格式读取参数中传来的语音文件并进行编码。
(3)获取语句的关键词。生成语句分词后的列表变量,与关键词表里面的关键词逐一匹配,找出语句的关键词作为该方法的返回值(在本项目中,默认每一个语句里面只含有一个关键词)。
(4)查找数据库中与关键词相同的问题集。连接数据库并找出数据库中所有问题的关键词,将数据库中关键词与文本的关键词相同的问题存储在一维数组中。
(5)查找数据库中与问题相对应的答案并将其作为该方法的返回值。
(6)计算语句的关键词和与其具有相同关键词的问题集的相似度,然后按相似度高低对问题集里面的问题进行排序,并重新存储。调用获取输入问题的关键词,找出与关键词相同的问题集存储在一维数组中作为目标文档,用来分析与测试文档的相似度。若一维数组不为空,则进行分词,分别保存在列表中;获取词袋,并将分词之后的目标文档和测试文档都转换为二元组向量,制作语料库;使用TFIDF模型对语料库建模,对每个目标文档分析和测试文档的相似度,再根据相似度结果进行排序。相似度排序的结果是一个列表,表中每一项是一个元组,元组中前面是原句索引,后面是相似度。
(7)连接客户端,用socket函数来创建套接字从而与客户端建立连接。
客户端:包含控制NAO机器人录音、连接服务器、向服务器发送数据、接收服务器的数据、控制NAO唱歌跳舞等。
(1)录音。调用ALTextToSpeech模块和ALAudio-Recorder模块,控制模块让NAO机器人说话和录音,NAO会把录音文件保存在某个路径下。
(2)连接服务器。利用socket函数来创建套接字,连接NAO机器人和远程服务器。
(3)客户端向服务器发送数据。获得录制的语音文件的当前目录,并读取该语音文件将其发送到服务器。
(4)客户端接收服务器返回数据。
(5)循环录音。通过得到特定的反馈来循环录音,如果得到的反馈不是特定的反馈,则问答循环结束,等待启动机制再次执行客户端盒子。
本文设计了一款基于NAO机器人的校园导游机器人,针对新生对校园不熟悉的需求展开功能设计,结合校园实际环境和学院的具体情况设计数据库,实现了指路和唱歌跳舞功能,趣味性十足。但是也有一些缺点,NAO应答缓慢不灵活,没有针对语句匹配动作;需要一定的触摸来达到问答系统、唱歌与跳舞的转换;因为用电脑做服务器,每次IPv4地址都会发生变化,需要改一下相关位置代码才可以运行,下一步亟待解决此问题。