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