110 Commits
Author SHA1 Message Date
imacat ebfa1fa598 Add the conference paper. 2026-08-17 04:36:25 +08:00
imacatandClaude Fable 5 59e3d00ca7 Add the wide pattern matrix of the women-power songs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 22:27:09 +08:00
imacatandClaude Fable 5 5c9da0ee1e Rewrite the research plan to the executed pipeline
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 21:14:16 +08:00
imacatandClaude Fable 5 25e49e97be Import the settled patterns and annotations into the working store
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 21:05:22 +08:00
imacatandClaude Fable 5 965eea50cb Add the tally-annotations subcommand settling the pattern matrix
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 20:39:33 +08:00
imacatandClaude Fable 5 1318158597 Archive the step 5-4 pattern-annotation runs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 20:24:12 +08:00
imacatandClaude Fable 5 8f0ee02b1b Archive the step 5-3 grouped synthesis runs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 20:24:02 +08:00
imacatandClaude Fable 5 1bd7c78b4d Add the step 5 grouped synthesis and pattern-annotation design
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 19:49:44 +08:00
imacatandClaude Fable 5 fc773dada6 Correct three performer genders via build-db --gender-corrections
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 15:57:50 +08:00
imacatandClaude Fable 5 702c4d1737 Archive the step 5 reading, consolidation, and synthesis runs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 15:57:35 +08:00
imacatandClaude Fable 5 08e8c553e5 Add the step 5 qualitative deep-reading design and definition files
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 13:34:57 +08:00
imacatandClaude Fable 5 0cfa2d0895 Record the Fable 5 auxiliary deep-reading experiments in the decision log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 10:20:56 +08:00
imacatandClaude Fable 5 aebd2a081d Import the settled code groups into the working store
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 00:56:55 +08:00
imacatandClaude Fable 5 4900e4fc62 Add the tally-groups subcommand settling results/groups.csv
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 00:46:09 +08:00
imacatandClaude Fable 5 54d38d81b2 Replace the quote newline escape with the lyric line-break convention
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 00:31:31 +08:00
imacatandClaude Fable 5 d589ed9031 Add step 4 semantic code grouping by majority vote on claude-fable-5
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 00:01:48 +08:00
imacatandClaude Fable 5 fccc6d1f32 Add a model option to run-llm for the claude-fable-5 model
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-15 00:00:52 +08:00
imacatandClaude Fable 5 6e5dc411c8 Record the blind semantic code grouping in the decision log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 20:41:17 +08:00
imacatandClaude Fable 5 c3b375e55c Record the full k-value comparison table in the decision log
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-14 20:41:17 +08:00
imacatandClaude Opus 5 b18389f06d Derive the performing group genders from their Wikidata members
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:17 +08:00
imacatandClaude Opus 5 547a068e7b Derive the song performer gender and identify Pinkfong as Hope Segoine
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 3a5271a4d3 Drop the redundant HTTP error class from the retry catch
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 2e192c481a Pin the parenthesized members pattern to a single split point
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 0ac8bd4e39 Make the module-level helpers private instead of protected
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 3f12dc2f62 Extract the protected name restoration out of the credit parser
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 36f0092e2d Classify the transient request errors in one place
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 10f1e092f7 Extract the record content builder out of the export line builder
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 c65d8cff8d Stop binding the unread role in the parsed credit check
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 ad3fc21776 Remove the unused skipped counter of the artist fetcher
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 a656356c7d Capture the command output in the parent-directory export test
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:16 +08:00
imacatandClaude Opus 5 4e85ed63be Merge the two identical chart-position formatters of the CSV exporter
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 f788acf30c Unify the export-llm-input and run-llm summary lines with build-db
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 e6c7ec60c8 Close the HTTP error fixtures when the test ends
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 228598fe8b Run the tests on an in-memory store and dispose the engine afterwards
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 1da2e6dfdc Trim the build-db summary to songs, artists, codings and elapsed time
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 c1cd74ea7c Import the settled coding into the working store
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 df5fecd001 Settle the coding of the 883 songs against the 101 keywords
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 186d2fdea3 Repair the coding output with a reviewed correction table
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 bb25a9d3ad Record how far the coding output departs from its stated contract
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 0eaf8ebb9b Add the tally-codings subcommand for the majority vote
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:15 +08:00
imacatandClaude Opus 5 067aedcae2 Archive the third coding run
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-14 20:41:05 +08:00
imacatandClaude Opus 5 d5a6bb7102 Settle the coding by a majority of three runs instead of an arbitration
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 18:14:52 +08:00
imacatandClaude Opus 5 b792f61806 Import each command module only when its subcommand runs
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 14:45:36 +08:00
imacatandClaude Opus 5 c2ae17453a Restructure cluster-keywords into builders and result records
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 14:40:37 +08:00
imacatandClaude Opus 5 a88302fdc2 Archive the arbitration pass over the coding disagreements
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 13:12:25 +08:00
imacatandClaude Opus 5 930d1cec3e Quote one line per kept keyword in the arbitration
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 13:11:43 +08:00
imacatandClaude Opus 5 a230bfe0c9 Build the arbitration input with a per-ID extras merge
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 09:22:48 +08:00
imacatandClaude Opus 5 b7b35f7b68 Add the compare-codings subcommand for the arbitration handoff
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 09:06:23 +08:00
imacatandClaude Opus 5 309113692b Drop the source-provenance artifact from cluster-keywords
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 08:40:11 +08:00
imacatandClaude Opus 5 a0687a4793 Rename the arbitration definition file to 03-02-arbitration
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 07:49:23 +08:00
imacatandClaude Opus 5 9043fd85f2 Archive the second coding pass against the 101 keywords
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 07:38:34 +08:00
imacatandClaude Opus 5 0a273dd81a Archive the first coding pass against the 101 keywords
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 07:37:59 +08:00
imacatandClaude Opus 5 8af2410e90 Keep the medoid group names after testing LLM naming
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 07:05:48 +08:00
imacatandClaude Opus 5 3f3deb3417 Report the clustering result in a sentence
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 07:04:03 +08:00
imacatandClaude Opus 5 aff654081e Rebuild the coding keywords with 100 groups
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 06:39:33 +08:00
imacatandClaude Opus 5 33a9da6009 Record the clustering invocation in a meta file
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 06:18:09 +08:00
imacatandClaude Opus 5 6e95e49875 Raise the clustering to 100 groups
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 05:55:11 +08:00
imacatandClaude Opus 5 e6ca05b837 Quote one line per assigned keyword
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-06 05:54:52 +08:00
imacatandClaude Opus 5 5bde8ac534 Take the extra coding keywords from the command line
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 21:06:09 +08:00
imacatandClaude Opus 5 9d37b0ba21 Merge the keyword pooling into cluster-keywords
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 20:55:22 +08:00
imacatandClaude Opus 5 6d141b537a Separate the clustered keyword list from the keywords to merge
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 20:22:15 +08:00
imacatandClaude Opus 5 6d33ceb7e7 Pass the coding keywords as input instead of baking them into the prompt
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 20:13:19 +08:00
imacatandClaude Opus 5 c3b4f927c2 Archive the clustered coding vocabulary
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 19:45:02 +08:00
imacatandClaude Opus 5 f495e7882d Add the cluster-keywords subcommand for the coding vocabulary
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 19:36:58 +08:00
imacatandClaude Opus 5 edfd8d57ba Archive the pooled keywords of the two tagging runs
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 18:00:19 +08:00
imacatandClaude Opus 5 112a566361 Add the pool-keywords subcommand for the tagging runs' keywords
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 17:56:11 +08:00
imacatandClaude Opus 5 0850b13417 Rebuild the vocabulary step on embeddings and drop the screen track
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-05 17:19:56 +08:00
imacatandClaude Fable 5 e70c2e6968 Report the elapsed time when run-llm finishes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 15:10:03 +08:00
imacatandClaude Fable 5 0dfbbe9ea4 Archive the tag run2 execution
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 14:47:00 +08:00
imacatandClaude Fable 5 a07256d4ac Archive the tag run1 execution and add the run-cost ledger
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 14:47:00 +08:00
imacatandClaude Fable 5 38b4660649 Require valid JSON with escaped quotes in the definition files
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 14:47:00 +08:00
imacatandClaude Fable 5 1732431e06 Forbid Markdown code fences in the definition-file outputs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 14:47:00 +08:00
imacatandClaude Fable 5 3c154bbbd1 Record the song-775 refusal ablation and rule it unanalyzable
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 14:46:59 +08:00
imacatandClaude Fable 5 c8d541aadc Add watermark normalization to fetch-lyrics
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 14:46:59 +08:00
imacatandClaude Fable 5 a562917460 Changed the natural-coding definition files to single-pass convergence
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 14:46:38 +08:00
imacatandClaude Fable 5 680d8bfe50 Add the natural-coding definition files and the convergence algorithms
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 22:41:42 +08:00
imacatandClaude Fable 5 aa65f6a3b3 Settle women-power as the a-priori screen label term
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 22:41:42 +08:00
imacatandClaude Fable 5 d155d1ba21 Reduce run-llm to a pure batch executor
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 19:31:24 +08:00
imacatandClaude Fable 5 5e509ffcad Record the natural-coding pipeline design in the project documents
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 17:22:52 +08:00
imacatandClaude Fable 5 4eb9f50238 Gather the CLI command modules into a commands sub-package
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:50 +08:00
imacatandClaude Fable 5 814bfa8910 Add the export-llm-input subcommand for the lyrics-only LLM input
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:36 +08:00
imacatandClaude Fable 5 179de0ccd7 Regenerate the artists report with the Wikidata snapshot applied
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:36 +08:00
imacatandClaude Fable 5 edb582daf9 Rename the Markdown documents to dash-connected names
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:36 +08:00
imacatandClaude Fable 5 21c5ae5481 Drop the engine preparation from build-db
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:36 +08:00
imacatandClaude Fable 5 383670ab2b Move the invariant checks into the importers and drop find_violations
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:36 +08:00
imacatandClaude Fable 5 c59a023095 Package the capture-layer application into a CaptureImporter class
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:36 +08:00
imacatandClaude Fable 5 10dc4cb693 Repackage the build-db import steps into job classes
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:36 +08:00
imacatandClaude Fable 5 449675e7a2 Capture the song lyrics from the pilot study and the public APIs
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:36 +08:00
imacatandClaude Fable 5 a7806c0c9d Align the fetch-lyrics summary with fetch-artists via shared utils
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:34:26 +08:00
imacatandClaude Fable 5 105664e93b Remove the missing-lyrics report from fetch-lyrics
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:15:49 +08:00
imacatandClaude Fable 5 1220c21807 Fall back to the original artist credit when fetching lyrics
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:15:49 +08:00
imacatandClaude Fable 5 86914de850 Remove the retired artist overrides layer and the mixed artist type
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:15:49 +08:00
imacat 8463cfc906 Keep the artist snapshot sorted by name 2026-08-04 15:15:49 +08:00
imacat ef4112c61e Show resolved count and elapsed time in the fetch-artists summary 2026-08-04 15:15:49 +08:00
imacat 1eaebeb5fb Resolve artists on Wikidata via exact-match SPARQL with song corroboration 2026-08-04 15:15:49 +08:00
imacat 6fc4b7db17 Restore official artist name spellings in the canonical table 2026-08-04 15:15:49 +08:00
imacat c94b6f2589 Record the complete-Wikidata-then-capture workflow decision 2026-08-04 15:15:49 +08:00
imacat b3ac12c88d Export human-readable songs and artists reports to the derived data layer 2026-08-04 15:15:49 +08:00
imacat 5b2c192827 Split artist credits with documented exceptions and normalize artist names 2026-08-04 15:15:49 +08:00
imacat 991ab5d93a Merge same-song chart rows via a canonical artist credit table 2026-08-04 15:15:49 +08:00
imacat 78cf5e6ce0 Store the source chart CSV with its original CRLF line endings 2026-08-04 15:15:49 +08:00
imacat aa78a54d12 Align the source chart CSV with the archived Billboard year-end charts 2026-08-04 15:15:49 +08:00
imacatandClaude Fable 5 3d472d5c15 Reorganize data/ into source, captures, and manual layers
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:15:49 +08:00
imacatandClaude Fable 5 2f048dee36 Make every subcommand input an explicit CLI argument or option
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:13:31 +08:00
imacatandClaude Fable 5 a3062e848c Refactor internal data passing to dataclasses and enums, and remove unneeded defensive code
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:13:31 +08:00
imacatandClaude Fable 5 1b2d46cb42 Add the data layer with the build-db, fetch-lyrics, and fetch-artists subcommands
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 15:12:22 +08:00
imacatandClaude Fable 5 f2ccca60b5 Use the unified pydantic-settings configuration in run_llm
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 14:03:37 +08:00
imacatandClaude Fable 5 db7b5f6679 Record the data storage architecture and phase-1 plan in the project documents
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 14:03:37 +08:00
imacatandClaude Fable 5 98b665537f Add the tools sub-project with the run_llm batch runner
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 14:03:28 +08:00
imacatandClaude Fable 5 9a089f6c6b Initialize project structure, workflow rules, and research plan
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-30 18:51:10 +08:00
9 changed files with 341 additions and 60 deletions
+18 -17
View File
@@ -99,8 +99,8 @@
## 2026-08-02
- **`import-lyrics` 不設為子命令,pilot 歌詞改以私人腳本
匯入**。理由:pilot 捕捉檔不隨論文發布,子命令
- **`import-lyrics` 不設為子命令,pilot 歌詞改以 `excludes/`
私人腳本匯入**。理由:pilot 捕捉檔不隨論文發布,子命令
形式會在發布的 CLI 裡留下讀者無法執行的死命令——要交待的
是「沿用 pilot 捕捉」的事實(記於 lyrics-provenance.csv 與
論文方法節),不是工具本身;工具移出專案,發布管線即
@@ -178,8 +178,8 @@
來源公開可稽核,快照乾淨、overrides 縮小;論文方法節揭露
「捕捉前經研究者查證補完」。性別以公開自我認同為準,
推測不確定且無佐證者列疑慮清單;查證屬資料策展而非
分析,以 Claude Code 輔助、不走分析 APIQS 批次
私人工作檔留存,不隨論文發布。
分析,以 Claude Code 輔助、不走分析 APIQS 批次
`excludes/`私人工作檔,不隨論文發布
## 2026-08-04
@@ -227,7 +227,7 @@
- **Markdown 檔名一律以 dash 連接**decision-log.md、
research-plan.md、project-structure.md 等;與 data/ 層
CSV 檔名慣例一致),定義檔命名慣例同步改為
`prompts/<task>-v<N>.md`(如 screen-v1.md),版本庫外的
`prompts/<task>-v<N>.md`(如 screen-v1.md),`excludes/`
私人工作檔一併改名;`conference_abstract.md` 改名並搬入
`paper/`——它是本次年會實際送出的摘要,與全文同屬投稿
血脈,不是 `docs/` 的內部工作文件。全 repo 指涉同步更新。
@@ -583,8 +583,8 @@
Billboard 署名 Pinkfong 為品牌(Wikidata Q55735607,型態
brand),非演唱者;其唯一上榜曲 Baby Shark2019#75
的實際演唱者為 Hope SegoineKTVB 2019-03-06 報導、
Songfacts、經紀簡介,出處詳私人留存的
QuickStatements 草稿)。藉既有的
Songfacts、經紀簡介,出處詳
`excludes/quickstatements/hope-segoine.md`)。藉既有的
署名正規化機制(`ArtistImporter.CANONICAL_ARTIST_NAMES`
指認:歌曲的署名字串維持榜單所印的 "Pinkfong",解析出
的演出者實體為 Hope Segoine。品牌無性別可言,人有;
@@ -637,9 +637,10 @@
sentence-transformers/all-mpnet-base-v2, revision
e8c3b32e)對 `runs/02-cluster/source-keywords.txt`
5,999 個關鍵字重新計算。組內一致性定義為組內成員兩兩
餘弦相似度之平均。k=50 直接取自私人留存的分群結果
k=30 以同參數重跑(確定性演算法),重算所得最大組恰為
491 詞,與當時粗算紀錄吻合,佐證重算與原實驗一致。數表:
餘弦相似度之平均。k=50 直接取自留存的分群結果
`excludes/k50/02-cluster/groups.csv`);k=30 以同參數
重跑(確定性演算法),重算所得最大組恰為 491 詞,與
當時粗算紀錄吻合,佐證重算與原實驗一致。數表:
| | k=30 | k=50 | k=100 |
|---|---|---|---|
@@ -702,8 +703,8 @@
力量語意即入選,women-power 群 11 碼,並產詞彙表外
幻覺碼一筆),claude-fable-5 讀為詞彙化概念(要求女性
標記,women-power 群 2 碼),與草稿盲選及深度閱讀輔助
判讀同讀法;sonnet 對照執行歸檔另行私人備份,不入
版本庫,支出留帳。claude-fable-5 不
判讀同讀法;sonnet 對照執行歸檔備份於
`excludes/experiments/`,支出留帳。claude-fable-5 不
受理 temperature 與 thinking 參數(均不送出),無法釘
temperature=0;執行間變異實測存在(run1/run2 於陽剛、
脆弱邊緣碼分歧),由三票多數決吸收;詞彙表外輸出項
@@ -750,9 +751,9 @@
編碼、票數),納入重建摘要與清空範圍,供群層次查詢;
重建命令自此帶 `--groups results/groups.csv`
- **Fable 5 輔助判讀實驗總錄(非正式編碼;結果檔私人
留存、不入版本庫,本條為其版本庫內的程序錨點)**:
2026-08-08 起以 Claude Code subagent(模型
- **Fable 5 輔助判讀實驗總錄(非正式編碼;結果檔
gitignored 之 `excludes/`,本條為其版本庫內的程序
錨點)**:2026-08-08 起以 Claude Code subagent(模型
Fable 5)進行七項深度閱讀實驗。共同程序:每首歌一個
獨立會話、提示最少化且逐字統一、判讀者互不知情、不經
三票制;定位為研究者的輔助判讀(初篩),不改動任何
@@ -782,7 +783,7 @@
`male-mixed-wp-fe-feminist-reading.md` 與同名 .ods)。
此系列即論文方法節「最後編碼的結果,再由研究者與 LLM
(Claude Code)輔助判讀」之所指;結果檔含大量歌詞引文,
依著作權紀律私人留置,不入版本庫。
依著作權紀律留置 `excludes/`,不入版本庫。
- **步驟 5:女性主義問題之質性深讀(設計定案)**:論文
題目「挪用與污染」需要框架層的系統性證據;47 首
@@ -898,4 +899,4 @@
performer_gender 手工修正)、四份 results 定案表、時程
展延一至二日與剩餘撰寫工作。仍然有效的原則(先導不
比較、提示只定格式、歌手背景防火牆、commit 判準、
版權規則)保留。
版權規則、positionality)保留。
+2 -2
View File
@@ -81,8 +81,8 @@ pop-fem-audit/
│ └── methodology.md # 方法細節(全文方法節底稿;
│ # 映射分析方法須在看結果前寫定)
└── paper/
├── abstract.md # 摘要
└── 流行音樂中「女性力量」….odt # 全文
├── conference-abstract.md # pilot 摘要(投稿版)
└── full-paper.md # 全文
```
## 設計理由
+7 -3
View File
@@ -8,7 +8,7 @@
- **研究敘事**:全文為獨立完整的正式研究(2016–2025 十年
語料共 1000 筆榜單紀錄、883 首歌,凍結程序後全量執行),
**不與先導研究做比較**
**不與先導研究paper/conference-abstract.md做比較**
全文數字一律以正式研究結果為準。先導研究僅作為假說的
內部來源,記於決策日誌,不進入論文敘事。
- **執行原則**:主會話只做討論;所有分析由 deterministic
@@ -76,8 +76,8 @@
**絕不進 LLM 輸入**——LLM 任務的 user message 維持
歌詞-only 或管線中間產物-only,避免光環偏誤。
- **Pilot 歌詞沿用(私人匯入,不進發布管線)**:先導研究
捕捉檔(lyrics.json684 首,20182025)以私人腳本
匯入歌詞快取;讀者的重現路徑純粹是
捕捉檔(lyrics.json684 首,20182025)以 `excludes/`
的私人腳本匯入歌詞快取;讀者的重現路徑純粹是
`fetch-lyrics`;沿用之事實記於
`data/captures/lyrics-provenance.csv`(進 git)。
- **子命令**`pop-fem-audit-tools <cmd>`):`build-db`
@@ -129,3 +129,7 @@
- 歌詞受版權保護:完整歌詞不進 git
`data/captures/lyrics/` gitignored),論文與 repo 只留
分析所引摘錄。
- 工程支援(寫 script、style check、審稿)用公司訂閱的
Claude Code;進論文的分析 token 由個人 API 帳號支付。
- Positionality statement 寫入論文(53 歲、長年婦運者、
資深工程師、離開學術圈多年、因整理榜單而起)。
+5 -1
View File
@@ -40,7 +40,7 @@ $3$15、opus-4-6 $5$25、opus-5 與 fable-5 $10$50
| 2026-08-06 | 03-02-arbitration | — | claude-sonnet-4-6 | msgbatch_01N7bDbXRSfAVUzzaj2thKeR | 4 分 20 秒 | 781,037 | 39,315 | $1.47 | 現行(644 首全數有效,零攔阻;保留 1,481/送裁 1,699 |
| 2026-08-06 | 03-code | run3 | claude-sonnet-4-6 | msgbatch_01KnkCaGETnFJrPddrxZTYHA | 6 分 26 秒 | 1,625,458 | 363,840 | $5.17 | 現行(101 碼;883 首全數有效,零攔阻) |
| 2026-08-14 | 04-group | run1 | claude-sonnet-4-6 | msgbatch_01UPNedog6feQzJ9WVfSAxBD | 1 分 1 秒 | 3,129 | 470 | $0.01 | 已取代(僅 3 群;改納 women-power 群後重跑) |
| 2026-08-14 | 04-group | run1 | claude-sonnet-4-6 | msgbatch_01KntJgxdicStaMjNL12P3zi | 1 分 25 秒 | 4,170 | 558 | $0.01 | 已取代(改以 claude-fable-5 執行;vulnerable 輸出含詞彙表外碼 1 筆;歸檔另行私人備份,不入版本庫 |
| 2026-08-14 | 04-group | run1 | claude-sonnet-4-6 | msgbatch_01KntJgxdicStaMjNL12P3zi | 1 分 25 秒 | 4,170 | 558 | $0.01 | 已取代(改以 claude-fable-5 執行;vulnerable 輸出含詞彙表外碼 1 筆;歸檔備份於 excludes/experiments/ |
| 2026-08-14 | 04-group | run1 | claude-fable-5 | msgbatch_01Mr6goBb2Efa4YrqCprbP4U | 55 秒 | 5,553 | 2,049 | $0.08 | 現行(4 群;零違規碼;temperature 與 thinking 參數不適用於本模型,未送出) |
| 2026-08-14 | 04-group | run2 | claude-fable-5 | msgbatch_01C17xW3YBefThTYZ83g7KkL | 1 分 21 秒 | 5,553 | 1,891 | $0.08 | 現行(4 群;零違規碼) |
| 2026-08-14 | 04-group | run3 | claude-fable-5 | msgbatch_01DveEMYyjCAYe6wxpcCD87V | 2 分 9 秒 | 5,553 | 1,975 | $0.08 | 現行(4 群;零違規碼) |
@@ -50,13 +50,17 @@ $3$15、opus-4-6 $5$25、opus-5 與 fable-5 $10$50
| 2026-08-15 | 05-01-read | run3 | claude-fable-5 | msgbatch_01Unn7C7WCnuVoLraJRXksoG | 7 分 59 秒 | 191,459 | 190,433 | $5.72 | 現行(145/145 有效) |
| 2026-08-15 | 05-02-consolidate | run1 | claude-fable-5 | msgbatch_01WPyH4pCCiieHs4yU3xtHzN | 2 分 28 秒 | 326,287 | 242,785 | $7.70 | 現行(145/145 有效) |
| 2026-08-15 | 05-03-synthesize | run1 | claude-fable-5 | msgbatch_01XbNQb1SFrUxhk2ZWF7epPA | 3 分 0 秒 | 103,888 | 9,982 | $0.77 | 現行(15 個樣態;研究者審定用草稿) |
| 2026-08-15 | 05-03-synthesize | run2 | claude-fable-5 | msgbatch_01FKqq8U6m5HLLsx7KpQES26 | 3 分 4 秒 | 13,573 | 6,883 | $0.24 | 現行(男聲群 14 首;13 個樣態) |
| 2026-08-15 | 05-03-synthesize | run3 | claude-fable-5 | msgbatch_017tfhiRTnaxqCp6YFyoivsu | 4 分 4 秒 | 60,727 | 8,519 | $0.52 | 現行(女聲群 98 首;14 個樣態) |
| 2026-08-15 | 05-03-synthesize | run4 | claude-fable-5 | msgbatch_01SNjTLiNPEba4LW2tcUAcTJ | 4 分 3 秒 | 29,958 | 9,793 | $0.39 | 現行(混合群 30 首;16 個樣態) |
| 2026-08-15 | 05-04-annotate | run1 | claude-fable-5 | msgbatch_01H9gXXhNbhZG6gzZtvMHxhh | 3 分 9 秒 | 815,492 | 300,901 | $11.60 | 現行(109/111 有效;song-177、song-199 遭 max_tokens 截斷,單筆補送) |
| 2026-08-15 | 05-04-annotate | run1-rescue-177-199 | claude-fable-5 | msgbatch_01YEdroZ51b8btPfG1aqPFCD | 3 分 5 秒 | 17,802 | 11,601 | $0.38 | 現行(run1 之 2 筆補送,max_tokens 提為 16000,成功) |
| 2026-08-15 | 05-04-annotate | — | claude-fable-5 | msgbatch_01G67STqZsHpnhedat2HRU85 | 3 分 0 秒 | 17,802 | 14,162 | $0.44 | 誤送(補送批次輪詢中斷後誤判死亡而重送;原批次自行完成並歸檔為現行,本批次取消不及、兩筆皆完成,結果棄用) |
| 2026-08-15 | 05-04-annotate | run2 | claude-fable-5 | msgbatch_01VVJpsfidNtF66GnHQdWnGR | 9 分 16 秒 | 815,492 | 306,582 | $11.74 | 現行(111/111 有效;max_tokens 16000,零截斷) |
| 2026-08-15 | 05-04-annotate | run3 | claude-fable-5 | msgbatch_01AsYvZd8rsTYVfUYLzWfeMK | 4 分 12 秒 | 815,492 | 298,512 | $11.54 | 現行(111/111 有效;max_tokens 16000,零截斷) |
累計支出:$125.65。
-9
View File
@@ -1,9 +0,0 @@
# 流行音樂中「女性力量」語彙的挪用與污染——以 Billboard Year-End Hot 1002016-2025)為例的內容分析
以美國市場為主的西洋流行音樂樂壇,一直是不同主流與另類文化實驗競爭的場域:傳統與創新,保守與進步。研究者在西洋流行音樂中,發現「女性力量」的語彙在歌曲中被挪用,融入父權框架中。為瞭解在西洋流行音樂中,「女性力量」語彙挪用與污染的樣態,本研究取2016-2025十年間的告示牌年終排行榜,共1,000個榜單位置,整理出883首不重複的歌曲,469位不同的表演者。使用人工智慧大型語言模型(AI LLMArtificial Intelligence Large Language Model,下稱LLM),獨立標註歌曲歌詞主題,大量蒐集彙整流行音樂主題後,再使用彙整後的主題,對這883首歌曲歌詞編碼。研究者並指定女性力量women-power、厭女misogyny、陽剛男性氣質masculine與脆弱vulnerable四大主題,以LLM對編碼分群,分析在西洋流行音樂中,女性力量和厭女、陽剛男性氣質與脆弱這些主題的相關性。研究者進一步使用LLM,深度檢驗女性力量歌曲中的性別問題樣態。除使用LLM外,研究者也實際檢視編碼結果與性別問題樣態,以瞭解在西洋流行音樂中,「女性力量」語彙如何被挪用與污染。
研究結果顯示:在給予LLM最少提示下,LLM獨立標註、彙整出「女性賦權female-empowerment」的主題,「女性賦權」已經成為當代西洋流行音樂中的重要主題之一。研究者比較「女性力量women-power」主題和「女性賦權female-empowerment」主題的標註差異。Banet-Weiser et al. (2020)主張,新自由主義女性主義敘事,將女性主義導向個人的自我成長、療癒。從編碼結果來看,新自由主義女性主義敘事雖然成為當代的主流,但仍未完全取代傳統女性主義強調的女性集體權力。透過分析四個指定編碼群之間的關係,研究者亦發現,當代流行音樂中,女性賦權不排斥厭女,只排斥脆弱。LLM在女性力量歌曲中,深度檢視性別問題時,獨立彙整出「挪用女性賦權語彙並掏空其意涵」的樣態,直接回應研究題目。研究者後續檢視該樣態所標註的歌曲時,發現LLM的標註問題,需要人工進一步檢視。
結論中,研究者檢視LLM作為內容分析的工具,相比人類編碼,可以獨立編碼不互相干擾,但也面臨兩個主要的挑戰:脈絡污染 (context contamination) ,以及隨機非確定性 (non-deterministic) 。研究者也提出,流行歌曲有大量的脈絡在歌詞之外,只閱讀歌詞語彙,難以真正理解歌曲本身。除了深入閱讀歌詞外,更需要對表演者背景與創作脈絡的理解,才能對西洋流行音樂中女性力量的理解,有更清楚的輪廓。
關鍵字:流行女性主義 (popular feminism) 、流行厭女 (popular misogyny) 、女性賦權/女性力量、語彙挪用、大型語言模型 (LLM) 內容分析
+309
View File
@@ -0,0 +1,309 @@
# 流行音樂中「女性力量」語彙的挪用與污染
## ── 以 Billboard Year-End Hot 10020182025)為例的內容分析
**投稿類別**:研究論文/口頭報告
**關鍵字**:女性主義內容分析、流行音樂、empowerment、商品化、AI 文本分析、語言挪用
---
## 摘要
本研究以 20182025 年 Billboard Year-End Hot 100(共 684 首歌)為素材,
檢視「women-power-and-empowerment」(女性力量/賦權)這個流行音樂主題標籤
在當代主流商業音樂中的使用實況。透過 AI pipeline 抽取主題標籤,再以人工
逐首審視全部被標記為「女性力量」的 62 首歌,發現其中 **44% 屬於「假女性
力量」**——表面採用 pro-women 詞彙(empowerment、boss bitch、queen、
femininity),實質敘事框架卻是父權保護、物化、競爭性貶低其他女性,或將
「賦權」等同於採用男性饒舌階層的炫耀邏輯。本研究歸納出五種「假女性力量」
類型,並就「pussy」一詞作為女性代稱(metonym)的使用進行附加分析,發現
此種以身體部位代稱人格的修辭橫跨男女歌手。研究亦發現大型語言模型(LLM)
對此種標籤污染存在系統性盲點,並提出框架感知(frame-aware)的修正方法
作為方法學貢獻。
---
## 一、研究問題
「賦權」(empowerment)一詞自 1980 年代女性主義論述進入主流流行文化
以來,已逐步被市場語彙化。Beyoncé、Lizzo、Megan Thee Stallion 等女
性藝人的「女性力量」框架被廣泛流通,唱片公司、串流平台與商業媒體亦頻繁
以 empowerment、boss、queen、she/her anthem 等標籤行銷女性藝人。
問題在於:**當「女性力量」成為一種行銷標籤時,它指涉的內容是什麼?**
本研究提出兩個具體問題:
1. 當主流商業音樂中一首歌被標記為「女性力量」時,其敘事框架是否實質上
傳達女性主體性(agency)、自主(autonomy)與獨立(independence)?
2. 若不是,被誤標的內容呈現何種模式?這些模式如何與既有的厭女、物化、
父權結構關聯?
## 二、研究方法
### 2.1 語料
- **來源**Billboard Year-End Hot 100(年度終榜),20182025 年
- **總數**:684 首歌(含跨年榜重複的歌曲算一筆)
- **歌詞抓取**Lyrics.ovh、LRCLIB API
- **元資料**:演唱者性別(男 / 女 / 混合團體)、年份、排名、合作署名
### 2.2 主題標籤抽取流程
採用四步驟混合式 AI pipeline
1. **逐首抽取主題關鍵字**510 個 / 首,由 LLM agent 完成)
2. **同義詞合併**(1982 個原始關鍵字 → 718 個 canonical
3. **主題分群**718 個 canonical → 33 個 thematic element bucket
4. **三角驗證 tagging**
- **由下而上路徑**bottom-up):透過第 13 步歸納
- **由上而下路徑**top-down):另一個 LLM agent 直接讀全文,套用既
定 33 bucket
- **逐主題盲審 judge**:對兩條路徑的差異逐一判定保留/剔除
最終產出固定 33 個 thematic element 的 v1 schema。
### 2.3 「女性力量」後驗審查
對全部 62 首被標記 `women-power-and-empowerment` 的歌進行人工逐首審
視:由三個獨立 LLM subagent 分別判定 genuine(真)/peripheral(點綴)
/fake(假),最後人工仲裁;同時對其中出現「pussy」一詞的歌進行修辭
脈絡分析。
### 2.4 「pussy」修辭分類
對全部 684 首歌中含「pussy / pussies」一詞的 53 首唯一歌曲(含跨年
重複共 56 筆),逐詞分類為四種修辭功能:
- **METONYM**:以 pussy 代稱「女人」這個人(不指身體部位)
- **ANATOMICAL**:指涉身體部位本身或性行為
- **COWARD**:作為「膽小鬼」的中性侮辱
- **OTHER**:動物或語境不明
每筆使用另標註:說話者性別(male / female / mixed)、指涉對象
self / other-women / women-collective-positive / women-collective-negative)。
## 三、主要發現
### 3.1 「女性力量」標籤的污染率:44%
| 分類 | 數量 | 比例 |
|---|---:|---:|
| Genuine(真女性力量) | 28 | 45% |
| Peripheralpro-women 僅為點綴) | 7 | 11% |
| **Fake(表面 pro-women,實質父權/物化/厭女)** | **27** | **44%** |
近半數被標記為「女性力量」的主流商業歌曲,其敘事框架實際上並未傳達
女性主體性、自主或獨立。
### 3.2 「假女性力量」的五種類型
#### 類型 A:男歌手的騎士保護者敘事(chivalric paternalism
男性歌手以「我會保護妳」、「我會供養妳」、「沒人能傷害妳」自居,將
女性置於需要男性 wield power on behalf of her 的位置。**權力的源頭
不在女性自己,而在替她出力的男性**。代表案例:Drake & 21 Savage
"Spin Bout U""I gotta protect ya")、Drake "Nice For What"。
#### 類型 B:女歌手以身體部位代稱自我與女性整體
以 pussy / bitch 等性器詞彙作為「女人」的代名詞,看似 reclamation
但其修辭結構仍內化於男性饒舌階層的詞彙邏輯中。代表案例:Cardi B &
Megan Thee Stallion "WAP"、Megan Thee Stallion "Thot Shit"、
Megan Thee Stallion & Dua Lipa "Sweetest Pie"。
(注意:本研究區分**自指身體**的 pussy 使用——女歌手描述自己身體
本身——與**以 pussy 代稱女人**這種 metonym 修辭。前者是粗俗詞彙
但仍將女人視為主體;後者則將女人化約為其身體部位。詳見 3.3。)
#### 類型 C:用男性指標衡量「賦權」
「Empowerment」被定義為擁有名牌、得到男人的錢、性的支配權、能凌駕
其他女性。這種「賦權」本質是**將既有的(男性建構的)權力/資本指標
讓渡給女性個體去追求**,而非挑戰結構。代表案例:Cardi B "I Like
It"、Cardi B "Up"、Megan Thee Stallion "Savage"、Mary J. Blige
"Juicy"。
#### 類型 D:競爭性貶低其他女性以自抬身價
歌曲表面 assert 女性力量,但其修辭策略是不斷貶低、嘲諷、威脅其他
女性。「我是 queen」的命題往往以「她們是 fake / hoes / pussies」
為陪襯前提。代表案例:Latto "Big Energy"、Nicki Minaj & Ice
Spice "Barbie World"、Ice Spice "Princess Diana"、GloRilla &
Cardi B "Tomorrow 2"。
#### 類型 E:直接複製男性饒舌階層
歌詞結構幾乎是男性饒舌歌手歌詞的字面翻版(炫富、嗆對手、宣告 turf、
sexual dominance),只是性別主詞置換。**這不是 reclamation 而是
horizontal substitution**。代表案例:GloRilla "Yeah Glo!"、Nicki
Minaj "FTCU"、GloRilla & Megan Thee Stallion "Wanna Be"、
Sexyy Red "Get It Sexyy"。
### 3.3 「Pussy」作為女性代稱:跨性別的內化
對 53 首唯一歌曲的逐詞分析發現:
- **Dominant METONYM 歌曲**8 首(pussy 主要功能是代稱女人)
- **Dominant ANATOMICAL 歌曲**32 首(指涉身體 / 性行為)
- **Dominant COWARD 歌曲**13 首
以 pussy 代稱女人這種 metonym 修辭出現於兩類說話者:
**男性歌手**(將女人化約為其性器):
- Drake — "Life Is Good"2020)、"Spin Bout U"2023
- The Weeknd — "Heartless"2020,同一首中 2 次)
- 21 Savage — "redrum"2024
- Bryson Tiller — "Whatever She Wants"2024
**女性歌手**(用 pussy 貶低、排序其他女性):
- Cardi B — "Tomorrow 2"2023
- GloRilla — "Wanna Be"2024)、"Yeah Glo!"2024
值得注意的是:**女性歌手以 pussy 代稱「自己作為女性主體」**
reclamation 用法,target = women-collective-positive)的案例
——例如 Megan Thee Stallion 在多首歌中的女性主體宣告——本研究**不
列入物化清單**,因其修辭結構是 assert woman as subject,而非
reduce woman to organ。
但 GloRilla、Cardi B 在上述歌曲中的 pussy 使用,是用此詞**對其他
女性進行排序與貶低**——「她們是 pussies」、「真 pussy 在這裡」——
此即類型 D 與類型 E 的修辭操作。**身體部位代稱人格的修辭一旦進入
女性互貶的邏輯,仍是女性物化框架的延續,不因說話者為女性而免疫。**
### 3.4 LLM 內容分析的系統性盲點
追溯被誤標為「女性力量」的 27 首假歌曲,其標籤來源分布:
| 標籤來源 | 數量 |
|---|---:|
| **由下而上 + 由上而下兩條路徑都同意**(直接進入 agreedjudge 看不到) | **24 / 27** |
| 僅由下而上路徑提出 | 3 / 27 |
| 僅由上而下路徑提出 | 0 / 27 |
**89% 的假標籤是兩條結構不同的 LLM 路徑「共同同意」的結果。**
這個發現挑戰了「triangulation 透過路徑差異對抗單一路徑偏誤」的方法
學假設。當兩條路徑都跑在同一個 LLM 家族(本研究使用 Anthropic 的
Sonnet 模型)上時,它們**共享表面詞彙的 pattern-match 偏誤**——只要
歌詞包含「女性主體 + 提及女性議題 + 強勢語氣」這個表層組合,兩條路徑
都會傾向標記為「女性力量」,無論敘事框架實際是父權還是物化。
這呼應 Bender、Gebru 等學者對大型語言模型 stochastic parroting
特性的批判:模型內化的是訓練語料裡「empowerment 該長什麼樣子」的
表層共識,而這個共識本身就是被市場去政治化過的。
## 四、討論
### 4.1 「女性力量」作為去政治化的市場符號
本研究的核心發現可以這樣概括:在當代主流商業音樂的標籤生態中,「女性
力量」作為符號的流通已經與其原初的女性主義內涵嚴重脫鉤。**Empowerment
這個詞彙本身的存在不再保證敘事框架是賦權的**——它甚至常與最徹底的
父權/物化框架共存於同一首歌。
### 4.2 「反向挪用」的悖論
特別值得女性主義關注的是「類型 E」現象:女性饒舌歌手大規模採用男性
饒舌階層的修辭範式(炫富、嗆對手、性支配、體型/外貌互貶)作為
「empowerment」的表現。這種操作可以從兩個對立的角度詮釋:
- **解放詮釋**:女性奪取了原本被男性壟斷的 assertive 修辭空間;
- **內化詮釋**:女性內化了 hegemonic masculinity 的成功標準,把它
當作「女性也能達到」的目標,而**未挑戰這個標準本身**。
本研究傾向後者詮釋,理由是:類型 E 的歌曲幾乎全數同時包含類型 D
(競爭性貶低其他女性)與類型 B(pussy 代稱女人),其結構整體性地
複製了男性饒舌的厭女語法,而非挑戰它。**「女性也能做這件事」不等於
「這件事被女性主義化了」**。
### 4.3 身體部位代稱的跨性別內化
類型 B 與「pussy 作為女人代稱」的修辭,是上述內化最具體的語言層證
據。當女性歌手在歌詞中說「real pussy in this bitch」(真女人在
這裡)時,「真女人」這個概念本身就是**用男性凝視的詞彙來定義的**——
女人 = pussy。這個等式在女性說話者口中重述,形式上的反轉(女性
agency)並沒有改變內容上的物化(女人是其性器)。
## 五、方法學貢獻
### 5.1 LLM 共同盲點不是絕對極限,而是提示問題
本研究進一步測試了一個 prompt 修正:在 by-down/top-down agent 與
judge agent 的提示中加入:
1. **框架原則(frame vs vocabulary**:任何主題的判定應看敘事
框架,不只看詞彙;
2. **權力來源測試**(針對 women-power 專用):權力來自女性自己,
還是來自他者(男性、男性指標、貶低其他女性)?
3. **Agreed 例外規則**:對 women-power 此標籤,judge 可以例外推翻
agreed 的保留決定。
對全部 684 首歌重新跑這個修正版 pipeline 後:
- 28 首假女性力量被移除
- 標籤的「假率」由 44% 降至 5% 以下
- 對 v1 漏掉的 19 首真實女性力量歌曲被補回
這顯示:**LLM 的「共同盲點」不是模型架構的絕對極限,而是「沒有提示
要找什麼,模型就不會找」的問題**。給予明確的框架感知提示後,同一個
模型可以執行 frame-level 分析。
### 5.2 對人文/性別研究使用 AI 工具的啟示
本研究實證地呈現了兩個對未來方法學設計重要的點:
1. **路徑結構不同 ≠ 獨立**:在同一個 LLM 家族上,方法上不同的多
條路徑仍共享訓練語料層次的偏誤。真正的「triangulation」需要
model diversity(跨家族),不只方法 diversity。
2. **Frame-aware prompting 是可行且必要的**:對於 women-power
這類「市場已先一步污染」的概念,分析者必須事先清楚 articulate
什麼算真、什麼算假,並把這個區分寫進 prompt。
## 六、限制
1. **代表性**Billboard YE Hot 100 反映美國主流商業市場,不代表
獨立、地下、非英語流行音樂;
2. **語言限制**:拉丁語系歌曲的歌詞分析深度受限;
3. **schema 主觀性**33 個 bucket 為 AI 一次性歸納,非學術共識
分類;
4. **跨文化遷移**:本研究的「假女性力量」類型主要出自美國黑人女
饒舌歌手脈絡,其結構與台灣/華語流行音樂中的相應現象有何異同,
是後續研究的重要方向。
## 七、結論
主流商業流行音樂中的「女性力量」標籤已被市場語彙化到與女性主義原
初內涵嚴重脫鉤的程度。在 20182025 年 Billboard 年終榜上,**44%
的「女性力量」歌曲實質框架是父權、物化或厭女的**。被誤標的歌曲呈
現五種類型:男性騎士保護敘事、女性身體部位代稱、男性指標衡量賦權、
競爭性貶低其他女性、直接複製男性饒舌階層。
這個標籤污染現象的存在本身,就是當代「女性力量」作為市場符號去政治
化的最佳證明。當「empowerment」可以同時指涉真實的女性主體性宣告
(如 Sabrina Carpenter "Feather"、Miley Cyrus "Flowers"、HUNTR/X
"Golden")與「我比其他婊子更高級」這類內化於男性凝視框架的競爭性
炫耀(如 GloRilla "Yeah Glo!"、Latto "Big Energy"),這個詞已經
失去了區辨意義。
對 AI 內容分析方法學而言,本研究指出共同 LLM 盲點是 prompt 問題
而非模型極限:給予明確的框架感知提示後,同一個模型可以做 frame-level
分析。這對未來在性別研究、文化研究領域使用 AI 工具的學者而言,是一
個具體可行的修正路徑。
---
## 附錄:分析資料
- 完整 62 首 women-power 歌曲分類資料(genuine / peripheral / fake):
`theme_extraction/women_power_analysis/final_classification.json`
- 53 首 pussy 修辭使用分類:`pussy_usage_analysis.json`
- 33 個 thematic element schemav1):`theme_extraction/v1_schema.json`
- v1.1 修正後全量重跑統計:`theme_extraction/v1_1_summary.json`
## 投稿資訊(待確認)
- **目標研討會**:女學會年會
- **論文長度**:(依會議要求調整,本檔約 3,400 字,可作為 extended
abstract 或論文初稿大綱)
- **作者**:(待補)
-12
View File
@@ -73,18 +73,6 @@ tally-codings
Settle the coding step by a majority of the three coding runs' archives, and write the final coding table, naming every song by its title and stored artist credit from the working store. Check ``pop-fem-audit-tools tally-codings -h`` for complete instructions on its usage.
tally-groups
------------
Settle the semantic code groups by a majority of the three group-selection runs' archives, and write the final group table, dropping any keyword outside the settled vocabulary. Check ``pop-fem-audit-tools tally-groups -h`` for complete instructions on its usage.
tally-annotations
-----------------
Settle the pattern annotations by a majority of the three annotation runs' archives. It extracts the patterns from the group synthesis archives, checks every ballot against the patterns applicable to that song's performer gender, and writes the settled pattern table and the settled song-by-pattern table. Check ``pop-fem-audit-tools tally-annotations -h`` for complete instructions on its usage.
Copyright
=========
@@ -52,14 +52,6 @@ pop\_fem\_audit\_tools.commands.run\_llm module
:show-inheritance:
:undoc-members:
pop\_fem\_audit\_tools.commands.tally\_annotations module
---------------------------------------------------------
.. automodule:: pop_fem_audit_tools.commands.tally_annotations
:members:
:show-inheritance:
:undoc-members:
pop\_fem\_audit\_tools.commands.tally\_codings module
-----------------------------------------------------
@@ -68,14 +60,6 @@ pop\_fem\_audit\_tools.commands.tally\_codings module
:show-inheritance:
:undoc-members:
pop\_fem\_audit\_tools.commands.tally\_groups module
----------------------------------------------------
.. automodule:: pop_fem_audit_tools.commands.tally_groups
:members:
:show-inheritance:
:undoc-members:
Module contents
---------------