2022年12月8日 星期四

HTML5 : Speaking 讓題目可以「容錯」

2022年12月8日 星期四

 由江明勳老師發想,我們一起開發的「HTML5 Speaking」,是一個可以練習看文(圖)朗讀的自學小工具,它利用網頁瀏覽器內建的語音辨識功能,將使用者麥克風錄到的語音,辨識為文字以後,再跟題目的文字去進行比對。但是不論是中文還英文,都會有同音字的問題,目前中文是先轉為無調號的拼音後比對的,同音字的問題得以解決,英文同音字的部份則得另想辦法了。

當初為了解決部份字詞的語音有不容易辨識的問題,在題庫的設定中,是可以指定「容錯規則」的,也就是可以指定在題目中的部份字,有多種答案,例如:

OK. Have fun, and be careful.

上面這一句中,「OK」辨識的結果常是「Okay」,所以在 HTML5 Speaking 中總是過不了關,針對這一題,我們可以在題庫中,利用「第四欄位」,來告訴 HTML5 Speaking,「OK」或是「Okay」,兩個答案都可以。

按照預設的欄位分隔符號為兩個井字號「##」,因為原題目只使用了第一個欄位放英文,所以再加三組「##」,也就是六個井字號,就可以在「第四欄位」中開始寫「容錯規則」,我們可以在題庫中這樣設定:

OK. Have fun, and be careful.######(OK|Okay)

上面的「容錯規則」是「(OK|Okay)」,「|」這個符號是「或」的意思,所以在進行比對答案時,語音辨識結果是「OK」或是「Okay」都算答對。

可以觀察一下 [圖1] 中,綠色箭頭是語音辨識的結果「Okay」,但紅色箭頭所指的題目是「OK」。這題過關!

[圖1] 題庫使用(OK|Okay)容錯規則提升過關率

另一種狀況是人名、地名,可能更難掌握語音會辨識出什麼文字,只好使出殺手鐧,使用「萬用字元」「.*」,例如這一句:

go to Kaohsiung

「Kaohsiung」因為是音譯的,一直過不了關,那就使用「萬用字元」的「容錯規則」,只要有辨識到文字,任何字,不管幾個字,都算過關:

go to Kaohsiung######(Kaohsiung|.*)

上面在題庫的第個欄位中,設定了「容錯規則」「(Kaohsiung|.*)」,「.*」代表無論辨識出什麼字都當作是「Kaohsiung」,哈!也就是,如果我對著麥克風說「go to Taipei」,它也當作是去高雄了。

內建的容錯規則

前面介紹了兩種自訂的「容錯規則」,其實在 HTML5 Speaking 的設定中,已經預設了一百多條有關單位的「容錯規則」了,不然如果題目中有數字加單位的,幾乎都會卡關。

[圖2] 常用的單位有「容錯規則」

[圖2] 這題「thirty meters」被辨識為「30 m」,過關了,因為在 HTML5 Speaking 中,會將數字轉換,也為長度單位「meter」、「meters」加上了「容錯規則」。

進階的容錯規則

可以一字對應到多字嗎?例如題目中是用「她」,但是辨識出來可能是「他、它、牠」(哈!其實好像只有出現「他」的經驗),那怎麼讓「她」可以是「她、他、它、牠」?

如果還記得前面說過,「|」是「或」的意思,我們可以定這個的容錯規則:

(她|他|它|牠)

這樣子,題目中的「她」,就可以是「她、他、它、牠」任何一個。

如果一個句子中有兩個地方需要建立規則,怎麼辦呢?

還是一樣的,利用題目設定的「第四欄位」,不同字間,多加一個逗號即可,例如,這句:

this is a dog.

我想讓 this 的位置,可以是 this 或是 that;讓 dog 的位置,可以是 dog 或是 cat,那就將題目設定改為這樣:

this is a dog.######(this|that),(dog|cat)

在兩對括號之間,多加了一個逗號分隔,就變成兩條規則了。

來一點更複雜一點的,在預設的容錯規則中有這一條:

((too|two|to)|too|two|to)

注意上面字體放大的部份,它代表當題目中有 to、two、too 三個的任何一個時,都可以套用這條規則,可以說是下面這三條規則的合體:

(too|two|to)

(two|too|to)

(to|too|two)


相關連結


沒有留言:

張貼留言

 
雄::gsyan © 2009. Design by Pocket