Building task-oriented dialogue systems for online shopping 論文筆記

Building task-oriented dialogue systems for online shopping 論文筆記

1. 摘要

該文給出了針對用於線上購物的面向任務的對話系統的一個一般的解決方案, 目標是協助用戶完成多樣化的購買相關任務, 比如搜索商品和回答問題, 如同正常人之間的對話. 作爲一個創始工作, 我們會展現NLP的技術, 數據源以及可以利用的衆包來建立這樣一個關於電子商務的面向任務的對話系統. 爲了示範它的效果, 我們將我們的系統集成到一個移動端在線購物應用, 據我們所知道的最好的消息, 這個系統實際用於百萬級別的用戶羣體, 我們的實驗部分將會展現有趣的和有深刻見解的觀察, 基於人機對話日誌的分析, 同時也給出了未來的一些挑戰.

2. 介紹

一般來說, 對話系統分爲面向任務的以及非面向任務的系統, 而本文中的線上購物的對話系統既需要面向任務, 同時也需要具備普通交流的功能, 但是以前我們利用特定領域的知識來對語義槽進行設計和填充, 不過這種方法在整個系統冷啓動的條件下很難進行應用, 我們需要大量的人和人的語料, 可是這確是難以獲得的.

爲了解決這些問題, 我們的工作專注於三種類型的數據(對於電子商務web服務是共通的, 同時是易於爬取獲得的):
1. 產品知識庫(結構化存儲的產品信息)
2. 搜索日誌(產品, 自然語言查詢和用戶選擇的行爲)
3. 社交網站(用戶自然語言中所表露出的意圖)

我們應用的bot可以和用戶進行交流, 同時嘗試去幫助用戶比較相同類型的商品, 或者是和用戶閒聊, 通過對 聊天日誌的分析, 可以找出用戶的興趣點.

我們提出的方法和之前的方法主要有兩個不同:
1. 訓練數據
大多數之前的對話系統依賴於帶有標記的數據作爲有監督的學習, 最終訓練一個統計模型來實現槽的填充, 對話狀態跟蹤, 策略選擇等, 但是這樣帶有標記的數據在實際應用上基本沒有, 比如線上購物, 我們提出了可選擇的方案來利用已存在的數據建立一個面向任務的對話系統, 和輕量級衆包一起, 這並不意味着我們的方法更加聰明, 而是在冷啓動條件下比較適用.
2. 領域伸縮
大多數之前的對話系統只能適用於特定的領域, 預先定義的實體以及語義標記(有限的大小), 與此相反, 此篇論文中所使用的領域知識庫十分龐大, 不僅給算法和模型都帶來了挑戰, 而且產品設計亦是一個問題, 進一步, 我們也提出了一個管道來解決意圖挖掘和檢測任務.

3. 系統形式化

一般地, 一個面向任務的對話系統包含一下幾個組成部分:

DS={QU,ST,DM,PKB}

QU 爲問題理解, 輸入是Qt , 輸出是Mt , Qt 代表着用戶在時間t 的話語, Mt 代表Qt 的形式化的意思表示.

ST 爲狀態跟蹤, 輸入是MtHt1 , 輸出是Ht , Ht 代表着時間t 的對話狀態, 通過時間逐漸累積的意味表達.

DM 爲對話管理, 輸入是Ht , 輸出是自然語言迴應Rt , 內部函數即是基於當前對話狀態Ht 來選擇一個更爲合適的action伴隨着自然語言表示來回應用戶.

PKB 爲產品知識庫, 也就是由一堆三元組<p,n,v>∈P×N×V 組成的集合, P 是產品集合, N 是屬性集合, V 是屬性值.

4. 問題理解

給定話語Qt , 自然語言理解模塊就是生成它的表示Mt , 特別地對於線上購物場景:

Mt=<I,C,A>

其中I 就是通過用戶話語表達出來的意圖Qt , 用於確定action(推薦或者是QA)
CQt 所涉及的產品種類, 用於確定可能的產品以供DM來進行分析.
A 是二元組<n,v> 的集合, n 代表屬性名字, v 代表對應的值,

4.1 問題意圖檢測

同一產品的話語提及可能是完全不同的, 系統需要基於用戶意圖來確定如何進行動作, 文中提及了一個意圖分析的例子, 利用幾個簡單的模板來套用就可以得到相應的意圖, 但是意圖檢測仍然是一個比較大的問題.

4.2 意圖分析挖掘

