← 返回 Session 9

這裡放什麼

研究平台頁面上的每一個數字都由這裡的程式碼產生;頁面本身不做任何計算, 所以展示與分析不會漂移。要質疑任何一個數字,直接看對應的檔案就好。

檔案作用
minitok.py離線的 tiktoken 相容編碼器。讀 js-tiktoken 的 rank 表,不需連網
stimuli.py刺激庫與 2×3 完全交叉設計。詞彙欄人工撰寫,字形欄用 OpenCC 生成
metrics.pyfertility、parity、byte-fallback rate、boundary F1、Rényi efficiency、成本換算
stats.py配對 bootstrap、Wilcoxon 符號秩、rank-biserial、因子分解
vocab_audit.py詞表考古:字形覆蓋不對稱、多字 token 的分布與內容
run_study.py端到端執行,輸出 data/study.json
build_web.py把 study.json 注入頁面樣板,產生單一檔案的靜態頁

為什麼要重做 v1

v1 比較「台灣繁體/中國簡體/香港繁體」三欄,把 token 數差異報成「方言稅」。 那個數字不可解釋,因為三欄同時變動兩個因子:

拆開之後(37 個項目,項目內對比,配對 bootstrap 95% CI):

cl100k_base 字形 繁−簡 +3.14 tok [+2.28, +4.17] p < .001 詞彙 台−中 +0.36 tok [−0.09, +0.86] p = .166 v1「方言稅」 +29.1% [+18.4, +43.3] o200k_base 字形 繁−簡 +1.60 tok [+1.22, +2.02] p < .001 詞彙 港−中 +0.49 tok [+0.18, +0.80] p = .008

那不是方言稅,是字形稅。 o200k 把字形效果壓到一半之後,詞彙效果反而變得可偵測——字形的雜訊小了,訊號才浮出來。

跑起來

git clone https://github.com/lopentu/genai4humanities2026
cd genai4humanities2026/lab/session-9/tokfair

pip install regex opencc-python-reimplemented jieba numpy scipy
bash vendor_ranks.sh                 # 取得離線 BPE rank 表(約 3.4 MB,不入版控)
python run_study.py                  # → data/study.json,並印出摘要
python build_web.py --out ../zh-tokenizer.html

先把課堂上的數字跑出來,確認環境正確,再開始改。 stimuli.py 的 docstring 說明了設計為什麼長這樣, metrics.py 的 docstring 列出每個指標的文獻出處。

已知限制

文獻引用是憑記憶寫的,尚未逐條查核。寫進報告或投影片前請自行確認年份、會議與作者。