語音助理,Chat Bot 實作原理
一年多沒更新... 中間也發生許多事 Anyway,忙了一年的Smart Hub 產品,也從0開始接觸了語音產品。
經過幾次曲曲折折,算是慢慢地對於這些語音產品的開發有了一些基本的概念。 這邊就來初探一下語音助理,Chat Bot 相關應用的開發概念
目前市面上有許多的語音助理,線上AI客服,Chat bot 等等服務。 各家軟體大廠也都在推出自己的語音 AI 服務,至於這些服務到底是如何開發? 如果想要利用現有的服務來開發自己的語音助理要怎麼做?這邊就來分享一下
基本上,所有的語音助理,大致上都會經過以下幾個流程
也就是
1. STT (Speech To Text) : 語音辨識
2. TTI (Text To Intent) : 意圖辨識
3. ITA (Intent To Action) : 行為分析
4. Action Handler : 行為處理
這邊先舉一個實例,後面再詳加說明
使用者對著終端裝置說:「今天台北天氣如何?」
STT:將使用者的聲音
,轉換成 今天台北天氣如何
的文字
TTI:從這段文字中,分析出使用者的 意圖
為 詢問天氣
,附加資訊為 時間:今天
跟 地點:台北
ITA:透過 API,查詢到今天台北的天氣,並整理成一段文字「今天台北會下雨唷」
Action Handler:透過 TTS(Text To Speech)語音合成服務,將這句 今天台北會下雨唷
念出來給使用者
STT
首先,使用者對你的終端裝置講話,第一步就是要將他所講話的聲音轉換成文字,以便於後續的處理。 這部分算是已經很成熟的科技,畢竟已經做了很多年,基本上各大語系的支援度都不是什麼大問題。
頂多是在地的廠商可能可以針對當地,或是不同地區的口音做微調或優化。
早期或是一些傳統一點的STT服務,基本上都是基於聲紋辨識,與資料庫中已經訓練好的語音模型來比對,取得最接近的文字。 但是這部分在某些領域可能會有些問題,比方說小朋友含糊不清的語調,或是同音字。
近幾年開始有一些廠商開始在這部分加入了AI的處理,不再只是單純的根據聲紋的特徵值,還加入了會根據使用者的年齡,上下文的情境分析,選出最適合的文字。
TTI
接下來這塊就是這幾年各大軟體,甚至硬體廠商爭相投入資源的一塊,也是各家展現 AI 實力的部分。 也就是語意分析,或有些廠商稱為自然語言識別。
簡單來說,你講了一句「今天天氣如何?」,STT 能夠做到幫你把聲音轉換成文字。 但是要如何在這段文字裡面取得使用者的意圖(Intent),就需要AI的協助。
強大的AI甚至可以在使用者文字中根本沒出現「天氣」的關鍵字,但是也能抓出使用者想要知道天氣如何。
這部分原則上是利用一些事先輸入的訓練資料,AI會根據句型分析,前後文的位置。這部分有相當程度的 domain knowhow,小弟也只是使用了這些服務,詳細內容就不是很清楚了。
但是基本上在這個過程內,系統能夠將使用者所講的,或是用電腦打的文字(Chat bot),分析出這句話中使用者的意圖,以及內涵的其他附加資訊。
比方說,使用者說了「今天台北的天氣如何?」,AI 就能辨識出這句話中,使用者的意圖
為 詢問天氣狀況
,另外還附加了兩個額外資訊:
- 時間:今天
- 地點:台北
經由這段的過濾,基本上只要使用者的意圖為詢問天氣,不管他用什麼樣的語句,問句,說法。理論上最後都會判定為相同的意圖。以便於下一階段的處理。
另外,進階一點的 TTI 服務,還能夠做到上下文的連帶關係處理。
比方說,如果使用者第一句詢問了「今天台北天氣如何?」,然後機器處理完後回答說「今天台北會下雨唷」 之後使用者再問一句「那明天呢?」
這時候如果單純的只用 STT/TTI 的話,其實會無法分辨使用者意圖的。
但是如果能參照上下文,其實就能夠得知使用者的意圖還是 詢問天氣
,並且地點不變,只是要詢問另外一個時間。
ITA
如果已經從 TTI 中得知了意圖跟相關的附加資訊後,這一個部分就相對的單純一些了。 基本上 ITA 就只是一個 Rule Base 的處理裝置,將事先分類好的 Intent 種類,已經如何處置的邏輯整理在一起。
比方說,如果是詢問天氣
的意圖,就去 weathers.com 的API查詢,如果還缺了其他必要資訊,比方說時間、地點。則繼續詢問使用者等等。
根據這些邏輯判斷以及規則,最後能夠產生一個能夠被執行的行為 (Action)
以剛剛的例子來說,當使用者的意圖
為 詢問天氣
,並且滿足了其他資訊(時間、地點),就去 weathers.com API 查詢,並且將資訊組合成一句口語化的敘述,然後最終行為
是 反饋這句敘述給使用者
Action Handler
上面提到的 STT / TTI / ITA 基本上都會是基於雲端的服務,但是最後的 Action Handler 基本上會是運行在終端裝置上,不管是網頁,Chat bot 的軟體,或是語音助理的裝置。 基本上會根據 ITA 所提供的 Action 做實際的處置。
像是剛剛的例子,如果收到的行為是反饋這句敘述給使用者
那在網頁或是聊天軟體的終端,可能就是顯示這段文字在畫面上
若是語音助理,則透過額外的 TTS 語音合成服務來唸出這句話。
通常 Action Handler 會比較偏向硬體的操作,像是開關燈,播音樂,硬體控制(音量,燈光亮度等等),不過這部分也可以跟 ITA 的分類邏輯一同設計,做出符合產品功能最適合的分類方式。
所以,這邊最後再回顧一下剛剛的例子
使用者對著終端裝置說:「今天台北天氣如何?」
STT:將使用者的聲音
,轉換成 今天台北天氣如何
的文字
TTI:從這段文字中,分析出使用者的 意圖
為 詢問天氣
,附加資訊為 時間:今天
跟 地點:台北
ITA:透過 API,查詢到今天台北的天氣,並整理成一段文字「今天台北會下雨唷」
Action Handler:透過 TTS(Text To Speech)語音合成服務,將這句 今天台北會下雨唷
念出來給使用者
應該更能夠有所體會。
至於在實務開發上,基本上除非是專門在處理語音,或是專攻 AI 領域的軟體公司,不然如果單純是想利用現有的服務開發語音助理或是線上 AI 客服類型的服務的話,大多 STT / TTI 會去使用現有的雲端服務,像是微軟的Cognitive Service,IBM的 Watson,或是 AWS, Google 都有相關的服務可以使用。
然後,再根據自己產品的功能,終端產品的特性,去設計,定義與實作 ITA 以及終端上的 Action Handler。