郭書杰 黃明 梁旭
1大連交通大學機械工程學院 遼寧 116028 2 91550部隊 遼寧 116023 3大連交通大學軟件學院 遼寧 116028
口語對話系統(tǒng)是一種通過自然語言同人進行交流的智能人機交互系統(tǒng),它的目標是讓用戶能和機器進行自然和智能的對話。根據(jù)系統(tǒng)/用戶在對話中的主動程度,口語對話系統(tǒng)基本上可以分為以下三類:①系統(tǒng)主導:系統(tǒng)完全控制對話流程,通常由系統(tǒng)主動向用戶詢問,要求用戶回答給定的問題。系統(tǒng)主導方式只允許用戶在非常有限的時候主控對話流程,如重新開始對話,求助等。由于嚴格限制了用戶的動作,任務完成率通常比較高,但對話過程不夠自然和人性化。②用戶主導:在用戶主導的系統(tǒng)中,用戶可以隨意對系統(tǒng)發(fā)問,而系統(tǒng)則只在必要的時候要求用戶澄清。這樣,用戶具有很大的自由度。但是,從另一個方面來講,用戶往往不清楚系統(tǒng)的能力,因此容易造成“離題萬里”的情況,使得任務完成率往往比較低下。③ 混和主導:混合主導模式則是對前兩種方式的折衷:用戶和系統(tǒng)都能控制對話流。通常用戶可以主動提供查詢所需要的信息、否定或糾正前面的話語等,而系統(tǒng)也可以主動發(fā)問,如要求確認信息、詢問更詳細的信息等。

圖1 典型的口語對話系統(tǒng)
通常,口語對話系統(tǒng)都含有一個對話知識庫以及一個對話管理模塊,對話知識庫就像口語對話系統(tǒng)的大腦,它存儲著用于回答用戶問題的對話知識;而對話管理模塊則用于控制對話進程。一般來說,一個典型的口語對話系統(tǒng)由語音識別、對話管理、語音合成等三個模塊組成,如圖1所示。
陪護機器人口語對話系統(tǒng)的難點有兩個。首先,口語對話系統(tǒng)希望人機交互的過程盡量模擬真實的聊天過程,從而使得對話過程更加自然和更具人性化,這就要求機器人和陪護對象之間能夠就一些話題展開多個回合的交流,而不是像一般的問答系統(tǒng)一樣,只是單純的“一問一答”。其次,口語對話系統(tǒng)要求必須在較短的時間內(nèi)對用戶的問話做出反應,然而由于受到成本的限制,陪護機器人核心控制器的各種硬件性能又不太好,這就要求系統(tǒng)具有較高的效率。為了較好地解決這兩個難點,陪護機器人口語對話系統(tǒng)設計了一套知識庫組織規(guī)則、簡化了句子相似度計算方法并以此為基礎設計了一套簡單高效的答案檢索方法。
為了能夠盡可能真實地模擬人與人的聊天,使得人機交互的過程自然流暢,我們設計了一套格式,用于將對話知識存放到xml文件中,我們稱這些xml文件為知識文件。陪護機器人口語對話系統(tǒng)的知識文件中的知識有兩種:一種叫QandAKnowledge,適用于陪護對象主導聊天過程的情況,如圖2所示;另一種叫HostKnowledge,適用于機器人主導個<question>項,表示聊天對象的一個問題;<answer>項表示針對該問題的回答;該問題的所有子問題及其回答都存放在<subQuestions>項中。在 HostKnowledge中,每個<topic>項,表示聊天話題;<talk>表示機器人針對該話題的提問;該話題的所有子問題及其回答都存放在<subQuestions>項中。這樣設計可以方便知識文件中各條知識的讀取與管理,簡化答案檢索,提高答案檢索效率與查準率。

圖2 QandAKnowledge樣例