有很多地方人們會表露出購買的意圖, 包括搜索引擎, 社交站點, 社交網絡等, 我們提出關於購物意圖分析挖掘的算法, 這個算法在社交網站上的問題進行信息挖掘, 這些問題都是能表現出明顯的購物意圖,
“`

意圖分析挖掘算法:
1. 收集和過濾社交網站中提交的問題, 成爲一個問題集合QD={q1,...,qD} , 這些問題至少包含產品名稱, 牌子名稱, 或者種類名稱中的一個(基於產品知識庫)
2. 在QD 上運行ParseSegmentation來分割每一個qk 到一個短語序列{phk1,...,phkn}
3. 在已經分割好的QD 上運行ParseLDA來得到主題聚類
4. 購物相關意圖的集合通過衆包來定義, 基於基於主題的短語聚類
5. 對於每一個意圖, 通過衆包選取短語的一個集合
6. 返回一個購買意圖集合I , 以及帶有標記的意圖短語

特別地, 三種狀態相關的意圖也被考慮進來:
1. 添加過濾條件
添加多個過濾條件使得對話成爲多輪的對話系統
2. 查看更多
意味着用戶想查看更多商品, 比如”其他的”, “下一個”
3. 協商
意味着用戶並不滿足當前推薦的產品但是沒有很明確的表現出理由

4.3 意圖分類

對於每一個意圖IkI , 我們從QD 中收集了2000個問題, 每一個都至少包括一個Ik 的意圖短語, 我們也收集了2000個沒有購買意向的問題, 所有這些有標記的問題都被用來訓練成一個多類別的分類器, 進而確定用戶言語表現的意圖, 或者只是閒聊.

5. 產品類別檢測

在這個環節中, 我們將產品類別檢測看作是一個多分類的問題, 給定一個帶有購買意圖的用戶言語, 產品類別檢測的目的就是預測出用戶說的東西的類別, 這東西的用處在於縮小預測的範圍, 利用預先檢測出來的類別來從浩瀚的產品庫中選取一部分子集, 再在其中進行一定的搜索匹配.

爲了解決這個分類任務, 使用了基於CNN的方法.

輸入層:
傳統地, 每一個詞利用one-hot編碼成一個向量, 維度取決單詞的種類, 然而如果是中文, 那麼維度是一個問題, 對於學習出模型的參數的代價相當昂貴, 爲了緩解這個問題, 我們將中文字符表示成特性的計數向量, 我們對於話語Q 使用tth 個n元詞法模型, 主要是將每個詞連接起來, 類似於

lt=[wtdT,...,wtT,...,wt+dT]T

其中wt 爲第t個詞的表示, 並且n=2d+1 爲上下文窗口大小, 我們設置成3

卷積層:
卷積層實現基於窗口滑動的特徵抽取, 進而對於每個n元文法單詞向量表示lt 投影到上下文特徵向量ht :

ht=tanh(Wclt)

其中Wc 是卷積矩陣

池化層:
池化層聚集通過卷積層抽取的局部特徵, 進而構建固定大小的和輸入語句長度無關的語句水平的全局特徵. Max pooling被用來推動網絡進而通過lp=[v1,v2,...,vK]K 保持最有用的局部特徵, 其中

vi=maxt=1,..,T{ht(i)}

語義層:
對於Q 的全局表示lp , 一個非線性轉換被這樣應用:

y(Q)=tanh(Wslp)

其中Ws 是語義投影矩陣, y(Q) 是最後的語義向量表示.

給定一個用戶話語Q , 和排行的產品類型列表, 我們首先使用CNN來計算出Q 的語義向量並且所有的產品類型
接着, 我們計算出Q 和每一個產品類型Ci 的相似度, 相似度的計算使用語義向量的餘弦相似度

Sim(Ci,Q)=Cosine(y(Q),y(Ci))

給定用戶話語的一個產品類型的後驗概率, 通過一個softmax函數, 基於相似性分數來進行計算, 模型用來最大化正確匹配話語和產品類型的似然性, 這裏使用隨機梯度下降

6. 產品屬性抽取

給定用戶話語Q , 產品屬性抽取的目的就是通過屬性名和值T=t1K 去標註Q ,

T=argmaxTP(T|Q)=argmaxTP(t1K|m1K)=argmaxTk=1KP(tk|mk)

其中mkQ 是n元詞法, tkA  or  tkVmk 涉及的屬性名(或者屬性值), P(tk|mk)mk 能夠被tk 標記的概率

對於一個不能被標記屬性或者值的單詞, 我們將其標註爲[word], 同時具有一個小的值代表概率P([word]|m)

而如何獲得這個概率呢, 這就需要一個釋義挖掘任務

  • 屬性值是產品名的時候:
    我們通過產品搜索日誌數據來進行釋義的挖掘, 這是由於電子商務網站給用戶提供搜索服務, 那麼肯定就會產生一堆日誌
    1. 首先我們從日誌中獲得<q,urlp> 對, 其中q 是一個搜索引擎的query, url 是通過q 搜索到的, 然後點進去名字是p 的頁面.
    2. 我們計算出link(p|q), q是產品p 的一個可選表達
      link(p|q)=p(p|q)p(q|p)=#(p,q)p#(p,q)#(p,q)q#(p,q)

#(p,q) 爲query q下點擊進入產品名是p頁面的次數, 基於link(p,q) , 我們可以進一步計算出分佈

P(p|q)=link(p|q)plink(p|q)

其中, P(p|q) 實際上爲query q在產品相關集合上的分佈, 注意到, 用戶也會使用品牌名, 產品類別, 或者它們的結合來進行搜索, 因此, 對於每一個三元組

7. 狀態跟蹤

狀態跟蹤模塊ST , 保持對話狀態Ht , 對話狀態也即是直到時間t 的對話時段表示, ST 按如下進行作用:
1. 基於函數SessionAwareIntentUpdate(Mt,Ht1) 更新意圖狀態Mt.i , 基於以下規則來更新Mt 的意圖
- 如果Mt.iI , 不是Session-Aware的意圖, 則保持Mt.i 不改變
- 如果Mt.iI , 是Session-Aware的意圖, 並且Ht1.i=Recommendation , 設置Mt.iRemonmendation
- 其他情況, 設置Mt.iChitchat
2. 如果話語被檢測爲Chitchat , 則沒有更新, Ht=Ht1
3. 如果當前話語的產品類別被確認爲儲存在Ht1 的產品類別, 則Ht 會繼承Ht1 的所有信息, 否則, Ht 的內容將會完全基於Mt 來進行更新, 包括I,C,A , 也就是意圖, 產品類別和屬性-值的集合

注意到, 如果chit-chat話語的連續長度超過某一個預定義的閾值, 或者在時間t時兩個連續的話語的時間間隔超過某個預定義長度, 則Ht 會被清除, 作爲一種遺忘的方法.

對話狀態的跟蹤是保證多輪對話中用戶體驗的關鍵, 本文中由於爲了規避冷啓動的問題, 使用了Session水平的標記數據來提高置信狀態跟蹤.

8. 對話管理

對話管理模塊DM 利用當前對話狀態Ht 作爲輸入, 基於該狀態進行不同的動作, 並且輸出相應的結果.
這裏給出在線購物場景的各種動作:
- 推薦
Ht.iRecomendation 的時候將會觸發, 它將會利用產品類別和屬性值在產品庫當中進行檢索, 最後儲存到Ht
- 比較
需要滿足兩個條件纔會觸發比較:
1. Ht.i=Comparision
2. 相同類別的多個產品或者品牌的名字在Ht 被檢測出來
將會對它們的優缺點都進行比較
- 觀點總結
Ht.iAsk Opnion 的時候將會觸發, 將會總結存儲在Ht 中的目標產品和牌子, 基於電子商務夥伴提供的產品review數據
- 問題回答
這個動作會在一個產品的名字或者屬性在Ht 中被檢測到的時候觸發, 同時對應的屬性值沒有檢測到, 將會通過產品數據庫來返回沒有提及的屬性值, 我們將其視作單輪的KB-QA(知識庫-問題回答)任務, 通過Yih的方法解決

Yih, W.-t.; Chang, M.-W.; He, X.; and Gao, J. 2015. Semantic parsing via staged query graph generation: Question answering with knowledge base. In Proceedings of Annual Meeting of the Association for Computational Linguistics (ACL).

  • 前瞻性的提問
    這個動作會在滿足三個條件的時候觸發:

    1. 一個Recomendation被檢測出來
    2. 產品類別被識別出來
    3. 沒有任意的約束, 包括在Ht 中也沒有

    注意到, 這樣形式的問題通常會是衆包的數據中會含有的

  • 閒聊
    當沒有任何的購買意圖被檢測到的時候, 將會觸發這個動作, 使用Ji, Lu和Li的方法基於IR的迴應生成策略, 該模塊基於以下的條件, 在給定的用戶話語qt 下, 生成一個迴應:

    r~=argmax<q,r>∈DBQRiλihi(q,qt)

    其中DBQR={<q1,r1>,<q2,r2>,,<qM,rM>} 爲從web上收集來的(問題-回答)的數據, qm 是用戶的問題, 而rm 是其他用戶對這個問題的回答, hi 是第i 個特徵, 用於度量utterance和query的相似性, λihi 的特徵權重, 該模塊的目的爲:
  • 找到存在的和qt 相似的q~
  • 返回q~ 的回答r~ , 作爲qt 的回答

Ji, Z.; Lu, Z.; and Li, H. 2014. An information retrieval approach to short text conversation. arXiv preprint arXiv:1408.6988.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章