MSDN Magazine 有一篇文章:Exploring New Speech Recognition And Synthesis APIs In Windows Vista,看了之後不禁開啟期待 Windows Vista  的語音辨識和語音合成功能。

我把這篇文章裡面的基礎觀念部份整理出來:

===============================

語音技術包含兩個部份:語音辨識(speech recognizers)和語音合成(speech synthesizers)。語音辨識就是將輸入的聲音資料轉成文字的過程,而語音合成則是相反的過程--將輸入的文字轉換成語音,因此又稱為 Text-To-Speech,簡稱 TTS。

語音合成

要將一段文字轉換成語音輸出,牽涉到許多複雜的處理,主要可分為前端(front end)與後端(back end)處理兩個子系統。在前端處理的部份,使用自然語言規則來分辨字元,以及哪些是名詞、哪些是數字、一個句子的開頭和結束、時態(過去是、現在式、未 來式)、以及是一般的陳述句還是疑問句...等等。有些處理對英文來說比較容易,對其他語言(例如中文或日文)則比較麻煩。例如英語的疑問句,在句尾時會 提高音調,又如「read」這個單字,會因為時態的不同而有不同的發音,這些都是語音合成器必須處理的問題。而且不同語言各有不同的規則,因此,語音合成 需要許多複雜的分析。

在後端處理的部份,則是接收前端子系統的分析結果,把文字轉成語音輸出。比較早期或一些簡單的語音合成器,通常用事先錄好的音標來合成聲音,這種方 式產生出來的聲音聽起來就很呆板、不自然。而 Windows Vista 的語音合成器則採用比較費時的聲音區段(sound segment)錄製方式,預先錄製各種的聲音區段,而後端處理的重點,就在於如何選擇適當的聲音區段,並且將各聲音區段平順地銜接起來,以產生比較自然 的發音。

這些處理聽起來很複雜,事實上的確如此。所幸這些複雜的功能,現在都由 Windows Vista 作業系統提供了,我們--開發人員--只要使用 .NET Framework 提供的元件來撰寫應用程式,就能為應用程式加入語音的功能了。

語音辨識

語音辨識的處理也可以分為前端與後端子系統。前端子系統分析聲音串流資料,將各個聲音區段分離出來,然後由後端子系統將分析的結果轉換成文字。轉換 的過程需要到三種資料庫中搜尋比對以找出正確的字詞,包括:聽覺模型(acoustic model)、詞庫(lexicon)、以及語言模型(language model)。聽覺模型資料庫是用來記錄說話者的發音習慣,以自我學習的方式,提升語音辨識的正確率。詞庫則包含了某種語言的所有字詞,以及每個字的發音 資料。語言模型則包含了某種語言的字詞該如何組合的規則。

由於人在說話時,不可能每個字都唸得很標準,而且同一個字每次唸出來都有些微的差異,因此要讓機器從聲音資料中識別人說的是哪個字,關鍵在於語音辨識器的搜尋和比對的正確率。愈好的語音辨識器,能夠更精準的濾除不正確的字,並且快速找到比較可能的字詞。

跟 Windows Vista 對話

Windows Vista 作業系統內建了語音辨識和語音合成的功能,並且預先定義了一些命令,可以讓你用語音叫作業系統做事情。例如:要開啟記事本,你可以說:「Start Notepad」,要切換到另一個應用程式,可以說:「Switch to Word」、「Switch to Calculator」等等。你甚至還可以控制選單和按鈕等控制項,例如:「Open」、「File」。另外還可以用語音控制滑鼠和鍵盤,比如說: 「Press shift control left arrow 3 times」會讓作業系統模擬按下三次 Shift+Control+方向鍵左鍵。

Windows Vista 也提供了語音輸入的功能,可以將你唸出來的句子轉換成文字。如果在轉換的過程發生失誤,你可以利用語音的方式更正,例如:「Correct Robot, Robert」,或者「Spell it R, O, B, E, R as in rabbit, T as in telephone」。你也可以用語音來選取文件中的某一段文字或移動游標到特定位置,例如:「Select 'My name is'」、「Go after Robert」。