張華 李超
摘? 要: 針對Java課程課堂答疑不能及時響應的問題,提出了課程智能問答系統模型。通過自然語言處理、信息關聯、信息檢索等技術實現了答疑問題的分析、轉換與處理,并通過實例驗證了模型的可行性。
關鍵詞: Java課程; 答疑; 智能問答系統; 自然語言處理
中圖分類號:TP311? ? ? ? ? 文獻標志碼:A? ? ? ? ?文章編號:1006-8228(2018)12-12-04
Abstract: Aiming at the problem that the Q&A in the Java course can't respond in time, the model of intelligent question & answer system is proposed. The analysis, transformation and processing of the Q&A questions are realized through natural language processing, information correlation and information retrieval, and the feasibility of the model is verified by an example.
Key words: Java Course; answer questions; intelligent question & answer system; natural language processing
0 引言
近年,云計算、大數據等高新技術也有了重大突破[1]。相比之下,Java課程答疑還是遵循傳統模式,即老師在上課時給出知識點及一些前沿動態,而學生的大部分問題都是在課下產生的,又不便隨時聯系老師,所以學生的疑問往往得不到及時解答。
本文提出一個Java課程智能問答系統,實現了問題分析、問題轉化、信息檢索、答案返回四個子模塊。問題的答案在系統數據庫中檢索或動態解析搜索引擎頁面可以獲取,并且針對不同類別的問題,設計不同答案格式,整個問答交互的響應時間不超過1s。
1 智能問答系統現狀
在自然語言處理技術的發展過程中,國外開發了一些比較成熟的英文智能問答系統,比如Start、AskJeeves自然語言檢索系統、AnswerBus系統等[2]。國內對于智能問答系統也有很多地研究并應用到實際中,國內普遍的實現方法可以分為三類。第一類是將用戶輸入的問題構建一個同類問題集合,然后通過計算句子語義的相似度,在建立的問題集合中找到相似的問題,最后將該問題的答案返回給用戶;第二類是將問題和答案的關聯預先設定在知識庫中,通過對問題關鍵字的匹配,直接返回該問題的答案給用戶;第三類是通過對問題進行分詞處理,在分詞結果中提取問題關鍵字,通過關鍵字再結合全文檢索引擎匹配結果返回給用戶。這三類方法主要用在開放域智能問答系統,但對于限制域的智能問答系統還不能做到精準返回結果[3]。
2 需求分析
通過對該Java課程智能問答系統的研究內容進行分析,結合目前國內、外的技術發展的實際現狀,系統的功能性需求如下:
⑴ 用戶可以通過網頁以自然語言語句提問,并返回結果,整個過程在會話式的人機交互界面完成;
⑵ 在進行結果檢索時,能夠實時在網絡上獲取結果返回;
⑶ 在返回結果時,多條結果只顯示一條,其余信息以模態對話框的方式顯示,并且提供翻頁功能。
3 體系結構設計
本系統采用MVC模式開發,在服務器端搭建ICTCLAS運行環境[4]。處理用戶提交的自然語言的問句,然后返回問題對應的答案。服務器端后臺另外一個功能就是自動導入數據文件,然后通過實時分析維護問答數據庫,在自動處理數據的基礎上提供手動維護功能,系統體系結構如圖1所示。
本系統體系結構主要有數據采集層、文件管理層、數據處理層、數據持久層、數據交換層、數據顯示層。數據采集層主要通過互聯網采集Java問答數據,包括網頁、論壇、博客、論文等信息,并將這些信息整理后按特定結構打包成txt文件;文件管理層主要負責將數據從采集平臺轉移到數據處理層等待處理;數據處理層則對Java問答數據進行識別、關聯、特征提取后,將數據存儲在問答數據庫中;數據持久層是整個問答系統知識庫模型。數據交互層分為數據交換格式和數據傳輸協議,本系統數據交換格式使用JSON,數據傳輸協議采用TCP/IP;數據顯示層為用戶提供操作界面,一方面是用戶輸入問題語句的入口,另一方面則是問答服務返回結果的出口。
4 功能結構設計
系統功能主要實現自動問答,而在限制域的自動問答系統的應用中,主要包含問題分析、信息檢索、答案抽取、用戶點評四個步驟,本系統在實際需求背景下對常規問答系統中的自動問答功能模塊進行重新設計,主要包括問題分析、問題轉化、信息檢索、答案返回四個模塊。系統功能結構如圖2所示。
從圖2中可以看出,問題分析模塊主要通過自然語言處理理解用戶檢索意圖,處理步驟包括問題預處理、分詞、問題分類、關鍵詞抽取;問題轉換模塊利用問題分析產生的中間結果生成對應的SQL語句,對于無法生成查詢語句的問題分析結果需要生成在網絡獲取相關答案的接口,生成的接口將在信息檢索中調用;而信息檢索的主要功能則是執行前述SQL語句封裝結果,特殊地對于無法在問答數據庫中查詢到答案的問題,將調用在問題轉換中生成的接口解析結果;答案返回中主要對檢索到的答案內容進行統一格式處理,其中包括用戶操作異常提示。
5 功能模塊設計
主要有問題分析、問題轉換、信息檢索、答案返回四個功能模塊。
5.1 問題分析
問題分析是理解用戶檢索意圖的核心處理步驟。主要是將用戶問句進行分析之后,把結果封裝在Question對象中。問題分析算法的核心是自然語言處理技術,在本系統的實現中主要用到的是ICTCLAS,自然語言處理技術主要應用在中文分詞、詞性標注、命名實體識別、用戶自定義詞典、關鍵字提取等環節。
在分析用戶問題時,通過以下五個步驟完成。
⑴ 將自然語言進行分析并轉化到數據結構question中,同時將問題定性為統計或查詢。如果碰到“總共”、“一共”、“數量”、“多少”類型的詞語就說明為統計型類型,將question.type設為count,如果不含有這種詞語,將question.type設為query。
⑵ 接下來就是從問題中識別出范圍屬性,例如:知識點、熱點、崗位、視頻、薪資等等,然后分別將其存入到對應范圍變量中,如:question.knowledge、question.hot、question.job等,然后定義用戶字典信息,添加一些特定的表示數據源的詞語包含其中,然后通過分詞確定問題所要查找的數據源,比如在用戶字典中添加“大牛”,“大牛信息”,“大牛簡介”就可以確定查找的數據源為“expert”,又比如“崗位”,“崗位信息”就可基本上確定數據源為“job”,同樣的方式確定其他類型的數據源。
⑶ 采用與上面的同樣的方式確定用戶查詢的字段名,比如輸入“姓名”就可以確定字段為“expert_name”,“大牛興趣”確定查詢字段為“expert_interesting”。
⑷ 去掉句子段落之間的冗余字段,如標點符號、連詞等等。
⑸ 確定關鍵詞,查詢的關鍵詞就是字段對應的信息,比如大牛姓名為“張三的信息”,關鍵詞就是其中的“張三”,獲取的方式也是通過關鍵字提取算法和特定的位置進行提取。
經過上述處理之后,問題分析完畢,但是問題還沒有完全解答,只是得到了一個中間結果,還需要將問題進一步分析得到最終答案。
5.2 問題轉換
在這個模塊中,把問題分析的結果進行處理,將得到的中間結果組裝成可以進行檢索的SQL語句,問題轉換的處理流程經過以下六步處理就可以生成相應的SQL語句。
⑴ 明確問題分析只是為了查找數據,并不是為了增加數據和修改更新數據,因而直接初始化sql為“select”。
⑵ 判斷問題的數據源(source)是否為null,如果為null,說明數據源不存在,這樣就超越本身數據所能查找的領域,就將sql初始化為null,然后返回,此時后續采用的辦法為從網絡中獲取需要的數據。
⑶ 確定查詢的屬性,如果“type”為null說明查詢屬性不存在,默認查詢所有,確定為*,如果存在,則繼續判斷查詢類型為統計型還是查詢型,如果為統計型,就確定為“select count”,同時判定attr屬性是否為空,如果不為null,就確定sql語句為“select count(attr)”,如果不存在,就確定為“select count(*)”,同時如果不是統計型,就確定為“select attr”。
⑷ 確定數據源,由于數據源前面已經進行了判空運算,所以直接確定sql語句為“select XXXX from source”。
⑸ 判定是否需要與數據表進行連接運算,判斷屬性不為null就與相應數據表進行連接運算。
⑹ 判斷是否有where條件,如果屬性信息有兩個不為空,則增加where條件,完成question向sql語句的轉化。
5.3 信息檢索
5.3.1 一般問題答案
對于一般問題答案,可以在專家數據庫中檢索到,因此只需將答案內容封裝成JSON對象即可。
5.3.2 網絡答案獲取
對于網絡答案,需要經過以下五步處理。
⑴ 經過問題分析之后得到特定數據結果question,接著判斷問題為何種類型,如果為解釋型,則采用解釋型問題分析流程,如果是概念型或者其他類型,就采用概念型流程。由于此兩種流程基本上相似,因此下文只對其中的一套流程進行說明,若有不同之處再詳細說明。
⑵ 獲取關鍵字的主題信息,然后對其進行編碼,此處編碼的作用是將漢語進行編碼,因為在百度百科和百度知道中抓取信息候傳入參數是經過編碼的,因而此處必須對檢索信息進行編碼。
⑶ 經過編碼之后就將百度百科或百度知道的鏈接與當前編碼之后的參數值進行組合,組合的鏈接將作為獲取數據的URL地址。
⑷ 通過該URL地址獲取文檔對象,獲取時有可能拋出異常,這里又有三種不同的情況:0代表網絡錯誤,1表示網絡正常且正確獲取數據,2代表網絡正常但無答案,這里兩套流程請求的URL地址不同,解釋型請求的是百度知道,其他兩種類型請求的是百度百科。
⑸ 對獲取的文檔對象進行格式分析,之后獲取指定問題的答案并返回。
5.4 答案返回
將信息檢索結果和問題分析中的問題分類結果返回給用戶,在返回給用戶之前將答案內容進行統一格式化處理。特別地,錯誤信息直接當作字符串答案類型處理,具體錯誤描述即為字符串內容。
6 系統實現
主界面用于用戶提問和觀察返回結果。界面布局類似QQ、微信的聊天界面,上部是所有功能的導航欄,下部為自動問答系統的交互界面。如圖3所示。
7 結束語
本文通過對Java課程答疑現狀的分析,結合筆者及所在團隊的教學實踐,提出了Java課程智能問答系統,然后以分詞技術為基礎,將系統劃分為問題分析、問題轉換、信息檢索、答案返回四個模塊,最終通過答疑知識庫返回預期結果,響應時間在1s內,實際使用效果良好。
參考文獻(References):
[1] 羅軍舟,吳文甲,楊明.移動互聯網:終端、網絡與服務[J].計算機學報,2011.34(11):2029-2051
[2] A Bordes,S Chopra. Question Answering with SubgraphEmbeddings[J]. Computer Science,2014.
[3] 王正華,韓永國.自動問答系統設計與實現[J].軟件導刊,2014.9:111-113
[4] 毛先領,李曉明.問答系統研究綜述[J].計算機科學與探索,2012.6(3):193-207