前言
對於 chatbot,現在學界更流行的實現方式是基於深度學習和強化學習,比如seq2seq模型,具體可參考前面的文章《深度學習的seq2seq模型》。
而對於工業界,直接用 seq2seq 模型來實現端對端的還是幾乎沒有的,但在很多模組的處理也開始引入深度學習,除此之外也會嘗試使用強化學習。目前來看能工業界使用的更多還是傳統的基於搜尋的實現,本文來看看如何設計基於搜尋的問答系統。
關於問答系統
問答系統主要就是實現使用者提問,然後返回一個最合理的回答。問答系統與一般的搜尋引擎不太一樣的是它允許使用者用自然語言進行提問,理論上如果要做出較好的效果都需要涉及到自然語言處理。
核心思想
收集現有的所有問答集,根據使用者的提問,由計算機負責解析問題的語義並從問答集中檢索出最相關的問答對應的答案返回給使用者。另外,為了使系統更具魯棒性更加友好,我們可以選出最相關的前N條問答組成候選集,另外再提供一定的機制在使用者不滿意結果時向其提供候選集的其他答案。
核心模組
- spider,負責網路爬取相關的問答併入庫到資料庫。
- 知識庫,業務最專業最準確的知識來源。
- 人工新增,支援人工新增新問答。
- QA資料庫,用於儲存所有的問答集,可以由兩張表存放,問題表和答案表,通過 id 關聯起來,並且答案表中也可儲存答案相關的文件名稱,後面可作為答案附件。
- lucen,用於將資料庫相關問答集建立索引,注意這裡只需建立問題的索引,因為根據使用者檢索候選集時只需根據問題來檢索。
- 相似性工具,對若干個問答候選集進行評分,選出與使用者提問最相似的那個問題對應的答案,返回給使用者。相似性可以用word2vec或編輯距離。
-------------推薦閱讀------------
跟我交流,向我提問:
公眾號的選單已分為“讀書總結”、“分散式”、“機器學習”、“深度學習”、“NLP”、“Java深度”、“Java併發核心”、“JDK原始碼”、“Tomcat核心”等,可能有一款適合你的胃口。
歡迎關注: