技術筆記 · 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。但問題係,佢哋基本上都係將中文同英文分開處理,一遇到香港人平時中英夾雜嘅講法,就好容易出錯:

  1. 語音輸入預設你只講一種語言。你要先揀中文定英文,但香港人講嘢根本唔係咁。英文可能變咗同音中文字,中文又可能被認成英文,仲有機會出現普通話用詞或者簡體字。
  2. 佢唔識你平時講嘅人同事。同事 Karson 可能變成「卡神」,Figma 變成「費格瑪」。原廠鍵盤唔知道你成日用邊啲人名、公司名、產品名,自然愈打愈錯。
  3. 正常打字都要不停轉語言。如果真係照香港人平時講嘢咁打,一句 message 入面可能要轉幾次中文、英文鍵盤。嫌麻煩之下,好多人最後索性全句打中文或者英文,但其實已經唔係自己真正講嘢嘅方式。

結果就係:語音輸入完,要逐隻字執;正常打字,又要不停切換鍵盤。用得耐,索性唔用語音。OmuType 就係想填補呢個落差:整一個真正明香港人點講、點打、點樣中英夾雜嘅鍵盤。

3 香港語言適應層

OmuType 唔係一個更勁嘅語音辨識引擎,而係一層「香港語言適應層」。底層嘅 AI 模型會一直進步,亦隨時可以換;但香港人點樣中英夾雜、點樣寫字、成日講邊啲名,呢層知識係我哋自己一點一滴積落嚟(圖 1)。

用家講嘢、打字(中英夾雜)OmuType 香港語言適應層中英混合理解唔使先揀語言廣東話糾錯按錯誤類型處理個人詞彙記憶你嘅名同術語香港字形詞彙繁體、口語字改正回饋 *發展中可替換嘅底層模型語音辨識(Qwen ASR、OpenAI)· 大型語言模型 · 本地字典及語言模型
圖 1:OmuType 架構。適應層位於用家同可替換嘅底層模型之間;虛線(*)表示發展中嘅部分。

我哋唔追求單一模型喺基準測試上最勁,而係追求用家最後見到嘅錯誤最少。所以我哋將問題拆開,每一部分處理一種錯誤來源:

  1. 中英混合理解:語音同打字都唔使先揀語言。
  2. 廣東話讀音糾錯:我哋逐步建立一套香港廣東話嘅錯誤分類,按錯誤類型處理,而唔係一刀切。
  3. 個人詞彙記憶:記住用家嘅世界,再按讀音搵返佢講緊邊個名。
  4. 香港字形同詞彙:香港繁體、口語字、本地英文。
  5. 真實改正回饋(發展中):用家每一次改正,將來都應該令系統更準。

有兩個原則貫穿晒成個產品。第一,針對錯誤類型設計,唔盲目叫大型語言模型成句改寫。第二,每個改動都要通過回歸測試:改好目標之外,要證明冇整壞本來啱嘅情況。呢個定位亦解釋咗點解我哋嘅優勢會隨住時間變強:模型人人都用得,但香港嘅錯誤規律同用家詞彙,要靠時間同數據先積得到。

4 語音輸入

4.1 多個辨識來源

我哋結合兩個辨識器(圖 2):Qwen ASR 嘅串流辨識一路聽一路出字;OpenAI 嘅整段辨識喺用家講完之後再聽多次成句,較慢但較準。我哋用真人聲音測試時發現,兩類辨識器喺廣東話上嘅錯誤規律明顯唔同,而且好大程度上互補。

語音Qwen ASR 串流辨識OpenAI 整段辨識按錯誤類型裁決文字
圖 2:語音流程(目前版本)。兩個辨識來源嘅結果按錯誤類型逐段合併。

學術界好早已經有「將幾個辨識器嘅結果對齊再投票」嘅做法,經典例子係 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