以智慧音響、智慧電視為代表的對話式互動,是時下非常火熱的、且能夠走近我們生活的人工智慧子領域。從本篇開始,我們將一起走進對話式互動。
什麼是對話式互動呢?我們首先從一個例子開始。賈維斯,電影《鋼鐵俠》中那位鋼鐵俠的 AI 管家,他能獨立思考、可以實時幫鋼鐵俠處理各種事情,包括計算海量資料。其中最讓觀眾印象深刻的就是,賈維斯可以隨時隨地像人一樣進行口語交流,來解決鋼鐵俠的問題。
賈維斯能聽、會說,能實時理解主人的對話意圖並根據實際場景進行下一步的對話,如果在對話過程中碰到有歧義的情況,他還會追問鋼鐵俠,讓他提供更多的資訊來消除歧義。賈維斯的這些能力就是對話式互動要提供的,其中的核心是 VUI (Voice User Interface,語音使用者介面)的設計。相對於 GUI(Graphical User Interface,圖形使用者介面),VUI 解放了人的雙手,某些場景下,簡單的一句語音命令就能代替 GUI 下滑鼠 / 遙控器的多次點選,這帶來的不只是方便,還節省了時間。一個好的 VUI 系統,能夠讓使用者儘可能通過最少輪次的對話實現既定意圖的執行。賈維斯總能在危機時刻幫到鋼鐵俠,他是一個具有完美 VUI 的語音助手。
嗯,我們不要入戲過深,賈維斯是一部電影裡的虛擬系統。那麼,現實生活中,我們能創造出來一個接近賈維斯的對話式互動系統嗎?我們該怎麼做呢?呃,很遺憾,以當前的科技發展水平,我們還做不到電影裡那麼智慧,更不用說讓機器有意識。但人機互動並不是昨天才發明出來的,人類在這個領域已經探索了幾十年,我們可以實現鋼鐵俠與賈維斯的互動方式,並用這種方式來幫我們處理一些資料或控制我們身邊的一些硬體裝置(比如讓語音助手根據天氣提供穿衣建議或者控制廚房和臥室的各個家電),這就是我們要聊的對話式互動技術。
對話式互動技術包括了語音識別 / 合成、語義理解和對話管理三個部分。當下的對話式互動產品主要分兩類:以微軟小冰為代表的開放域(Open Domain)對話系統和以亞馬遜 Alex 為代表的任務導向(Task Oriented)對話系統。以現在的技術能力,在開放域聊天中,準確理解使用者的話並給出正確答案的難度是很大的,因為面對使用者千奇百怪的提問,機器對意圖的理解很可能出現錯誤,知識庫也可能涵蓋不了那麼廣。開放域聊天更像是一個資訊檢索系統,基於已有知識庫,為使用者的輸入匹配到一個答案。這樣的對話能力是十分有限的,構造一個完善的知識庫更是困難重重。而任務導向的對話系統旨在幫助使用者完成特定領域的任務,比如”查詢天氣“、“訂酒店”,這種領域特定的對話系統的最大優勢是實現起來相對有效並且易於產品化。本系列的後續文章,我們將深入 Amazon、Google 和 Microsoft 三家任務導向的對話平臺。在此之前,我們先一起領略對話式互動技術流程的各個環節。
回顧一下鋼鐵俠和賈維斯的互動過程,我們以鋼鐵俠詢問賈維斯當前裝備的損傷狀況為例,他們的對話可以概括如下:鋼鐵俠向賈維斯詢問,賈維斯接收到鋼鐵俠的話並理解他的意圖,然後去查詢相關資料,最後把資料展示在螢幕上或讀出相關資料給鋼鐵俠聽。這個互動的過程可以總結成下面這張圖:
鋼鐵俠向賈維斯詢問:鋼鐵俠的語音流傳送給賈維斯。
賈維斯接收到鋼鐵俠的話:賈維斯將語音識別為對應的文字,並將口語化的文字歸一、糾錯,並書面化。
理解他的意圖:賈維斯進行語義理解,並進入對話管理。這裡省去了多輪對話的示意,當意圖相關資訊不明確時,賈維斯會發起確認對話,鋼鐵俠也可以根據賈維斯的反饋,繼續問其他相關內容,這些都是語義理解和對話管理服務的範疇。
然後去查詢相關資料:在對話式互動服務中,這個流程的提供者我們稱其為內容服務。
最後把資料展示在螢幕上:對話結束,產生執行動作。
或讀出相關資料給鋼鐵俠聽:對話結束,語言生成文字經過語音合成服務,轉換為語音流,播報給使用者。
我們一般稱將這樣的對話式互動系統為語音對話系統(Spoken Dialog System)。這裡簡單描述下各個元件。
ASR(Automatic Speech Recognition)直譯為自動語音識別,是一種通過聲學模型和語言模型,將人的語音識別為文字的技術。近年來,隨著深度學習在語音識別中的廣泛使用,識別的準確率大大提高,讓這項技術能被廣泛地應用於語音輸入、語音搜尋、實時翻譯、智慧家居等領域,讓人與機器的語音互動變為可能。
語音識別只是知道我們說了什麼,但真正要理解我們說的是什麼,就需要依靠 NLU 這項技術。NLU(Natural Language Understand)直譯為自然語言理解,是 NLP(Natural Language Processing,自然語言處理)的一個子集,專注於“口語表達和對話”方向的自然語言處理。我們首先快速瞭解一下 NLP,NLP 研究主要用來解決下面這些問題:
分詞:中文的書寫詞語之間不會用空格等符號來分割,分詞就是將漢字序列切分成詞序列,因為在漢語中,詞是承載語義的基本單元。比如從北京飛上海這句話的分詞為:從 北京 飛 上海。
詞性標註:詞性用來描述一個詞在上下文中的作用,如名詞、動詞、形容詞等,詞性標註就是識別這些詞的詞性,來確定其在上下文中的作用。
命名實體識別:在句子中定位並識別人名、地名、機構名、數字、日期等實體。
文字分類:文字分類就是將一篇文件歸入預定義類別中的一個或幾個,比如將某一類郵件歸類為垃圾郵件,區分不同新聞的型別等。
情感分析:情感分析是找出說話者或文字作者對某個話題的兩極性觀點(積極或消極)、情緒(高興、悲傷、喜歡、厭惡等)。
自然語言理解通過使用上述技術,完成指代消解、否定判斷、語句泛化、口語歸一化、ASR 糾錯等工作,識別人機對話中的領域和意圖,獲得對話任務的語義資訊。我們可以通過下面幾個例子感受一下:
第 45 任美國總統是誰?
他是哪裡出生的?他 = 唐納德·川普
感覺怎麼樣?
不太好 不要緊 沒問題 有問題 沒有問題 沒沒沒 沒事
我要看溫情的電影 來個柔情的片子 我想看看暖心的影片
語義表示有多種形式,本系列使用的是最常見也是目前為止最成功的"框架語義(Frame Semantics)",即採用領域(Domain)、意圖(Intent)和詞槽(Slot)來表示語義結果。
領域(Domain):領域是指同一型別的資料或資源,以及圍繞這些資料或資源提供的服務。比如“天氣”、“音樂”、“酒店”等。
意圖(Intent):意圖是指對於領域資料的操作,一般以動賓短語來命名,比如音樂領域有“查詢歌曲”、“播放音樂”、“暫停音樂”等意圖。
詞槽(Slot):詞槽用來存放領域的屬性,比如音樂領域有“歌曲名”、“歌手”等詞槽。
舉個例子,從“北京明天天氣怎麼樣”這句話中,NLU 可以得到以下語義結果:
領域(Domain):天氣
意圖(Intent):查詢天氣
詞槽(Slot):
城市(city) = 北京
時間(date) = 明天
DM(Dialog Management)直譯為對話管理,是對話式互動系統的核心,負責控制整個對話過程。主要包括對話上下文(Dialog Context)、對話狀態跟蹤(Dialog State Tracking)和對話策略(Dialog Policy)幾部分。
對話上下文:記錄對話的領域、意圖和詞槽資料,每個領域可能包含多個意圖的資料, 一般以佇列的形式儲存。
對話狀態跟蹤:每輪對話開始後,會結合本輪對話提供的語義資訊和上下文資料,確定當前對話狀態,同時會補全或替換詞槽。
對話策略:根據對話狀態和具體任務決定要執行什麼動作,比如進一步詢問使用者以獲得更多的資訊、呼叫內容服務等。
同樣以天氣場景的對話舉例說明:
Q:明天天氣怎麼樣?(
intent=query_weather,date= 明天,city=null)A:您要查詢哪個城市的天氣?(
action= 詢問查詢哪個城市)Q:北京的 (
intent=query_weather,date= 明天,city= 北京)A:北京明天晴(
action= 呼叫天氣服務)Q:那杭州呢?(
intent=query_weather,date= 明天,city= 杭州)A:杭州明天小雨(
action= 呼叫天氣服務)Q:後天天氣(
intent=query_weather,date= 後天,city= 杭州)A:杭州後天小雪(
action= 呼叫天氣服務)
假設我們要查詢天氣資訊。查詢天氣這個意圖需要兩個必選詞槽,城市和日期。也就是說,只有當這兩個詞槽都有資料時才能查詢天氣服務,得到天氣資料。從上面對話場景中可以看到,對話管理模組會維護多輪對話上下文資料(包含意圖和詞槽等),跟蹤對話狀態,填補或替換詞槽資料,並決定如何與使用者互動或執行什麼樣的動作。比如缺少必選詞槽時,對話系統會追問使用者,以補全詞槽。
NLG(Natural Language Generation)直譯為自然語言生成,即對話生成的技術。對於任務導向的對話來說,NLG 基本以模板形式來實現。模板中的回覆資訊可由詞槽或通過內容服務得到的資料來替換。對話生成的原則是符合自然語言互動的習慣,易於使用者理解,最快完成對話。此外,NLG 還可以用於引導使用者的交流習慣,比如 NLG 的內容為"已經為你開啟導航",可以引導使用者在希望導航時,說"開啟導航"。
TTS(Text To Speech)是指語音合成技術。對話系統的輸出是文字形式的 NLG 或者指令,當對話返回的內容是 NLG 時,通過 TTS 技術能將這些文字轉換成流暢的語音,播放給使用者。TTS 技術提供語速、音調、音量、音訊位元速率上的控制,打破 GUI 中傳統的文字式人機互動方式,讓人機溝通更自然。
講完了對話式互動的流程和關鍵技術,接下來來我們再深入思考下對話式互動的產品化。
GUI(Graphical User Interface),即圖形使用者介面,是我們最熟悉的人機互動方式。我們每天面對的 PC 和手機,無論是使用滑鼠點選還是手指操作觸控式螢幕,我們早已習慣了這種無聲的圖形介面交流方式。隨著 AI 技術的發展,對話式互動逐漸走近我們的生活,我們和機器之間的互動從 GUI 邁向了 VUI(Voice User Interface),即語音使用者介面。VUI 是語音應用 / 裝置的入口,當你說"Hey Google"的時候,Google Home 的音響就會被喚醒,進而與你交流。語音成為了 VUI 世界的連線者,就像 GUI 時代的滑鼠和手指。
相比 GUI 需要使用者動手觸發某個動作後結果只能以視覺形式展現給使用者,VUI 有自己獨特的優點,它可以解放使用者的雙手和雙眼,無需手持或者緊盯著裝置,用說話這種更自然的方式去觸發動作,而返回結果則以語音方式播放給使用者聽。這在一些像駕駛、做飯、跑步等無法動手操作的場景下特別有用。設計良好的 VUI,會以最少的互動完成使用者的意圖,能極大地提升使用者體驗。比如,通過學習使用者習慣從而為使用者提供"條件反射式"的服務、更口語化的交流、引導使用者收斂話題,通過詢問糾正異常情況(當使用者不按套路出牌時)等。
在 GUI 中,使用者的行為流程是預先設計好的,比如在某個介面能觸發什麼動作都是固定的,或者有個一級一級的引導關係,使用者只能按照設定好的流程去做。而在 VUI 中,使用者的行為則是無法預測的,不同使用者在不同的場景下的行為可能完全不一樣,而且語音互動需要使用者高度集中注意力去聽系統說了什麼。在一些場景下反而會帶來不便,比如在電視上想看一個節目列表,用圖形介面展示的方式會更直觀一點,使用者可以慢慢看,但用語音播報的話,資料量大的時候,使用者很可能聽了後面的忘記前面的,效果反而不如 GUI 好。所以設計 VUI 時千萬不要讓使用者有認知負荷,不要挑戰人類短暫的記憶力。
聲音是自然的互動方式,但卻不能完全取代 GUI,它們是一個互補協作的關係。所以在設計語音互動介面時,可以把 VUI 和 GUI 結合起來,以實現多模態的智慧互動。通過上面的描述,我們對 VUI 有了大致的瞭解,趁熱打鐵,我們來設計一個對話式互動產品。一起體會下對話平臺要注意哪些問題。
設計一個好的對話式互動產品首先要突破 GUI 的設計思維。我們設計一個對話任務的目標是最快速地解決使用者的問題。對話式互動產品重點是互動,因此一定要結合場景來設計,要把自己代入對話場景中,想象如果自己使用這個語音介面,會在什麼情況下使用、以怎樣的方式跟它對話、希望它怎麼回覆我們。下面我總結出了一些設計步驟和原則,可以作為參考:
1. 選擇正確的使用者場景,提供優質對話體驗
不要嘗試直接把現有的手機或桌面應用的互動方式轉變成語音互動,這樣可能會讓語音互動變得更加複雜。我們應該結合使用者使用語音互動時的狀態,比如在戶外不方便看網頁或螢幕,或者雙手被佔用無法操作別的東西。
這裡有以下幾點建議來幫忙選擇適合轉換成語音互動的場景:
需要使用者輸入的特別熟悉的資訊,比如個人資訊、位置、時間等。
能快速提供有用資訊的場景,使用者說幾句話就能節省很多操作,比如訂餐、叫車。
天生適合語音互動的場景,比如做飯時聽菜譜、開車時做筆記。
2. 建立符合當前場景的對話風格和形象
開始設計語音互動之前,先考慮你希望它聽起來怎麼樣,能帶給人怎樣的感受。比如要設計個趣味遊戲,你可能想要一種搞笑風格;而設計個新聞閱讀器,就需要嚴肅認真的語氣,給人靠譜的感覺。
3. 編寫對話
選好場景、確定形象後,你可能想要馬上投入開發,但是一定要拒絕衝動。相反,我們要用紙和筆先構思一下對話。寫下使用者可能參與的獨立或多輪對話,下面是一些對話型別和可能需要考慮的問題:
完成對話任務最簡單的方式,不要太複雜。
完成對話任務的其他方式,這可能是多樣化的,因為有的使用者一次只說一部分資訊,這就需要多次互動才能完成任務,而有的使用者則一次把所有資訊說完。
需要修正的對話場景,比如系統不支援,或不理解使用者的意圖。
使用者中途結束對話,或完成對話任務後,怎麼確認結束對話場景。
問候語,以及怎麼引出對話場景。
語音互動部分搞定後,需要考慮怎麼在裝置螢幕上展示對話內容。比如對話通過語音方式說出了一部分內容,而還有一些資料需要展示在螢幕上。
4. 進行測試
測試沒有想象中的麻煩,你需要做的就是找一些開發團隊之外的人,在沒有提示的情況下,讓他們用平時正常說話的方式使用你的產品,從各個角度測試對話。多試幾次可能就會發現哪些對話任務完成有困難,或者互動給人的感受怎麼樣。
設計對話的目標是滿足使用者的意圖,而不僅僅是完成一個功能。
給語音互動介面賦予一個擬人化的形象,不要讓使用者覺得太生硬,是在跟機器對話。
保持簡潔,節省使用者的時間,提供有效的資訊。
信任使用者,使用者知道怎麼講話,所以不要試圖教使用者怎麼說,我們只需要提供最自然的方式,推進對話進展就可以。
可以增加個性化能力,使使用者聽起來感到愉悅,但不要分散使用者注意力。
使新使用者感興趣,也要吸引專家使用者,設計要面向海量使用者,而不是隻滿足低端需求。
輪流說話,當輪到使用者說話時,不要貿然打斷。如果是問使用者問題,那就不要在他們回答問題的時候又突然插入其他指令。
不要猜測使用者的意圖,給使用者展現事實,讓他們自己決定。
結合上下文語境,追蹤對話的來龍去脈,保證準確理解使用者的話。
綜上,我們對對話式互動有了比較全面的認識,本系列接下來的三篇文章將以本篇講述的對話式互動知識為背景,深度講述亞馬遜、谷歌和微軟的語音互動平臺,和大家一起分享如何在這三大平臺上,實現我們自己的對話式互動技能。這裡對技能的定義是特定領域的對話能力,包括語義理解、對話邏輯控制和相關的內容服務。
https://developer.amazon.com/designing-for-voice/
https://developer.amazon.com/alexa-skills-kit/vui
https://developers.google.com/actions/design/principles
https://design.google/library/conversation-design-speaking-same-language/
https://yq.aliyun.com/articles/8301
我們來自阿里巴巴智慧語音互動團隊,隸屬於阿里巴巴機器智慧技術部門。我們的主攻方向是對話式互動技術,對外輸出 Spoken Language System 產品 (http://nls.console.aliyun.com )。我們是上汽集團智聯網汽車、上海地鐵語音購票、海爾人工智慧電視等產品,語音互動能力背後的男人。