圖3 HostKnowledge樣例
漢語句子就是一個字符串,是由一組不同含義的單詞組成,由于字符串的特殊性,很難用一個特定的數(shù)值來確定它的大小或位置,所以如何描述兩個字符串之間的距離,也就是如何計算兩個句子的相似度就成為了一個值得探討的問題。
句子相似度的計算方法比較多:周法國等提出了一種句子及時相似度的新方法,該方法通過融合句子的詞形相似度、詞序相似度、句長相似度和距離相似度等信息來計算句子的相似度;裴婧等通過對不同關鍵詞加權(quán)的方法對常用的句子相似度方法做了改進;閏宏飛等提出了一種通過詞匯在句子中出現(xiàn)的頻率以及該詞匯距離中心疑問詞的距離來計方法:基于詞特征的句子相似度計算,基于詞義特征的句子相似度計算以及基于句法分析特征的句子相似度計算。趙妍妍等通過對比實驗得出如下結(jié)論:對于相關領域內(nèi)的句子相似度計算來說,詞義特征起到了很大的作用,因為在相同的主題下,同義詞出現(xiàn)的較多,所以基于詞義特征的方法比較適合解決這種問題。
1.2.1 簡化的基于詞義特征的句子相似度計算
上述各參考文獻中的句子相似度計算方法,都是通過融合句子的詞形、句長、詞序、距離等多種語法和語義信息來完成的。這樣的計算方法有以下特點:①時間復雜度較高,需要進行大量復雜的運算;②這種多信息融合的方式,對查準率和召回率的改善并不是十分明顯;③相似度的計算結(jié)果受到各個融合參數(shù)的直接影響,而這些融合參數(shù)通常是人為設定的,具有較強的主觀性。由于陪護機器人硬件性能較弱,這些特點決定了這種計算方法不能夠滿足陪護機器人口語對話系統(tǒng)對響應時間的要求。由于在進行問題理解時,對問題進行了分類,所以聊天對象的問題和待檢索知識庫中的問題屬于同一領域,根據(jù)趙妍妍等人的實驗結(jié)論,結(jié)合陪護機器人口語對話系統(tǒng)的硬件性能及實際需求,我們將文獻[7]中提到的基于詞義特征的句子相似度計算方法進行簡化,得到簡化的詞義特征句子相似度計算方法,并將其作為完成句子相似度的計算核心部分。簡化的詞義特征句子相似度計算方法如下:
假設句子A包含的詞為A1、A2、 …、An,B包含的詞為B1、B2、 …、Bm,定義Ai(1≤i≤m)和Bj(1≤j≤n)之間的相似度用; 令Nthesaurus=則句子A、B的詞義距離相似度sim_SE
1.2.2 句長相似度計算
通過統(tǒng)計我們發(fā)現(xiàn),由于分詞和去停用詞的原因,在日常對話常用句子中,經(jīng)常會出現(xiàn)以下情況:假設去停用詞后句子1包含的詞為w1,句子2包含的詞為w2;w1是w2的子集,但句子1和句子2并不同義,如圖4所示。此時,如果僅使用簡化的基于詞義特征的方法來計算句子相似度,句子1和句子2的相似度會比較大。如果引入句長信息作為句子相似度計算時的參考量,就可以簡單有效地將句子1和句子2區(qū)分開來。如果引入句長信息作為句子相似度計算時的參考量,就可以簡單有效地將句子1和句子2區(qū)分開來。因此在計算句子相似度時,我們加入了句長特征作為輔助信息,來完成句子相似度的計算。

圖4 w1是w2的子集的情況
設句子S的長度為句子中單詞的個數(shù),記為 ()LenS。則句子 A, B 的相似度 _simSL計算公式如下:
1.2.3 句子相似度計算
通過融合上述句子的詞義特征和句長特征來計算句子的相似度,既可以提高答案檢索時的查準率,又可以通過較簡單的句長相似度計算來限制針對聊天對象問題的查找范圍,從而提高答案檢索的效率,降低對聊天對象問話的反應時間,使得系統(tǒng)更加人性化。句子相似度計算如下:
句子 A、B的相似度sim(A,B) =λ1*sim_SE(A,B)+λ2*sim_SL(A,B);其中:λ1∈ ( 0 ,1),λ2∈ ( 0 ,1),λ1+λ2=1,并且λ1>λ2。
在系統(tǒng)初始化時,首先將知識庫文件中每一個<question>項和<topic>項,通過一個遞歸函數(shù)將其中存放的知識讀取到一棵二叉樹中,圖2對應的樹如圖5所示。
然后將這些二叉樹分別保存到動態(tài)數(shù)組 ArrQAnd-AKnowledge和ArrTopicKnowledge中;將ArrQAndAKnowledge數(shù)組按照各個知識樹“問題”字段關鍵詞個數(shù)由少到多的順序排序;為 ArrQAndAKnowledge數(shù)組按照“問題”的關鍵詞個數(shù)的多少建立倒排索引表Table_words。然后將用于標識當前話題的指針pTopic設置為NULL。在進行答案檢索時,如果pTopic等于NULL則根據(jù)聊天對象問話字符串中包含側(cè)詞語個數(shù),通過查看 Table_words并結(jié)合句子相似度計算方法中對句長相似度計算的要求,將ArrQAndAKnowledge數(shù)組中的某一范圍內(nèi)的知識樹的“問題”字段與聊天對象的問話進行句子相似度計算。假設得到的句子相似度分別為 eq1、eq2…eqn,并且最大相似度為eqi,其對應的知識樹為Tree_A。如果eqi大于0.7,則將Tree_A的“答案”字段作為回答內(nèi)容反饋給語音合成模塊,同時將Tree_A賦給pTopic;否則在字符串“哦”、“是的”、“應該是”、“有可能”、“你說什么”中隨機挑選一個字段作為回答內(nèi)容反饋給語音合成模塊,將pTopic設置為NULL,并將用戶的問話記錄到“未知問題”文件中。如果pTopic不等于NULL則計算pTopic的左子樹和右子樹的“問題”字段與聊天對象的問話的相似度eqLeft和eqRight;如果eqLeft和eqRight均小于0.3則將“看來你不想聊這個話題了,咱們換個話題吧”作為回答內(nèi)容反饋給語音合成模塊,否則將左右字數(shù)中“問題”字段與聊天對象的問話的相似度較大的那顆子樹的“答案”字段作為回答內(nèi)容反饋給語音合成模塊,并將該字數(shù)賦給pTopic。在系統(tǒng)使用中,當持續(xù) 30秒鐘未捕捉到聊天對象的問話輸入時,或者連續(xù)出現(xiàn)三次無法找到答案的問話時,系統(tǒng)就會在ArrTopicKnowledge中隨機選擇一個聊天話題和聊天對象聊天。此時答案的檢索過程與上述檢索過程中 pTopic不等于NULL的情況類似,在此不做贅述。這種答案檢索方法可以把某一話題內(nèi)的答案檢索范圍限定在知識樹中某結(jié)點的左右子樹內(nèi),從而有效縮短了響應時間。

