開源的語音辨識 WIT.ai

今年的2015元旦剛過不了一個星期,Facebook便宣佈收購了語音辨識公司WIT.ai,這家公 司為一新創公司,成立雖僅18個月,但其語音技術根據百度(Baidu Inc.)的測試結果,比起蘋果的Siri、微軟的Cortana還要更加精確,相當接近百度(自家作的調查,當然要充胖一下)或 Google now語音助手的表現,無怪乎祖克伯要以迅雷不及掩耳的速度收購這家剛誔生的公司,作為與Apple和Google在語音AI領域相對抗的武器。

http://www.wired.com/wp-content/uploads/2014/10/witaiteam-1024x680.jpg

WIT.ai強調的是開放與免費使用,並利用使用者回饋的數據作為改善的參考;截至目前統計,已經有6000多位開發者透過WIT.ai所免費提供的API,在其程式中加入語音辨識的功能,以便開發出各式類型的App與應用環境,而其語音識別技術與資料庫在免費提供user使用的情況下,利用使用者與開發者自主回饋的資訊,作為WIT.ai自我改良的方式、並使其語音識別效率更加精確。

WIT.ai能作什麼?

在WIT.ai首頁上,直接開宗明義的列出它能協助完成的事:

  1. Mobile apps:如果你是App開發者,可以使用WIT.ai的語音服務,讓你的App具有語音控制的功能,讓使用者能夠透過手機發送或執行語音相關命令。
  2. Home automation:當WIT.ai成功解析了你所送出的語音命令,那麼就可以透過智慧家居設備來執行相對應的動作。
  3. Wearable devices:穿戴式設備由於體積小,與使用者的輸出入介面受到限制,因此高度依賴語音命令的動作方式。
  4. Robots:無論是在工廠生產線或家庭、娛樂用的機器人,皆可透過語音方式讓機器人去執行相對應的行為,讓人感覺機器人似乎擁有聽覺與智慧的能力。
  5. Messenger Agents:目前各科技大廠皆推出語音助手的服務,透過對話的方式處理部份help desk的工作,並提供即時性的協助;只要在個人的console上建立完善的語音命令資料庫,WIT.ai也可以作到這點。

WIT.ai為何免費?

最可貴的一點:WIT.ai是免費的,想想看,一般人若要建置一套自有的語音識別系統,往往要從零開始搜集龐大的語音樣本資料庫,並進行後續的處理、分析訓練、建置模型等等,這些都需要龐大的時間與人力門檻,因此限制住了像個人開發者、中小型企業等對於語音相關領域的開發與投入。

然而透過免費提供給眾多開發者應用在各種領域的專案,並將結果集中維護到線上的資料庫,這樣大量透過開發者在console對於語音識別結果的回饋,WIT.ai經由這樣集體智慧的概念,具備了自我學習並自動改良語音識別的能力,因此其辨識的準確度不下於諸如Google now、Apple Siri、Microsot Cortana、Amazon Echo等等科技大廠語音助手的識別能力。

它的作法是,使用者(開發人員)需要先收集一系列希望讓電腦能夠識別的字串和口語,集中在一個稱為「Expressions」的資料夾中,然後提供眾多的語音樣本訓練電腦讓它知道這些語音都是屬於該「Expressions」,因為不同人有不同的腔調發音與口吻,因此,愈多的樣本與「Expressions」資料愈能讓識別結果更精確。因此和GitHub 這類的程式分享平台相同,WIT.ai亦充分的利用了網路的分享功能,藉由免費提供語音識別功能給開發者,同步的要求開發人員必須分享彼此的「grammar」和樣本以增進識別精確度,而達到一舉兩得的效果。

不過,由於需要回到線上的資料庫分析取用並回饋,因此,我們可以預想到WIT.ai的一大缺點,就是必須要先連網才能使用相關的語音控制功能,如果沒有網路連線或設備不具連網功能,那麼就無法使用WIT.ai了,坦白說,這是一個致命的缺點,也是WIT.ai目前無法廣泛流行的原因,因為若需要設備在使用時必須先連網、或者必須持續的連網,那麼,它的使用範疇和應用環境就會大大的受限,而且也增加了開發的成本與功能複雜性。事實上,如果WIT.ai考量的是為了維護一套集中的資料庫、避免被自由散發利用、或者可立即更新、資料回饋等等,其實可考慮將龐大的語音資料庫預先分門別類,各別開放讓使用者依需求類型下載,且其下載的語音資料庫是經過加密無法反解譯的,或者乾脆考慮下載資料庫不連網使用者需付費等方式,應該都是可行的方向。

開始試用看看

  1. 登入GitHub帳號:WIT.ai使用GitHub來認證並建立個人專屬的控制平台(Wit console),因此必須要先擁有GitHub帳號才行,若您還沒有GitHub帳號可以到https://github.com申請,成功登入後,您便擁有專屬的Wit console(網址https://wit.ai/{您的GitHub帳號})。

下方是我的Wit console,點擊右上方的帳號名稱可新增一個instance。

  1. 建立Instance和Expression:這是比較複雜的部份,在建立所有的expression之前,我們必須先思考,想要用聲音來啟動什麼命令?

有兩個方式:

  1. 想像一下一個人應該說什麼話,然後將這個話語對應到什麼設備應作出什麼反映。
  2. 看看設備上的功能,能用什麼適當的指令來啟動它?要用什麼口語聲音來啟用這些指令?

例如,我們想要控制溫度,所以我們可能會說:

「What’s the current temperature?」

「I want to set the temperature to 71 degrees.」

「Is it me or it is hot here?」

「Set the temperature to 64 degrees at 10pm.」

「I am hot!」

以上這些都可算是口語上想要控制溫度的指令,所以我們把它們都輸入到expression當中,Intent則輸入:Temperature。

然後,我們可以先用keyin文字的方式來測試WIT.ai可否辨識;請在Console中的文字欄,輸入剛剛expressions中的任一句,例如「It’s cold」,你會發現WIT.ai告訴我們這句話的意圖是”Temperature”,由於透過文字而省略了語音的因此,如果是透過語音方式,我們必須提供愈多的樣本愈好,才能抓到正確的意圖。

另外要注意的是,這些我們自己透過語音來測訓並訓練的結果是會自動提供給其它WIT.ai會員使用的,如果你不想公開,那麼就必須付費才不會公開給外界。

WIT.ai支援那些開發工具?

  1. WEB API:我們可以透過cURL,使用HTTP URL語法、或以JQuery來傳送命令並接收回傳結果,這種方式可用於大部份的環境,如網站、WEB App、iOS、Android、Windows…等等。

Ex:JQuery+JSON的範例,送出” set an alarm in 10min”的命令,此段亦可為一個語音物件.

收到的回應亦是json格式,intent是”alarm_set”,”entities”的值是”on”,有一個”datetime”的值是”2015-03-16T23:22:13.000-07:00 ~ 2015-03-16T23:22:14.000-07:00 “,因此,我們會發現,當我們告訴WIT.ai ” set an alarm in 10min”這句話,它能夠正確的告訴我們詳細的資訊:alarm_set、on以及一組相距十分鐘的時間值,我們就可以在程式中依使用者的語音作出正確的人工智慧行為,而且個人開發者或小公司就可以作到。

  1. 其它分別針對不同平台的API或SDK:如iOS API、Android SDK、Windows API、WEB API、Raspberry Pi API、Node.js API、Ruby SDK、Python SDK、C API、Rust API等等。