許孟雪,曹雅丹,邵慕義,曹滋悅,黃志靜
(北京信息科技大學 計算機學院,北京 100101)
NAO是廣泛應用的人形機器人。Aldebaran Robotics公司將NAO的技術開放給所有的高等教育項目,并于2010年成立基金會,支持在機器人及其應用領域的教學項目。NAO可以通過現(xiàn)成的指令塊進行可視化編程,因此,其允許用戶探索各種領域、運用編程達到用戶想要的各種不同效果。教學用機器人有趣、有挑戰(zhàn)性和能激發(fā)想象力,是教與學的得力助手,超過5000個NAO已經被全球50個國家的550所頂尖高校和實驗室購買作為研究工具。高校不僅將NAO運用在機器人研究、人工智能、工程學、數(shù)學、物理學和計算機科學領域,還運用在社會學和醫(yī)療保健領域。NAO參與的研究項目包括語音識別、視頻處理、模式識別、自閉癥治療、多智能體系統(tǒng)、全身運動以及路徑規(guī)劃等。本文基于NAO機器人的基礎功能設計并實現(xiàn)了北京信息科技大學計算機學院的介紹和健翔橋校區(qū)的導游功能。
基于NAO機器人針對北京信息科技大學健翔橋校區(qū)制作的校園導游機器人。對機器人的交互控制是讓機器人識別接收到有效對話和語音操作指令,根據(jù)識別結果做出應答或完成指定操作。通過這種方式來應對介紹工作,如:特色教室、特色教學和歷史成就等。此外,為增加導游機器人的趣味性,通過編寫程序,實現(xiàn)可交互的娛樂功能,如:指揮NAO機器人唱歌跳舞、與NAO機器人進行基本的交談等,激發(fā)了學生學習專業(yè)知識的興趣,使學生更快的了解校園。
系統(tǒng)由以下3部分組成:
NAO端:向服務器發(fā)送語音文件并接收服務器的反饋;
Web端:用于對數(shù)據(jù)庫里的問答內容進行增刪改查。
服務器端:接收NAO傳來的語音文件,處理后向NAO端發(fā)送反饋。
系統(tǒng)架構圖如圖1所示。
圖1 系統(tǒng)架構圖Fig.1 System architecture diagram
首先,將學生可能會問的問題和交流對話等存入服務端數(shù)據(jù)庫,NAO機器人作為一個客戶端,當用戶觸摸其頭部的感應器,系統(tǒng)便啟動;接收語音輸入并傳給服務器端,服務端將語音識別成文本后利用自然語言處理技術對文本進行處理,將處理后的文本與數(shù)據(jù)庫語料進行相似度匹配,最終返回結果至客戶端,回答學生的問題。
使用語音識別、自然語言處理技術和與數(shù)據(jù)庫相關的技術來實現(xiàn)相應的功能。語音識別技術能夠將人類語言信息轉化為計算機可以處理的如按鍵、二進制編碼或者字符序列等的序列;自然語言處理技術主要通過對gensim庫的應用,利用TF-IDF、LSA、LDA和word2vec在內的多種主題模型算法,及庫內自帶的相似度計算,信息檢索等一些常用任務的API接口實現(xiàn)問題答案的尋找和反饋。
本文利用MySql數(shù)據(jù)庫創(chuàng)建數(shù)據(jù)庫儲存問答語句,設置和預設答案。在數(shù)據(jù)庫中創(chuàng)建了語料庫表,用來存儲關于學校各種規(guī)章制度的問題及答案,包括問題的ID,問題及答案,見表1。
表1 語料表Tab.1 Corpus table
服務器端接收NAO端傳來的語音文件,并利用語音識別技術將其轉換成文本文件,若接收的語音文件內容為空,則給出提示信息0;利用關鍵詞檢索找出該文本中的關鍵詞,若文本文件不包含關鍵詞表中的關鍵詞,也給出提示信息0,若語音文件內容不為空,且轉換成的文本中含有關鍵詞表的關鍵詞,找出數(shù)據(jù)庫中所有關鍵詞和轉換成的文本的關鍵詞相同的語料,形成備用數(shù)據(jù)集,否則給出提示信息0;將備用數(shù)據(jù)集里的每個數(shù)據(jù)和該文本進行相似度計算并排序,并按排序結果將備用數(shù)據(jù)集重新存儲;再按照排序結果由高到低的順序將重新存儲的備用數(shù)據(jù)集里的數(shù)據(jù)逐一反饋給NAO端,并接收NAO端的反饋,直到NAO端表示接收到滿足要求的數(shù)據(jù)或者數(shù)據(jù)全部反饋為止。若NAO端表示接收到滿足要求的數(shù)據(jù),則將數(shù)據(jù)庫中該數(shù)據(jù)所對應的答案信息反饋給NAO端,通過觸摸不同的感應器來實現(xiàn)不同的功能。
主要流程如圖2所示。
圖2 主要流程圖Fig.2 Main flow chart
Choregraphe是一款用于連接NAO機器人以及可視化機器人實時狀態(tài)的軟件,目前支持Windows、Mac OS、Linux 3種系統(tǒng),采用圖形化編程,將機器人不同的功能封裝成一個個指令盒,用戶可以通過拖拽指令盒的方式將許多簡單功能組合起來實現(xiàn)一個復雜的行為,即使不寫代碼也可以開發(fā)出簡單的項目。
NAO使用NAOqi系統(tǒng),現(xiàn)階段NAOqi系統(tǒng)只支持Python2,所以本項目選用Python2開發(fā)。
Python是多數(shù)平臺上寫腳本和快速開發(fā)應用的編程語言,隨著版本的不斷更新和語言新功能的添加,逐漸被用于獨立的、大型項目的開發(fā)。
問答系統(tǒng)的實現(xiàn)包括服務器端和客戶端兩部分。
服務器端:接收NAO傳來的語音文件并將其轉文本、獲取文本關鍵詞、篩選數(shù)據(jù)庫中與關鍵詞相同的問題集,提供最優(yōu)答案集。
(1)獲取通行關鍵字。在百度語音識別官網創(chuàng)建任務后,官網會分配相應的密鑰用來獲取令牌。
(2)使用百度語音識別API將語音轉文本。首先拼湊JSON數(shù)據(jù),再以字節(jié)格式讀取參數(shù)中傳來的語音文件并進行編碼。
(3)獲取語句的關鍵詞。生成語句分詞后的列表變量,與關鍵詞表里面的關鍵詞逐一匹配,找出語句的關鍵詞作為該方法的返回值(在本項目中,默認每一個語句里面只含有一個關鍵詞)。
(4)查找數(shù)據(jù)庫中與關鍵詞相同的問題集。連接數(shù)據(jù)庫并找出數(shù)據(jù)庫中所有問題的關鍵詞,將數(shù)據(jù)庫中關鍵詞與文本的關鍵詞相同的問題存儲在一維數(shù)組中。
(5)查找數(shù)據(jù)庫中與問題相對應的答案并將其作為該方法的返回值。
(6)計算語句的關鍵詞和與其具有相同關鍵詞的問題集的相似度,然后按相似度高低對問題集里面的問題進行排序,并重新存儲。調用獲取輸入問題的關鍵詞,找出與關鍵詞相同的問題集存儲在一維數(shù)組中作為目標文檔,用來分析與測試文檔的相似度。若一維數(shù)組不為空,則進行分詞,分別保存在列表中;獲取詞袋,并將分詞之后的目標文檔和測試文檔都轉換為二元組向量,制作語料庫;使用TFIDF模型對語料庫建模,對每個目標文檔分析和測試文檔的相似度,再根據(jù)相似度結果進行排序。相似度排序的結果是一個列表,表中每一項是一個元組,元組中前面是原句索引,后面是相似度。
(7)連接客戶端,用socket函數(shù)來創(chuàng)建套接字從而與客戶端建立連接。
客戶端:包含控制NAO機器人錄音、連接服務器、向服務器發(fā)送數(shù)據(jù)、接收服務器的數(shù)據(jù)、控制NAO唱歌跳舞等。
(1)錄音。調用ALTextToSpeech模塊和ALAudio-Recorder模塊,控制模塊讓NAO機器人說話和錄音,NAO會把錄音文件保存在某個路徑下。
(2)連接服務器。利用socket函數(shù)來創(chuàng)建套接字,連接NAO機器人和遠程服務器。
(3)客戶端向服務器發(fā)送數(shù)據(jù)。獲得錄制的語音文件的當前目錄,并讀取該語音文件將其發(fā)送到服務器。
(4)客戶端接收服務器返回數(shù)據(jù)。
(5)循環(huán)錄音。通過得到特定的反饋來循環(huán)錄音,如果得到的反饋不是特定的反饋,則問答循環(huán)結束,等待啟動機制再次執(zhí)行客戶端盒子。
本文設計了一款基于NAO機器人的校園導游機器人,針對新生對校園不熟悉的需求展開功能設計,結合校園實際環(huán)境和學院的具體情況設計數(shù)據(jù)庫,實現(xiàn)了指路和唱歌跳舞功能,趣味性十足。但是也有一些缺點,NAO應答緩慢不靈活,沒有針對語句匹配動作;需要一定的觸摸來達到問答系統(tǒng)、唱歌與跳舞的轉換;因為用電腦做服務器,每次IPv4地址都會發(fā)生變化,需要改一下相關位置代碼才可以運行,下一步亟待解決此問題。