Repair the coding output with a reviewed correction table

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-17 22:38:35 +08:00
co-authored by Claude Opus 5
parent 7f43cf238b
commit 745a8eed9b
5 changed files with 1981 additions and 34 deletions
+22
View File
@@ -554,3 +554,25 @@
代價,換得人工判定時證據在手。版權一項先前寫得不準:
這些引述早已隨三份執行歸檔 commit,寫入定案表不增加
任何新的歌詞重製。
## 2026-08-07
- **計票前套用人工校定的更正表,並驗證標籤在詞彙表內**:
模型對定義檔的每一條明確要求都有非零的違規率,且
temperature=0 未消除之(量測見 `output-validation.md`)。
違規本身不是本研究的量測對象——模型的機率性屬方法層,
研究問題是編碼;而引述存在的目的是讓人看見編碼的文本
依據,一句在歌詞裏找不到的引述無法履行該目的。故凡
可辨識其正確文本者一律還原。
判準:**可據紀錄證明者才還原,僅依研究者判斷推知者
不還原。** 更正一律不自行組字——替代必為該首歌詞的
逐字子字串;標籤的改名須有同一筆紀錄的內證(模型於
同一份輸出並列了正確與錯誤的拼寫),否則刪去。依此,
跨行拼接與平行句混合共 13 筆指派無唯一來源,不予更正,
於定案表中呈現為 6 列引述無法逐字對回歌詞,據實保留。
更正表 936 列中,僅 13 筆 `keyword` 能改變票數,其餘
923 筆只改變呈現的證據。效果:詞彙表外的碼 13 筆歸零,
定案編碼 14,665 降為 14,664`song-750` 的三票因拼寫
更正而合流),逐字可對回的引述由 43,098 升至 44,122。
更正表為外部參數而非寫死於程式——研究者的介入因此
出現在重現命令上,且逐列可審、可 diff。
+30 -13
View File
@@ -45,7 +45,8 @@
組內一致性 0.41,成員橫跨籃球、海灘、外星人綁架);
k 太大則人工難以通覽。定於 100,理由是實測顯示雜物櫃
組於此始裂解為有主題的組,且編碼實測未見碼數過多的
副作用(詞彙表外的碼歸零、僅一個碼零使用)。
副作用——全量三次執行下 101 個碼全數用到;模型另行
造出的碼共 13 筆,佔 44,149 筆標籤指派的 0.03%。
- **組名**:取 medoid——與該組中心(成員向量均值後
正規化)餘弦相似度最高的成員詞。組名因此必為模型
自己產出過的關鍵字,非任何人事後撰寫。已知限制:
@@ -148,18 +149,34 @@
依歌曲 ID 升序。碼表以參數傳入而非填進定義檔——定義
檔只規定任務形狀,換詞彙表、換演算法都不必改它。
- **步驟 3 定案**`tally-codings <執行歸檔 1> <執行歸檔
2> <執行歸檔 3> <輸出 CSV>` 讀三份執行歸檔的
`output.jsonl`,逐首取標籤鍵集合(引述不參與計票)。
某首歌的某個標籤於三份中出現至少兩次即寫出一列,產出
`results/codings.csv`,欄位 `Song`、`Artist Credit`、
`Keyword`、`Quote`,一列一個標籤。歌名與演出者名銜
首查工作儲存取得,故本子命令須在 `build-db` 之後
執行。`Quote` 收該標籤在計票中的各份執行所給的歌詞
引述:各份的引述串接後逐字去重,按 Unicode 碼位排序,
以單一 `|` 相接(三份執行彼此無先後主從之別,引述之序
取決於引述本身)。列序依印出的前三欄依序排:歌名、
演出者名銜、標籤,一律以 Unicode 碼位比較,換行為
CRLF(同專案其他 CSV)。
2> <執行歸檔 3> <輸出 CSV> --corrections <更正表>
--valid-keywords <合法碼清單>` 讀三份執行歸檔的
`output.jsonl`,依序套用更正表、驗證所有標籤皆在合法碼
清單之內、計票。
- **更正表**`data/manual/coding-corrections.csv`,研究者
列校定的人工著作,欄位 `Song ID`、`Run`、`Type`、
`To Be Replaced`、`Correct Term`。`Type` 為 `keyword`
或 `evidence`,分別更正標籤與引述;`Correct Term` 為
替代字串,或 `**REMOVE**` 表示刪去該筆標籤指派(`keyword`
或該句引述(`evidence`)。一筆 `evidence` 更正套用於該
首歌該次執行的所有出現處。兩個文字欄以兩字元 `\n` 表示
換行,故一列一行,純文字工具可逐列處理。表中任一列若
在資料中找不到對應者,即中止;校定的判準記於
`decision-log.md`。
- **合法碼清單**:純文字、一行一個碼,自詞彙表產出:
`{ cat runs/02-cluster/result-keywords.txt; echo
women-power; } | sort`。
- **定案表**`results/codings.csv`,欄位 `Song`、
`Artist Credit`、`Keyword`、`Quote`,一列一個標籤。歌名
與演出者名銜逐首查工作儲存取得,故本子命令須在
`build-db` 之後執行。`Quote` 為該標籤在計票中各份執行
所引的歌詞行:各份的引述串接後逐字去重,按 Unicode
碼位排序,以單一 `|` 相接(三份執行彼此無先後主從之
別,引述之序取決於引述本身);`Quote` 欄以兩字元 `\n`
表示換行,故一列一行,還原 `\n` 後即為該首歌歌詞的逐字
片段。列序依印出的前三欄依序排:歌名、演出者名銜、
標籤,一律以 Unicode 碼位比較,換行為 CRLF(同專案
其他 CSV)。
- **序列化通則**:所有中間檔為 UTF-8,欄序、鍵序與元素
序皆依上列規則明定,無時間戳、無隨機成分;JSON 解析
一律偵測重複鍵,違規即失敗。人讀為主的產物採純文字或