會打電話的 AI 背後:Google Duplex 技術解析

30

Google 8 日在加州召開了 2018 年度的開發者大會(Google I/O 2018)。在大會介紹的 Android P、Gmail、Gboard、TPUv3 等眾多新產品和功能中,尤為亮眼的無疑是個人助理 Google Assistant 中新增加的 Duplex,它可以打電話給餐廳、髮廊等店家,幫用戶預約時間。

具體效果可以先看看 I/O 大會現場的展示影片:

在這兩則真實電話錄音中,Duplex 不僅用自然流暢的語音和電話另一頭的人類完成了交流,對方根本沒有意識到打電話來的居然是個「AI」,而且第二則錄音中它還成功地處理了意料之外的發展狀況,不僅理解了「無需預定」,還主動詢問了等位的時間。根據 Google CEO 桑德爾·皮蔡(Sundar Pichai)介紹,他們未來還計劃進一步拓展 Duplex 詢問營業時間的能力,有一個用戶的 Google Assistant 打電話詢問了某家店面的營業時間,就可以把這個詢問結果同步給更多別的用戶,不僅節省了用戶 / 消費者自己查詢的時間,也為店家節省了時間。實際上,這也是 Google 對 Google Assistant 的設計宗旨:為用戶節省時間,為用戶把事情搞定(get things done)。

Google 也同步在 Google AI 部落格上更新了 Duplex 的技術細節,編譯如下。

Google Duplex:能打電話完成真實世界任務的 AI 系統

長期以來,人類和電腦之間互動的目標都是希望兩者之間可以進行自然的對話,就像兩個人之間講話那樣。近幾年來,電腦理解和生成自然語音的能力出現了革命性的提高,Google 語音搜尋、WaveNet 之類基於深度神經網路的技術功不可沒。

即便如此,當前最先進的人機對話系統仍然只有生硬的電子聲音,而且也不理解人類的自然語言。具體來說,自動呼叫系統即便只是辨識簡單的單詞和控制指令都不令人滿意,更不用說跟人進行自然的對話了。打電話的人需要調整自己的說法方式來適應系統,系統卻沒辦法適應打電話的人。

而 8 日發表的 Google Duplex 就包含了新的技術,它可以打電話給人類,透過自然的對話完成一系列真實世界的任務。這項技術目前針對的是執行一些特定的任務,比如為某幾類活動約定時間。在這些任務中,Duplex 能讓對話過程盡可能地自然,電話另一頭的人可以像和另一個人說話一樣自然地交流,無需做任何調整(實際上對方可能根本就沒有發現這通電話不是人類打來的)。

在這項技術的研究中,一個重要的研究要點是把 Duplex 的功能限制在封閉的場景中,這些場景涵蓋的內容夠少,以至於 AI 系統可以充分地探索學習。相對應地,Duplex 經過這些場景的深入訓練後,也就只能執行這些場景內的自然對話任務,還不能和人進行一般的對話。

不過,根據開頭的影片我們已經感受到了,在這些任務中 Duplex 帶來了令人驚喜的表現,對話過程對人類來說非常舒適。

如何展開自然對話

展開一段自然的對話有這麼幾個難點:自然語言難以理解,人類的自然行為很難建模,人類對延遲的耐受性很低所以需要高處理速度,以及生成聽起來自然的語音,其中還要適當地夾雜一些語氣詞。

當人類和人類之間對話的時候,相比於與電腦對話,他們會使用更多的複雜句子。他們經常一個句子說到一半然後更正一部分錶述,會囉囉嗦嗦的,會依賴上下文然後省略一些單詞,還有時候會在一個句子裡表達好多個意思。比如:「星期二到星期四我們從上午 11 點營業到下午 2 點,然後下午 4 點到 9 點再開門;然後星期五六日我們,哦不對,星期五、星期六我們 11 點開門到 9 點,星期天 1 點到 9 點。」

在天然的、自發的對話中,相比與電腦講話,人類會講得更快、講得更不清晰一些,這時候的語音辨識也更難,單詞錯誤率更高。在打電話的時候這個問題會更明顯,經常會遇到背景噪音,通話品質也不好。

會打電話的 AI 背後:Google Duplex 技術解析

在較長的對話中,根據上下文的不同,同樣的句子也可以有不同的含義。比如,「ok for 4」在預訂座位的時候就有可能指人的數目,也有可能指時間。相關的上下文句子可能會在好幾個句子之前,而受到電話中單詞錯誤率的影響,這個問題又會變得愈發難解。

辨識了對方的語義之後,AI 系統要說的內容就是由當前要執行的任務和對話進行的狀況共同決定的。除此之外,自然語言的對話中還有一些常見的語言習慣;這些約定俗成的句法模式包括:重複時說得更詳細一些(-「時間是下週五。」-「什麼時候?」-「下週五,18 號。」),同步語句(「你聽得清楚嗎」),打斷(-「數字是 212……」-「對不起你能重新說一遍嗎」),以及停頓(「你可以稍等一下嗎(停頓)謝謝!」1 秒的停頓和 2 分鐘的停頓又有不同的含義)。

認識 Duplex

藉助語言理解、互動、時間控制、語音生成方面的最近技術發展,Google Duplex 的對話聽起來相當真實自然。

為了處理上面提到的挑戰,Duplex 的核心是一個 RNN 網路,它是由 TensorFlow Extended(RFX)構建的。為了達到高精準度,Google 用匿名的電話對話數據訓練了 Duplex 的 RNN 網路。這個網路會使用 Google 自動語音辨識(ASR)的辨識結果文本,同時也會使用音頻中的特徵、對話歷史、對話參數(比如要預訂的服務,當前時間)等。Google 為每一種不同的任務分別訓練了不同的理解模型,不過不同任務間也有一些訓練語料是共享的。最後,Google 還利用 TFX 的超參數最佳化進一步改進了模型。

