Airbnb 如何透過機器學習理解並分類 App 內的訊息
原文出處:Discovering and Classifying In-app Message Intent at Airbnb
有使用過Airbnb 的人應該都知道,在規劃旅程時,與房東的溝通很大一部分是透過訊息完成的。這和 Airbnb 服務的特性有關,平台很難百分之百確認房間頁面的資訊鉅細彌遺,因此需要在 App 內提供讓房客可與房東直接溝通的管道,以便有問題時可以隨時發問,房東也可立即解答。這樣的做法也提供了房客較為親近的體驗,讓他們可以與連鎖飯店做出差異化。但訊息內討論的主題很廣泛,可能從討論訂房的細節,到付款相關的規定,行程的規劃,服務的回饋等等。因此,能夠規模化的理解和預測訊息內的內容,就變得很重要。
試想,當今天假期已近時,突然旅程中要多加幾個人,你迅速地傳訊息給房東問他有沒有辦法多容納幾個人,但對方可能有時差,或沒有辦法立即回覆時,你只好焦慮的等待。又或,遇到行程突然必須取消,傳訊息問房東退款的規定,在對方回覆的這段期間,又是焦慮的等待。站在平台的立場,不可能要求房東都要立即地回覆房客的訊息,因此,透過理解並分類 app 內的訊息,並引導房客找到問題的答案,可以有效地減少房東的工作量,也可以舒緩房客的焦慮感。
要能做到這樣的體驗,第一步必須要讓 AI 有辦法正確地理解使用者的 “意圖”,但在上千萬封的訊息中,這可能有非常多的可能性。因此,先將這個問題拆解成兩個階段:第一階段是透過 LDA 從大量的訊息資料庫中,發現可能的意圖 (主題),第二階段是使用第一階段所產生的這些主題,將他們做標記後分類,然後透過深度學習將訊息自動做多類別的分類。
使用 LDA 來發現訊息中使用者可能的意圖
當房客在詢問問題時,可能會在問題中帶入多個主題,比如說他可能要問是否可以先在 check-in 之前寄放行李,但在訊息中,他可能會先提到班機抵達的時間。對於人腦,我們可以很容易理解這樣的上下文關係,但機器卻不然。因此,在這邊需要的是一個模型可以有效地從訊息中分辨出不同的主題,然後給予每個主題一個機率分數。
因此他們就很自然地選擇了 LDA (Latent Dirichlet Allocation)。第一, LDA 是個機率模型,最後產出的是不同主題的機率分佈;第二,每個主題可以被數個用詞的機率來描述,而每則訊息是由多個主題的機率所組成,這樣的特性方便事後作人為的標記,來決定每個主題所實際代表的意義。
他們也可選擇其他的模型,比如說 doc2vec,或是 BERT,但因為時間的關係沒有使用。最後的結果透過 pyLDAvis 做主成份分析後可繪製出下圖。可發現透過這個模型,可以有效地從訊息中偵測出如 “early check-in”, “cancellation / refund”, “confirmation of stay” 等等不同的意圖。
進入下一步之前,有個極為重要的步驟是將主題做標記。由於 LDA 是非監督式的學習,因此對於其所產生的主題的粒度,沒有辦法有全盤的控制,而對於 LDA 結果的效度,也必須透過人為的標記,提供 ground truth。
這邊有兩個問題需要回答,一是要標記些什麼主題,二是確保標記的品質。先透過較少量的樣本,並從 LDA 所產生出來的主題出發,每則訊息都由多位標記員對訊息做標記,並透過「評分者間信度 (inter-rater agreement)」的統計方式,來修正標記資料的品質。而儘管推展到較大的樣本數時,也仍舊維持有一小部分的資料是由多位審查員做標記。透過這樣的方式,可以知道人為誤差所造成的模型的極限。
在標記的過程中,有 13% 的訊息是具有多意圖的 (multi-intent)。在這個情況下,透過人為的方式幫單獨句子做標記,僅有單意圖的句子,可在下一步,訓練分類模型時,作為獨立的訓練樣本。
使用卷積神經網路 (CNN) 來幫訊息做分類
在考慮導入的簡易性,模型具有的高正確度,以及訓練的速度後,最後決定使用卷積神經網路 (CNN) 而非遞歸神經網路 (RNN) 來訓練這個分類器。實作時,採用單層的 CNN,以及 1-max 池化層的方式,並設計了 100 個 4 個不同大小的篩選器。
設計嵌入層時,使用了 Airbnb 大量的語料庫。這邊他們也發現適當的前處理可以有效的降低結果的雜訊。
結果,模型的準確率可以達到約 70%。從 confusion matrix 也可看到模型可準確的將訊息做分類。
下表也列出了一些預測的比較好的類別
通常有兩個原因造成模型分類準確率下降:(1) 人為標記造成的錯誤 (2) 標記資料的模糊性。
可應用在所有 app 內的訊息對話
所訓練的模型可快速且有效地判斷訊息中的意圖並做分類,應可應用在
- 預測用戶的客訴問題
- 透過提早偵測用戶意圖,引導用戶至取消 / 付款 / 退款等流程
- 提早偵測訊息中用戶的擔憂,提高訂房體驗
- 提供智慧回覆 (instant smart response)
這篇文章除了提供相當好的 NLP 與深度學習的產品應用,從中也學習到了幾件事情:
- 非監督式學習可有效地提供大量監督式學習所需要的標籤資料
- 語彙的前處理可有效降低雜訊
- 標籤的品質是影響最後模型好壞最重要的因素之一