歡迎來到我們的第二節課,對話系統專業術語科普

我們之前說過要搭建一個對話系統,在對話系統中有很多非常專業術語。

今天我會把常用的術語給大家做一個解釋,同時介紹一下他們在什麼樣的場景下會被用到和對話系統的評價標準。

單輪對話

簡單來說它就是一問一答,問題用一句話去描述,回答可能用幾句話或者一段文字去回答,不依賴於上下文。

比如我問什麼是經停航班,那機器人就會在它的資料庫裏去尋找什麼是經停航班,並做一個介紹。一般這樣的問答依賴於資料庫,專業一點說是知識庫。機器人從知識庫裏檢索到相似的問題並給出答案。

單輪對話有3個評價指標:

1. 召回率

2. 準確率

3. 問題解決率

召回率等於機器人能回答的問題數量除以總共的問題數量,機器人能回答的數量越高,它的召回率就越高。

如果會話的召回率非常低,通常有2種情況:

  • 1. 我們知識庫裡面的問答對太少,解決辦法就是完善知識庫,塞更多的問答對進去,這樣機器人就會越來越聰明。所以,單輪對話的系統上線之後,我們也是在反覆的迭代優化,讓知識庫裡面的問答對越來越多。
  • 2.相似的問題知識庫裡面有,但由於語義的問題而沒有找到,這種情況下應該去做演算法的優化。同一個問題,比如說我的快遞到哪了,或是我的快遞什麼時候到,大概問的都是查詢快遞的問題,要把它歸類到一個問題,這樣的話叫演算法優化

準確率是機器人正確回答的數,除以問題總數。

準確率並不是閑聊型機器人的指標,但是剛剛說的召回率是閑聊機器人的一個指標,除此之外還有情感,是否有趣等等。

但是對於任務型和問答型的機器人來說,就一定要要求準確率,寧可機器人不回答,也不能回答錯誤。

準確率這一評測指標,在實際中需要人工來標註機器人回答的是否準確。所以場景有的時候會相對比較受限,企業的客服部門通常會使用問題解決率,作為日常工作中對機器人的主要評測指標。

那麼下面我們就看一下,什麼叫做問題解決率

問題解決率等於問題的總數減去轉人工客服的數量,再減去客戶反饋不滿意的問題數量。

這個就不需要人工去標註,機器(系統)能直接衡量出來的,企業需要設置合理的策略,來判斷什麼時候機器人要轉到人工客服。

比如已經檢測到客戶的狀態非常不好了,客戶已經開始罵人了,就一定要轉到人工客服去安撫一下客戶,或者說這個客戶一個問題已經問了三遍了,機器人還沒回答,也一定要轉到人工去回答。

這些都從側面反映出機器人的問題解決率有待提高。

同時企業在客服系統中,應該提供對機器人客服的反饋和打分機制,這樣我們就可以把客戶反饋不滿意的問題數量標記出來,也可以自動的算出這個問題的解決率,進而知道怎麼去進一步提升我們單輪對話的系統。

單輪對話還有幾個難點

第一,識別同一個問題的不同表達方式。我們會發現,在現實生活中的一句話,不同的人有不同的表達方式。如果機器人不夠智能,可能就需要把上圖中左邊這5種問法,一個個的都錄入到我們的知識庫中。

但做的好的機器人,可能只要錄入1個,剩下的它可以通過它的聚類,來知道都是同一個問題。

例如:

  • 我明天去上海出差
  • 我要訂一張去上海的機票
  • 上海明天幾點有航班
  • 去上海,明天的
  • 明天要去魔都出差,求訂票

這個時候,你也要識別出魔都是上海等等。

這是同一個問題的多種表達方式,它其實都等同於,用戶需要訂明天去上海的機票。機器人是否可以準確地識別並且進行回復,識別同一個問題的不同表達方式,這也是一個問題。

第二,就是理解語義的細微差別,處理差異性的問題。我們繼續看這張圖,機器人說:

  • 你能幹嘛?
  • 你幹嘛的?
  • 你在幹嘛?
  • 你幹嘛啊!

這是4種不同的問法。

如果識別不好的機器人,看起來都有「你」、「幹嘛」,都是4個字的,看起來它們應該都是一個意思,但顯然這4句話是完全不同的意思。

你能幹嘛?我們要回答的是:「我可以幫你預定機票和酒店」。

你幹嘛的?他是問機器人是幹什麼的,應該它說:「我是智能訂票機器人」。

你在幹嘛?這個其實,是一種更多偏向閑聊的,應該它說:「我在幫你訂機票」。

你幹嘛啊!這個時候就說明這個用戶已經非常不高興了,應該它說:「對不起,我怎麼了」。

所以我們會發現,語言在敘述中的這些細微差別,因為一個引號或因為一個表達不一樣,語義也是完全不一樣的。

在問句非常類似,但是語義有差別的情況下,是不是能夠匹配到正確的答案,也是來考驗機器人處理單輪對話能力的一個非常難的地方。

我們再來看第三個難點,聚類高頻問題,自動的學習優化知識庫

剛剛我們說了,提高召回率和準確率是需要完善知識庫的,但是如果純靠人工去補充知識庫是非常困難的,如果機器人沒有自主學習能力,那就應了一句江湖話:「有多少人工就有多少智能」。每天不停的補資料庫,最終補資料庫的時間,比回答問題的時間還要長,對企業就得不償失了。

所以這對我們的系統有一個反向的要求,機器人必須要有一種自主學習的能力。它根據所有的歷史對話數據,需要知道哪些數據是類似的,把它進行聚類。自動總結,並且挖掘不在知識庫內的高頻問句,如果這個高頻問句不在知識庫中,機器人或是系統,我們總結出來,人再根據總結出來的這些無法解答的高頻論據進行回答,然後再反向補充到我們的知識庫裡邊。

這樣就會螺旋累積我們的這個單輪對話的系統,有一個很好的效果。但這依然也是相對比較難的,也就是我們的單輪對話的第三個難點。聚類高頻問題,自動學習優化知識庫

多輪對話

介紹完了單輪對話,對應的我們就一定會想到多輪對話。

什麼叫多輪對話,我們和單輪對話的特點進行一個對比,很容易就會知道什麼叫多輪對話。

單輪是一個輪次,每一個輪次是沒有任何關聯性的。而多輪代表的就是多個輪次,每一個輪次是有相互關聯的,所以他要處理不完整的語義情況。

比如說我們這個例子「北京天氣怎麼樣」,回答完了之後,「上海呢?」,它要知道他問的是上海天氣怎麼樣,同時它也能記錄所有的歷史話語,是有一個記憶的功能的。

同樣多輪對話也有一些指標。

1. 多輪對話的第一個重要指標就是任務完成率。

任務完成率等於成功結束的多輪會話數,除以多輪會話的總數。成功結束的會話數越多,任務完成率就越高,也就代表著多輪對話系統的可用性越高。

但是有一點大家要注意,會話成功結束,並不一定意味著問題得到解決,也有可能是客戶沒有從機器人那裡得到需要的答案。通常多輪對話這個時候應該轉到人工策略,如果機器人的會話不能繼續,就轉給人工客戶進行處理。

比如,一個用戶和機器人訂機票,訂到中間他說我要去魔都的,因為機器人一直都沒有理解魔都是什麼意思,不知道是上海,所以不停的提問。

當然,用戶切換了各種方式,在說上海的時候機器人可能也沒有理解,機器人不停的在問:「你要從哪出發?你要從哪出發?」,這個時候就要把問答切換到人工。

2. 多輪對話的第二個指標是定製的難度。

因為多輪對話很多時候就像一個APP一樣,交互第一步做什麼,第二步做什麼是需要定製的,定製的難度決定了多輪對話系統的好壞,也就是多輪對話系統的一個評測指標。

關於定製難度,我們有3點可以說:

  1. 是否提供完整的 API 介面和開發文檔,技術人員能夠快速開發和集成;
  2. 一個普通的工程師是否能夠開發多輪對話模型;
  3. 界面交互體驗是否優秀,是否支持直觀可視化的編輯;

我們知道專業的對話系統架構師非常少,他們薪水要求也比較高,他們懂演算法,懂NLP,懂模型,但是卻不是很理解真實的業務場景,所以這時候系統是不是能讓普通的工程師,甚至一個普通的客服學會使用,是非常重要的。只有這樣,多輪對話系統才能發揮自己的價值。

之前給大家介紹多輪對話的時候,有人會問到這麼兩個問題。

第一個是說,所謂的必要信息,一定要通過與用戶對話獲取嗎?

這是不一定的,比如說我們要做一個機票酒店預定的機器人,如果用戶在公眾號上跟我交流,其實我已經拿到地理位置信息了。這個時候,我就不需要再問他你從哪出發,除非他故意要修改,當然這就是另外一個維度的事情了。所以對話本身包含的信息,只佔總傳遞信息量的一小部分。更多的信息來源於說話人的身份、說話的時間地點等一系列的場景信息。這個就類比於我們和對方交流,我們要知道他的「肢體語言」。

多輪對話的信息獲取方式,也不應該僅限於用戶所說的話,我們要通過系統給的基礎的信息去判斷,這個可以通過和系統CRM打通的方式來完成。

另外,有人也會問,多輪對話一定在形式上表現為和用戶的多次交流,才叫多輪對話嗎?

這個也不是的,只要我們理解了他的語意,以及在其它的渠道獲得的用戶的信息。比如用戶需要訂票,我已經知道了他是從北京出發了,他跟我說要去上海,我可以直接幫他去訂北京到上海的機票。

也就是說,如果用戶的話語中,已經提供了充足的信息或者我從其它的渠道已經拿到了充足的信息,我們就不需要交流太多次數,不一定需要多次交互才叫多輪。

多輪對話的核心是要完成任務,並不是用交互的數量來看是不是多輪對話

多輪對話同樣也有一些難點。

第一個是,要準確的進行語義的理解,它和單輪對話相比更難了,體現在以下三塊:

  • 上下文關聯:第一句說了,「要一張機票去上海」,第二句說「明天」。要能把第一句和第二句的信息關聯起來,最後完成幫助用戶訂票的任務;
  • 支持中途打斷回溯:當用戶從A任務切換到B任務的時候,B任務結束後,機器人要能保存之前的信息,讓A任務繼續快速的完成;
  • 指代識別:假設之前所有的信息機器人都拿到了,在用戶做出選擇後,機器人能夠識別出來用戶的選擇,比如「第二個吧」,「最後一個吧」。 沒有必要一定讓用戶按照機器的標準來輸入。

這些在多輪對話中都會有一些難度。

第二個難點是狀態管理和個性化語言的生成,這個分為兩塊:

  • 用戶畫像管理

機器人應該做出一個千人千面的個性化問答反饋。

比如去諮詢教育機構,在北京的用戶,機器人應該自動給他推薦北京的教育機構。在上海的用戶,機器人應該自動給他推薦上海的教育機構。這樣用戶才會覺得,這個機器人還能辦點事兒,還稍微有點智能。所以,即使相同的問題,不同地域的人得到的答案是完全不同的;

再舉一個例子,比如做電商銷售護膚品或者銷售化妝品,這時候不同的用戶可能在我們的資料庫裏已經有不同的記錄了,有關注膚質的、關注價格的、關注功效的,所以當一個用戶說:「幫我推薦一個化妝品」的時候,機器人也要根據不同的用戶背景,給出不同的推薦;

  • 對話狀態管理

這是多輪對話中非常重要的一環,我也用機票酒店預定的例子給大家舉例。

比如我要訂一張機票,最簡單的可能需要有始發地、目的地,出發時間以及乘機人這四項信息。那麼大概有4*4=16種狀態,當用戶說不同的話的時候,機器人的狀態也是不一樣的。

比如第一個,請幫我訂一張3月28日北京到上海的機票。這個時候我們要引導用戶提供他的身份信息,因為我已經把前三個信息都收集到了。始發地是北京,目的地是上海,出發時間是3月28日。

再看第二個,請幫我訂北京到上海的機票,這個時候機器人就需要同時引導用戶,說出出發時間和乘機人信息。

對話狀態管理也是多輪對話中很重要的一環,或者說是難點之一

意圖識別

接下來,再給大家介紹一個名詞,叫做意圖識別

意圖識別是指:提問者的潛在目的以及他的表達訴求。

你可以把它理解成一句話的目的是什麼。比如【我要訂一張北京到上海的機票】的意圖是訂機票。

什麼情況下需要意圖識別呢?當系統需要將用戶說的話參數化的時候,換句話說,任務型對話需要用到意圖識別。而不需要把用戶說的話參數化的時候,也就是問答型對話不需要意圖識別。

意圖識別也和預置的行業知識庫有關,知識庫越完善,機器人對用戶意圖的識別就會越高。整個行業預置知識庫也是隨著系統上線之後,不停的根據用戶和機器人的交互,收集到更多的語料和反饋,反覆迭代來變得越來越完整的。

在相同的意圖大類下,還可能有更詳細的意圖的細分領域。比如,請問你們發哪家快遞?請問我的快遞走到哪兒了?大的意圖可能都是物流諮詢,但你還是可以再把它做小的意圖分類。你們發哪家快遞,屬於選擇快遞公司的意圖。請問我的快遞走到哪了,屬於物流狀態查詢的意圖。

通過意圖識別這塊的介紹,我們會發現意圖識別也有難點。

意圖識別的難點就是沒有一個固定的評價標準,剛剛我們看的這個例子,用戶的意圖可能都是人的主觀判斷為準。剛才說的你可以把它分成一個大類,也可以再把它分成一個小類,然後在小類中它代表的意圖名稱有可能不一樣,所以相對意圖的分類,它可能也比較沒有標準。沒有標準的事一般都會比較複雜

那麼還有其它四個難點:

  • 1. 用戶輸入不規範,同一個問題的不同用戶的表達方式存在差異

