06.08 如何設計一款垂直領域的對話型機器人?

如何設計一款垂直領域對話機器人,首先要了解一下對話型機器人要解決問題。

其實主要有兩方面:

第一是聽得懂,主要是講的機器人要能夠理解用戶的語言——也就是自然語言理解。在這方面,已經很成熟,已經可以做到情緒的識別。

第二方面就是答得出,就是說在聽懂的基礎上,我能夠給出最準確的答案,這就需要有一個龐大的語料做儲備,或者說答案做儲備。

作為一款垂直領域的機器人,可以解決兩個問題:

第一,我可以預測到用戶問的問題方向。

第二,我的語料可以做的非常的精細精密,能夠做到問不漏,可以提升很大的用戶體驗。

所以說垂直領域的機器人搭建更簡單,也更實用。

對話型機器人包括哪些模塊

1. 問題的語義理解

問題的語義理解的過程包括兩個子任務:意圖識別和實體抽取。

意圖識別 (intention classification):用來識別用戶所提問題的意圖,也就是用戶希望做一件什麼事。

本文只是簡單的闡述一下意圖分析的典型思路和方法,並實現一個基本的意圖分類器。因為本文主要討論垂直領域對話機器人的設計,所以用戶的問題意圖限定在了特定領域,因此答案的結果的準確率也會很高。

意圖分類:做意圖識別第一步是要做意圖分類,根據所在領域,蒐集歸納數個意圖。併為意圖命名。

數據準備:意圖識別離不開數據,搜索領域的意圖識別用到的數據通常就是用戶的搜索日誌了。一般一條搜索日誌記錄會包括時間-查詢串-點擊URL記錄-在結果中的位置等信息。對話領域則需要批量的意圖語料。

特徵提取:特徵的提取是為了方便進行分類計算,每一個特徵都具備一定的權重,表明它的權值。通過特徵的權值,就能夠確定句子屬於哪一個類別。這裡我們將每一個字作為一個特徵,1/(字出現的總次數)作為權值,並構建字典。

模型準備:模型準備需要的是建立分類模型。這裡我們通過給每一個特徵賦予一個得分,然後將句子中每一個字的特徵得分進行相加,然後就可以得到句子在某一個類別下特徵的總得分,從而能夠對句子進行分類。

訓練模型:在完成特徵任務後,接下來就是選擇合適的分類器進行訓練了,因為意圖識別可以看作是一個多分類任務,所以通常可以選擇SVM、決策樹等來訓練分類器。

完成以上工作後基本上一個意圖識別分類模型就建立好了,接下來就是對已識別語句的實體進行抽取。

實體抽取 (entity extraction):用於提取用戶對話中所提供的和意圖相關的參數(實體),例如:時間、地點等。

要想實現實體抽取,主要分為兩步:

系統分詞:現在都有一些開源的分詞工具,可以實現很高精度的分詞效果,如:jieba分詞,它的全模式就是把句子中所有的可以成詞的詞語都掃描出來,速度非常快。

信息抽取:利用jieba分詞後我們得到了切分好的短詞信息,將該信息輸入到語義識別模型中就可以實現機器人“聽得懂”的功能了。

舉個例子:智小保是一款保險行業的機器人,主要回答保險相關的問題。

那麼可以如此定義意圖和實體:

Case1:推薦一款小孩的醫療險給我?—— 意圖:保險推薦;保險類型實體:醫療險,被保人實體:小孩 。

Case2:e生保的產品特色是什麼?—— 意圖:保險產品瞭解;瞭解維度實體:產品特色,產品實體:e生保。

垂直領域的對話機器人就可以根據該領域所涉及的所有問題進行聚合,梳理若干意圖,根據意圖拆分實體,意圖越具象,實體顆粒度越細,回答越準確。

2. 知識庫構建

知識庫分為聊天話語庫和聊天人屬性庫,聊天話語庫由多個聊天話語記錄構成,每個記錄包含一條聊天話語、該聊天話語的語境信息、該聊天話語的多個回覆話語及每一回復話語的限制條件集合。

聊天人屬性庫由多個聊天人屬性記錄構成,每個記錄包含聊天人的靜態屬性和動態屬性。聊天機器人都含有一個聊天知識庫以及對話控制模塊,聊天知識庫就像聊天機器人的大腦,存儲著回覆用戶輸入的聊天知識,而對話控制模塊則用於控制對話進程。

對於垂直領域的對話型機器人,知識庫搭建則更為垂直。一般分為以下幾個步驟:

(1)數據獲取

人工維護錄入數據:非標性答案。

第三方開放平臺接口數據,例:金融股票行業對於股票實時信息有相應的API接口。

垂直爬蟲爬取數據:所謂垂直爬蟲,通俗的講,可以認為是針對某一領域或行業的爬蟲。網上的數據畢竟是錯綜複雜的,用戶所需獲取的信息是需要有針對性的。比如:保險行業可以去百度貼吧保險吧等類似垂直領域爬取數據。

數據商城購買數據。

(2)數據清洗

網路獲取到的數據畢竟是雜亂無章和帶有很多噪點,無法拿來直接使用,必須經過清洗後才能使用。

清洗基本也分為三個方向:

文本挖掘:從海量文本中提取出有用的信息。

協同過濾:協同過濾是利用集體智慧的一個典型方法——也就是說的少數服從多數。對數據中權重大的做優先級排序,類似今日頭條的推薦系統。

深度學習:目前深度學習做對話系統,主流的核心算法是seq2seq,之後還有很多優化算法,如使用beam search解決前k個字符概率乘積最大、考慮低頻回覆的MMI,兼顧問題前後字符的信息——attention mechanism,解決連續多輪的問答HRED,同時使用reinforcement learning也能在一定程度上解決多輪問題。

總的來說,這些優秀的算法在一定程度上確實解決了問題,不過你還是得有合適的數據(如多輪問答數據)才能測試、評估、改進等。

(3)搭建知識庫

知識庫的類型又有結構化和非結構化之分,非結構化數據庫的使用涉及複雜的數據分析、挖掘技術,在實現的效果和性能等方面都很難滿足聊天機器人的要求,因此通常採用結構化的知識庫。

例如:對於一個機器人對話系統,你說一句話,語音轉成文字之後,根據文字的分詞、句法、語義分析結果,去對應的語言庫中,尋求或自動生成最合理的應答。

以保險行業為例來說:需要搭建。

通用知識庫:所有保險名稱及專屬名稱解釋;

保險產品知識庫 :所有保險產品,及相關維度信息;

保險產品推薦邏輯庫:每款保險產品的適用地區、人群等相關維度信息;

保險公司庫:所有保險公司相關信息;

核保知識庫:針對所有情況的核保信息等。

在完成了上述工作後,一個可以理解人類語言的垂直領域的聊天機器人就可以為顧客服務了。但是這僅僅是可以服務,具體服務效果還需後期的驗證,對於對話型機器人產品,其實這只是完成了30%工作,後續的標註、糾偏、訓練才是重點。這便是機器人深度學習。

你懂了嗎?

如何設計一款垂直領域的對話型機器人?


分享到:


相關文章: