技術筆記 · 2026 年 9 月
OmuType:最適合香港人嘅中英混打鍵盤
中英夾雜廣東話嘅語音同打字輸入
Pursuit Li
OmuType · Omucloud
摘要
香港人講嘢中英夾雜,亦有自己一套寫法:廣東話口語字、香港繁體,同大量本地人名同術語。市面上以單一語言為前提嘅鍵盤,喺呢種用法之下錯誤頻繁。本文介紹 OmuType 嘅設計思路:佢唔係一個新嘅語音辨識模型,而係建基於可替換模型之上嘅一層「香港語言適應層」,由中英混合理解、廣東話讀音糾錯、個人詞彙記憶同香港字形處理組成。我哋講述設計原則、同前人方法嘅關係、目前嘅實作狀態,並提出以「零修改發送率」作為主要評估指標。
關鍵詞:廣東話語音輸入;中英夾雜;個人詞彙;香港繁體;輸入法設計
1 引言
我哋嘅使命係為所有講廣東話嘅香港人,整一個最好用嘅「語音+打字」鍵盤。
香港人寫嘢有兩個最大嘅特點。第一係中英混雜:一句說話入面,中文同英文隨時穿插,例如「請問你禮拜五有冇時間?我想 follow up 下個 proposal」。呢個唔係錯,係香港人正常講嘢嘅方式。第二係香港人有自己一套語言:
- 寫廣東話字:嘅、咩、嘢、乜、晒、揾;
- 用香港人慣用嘅繁體字,永遠唔出簡體,亦唔用大陸普通話講法;
- 有本地嘅英文同拼音詞:hea、chur、jor、add oil;
- 有大量本地名:同事、客、舖頭、App、行內術語。
市面上嘅鍵盤大多數係為普通話、台灣正體中文或者英文而設,當以上呢啲係例外。OmuType 就當佢哋係正常。我哋嘅目標好實際:講完一句就可以直接 send,唔使再改;打字唔使揀語言。
2 問題
大部分香港 Android 用家,用嘅都係手機原廠鍵盤,例如 Gboard 或 Samsung Keyboard。但問題係,佢哋基本上都係將中文同英文分開處理,一遇到香港人平時中英夾雜嘅講法,就好容易出錯:
- 語音輸入預設你只講一種語言。你要先揀中文定英文,但香港人講嘢根本唔係咁。英文可能變咗同音中文字,中文又可能被認成英文,仲有機會出現普通話用詞或者簡體字。
- 佢唔識你平時講嘅人同事。同事 Karson 可能變成「卡神」,Figma 變成「費格瑪」。原廠鍵盤唔知道你成日用邊啲人名、公司名、產品名,自然愈打愈錯。
- 正常打字都要不停轉語言。如果真係照香港人平時講嘢咁打,一句 message 入面可能要轉幾次中文、英文鍵盤。嫌麻煩之下,好多人最後索性全句打中文或者英文,但其實已經唔係自己真正講嘢嘅方式。
結果就係:語音輸入完,要逐隻字執;正常打字,又要不停切換鍵盤。用得耐,索性唔用語音。OmuType 就係想填補呢個落差:整一個真正明香港人點講、點打、點樣中英夾雜嘅鍵盤。
3 香港語言適應層
OmuType 唔係一個更勁嘅語音辨識引擎,而係一層「香港語言適應層」。底層嘅 AI 模型會一直進步,亦隨時可以換;但香港人點樣中英夾雜、點樣寫字、成日講邊啲名,呢層知識係我哋自己一點一滴積落嚟(圖 1)。
我哋唔追求單一模型喺基準測試上最勁,而係追求用家最後見到嘅錯誤最少。所以我哋將問題拆開,每一部分處理一種錯誤來源:
- 中英混合理解:語音同打字都唔使先揀語言。
- 廣東話讀音糾錯:我哋逐步建立一套香港廣東話嘅錯誤分類,按錯誤類型處理,而唔係一刀切。
- 個人詞彙記憶:記住用家嘅世界,再按讀音搵返佢講緊邊個名。
- 香港字形同詞彙:香港繁體、口語字、本地英文。
- 真實改正回饋(發展中):用家每一次改正,將來都應該令系統更準。
有兩個原則貫穿晒成個產品。第一,針對錯誤類型設計,唔盲目叫大型語言模型成句改寫。第二,每個改動都要通過回歸測試:改好目標之外,要證明冇整壞本來啱嘅情況。呢個定位亦解釋咗點解我哋嘅優勢會隨住時間變強:模型人人都用得,但香港嘅錯誤規律同用家詞彙,要靠時間同數據先積得到。
4 語音輸入
4.1 多個辨識來源
我哋結合兩個辨識器(圖 2):Qwen ASR 嘅串流辨識一路聽一路出字;OpenAI 嘅整段辨識喺用家講完之後再聽多次成句,較慢但較準。我哋用真人聲音測試時發現,兩類辨識器喺廣東話上嘅錯誤規律明顯唔同,而且好大程度上互補。
學術界好早已經有「將幾個辨識器嘅結果對齊再投票」嘅做法,經典例子係 ROVER [1]。但只得兩個來源時,票數永遠打和,所以我哋嘅合併改為按錯誤類型判斷,以香港廣東話嘅語言知識決定每一段採用邊個結果。目前呢部分以人手規則實作:快、可以預計,而且每一條規則都對應一段真實出錯嘅錄音。喺內部測試入面,合併之後嘅錯誤明顯少過單用串流辨識。
4.2 架構唔綁死兩個辨識器
用兩個辨識器,係因應而家模型質素嘅合理做法,唔係永久設計。架構設計成可以接多個來源:將來可能一個辨識器已經夠,又或者只將「唔肯定」嘅片段拎去再查。每加一個來源,都要計埋延遲、成本、網絡風險同準確度,值得先加。
4.3 發展方向:可解釋嘅統計裁決
人手規則反映嘅係平均規律,唔係每隻字都成立。下一步係逐步將規則轉為一個簡單而可解釋嘅統計模型,由真實結果學習權重,令每個決定一樣查得返點解。目前規則版已經上線;我哋正在收集真人錄音嘅對照結果,作為訓練同測試材料。
4.4 即時性同信任
整段辨識需要多一啲時間,所以我哋先出字、再原地改正,用家唔使等。但鍵盤有個特別問題:文字喺用家眼前自己變,好易令人失去信任。因此改正只會換有問題嘅幾隻字,游標唔郁;用家已經改過嘅字唔會再被改動;任何改正都可以一㩒還原。
4.5 語音指令
用家可以用講嘅方式改返寫咗嘅字,例如「唔係 Friday,改 Monday」。大型語言模型又慢又貴,所以手機上有一個關卡,只有似指令嘅句子先會送去模型;模型覆返嚟嘅編輯仲會被檢查,唔過就當普通輸入處理。就算模型出錯,都唔會整壞用家嘅字。
5 個人詞彙記憶
一般鍵盤最大嘅問題,唔係唔識英文或者廣東話,而係唔識用家嘅世界:同事、客、公司、品牌、行內術語。呢啲字一錯,用家就會覺得「AI 好蠢」。我哋嘅做法係三樣嘢加埋一齊:個人詞彙記憶、讀音檢索、語境提示。
辨識器每次只可以接收有限數量嘅詞彙提示,但一個人嘅詞彙可以有幾百個。所以我哋唔係將成份詞彙硬塞入去,而係先揀出同今次講嘢最相關嗰啲。英文世界早有「讀音編碼」,例如 Soundex 同 Metaphone [6],將讀音相似嘅名歸為同一類;我哋為廣東話同香港式英文發展咗相應嘅讀音表示方法,令「費格瑪」可以對返 Figma。喺內部測試入面,講咗嘅人名同品牌寫啱嘅比例明顯提升,而且冇加插用家冇講過嘅詞。
有一條原則唔會變:詞彙只可以由用家有意加入或者確認。我哋試過自動由打字學詞彙,結果將打錯字同打到一半嘅碼都學埋,所以已經拎走。更多詞彙來源(例如反覆改正嘅字)正在發展中,同樣要經用家確認。
6 香港字形同詞彙
呢部分係最「香港」、亦最少人做得啱嘅一層。
- 永遠唔出簡體。我哋以開源嘅 OpenCC [9] 做簡繁轉換,但直接套用會誤傷:有啲字喺簡體同繁體都合法(「台灣」嘅台、「干預」嘅干、「范太」嘅范),唔應該轉。
- 香港口語字唔會被改走。「吓、晒、揾」呢啲常用字,一般轉換表會當係簡體改走,我哋特別保留;「㩒、揼、冧、劏、踎」喺粵拼同倉頡都打得到。
- 用香港人慣用字形。「說、溫、衛」,唔係字典式嘅「説、温、衞」。
- 本地英文受保護。hea、jor、lor、mk 同常見品牌名,自動改正唔會改佢哋。
- 淨係留中文同英文。辨識器偶然會用其他文字回應廣東話,呢啲一定係聽錯,會被剔走。
7 打字
英文自動改正、觸控模型同滑動輸入,業界已經做咗十幾年。我哋唔打算喺最成熟嘅地方正面競爭,所以打字嘅優先次序好清楚:第一層係語音、中英混雜、個人詞彙同香港廣東話;第二層係基本英文同粵拼打字,要做到夠好;第三層係倉頡、速成、掃字輸入等探索中嘅功能。
7.1 英文同粵拼
同一個解碼器同時處理英文同粵拼:打 ngodei 出「我哋」,打 launch 出英文,打 gldb 出用家詞彙入面嘅 GLDB,全部唔使切換。粵拼部分建基於開源嘅 rime-cantonese 字典 [8]。
英文自動改正採用業界成熟嘅噪音通道模型 [4]:每個候選字同時考慮手指㩒咗邊度,同前後文通常出現咩字。前後文部分係一個 n-gram 統計模型,由大量英文電影同劇集字幕 [7] 統計出嚟(只保留統計數字,唔儲存原文),並採用標準嘅退返 [3] 同剪枝 [2] 技巧。佢細、快,每個決定都查得返點解。改正亦刻意保守:用家打嘅本身係真字,其他字要明顯更合理先會替換;用家撤銷過嘅改正唔會再做。
7.2 探索中嘅功能
倉頡同速成已經支援,並補返香港口語字;我哋亦試咗喺倉頡上面做掃字輸入,概念上參考英文滑動輸入 [5]。其中一個教訓係:我哋試過俾同一個手勢又可以掃字、又可以向左掃刪字,由程式估用家想做邊樣,結果用起上嚟好亂,最後改做二揀一。可以預計,比聰明更重要。
7.3 自動切換語言
語音唔使設定語言。講完之後,鍵盤會按頭幾個字係中文定英文,自動轉去「中」或者「英」鍵盤,等用家跟住打字唔使再㩒切換掣。
8 評估
字錯率係工程師用嘅指標。用家真正在意嘅係:講完一句,可唔可以一隻字都唔使改就發送。我哋嘅使命係「講完一句就可以直接 send」,所以我哋提出以零修改發送率作為主要指標:
零修改發送率 = 唔使修改就發送嘅語音訊息數目 ÷ 所有語音訊息數目
目前我哋主要以逐個部件嘅前後對比同回歸測試評估改動。喺內部測試入面,人名同品牌嘅寫啱率,以及英文自動改正嘅準確度,都有明顯提升。完整數字會喺測試集同測試方法可以公開重現之後發佈。
9 私隱
表 1 列出邊啲處理喺手機入面完成,邊啲需要雲端。詳情見私隱政策。
| 喺手機入面(快、私隱、冇網都用得) | 喺雲端(要上網) |
|---|---|
| 打字建議同自動改正 | 語音辨識(Qwen ASR、OpenAI) |
| 合併語音結果 | 處理語音指令嘅大型語言模型 |
| 讀音檢索、個人詞彙同設定 | — |
| 香港字形處理 | — |
表 1:手機同雲端嘅分工。
喺密碼欄,鍵盤唔會學任何嘢,語音亦會關閉。
10 未來工作
| 範疇 | 目前 | 下一步 |
|---|---|---|
| 語音來源 | 結合兩類辨識來源 | 可以接多個來源;只將唔肯定嘅片段再查 |
| 語音裁決 | 按錯誤類型嘅人手規則 | 可解釋嘅統計模型,由真實結果學習 |
| 個人詞彙 | 由用家親手加入或確認 | 更多來源,同樣經用家確認或授權 |
| 香港字形 | 繁體把關、口語字、本地英文保護 | 按真實使用繼續補充 |
| 評估方法 | 逐個部件做前後對比 | 以零修改發送率做主要指標 |
表 2:目前狀態同下一步。
參考文獻
[1] J. G. Fiscus. A post-processing system to yield reduced word error rates: Recognizer Output Voting Error Reduction (ROVER). IEEE Workshop on Automatic Speech Recognition and Understanding, 1997.
[2] A. Stolcke. Entropy-based pruning of backoff language models. DARPA Broadcast News Transcription and Understanding Workshop, 1998.
[3] S. M. Katz. Estimation of probabilities from sparse data for the language model component of a speech recognizer. IEEE Transactions on Acoustics, Speech, and Signal Processing, 35(3), 1987.
[4] T. Ouyang, D. Rybach, F. Beaufays, M. Riley. Mobile keyboard input decoding with finite-state transducers. arXiv:1704.03987, 2017.
[5] P. O. Kristensson, S. Zhai. SHARK²: A large vocabulary shorthand writing system for pen-based computers. ACM UIST, 2004.
[6] L. Philips. Hanging on the Metaphone. Computer Language, 7(12), 1990.
[7] P. Lison, J. Tiedemann. OpenSubtitles2016: Extracting large parallel corpora from movie and TV subtitles. LREC, 2016.
[8] Cantonese Computational Linguistics Infrastructure Development Workgroup (CanCLID). rime-cantonese. github.com/rime/rime-cantonese
[9] OpenCC: Open Chinese Convert. github.com/BYVoid/OpenCC