Record the data storage architecture and phase-1 plan in the project documents

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-04 14:03:37 +08:00
co-authored by Claude Fable 5
parent 12ace6f45a
commit b68393ab01
3 changed files with 96 additions and 15 deletions
+45 -2
View File
@@ -1,6 +1,7 @@
# 研究步驟規劃
2026-07-30 討論定案版;後續變更請記入 `decision_log.md`
2026-07-30 討論定案、2026-07-31 增補資料架構;
後續變更請記入 `decision_log.md`
## 總體框架
@@ -24,12 +25,54 @@
人工黃金標準終審。可重現性定義為「程序透明+可稽核」:
公開定義檔、記錄 model ID 與執行時間、保存全部原始輸出。
## 資料儲存與模型(2026-07-31 定案)
- **Commit 判準**:凡能由「committed 的輸入+committed 的程式」
決定性再生者,不 commit;凡不能者——源頭資料、外部世界的
捕捉(Wikidata 快照、LLM 原始輸出)、人工著作(核定、編碼)
——一律以文字格式 commit。格式跟著層次走,不跟著偏好走。
- **分層**
- 源頭:原始榜單 CSV(進 git)。
- 捕捉:Wikidata 快照 CSV、人工 overrides CSV、你的編碼
CSV、`runs/` JSONL(皆進 git);歌詞 `.txt` 快取
(版權因素 gitignored,為已知的稽核缺口)。
- 工作儲存:SQLite 單檔(`tools/instance/`generated、
不進 git),SQLAlchemy 2.0 typed ORM 定義 schema
設定經 pydantic-settings`.env` 供應
`SQLALCHEMY_DATABASE_URL``ANTHROPIC_API_KEY`)。
歌詞全文入 DB(不進 git 故無版權疑慮)。
- 報表:論文引用的最終表由 export 產出 CSV 進 `results/`
——此為「可再生仍 commit」的唯一例外,理由:引用穩定性
(十年尺度的環境會腐化)、審稿人零門檻、撰稿期數字變動
可 diff。
- **資料模型**`songs`(歌曲實體)、`chart_entries`
1 歌—N 筆榜單紀錄)、`artists`(歌手實體:Wikidata QID、
性別、型態、曲風、國籍)、`song_artists`M—N 關聯:角色、
署名順序)、`lyrics`(1—1)。領域不變量(恰 1000 筆榜單、
每歌至少一 primary 歌手等)檢查內建於 `build-db`,違規即
建置失敗。
- **歌手背景防火牆**:歌手背景資料只進人工解讀階段(證據表、
論文討論),**絕不進 LLM 輸入**——LLM 分類的 user message
維持歌詞-only,避免光環偏誤污染條件 A/B 實驗。women-power
候選歌曲的歌手另做深度背景(族裔以公開自我認同為準、音樂
場景),script 輔助、人工核定。
- **Pilot 歌詞沿用**:先導研究捕捉檔(lyrics.json684 首,
2018–2025)匯入歌詞快取——只取識別欄位與歌詞本文,pilot
的分析欄位一律不匯入;以 (year, rank) 精確匹配 song_id。
出處記於 `data/lyrics_provenance.csv`(進 git):`source`
(原始 API)與 `method`pilot-import / api-fetch)兩層,
取得日期不可考者不假造,僅記可證上界。
- **子命令**`pop-fem-audit-tools <cmd>`
`python -m pop_fem_audit_tools <cmd>`):`run-llm`(已完成)、
`build-db``import-lyrics``fetch-lyrics``fetch-artists`
`export-llm-input`;之後再加報表 export 與統計。
## 階段與時程(全文截稿 2026-08-15
| 階段 | 內容 | 方式 | 時程 |
|---|---|---|---|
| 0 | 基礎建設:git init、目錄結構、.gitignore、決策日誌、runner script(含 Batch API)、codebook v0 骨架 | script + 討論 | 7/307/31 |
| 1 | 資料準備:去重唯一歌曲表(song id)、抓歌詞(Lyrics.ovh / LRCLIB,缺漏留 log)、演唱者性別表Wikidata + 人工核對) | scripts | 7/318/2 |
| 1 | 資料準備:`run_llm` 改走統一設定 → `build-db`(解析榜單成 songs/chart_entries/artists/song_artists)→ `import-lyrics`pilot 20182025)→ `fetch-lyrics`201617 與缺漏,Lyrics.ovh / LRCLIB)→ `fetch-artists`Wikidata 快照 + 人工 overrides)→ `export-llm-input` | 子命令 | 7/318/3 |
| 2 | 候選篩選:全部唯一歌曲高召回 women-power 候選篩選(寧可多抓,人工剔除) | API 2+1 | 8/28/3 |
| 3 | 黃金標準:依 codebook 人工逐首判定 genuine/peripheral/fake,附引用歌詞證據表(LLM 只做摘錄,不給判定建議);先以 10–15 首校準樣本試編並修訂 codebook 後凍結;同批校準樣本實測 Sonnet 4.6 vs Opus 5 一致率 | 人工 + script 輔助 | 8/48/8 |
| 4 | 受控比較(盲點實驗):條件 A(詞彙層提示)vs 條件 B(框架感知提示),各 2+1,對照黃金標準計算假陽/假陰率 | API | 8/68/9 |