【摘要】針對遠程教育答疑環節存在的問題,設計實現一個自動答疑系統。闡述自動答疑系統的總體設計、主要算法和基于Visual-Prolog的實現技術。測試結果表明,系統答疑準確率較高,響應速度較快。系統允許用自然語言提問,并自動返回準確或相近答案,提高了遠程答疑的效率。
【關鍵詞】自動答疑系統;中文自動分詞;相似度計算;Visual-Prolog
【中圖分類號】G40-057 【文獻標識碼】B 【論文編號】1009—8097(2010)07—0122—04
目前遠程教育中答疑主要采用BBS、E-Mail和在線值機答疑等方式。這些答疑方式需要教師直接參與,不僅無法保證答疑的實時性,而且經常必須重復地回答相似的問題,造成人力和資源的巨大浪費。自動答疑系統是利用自然語言處理技術分析用戶提出的問題,自動給予問題解答的軟件系統。在遠程教育中應用自動答疑系統,能夠及時解答學生提出的問題,減少教師的工作量,提高遠程答疑的效率。
Visual-Prolog是基于Prolog語言的編譯型程序開發環境,用于編寫自動答疑系統,能充分利用其模式匹配、合一、回溯和內置數據庫等功能。針對課程答疑的特點,以《C語言程序設計》課程為例,介紹自動答疑系統的總體
設計、主要算法和基于Visual-Prolog的實現技術。
一 自動答疑系統的總體設計
1 系統功能
系統由自動答疑、在線答疑(人工)、知識庫管理、用戶管理和使用幫助5個功能模塊組成。采用B/S架構,用戶通過Web瀏覽器使用系統。
2 基本流程
答疑過程包括四個主要環節:中文自動分詞、關鍵詞提取與同義詞變換、建立候選問題集和問句相似度計算,如圖2所示。問題庫中存儲大量的“標準問句—答案”對。系統允許用戶使用自然語言提問,在獲取問句后,通過檢索問題庫,向用戶返回準確或相近的答案。系統提供三種檢索答案的模式:①精確檢索,如果用戶提出的問句與標準問句完全相同,或它們在語義上很相似(相似度≥70%),則系統返回標準問句對應的答案;②模糊檢索,系統返回與用戶提出的問句在語義上有一定關聯(相似度≥40%)的標準問句對應的答案;③全面檢索,系統返回相似度大于零,且相似度較高的幾個標準問句對應的答案,并將問題提交專業教師進行解答。

