開發一個智能問答機器人(優化篇)


 

上一篇介紹了整個問答機器人的技術架構和特定,本篇着重說下

 

如何讓機器人(看起來)更智能

輸入聯想

使用jquery.autosuggest.js實現的輸入聯想,在輸入2個字后,在5000個問答中基於全文檢索,檢索10條記錄,供用戶選擇。

猜你想問

Chatterbot中也有閾值的概念,例如匹配度低於0.2,可定義為無法回答,但可以額外增加一個閾值,如0.5

當匹配度0~0.2回復無法回答

當匹配度0.2~0.5 回復我猜您想問“XXX”

當匹配度0.5~1回復匹配問題“XXX”

上下文變化

 意圖規則JSON數據格式,prompts為缺失該參數是的返回值,我們可以多設置幾個,再用隨機數獲取,這樣每次與用戶交互的問題都是同樣含義的不同問法,也有助於消除歧義。

{
"rule": [{
"intent": "weather",
"entities": [
{"name":"city","type":"city","required":"true","prompts":["請問查詢哪里的天氣","想查詢哪個城市的天氣"]},
{"name":"date","type":"date","required":"false","prompts":[]}
]
},
{
"intent": "bookhotel",
"entities": [
{"name":"city","type":"city","required":"true","prompts":["請問預訂哪里","想預訂哪個城市"]},
{"name":"checkindata","type":"date","required":"true","prompts":["請問何時入住","預訂酒店的時間"]},
{"name":"checkoutdata","type":"date","required":"false","prompts":[]}
]
},
{
"intent": "bookticket",
"entities": [
{"name":"fromcity","type":"city","required":"true","prompts":["請提供出發城市","從哪起飛"]},
{"name":"tocity","type":"city","required":"true","prompts":["請提供到達城市","到哪落地"]},
{"name":"date","type":"date","required":"true","prompts":["請問預訂機票的時間","想預訂哪天的機票"]}
]
}
]
}

 

如何優化機器人

1.關鍵字

預先定義QA與關鍵詞的匹配關系,如果用戶問題中包含關鍵詞,則檢索與此關鍵詞匹配的QA,縮小查詢范圍,如果同時包含多個關鍵字,則unionQA列表,如果不包含關鍵字則從全部QA檢索。

在問題、答案的基礎上加入關鍵詞列。

初始化時,使用行列轉化,將關鍵字和問題加工成1對1的關系

這樣在算法比對時,僅判斷包含關鍵字的問題,比對數據量從5000變為了幾十條速度提升非常明顯,而且還能略微提高正確率

 

2.緩存

主要設置了2級緩存:緩存5000條問答數據,緩存用戶提出的問題和引擎的答案(如果有人問過的問題,將直接從緩存回復)

3.中文處理

自定義詞典,中文處理也是很重要部分,分詞工具使用jieba,我們將之前標注的關鍵字作為自定義詞典,用來提供特定業務分詞的准確性。

去標點符號,標點符號在問答系統中是非常討厭的,我在訓練和用戶輸入處理時會移除全部的標點符號

去停用詞,“是什么,什么時候,是什么意思,多少錢,有沒有,更有趣,更有甚者,又為什么,有問題嗎,有問題么”等等,這類詞在用戶提問中經常出現,卻沒有實際意義,分詞后將這類詞屏蔽。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM