如何使用padlepadle 進行意圖識別-開篇
前言
意圖識別是通過分類的辦法將句子或者我們常說的query分到相應的意圖種類。舉一個簡單的例子,我想聽周杰倫的歌,這個query的意圖便是屬于音樂意圖,我想聽郭德綱的相聲便是屬于電臺意圖。做好了意圖識別以后對于很多nlp的應用都有很重要的提升,比如在搜索引擎領域使用意圖識別來獲取與用戶輸入的query最相關的信息。舉個例子,用戶在查詢"生化危機"時,我們知道"生化危機"既有游戲還有電影,歌曲等等,如果我們通過意圖識別發現該用戶是想玩"生化危機"的游戲時,那我們直接將游戲的查詢結果返回給用戶,就會節省用戶的搜索點擊次數,縮短搜索時間,大幅提高用戶的體驗。再進一步說,做好意圖識別以后,我們可以將一個用戶的query 限定到一個垂直領域比如通過意圖識別以后發現該用戶輸入的生化危機就是想找"生化危機"的游戲進行下載,那么我們在游戲這個領域下進行搜索可以得到更高質量的搜索結果,進一步提高搜索體驗。
我們再舉一個目前最火熱的聊天機器人來說明一下意圖識別的重要性。目前各式各樣的聊天機器人,智能客服,智能音箱所能處理的問題種類都是有限制的。比如某聊天機器人目前只有30個技能,那么用戶向聊天機器人發出一個指令,聊天機器人首先得根據意圖識別將用戶的query分到某一個或者某幾個技能上去,然后再進行后續的處理。如果一開始的用戶意圖識別識別錯了,那么后續的工作直接就是無用功了,會給用戶帶來非常不好的用戶體驗。
說了這么多,其實只是想說明意圖識別是一件非常重要的工作。我們再來看看目前工業界的水平,就業界來看,目前一些公司的在特定領域的意圖識別準確率已經可以達到96%甚至更高了,在可以預見的未來意圖識別的準確率只會更高,覆蓋范圍只會更廣, 在通用領域達到99%,甚至99.9%也只是時間早晚的問題。而這個時間也許在兩到三年來就可以到來。
做好了意圖識別以后,那種類似于電影場景里面人機交互就有了實現的可能,用戶向機器發來的每一個query,機器都能準確的理解用戶的意圖,然后準確的給予回復。人與機器連續,多輪自然的對話就可以借此實現了。想起來真的是非常的激動。
意圖識別的前提
在做這個工作之前,我們首先得想好意圖的劃分問題,這種劃分業界有很多叫法,比如技能。我們的聊天機器人有30個技能,潛在意思便是我們的意圖有30類。在2018年的CES上面,Google Assistant 號稱有100萬個技能,這個真的只能說太厲害了。還有一種很通用的叫法叫領域 或者doamin,搜索引擎中的垂域搜索的意思是把用戶的query分為很多特定的領域比如電臺領域,音樂領域。搜索的時候根據意圖識別認為這個query屬于電臺領域,于是便在電臺領域進行搜索。如果意圖識別的準確率比較高的話,這樣便可以大大加快搜索的速度和準確性。
很多Google Assistant的技能也許只是簡單的堆疊,但是對于聊天機器人來說,我們業界一直有個觀點,意圖識別雖然是聊天機器人非常重要的一個部分,但是解析用戶的語義已經慢慢不再成為對話機器人的核心,識別用戶的意圖以后提供的服務開始成為對話機器人的產品差異化的核心。Goole Home 的100萬個技能,絕對是這個領域殺手級別的競爭力。
其次是應該想好意圖識別的可擴展能力,尤其是在搜索領域,對話系統領域,隨著意圖覆蓋的范圍急劇增加,如何保證意圖的識別的準確率不下降甚至還能有提升其實是個很困難的事情,但是也非常的重要,甚至也許是意圖識別最重要的一件事。不然你覆蓋的技能數上去了,但是意圖識別的準確率下來了,其實很多時候是沒有什么意義的。
意圖識別可擴展能力的另外一方面體現在簡單技能的自動化生成,復雜技能的半自動化生成或者第三方開發者的開發技能的快速接入。在可以預見的未來,對話機器人的技能增加速度會非常的快。類似于Google Assistant 的100萬個技能,單憑人力或者某一家公司去開發100萬個技能,得開發到猴年馬月去了。自動化生成對話系統的技能,并且保持足夠的開放性是每一家有追求的聊天機器人廠商應該嚴肅思考的問題。從業界來看,很多國內聊天機器人的公司這一塊可能才剛剛起步,嘴上說著要開放,內心其實比較抗拒,工作排期排的很后。至于技能自動化生成也許還沒有思考到這一步來。
***一個方面是技能的評價問題,當一個開發者開發完一個技能或者模型自動化生成一個技能以后如何評價一個技能生成的好壞也是非常重要的。簡單一點來說雖然我們生成了一個技能,但是也不能生成一個技能就接入到我們的搜素引擎當中或者對話系統中來,必需得符合一定的標準。比如我們在搜索引擎當中開發了音樂 domain的垂域搜索.當我們的意圖識別準確的判別用戶的query"我想聽周杰倫的歌"屬于音樂這個domain,并將query分過來到音樂領域進行垂域搜索。如果音樂的垂域搜索做的很差給用戶返回的都是陳奕迅的歌。用戶體驗也不會很好。就我看來,技能評價應該至少包括兩個方面評價。***個方面是效果上面的,如果我們用precision和recall來評價的話,每一個接入的domain或者技能 的F1值必需大于某個值才可以接入。第二個方面是工程上面的,每個接入的技能都必須考慮到訪問量大了以后不能宕機。這個對本公司開發的技能不會有大的問題,但是第三方開發的技能,很多時候只考慮了功能的實現和效果上面的問題,往往不會考慮訪問量或者qps大了以后怎么處理,結果就會造成整體服務超時。所以這一點也是需要慎重考慮的。
意圖識別的基本方法
1. 基于詞典以及模版的規則方法
不同的意圖會有的不同的領域詞典,比如書名,歌曲名,商品名等等。當一個用戶的意圖來了以后我們根據意圖和詞典的匹配程度或者重合程度來進行判斷,最簡單一個規則是哪個domain的詞典重合程度高,就將該query判別給這個領域。這個工作的重點便是領域詞典便須得做的足夠好。
2. 基于查詢點擊日志
如果是搜索引擎等類型業務場景,那么我們可以通過點擊日志得到用戶的意圖。
3. 基于分類模型來對用戶的意圖進行判別
使用分類方法是我們本次博客的重點,我們將會使用paddle作為模型的基本框架以CNN外接softmax 和LSTM外接softmax來進行意圖識別方面工作的探索。本系列也初步定為三篇博客,本篇會作為開端篇做一些意圖識別方面的介紹。第二篇是會使用LSTM+softmax來進行文本分類。第三篇會使用CNN 外接softmax來進行文本分類。
意圖識別的難點
當前意圖識別工作的難點有很多,在之前的介紹中也提到了一些,但是***的難點其實是在于標注數據的獲取。目前標注數據的獲取主要來自兩方面,一方面是專門的數據標注團隊對數據進行標注,一方面是通過半監督的方式自動生成標注數據,我后續會在調研以后,來專門進行這方面的介紹。本次會利用已有的標注數據來進行介紹。
總結
本次介紹了意圖識別是什么,意圖識別的重要性,意圖識別的難點以及后續的博客計劃,本質上來說意圖識別是屬于文本分類的一種,和情感分析這類工作沒有什么很大的區別。但是相比于情感分析,意圖識別的分類種類要比之前多了很多,準確性以及可擴展性的要求也高了不少。敬請期待后續博客的更新。