當我們提到對話機器人,你是否也會像我一樣立刻想起與Siri或者Alexa的一次次對話,雖然它們有時候可能會讓你啼笑皆非,但也無可否認它們確實為我們的生活帶來了很大便利。然而,訓練這樣的對話AI,其難點在于如何獲取高質量的對話數據。過去我們通常需要收集大量的人類對話作為訓練數據,這既費時又費力。那么,有沒有更好的方法呢?
偶然想起去年閱讀的一篇論文,介紹了一種對話補全的方案,非常有趣。今天就向大家介紹一種全新的方法——對話補全,它能幫我們把普通的文檔轉變成聊天記錄。讓我們一起探索這個顛覆傳統的技術,看看它如何打破界限,讓任何一篇文檔都能“說話”。
首先,讓我們看一下“對話補全”(inpainting)這個詞。它其實是從圖像處理那塊借用過來的,原意是指用周圍的像素信息來補全圖片中缺失或者損壞的部分。而在這篇論文里,我們可以理解為用已有的對話內容來推測和補全對話中缺失的部分。就好像我們在看一幅畫時,如果畫中有一部分缺失,我們就會想象這部分應該是什么樣的,以使畫看上去更完整。在對話補全中,我們也是這樣,利用已有的對話內容來猜測缺失的部分,讓整個對話聽起來更流暢、更完整。
下面我們來看看這個論文是怎么講的。
簡介
對話機器人需要大量的優質對話來進行訓練,但這種數據往往不太好找。因此,論文作者想出了一種新的方法,叫做"對話補全",就是把普通的文章改編成像我們日常聊天一樣的對話。這樣一來,我們就能從各種各樣的文章中獲取大量的對話內容了。具體來說,就是把文章的每一句話看作一個人的發言,然后機器人就要猜測另一個人可能的回答或者提問。
訓練的部分
對話補全器(inpainting)使用的是一種叫做T5的生成模型,這是一種編碼器-解碼器的模型。這個模型的訓練方法跟我們之前見過的BERT模型有點類似,只不過有一個關鍵的不同:BERT是在句子中遮蔽單個的詞語來訓練模型,而在這里,我們是遮蔽掉整個發言來訓練模型。
舉個例子,考慮以下對話:
講話者1:“你好,你怎么樣?”
講話者2:“我很好,謝謝你。你呢?”
講話者1:“我也很好,謝謝你的關心。”
在對話補全任務中,可能會遮蔽一個完整的發言,像這樣:
講話者1:“你好,你怎么樣?”
講話者2:?
講話者1:“我也很好,謝謝你的關心。”
模型的任務就是預測缺失的發言(在這個例子中,“我很好,謝謝你。你呢?”)。用于訓練的損失函數是標準的交叉熵損失,它的目標是最小化原始發言在部分對話給出的情況下的負對數概率。
推理階段
在推理階段,訓練好的補全模型被用來將一篇文章轉化為對話。假設我們有一篇這樣的文章:
“貓是小型的食肉哺乳動物。”
“它們經常被當作寵物。”
“貓有強壯的柔韌體骼,反應快,爪子銳利且可以伸縮。”
這篇文章被視作在一個假設的對話中,作者的一系列發言。這個對話最初看起來像這樣:
作者:“貓是小型的食肉哺乳動物。”
讀者:?
作者:“它們經常被當作寵物。”
讀者:?
作者:“貓有強壯的柔韌體骼,反應快,爪子銳利且可以伸縮。”
讀者:?
問號代表對話中缺失的部分,這就是對話補全模型設計的目的,去填補這些缺失的部分。用了對話補全模型后,對話可能會變成這樣:
作者:“貓是小型的食肉哺乳動物。”
讀者:“貓一般常在哪些地方出沒呢?”
作者:“它們經常被當作寵物。”
讀者:“貓有哪些特殊的身體特征呢?”
作者:“貓有強壯的柔韌體骼,反應快,爪子銳利且可以伸縮。”
讀者:“真有意思,你能再多介紹一些關于貓的行為習性嗎?”
文章和對話的例子
再讓我們看另一篇文章:
“大象是大型哺乳動物。”
“它們有長長的鼻子。”
“大象是食草動物。”
用了對話補全模型后,對話可能會變成這樣:
作者:“大象是大型哺乳動物。”
讀者:“大象有哪些獨特的特征呢?”
作者:“它們有長長的鼻子。”
讀者:“大象平時都吃些什么?”
作者:“大象是食草動物。”
讀者:“真有趣,你能告訴我更多關于大象的棲息地信息嗎?”
總結
"對話補全"就像是給聊天記錄中的空白部分填充內容。它可以幫我們把普通的文章變成像人們日常對話一樣的聊天記錄。這對于訓練聊天機器人來說是個好方法,因為它能提供大量豐富、真實的對話內容。所以,這個技術可能會給聊天機器人的發展帶來很大的幫助。