AI 願望池願望 #37 的實作

台語即時字幕

對手機或電腦講台語,螢幕即時顯示繁體中文字,讓旁邊不懂台語的人當場讀。單向:台語語音進,繁體中文字出。

先講最重要的一件事

這一頁只是前端。辨識不在這裡跑,也沒有雲端服務可以借用。你要把 repo 抓下來、在自己的電腦上把後端跑起來,這一頁才會出字。

而且即時字幕實質上需要一張 NVIDIA GPU。純 CPU 一句話講完要等四到八秒才出字,而下一句已經在講了,只會越積越多。(純 CPU 拿來做「錄一段丟進去、等十幾秒拿逐字稿」倒是很划算,30 秒音檔四執行緒 9.4 秒就跑完。)

為什麼不能直接給你一個線上網址:這顆模型是別人微調的,所有託管模型 API 都跑不了它,Cloudflare Workers AI 只有內建模型,Hugging Face 也沒有任何 inference provider 在服務它。算力一定要自己出。

這是什麼

辨識與台語到華語的轉寫由同一顆模型一步完成。用的是 MediaTek-Research/Breeze-ASR-26,它本身就把台語語音寫成華語用字的繁體中文,所以中間沒有第二段翻譯流程。實跑載入的是社群的 CTranslate2 int8 量化版,1.56GB,跑在 faster-whisper 上。

它不做這些:不做中文轉台語(方向只有一邊)、不把結果唸出來、不分辨誰在講話、不存逐字稿(後端不寫檔也沒有資料庫,字幕只活在瀏覽器畫面上,重新整理就沒了)、沒有登入。

先看它長什麼樣

影片裡的音源是教育部臺灣台語常用詞辭典的例句錄音,取自 Hugging Face 上的 sarahwei/Taiwanese-Minnan-Example-Sentences 資料集,授權 CC BY-NC-SA 4.0。

拍法要說清楚:音檔是從喇叭放出來、經過空氣、由麥克風收進去的,不是把檔案直接餵給程式。所以畫面上看到的收音、切句與錯字,就是真實聲學條件下會遇到的情況。

誠實邊界:這仍然是預錄音檔經過喇叭,不是真人當場開口講話。真人自然口語目前沒有量過。

自己跑起來

  1. 把 repo 抓下來,建虛擬環境,裝相依套件,然後啟動。

    git clone https://github.com/yazelin/taigi-caption.git
    cd taigi-caption
    python3 -m venv .venv
    .venv/bin/pip install -r requirements.txt
    scripts/run.sh

    第一次啟動會自動從 Hugging Face 下載模型,約 1.56GB,之後走本機快取。沒有憑證時 scripts/run.sh 走 HTTP,預設監聽 http://127.0.0.1:8000

  2. 後端跑起來之後,回到這一頁按下面的「打開字幕介面」。介面的「設定」裡,後端位址要填 http://127.0.0.1:8000。按鈕的連結已經把這個位址帶好了,通常不用自己打字。

  3. 這一頁是 HTTPS,但它可以直接打你本機的 http 後端。整條路已經實測通過:這個網址的前端,配上跑在你電腦上的後端,真的會出字幕,不需要為了這一頁去弄本機憑證。

    但瀏覽器會問你兩次權限,兩次都要按允許:

    • 麥克風。不給就沒辦法收音,這個很直覺。
    • 存取本機網路裝置。這個聽起來嚇人,但原因很單純:這一頁在網路上, 你的後端在自己電腦裡,Chrome 會確認你真的要讓這個網站連進自己的電腦。 按拒絕的話,畫面會一直說後端連不上,主控台會出現 Permission was denied for this request to access the loopback address space

    只在 Chrome 測過。Safari 與 Firefox 對這兩件事的處理不一樣,沒測過就不寫成能用。

    誠實補一句:只測過 Chrome,Safari 與 Firefox 沒測過。

打開字幕介面

沒有後端也可以進去看介面長什麼樣。介面裡有「示範模式」開關,會播放預錄的假字幕,而且每一句都標著「示範」,不會假裝那是真的辨識結果。

手機怎麼辦

上面那條本機捷徑只適用於電腦。手機開這一頁時,127.0.0.1 指的是手機自己,連不到你那台電腦,所以按鈕帶的位址在手機上不會有東西回應。

手機要用,得讓手機連得到你的電腦,而且必須走 HTTPS(瀏覽器只在 HTTPS 或 localhost 才給麥克風權限)。兩條路:

附帶一個實測到的限制:用自簽憑證時 Chrome 不讓那個來源註冊 service worker,所以沒有離線外殼、也不能「加到主畫面」,只有字幕功能本身可用。要完整的 PWA 行為需要一張被信任的憑證。

它有多準(請先讀完再用)

官方公布的數字:Breeze-ASR-26 在官方 Taigi ASR Benchmark(30 筆測試樣本)的平均 CER 是 30.13%,單筆最好 14.49%、最差 52.78%。

本專案自己量的數字:素材是 14 段行政院公共服務台語廣播的真人音檔,加 3 段合成音檔,共 17 段,套用與正式版相同的防幻聽過濾器。

語言 token平均 CER
en(預設)29.7%
zh30.4%

與官方公布的 30.13% 是同一個量級。

所以請這樣期待它

它足以讓不懂台語的人當場抓到意思,但會有明顯錯字。人名、機關名、專有名詞要特別留意,不適合當正式紀錄

舉一個實測抄下來的例子:原句是「請駕駛朋友配合改走別條路」,字幕出來變成「請教師朋友配合改走別條路」。這種錯不是看起來怪而已,它會直接誤導語意。

另一件要說清楚的事:CER 30% 不等於「三成的字一定錯」。台語與華語不是一對一對應,同一句台語可以有好幾種合理的華語說法,以華語稿當基準算 CER 時,「意思對但用詞不同」也會被算成錯。模型卡自己就寫了這件事,所以絕對值要小心解讀,它適合拿來做系統之間的相對比較,不適合當成轉寫正確率。完整量法、逐段結果與所有踩過的坑都記在驗證紀錄裡。