善解

善解,所以選對。

一個開源的 macOS 注音輸入法,專心把同音字選對:看懂你前面寫了什麼,選出你真正要打的那個字。
開發中・尚未提供下載


為什麼要做

注音輸入最常見的困擾不是打不出字,而是打出了「同音的另一個字」。

ㄔㄤˊ ㄔㄤˊ
常常嚐嚐
改選過一次「嚐嚐」,之後每句都被搶走
ㄋㄚˋ ㄅㄧㄢ
那邊納編
詞頻來自新聞語料,口語反而排在後面
ㄕˋ ㄐㄧㄥˋ ㄅㄨˋ
拭鏡布是竟不
詞庫沒收的日常用語,只能一字一字湊

怎麼做

三層分工:每一次按鍵都在本機即時完成,語意判斷只在需要時加入,而且只能從本機的候選裡挑。

候選生成

詞庫與語言模型在本機產生前 64 名候選,每一鍵都要在 16 毫秒內完成。

每次按鍵・本機

本機重排

小型語言模型看你前面寫的內容,從候選中挑出最合理的一句;在背景執行,不拖慢打字。

停頓或送出前・本機

雲端校正(選用)

打完按一下快速鍵,請雲端模型再看一次。預設關閉;雲端只能回傳候選的編號,不能自己寫字。

你按下快速鍵時・雲端

目前的實測

所有數字都來自專案的評測集,句子由專案自寫並以 CC0 釋出。

98.3%正解出現在前 64 名候選的比例(開發集 302 句;未補詞前 97.7%)
92.7%目前最準的判斷器從候選中挑對整句的比例(開發集,雲端)
1.7 ms每打一個音節重新產生候選的時間(p95,M5 Mac)
這些數字怎麼量的

評測分成開發集與保留集。開發集用來調整;保留集由另一個流程撰寫、開發過程中不看內容,只在每個階段結束時量一次,用來確認進步不是因為「背了題目」。保留集上,補詞讓前 64 名含正解的比例從 96.9% 升到 97.8%。

判斷器比較了本機模型與多家雲端服務的三十多組設定;所有判斷器都卡在同一個上限:正解根本不在候選裡的句子,誰也救不回來。所以目前的重點是先把正解放進候選。

路線圖

依序進行,每一段都有可量測的驗收條件,由獨立的檢查流程確認後才算完成。

  1. 評測基準 完成

    Rust 核心與研究原型逐字一致,之後每一步都能和基準對照。

  2. 評測資料 完成

    口語開發集與獨立撰寫的保留集,含同音陷阱與詞庫沒收的日常用語。

  3. 語意選字可行性 完成

    實測本機與雲端模型的準確度與延遲,找出真正的瓶頸在候選,而不在判斷。

  4. 詞庫 v1 完成

    從維基標題與維基詞典補進約 34 萬個詞,並可從鎖定版本的來源完整重建。

  5. 精簡詞庫格式 完成

    重寫詞庫在記憶體中的結構:輸出逐字不變,記憶體從約 390 MB 降到約 88 MB。

  6. 語言模型與詞性 下一步

    用上下文與詞性處理「常常/嚐嚐」「在/再」這類排序問題。

  7. macOS 輸入法本體 規劃中

    標準注音鍵盤、候選窗、中英切換;外觀參考 Apple 原生注音,中文模式下 Ctrl+\ 輸出「、」。

  8. 一鍵校正、個人化學習、新手測驗 規劃中

    打完一段可以請模型重看;只從你在候選窗的改選學習,而且依前文分開記,不會一次改選就污染所有句子。

  9. 本機重排與雲端校正 規劃中

    把語意判斷接進輸入法;本機優先,雲端選用。

  10. 打包與釋出 規劃中

    簽章、公證,提供下載。

隱私

輸入法看得到你打的每一個字,所以這些是設計上的硬規則(隨開發逐項實作)。

設計原則
  • 雲端功能預設關閉;開啟後只在你按快速鍵或送出時傳送,不會逐鍵傳送。
  • 雲端只能回傳候選的編號,不能產生文字;回應不合規就直接用本機結果。
  • 密碼欄、安全輸入模式下停止學習與雲端;終端機不傳送到雲端。
  • 你打的內容不寫進任何日誌或錯誤訊息。
  • 學習資料只存在本機,可以一鍵清除。

開源與授權

授權清單
  • 程式碼:Apache-2.0。
  • 基礎詞庫:小麥注音(MIT;片語源自 libtabe,BSD)。
  • 補充詞表:由維基百科與維基詞典的條目標題產生,CC BY-SA 4.0,署名維基百科與維基詞典貢獻者。
  • 評測句:專案自寫,CC0。

原始碼公開時間待定。