3 用戶分類
系統共有管理員、教師、學生和匿名用戶4種,每種用戶擁有不同權限。管理員用戶擁有最高權限,可以對用戶、問題庫及詞典進行管理。教師用戶可以進行在線答疑,對問題庫、專業詞典進行簡單維護。學生用戶可以使用自動答疑和在線答疑功能。匿名用戶只能使用自動答疑功能。
二 自動答疑系統的主要算法
1 中文自動分詞
系統采用基于詞典的字符串最大匹配分詞法。因為用戶問句中的疑問詞短語和專業詞匯對問題檢索非常重要,所以采用疑問詞短語和專業詞匯優先切分的原則,并將詞典分成疑問詞典、專業詞典和通用詞典。首先,用疑問詞典和專業詞典將問句切分成疑問詞短語、專業詞匯和待切分子串的序列S。然后,分別用正/逆向最大匹配法結合通用詞典對S中每個待切分子串進行切分。當出現切分歧義時,使用最小切分原則[1]進行確定,選用切出詞數少的切分方案。若存在切分詞數相同的歧義切分,則根據詞頻消除歧義。對于一個歧義片段,設一種切分結果為M=M1M2…Mn,另一種切分結果為N=N1N2…Nn,分別計算它們的頻率積fq(M)=f(M1)×…×f(Mn)和fq(N)=f(N1)×…×f(Nn),并選用頻率積大的切分結果,其中f(W)是詞匯W在某個大規模語料庫中出現的頻率。當詞頻消歧仍不能排除歧義時,優先選用逆向最大匹配法的切分方案。
2 關鍵詞提取與同義詞變換
問句包含的關鍵詞描述了問句的主要語義。除了關鍵詞,問句一般還包含若干檢索意義不大的停用詞[2],如“的、呢、嗎”等。因為問句通常比較簡短,其中包含的詞匯較少,所以系統把問句中標點符號和停用詞之外的詞匯作為關鍵詞。
如果問題庫中存在和用戶提出的問題相同(近)的問題,但其標準問句中的關鍵詞與用戶問句中的關鍵詞不相同,并且它們是同(近)義詞,則直接用于檢索會降低檢索的正確率。例如:用戶問句X為“算法的定義是什么?”,問題庫中對應的標準問句Y為“算法的概念是什么?”,由于X中使用“定義”,Y中卻使用“概念”,所以需要對它們進行同義詞變換。同義詞變換需要使用同義詞典,可以在《同義詞詞林》的基礎上構建同義詞典?!啊锻x詞詞林》收錄了近7萬詞,將詞語分為12個大類,94個中類,1428個小類,小類下面再根據近義原則劃分為詞群(或原子詞群),每一個詞群(或原子詞群)以一個標題詞命名”[3],如:詞群“定義、概念、界說”的標題詞是“定義”。對關鍵詞進行同義詞變換,就是利用同義詞典,將關鍵詞替換成對應詞群(或原子詞群)的標題詞,如:將“算法/概念/是什么”變換為“算法/定義/是什么”。
3 建立候選問題集
建立候選問題集的目的是縮小查找范圍,使后續處理都在候選問題集這個相對較小的范圍內進行。[4]問題庫中每個“標準問句–答案”對是六元組Q=
設用戶問句關鍵詞序列為K,待建立的候選問題集為QL,建立候選問題集的過程為:①根據K分別建立疑問詞短語集合A和專業詞匯集合B;②根據A建立疑問詞類型集合C;③根據B建立專業詞匯知識點集合D;④根據C和D分別從問題庫檢索出問題集合Q1和Q2,合并Q1、Q2成為QL。
4 問句相似度計算[5] [6]
自動答疑系統從關鍵詞相似度、問句長度相似度和關鍵詞詞序相似度3個方面,計算用戶問句與候選問題集中標準問句的相似度,并根據檢索模式抽取相似度符合要求的答案集。
設有用戶問句X和標準問句Y,L(X)表示X的關鍵詞數,L(Y)表示Y的關鍵詞數,S(X,Y)表示X與Y的相同關鍵詞數,Sim(X,Y)表示X與Y的問句相似度,則有1≥Sim(X,Y)≥0,1表示X與Y完全相同,0表示它們完全不同,Sim(X,Y)越大表示它們越相似。
(1)關鍵詞相似度
X與Y的關鍵詞相似度KSim(X,Y)可用公式⑴計算。
KSim(X,Y)=2×S(X,Y)/(L(X)+L(Y)) ⑴
(2)問句長度相似度
X與Y的問句長度相似度LSim(X,Y)可用公式⑵計算。
LSim(X,Y)=1-abs(L(X)-L(Y))/(L(X)+L(Y)) ⑵
(3)關鍵詞詞序相似度
Y與X的相同關鍵詞在X中的位置構成一個自然數序列,用Seq(Y)表示,Rev(X,Y)表示Seq(Y)的逆序數,MaxRev(X,Y)表示數量為S(X,Y)的自然數序列的最大逆序數。X與Y的關鍵詞詞序相似度OSim(X,Y)可用公式⑶計算。
OSim(X,Y)=1-Rev(X,Y)/MaxRev(X,Y)⑶
若X與Y沒有相同關鍵詞,則OSim(X,Y)取0。
(4)問句相似度
Sim(X,Y)可用公式⑷計算。
Sim(X,Y)=λ1×KSim(X,Y)+λ2×LSim(X,Y)+λ3×OSim(X,Y)⑷
其中:λ1+λ2+λ3=1,且λ1≥0.6≥λ2≥λ3>0比較合適,例如λ1=0.6,λ2=0.2,λ3=0.2。
三 基于Visual-Prolog的實現技術
1 開發工具及運行平臺
用Visual-Prolog7.1開發自動答疑模塊(該模塊實現了中文自動分詞、關鍵詞提取與同義詞變換、建立候選問題集和問句相似度計算);用Visual Studio 2005開發基于ASP.NET2.0的在線答疑、用戶管理、知識庫管理和使用幫助模塊;用SQLServer2005存儲問題庫;用IIS6.0作為WEB服務器。
2 知識庫的構建
自動答疑系統的知識庫包括語言知識庫和問題庫,語言知識庫包含進行自然語言處理的語言知識。語言知識庫主要由通用詞典、專業詞典、疑問詞典和同義詞典四個部分組成。因為自然語言處理需要頻繁地訪問語言知識庫,對訪問速度要求很高,且語言知識在系統運行期間一般不需要人工維護,所以語言知識庫的構建采用Visual-Prolog 7.1內置的鏈式數據庫(ChainDB)技術,該技術用B+樹管理數據,查詢性能很高。采用SQL Server2005構建問題庫,并通過Visual-Prolog的ODBC技術進行數據訪問。
3 主要數據結構
定義論域wc、wi和wl,分別表示詞性、詞條和分詞方案。
domains
wc=string*.
wi=wi(string V,integer F,wc C)./*V代表詞,F代表詞頻,C代表詞性*/
wl=wi*.
定義論域qi和ql,分別表示候選問題和候選問題集。
domains
ql=qi*.
qi=qi(integer ID,string Q,string_list K)./*ID代表候選問題在問題庫中的唯一標識,Q代表標準問句,K代表問句關鍵詞*/
定義論域ai和ail,分別表示抽取的答案和答案集。
domains
ail=ai*.
ai=ai(string Q,string A,real XSD)./*Q代表標準問句,A代表答案,XSD代表Q與用戶問句的問句相似度*/
4 系統的主要謂詞
編寫自動答疑系統四個主要算法對應的謂詞,謂詞聲明及說明見表1。

