僅代表個體調研結果,非官方素材,內容僅供參考。在此特別感謝小達同學的分享交流。
智能問答實現方案有多種:
問答對、推理問答(知識圖譜)、任務型、閑聊型等,不同的系統(tǒng)實現不同。也可以多個搭配使用,通過判斷用戶意圖或者通過概率等分發(fā)到對應的系統(tǒng)進行回答任務(所以這里還有個意圖識別的過程需要做)。
比如用戶提問 “你好,今天天氣怎么樣”,就可以分發(fā)到閑聊型系統(tǒng)。輸入“新手玩家攻略”,就分發(fā)到問答對或者知識圖譜的系統(tǒng)進行答復。
1、問答對系統(tǒng):
其實就是檢索似問答或者匹配問答,事先擁有QA庫,當用戶輸入問題時,找到QA庫中最相似那個問題,然后將答案回復給用戶進行答復。
問答對系統(tǒng)包含:預處理,召回,相似度計算,排序,答案生成,用戶反饋,模型更新
預處理: 對用戶的請求進行,文字糾錯,同義詞替換等
召回:假如數據庫擁有10w個問題,當用戶輸入一個問題時,如果將該問題與數據庫每個問題進行相識度計算的話,效率很低效。 所以要事先比如從 elasticsearch中粗略的召回100個問題,然后將該問題與這100問題一個一個進行相識度計算,
Es進行召回的時候一般沒有語義,匹配到文字就會召回,所以可以使用Faiss或者annoy工具做向量索引,就能做語義層面的召回了
相似度計算:基于深度學習模型bert或者上步中的Faiss,annoy也可以做
排序:根據相似度排序,拿第一個或者多個回復給用戶
用戶反饋:判斷有沒有實質解決用戶問題,以及用戶的歷史提問,后續(xù)進行模型更新
模型更新:替換QA庫中的問題,或者對預處理,召回,相識度計算進行優(yōu)化
參考鏈接:https://zhuanlan.zhihu.com/p/50799128
2、推理問答:
推理問答是基于知識圖譜的,知識圖譜是一種數據結構,它由三元組實體,關系,屬性組成,形式為<實體, 關系, 實體>或者<實體, 屬性, 屬性值>
<實體, 關系, 實體>
例如:
<麗江,屬于,云南>
<大理,屬于,云南>
<洱海,屬于,大理>
<小秦,住在,麗江>
<小明,住在,大理>
<小明,朋友,小秦>
<實體, 屬性, 屬性值>
例如:
<姚明,國籍,中國>
<姚明,性別,女>
推理問答包含2個主要部分 1:自然語言理解 ?2:知識管理
大概的意思是當用戶提問“麗江屬于哪里。。?!?,自然語言理解模塊(需要提前基于深度學習訓練等)會解析出實體(麗江)以及關系(屬于) 最終轉換成 一條知識圖譜可以理解的查詢語句例如(select province from area='麗江')
比起問答對系統(tǒng),知識圖譜的優(yōu)勢可以推理復雜的問題,比如“小明的朋友小秦住在哪個省份”,知識圖譜會進行一步步推理,先推理出住在麗江,在推理出麗江屬于云南。而問答對的數據庫需要有小明的朋友小秦住在哪個省份這個問題才能解答出。
乍一看問答對實現更簡單,但是如果小明的朋友有1000個,那我就要記錄1千個QA對,如果實體與實體之間關系更復雜 比如 小明的朋友小秦的朋友小紅住在哪,可以想象拿 問答對系統(tǒng)處理的話,數據庫要枚舉非常多的問題,還有一點就是假如哪天小明改名字,要更新數據庫中所有有關小明名字的問答對。
3、任務型問答
任務型問答一般有特定的業(yè)務場景,比如訂電影票,列出所有訂電影票需要的制定成一個模版如:
機器人要在和客戶的對話過程中把這些模版的信息都填充完畢,或者有可以根據用戶地理位置等信息推斷出模版需要添的,等填充完畢后就生成回答回復給用戶
4、閑聊型問答
一般接入開放的接口,自己實現要訓練龐大的語料庫。比如現在的chagpt就屬于生成式的大模型,可以支持閑聊同時具備了一定的推理能力。
總結:
智能問答系統(tǒng)有多種不同實現,可以選擇其中一種,也可以選擇多種根據用戶意圖進行切換
問答對系統(tǒng)適合公司業(yè)務的產品介紹,以及一些專業(yè)領域知識的介紹,無法做困難的解答
推理問答系統(tǒng)構建了實體與實體的關系,以及實體的屬性,可以做兩個實體間距離比較“遠的“的推理