會打電話的 AI 背後:Google Duplex 技術解析

輸入語音先經過自動語音辨識系統(ASR)處理,生成的文本會與上下文數據以及其他輸入一起輸入 RNN 網路,生成的應答文本再透過文本轉語音(TTS)系統讀出來。

生成自然的語音

Google 聯合使用了一個級聯 TTS 引擎和一個生成式 TTS 引擎(其中使用了 Tacotron 和 WaveNet),根據不同的情境控制語音的語調。

這個系統還可以生成一些語氣詞(比如「hmmm」、「uh」),這也讓語音變得更自然。當級聯 TTS 需要組合變化很大的語音單元,或者需要增加生成的停頓時,語氣詞就會被添加到生成的語音中,這就讓這個系統可以以一種自然的方式向對方示意「是的我在聽」或者「我還在考慮」(人類說話的時候就經常在思考的同時發出一些語氣詞)。Google 的用戶調查也確認了人類覺得帶有語氣詞的對話更熟悉、更自然。

另一方面,系統的延遲也要能夠符合人類的期待。比如,當一個人在電話裡講了「你好」這樣的簡單句子之後,他們會希望很快聽到一個簡短的回覆,這種時候會對延遲更加敏感一些。當 AI 系統檢測到需要短延遲的情境時,就會使用更快但精準度也更低的模型來處理。在某些極端情況下,系統甚至都不會等待 RNN 執行,而是直接使用快速逼近模型(通常也會和更慢的正式回應搭配起來使用,就像人類不完全理解另一方的時候會猶豫一樣)。這樣的做法就可以讓系統達到 100ms 之內的極短延遲。有趣的是,Google 發現在某些情況下要增加一些延遲來讓對話聽起來更自然,比如回覆一個很複雜的句子的時候。

系統執行

Google Duplex 系統可以進行複雜的對話,它可以完全自動地完成大多數任務,不需要任何人類參與。系統也有一個自動監控機制,不僅成功完成一個任務後可以彈出提醒給用戶,也可以辨識出沒能成功完成的任務(比如處理某個異常複雜的預訂)。在這種情況下,它會發出指令給一個人類操作員,轉交給人類完成任務。

為了在訓練系統處理新的情境,Google 也使用了即時監督訓練。這種訓練方式和許多事情的教學方法類似,都有一個教學者指導一個學生,邊做邊提供必要的指導,確保任務的執行效果達到了教學者的品質要求水平。在 Duplex 系統中,有經驗的人類操作員就可以做為這樣的教學者,當系統打電話處理新的、不熟悉的情境時,人類操作員就可以即時影響系統的行為。這樣邊做邊學的過程,可以一直持續到系統達到理想的表現為止,然後系統就可以全自動地打電話了。

有益於用戶,也有益於商家

許多商戶並沒有自己的線上預定系統,仍然使用的是線上預定。Duplex 就可以幫助他們,無需改變每日的行為慣例或者培訓員工,就可以讓用戶透過 Google Assistant 輕鬆完成預定。Duplex 也可以減少用戶放鴿子的情況,可以在手機上自動提醒用戶預訂事項,以及幫助用戶輕鬆地取消或重新安排時間。

也有一些情況下,用戶會打電話向商家詢問營業時間,比如節慶假日期間的營業時間,一般在店舖的線上頁面是看不到的。Duplex 打電話詢問之後,可以透過 Google 服務把這個資訊公開出去,省去了其他用戶打同一個電話、問同樣的問題的精力,也幫商家節省了人力。同時,商家就像往常一樣正常營業就行,這項新技術並不需要他們學習任何技能或做任何改變就可以享受到便利。

對用戶來說,Google Duplex 當然可以幫助用戶輕鬆地完成它支援的各種任務。用戶只需要和 Google Assistant 做簡單的互動,Duplex 就會自動在後台打電話,並且自動補全所需的用戶資訊。

會打電話的 AI 背後:Google Duplex 技術解析

用戶讓 Google Assistant 做個預約,Google Assistant 接下來就會透過 Duplex 打電話與商家完成預約。

Duplex 還能為用戶帶來一項便利,就是可以非同步地做為服務提供商的代理,比如在非營業時間打電話給商家,或者手機訊號不好的時候,Duplex 在這種情況下就成為了一條額外的資訊獲取途徑。它也可以幫助殘障人士或語言不通的用戶,替聽力受損的用戶打電話完成預約,或替用戶用另一種語言完成任務。

今年夏天,Google 就會開始利用 Google Assistant 測試 Duplex,就從預訂餐廳、髮廊、詢問節慶假日的營業時間這樣的事項開始。

會打電話的 AI 背後:Google Duplex 技術解析

▲ Google Duplex 團隊負責人 Yaniv Leviathan 和項目工程主管 Matan Kalma 在餐廳吃飯,這頓飯就是Duplex 打電話為他們預訂的。(Source:Google Blog

一直以來,讓人們可以「像人與人互動一樣自然地與科技互動」都是 Google 的目標。Google Duplex 就是邁向這個方向的一步,在特定場景下以自然的對話讓人和科技互動。Google 希望這些具體技術的發展也可以為人類和電腦的日常互動帶來更有意義的改進。

(本文由 雷鋒網 授權轉載;首圖來源:shutterstock)

延伸閱讀: