Files

947 lines
61 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 決策日誌
每筆記錄:日期、決策、理由。定義檔(`prompts/`)、codebook、
研究計畫的任何修訂都必須在此留下記錄。
## 2026-07-30
- **語料擴大為 20162025 十年**(先導研究為 20182025)。
理由:框架完整、可看年度趨勢。
- **全文不與先導研究比較**:論文僅呈現正式研究結果,數字
一律以正式研究為準;先導研究只作為 codebook v0 與假說的
內部來源,記於本日誌,不進入論文敘事。
- **分析管線採 API script,不用 Claude Code subagent**。理由:
實測證實 subagent 會繼承 CLAUDE.md 與環境資訊,context 無法
僅憑定義檔重現;API 呼叫的輸入完全受控且可稽核。
- **模型釘定 `claude-sonnet-4-6`、temperature=0、thinking 關閉**。
理由:該組合非決定性最低;條件 A/B 盲點實驗以模型為研究
對象,須與 pilot 的 Sonnet 家族銜接。Fable 5 不採用(成本、
thinking 不可關閉且不可稽核、無 temperature、混淆核心主張)。
- **工具性環節的模型於階段 3 以校準樣本實測後決定**:同批
校準樣本以 Sonnet 4.6 與 Opus 5 各跑一次,對照人工黃金標準
比較一致率,據以決定是否於特定環節升級。
- **codebook 採 directed content analysis**:理論骨架
(top-down)+開放碼歸納通道(bottom-up),並加做 LLM 純歸納
輪與黃金標準的映射分析。映射分析方法須在看到結果前寫入
`methodology.md`
- **完整歌詞不進 git**(版權);API 金鑰走 `.env`
- **專案目錄維持原名 `pop-fem-audit`**API 管線下目錄名不會
進入模型輸入,無污染疑慮。
## 2026-07-31
- **專案英文名定為「A Feminist Audit of Pop Music」**:明示
女性主義立場,「audit」兼指對歌曲與對 LLM 標籤系統的稽核,
並與縮寫 `pop-fem-audit` 對應。
- **程式碼收整為 `tools/` src-layout 子專案**:發行名
`pop-fem-audit-tools`、import 套件名 `pop_fem_audit_tools`
description「Tools for A Feminist Audit of Pop Music.」;
`pip install -e tools/` 安裝、`python -m
pop_fem_audit_tools.run_llm` 執行;相依套件記於
`pyproject.toml``requirements.txt` 移除);Sphinx 文件
暫緩。理由:後續多支程式將共用程式碼,套件化後測試可用
正常 import;目錄名 `tools/` 經無脈絡的獨立 subagent 命名
評估選出,最誠實反映「服務研究的輔助工具」定位——研究
本體在根目錄的 prompts/、runs/、results/,程式只是配套。
- **CLI 入口改為套件層級 dispatcher**dispatcher 為單一
入口,`run_llm.py` 的 entry point 移除;有兩種等價呼叫
形式——`python -m pop_fem_audit_tools run-llm ...`
console script `pop-fem-audit-tools run-llm ...`
`[project.scripts]`)。理由:後續多支工具共用單一入口,
`--help` 可列出全部子命令,重現文件穩定。
- **資料儲存架構定案**:commit 判準——凡能由「committed 輸入+
committed 程式」決定性再生者不 commit;源頭、外部捕捉、人工
著作以文字格式 commit。工作儲存採 SQLite 單檔
`tools/instance/`generated、不進 git;歌詞全文入 DB 故無
版權疑慮),schema 以 SQLAlchemy 2.0 typed ORM 定義,設定經
pydantic-settings`.env`)。`results/` 報表 CSV 為「可再生仍
commit」的唯一例外,理由:論文引用穩定性、審稿人零門檻、
撰稿期數字變動可 diff。(本條經多輪辯證後定案,推翻 Claude
最初的全 CSV 方案。)
- **資料模型**songs、chart_entries1—N)、artists、
song_artistsM—N:角色、署名順序)、lyrics(1—1);領域
不變量檢查內建 `build-db`,違規即失敗。
- **歌手背景擴充與防火牆**:歌手資料擴為實體表(QID、性別、
型態、曲風、國籍),women-power 候選的歌手另做深度背景
(族裔以公開自我認同為準、音樂場景),供人工解讀與論文
討論;**歌手背景絕不進 LLM 輸入**(歌詞-only),避免光環
偏誤污染條件 A/B 實驗。
- **沿用先導研究歌詞捕捉**lyrics.json684 首,20182025):
只匯入識別欄位與歌詞本文,pilot 分析欄位不匯入;以
(year, rank) 精確匹配。出處記於 `lyrics-provenance.csv`
source(原始 API)與 methodpilot-import / api-fetch
兩層;取得日期不可考者不假造,僅記可證上界。
- **`run_llm` 改走 pydantic-settings 統一設定**(刪手寫 .env
parser),與 `config.py` / `database.py` 一致。
- **`lyrics` 表併入 `songs.lyrics` nullable 欄位**(資料模型由
五表改四表)。理由:1—1 關係在此量級下獨立成表只有正規化
慣性,nullable 欄位更簡單;「未取得」以 NULL 表達,語意
等價。
## 2026-08-01
- **引擎獨立性以 PostgreSQL/SQLite 為範圍**MySQL 的 VARCHAR
長度限制不處理)。
- **`build-db` 的重置改用逐表 DELETE,不再 drop/create**
schema 生命週期歸 migration 管,build-db 只管資料。連帶
效果:重置成為純 DML,全程單一交易、驗證通過才 commit——
建置失敗時前一版資料完好。首次執行仍以 create_all
checkfirst)補缺表。
- **song/artist ID 由 build-db 顯式指派**(首次出現順序 1、2、
3…),不依賴 autoincrement——PostgreSQL 的 sequence 在
DELETE 後不重置,顯式指派讓重建決定性跨引擎成立。
- **禁止文字 SQL statement,一律經 SQLAlchemy ORM/Core API**。
唯一記錄在案的例外:SQLite 的 `PRAGMA foreign_keys=ON`
(官方建議作法,無非文字 API 可用;SQLite 的 FK 旗標為
逐連線設定)。裁定其歸屬為連線組態,實作於 `database.py`
`__create_engine`——建 engine 時對 SQLite 註冊 connect
listener,所有消費者全程生效,不再由 build-db 各自註冊。
## 2026-08-02
- **`import-lyrics` 不設為子命令,pilot 歌詞改以私人腳本
匯入**。理由:pilot 捕捉檔不隨論文發布,子命令
形式會在發布的 CLI 裡留下讀者無法執行的死命令——要交待的
是「沿用 pilot 捕捉」的事實(記於 lyrics-provenance.csv 與
論文方法節),不是工具本身;工具移出專案,發布管線即
「讀者可完整執行的程序」。讀者重現歌詞的路徑為
`fetch-lyrics`,API 漂移造成的差異屬捕捉層的已承認限制。
provenance 的 method 值域定為
pilot-import / api-fetch / manual。
- **資料路徑全面改為顯式 CLI 引數**——必要運算元為位置
引數、選擇性輸入為選項(build-db 吃榜單 CSV 一個位置引數,
歌詞目錄、Wikidata 快照、overrides 為 `--lyrics-dir`
`--wikidata-csv``--overrides-csv` 三個選項;fetch-lyrics
吃歌詞目錄、provenance、缺漏報表三個位置引數;fetch-artists
吃快照檔;run-llm 吃 runs 目錄),命令與 CWD 無關,且每次
執行觸碰的檔案完整見於指令本身。省略選項即不載入該捕捉層;
給了選項而路徑不存在即建置失敗,取代原本的默默跳過。理由:
settings 的 `.env` 依 pydantic 慣例讀自 CWD(約定
`tools/`),資料路徑原以 repo 根為 CWD,兩者衝突;顯式引數
消滅隱性 CWD 契約,亦拒絕以父目錄推導兄弟檔案的隱性慣例。
- **`data/` 依生命週期分三層**`source/`(源頭,手放後不動)、
`captures/`(外部捕捉,只由 fetch 命令與私人匯入腳本寫入)、
`manual/`(人工著作,只由研究者手寫;之後的黃金標準編碼
亦居此)。理由:三種生命週期混住一層,目錄無法傳達「誰可以
寫哪裡」;顯式引數化後搬遷零程式改動。
- **源頭榜單 CSV 全面對齊 Billboard 年終榜發布版**(修正
203 列)。語料源頭定義為「年終榜發布當時的印法」,以
Wayback Machine 發布時快照逐字轉錄(20162018 原沿
Wikipedia 改寫慣例);年終原文殘缺或有疑問者,以當年週榜
掛名為準(唯一適用例:2016#87〈All the Way Up〉)。
- **歌名正規化採 canonical artist credit 對照表**:同一首歌
因署名字串寫法不同而分裂者,以明示對照表合併;歌曲身分=
(原始歌名,對照後署名字串),不解析署名——拆解機器不進
歌曲身分判定,對照表即完整可稽核清單。
- **歌手名單拆解規則定案**:署名列出成員的團體只留成員
(冒號與括號兩型);名字內含連接詞的單一藝人入保護名單;
規則無法表達的個案入例外表;人名連寫的二人組拆成個人;
僅以團名掛名的團體維持單一實體,屬性留待 fetch-artists
與人工 overrides。完整清單見 `build_db.py`
- **歌手名正規化**:歌手名大小寫不敏感歸併、存首見拼法;
正名表(casefold 鍵→官方拼法)存官方拼法,含跨拼法合併
ye→Kanye West。
- **`data/` 增設 `derived/` 衍生層**`build-db` 建置工作儲存
的同一動作產出兩張人讀報表(songs.csv、artists.csv)並
commit——與 SQLite 同交易語意、驗證通過才寫檔,稽核鏈
「committed 輸入+程式→CSV」無中間空缺;為「可再生仍
commit」的第二例外。報表不含資料庫 ID(內部參照,資料
改版會重排,不供引用);關係以內嵌字串呈現——`/` 連同
一首歌的多次上榜、`|` 連不同歌曲——欄位一律字母序。
- **歌手正名表全面改存官方拼法**:變音符號一律恢復
(Billboard 印法慣性去符號,共 12 筆,如 Aminé、Jhené
Aiko、Silentó);二人組拆名改存成員全名(Dan Smyers、
Shay Mooney);官方大小寫 3 筆(Cris MJ、Mariah the
Scientist、Surf Mesa)。官方拼法逐筆以 DSP 官方頁查證
(維基百科/Wikidata 的大小寫是其自家規範,不作準);
查證亦確認 Tones And I 的 chart 印法即官方寫法,不改。
- **`fetch-artists` 解析演算法定案**:改用 WDQS 的 SPARQL
索引查詢(不依賴搜尋排名、不用 LCASE——實測會逾時)。
步驟:(1) 歌手名與 label/alias 精確比對(@en@mul 兩層)
取候選,型態限人類∪音樂團體子樹∪original cast(2) 唯一
即定案;(3) 歧義以上榜歌曲佐證——歌名精確比對取歌曲條目
的 P175 演出者(含其 P527 成員)與候選交集;(4) 再落空則
反向錨定:候選(含所屬團體)演出過的歌曲以 casefold 比對
歌名;(5) 均落空記查無並續行。每步須恰一命中才選定,
實測零錯選。Last-resort 釘定表僅一筆(Pinkfong——唯一
P31 為品牌的上榜演出者,型態閘門依設計排除)。暫時性
故障(429/5xx/讀取逾時)退避重試,重試盡記 error 列;
not found 專指程序查證後無所得。全量實跑 469 位全數
解析且與人工查證的 QID 逐筆相符;首次快照隨本次入
捕捉層。
- **先補完 Wikidata、再捕捉快照**:歌手資料查證做在上游——
以 subagent`artist-wikidata-updater` 定義檔)逐位查證
快照欄位(P21、P31、P136、P27P495,新條目加 P106)並
草擬附來源的 QuickStatements,由研究者本人審摘要、以本人
帳號執行;編輯沉澱後重跑 `fetch-artists`Wikidata 容不下
的判斷才入 overrides。理由:修在上游全網受益,編輯史與
來源公開可稽核,快照乾淨、overrides 縮小;論文方法節揭露
「捕捉前經研究者查證補完」。性別以公開自我認同為準,
推測不確定且無佐證者列疑慮清單;查證屬資料策展而非
分析,以 Claude Code 輔助、不走分析 APIQS 批次以
私人工作檔留存,不隨論文發布。
## 2026-08-04
- **移除人工 overrides 層**`build-db` 刪去
`--overrides-csv` 選項與套用邏輯,文件同步移除
`data/manual/artists_overrides.csv`。理由:「先補完
Wikidata、再捕捉快照」工作流實跑後,469 位歌手全數
在上游查證補齊,快照即完整,本地覆蓋層已無存在事實;
`data/manual/` 層保留(供日後黃金標準編碼)。
- **`fetch-lyrics` 加原始署名 fallback**:以第一位 primary
歌手查詢兩 API 皆落空時,改以拆解前的原始署名字串(缺漏
報表既有的 `artist_credit`)重查一次;與主查詢同為精確
查詢,API 順序不變。理由:二重唱/雙掛名歌曲在歌詞 API
目錄以合體名義建檔(Dan + Shay、Lil Baby & DaBaby),
單人名查詢必落空;手動模擬證實 fallback 三首全中。
- **`build-db` 匯入重構為兩個 job class**`SongImporter`
(榜單 CSV→歌曲身分去重→songschart_entries)與
`ArtistImporter`(自資料庫依 song ID 讀回署名→拆解→正名
→去重登記→artistssong_artists),與 `CSVExporter` 同形
(建構子收 session、單一公開入口);命名取 importexport
對稱,不用 loader(有「載入記憶體」聯想,實為寫入持久
儲存)。歌手登記改於歌曲全數入庫後第二階段進行,兩塊
之間不再共享記憶體狀態;各 job 專用的純函數與規則表
(身分判定、拆解、正名)隨行入 class 作公開 staticmethod
/class 常數,「哪個函式屬哪個工作」由 class 歸屬直接
表達。flush 定為匯入工作的完工契約——entry method 返回
時自身寫入已可查詢,不再由呼叫者補 flush。捕捉層套用
(歌詞、Wikidata 快照)隨後同型打包為 `CaptureImporter`
(單一入口收兩個可省略路徑)。實測重構前後工作儲存
dump 與衍生報表逐位元組相同。
- **歌手型態刪去 mixed 值**`ArtistType` 只留 sologroup。
mixed 是先導研究「男/女/混合團體」單一欄位的殘留,
正式設計拆成 gender+type 後從未定義其指涉;署名一律
拆成個人後,男女混合是歌曲層(song_artists+各歌手
gender)可推導的事實,不屬歌手實體。非人非團體者
Pinkfong)type 留空由人工判定,維持現狀。
- **獨立驗證步驟解散,不變量檢查歸屬各匯入工作**:榜單
覆蓋((year, rank) 網格恰好齊全、無缺漏、無多出、無
重複)檢在 `SongImporter` 匯入結尾;署名解析結果(至少
一人、含 primary、名字非空白)檢在 `ArtistImporter` 逐筆
解析後立即失敗。違規拋 `BuildError` 走既有的失敗路徑,
`find_violations` 刪除。理由:檢查跟著產生資料的工作走,
main 不再有驗證分支;逐筆即時失敗使錯誤指向出錯的那筆
署名。
- **Markdown 檔名一律以 dash 連接**decision-log.md、
research-plan.md、project-structure.md 等;與 data/ 層
CSV 檔名慣例一致),定義檔命名慣例同步改為
`prompts/<task>-v<N>.md`(如 screen-v1.md),版本庫外的
私人工作檔一併改名;`conference_abstract.md` 改名並搬入
`paper/`——它是本次年會實際送出的摘要,與全文同屬投稿
血脈,不是 `docs/` 的內部工作文件。全 repo 指涉同步更新。
- **fetch-lyrics 移除缺漏報表**:刪去 `missing_csv` 位置引數
與缺漏報表 CSV 輸出。理由:該報表只寫不讀(指令從未讀取
它),缺漏數字每次執行皆由工作儲存比對歌詞目錄重新算出;
worklist 角色由重跑冪等指令本身承擔;完整性已由 provenance
CSV 與 build-db 統計數字佐證;該檔案不承載任何無法重新
產生的資訊。
- **新增 `export-llm-input` 子命令**:由工作儲存產出
`run-llm` 的 JSONL 輸入檔(每筆 `id``content`);此為
「歌手背景絕不進 LLM 輸入、歌詞-only」防火牆的執行點
——內容只有歌詞,歌曲身分以 `song-<ID>` 不透明鍵放
`custom_id`,不入訊息本體;ID 由 build-db 決定性指派
故檔案可再生,依 commit 判準不進 git(且含歌詞全文,
版權亦不許);固定匯出全部歌曲,缺歌詞即失敗;單一
位置引數收輸出檔路徑,文件範例輸出至 `tools/instance/`
- **指令模組集中為 `commands` sub-package**:五個子命令模組
移入 `pop_fem_audit_tools.commands``__init__`
`from .run_llm import main as run_llm_command` 逐條登記為
指令清單,`__main__` 只消費此 façade`_command` 後綴避免
與子模組同名遮蔽,測試仍以模組屬性風格使用;基礎設施模組
configdatabasemodelsutils)留頂層。理由:「指令
vs 共用底層」由目錄結構直接表達,與「哪個函式屬哪個工作」
的歸屬原則同型。
- **自然編碼管線四步驟定案**:自由標註(tag,×2 全進池不
仲裁——自由詞彙兩次輸出無共享比對單位,仲裁即再生成)→
自然收斂(merge,2+1)→ 強制收斂至 50 內(cap,2+1)→
以定稿詞彙表全量編碼(code,2+1,附引述,逐首仲裁看
歌詞)。收斂步驟不看歌詞(目標是產生 codebook 而非編
碼);收斂仲裁的紀律:程式先算共識核(凍結)與分歧清
單,仲裁只裁分歧、不得引入新概念。編碼回歸採 LLM 直接
編碼為主儀器,理由:唯此能逐標籤附歌詞引述(偏差檢視的
依據)、標籤是模型對歌曲的直接斷言(批判對象乾淨、不混
收斂軌跡假影)、詞彙表出自模型自身故無語意干涉;軌跡
機械對映降為診斷副產品。此設計為對前導研究「映回後未
對照歌詞」限制的明文改良。
- **2+1 協定適用原則重述**:由「每個 LLM 步驟」修正為
「輸出可逐項機械比對的步驟」;自由生成步驟改為兩次執行
進池。CLAUDE.md 同步修訂。理由:自由詞彙步驟強行仲裁
等於第三次生成,無稽核意義;可比步驟的一致率(逐詞塊、
逐首)才是有定義的穩定性證據。
- **提示詞只定格式、不定語意**:LLM 定義檔不含任何主題
定義、判準、範例;研究者判準只住 codebook。理由:研究
對象是模型以網路語料知識背景所做的自然編碼,先給定義
即消毒了批判對象。此原則之落實:粒度鎖定 thematic
keywords(前導研究三粒度比較之繼承,執行前鎖定防事後
擇優);收斂輸入不附頻次(頻率的分析角色由編碼步驟承
擔;頻次誘使頻率剪枝與高頻主題細分)。引述歌詞證據為
必要輸出——檢視編碼偏差的依據,不屬語意干涉。
- **「女性力量」單目標篩選降級為取樣補漏網**:候選集由
自然編碼(code 步驟)浮現;單目標篩選僅用於把模型「被
明示提醒後認得出」的歌撈進人工審視範圍,量測漏標方向
的偏差,不進偏差統計的定義。「全編碼+標籤詞提示」混合設計
取消——既非自然編碼亦非深度判準,量到的東西
無法解釋。screen 逐首 2+1、不給定義,標籤詞用
`women-power-and-empowerment`。認清:此編碼是任意的——
基於研究目的由研究者決定,不是由資料產生(先導研究中的
來歷已不可考,不宣稱由下而上湧現)。選用理由:複合詞
同時涵蓋力量宣示與賦權論述兩半概念空間,補漏網寧廣勿
窄;「empowerment」正是研究對象的市場語彙;不押注單一
時代慣用語。同義詞清單不採——每多一詞即研究者多塑形
一分。已知限制:雙管詞語意模糊(無從分辨觸發自哪半),
僅作召回之用,結果永不進統計的分子分母。標籤詞是
screen 提示中唯一的語意種子,屬研究者的儀器選擇,據實
揭露。
- **定義檔命名定案:軌-步前綴、不帶版本號**:
`prompts/<軌>-<步>-<task>.md`——軌 01=由下而上自然編碼、
02=預先決定的 women-power-and-empowerment 篩選:
01-01-tag、01-02-merge、01-03-cap、01-04-code、
02-01-screen;仲裁檔同 prefix 加 `-arb`。檔名不帶版本
號——版本即 git 歷史,失敗的版本不保留;每次執行的定義
檔快照隨 runs/ 自我完備,`runs/` 目錄改為
`<定義檔名>/`——同理不編日期:只存一份,重跑即取代,
被取代的執行在 git 歷史,時間戳在 meta.json。四次收斂執行(merge ×2、cap ×2
各存合併記錄 JSON 隨該次執行入 runs/。
- **`run-llm` 降階為純執行器**:原內建的 2+1 編排(文字級
一致性判定、固定模板仲裁)拆除;run-llm 只負責「一份
定義檔+一份輸入 JSONL,跑 N 次(預設 2、仲裁場合 1),
歸檔 `runs/<定義檔名>/`(重跑即取代)」。理由:一致性
判定須逐步驟、結構性(分組比對、標籤集合比對),屬
確定性腳本的工作;仲裁輸入由比對腳本建構,本身成為
runs/ 可稽核工件;執行器變小易測。比對/進池/裁決
套用子命令另行實作。
- **`run-llm` 一次呼叫即一次執行**`--runs``--run` 皆不存
在,完整命令形狀為 `run-llm <定義檔> <輸入檔> <歸檔目錄>`——三個
必要運算元皆為位置引數(沿 2026-08-02「必要運算元為位置引數」慣
例),歸檔目錄如 `runs/01-01-tag/run1`,工具內部零 run 概念,
meta 不記 run 編號;「獨立執行兩次」=重現命令清單上的兩行命令,
run 身分只活在命令清單與目錄佈局約定,不在工具內。理由:兩次執行
互相獨立是方法學宣稱,其證據應由執行結構與重現命令清單自明,不應
要求讀者讀工具原始碼;歸檔目的地為顯式引數,亦是「資料路徑全面顯
式化、消滅隱性推導」原則的貫徹。比對子命令驗證兩 run 的定義檔與
輸入 SHA 一致、缺 run 即失敗。目標目錄已存在即拒絕執行,重跑須明
`--replace`
- **screen 標籤詞改為 `women-power`(來歷考據定案)**
考據先導研究的 local agent 存檔:其第一步指令含數十個
範例 thematic keywords,其中即有 women-power——為當時
協作的 Claude Code 依研究者長期表達的關注主動加入
(研究者端播種,非明示指定);先導標籤
women-power-and-empowerment 則是第三步強制合併
women-powerempowerment 兩個關鍵字的管線人工產物
(研究者數月來誤以為是 women-powerwomen-empowerment
之併,至此方明)。修正:探針指向被播種的概念本詞
women-power,不用合併假影;research-plan 的「來歷不可
考」敘述同步改為考據結果。附帶認清:先導第一步並非零
語意提示——此即正式研究「只定格式、不定語意」設計所
矯正者。
- **定義檔輸出形狀統一與去署名**:LLM 輸出統一為單層
dictarray——tag、code:關鍵字→引述;merge、cap
組名→成員;code-arb:保留關鍵字→仲裁者自己的引述
(剔除即不列,剔除集合由程式以鍵差推得);screen 系:
引述陣列,非空即「有」(present 布林刪除,判斷與依據
合一)。仲裁輸入一律不含執行別——標示何方主張會誘使
仲裁者揣測「哪次較可信」,而非就文本裁決。收斂組名採
自由命名(不限取自成員詞),取命名貼合度;可追溯性由
軌跡歸檔承擔。
- **定義檔改三層編號**
`prompts/<軌>-<步>-<次步>-<task>.md`——次步為步內執行
順序,明定讀者依循的先後(如 01-04-01-code →
01-04-02-code-arb);仲裁檔後綴 `-arb`
- **收斂演算法:檢視而棄用的方案**:詞彙表建構(merge、
cap)的重複執行與仲裁,歷經四個方案後全數棄用——
①整條管線獨立跑兩遍、於終點仲裁兩份最終詞彙表:兩套
分類系統互不可比,仲裁淪為第三次建構,一致率無從
定義。②組對組匹配(以相似度門檻判定兩組是否「同一
組」):無原則性答案,門檻任意。③tag 步驟仲裁:自由
詞彙兩次輸出不共享比對單位,無物可裁(tag 改為兩次
進池,沿用至今)。④逐對仲裁鏈:交集細分出共識塊、
分歧塊對三票多數決、union-find 遞移重組、仲裁後命名
2+1——機械上可行且逐項可驗(共 15 份定義檔,全版
保存於分支 `tag-algo-13` 備考),但其變異縮減未經證實
(逐對多數決降低對層變異,遞移閉包卻放大結構層變異,
淨效果不明),複雜度成本則屬確定,且縮減的是儀器變異
——對量測無關緊要的量(見次條)。
- **詞彙表建構改為單次記錄性程序(演算法簡化)**:
merge、cap 各單次執行、執行內自行命名(具名分組
輸出),定義檔減為 7 份。2+1 原則改寫:語料層逐首
判斷(code、screen)一律 2+1;自由生成(tag)兩次
進池;詞彙表建構單次、全程歸檔。理由:(1) 影響量測的
是編碼層——詞彙表屬揭露的儀器選擇,凍結後下游同尺量
到底,其抽樣變異不污染量測;(2) 對齊領域慣行——
codebook 建構本為單次詮釋程序,信度檢驗施於編碼應用
層;(3) 複雜仲裁機械無以自證其益(見前條)。驗證改為
確定性格式檢查(完整分割、組名唯一、cap ≤ 50),違規
依協定修訂定義檔重跑。
## 2026-08-05
- **歌詞捕捉加浮水印/誤碼正規化**:全語料普查(程式窮舉
非 ASCII)發現歌詞站浮水印與 cp1252 誤碼——同形字(西里爾
е 160 處/78 檔、希臘 ό 6 處)、異體空格(U+2005 211 處、
U+205F 80 處、U+200A 6 處)、零寬字元(U+200B 3 處)、C1
誤碼(U+0091/92/93/94/97 共 58 處;先前手修之 U+0085 同
類);受影響 81/883 檔全部來自 pilot 匯入,新抓取檔乾淨。
正規化規則四條(C1 依 cp1252 本義還原、同形字還原、異體
空格→ASCII 空格、零寬刪除)實作於 fetch-lyrics 的
normalize_lyrics(),寫入時套用;既有語料以同一函式一次性
套用。倒放行等歌曲本體內容不動——策展界線:清傳輸雜質,
不改內容。
- **Song 775 拒答機制查明與裁定為無法分析**:tag 首跑僅
此一首遭模型拒答。以隔離子代理做消融測試(四變體)
證實觸發源是歌詞中的倒放拼寫行(觸發混淆文字防護),
與歌詞中的種族蔑稱無關、與零寬字元亦無關(移除
U+200B 而保留倒放行仍拒答)。裁定:倒放行是歌曲的
忠實內容,保留不動——語料忠實優先於可分析性;該首
視為無法分析,缺漏歸因於 Anthropic 平台防護,非本
研究語料的問題。
- **Song 288〈Truth Hurts〉平台過濾誤攔查明與措辭修訂**:
tag run1 該首連兩批次遭平台請求端過濾整筆拒收
`invalid_request_error`)。消融測試(單批六變體)
證實:內容主因是副歌俚語「bomb lighting」重複七次,
離開語境被誤讀(換詞或刪行即過);且門檻會漂移——
先前成功的定義檔配置同日重測失敗,等價措辭互換結果
相反,微擾即翻面。該首為女性力量主題的代表作,缺席
將直接傷及研究核心,不採「記錄缺席」處理。處置:
定義檔的合法 JSON 行換等價措辭(消融實測可過、語意
零變動),全體重跑 run1,該首原生通過,全批 883 筆
唯 song-775 依既有裁定缺席。平台過濾器誤排除黑人
女性歌手賦權國歌一事,本身記為研究發現,供論文討論
平台結構性限制。
- **詞彙表建構改用詞向量分群,棄用 LLM 收斂**:以 LLM
單發把進池的 5,999 個關鍵字收斂為具名分組,四種模型
六次執行全部未通過完整分割驗證(不漏、不發明、每詞恰
一組、組名唯一),執行紀錄見 `run-costs.md`。診斷:在
單一回應內維持 5,999 個詞的嚴格分割,超出現有模型的
簿記容量(先導研究九百餘詞可行),非措辭、非模型檔次、
非推理量所能補救。裁定:改以詞向量嵌入+確定性分群
產生結構——完整分割由演算法保證、可逐位元組重現——
LLM 僅保留其擅長的語言工作。連帶裁定:十三步複雜收斂
演算法(兩次執行+逐對仲裁)的比較實驗取消,其 merge
同為整池單發且需執行兩次,必撞同一容量牆;兩版定義檔
止於 git 歷史(`git log -- prompts/`)。
- **管線重設計為三步驟,取消 screen 軌,women-power 併入
編碼詞彙表**:收斂改為確定性程序後,管線重整為步驟 1
自由標註(2 次進池)→ 步驟 2 詞彙表建構(步驟 2-1
進池、步驟 2-2 詞向量分群,皆確定性)→ 步驟 3 編碼
(2+1)。連帶三項決定:(1) **編號的所指由定義檔改為
研究程序的工序**——確定性的步驟 2 無定義檔仍佔一個
編號;有無定義檔即「該步是否為 LLM 判斷」的可見標記。
軌前綴(01/02 軌)隨 screen 軌取消而廢除。
(2) **檔名與目錄名的補零只為排序**,正文一律寫
「步驟 1」「步驟 3-2」。(3) **取消 women-power 單目標
篩選軌**,改將該詞併入步驟 3 的定案詞彙表(50 個分群
組名再加上該詞,共 51 碼)。理由:單目標提問會把該主題的
顯著性人為抬高,「被放大檢視」的判斷無法與其他主題
並比;併入後研究者的先驗主題詞與模型自行收斂出的類別
(分群已自長出 `female-empowerment` 等組)在同一份
提示詞、同一判斷體制下受檢,兩者落點差異本身即可報告
的結果。代價:候選集召回由雙通道減為單通道,若實測
召回不足再議。
- **詞彙表建構併為單一步驟**:原分為進池(步驟 2-1)與
分群(步驟 2-2)兩個子命令,合併為一個
`cluster-keywords`——自兩份標註歸檔直接產出五份檔案
`source-` 兩份記錄進來的關鍵字與其出處,`result-`
兩份記錄算出的分割,`keywords-to-merge.json` 為交給
模型的碼),歸檔併入 `runs/02-cluster/`。理由:兩者
之間沒有需要檢視的決策點,拆成兩步只增加讀者要理解
的環節;驗證能力不變,五份產物各自可查。
## 2026-08-06
- **編碼引述改為每碼一行**:原定每碼引 1–3 行歌詞為證,
全量實跑時 36 首的輸出遭平台內容過濾攔阻,其中包含
WAP、God Is A Woman、Super Freaky Girl、Sweetest Pie、
Kiss Me More 等女性力量語料的核心。診斷非髒話而是歌詞
重製量——引述量中位數達歌詞長度的 64%、最高 147%,
同時違反本研究自訂的「repo 只留分類所引摘錄」規則。
改為每碼恰一行後實測該 36 首全數通過,每首標到的碼數
不變(中位數 11→12),重製量降至 23%。每碼仍有一行
可檢視的歌詞證據,檢視編碼偏差的依據不減。附帶記錄:
平台輸出過濾非隨機地排除了語料中最核心的一批歌,此
現象本身列入論文限制討論。標註步驟已入庫的兩次執行
重製量約 43%,處置待議。
- **分群組數自 50 改為 100**k=50 下
出現數個「雜物櫃組」——組內語意發散、medoid 只是折衷
詞,編碼實測幾乎不用(`mutual-individuality` 158 詞、
僅用於 2% 的歌;`fantasy-and-imagination` 232 詞含
籃球、海灘、神性意象)。k=30 更劣(最大組 491 詞、
組內一致 0.41)。改 linkage 無用:三種 linkage 於各個
k 實測,Ward 的組內一致性均最高,average 與 complete
反而產生吞噬半數語料的巨組。診斷為壓縮比過高——語料
的主題多樣性超過 50 種,非演算法選擇問題。裁定:k
取 100,雜物櫃組於此始裂解為有主題的組。實測 148 首
探測:101 碼下詞彙表外的
碼由 3 降為 0、未使用碼由多個降為 1、每首碼數中位數
12→16、`women-power` 命中率 13%→9%(碼變細後邊緣
歌不再被歸入)。代價:每次編碼執行成本由 $3.96 升至
約 $7.0。
- **零使用的碼據實報告,不事後改名**:medoid 命名對
大而異質的組必然失準,該碼在結果中呈現為零使用即是
儀器的誠實紀錄;改名等於在看過結果後調整儀器。
- **實驗後維持 medoid 命名,不改用 LLM 命名**:以同一批
100 組(僅給成員關鍵字,不給歌詞、組大小與其他組)各跑
一次 sonnet-4-6 與 fable-5 的命名,格式只規定小寫、
連字號、至多四個詞。兩者皆 100 組全數命名、無撞名,
但均未勝過 medoid:名字普遍更抽象(`toxic-relationship`
`toxic-relationship-themes``relentless-ambition`
`risk-taking-and-drive`),sonnet 三次以 `-themes`
後綴退回後設描述,fable 加禁用該詞後改善但超長名字達
10 個(sonnet 3 個)。關鍵案例 `mutual-individuality`
三種命名皆未說中——該組實含「群體歸屬」與「個體差異」
兩種內容,屬分群未切乾淨,非命名可補。裁定:維持
medoid,保住「組名為模型自己產出過的關鍵字」此一性質;
代價是少數組名不副實,依前條據實報告。實驗歸檔不入
repo,費用 $0.09sonnet)與 $0.43fable)記入
`run-costs.md`
- **定案編碼表只存歌與碼,不附引述與來源層**:引述已完整
存在於三份執行歸檔(3-1 兩次、3-2 仲裁),定案表再抄
一份即庫內重複。且同一個碼在三處的引述可能不同——兩次
執行各自的引述、仲裁者重新判讀後自己的引述——抄一份
等於替後續分析先做了選擇,並抹掉「兩次執行是否抓住
同一句」這個可分析的不穩定性。另一考量:`results/`
論文引用的目錄,一萬四千餘行引述抄進去,會把步驟 3-1
才從 64% 降到 23% 的歌詞重製量堆回去。來源層(共識或
仲裁)同理由三份歸檔可導出,一併不存。
- **刪除 `source-provenance.csv``cluster-keywords` 的產物
由六份減為五份**:該檔是兩份標註執行歸檔 `output.jsonl`
的攤平視圖,14,035 列 Keyword,Run,Song,未帶入任何庫裏
尚無的資訊,亦無下游消費者——軌跡對映診斷直接讀那兩份
歸檔即可。稽核軌跡的慣例保留的是原始資料與實質的分析
產物;「哪個碼出自哪份文件」在質性分析軟體裏本是一個
查詢,不是一份交付物。
- **仲裁定義檔改名為 `03-02-arbitration.md`**2026-08-04
訂下的「仲裁檔同 prefix 加 `-arb`」規則隨之作廢。理由:
`code` 與編號重複——`03-02` 已表明是步驟 3(編碼)之下
的第二道工序;`arb` 又是全部 task 名中唯一的縮寫。趁
步驟 3-2 尚未執行改名,此名進歸檔目錄與論文引用後即
不再變動。
- **仲裁的輸出格式要求連帶改變裁決本身,據實記入論文
限制**:步驟 3-2 首次執行,644 首中 2 首遭輸出過濾
攔阻、13 首輸出夾帶散文——thinking 關閉,模型把推理
寫進可見輸出,其中可見「Wait, let me reconsider.」的
自我否定。定義檔補上「每個保留的碼恰引一行」與「JSON
之外不得書寫任何文字」後以同一份輸入重跑(SHA-256 未
變),攔阻與散文皆歸零,但保留率同時由 80.1%
1,3421,676)升至 87.2%1,4811,699;分母差異來自
首次執行有 2 首無輸出)。即:禁止在輸出裏推理不只改變
格式,也改變了裁決——少了邊寫邊自我否定的過程,模型
傾向保留。此為儀器行為的一部分,不作修補。
- **步驟 3 由「兩次執行+一次仲裁」改為「三次執行+
多數決」**:仲裁者所見只有標出該碼的那一次所附的引述,
另一方無物可呈,輸入本身即單邊。實測仲裁保留送裁標籤
的 87.2%,而中立的第三票所隱含者約 50%——爭議 1,699 個
碼,保留半數時定案表為 14,715 個碼,恰為單次執行平均的
14,716——故仲裁使定案表的編碼密度較任一次單獨執行高出
約 4%`women-power` 送裁 7 個、保留 7 個。改為三次條件
相同的執行後,這層不對稱消失,儀器亦得以「多數決」一語
如實描述,不再夾帶研究者設計的裁決框架。第三票取全量
而非只補問前兩次的分歧:兩者計票結果相同(2-0 與 0-2 的
標籤第三票翻不動),但只補問分歧會使該票在縮減的碼表下
取得,與前兩票條件不同。連帶:`03-01-code` 改名
`03-code`(步驟 3 只剩一個次步)、仲裁的定義檔與歸檔
刪除、`compare-codings` 刪除——其唯一用途是建構仲裁
輸入。已花費的兩次仲裁執行保留於 `run-costs.md` 供總
支出核算。
- **定案編碼表改為附引述**,推翻同日「只存歌與碼」的
決定。當時三個理由裏,「抄一份等於替後續分析先做選擇,
並抹掉三票是否指向同一句」已由新的表示法解除:`Quote`
欄收該標籤在計票中各票所給的引述,逐字去重、按 Unicode
碼位排序、以單一 `|` 相接,相異者全數保留(實測定案的
14,665 個碼中,三票引述完全一致者 10,668、相異兩句者
3,493、三句者 503)。「庫內重複」一項仍成立,是接受的
代價,換得人工判定時證據在手。版權一項先前寫得不準:
這些引述早已隨三份執行歸檔 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。
## 2026-08-08
- **署名 Pinkfong 的演出者實體指認為 Hope Segoine**
Billboard 署名 Pinkfong 為品牌(Wikidata Q55735607,型態
brand),非演唱者;其唯一上榜曲 Baby Shark2019#75
的實際演唱者為 Hope SegoineKTVB 2019-03-06 報導、
Songfacts、經紀簡介,出處詳私人留存的
QuickStatements 草稿)。藉既有的
署名正規化機制(`ArtistImporter.CANONICAL_ARTIST_NAMES`
指認:歌曲的署名字串維持榜單所印的 "Pinkfong",解析出
的演出者實體為 Hope Segoine。品牌無性別可言,人有;
本表記錄的其他項目為拼寫正規化,此筆為實體指認,屬
研究者裁定。
- **歌曲層演出者性別的推導規則**`build-db` 於套用
Wikidata 快照後,為每首歌自全體署名者(primary 與
featured 一律計入)的性別推導 `performer_gender`:已知
性別有兩種以上相異值即 `mixed`——未知者不可能翻案;
已知者全部同值且無未知,取該值;其餘(已知同值但有
未知,或全未知)留空。值域不折疊:non-binary、
genderfluid、trans woman 依快照原值參與比較,與 male/
female 相異即計入 `mixed`。此欄同步鏡射於
`data/derived/songs.csv``Performer Gender` 欄。
- **演唱團體的性別自成員推導**:Wikidata 的團體項目本身
無 P21`fetch-artists` 於團體自身無性別陳述時,讀其
P527 成員推導:成員的任期若於 2016 年(語料起年)前
確定結束——最晚的 P582 早於 2016 且最晚的 P580 不晚於
它(同一筆陳述以多個起訖時間記錄退團與回歸)——則
排除;非人項目(P31 無 Q5,如 Black Eyed Peas 所列的
前身樂團)排除;餘者的 P21 全員同值取該值、相異取
`mixed`、任一成員無 P21 或無成員可計則留空。推導依據
(成員 QID 與各自性別)記於快照 note 欄,逐列可查。
快照中性別空白的列視為未定,重跑時重抓替換;store 中
已不存在的名字於重寫時剔除並出聲。成員資料於推導前
已補齊並上傳 Wikidata46/47 團成員完備;Encanto Cast
為 original cast、Internet Money 為廠牌集體,非樂團,
據實留空)。
## 2026-08-09
- **無型態的署名者不參與歌曲層性別彙總**:署名者的型態
由型態閘(humanmusical ensembleoriginal cast)解出;
解不出者(廠牌、品牌、製作集體)不是演唱主體,其性別
屬不適用而非未知,不得以「未知」之姿擋住全員一致。
全語料型態空白者恰二:Internet Money(廠牌集體,
Lemonade 實際開口者為三位男性,研究者聽驗)與
Encanto Cast。後者確為演唱者,被本規則跳過在概念上
偏粗,惟其具名成員(4 女 2 男)已足撐 mixed,結論
無損,據實記之。效果:883 首全數有值。
## 2026-08-13
- **為論文補算分群組數 k 的完整比較表**:定分群組數時
2026-08-05 前後)僅粗算——當時記錄了 k=30 的最大組
491 詞與平均組內一致性約 0.41、k=50 的雜物櫃組實例;
撰寫論文需要完整數表,故於本日以同一釘定嵌入模型
sentence-transformers/all-mpnet-base-v2, revision
e8c3b32e)對 `runs/02-cluster/source-keywords.txt`
5,999 個關鍵字重新計算。組內一致性定義為組內成員兩兩
餘弦相似度之平均。k=50 直接取自私人留存的分群結果;
k=30 以同參數重跑(確定性演算法),重算所得最大組恰為
491 詞,與當時粗算紀錄吻合,佐證重算與原實驗一致。數表:
| | k=30 | k=50 | k=100 |
|---|---|---|---|
| 最大組(詞數) | 491 | 253 | 148 |
| 組內一致性(各組平均) | 0.402 | 0.434 | 0.485 |
| 組內一致性(最低組) | 0.166 | 0.170 | 0.200 |
論文方法節所引 k 值比較數字以本條為據。
## 2026-08-14
- **語意編碼群:四群由隔離的 LLM 盲選、研究者審定**:論文
研究結果需要語意層的編碼群,以與統計層的關聯檢定互為
獨立的對照。程序:四個彼此隔離的 Claude Code subagent
(輔助判讀層,非 API 儀器),各自僅收到群名與 101 碼的
字母序清單——無研究脈絡、無預期數量、不知其他群與其他
subagent 存在——依編碼字面語意挑選。盲選結果經研究者
審閱後照案採用:女性力量群(women-power group)2 碼
(female-empowerment、women-power);反女性力量/厭女群
(misogyny group)4 碼(idealized-beauty、
possessiveness-and-exclusivity、predatory-threat、
rejection-of-women);陽剛男性氣質群(masculine group)
13 碼(criminal-secrecy、dominance-and-power、
family-and-fatherhood、hustle-and-money、predatory-threat、
rejection-of-women、rivalry-and-superiority、
self-confidence-and-braggadocio、showing-off-and-impressing、
street-loyalty-and-danger、violence-and-street-danger、
wealth-and-flexing、wealth-and-material-success);脆弱群
(vulnerable group)24 碼(addiction-and-obsession、
alcohol-and-substance-abuse、clinging-to-love、
denial-and-self-deception、disappointment-and-failure、
fear-of-losing-love、guilt-and-apology、heartbreak-and-grief、
hidden-emotional-struggle、inner-mental-turmoil、
jealousy-and-bitterness、lingering-memories、
loneliness-and-isolation、longing-and-loss、
longing-for-clarity、longing-for-reconciliation、
nostalgia-and-longing、past-trauma-and-healing、
regret-and-reflection、reluctance-to-let-go、
self-worth-and-insecurity、societal-pressure、
toxic-relationship、vulnerability-and-betrayal)。
rejection-of-women 與 predatory-threat 同屬厭女與陽剛
兩群,據實保留雙重隸屬。本分群取代題庫時期的臨時
ANTI/MASC 清單(彼時 ANTI 含 partner-inadequacy;
盲選認其字面不帶性別而未入厭女群)。時序聲明:分群
先於群層次關聯檢定定案,非依統計結果回溯挑群;群層次
檢定(women-power/female-empowerment 對三群之 2×2,
Fisher 精確檢定,6 檢定一族之 BH-FDR 校正 q)之數字
以本條所載分群為據,論文之編碼群表與群關聯表同此。
- **步驟 4:語意編碼群以三票制定案(claude-fable-5),
取代草稿分群**:更正前條——所稱「研究者審定」實未
發生,研究者僅將盲選輸出整理歸檔,未作實質裁決;草稿
分群(單次 Claude Code 盲選)不具方法學地位。裁定
步驟 4 為語意分群的正式程序。任務與盲選同構:每筆輸入
為群名加 101 碼字母序清單,輸出為入選碼的單層 JSON
陣列;定義檔 `prompts/04-group.md` 只定格式、不含群的
語意定義。模型裁定 claude-fable-5:模型對照實驗(同
定義檔、同輸入、Batch API)顯示分群對模型高度敏感——
claude-sonnet-4-6 將群名成份式拆讀(women+power,凡
力量語意即入選,women-power 群 11 碼,並產詞彙表外
幻覺碼一筆),claude-fable-5 讀為詞彙化概念(要求女性
標記,women-power 群 2 碼),與草稿盲選及深度閱讀輔助
判讀同讀法;sonnet 對照執行歸檔另行私人備份,不入
版本庫,支出留帳。claude-fable-5 不
受理 temperature 與 thinking 參數(均不送出),無法釘
temperature=0;執行間變異實測存在(run1/run2 於陽剛、
脆弱邊緣碼分歧),由三票多數決吸收;詞彙表外輸出項
無效。三次執行(`runs/04-group/run1``run3`)多數決
定案(22 個(群,碼)中 21 個三次全票,
family-and-fatherhood 以 2:1 入群):女性力量群 2 碼
——female-empowerment、women-power;厭女群 1 碼——
rejection-of-women;陽剛男性氣質群 9 碼——
dominance-and-power、family-and-fatherhood、
hustle-and-money、rivalry-and-superiority、
self-confidence-and-braggadocio、
showing-off-and-impressing、street-loyalty-and-danger、
violence-and-street-danger、wealth-and-flexing;脆弱群
10 碼——disappointment-and-failure、
fear-of-losing-love、heartbreak-and-grief、
hidden-emotional-struggle、inner-mental-turmoil、
loneliness-and-isolation、longing-and-loss、
past-trauma-and-healing、self-worth-and-insecurity、
vulnerability-and-betrayal。計票由確定性子命令
`tally-groups` 重現,定案寫入 `results/groups.csv`
(群、編碼、票數);論文之編碼群表、上標註記與群層次
檢定改以本定案為據,相關數表隨之重算。
## 2026-08-15
- **引述換行表示法改為歌詞慣例「 / 」,全鏈路一致、不再
還原**:原設計以兩字元 `\n` 轉義表示引述內換行(定案表
與更正表),build-db 匯入時還原為換行字元。改為:執行
紀錄載入時一次將換行換成「 / 」,此後更正表比對、定案
表(`results/codings.csv`)與工作儲存皆同一表示法,
`tally-codings` 的轉義與 `build-db` 的還原一併移除。
查核:全 883 首歌詞窮舉不含「 / 」,慣例於本語料無歧義
(語料事實,非結構保證,換語料須重查);模型輸出本就有
自發以「 / 」連接跨行的引述(song-211、song-747,原以
更正表改回換行,今其方向與慣例一致,該三列僅餘大小寫與
括號修正之效);兩首歌之演出者署名含「 / 」,惟欄位
各自獨立,不涉引述欄。遷移:更正表 192 列 334 處轉義
逐一替換;定案表重新計票,與舊檔之逐位元差異恰為
`\n`→「 / 」(14,664 列不變,含「 / 」之引述 1,658
筆);工作儲存重建後引述零換行字元。
- **定案分群匯入工作儲存**:`build-db``--groups` 選項,
`results/groups.csv` 逐欄照存入 `groups` 資料表(群、
編碼、票數),納入重建摘要與清空範圍,供群層次查詢;
重建命令自此帶 `--groups results/groups.csv`
- **Fable 5 輔助判讀實驗總錄(非正式編碼;結果檔私人
留存、不入版本庫,本條為其版本庫內的程序錨點)**:
2026-08-08 起以 Claude Code subagent(模型
Fable 5)進行七項深度閱讀實驗。共同程序:每首歌一個
獨立會話、提示最少化且逐字統一、判讀者互不知情、不經
三票制;定位為研究者的輔助判讀(初篩),不改動任何
定案資料。各項(日期依結果檔時間):
(1) women-power 66 首深度閱讀,含網路脈絡重讀與研究者
註記(至 2026-08-09;`women-power-66-deep-reading.ods`)。
(2) 145 首(wp∪fe 聯集)雙任務盲讀:每首兩個獨立
subagent,任務一純文本、任務二上網查演唱者歷史與創作
脈絡(2026-08-09;`women-power-145-blind-readings.ods`)。
(3) 全語料 883 首純文本深讀:摘要、女性主義解讀、
wp 判定,判「真」76 首(2026-08-10)。
(4) 脈絡深讀合計 152 首(145 聯集+文本深讀新增 7 首),
判「真」98 首(含聯集外 5 首);三層判定(管線 66/
文本 76/脈絡 98)與八種分歧樣態記於
`blind-readings-883.ods`;(3)(4) 合計 1,035 個獨立會話
(145×2+738+7)。
(5) pussy 作女性代稱判讀:字串比對 85 首候選,逐首
判讀 41 首成立;判準(資源型轉喻)與邊界案例由研究者
裁決(2026-08-10;`pussy-metonymy-85.csv` 與主檔該欄)。
(6) wp+fe 65 首 vs 僅 fe 79 首之敘事差異分析:歸納七條
系統性差異,引句全數逐字校對(2026-08-14;
`wp65-vs-fe79-analysis.md`);論文研究結果之差異列點與
例證出於此。
(7) wp/fe 中演唱者 male/mixed 47 首之女性主義問題深讀:
每首獨立 subagent、提示逐字相同、只讀歌詞欄,42 首回報
問題、5 首「無」,問題歸納為八樣態(2026-08-15;
`male-mixed-wp-fe-feminist-reading.md` 與同名 .ods)。
此系列即論文方法節「最後編碼的結果,再由研究者與 LLM
(Claude Code)輔助判讀」之所指;結果檔含大量歌詞引文,
依著作權紀律私人留置,不入版本庫。
- **步驟 5:女性主義問題之質性深讀(設計定案)**:論文
題目「挪用與污染」需要框架層的系統性證據;47 首
male/mixed 之非正式深讀已證明程序可行,據此升格為
先導,正式程序擴為 145 首 wp∪fe 全集(對稱涵蓋各性別
演唱,消除僅驗 male/mixed 的取樣不對稱)。方法學裁定:
本步驟為**質性閱讀,非編碼**——輸出為自由文字報告,
無可逐項機械比對的單位,三票多數決與仲裁均不適用;
三次獨立閱讀=分析者三角檢核,逐首整合=整合而非裁決
(以問題機制為單位保守合併、收斂註記、主清單限兩讀
以上、單讀一行存目),跨首統整=樣態歸納(樣態指問題
呈現與運作的重複形態,非問題分類,代表引句僅取自主
清單),其產出為草稿,終審與詮釋由研究者為之;論文
引用本步驟不作次數宣稱。儀器:claude-fable-5(與先導
同儀器,參數同步驟 4)。定義檔三份
(`prompts/05-01-read.md``05-02-consolidate.md`
`05-03-synthesize.md`),語言依 prompts/ 慣例用英文、
輸出繁體中文——先導提示為中文,語言不同構之所以可
接受,係因先導與正式版之間不作結果對照;5-1 輸入僅
歌詞逐字全文(盲讀,不含歌名與演唱者;含多聲部提醒
一句,因署名無法提供行級歸屬且會引入身分先驗)。輸入
組裝為確定性行內腳本,規則載於 methodology,SHA-256
記入各步 meta。引文不做全量機械校對——研究者終審
逐份閱讀,進論文之引句屆時個別校對。
- **步驟 5-1 之 song-444 以單筆補送完成**:run1 批次中
song-444 遭平台 `invalid_request_error`(其餘 144 首
有效);以同一定義檔、同一輸入紀錄單筆補送即成功
(`runs/05-01-read/run1-rescue-444`),判定為平台暫時性
錯誤,非內容拒收。裁定:run1 不整批重跑——Batch API
各請求自含脈絡、互不可見,補送筆與批內任一筆同樣
獨立;run1 之覆蓋=`run1`(144 首)`run1-rescue-444`
(1 首),步驟 5-2 輸入組裝時 song-444 之 run1 份取自
補送歸檔,組裝腳本並驗證三輪歌曲集合一致(145 首)。
- **performer_gender 語意定為「演唱聲音的性別」,新增
手工修正機制**:原值由 `build-db` 自署名藝人的
Wikidata 性別推導,將僅掛名不開口者(製作人、取樣
來源)也計入,致三首純女聲歌曲被判為 mixed:
〈Friends〉(Marshmello 僅製作)、〈Barbie World〉
(Aqua 為取樣掛名,Ken 聲部不在歌詞中)、〈Bzrp Music
Sessions, Vol. 53〉(Bizarrap 僅製作)。裁定:不另設
發話位置變項(單獨為男聲設變項說不通,女聲、非二元
聲部亦無對應變項),而是修正 performer_gender 本身——
其語意即演唱聲音的性別。機制:`build-db` 新增
`--gender-corrections` 選項,於推導後套用
`data/manual/performer-gender-corrections.csv`(研究者
手工編定,Title+Artist Credit 精確比對,查無即建置
失敗),鏡射 coding-corrections 前例;不直接改推導
規則,因署名層推導對其餘 880 首仍正確。下游數字隨
重建更新:wp 66 首成 female 50/mixed 12/male 3/
genderfluid 1;fe 144 首成 female 98/mixed 30/male 13/
genderfluid 2/non-binary 1;wpfe 145 首中署名含男性
且開口者 44 首。步驟 5 報告中三首之性別標示同步更正。
- **步驟 5-3 增設發話脈絡分組統整(男聲/女聲/混合各
一次)**:驗證發現全體單次統整有召回落差——5-2 之
114 份整合報告中 14 份載有保護/恩庇/供養/守門類
機制(如〈Spin Bout U〉之「I gotta protect ya, I'm a
made man」,(3/3)),而 run 1 之 15 樣態全文無一字
觸及:單次自由歸納壓縮 665 條材料時,交界機制被鄰近
樣態吸收。裁定:定義檔一字不動,改增輸入範圍——依
`performer_gender` 切分男聲(14 首)、女聲(98 首)、
混合(30 首)三個發話脈絡統整,各執行一次;三組為三種
權力構型(男性談論不在場的女性/女性於父權場域自我
發聲/兩種發話位置於同一文本互動),分組有其獨立理論
依據,非為撈回特定機制而設。基底 run 1(全 145 首)
保留為跨脈絡透鏡,看瀰漫性樣態。同一輸入不重複執行:
自由歸納無機械合併可言,「合併」實為研究者終審裁決,
變異由 5-1 三讀、5-2 整合與草稿地位承接;若終審發現
四份草稿均漏報告可稽之機制,屆時針對性補跑並記錄。
genderfluid(2 首)與 non-binary(1 首)不設群——
僅 1 份有問題報告,歸納不成立——入基底統整並由
研究者個案閱讀。曾考慮有男聲/無男聲二分(以缺席定義
一組且混同兩種脈絡)與有男聲/有女聲重疊二分(整首
報告無法按聲部過濾,30 首混合歌使兩組歸納互不獨立),
均棄。
- **步驟 5-4 樣態標註遍設立,定義檔
`prompts/05-04-annotate.md` 新增**:研究問題「挪用與
污染」需逐首並置「女力語彙」與「問題樣態歸屬」,
故於質性閱讀之後增設標註遍——(歌, 樣態) 對為可逐項
機械比對之單位,三票多數決重新適用(結構同步驟 4 之
選擇任務,輸出約定亦鏡射其定義檔)。裁定明細:
(1) 「有問題」依多數決精神重定義為三讀中至多一個
「無」,自 114 首修為 111 首——恰兩「無」之三首
(〈Houdini〉〈Hot To Go!〉〈Messy〉)整合報告主清單
必為空,與 5-2 規則自洽,不送判;三讀皆無之 31 首
整列空白。(2) 基底 15 樣態不入矩陣:全體歸納之一條
樣態可能疊合男對女與女對男兩種權力關係,實為多個
樣態共用一名,標註結果無法區辨。(3) 檢驗範圍:男聲
13 條不檢驗純女聲歌、女聲 14 條不檢驗純男聲歌
(發話位置範疇錯置);混合 16 條檢驗全部 111 首——
其中位置綁定條目對錯位歌之檢查明知多餘,然其男女
聲部無系統化切分方式,裁定容忍無意義標註,不再增設
切分判斷。(4) genderfluid 歌(〈Sorry Not Sorry〉)
三套全查:二元權力關係仍作用於 genderfluid 表演者,
其發話位置無法自表演者身分先驗決定,且無自身透鏡
可用;歸屬引用維持個案地位,不作群體宣稱。
(5) 標註僅依整合報告主清單,「僅單獨提及」行由組裝
腳本確定性剝除;樣態條目僅附編號、名稱與機制描述,
代表引句不隨附——引句出自特定歌曲,判該曲時形同
預答。規模:3,708 格(M13×42+F14×99+X16×111),
333 筆請求×3 輪,費用估 $20~25。
- **research-plan.md 依執行現況全面改寫**:舊版規劃存於
git 歷史。刪除已不存在的規劃項——codebook 與人工黃金
標準、條件 A/B 盲點實驗、映射分析、pussy 修辭分析、
階段時程表、「Fable 5 不用於 pipeline」之原定案(已被
步驟 4/5 換用 claude-fable-5 取代);改寫為現行五步驟
管線(含步驟 5 質性協定與 5-4 三票標註)、現行子命令
與資料模型(groups/patterns/annotations 三表、
performer_gender 手工修正)、四份 results 定案表、時程
展延一至二日與剩餘撰寫工作。仍然有效的原則(先導不
比較、提示只定格式、歌手背景防火牆、commit 判準、
版權規則)保留。
## 2026-08-17
- **先導研究的地位另立常設紀錄 `docs/pilot-study.md`**:論文
交件後重讀投稿摘要,認清先導研究係由當時協作的 Claude Code
設計並執行,研究者檢視的是研究問題與答案,未逐步檢視中間
過程;摘要中的具體數字未經稽核,亦無歸檔可回溯。此地位
先前僅零星散見於本日誌各條(歌詞沿用、women-power 來歷
考據、粒度繼承、簿記容量),投稿摘要本身則只是產物,不足以
記述過程。裁定:另立 `docs/pilot-study.md`,完整記述先導
研究的執行方式、沿用與棄用的成果,以及它如何促成正式研究
的可稽核設計;投稿摘要不於樹中另存副本,其內容留在 git
歷史(`paper/abstract.md` 的前身)。
## 2026-08-18
- **工序編號改與論文正文一致**:論文正文將五個步驟的細分
工序以字母標示(表三「步驟3a」、表四「步驟5d」),repo
的檔名與歸檔目錄卻沿用 `05-01``05-02` 這種數字次步,
兩邊對不上。裁定:改為 `1-tag``2-cluster``3a-code`
`4-group``5a-read``5b-consolidate``5c-synthesize`
`5d-annotate`(`prompts/``runs/` 同步,以 `git mv`
保留歷史),補零一併取消。`runs/*/meta.json`
內記的 `prompt_path` 不追改——它是執行當下的實況記錄;
本日誌的既有條目同理,維持當時的名稱。`run-costs.md`
相反:它的「步驟」欄是查閱歸檔的索引,故一律換為現行
編號(`01-01-01-tag``1-tag``03-01-code`
`03-code``3a-code`),並新增末欄「原步驟名」保留執行
當時的名稱——索引要指得到現在的歸檔,紀錄要留得住當時
的形狀,兩者以兩欄並存解決。已刪除的工序(步驟 2 的
LLM 合併嘗試 `01-02-01-merge`、步驟 3 的仲裁
`03-02-arbitration`)其歸檔已不存在,無現行編號可指,
不另發新名,步驟欄逕標「已廢棄」,原名存於末欄。
- **CLAUDE.md 移為 `docs/conventions.md`**:專案 CLAUDE.md 會
全文自動注入每一個 Claude Code subagent 的 context(2026-07-30
實測條),步驟 6 的 883 個盲判 agent 因此都看到了工作規範。
規範本身無研究語意(無 women-power、無假說),污染有限,但
「防脈絡污染」的原則應貫徹到自家工具鏈:docs/ 底下的檔案
不會自動注入,搬移後 subagent 除非主動翻閱否則不會看到,
盲判 agent 的定義檔並明令不得查閱專案材料。代價是主會話
也不再自動載入,須自行先讀 `docs/conventions.md`。內容
順帶微調:註明管線已完成、規範適用於重跑;刪去已不存在
的 codebook 一詞。進論文的數據一律走 Anthropic API(無
檔案系統,機制上不可能讀到),此層防線不受本次搬移影響。