一個真正強大的對話式人工智慧需要做的不僅僅是深刻理解語言,因為大多數目標都涉及多個步驟和多個資訊源,所以 AI 還必須深刻理解各種“行動”才能聯絡語境進行靈活並且具有魯棒性的對話。搭建智慧對話系統的一個核心挑戰是設計一種方法來統一地表示對話中的目標、行動和狀態。微軟 Semantic Machines 的研究團隊在 Transactions of the Association for Computational Linguistics (TACL) 上發表的新論文 Task-Oriented Dialogue as Dataflow Synthesis (點選閱讀原文,瞭解更多細節 )描述了一種新的對話表示和建模框架,該框架將對話解釋為資料流圖,從而實現了跨越多個領域的複雜任務的對話。研究員們還發布了一個超過4萬段對話的資料集(包括對應的資料流標註)和一個排行榜,以幫助人工智慧社群解決多輪對話中的技術挑戰。
正如新資料集所顯示的那樣,使用者需求具有驚人的多樣性:
多樣化的目標:一個使用者可能想“預訂一個與 Megan 的會議”。他們也可能想“在週二預訂一個與 Megan 的會議”,甚至是“在假期之後的第一天早上預訂與 Megan 的會議”。
多樣化的語言:使用者可能會說“明天的天氣是什麼”來詢問天氣。相同的請求也可能表述成”明天戶外的天氣會怎樣“或者”我去徒步需要穿外套嗎”。
多樣化的語境:這取決於智慧助理之前所說的內容,“三點怎麼樣”可能表示完全不同的語義。例如,如果在前一輪智慧助理說 “Megan 在兩點時是忙碌狀態,您要預約其他時間嗎”,那麼它表示修改會議預約的請求;如果智慧助理說 “今天中午的天氣是陰天”,那麼它表示修改天氣預報時間的請求。
傳統的“意圖識別和槽填充”系統忽略了這種多樣性。它們僅支援一組目標,並且不支援豐富的上下文表示(除了表示當前缺少的槽位以外)。另一方面,最新的“端到端”神經網路理論上可以自由地依照上下文生成任何回覆。然而,靈活地生成詞語往往是不夠的,因為完成任務型對話還需要靈活地執行操作。此外,產品級對話系統還必須滿足可控性和真實性的要求,這對於端到端的非結構性系統來說是很大的挑戰。
微軟 Semantic Machines 的研究團隊提出了有別於傳統方案的第三種方法:利用深度學習來產生和使用具有強大表達能力的“資料流”來解決以上問題。這種“資料流”表徵超越了“意圖識別和槽填充”,既支援靈活的操作,又提供了可控的語義。該資料流旨在實現人們日常生活中自然、靈活、開放式的對話。
該方法基於五個關鍵思想:
1. 把使用者的請求表示為一段程式
傳統的對話系統能夠很好地解釋固定的、預先定義好的請求,例如“開燈”或者“設定一個5分鐘的叫‘義大利麵’的鬧鈴”。在這類方法中,設計人員預先定義了一組固定的意圖,每個意圖都有一組固定的引數。系統把每個使用者請求標記為對應意圖和引數的組合:
但如何處理更復雜的請求呢?例如“約 Megan 喝咖啡的時候氣溫如何?”,要回答這個問題,智慧助理需要做一系列事情:首先要找出 Megan 是誰,並在日曆應用程式中查詢包含 Megan 的事件,然後確定其開始時間,並查詢該時間的天氣服務。為解決這個問題,科研人員不希望新增一個叫做 “和某人在一起期間的天氣”的意圖,而是希望把自然語言轉換為聯絡所有這些步驟的程式。該程式被表示為資料流圖(dataflow graph),它明確定義了智慧助理要執行的程式中的步驟(節點)和它們之間的資料依賴關係(邊):
一旦該程式被神經網路預測出來,智慧助理便可以執行該程式,並根據結果對使用者進行回覆,再將結果儲存在資料流圖中。
2. 任務型對話是互動式程式設計
使用資料流的好處之一是,它可以自然地表示多輪對話中使用者和機器人反覆的互動過程。如果使用者問“約 Megan 喝咖啡是什麼時候”,系統會生成如下的資料流片段:
如果使用者在下一輪提出“那裡的天氣如何”,那麼回答新問題所需的大部分工作實際上已經在第一輪完成,系統則可以回溯上一輪的程式片段,將其輸出反饋到一個新的 API 呼叫中,然後描述其結果:
該過程得到的結果與先前為複合式問題(“約 Megan 喝咖啡的時候氣溫如何”)生成的程式完全相同。這種重用是資料流框架的核心功能——透過對一系列簡單的操作進行組合,而不是定義大量的頂層操作,來實現複雜的目標。這種組合可以在第一輪對話中發生,也可以逐輪進行,形成逐步擴充套件的資料流。
3. 語義依賴於上下文
我們可以把逐步擴充套件的資料流看作整段對話的“對話狀態”。它記錄了智慧助理到目前為止為了理解語義、提供服務、回覆使用者而進行過的所有計算。此後的每段語義都將在資料流的基礎上(透過深度學習)進行解析,它們可以參考和使用現存的所有計算及其結果。透過設計對資料流中的節點進行引用和複用的機制,可以顯著提高對話系統的資料利用效率和機器學習的準確性。這也讓工程師們可以更容易理解和控制智慧助理的行為。
在前面的示例中,使用者使用了單詞“那裡”來指代資料流圖中的現存節點。諸如此類的語言現象還包括“那個”、“她”、“你提到的第二個會議“等。這些都表示使用者希望引用對話中提到過的某個值或某個實體。
這類引用也可能隱式地發生。想象一下,當你詢問智慧裝置“天氣會怎樣”時,通常你想知道當地近期的天氣。但是,如果你在提到某個未來的事件後問了同樣的問題,則可能是在詢問該事件期間以及對應地點的天氣。解決這兩種情況需要兩個不同的計算圖。如下圖所示,左邊的計算用於獲得當地近期的天氣,右側的計算則用於獲得特定事件的天氣:
透過上下文區分這兩種情況是一個頗有挑戰性的機器學習問題(更不用說還可能有其他情況了)。但從直覺上講,“天氣會怎樣”這句話在兩種情況下的含義是相同的,即使用者想知道與對話環境最相關的時間和地點的天氣。
在基於資料流的對話系統中,上述推理被顯示地表達了出來:在解析使用者請求時,智慧助理會生成顯示引用現有計算片段的程式。這裡,這些片段既包括前一輪的計算,也包括 here 和 now 這種在對話開始前就預設存在的實體。對於上面的兩個示例,生成的資料流看起來像這樣:
換句話說,在兩段對話裡,系統對“天氣會怎樣”的解析是相同的。它透過呼叫 refer (Time) 和 refer (Place) 生成了相同的資料流片段,但在該程式片段被執行時,它的實際解釋則會根據上下文而改變。
下面是一個與上下文互動更緊密的例子。假設使用者問:“公司聚會的時候呢”。這裡,使用者希望智慧助理在修改一些細節(把事件修改為“公司聚會”)後提供先前問題(查詢天氣預報)的新答案。這種需求被稱為修改(revision)。像引用一樣,基於資料流的對話系統引入了一種名為“修改”(revision)的機制來應對上述需求,使簡單的使用者語句可以對應複雜的資料流變換。以下是系統在處理“約 Megan 喝咖啡的時候氣溫如何”以及 “公司聚會的時候呢”之後,大致的資料流圖:
在這裡,第一輪搜尋所使用的約束(參與者包含“Megan”,標題匹配“咖啡”)被新的約束(標題匹配“公司聚會”)替換。(有關“修改”機制的更多詳細資訊,可點選閱讀原文,從論文中瞭解更多)
4. 事情可能會出錯
任何複雜的對話都包含多種可能的意外事件。比如“預訂與 Megan 開會”的請求可能會失敗,因為使用者的聯絡人列表中沒有一個叫 Megan 的人,或者有多個人叫 Megan,又或者因為沒有可預約的時間,甚至還有可能因為網際網路斷開而導致智慧助理無法與伺服器取得聯絡。這些情況中的每一種都需要不同的響應。傳統的對話系統通常使用複雜的硬編碼邏輯來從這些錯誤中恢復。
基於資料流的對話系統透過從資料流圖的某個節點丟擲“異常”來處理所有這些意外。智慧助理處理它們的方式是:透過描述“異常”的內容為使用者生成適當的警告語句或問詢語句。而使用者在看到這些描述後,可以自由地進行回覆,比如澄清誤解,或者修改之前的請求。舉例來說,如果有多個叫 Megan 的人,那麼系統會把這個搜尋結果用告知使用者,而使用者或許會透過 “我指的是 Megan Bowen”來澄清。系統會將這句話解釋為基於上下文的“修改”(revision)請求,並生成新的程式。這種機制使系統和使用者可以在出現錯誤時靈活地、聯絡語境地、協作式地對錯誤進行處理。
5. 回覆的生成也依賴上下文
作為有效的夥伴,對話式 AI 系統不僅要學會解釋語言,而且要能夠生成語言。傳統的對話系統要麼採用手寫的生成規則(導致 AI 的回覆無法根據上下文而變化),要麼採用非結構化的神經網路語言模型(導致 AI 的回覆無法保證真實性)。在基於資料流的方法中,語言生成是一種被神經網路所引導的資料流操作。在語言生成中,系統會主動地對資料流進行解析和擴充套件。它可以描述資料流中出現過的任何內容,而不只是最後的計算結果。它甚至還可以將語言生成過程中新產生的計算和結果新增到資料流中,而使用者則可以在隨後的對話中引用它們:
研究資源:程式碼,資料集和公共排行榜
本文所描述的方法將成為邁向新一代智慧對話技術的第一步。微軟 Semantic Machines 團隊的目標是賦予 AI 和人類同等的交流能力,但這個問題的最終解決離不開整個社群的參與和努力。為了促進對基於資料流的對話系統的研究,微軟 Semantic Machines 的研究團隊還發布了迄今為止最大、最複雜的面向任務的對話資料集:SMCalFlow(https://www.microsoft.com/en-us/research/project/smcalflow-dataset-0/)。該資料集包含了41,517段對話以及對應的資料流程式標註。該資料集收集自日曆、天氣、通訊錄、地點等交叉領域,均為人類間的真實對話。對話集合不受限於任何預先指定的劇本,即參與者在對話目標以及完成任務的方式上完全不受限制。因此,SMCalFlow 與現存的對話資料集有著本質區別。例如,某些對話可能包含非常複雜的目標,或包含使用者和智慧助理共同從某個錯誤中恢復的過程,甚至還包含二者關於智慧助理能力範圍的討論。
歡迎大家在 GitHub 的頁面上點選資料集、程式碼和公共排行榜的連線。對本論文更加詳細的解讀,請訪問知乎專欄。非常期待未來自然語言處理社群利用這些資源做出新的發現和創造。
GitHub:
https://github.com/microsoft/task_oriented_dialogue_as_dataflow_synthesis
知乎專欄:
https://zhuanlan.zhihu.com/p/245081650