圖5 一顆知識樹
對 78個回合的聊天結(jié)果的統(tǒng)計分析顯示,陪護機器人口語對話系統(tǒng)對話過程比較自然,系統(tǒng)能對多數(shù)的問話給出合理的回答。不能給出正確回答的原因主要有兩個,一是語音識別模塊識別錯誤,導致無法系統(tǒng)無法從聊天知識庫中查找的正確答案;另外一個原因是聊天知識庫中的話題還不夠豐富,所以有些問題無法找到答案。系統(tǒng)能夠通過不斷提問的方式引導聊天對象就某一話題展開多個回合的交流,能夠在需要時主動提出新的聊天話題或轉(zhuǎn)移新話題,使得聊天過程具有較好的連續(xù)性。系統(tǒng)的平均響應時間為1.73秒,能夠滿足日常聊天的需求。
盡管系統(tǒng)較好的實現(xiàn)了圍繞某些話題聊天、以較小的硬件代價完成快速的答案檢索等功能,但是系統(tǒng)仍有以下兩個待改進的地方:
(1)聊天知識庫的構(gòu)建需要人工完成,是一件費時費力的工作,并且缺乏靈活性,由此導致這種系統(tǒng)在應用到新的知識領域時,比較困難。
(2)系統(tǒng)只記錄上一句聊天內(nèi)容,這就無法從對話記錄中提取更多的信息,在交互過程中體現(xiàn)出來,增加系統(tǒng)的智能性。
與一般的職能問答系統(tǒng)不同,陪護機器人口語對話系統(tǒng)需要使對話的過程對話盡量自然流暢、有較好的連續(xù)性和趣味性、有較小的系統(tǒng)響應時間。由于受到成本的限制,陪護機器人核心控制器的處理器、內(nèi)存的硬件性能又相對較弱。為了滿足陪護機器人口語對話系統(tǒng)的要求,本文設計了一套以話題為單位的聊天機器人知識庫構(gòu)建規(guī)則。在使用中,將知識庫文件中的知識讀到一個個知識樹中,把話題內(nèi)的答案檢索范圍限定在知識樹中某節(jié)點的左右子樹內(nèi),從而有效縮短了響應時間;同時系統(tǒng)使用了簡單有效的句子相似度計算方法和準確高效的答案檢索模塊,有效解決了以較小的硬件代價完成快速的答案檢索的問題。
[1]吳尉林.可移植的穩(wěn)健口語理解方法研究[D].上海交通大學.2007.
[2]王彬.漢語人機對話系統(tǒng)中口語處理的研究[D].清華大學.2004.
[3]黃際洲.聊天機器人知識庫自動抽取算法的研究與實現(xiàn)[D].重慶大學.2006.
[4]周法國,楊炳儒.句子相似度計算新方法及在問答系統(tǒng)中的應用[J].計算機工程與應用.2008.
[5]裴婧,包宏.漢語句子相似度計算在 FAQ 中的應用[J].計算機工程.2009.
[6]閏宏飛,陳鐘.詞匯與中心詞的距離信息對句子相似度的影響[J].清華大學學報(自然科學版).2005.
[7]趙妍妍,秦兵等.基于多特征融合的句子相似度計算[C].全國第八屆計算語言學聯(lián)合學術會議(JSCL-2005).2005.