Settle the coding by a majority of three runs instead of an arbitration

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-08-17 22:38:34 +08:00
co-authored by Claude Opus 5
parent 7008e14972
commit c51c9d71e1
24 changed files with 101 additions and 1575 deletions
+42 -33
View File
@@ -7,10 +7,10 @@
## 自然編碼管線總覽
三個步驟:步驟 1 自由標註(兩次執行進池)→ 步驟 2 詞彙表
建構(詞向量分群,確定性)→ 步驟 3 全量編碼(2+1)。歌詞
只出現在步驟 1 與步驟 3;步驟 2 完全不接觸歌詞,也不呼叫
LLM。設計原則見 `research-plan.md`;本檔記載可重現的
演算法細節。
建構(詞向量分群,確定性)→ 步驟 3 全量編碼(三次執行+
多數決)。歌詞只出現在步驟 1 與步驟 3;步驟 2 完全不接觸
歌詞,也不呼叫 LLM。設計原則見 `research-plan.md`;本檔
記載可重現的演算法細節。
編號的所指為**研究程序的工序**,不是定義檔:步驟 1 與
步驟 3 有定義檔(`prompts/`),步驟 2 沒有——它是單一
@@ -91,19 +91,29 @@ LLM。設計原則見 `research-plan.md`;本檔記載可重現的
把該主題的顯著性人為抬高。兩者的落點差異本身即可報告
的結果。
## 步驟 3 編碼的 2+1 比對與仲裁
## 步驟 3 編碼的三次執行與多數決
- **步驟 3-1 code**:逐首比對兩次執行的標籤集合(引述不
參與比對)。兩次皆有的標籤為共識保留、兩次皆無為
共識不標;單邊標籤送仲裁
- **步驟 3-2 arbitration**:仲裁者看歌詞全文與該標籤的引述
(不含執行別),裁決保留者附仲裁者自己的引述,剔除
者不列。剔除集合=送裁鍵減輸出鍵,由程式推得
- 仲裁者的引述可能與原引述不同:仲裁是對歌詞的重新
判讀,其引述是該裁決自身的依據,非轉抄。
- 送入仲裁的標籤即模型自身不穩定的邊界判斷,其裁決為
單次記錄性決定,不宣稱可再生;可重現性依計畫定義為
「程序透明+可稽核」,裁決與其輸入全程歸檔。
- **三次執行**:同一份定義檔、同一份輸入檔,獨立執行
三次,三份歸檔並列(`runs/03-code/run1``run2`
`run3`),彼此無先後主從之別
- **多數決**:一首歌的一個標籤,三次執行中至少兩次標出
即收入定案編碼。三票不平手,裁決規則因此無例外條款,
計票由確定性子命令完成(見交接契約)
- **第三票取全量**:只對前兩次分歧的標籤補問第三票,
計票結果相同;仍採全量執行——全部歌曲、全部關鍵字
——使三票在同一條件下取得。
- **定案表只記歌曲與標籤**:引述留在三份執行歸檔,定案
表不轉抄。定案即三票的計票結果,每一票各自的引述
依據於其歸檔逐筆可查。
- **對邊緣標籤的作用**:兩次執行只分得出「兩次皆標」與
「僅一次標」;三次執行還分得出 3-0 與 2-1,故「定案
編碼中有多少比例僅以一票之差成立」成為可報告的量。
至於判定本身,兩次執行相左的標籤在何種協定下都由第三
個判斷定奪,票數不使不確定性消失:某標籤於單次執行被
標出的傾向若恰為一半,任何票數皆為擲幣。三票之效在
傾向偏離一半處——多數決將判定推向該傾向本身(單次
0.7 者為 0.780.9 者為 0.97),程序重跑的一致性因而
高於單次執行,唯獨恰半處無從改善。
## 女性力量候選集
@@ -140,15 +150,14 @@ LLM。設計原則見 `research-plan.md`;本檔記載可重現的
固定鍵序序列化的 `{"lyrics": …, "keywords": [...]}`
依歌曲 ID 升序。碼表以參數傳入而非填進定義檔——定義
檔只規定任務形狀,換詞彙表、換演算法都不必改它。
- **步驟 3-1 兩次執行 → 3-2**:逐首比對標籤集合(鍵
集合,引述不參與比對);僅有分歧的歌入仲裁輸入
JSONL,依歌曲 ID 升序,每筆 `id` 沿用 `song-<ID>`、
`content` 為固定鍵序序列化的
`{"lyrics": …, "disagreements": …}`disagreements
鍵按字典序。
- **步驟 3 定案**:每首歌的最終標籤為共識標籤加上仲裁
保留的標籤,寫入逐首紀錄檔(歌依 ID 升序、標籤按
字典序)。
- **步驟 3 定案**`tally-codings <執行歸檔 1> <執行歸檔
2> <執行歸檔 3> <輸出 CSV>` 讀三份執行歸檔的
`output.jsonl`,逐首取標籤鍵集合(引述不參與計票),
三份歌曲清單不一致即失敗、不出檔。某首歌的某個標籤
於三份中出現至少兩次即寫出一列,產出
`results/codings.csv`,欄位 `Song`、`Keyword`,一列
一個標籤,歌依 ID 數值升序、同一首歌的標籤按字典序,
換行為 CRLF(同專案其他 CSV)。
- **序列化通則**:所有中間檔為 UTF-8,欄序、鍵序與元素
序皆依上列規則明定,無時間戳、無隨機成分;JSON 解析
一律偵測重複鍵,違規即失敗。人讀為主的產物採純文字或
@@ -159,15 +168,15 @@ LLM。設計原則見 `research-plan.md`;本檔記載可重現的
## 執行與稽核
- LLM 步驟以 `run-llm <定義檔> <輸入檔> <歸檔目錄>`
執行;2+1 步驟的兩次執行=重現命令清單上的行命令,
各自歸檔(`runs/<步驟>/run1`、`run2`),仲裁為獨立
步驟、獨立歸檔
- 確定性步驟(進池、分群、比對、裁決套用、對映)為
子命令,其輸入輸出檔同隨 `runs/` 歸檔;因無執行變異,
歸檔目錄下不分 `run<N>` 層。
執行;一步的 N 次執行=重現命令清單上的 N 行命令,
各自歸檔(`runs/<步驟>/run1`、`run2`,編碼步驟另有
`run3`
- 確定性步驟(進池、分群、計票、對映)為子命令,其
輸入輸出檔同隨 `runs/` 歸檔;因無執行變異,歸檔目錄
下不分 `run<N>` 層。
- Batch API 的每筆請求自含全部脈絡且互不可見(平台
契約),歌與歌之間的獨立性由此成立;次執行的獨立
性由「次呼叫、個批次、份歸檔」的執行結構自明。
契約),歌與歌之間的獨立性由此成立;次執行的獨立
性由「次呼叫、個批次、份歸檔」的執行結構自明。
- 每次 `run-llm` 執行的 token 用量與費用記入
`run-costs.md`,被取代的執行一併保留供總支出核算。