MF99 coding 💻

keep learning; keep coding;

語音助理,Chat Bot 實作原理

一年多沒更新... 中間也發生許多事 Anyway,忙了一年的Smart Hub 產品,也從0開始接觸了語音產品。

f:id:mouseface99:20191202135325j:plain

經過幾次曲曲折折,算是慢慢地對於這些語音產品的開發有了一些基本的概念。 這邊就來初探一下語音助理,Chat Bot 相關應用的開發概念

目前市面上有許多的語音助理,線上AI客服,Chat bot 等等服務。 各家軟體大廠也都在推出自己的語音 AI 服務,至於這些服務到底是如何開發? 如果想要利用現有的服務來開發自己的語音助理要怎麼做?這邊就來分享一下

基本上,所有的語音助理,大致上都會經過以下幾個流程

f:id:mouseface99:20191121130103p:plain

也就是

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。