劉 蓉,陳 波
(南京師范大學(xué)計算機科學(xué)與技術(shù)學(xué)院,江蘇 南京 210023)
咨詢服務(wù)是高校招生工作中的重要環(huán)節(jié)之一,其一方面為考生提供各種報考所需要的信息,另一方面也是高校展示自身辦學(xué)實力的重要平臺。根據(jù)中國研究生招生信息網(wǎng)的統(tǒng)計,2018年全國碩士研究生招生考試中,報考人數(shù)再創(chuàng)新高,達(dá)到238萬人[1]。越來越多的人選擇讀研深造,隨之而來的招生宣傳工作給各高校帶來了難題:如何充分地開展招生宣傳工作并且及時回復(fù)考生對報考、筆試、復(fù)試和錄取工作等方面的問題。
傳統(tǒng)的招生咨詢方式大致可分為三種:一是考生在目標(biāo)學(xué)校的官方網(wǎng)站上尋找學(xué)校所公布的一些文件和介紹;二是直接打電話咨詢;第三種方式則是由考生通過在社交網(wǎng)站發(fā)帖或向親朋好友詢問等途徑獲得所需要的信息。前兩種方式的信息可信度較高,但官方網(wǎng)站公布的文件可能并不能完全解決考生的困惑。而直接向招生辦老師咨詢時,大部分考生詢問的問題大多相似,如招生專業(yè)、參考書籍或歷年錄取分?jǐn)?shù)線等,考生與老師的一對一交流,在人力、物力、財力方面的耗費都很大[2];對于第三種方式,由于信息的獲取是來自于網(wǎng)絡(luò)上的陌生人,或考生的私人朋友,并非是高校的工作人員,信息來源不可信,信息價值不高。
隨著計算機技術(shù)的快速發(fā)展,人們越來越習(xí)慣于從網(wǎng)上獲取自己所需要的信息,深度學(xué)習(xí)和人工智能的發(fā)展更是推動了自然語言處理技術(shù)的進(jìn)一步提高。招生咨詢智能聊天機器人在此背景下應(yīng)運而生。該機器人構(gòu)建的模式是將考生經(jīng)常詢問或老師經(jīng)常遇到的問題植入到語料庫中,使得考生能夠直接與機器人對話,并快速獲取其想要咨詢的問題答案。這種方法不但節(jié)省了考生查找報考信息的時間和精力,同時也將招生辦老師從單調(diào)的答疑工作中解放。由于語料庫中的招生信息都來自于高校招生辦,信息的可信度不言而喻。
本文首先介紹聊天機器人的相關(guān)概念和關(guān)鍵技術(shù),然后分析招生咨詢機器人的發(fā)展現(xiàn)狀與不足,并提出一種基于微信公眾平臺的招生咨詢智能聊天機器人的方案設(shè)計,最后詳細(xì)介紹各個功能模塊的技術(shù)實現(xiàn)。
聊天機器人是一種使用自然語言與人類進(jìn)行對話的軟件機器人,又被稱為對話系統(tǒng)[3]。當(dāng)前學(xué)術(shù)界對于聊天機器人的研究主要產(chǎn)生了兩種模型:基于檢索的模型(檢索模型)和基于生成的模型(生成模型)。檢索模型主要依賴于知識庫、檢索技術(shù)和排序特征的提取,而生成模型則依賴大量的訓(xùn)練數(shù)據(jù),能夠表示出自然語言的語義特征[4]。由IBM開發(fā)的DeepQA系統(tǒng)采用了海量并行和基于證據(jù)的概率模型架構(gòu),整個系統(tǒng)體現(xiàn)了高級自然語言處理、信息檢索、知識表示、自動推理和機器學(xué)習(xí)等開放式問答技術(shù)[5]。
聊天機器人作為一種對話問答系統(tǒng),集成了多年來自然語言處理(Natural Language Processing)
研究與應(yīng)用的各種成果,包括詞法分析、詞性標(biāo)注、淺層或深層句法分析、命名實體識別、指代消解、詞義消解、文本檢索、信息抽?。òP(guān)系抽?。C器學(xué)習(xí)、本體知識獲取、知識挖掘、知識表示、邏輯推理等。由于中文不似英文有空格之類的詞語分隔符,句子是由連續(xù)的詞語組成,必須先進(jìn)行中文分詞才能進(jìn)一步處理。此外,中文中沒有疑問詞的區(qū)分,不能像英文那樣根據(jù)疑問詞確定問題類型。這些都導(dǎo)致了自然語言處理在國內(nèi)的研究和應(yīng)用落后于國外,也使得聊天機器人的研究進(jìn)展較慢。
隨著自然語言處理技術(shù)的深入發(fā)展與研究,人們逐漸將自動問答機器人技術(shù)應(yīng)用于多個行業(yè),招生問答領(lǐng)域的自動問答機器人應(yīng)運而生。目前國內(nèi)的招生問答機器人研究較少,并且多以ALICE作為基本模型。ALICE(Artificial Linguistic Internet Computer Entity)是由美國賓夕法尼亞州Lehigh大學(xué)的Richard S.Wallace博士開發(fā)的一個基于經(jīng)驗的人工智能聊天機器人,其最初版本支持英語、德語、法語等語言,卻不支持中文。
馮德虎等人[6]在全面分析基于GPL的開源產(chǎn)品ALICE源碼的基礎(chǔ)上,引入并修改現(xiàn)有中文分詞技術(shù),使其能夠?qū)I(yè)領(lǐng)域內(nèi)的中文詞語進(jìn)行準(zhǔn)確分詞。最終采用Java EE的SSH2框架開發(fā)了一套基于B/S的招生咨詢機器人WEB系統(tǒng),但這一系統(tǒng)中機器人的知識庫是由AIML(Artificial Intelligence Markup Language)語言構(gòu)建的,在用戶的易用性與 AIML標(biāo)簽的復(fù)雜性之間存在一定的矛盾;其次,智能聊天機器人的管理用戶很難理解系統(tǒng)的運行原理,對語義不同的問句設(shè)置了相同的關(guān)鍵詞,導(dǎo)致機器人不能做出準(zhǔn)確的回答;第三,這一系統(tǒng)尚未涉及語義分析、同義句歸并等,對中文自然語言的處理不夠成熟。周建設(shè)等人[7]對開源機器人ALICE進(jìn)行了改進(jìn),實現(xiàn)自動回答考生的問題,但其用AIML語言構(gòu)建知識庫給普通管理用戶帶來一定難度。
近年來,國內(nèi)智能聊天機器人技術(shù)也取得了一定進(jìn)展,基于Deep QA技術(shù)的圖靈機器人號稱是中文語境下最智能的大腦,在中文自然語言處理方面具有強大的優(yōu)勢。此外,圖靈機器人的知識庫可以由用戶手動輸入,或者通過 Excel文件批量導(dǎo)入,與ALICE相比具有易操作、零門檻的特點。吳志霞等人[8]利用圖靈機器人平臺,開發(fā)了基于 Android的招生咨詢平臺。然而,這種咨詢系統(tǒng)尚未接入語音系統(tǒng),并且需要用戶下載額外的APP,從用戶便利性角度來看不夠友好,有待進(jìn)一步改進(jìn)。
本文將圖靈機器人接入微信公眾平臺,使用微信公眾平臺客戶端作為用戶界面,實現(xiàn)消息的接收與推送;公眾號服務(wù)器由第三方服務(wù)器組成,當(dāng)接收到用戶發(fā)送過來的消息后,對用戶消息進(jìn)行解析并根據(jù)消息內(nèi)容將消息傳送到圖靈機器人平臺或目標(biāo)網(wǎng)站處理后反饋給用戶;圖靈機器人平臺將公眾號服務(wù)器推送過來的信息進(jìn)行解析,并查詢知識庫,將匹配的內(nèi)容反饋給用戶。其中,知識庫中數(shù)據(jù)的來源有二:一是通過爬蟲的方式從高校的招生網(wǎng)站抓取相關(guān)信息;二是由負(fù)責(zé)招生的老師手動添加信息。知識庫中的數(shù)據(jù)都可以手動修改。具體技術(shù)流程如圖1所示。
當(dāng)前,微信用戶已達(dá) 10億[9]。微信公眾平臺(https://mp.weixin.qq.com/),簡稱公眾號,通過公眾號,服務(wù)提供者與用戶可以實現(xiàn)與特定群體的文字、圖片、語音、視頻的全方位溝通、互動。相較于Android和iOS APP應(yīng)用,微信公眾平臺可以跨越手機型號和操作系統(tǒng)的限制,實現(xiàn)各種服務(wù)和功能的展現(xiàn),從而推動信息的傳播和服務(wù)的應(yīng)用[10]。除了簡單的編輯模式外,目前微信公眾平臺還支持開發(fā)者模式:開發(fā)者可以調(diào)用各種網(wǎng)絡(luò) API,對接數(shù)據(jù)庫,開發(fā)出更多編輯模式不包含的高級功能[11]。
基于微信訂閱號的功能,使用開發(fā)者模式創(chuàng)建聊天機器人,不但能夠服務(wù)于更多的用戶,同時在與眾多用戶對話的過程中,機器人的學(xué)習(xí)能力不斷增強,自身積累的語言素材不斷擴(kuò)大,在與用戶進(jìn)行下一次對話時,其語言表達(dá)能力將得到進(jìn)一步的提升,回答的內(nèi)容更加智能。
微信公眾平臺消息接口為開發(fā)者提供了與用戶進(jìn)行消息交互的能力。當(dāng)用戶向公眾號發(fā)送消息時,實際上這條消息首先發(fā)送到微信后臺,由微信后臺向我們的公眾號服務(wù)器發(fā)起另一個請求。當(dāng)我們在公眾號服務(wù)器上處理后,再返回這個請求的結(jié)果,最后由微信后臺將請求結(jié)果轉(zhuǎn)發(fā)到微信客戶端,供用戶查看。用戶、微信后臺和我們所需要開發(fā)的公眾號后臺的服務(wù)器三者之間的交互關(guān)系如圖1所示。
圖 1中的微信后臺即為騰訊公司的微信服務(wù)器,它負(fù)責(zé)接收用戶從微信客戶端向公眾賬號發(fā)送的消息,并按照相應(yīng)的對接規(guī)范對用戶的消息進(jìn)行解析和轉(zhuǎn)發(fā);公眾號服務(wù)器接收到微信后臺轉(zhuǎn)發(fā)過來的消息后,解析消息格式,得到用戶的消息內(nèi)容。根據(jù)具體的消息內(nèi)容,在公眾號服務(wù)器端調(diào)用聊天機器人模塊,對用戶的消息做出應(yīng)答,然后封裝消息處理結(jié)果,返回給微信后臺;微信后臺將公眾號服務(wù)器發(fā)來的消息轉(zhuǎn)發(fā)給用戶的微信手機客戶端,用戶就可以在客戶端看到機器人的消息回復(fù)內(nèi)容。
為了在微信公眾平臺實現(xiàn)聊天機器人功能,首先要注冊一個微信公眾號。微信提供了服務(wù)號、訂閱號、企業(yè)號和測試號給用戶使用,本文在此選擇注冊個人訂閱號。賬號注冊成功后,在公眾平臺的開發(fā)者中心開啟開發(fā)者模式。當(dāng)開啟開發(fā)者模式后,編輯模式的功能將失效,所有的功能必須由開發(fā)者在公眾號服務(wù)器實現(xiàn)[12]。服務(wù)器配置過程中,需要填寫URL(服務(wù)器地址)和Token(令牌),驗證開發(fā)者是否擁有自己的服務(wù)器資源。此處填寫的URL即為代碼部署在公眾號服務(wù)器上的路徑。Token是微信公眾平臺的身份標(biāo)識[13-14],開發(fā)者可以任意填寫,以作為身份簽名,但必須與代碼中的Token值一致。當(dāng)用戶向公眾賬號發(fā)送信息后,微信后臺將向公眾號服務(wù)器發(fā)送GET請求,該請求中包含四個參數(shù)(signature、timestamp、nonce 和 echostr),開發(fā)者通過對signature的校驗,判斷此消息的真實性。若確認(rèn) GET請求來自微信服務(wù)器,將返回 echostr參數(shù)內(nèi)容,表明接入生效,可進(jìn)行下一步處理;否則接入失敗[15]。
微信公眾平臺在處理消息時,需要先判斷事件類型,如用戶關(guān)注或取消訂閱號、發(fā)送消息、掃描二維碼等,這些都會由微信服務(wù)器發(fā)送到所填寫的URL,因此在公眾號服務(wù)器模塊中必須對不同類型的事件做出不同的響應(yīng)。當(dāng)用戶向微信公眾訂閱號發(fā)送消息時,微信服務(wù)器會將消息轉(zhuǎn)換為特定的XML結(jié)構(gòu),并將XML結(jié)構(gòu)的信息POST到公眾號服務(wù)器上,然后在公眾號服務(wù)器上處理信息,再返回給微信后臺服務(wù)器。用戶發(fā)送的消息類型主要包括文本消息、圖片消息、語音消息、鏈接消息和視頻消息等。對于每一個消息,公眾號服務(wù)器在處理之前,必須先判斷消息類別,提取出消息內(nèi)容后交給聊天機器人模塊進(jìn)行處理,在發(fā)送響應(yīng)包時返回特定的XML結(jié)構(gòu)。
圖1 技術(shù)流程圖Fig.1 Technical process
微信公眾平臺上服務(wù)器配置中需要填寫代碼部署位置的URL,以實現(xiàn)公眾號服務(wù)器的接入。本文使用新浪云的云應(yīng)用(SAE)作為微信公眾號服務(wù)器。SAE支持通過Git、SVN和本地上傳三種方式部署代碼,并提供日志中心方便查看代碼的運行情況,從而在代碼出錯時及時找到錯誤原因。
(1)硬件環(huán)境
服務(wù)器端:Inter? Core? i5 CPU 3.20GHz,Windows 10專業(yè)版64位,4G內(nèi)存,500GB硬盤
客戶端:裝有微信6.6以上版本的智能手機
(2)軟件環(huán)境
服務(wù)器端:裝有IIS的Windows操作系統(tǒng);新浪云SAE;python2.7;pycharm3.6
客戶端:裝有微信6.6以上版本
(3)開發(fā)語言
python 2.7
基于微信公眾平臺開發(fā)的聊天機器人主要由招生咨詢、生活服務(wù)和其他服務(wù)三個功能模塊組成,具體功能如下。
(1)招生咨詢:本文開發(fā)的聊天機器人以南京師范大學(xué)研究生院招生官網(wǎng)為數(shù)據(jù)來源,能夠回答考生最關(guān)心的一些招生問題,節(jié)省有意報考的考生自己查找信息的時間和精力。
(2)生活服務(wù):目前支持天氣查詢、快遞查詢和火車票查詢等功能,為用戶提供當(dāng)天的天氣預(yù)報和快遞的物流信息,在火車票查詢功能中支持直接跳轉(zhuǎn)至去哪兒網(wǎng)訂票。
(3)其他服務(wù):聊天機器人還提供一些其他功能,如為用戶提供當(dāng)天的頭條新聞、識別圖片中人物的性別和年齡、與用戶進(jìn)行日常聊天等,是用戶休閑娛樂的助手。
3.2.1服務(wù)器配置和Token認(rèn)證
微信公眾平臺的個人訂閱號申請成功后,首先在新浪云SAE平臺創(chuàng)建一個空應(yīng)用,開發(fā)語言選擇Python2.7。這里選擇使用 web.py來進(jìn)行服務(wù)器搭建,如果本地沒有web.py庫的話,可以通過pip命令進(jìn)行安裝。之后需要新建一個項目,并編輯如下三個文件。
(1)config.yaml
name: chatter
version: 1
libraries:
- name: webpy
version: "0.36"
- name: lxml
version: "2.3.4"
...
config.yaml文件中填寫項目開發(fā)中用到庫名稱和版本號,必須與實際開發(fā)時使用以及SAE平臺支持的版本保持一致。
(2)index.wsgi
# coding: UTF-8
import os
import sae
import web
from wechatInterface import WechatInterface
urls = (
'/wechat','WechatInterface'
)
app_root = os.path.dirname(__file__)
templates_root = os.path.join(app_root, 'templates')
render = web.template.render(templates_root)
app = web.application(urls, globals()).wsgifunc()
application = sae.create_wsgi_app(app)
index.wsgi是web.py的基礎(chǔ)配置文件之一,將URL結(jié)構(gòu)和模板告知web.py,方便服務(wù)器處理用戶的請求。
(3)wechatInterface.py
# -*- coding: utf-8 -*-
import hashlib
import web
import lxml
import time
import os
class WechatInterface:
def __init__(self):
self.app_root = os.path.dirname(__file__)
self.templates_root = os.path.join(self.
app_root, 'templates')
self.render =
web.template.render(self.templates_root)
def GET(self):
data = web.input()
signature=data.signature
timestamp=data.timestamp
nonce=data.nonce
echostr = data.echostr
token="lenona" #這里改寫微信公眾
平臺里輸入的token
list=[token,timestamp,nonce]
list.sort()
sha1=hashlib.sha1()
map(sha1.update,list)
hashcode=sha1.hexdigest()
if hashcode == signature:
return echostr
wechatInterface.py文件用于實現(xiàn)微信公眾平臺功能,需要將代碼中的 token修改為在微信公眾平臺的開發(fā)者配置中填寫的 Token,從而實現(xiàn)微信平臺的認(rèn)證。在平臺認(rèn)證的過程中,只需要使用GET方法,但在之后發(fā)送消息時則需要使用POST方法。
將上述三個文件部署到SAE平臺后,將生成本項目的URL。打開微信公眾平臺的開發(fā)者配置頁面,填寫剛才獲得的 URL,EncodingAESKey選擇隨機生成,然后提交認(rèn)證即可。
3.2.2消息回復(fù)機制
根據(jù)微信公眾號開發(fā)文檔可知,用戶與公眾號之間的消息交互類型分為文本、圖片、語音、視頻、小視頻、地理位置和鏈接等,本文中主要用到文本、圖片和語音三種消息類型。當(dāng)用戶向公眾號發(fā)送消息時,其消息內(nèi)容將以 XML的形式傳送至搭建好的服務(wù)器中。在處理用戶消息時,需要先解析XML信息,獲取出需要的信息內(nèi)容,然后再對用戶的信息進(jìn)行回復(fù)。不同消息類型的 XML結(jié)構(gòu)中都包括ToUserName、FromUserName、CreateTime、MsgType和MsgId五個字段,但文本XML中還包括Content字段,圖片XML中含有PicUrl和MediaId字段,語音XML中則還有Format和Recognition字段。因此在處理用戶消息時,必須先獲取消息類型(MsgType),然后再按照相應(yīng)的規(guī)范得到消息內(nèi)容。消息處理的部分代碼如下:
defPOST(self):
msgType=xml.find(“MsgType”).text
ifmsgType==’text’:
content=xml.find(“Content”).text
elifmsgType==’image’:
img=xml.find(“PicUrl”).text
elifmsgType==’voice’:
voice= xml.find(“Recognition”).text
else:
pass除了文本類 XML可以直接得到消息內(nèi)容外,圖片類XML中PicUrl字段提供的是圖片的地址,而對于語音類消息,微信會在XML數(shù)據(jù)包中增加一個Recongnition字段,當(dāng)開啟語音識別功能后,可以直接從Recongnition中獲取用戶消息的文本內(nèi)容。
獲取到用戶發(fā)送的消息后,需要考慮如何給用戶發(fā)消息,此時需要定義一個消息模板,同樣以XML結(jié)構(gòu)回復(fù)消息,并在相應(yīng)的功能最后設(shè)置返回值即可。
消息模板定義如下:
$def with (toUser, fromUser, createTime, content):
4.1.1創(chuàng)建招生問答語料庫
由于招生報考的最可靠資料來源于高校的招生網(wǎng)站,本文以南京師范大學(xué)研究生招生網(wǎng)站為例,將該網(wǎng)站上招生問答模塊的內(nèi)容爬取下來,作為招生問答語料庫的來源之一。此外,關(guān)于學(xué)校和專業(yè)的介紹,以及歷年錄取情況等,也是考生密切關(guān)注的信息,因此將這些信息囊括在問答語料庫中。
招生問答語料庫的主要數(shù)據(jù)來源于高校招生網(wǎng)站的咨詢和問答模塊,在對網(wǎng)站信息進(jìn)行爬取之前,需要先分析網(wǎng)頁請求,確定相應(yīng)的網(wǎng)頁請求參數(shù)[16]。利用 Fiddler抓包后發(fā)現(xiàn),目標(biāo)請求網(wǎng)頁的 url為http://yz.njnu.edu.cn/homepage_display.jsp?wid=ABF 05B06504A2565E04077CAA4682CCE&wid2=E58A3 159A2941CC4E04077CAA46871F4。同時,由于網(wǎng)站設(shè)置了反爬蟲機制,會檢查網(wǎng)頁請求的來源,因此在模擬請求時必須設(shè)置 user-agent、refer和 host等參數(shù),當(dāng)返回的狀態(tài)碼為200時,表明網(wǎng)頁請求成功,可進(jìn)行下一步解析操作。
BeautifulSoup是Python的一個庫,其最主要的功能是從網(wǎng)頁爬取需要的數(shù)據(jù)。BeautifulSoup能夠?qū)tml形式的網(wǎng)頁源碼解析為對象進(jìn)行處理,全部頁面轉(zhuǎn)變?yōu)樽值浠蛘邤?shù)組。相對于正則表達(dá)式的方式,這種解析方式可以大大簡化處理過程。在網(wǎng)頁請求成功后,利用BeautifulSoup解析網(wǎng)頁源碼,解析后的網(wǎng)頁源碼如圖2所示。通過觀察發(fā)現(xiàn),所有的問答內(nèi)容都是用標(biāo)簽包含。在進(jìn)行問答內(nèi)容提取的時候,只需要對
標(biāo)簽內(nèi)的數(shù)據(jù)進(jìn)行處理。此處可以使用正則表達(dá)式進(jìn)行匹配,也可以直接調(diào)用BeautifulSoup封裝的函數(shù)。圖3是爬取到的部分招生咨詢的問答內(nèi)容,分為問題和相應(yīng)的答案。
通過查詢圖靈機器人的開發(fā)者文檔可知,開發(fā)者在創(chuàng)建自己的語料庫時,可以使用手動逐條添加或者批量導(dǎo)入的方式添加語料,并支持開發(fā)者手動修改問題和答案。此外,對于同一個答案,開發(fā)者可以添加相似問法,從而使圖靈機器人能夠更加準(zhǔn)確地理解用戶詢問意圖,給出滿意的答案。為了進(jìn)一步提高圖靈機器人的回答準(zhǔn)確率,開發(fā)者可以修改問答匹配度。由于需要添加的語料數(shù)據(jù)較多,此處選擇使用批量導(dǎo)入的方式創(chuàng)建語料庫。圖靈機器人官網(wǎng)提供了語料庫模板,需要導(dǎo)入的數(shù)據(jù)都必須先按照模板將數(shù)據(jù)處理成所需要的形式。所有數(shù)據(jù)保存在excel文件中,每一行的第一列為問題,文本長度不超過64個字符;第二列為答案,文本長度不超過600個字符。同時,為了提高機器人回答的準(zhǔn)確率,可以從第三列起添加相似問法。處理后的數(shù)據(jù)如圖4所示。
圖2 使用BeautifulSoup解析網(wǎng)頁Fig.2 Use BeautifulSoup to parse web pages
圖3 爬取到的部分招生問答內(nèi)容Fig.3 Part of the crawled recruiting questions and answers
圖4 處理后的問答數(shù)據(jù)Fig.4 Question and answer data after dealing
我們認(rèn)為,問答語料庫中除了包含上述招生網(wǎng)站公布的信息之外,還應(yīng)該咨詢招生辦的老師,請他們根據(jù)多年的工作經(jīng)驗繼續(xù)添加考生經(jīng)常咨詢的問題,從而進(jìn)一步完善招生問答語料庫,使考生能夠得到更加全面的招考信息。這種方式得到的數(shù)據(jù)量較小,可以直接采用手動逐條添加問題和答案的方式,在此不再贅述。
4.1.2招生問答功能實現(xiàn)
為了調(diào)用圖靈機器人 API,必須先在圖靈機器人官網(wǎng)注冊一個賬號。注冊并成功登錄后,開發(fā)者可以對所創(chuàng)建的機器人設(shè)置相關(guān)屬性,如姓名、性別、年齡等,同時開發(fā)者將得到一個 API Key。圖靈機器人提供多種接入方式,如微信公眾平臺接入、API接入、SDK接入等。由于微信公眾平臺接入是直接接入圖靈機器人提供的鏈接,而不是之前搭建的服務(wù)器,對公眾號來說將有許多定制功能方面的限制,因此本文選擇API接入。
根據(jù)圖靈機器人提供的接入API和API Key,使用如下方式接入圖靈機器人。
url = 'http://www.tuling123.com/openapi/api'
da = {"key": "9868d1a5d1e342a394921687-0fc894e1", "info": content, "userid": userid}
data = json.dumps(da)
r = s.post(url, data=data)
同時需要修改wechatInterface.py文件,將得到的用戶消息內(nèi)容傳送給圖靈機器人。
content = xml.find("Content").text
try:
msg = talk_tuling.talk(content, userid)
return self.render.reply_text(fromUser,
toUser, int(time.time()), msg)
except:
eturn self.render.reply_text(fromUser,
toUser, int(time.time()), '換個話題吧')
根據(jù)用戶詢問的問題,圖靈機器人將在語料庫中進(jìn)行匹配,當(dāng)匹配達(dá)到所設(shè)定的問答匹配度時,它將把答案返回給用戶,完成一次問答過程。若語料庫中無法找到滿足問答匹配度的答案,開發(fā)者可以自己設(shè)定圖靈機器人的默認(rèn)回答。
(1)天氣查詢
圖靈機器人API提供天氣查詢功能,當(dāng)用戶發(fā)送天氣查詢指令時,圖靈機器人將自動返回相應(yīng)的天氣情況。但是,用戶發(fā)送天氣指令時,必須包含要查詢的地點和“天氣”關(guān)鍵詞,否則機器人可能無法正確理解用戶的意圖。
(2)快遞查詢
本系統(tǒng)從考生查收錄取快遞函件等日常需要出發(fā),提供了快遞查詢功能。用戶在向聊天機器人發(fā)送消息時,需要包含“快遞”關(guān)鍵字和相應(yīng)的快遞編號。服務(wù)器接收到這一消息后,先根據(jù)關(guān)鍵字“快遞”判斷出這是一條查詢快遞的指令,然后將得到的快遞編號作為請求參數(shù),調(diào)用快遞100的查快遞接口,向“快遞100”網(wǎng)站發(fā)送查詢請求。當(dāng)服務(wù)器獲取到該快遞的物流信息后,再通過微信服務(wù)器,將具體的物流信息傳遞到用戶的微信客戶端,供用戶查看。
(3)火車票查詢
考慮到考生的出行,本系統(tǒng)提供火車票查詢功能。在聊天界面中,用戶只需要發(fā)送帶有“火車票”關(guān)鍵字的消息即可使用車票查詢功能。當(dāng)聊天機器人接收到這一消息后,將主動詢問用戶希望的出行日期。與日常對話一樣,用戶回復(fù)日期后,機器人將自動調(diào)用去哪兒網(wǎng)的網(wǎng)站接口,為用戶查詢相應(yīng)日期的火車班次。需要注意的是,每一次消息的發(fā)送都視為一次單獨的機器人調(diào)用,很可能出現(xiàn)機器人消息回復(fù)的上下文不匹配。比如,當(dāng)用戶回復(fù)目的地為“南京”時,機器人回復(fù)的是對南京的介紹,而并非是用戶所需要的車次列表。因此,在使用圖靈機器人API時,還要傳入用戶的userid,從而保持上下文對話的語境一致。關(guān)于userid的獲取,通過查詢微信公眾平臺開發(fā)文檔,發(fā)現(xiàn)之前使用的 FromUserName字段即可作為userid。由于userid只支持0-9和字母,而 FromUserName中帶有下劃線,所以在使用之前必須做一些簡單的處理。例如取 FromUserName的前16位作為userid。具體操作如下:
fromUser=xml.find(“FromUserName”).text userid=fromUser[0:15]
(1)新聞服務(wù)
圖靈機器人在接收到用戶發(fā)送的信息后,會根據(jù)消息中的關(guān)鍵字,自動將消息分為不同類別,如文本類、鏈接類、新聞類等。因此,當(dāng)用戶發(fā)送帶有“新聞”關(guān)鍵字的時候,圖靈機器人將此請求判定為新聞類消息,除了返回當(dāng)前的頭條新聞標(biāo)題外,還會把相應(yīng)新聞的鏈接一起發(fā)送給用戶,供用戶詳細(xì)閱讀相關(guān)內(nèi)容。
(2)識圖功能
本文開發(fā)的智能聊天機器人還增加了識圖功能。當(dāng)用戶向公眾號發(fā)送帶有人臉的圖片時,聊天機器人能夠使用圖像處理算法,識別出圖片中人物的年齡和性別。微軟小冰是微軟人工智能三條全球產(chǎn)品線之一,它是基于微軟于2014年提出建立的情感計算框架,通過算法、云計算和大數(shù)據(jù)的綜合運用,采用代際升級的方式,逐步形成向 EQ方向發(fā)展的完整人工智能體系。雖然目前并沒有公布可以直接調(diào)用的 API,但可以通過抓包分析的方式,向目的網(wǎng)址發(fā)送請求。
打開Fiddler并登錄http://how-old.net/,任意上傳一張圖片后,瀏覽器先發(fā)送一個GET請求,將本地上傳的圖片上傳至微軟服務(wù)器;之后瀏覽器繼續(xù)發(fā)送 POST請求,目的 url為 https://how-old.net/Home/Analyze?isTest=False&source=&version=howold.net,同時將 GET請求中得到的圖片地址作為POST請求的參數(shù)一起發(fā)送。請求成功后,服務(wù)器返回一系列 JSON格式的數(shù)據(jù),其中包括圖片中人物的gender(性別)和age(年齡)。考慮到當(dāng)用戶向公眾號發(fā)送圖片時,已經(jīng)得到了圖片文件的地址,因此在編寫代碼時可以直接用 GET請求獲取圖片內(nèi)容,再將圖片內(nèi)容作為參數(shù)向目的網(wǎng)址發(fā)送POST請求。微軟服務(wù)器會校驗Cookie,所以先用requests包構(gòu)建一個 session,requests.session會自動處理Cookie,保持會話,然后再發(fā)送各種請求。
(3)日常聊天
作為中文語境下智能度最高的機器人大腦,圖靈機器人除了能提供各種功能性服務(wù)外,它還能與人類交談,完成日常對話。與傳統(tǒng)的機器人只能回答生硬單調(diào)的文字不同,圖靈機器人的回答更加幽默和口語化,且能與時代潮流趨勢保持一致。圖靈機器人在創(chuàng)建時已經(jīng)設(shè)定了姓名、年齡、性別等信息,甚至連星座、父母親姓名都有設(shè)置,這就意味著它具有一些人類才有的身份特征,明顯區(qū)別于傳統(tǒng)的聊天機器人。而這些設(shè)定的身份屬性,在聊天過程中能夠得以體現(xiàn)。例如用戶可以詢問它的姓名等,聊天對話的友好性進(jìn)一步提升,更加符合真實人類對話的情景。擁有一套完整自學(xué)習(xí)體系的圖靈機器人,能夠在與用戶的交流中不斷學(xué)習(xí)新的知識,回答的內(nèi)容更加智能。
當(dāng)用戶關(guān)注公眾號之后,進(jìn)入公眾號,即可使用聊天機器人提供的各種服務(wù)。圖5是招生咨詢界面,用戶直接在后臺輸入自己想要咨詢的問題,機器人會根據(jù)語料庫中的內(nèi)容回答用戶。生活服務(wù)方面,用戶可以直接發(fā)送帶有關(guān)鍵字的指令,機器人收到消息后將根據(jù)關(guān)鍵字判斷該消息的類型,并進(jìn)行回復(fù)。如圖6所示,用戶可以向聊天機器人詢問天氣情況以及查詢快遞的物流狀態(tài)。
此外,該聊天機器人還提供火車票查詢、熱點新聞查詢功能,只要用戶發(fā)送消息時包含“火車票”和出發(fā)與目的地點、“新聞”等關(guān)鍵字即可,操作界面分別如圖7、圖8所示。圖8中還演示了識圖功能。當(dāng)用戶向公眾號發(fā)送圖片時,聊天機器人能夠識別出圖中人物的性別和年齡。
圖5 招生咨詢功能Fig.5 Recruiting and consulting function
圖6 天氣查詢和快遞查詢功能Fig.6 Weather and express consulting function
如圖9所示,本文開發(fā)的聊天機器人可以與用戶進(jìn)行日常聊天,并且回復(fù)內(nèi)容貼近正常人類的語氣,具有一定的智能性。
圖7 火車票查詢功能Fig.7 Train ticket consulting function
圖8 識圖功能Fig.8 Picture recognition function
本文設(shè)計實現(xiàn)的基于微信公眾平臺的聊天機器人能夠為用戶在招生咨詢和日常生活中帶來極大的方便。首先基于微信平臺,用戶不需要再去下載額外的APP占用手機資源;其次,通過微信聊天咨詢,考生能夠及時從公眾號中得到準(zhǔn)確的招考信息,既節(jié)約了考生的時間和精力,也提高了高校的宣傳效率和結(jié)果;此外,用戶能夠從公眾號中直接得到天氣、新聞、快遞和火車票等信息,給日常生活帶來極大的便利;最后,聊天機器人能夠與用戶進(jìn)行對話,是用戶休閑娛樂的好幫手。
圖9 日常聊天功能Fig.9 Daily chatting function