比如說,有人會在我們的系統裏說:「幫我訂一張深滬的高鐵」,深滬的高鐵它代表的是深圳和上海,用戶如果說深滬高鐵,他可能是為了快速的打字,快速的完成,機器人是不是能夠理解他和另外一個用戶說的,幫我訂一張深圳到上海的高鐵,是同樣的一個意思。

  • 2. 多意圖的判斷

比如說,水這個詞其實很常見,但在不同的場景裡邊意思是不一樣的。如果我說:「我口渴了,要喝點水」,代表的是我們喝的水;如果我是一個電商平臺,專門賣化妝品的,用戶說:「我要水」,那它可能理解的是我要爽膚水,而不是我口渴的意思。

  • 3. 數據的冷啟動,必須要基於大量的數據,才能定義並獲取準確的意圖

最開始的數據獲取相對也比較難。

  • 4. 沒有固定的評價標準

很多時候又有大意圖,又有小意圖。這些分類對於具體業務人員來說是需要非常耐心的整理的。

接下來再給大家介紹最後的一些專業的話術。

一個叫做基於語義的解析,還有基於語義的匹配

基於語義解析的對話理解

要識別用戶的意圖,並將其參數化。

什麼叫參數化?

今晚幫我在全聚德定一個包廂,十個人的。

這句話人類是能聽懂的,對於機器來說,它可能需要結構化的數據。參數化就是相當於把它做成一個結構化的數據

  • 餐廳名:全聚德
  • 時間:2017.07.05,18點
  • 人數:10

做這種非常參數化的數據給到系統,然後意圖我們要去識別出來是預定餐廳。這個就叫做基於語義解析的對話理解。

基於語義解析有三個常見技術手段,這裡簡單的給大家說一下。

  • 第一塊是啟發式規則和推導

啟發式規則和推導的優勢就是,只要少量的數據我們就可以把它啟動。因為咱們剛才說了,很多時候冷啟動是很難的,尤其我們剛搭建一個系統的時候,很難達到上千條或上百條的這種對話都很難。

另外,它的優化手段也是直觀可控的,但是它需要大量專業的知識和背景知識,而且效果很快就達到瓶頸了,可遷移性較差。我做好了一個機票酒店預定的機器人,緊接著我去訂一個旅遊門票,可能就要重新再走一遍。

  • 第二塊是傳統的機器學習

第二塊是傳統的機器學習,它是用數據和特徵來進行驅動和優化,有較好的泛化效果。

泛化效果就是說不同的話,多個問法,它能夠聽明白,然後一句話多個問法都能夠把它歸類,一起去理解。但是它有一個劣勢,就是需要咱們這個領域的特徵工程,需要標註大量的數據,可遷移性較差,會比啟發式規則強點,可控性和可解釋性也較差。

  • 第三塊是深度機器學習

深度的機器學習是純數據驅動的,有更好的泛化效果,可遷移性較強。它的劣勢是需要海量的語料,可控性和可解釋性針對傳統的機器學習會更差一點。因為我們知道機器學習,就是我們丟大量的數據餵給機器,然後告訴它這個是輸入,那個是輸出的結果,然後學習搜索出把輸入計算成輸出結果的公式,接著就可以用這個公式去預測,新的輸入對應的結果是什麼樣的。這個東西很難去解釋,為什麼就識別出了。

比如說圖像的一個識別,為什麼就識別出來這個是貓,那個是狗,這個是很難去解釋的。如果不能解釋,我們可能就沒有辦法去優化某一點,所以我們就說所有的機器學習,它的可控性和可解釋性相對較差。

這個是給大家做的一個簡單介紹。

基於語義匹配的對話理解

另外一塊兒是基於語義匹配的對話理解,比如說這句話:「我想了解現金貸怎麼申請」,這就要從問答庫中找出整句語義與這句話最相似的問題,然後給出這個相似問題的答案。

那麼我想了解現金貸怎麼申請,因為咱們的知識庫裏有這個標準的問題,現金貸借現金的申請流程是什麼,然後下面就可以把回答推過去,所以它其實是語義的匹配,基於語義匹配的對話理解

基於語義匹配的對話理解的常見技術手段,給大家介紹一下。

用戶輸入查詢,在語言處理裡邊,然後通過語義計算,在問答資料庫裏找到相似的問題,再把這個相似問題對應的答案推出去。

比如,我想了解一下限號政策,在問答資料庫裏找到和它匹配的是限號政策,把答案推過去。

這一節我簡單的介紹了一下,對話系統裡邊常用的一些專用術語,我們只有瞭解了這些專用術語,在後續我們學習具體的方法的時候,也會得心應手。

這節課就先到這裡了,謝謝大家,下期再會!


推薦閱讀:
相關文章