善解
善解,所以選對。
一個開源的 macOS 注音輸入法,專心把同音字選對:看懂你前面寫了什麼,選出你真正要打的那個字。
開發中・尚未開放下載
為什麼要做
注音輸入最常見的困擾不是打不出字,而是打出了「同音的另一個字」。
怎麼做
三層分工:每一次按鍵都在本機即時完成,語意判斷只在需要時加入,而且只能從本機的候選裡挑。
候選生成
詞庫與語言模型在本機產生前 64 名候選,每一鍵都要在 16 毫秒內完成。
本機重排
小型語言模型看你前面寫的內容,從候選中挑出最合理的一句;在背景執行,不拖慢打字。
雲端校正(選用)
打完按一下快速鍵,請雲端模型再看一次。預設關閉;雲端只能回傳候選的編號,不能自己寫字。
目前的實測
所有數字都來自專案的評測集,句子由專案自寫並以 CC0 釋出。
這些數字怎麼量的
評測分成開發集與保留集。開發集用來調整;保留集由另一個流程撰寫、開發過程中不看內容,只在每個階段結束時量一次,用來確認進步不是因為「背了題目」。保留集上,補詞讓前 64 名含正解的比例從 96.9% 升到 97.8%。
判斷器比較了本機模型與多家雲端服務的三十多組設定;所有判斷器都卡在同一個上限:正解根本不在候選裡的句子,誰也救不回來。所以目前的重點是先把正解放進候選。
輸入法實際送出整句的正確率,保留集上聊天設定 77.1%、書面設定 79.7%;這是目前只用詞庫與語言模型、還沒有語意重排的成績。
路線圖
依序進行,每一段都有可量測的驗收條件,由獨立的檢查流程確認後才算完成。
評測基準 完成
Rust 核心與研究原型逐字一致,之後每一步都能和基準對照。
評測資料 完成
口語開發集與獨立撰寫的保留集,含同音陷阱與詞庫沒收的日常用語。
語意選字可行性 完成
實測本機與雲端模型的準確度與延遲,找出真正的瓶頸在候選,而不在判斷。
詞庫 v1 完成
從維基標題與維基詞典補進約 34 萬個詞,並可從鎖定版本的來源完整重建。
精簡詞庫格式 完成
重寫詞庫在記憶體中的結構:輸出逐字不變,記憶體從約 390 MB 降到約 88 MB。
語言模型 完成
用上下文排序候選,分聊天與書面兩種設定;每一鍵的處理時間 p95 不到 2 毫秒。
macOS 輸入法本體 完成
標準注音鍵盤、候選窗,中文模式下 Ctrl+\ 輸出「、」。標點留在組字區,並有標點候選清單。
簽章與發佈流程 完成
Developer ID 簽章與 Apple 公證、安裝程式、Homebrew 的發佈流程已就緒;開放下載的時間另行公布。
標準讀音 完成
依教育部規範,「一」「不」打本調或變調都能打出整個詞(ㄅㄨˋ ㄕˋ 和 ㄅㄨˊ ㄕˋ 都是「不是」),「法國」的「法」用審定音 ㄈㄚˇ。
讀音修正與個人化學習 下一步
修正補充詞表裡的錯誤讀音;接著只從你在候選窗的改選學習,依前文分開記,不會一次改選就污染所有句子。
候選網格與標點說明 規劃中
按 ↓ 展開成多欄候選,標點附上名稱,比照 Apple 原生注音。
一鍵校正、新手測驗 規劃中
打完一段可以請模型重看;第一次使用時用簡單測驗了解你的打字習慣。
本機重排與雲端校正 規劃中
把語意判斷接進輸入法;本機優先,雲端選用。
隱私
輸入法看得到你打的每一個字,所以這些是設計上的硬規則(隨開發逐項實作)。
設計原則
- 目前版本沒有連網功能。之後如果加入更新檢查或雲端校正,會在上線前寫在這一頁:什麼時候連線、送出什麼、能不能關閉。
- 不申請「輸入監控」與「輔助使用」權限。系統的輸入法框架本來就會把按鍵交給輸入法,不需要監看整個系統。
- 用了哪些資料與模型、各自的授權,下載前就寫在這一頁(見「開源與授權」)。
- 雲端功能預設關閉;開啟後只在你按快速鍵或送出時傳送,不會逐鍵傳送。
- 雲端只能回傳候選的編號,不能產生文字;回應不合規就直接用本機結果。
- 密碼欄、安全輸入模式下停止學習與雲端;終端機不傳送到雲端。
- 你打的內容不寫進任何日誌或錯誤訊息。
- 學習資料只存在本機,可以一鍵清除。
開源與授權
授權清單
- 程式碼:Apache-2.0。
- 基礎詞庫:小麥注音(MIT;片語源自 libtabe,BSD)。
- 補充詞表:由維基百科與維基詞典的條目標題產生,CC BY-SA 4.0,署名維基百科與維基詞典貢獻者。
- 標準讀音變體:依教育部《國語辭典簡編本》〈單一音讀〉與《國語一字多音審訂表》的規則,從小麥注音詞庫產生,MIT。規則是事實,檔案不含教育部資料。
- 語言模型(詞的兩兩搭配頻率):由維基百科 2026-10-01 的 20 萬篇條目、Mozilla Common Voice 繁中(台灣)句子、Tatoeba 中文句子,以及 gpt-oss-120b 產生的台灣口語合成句計算,CC BY-SA 4.0,署名維基百科與 Tatoeba 貢獻者。不含任何私人對話。
- 目前沒有使用任何神經網路模型。
- 評測句:專案自寫,CC0。