中文檢索式問答機器人模型

檢索式問答機器人最典型的一個例子就是FAQ客服機器人。

什麼是FAQ呢?

簡介:在智能客服的業務場景中,對於用戶頻繁會問到的業務知識類問題的自動解答(以下簡稱爲FAQ)是一個非常關鍵的需求,可以說是智能客服最爲核心的用戶場景,基本上來說,就是用戶使用智能客服系統,提問了一個業務知識的問題,系統需要在知識庫裏找到最合適的那一個答案,且一般來說,知識庫都是人工事先編輯好的。
例子:比如10086的在線智能客服,用戶提問“如何查詢話費”,那系統可以自動給出一個對應的知識“請您向10086號碼發送‘HF’短信,即可查詢當前話費”
特點

  1. 在這個場景中,知識的域是垂直封閉的,並不是開放的,只取決於開發這個智能客服的公司或者個人的需要支持的業務範圍是多大。
  2. 由於是垂直領域,知識的變化並不會過於頻繁,且知識庫其實一般都是一個已經編輯好的庫,一般由問題與答案這樣的pair對組成,而不是那種很複雜的圖結構或者關聯表結構。如“如何查詢話費”與“請您向10086號碼發送 ‘HF’短信,即可查詢當前話費”這樣的一個文本pair對構成。一般來說pair對的數量都是幾十到幾百幾千不等,不會特別大。
  3. 回答相對簡單,不需要太多的推理和解析,只需要知道是知識庫裏的哪一個回答即可,某種程度上可以看做是一個匹配問題甚至是分類問題。

目前比較典型的做法就是:召回+排序

我們從模型的角度來分析:

用傳統NLP模型捕捉詞形、淺層語義信息 -- 做召回,縮小搜索空間
用深度模型捕捉句子結構、深層語義信息 -- 對召回的item做rank

召回模型:

  1. 分詞、詞性修正:對詞典做定製,比如“xxx”等詞在本場景中應該是一個專有名詞,需要修改這些詞的分詞和詞性
  2. 去停用詞:取常用停用詞和語料中的一些高頻詞、保留“你、我”等一些在此場景中有實際意義、有區分度的代詞等
  3. 相關性擴展:當搜索“XX漂亮”時應該也把“XX美麗”等詞形上不同但語義相近的問題召回,可以人肉用近義詞典做細粒度定製,或者用word2vec找距離相近的詞,雖然嚴格上不是“近義詞”、而是“相關詞\關聯詞”,比如它認爲“男人”和“女人”相近
  4. 轉爲BOW:把原問題轉爲高維稀疏詞頻向量
  5. --用tfidf weight代替詞頻做爲詞袋中各詞對應的value(問題比較短的情況下)
    --用lsa\lda等映射到低維空間(問題比較長,且不在乎信息損失)
  6. 檢索:當用戶提問時,通過以上五個步驟把問題映射爲一個高維稀疏向量,然後從問題庫中召回與其cosin距離最近的n個問題
    -- 問題: 若每次用戶提問時都與知識庫中幾十萬個高維稀疏向量中算cosin 是不現實的、時間複雜度不可接受
    -- 解決方法: Locality Sensitive Hashing(LSH)這種hash可以把距離很近的數據以較高的概率映射成同一個hash值
    -- 選擇:
    1. sklearn中的LSHForest,但它檢索慢、recall 低
    2. Facebook research的pysparnn,但它也有個缺點:建index慢,好在建index是一次性的、建好後用cPickle持久化,以後用時load就好了

語義模型:

  1. encoder: 把各問題encode成低維向量
    模型: Siamese LSTM + attention, IARNN等
  2. 相似度計算:dot,cosine等

目前存在的一些問題以及解決方案:

1.  詞語多義性問題
導致問題:無法正確識別問題,導致答案召回準確率降低
場景:例如“中國銀聯”=“銀聯”,“中國農業銀行”=“農行”
解決方法:構造詞語對等列表或者詞語相關性表
一、詞義相同的兩個詞可以以較高的關聯性進行識別,從而提高答案的準確性
二、詞義較爲相近的兩個詞關聯,從而提高相近答案的輸出(建議的形式輸出,例如我們沒有發現XXX的答案,建議查看YYY的答案),提高用戶對於會話智能的認可

2. 不正常的用戶輸入問題
導致問題:影響問題識別
場景:很多用戶是因爲存在問題或者發生故障來尋找客服服務的,本身帶有消極的情緒,例如憤怒、着急、失望等。因此句子輸入可能會帶有某些包含情感的詞語,比 如:他媽的等
解決方法(提升用戶體驗): 一、感知用戶的情緒並給予安慰; 設置安慰詞表
二、建立“情感”詞表,替換原詢問句
三、定期數據統計,跟蹤出現用戶失望的會話,並從設計和數據方面進行改善

3. 如何準確捕捉問的類型
導致問題:無法將用戶意圖正確分類,就無法將查詢輸入系統
場景:用戶會問“爲什麼?”,“是什麼?”,“怎麼做?”以及這三個類型的引申詞,如“如何?”等
解決方法
一、先對用戶意圖進行大概的分類
二、”是什麼?“之類的問題考慮轉向KB-QA,”爲什麼“,”怎麼做“轉向FAQ

自己實現的一個基於檢索的問答小demo:

chat

我的github地址

如果覺得我的工作對您有幫助,請不要吝嗇右上角的小星星哦!歡迎Fork和Star!也歡迎一起建設這個項目!
有時間就會更新問答相關項目,有興趣的同學可以follow一下
留言請在Issues或者email [email protected]

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章