5 Web應用程序的構建
Visual-Prolog7.1支持CGI和ISAPI兩種Web應用程序的開發,其中ISAPI的運行性能較高但調試較麻煩,而CGI調試較方便但運行性能相對較低。自動答疑系統以CGI應用程序形式實現。CGI應用程序是一個控制臺程序,與普通控制臺程序不同的是需要進行一系列初始化。簡化后的主程序如下:
run():-
console::init(),
IS=console::getConsoleInputStream(),/*獲取控制臺輸入流*/
IS:setMode(stream::ansi(ansi())),/*設置輸入流模式為stream::ansi(ansi())*/
OS=console::getConsoleOutputStream(),/*獲取控制臺輸出流*/
OS:setMode(stream::ansi(core::ansi)),/*設置輸出流模式為stream::ansi(ansi())*/
L=toTerm(environment::getVariable(
\"CONTENT_LENGTH\")),/*由環境變量CONTENT_LENGTH得到客戶端請求字符串長度*/
RequestString=IS:readString(L),/*讀取客戶端請求字符串*/
urlDecode(RequestString,Request),/*對RequestString進行URL解碼,得到Request,算法參見文獻[7]*/
core:string(Q)=namedValue::tryMapLookup(
Request,\"qt\"), /*獲取網頁表單提交的問句qt */
core::string(M)=namedValue::tryMapLookup(
Request,\"md\"),/*獲取網頁表單提交的檢索模式md*/
stdio::write(\"Content-type:text/html\\
\"), /*開始一個頁面生成*/fc(Q,W),
getKW(W,K),
getQL(K,QL),
calcXSD(K,QL,A),
showAnswers(A,M), /*根據檢索模式M輸出答案*/
stdio::write(\"\"),/*結束一個頁面生成*/
succeed().
四 測試分析
在千兆帶寬的校園局域網中,用40個客戶端并發訪問自動答疑系統,從準確率和響應時間兩方面對系統進行測試,測試數據(部分)見表2,系統返回答案的界面如圖3所示。

由表2可得:⑴系統的答疑準確率較高。若表述基本一致,則能返回準確答案;若表述存在較大差異,但語義基本相同,則能檢索到相近答案。⑵系統的響應時間較短。

五 結論與今后的工作
自動答疑系統利用自然語言處理技術分析用戶提出的問題,自動返回準確或相近的答案,提高了遠程答疑的效率和質量。闡述了自動答疑系統的總體設計、主要算法和基于Visual-Prolog的實現技術。測試結果表明,系統的答疑準確率較高,響應速度較快。
今后工作的重點是在現有基礎上完善系統詞典,改進算法,并解決詞性標注中的兼類詞問題,進一步提高系統性能。
參考文獻
[1] 王曉龍,王開鑄,李仲榮,等.最少分詞問題及其解法[J].科學通報,1989,(13):1030-1032.
[2] 化柏林.知識抽取中的停用詞處理技術[J].現代圖書情報技術,2007,(8):48-51.
[3] 江銘虎.自然語言處理[M].北京:高等教育出版社,2006:117.
[4] 秦兵,劉挺,王洋等.基于常問問題集的中文問答系統研究[J].哈爾濱工業大學學報.2003,(10):1119-1182.
[5] 崔桓,蔡東風,苗雪雷.基于網絡的中文問答系統及信息抽取算法研究[J].中文信息學報.2004,18(3):24-31.
[6] 周法國,楊炳儒.句子相似度計算新方法及在問答系統中的應用[J].計算機工程與應用.2008,44(1):165-178.
[7] 黃東軍.CGI程序設計中的URL編碼與解碼[J].微型機與應用.2000,(9):18-19,30.
[8] Prolog Development Center(PDC).Visual-Prolog online document[EB/OL].