[論文筆記] Smart reply Automated response suggestion

論文鏈接:https://arxiv.org/abs/1606.04870

本文是一篇典型的高質量工業界論文。本文在創新性地提出一種有效的Smart Reply系統。該系統可以根據email的內容智能地產生合適的回覆建議,用戶只需點擊即可快速完成郵件回覆。

[論文筆記] Smart reply Automated response suggestion

此外,本文還重點研究瞭如何保障智能回覆的質量、多樣性、可用性以及如何提升系統運行速度等實際落地時需要考量的點。本文所研製的Smart Reply已經廣泛應用在Gmail等實際應用場景之下。


整個Smart Reply的工作流入下圖所示:

[論文筆記] Smart reply Automated response suggestion

從上到下共包括4個主要模塊:

Triggering Model: 判斷當前郵件上下文是否適合智能回覆,屬於提升用戶體驗的手段。這個模塊比較基礎,下文不再贅述。

Response Selection: 該模塊需要從候選的response set中選出最相關的k個回覆。本文利用LSTM 計算P(r|o)作為相關性排序的依據, 其中r表示某個response,o表示original message。具體方法在下文介紹。

Response set generation: 由於系統要實際上線,因此所推薦的responses的質量尤為重要。本文提出了一系列控制質量的策略和一種semi-supervised graph leaning的標註文本intents的方法。

Diversity: 本文考慮到了回覆的多樣性,即在保證response和email的相關性的前提下,儘可能滿足用戶的多種intents。

Response Selection

本文設計了一個基於LSTM的生成式計算相關性的方法(當然,這並不是一個很好的方法,在後續研究中也已經很少採用這類模型)。該方法的基本思想為:

[論文筆記] Smart reply Automated response suggestion

簡單來說,該方法把每一個(o,r) pair的相關性計算問題轉變成一個類似seq2seq的問題:給定輸入序列o,然後計算按給language model建模的方式生成r的概率有多少作為相關性得分。這個LSTM模型訓練也採用language model式,即:

[論文筆記] Smart reply Automated response suggestion

上述生成式方法一個主要的問題在於其速度較慢,特別是當response set R較大時,遍歷R依次計算相關性將導致latency過大。為了解決該問題,本文設計的提速方案為:將response set中的句子存儲在trie中,然後按beam search的方式給一小部分responses計算相關性,從而避免將計算浪費在完全不相關的responses上。具體來說,給定o1,…,on, 若要計算生成r1的概率,則可以遍歷trie的第一層節點,並依次計算概率得分P(r1|o1,…on),接著取最高的b個節點作為r1進入下一輪迭代。在第二輪迭代時,我們已知o1,…,on以及篩選得到的b個r1,於是我們可以遍歷已有的b個r1並遍歷該r1在trie中對應的子節點作為r2,繼續計算概率得分P(r2|o1,…on,r1),同樣取得分最高的b個序列進入下一輪迭代,以此類推, 直到到達trie的葉子節點。

根據作者的實驗,當b取值為128時,通過上述方法搜索得到的最為相關的r在99%的情況下都是全局的最相關r。因此上述方法可以作為本文的基於lstm的seq2seq式匹配模型的有效提速方案。


Response Set Generation

如何用盡可能低的成本製作高質量的response set是本文特別著重關注的點。一個能落地的smart reply系統應該在任何時刻都保證其推薦的response在內容、措辭、語氣等方面都足夠得體,此外每個response set最好能附帶地標註了每個response對應的intent。這一目標僅依靠data-driven的方式難以達到:

[論文筆記] Smart reply Automated response suggestion

針對這一問題,作者提出的解決方案為:

1) 通過限定詞彙表來過濾掉拼寫錯誤、不得體的詞彙等。這個方案可以在一定程度上提升response的質量。

2) 從一個大規模的語料庫中,選出出現頻率最高的那一批句子作為候選responses

3) 將每個response解析成語法樹,然後轉換成canonicalized representation(最簡語法格式,比如"how_about_time")

4) 用一個semi-supervised graph learning方法,通過少量的人工標註將所有responses劃分進不同的intents。

semi-supervised graph learning

作者希望把一些語義一致的語句歸類到一些人工定義的cluster中。比如"haha","lol","oh that;s funny"都可以歸為funny cluster。但是難點在於很難用簡單的規則把每個responses都映射至合適的類別去。為了解決這個問題,本文提出了semi-supervised graph learning完成clustering。

1. Graph construction

將每個response記作節點Vr,同時對於該response,可以抽取出他的文本特徵(N-grams等),記作節點Vf,並且在Vr和Vf之間連上一條邊。對於其他response節點Vr'及其對應的特徵節點Vf', 若Vf'∈Vf,則可以在Vr'和Vf之間加上一條邊。此外,還觀察到存在以下形式的數據:

Let us get together soon. → When should we meet?

When should we meet? → How about Friday?

所以我們可以在(original message, response)對應的節點之間連上邊。

另外,對於每個人工設定的cluster,可以加入少數幾個responses文本作為種子。

通過上述方式,我們可以構造出下圖(左)所示的圖:

[論文筆記] Smart reply Automated response suggestion

2. Graph propagation

在構建好上述圖並且有一些帶標籤的種子節點之後,接下來要做的就是把種子節點的標籤通過edges傳播到其他節點上,從而使得未標註的節點也能自動打上標籤。

3. New intents discovery

初始人工設置的seed intents很可能不能覆蓋到所有文本。所以每輪迭代,我們可以執行上述propagation 5次,接著隨機從graph中找出100個還未被任何intents覆蓋到的responses,並用其canonicalized representation(e.g. "how_about_time")作為各自的intents,接著進行下一輪迭代,知道不產生任何新的intents為止。

Diversity

Smart reply系統落地時的一個重要問題就是系統產生的responses應多覆蓋幾個intents,即有足夠的多樣性。比如下圖第二列中的responses相互之間都較為重複,這些responses很難在應用時滿足用戶的實際需求。

[論文筆記] Smart reply Automated response suggestion

針對這個問題,作者提出了兩種提升回覆多樣性的策略

1. Omitting Redundant Responses

上文提到,本文系統構建的responses set中的每個response都唯一對應一個intent(通過graph leaning自動打的標籤)。所以保證多樣性的簡單策略就是:根據相關性得分從高到低遍歷candidate responses,避免重複intents地選取前k個responses返回給用戶。

2. Enforcing Negatives and Positives

作者發現,由於數據中大多數的回覆都是積極的(Yes, Sure or Of course),這就導致一些消極回覆(e.g. I can't make it )的相關性得分容易偏低,因此也更難被選中返回給用戶。這顯然是一個需要改善的點。針對這一問題,作者提出當系統匹配出的的前2個候選回覆都是積極的時,則強制選擇一個消極的文本作為第三個候選回覆(當前,如果匹配的前2個全是消極回覆時,則強制選擇一個積極文本作為第三個回覆)。(注:但是文中好像沒有說積極/消極是如何判別的,也許僅僅是通過一些簡單的規則?)


總結

總的來說這篇文章所用的模型非常簡單,其重心主要還是在response set的製作、質量把控和推薦的responses的多樣性、可用性上。本文所設計的多樣性策略、pos&neg的權衡、trigger機制等都對實現一個smart reply系統有著重要的參考價值。


分享到:


相關文章: