Add the natural-coding definition files and the convergence algorithms

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-17 22:38:26 +08:00
co-authored by Claude Fable 5
parent 0c82da7a1d
commit 964006ec6d
20 changed files with 729 additions and 16 deletions
+23
View File
@@ -0,0 +1,23 @@
You are annotating song lyrics for a content-analysis corpus.
Input: the complete lyrics of one song.
Task: list the thematic keywords of this song — short labels
naming the themes the lyrics express, chosen by your own
reading of the lyrics.
Rules:
- Give between 5 and 10 thematic keywords.
- Each keyword is a short lowercase phrase with the words
joined by hyphens.
- For each keyword, quote 1 to 3 verbatim lines of the lyrics
that ground it; do not give a keyword you cannot ground.
Output a single JSON object mapping each keyword to its list
of quotes, and nothing else:
{
"first-keyword": ["quoted line", "another quoted line"],
"second-keyword": ["quoted line"]
}
+23
View File
@@ -0,0 +1,23 @@
You are consolidating a vocabulary of thematic keywords that
were independently annotated on the songs of a corpus.
Input: a JSON array of thematic keywords, deduplicated and
unordered.
Task: merge keywords that express the same or nearly the same
theme, by your own understanding of what the keywords mean.
Rules:
- Every input keyword must appear in exactly one group.
- Do not invent keywords that are not in the input.
- Merge only what you consider the same theme; a group may be
a single keyword.
Output a single JSON array of groups — each group an array of
its member keywords — and nothing else:
[
["keyword", "another-keyword"],
["keyword"]
]
+36
View File
@@ -0,0 +1,36 @@
You are arbitrating between two independent consolidations of
the same vocabulary of thematic keywords from a song corpus.
Where the two consolidations agree, the result has been
settled by script and is not shown. You rule on the
disagreements: pairs of keyword blocks that one consolidation
merged into one theme and the other kept apart.
Input: a JSON object. "blocks" maps a block id to the
keywords of that block; "pairs" lists the block-id pairs in
question:
{
"blocks": {
"b1": ["keyword", "another-keyword"],
"b2": ["keyword"],
"b3": ["keyword"]
},
"pairs": [["b1", "b2"], ["b1", "b3"]]
}
Task: for each listed pair, decide whether the two blocks
express the same theme, by your own understanding of what the
keywords mean.
Rules:
- Judge every listed pair, each on its own merits from the
block contents alone.
- Judge only the listed pairs.
Output a single JSON array holding the pairs whose two blocks
express the same theme, written exactly as given in "pairs";
an empty array when none do:
[["b1", "b2"]]
+34
View File
@@ -0,0 +1,34 @@
You are casting the deciding judgment on disagreements about
a consolidated vocabulary of thematic keywords from a song
corpus: for each pair of keyword blocks in question, earlier
independent judgments disagreed on whether the two blocks
express the same theme.
Input: a JSON object. "blocks" maps a block id to the
keywords of that block; "pairs" lists the block-id pairs in
question:
{
"blocks": {
"b1": ["keyword", "another-keyword"],
"b2": ["keyword"],
"b3": ["keyword"]
},
"pairs": [["b1", "b2"], ["b1", "b3"]]
}
Task: for each listed pair, decide whether the two blocks
express the same theme, by your own understanding of what the
keywords mean.
Rules:
- Judge every listed pair, each on its own merits from the
block contents alone.
- Judge only the listed pairs.
Output a single JSON array holding the pairs whose two blocks
express the same theme, written exactly as given in "pairs";
an empty array when none do:
[["b1", "b2"]]
+28
View File
@@ -0,0 +1,28 @@
You are naming the theme groups of a consolidated vocabulary
of thematic keywords from a song corpus.
Input: a JSON object mapping an opaque group id to the member
keywords of that group:
{
"g1": ["keyword", "another-keyword"],
"g2": ["keyword"]
}
Task: give each group a name that best names the theme its
members gather, by your own understanding of what the
keywords mean.
Rules:
- Each name is a short lowercase phrase with the words joined
by hyphens.
- Names must be unique across the groups.
Output a single JSON object mapping each group id to its
name, and nothing else:
{
"g1": "group-name",
"g2": "another-group-name"
}
+37
View File
@@ -0,0 +1,37 @@
You are arbitrating between two independent namings of the
theme groups of a consolidated vocabulary of thematic
keywords from a song corpus.
For each group in question, the two namings proposed
different names. You choose between them.
Input: a JSON object. "groups" maps an opaque group id to
its member keywords and its two candidate names; "taken"
lists names that are already in use:
{
"groups": {
"g1": {
"members": ["keyword", "another-keyword"],
"candidates": ["one-name", "other-name"]
}
},
"taken": ["existing-name"]
}
Task: for each group, choose the candidate that better names
the theme its members gather, by your own understanding of
what the keywords mean.
Rules:
- Choose only from that group's two candidates.
- Choices must be unique across the groups and must not
reuse any name in "taken".
Output a single JSON object mapping each group id to the
chosen name, and nothing else:
{
"g1": "one-name"
}
+26
View File
@@ -0,0 +1,26 @@
You are consolidating a vocabulary of thematic keywords
from a song corpus further, to a fixed maximum number of
themes.
Input: a JSON array of thematic keywords, deduplicated and
unordered.
Task: merge keywords that express the same or a similar
theme, by your own understanding of what the keywords mean,
until at most 50 groups remain.
Rules:
- Every input keyword must appear in exactly one group.
- Do not invent keywords that are not in the input.
- Merge the keywords that are closest in meaning first; keep
clearly distinct themes apart as far as the limit allows.
A group may be a single keyword.
Output a single JSON array of groups — each group an array of
its member keywords — and nothing else:
[
["keyword", "another-keyword"],
["keyword"]
]
+37
View File
@@ -0,0 +1,37 @@
You are arbitrating between two independent consolidations
that each reduced the same vocabulary of thematic keywords
from a song corpus to a fixed maximum number of themes.
Where the two consolidations agree, the result has been
settled by script and is not shown. You rule on the
disagreements: pairs of keyword blocks that one consolidation
merged into one theme and the other kept apart.
Input: a JSON object. "blocks" maps a block id to the
keywords of that block; "pairs" lists the block-id pairs in
question:
{
"blocks": {
"b1": ["keyword", "another-keyword"],
"b2": ["keyword"],
"b3": ["keyword"]
},
"pairs": [["b1", "b2"], ["b1", "b3"]]
}
Task: for each listed pair, decide whether the two blocks
express the same theme, by your own understanding of what the
keywords mean.
Rules:
- Judge every listed pair, each on its own merits from the
block contents alone.
- Judge only the listed pairs.
Output a single JSON array holding the pairs whose two blocks
express the same theme, written exactly as given in "pairs";
an empty array when none do:
[["b1", "b2"]]
+35
View File
@@ -0,0 +1,35 @@
You are casting the deciding judgment on disagreements about
a vocabulary of thematic keywords from a song corpus that was
consolidated to a fixed maximum number of themes: for each
pair of keyword blocks in question, earlier independent
judgments disagreed on whether the two blocks express the
same theme.
Input: a JSON object. "blocks" maps a block id to the
keywords of that block; "pairs" lists the block-id pairs in
question:
{
"blocks": {
"b1": ["keyword", "another-keyword"],
"b2": ["keyword"],
"b3": ["keyword"]
},
"pairs": [["b1", "b2"], ["b1", "b3"]]
}
Task: for each listed pair, decide whether the two blocks
express the same theme, by your own understanding of what the
keywords mean.
Rules:
- Judge every listed pair, each on its own merits from the
block contents alone.
- Judge only the listed pairs.
Output a single JSON array holding the pairs whose two blocks
express the same theme, written exactly as given in "pairs";
an empty array when none do:
[["b1", "b2"]]
+29
View File
@@ -0,0 +1,29 @@
You are naming the theme groups of a vocabulary of thematic
keywords from a song corpus that was consolidated to a fixed
maximum number of themes.
Input: a JSON object mapping an opaque group id to the member
keywords of that group:
{
"g1": ["keyword", "another-keyword"],
"g2": ["keyword"]
}
Task: give each group a name that best names the theme its
members gather, by your own understanding of what the
keywords mean.
Rules:
- Each name is a short lowercase phrase with the words joined
by hyphens.
- Names must be unique across the groups.
Output a single JSON object mapping each group id to its
name, and nothing else:
{
"g1": "group-name",
"g2": "another-group-name"
}
+38
View File
@@ -0,0 +1,38 @@
You are arbitrating between two independent namings of the
theme groups of a vocabulary of thematic keywords from a song
corpus that was consolidated to a fixed maximum number of
themes.
For each group in question, the two namings proposed
different names. You choose between them.
Input: a JSON object. "groups" maps an opaque group id to
its member keywords and its two candidate names; "taken"
lists names that are already in use:
{
"groups": {
"g1": {
"members": ["keyword", "another-keyword"],
"candidates": ["one-name", "other-name"]
}
},
"taken": ["existing-name"]
}
Task: for each group, choose the candidate that better names
the theme its members gather, by your own understanding of
what the keywords mean.
Rules:
- Choose only from that group's two candidates.
- Choices must be unique across the groups and must not
reuse any name in "taken".
Output a single JSON object mapping each group id to the
chosen name, and nothing else:
{
"g1": "one-name"
}
+31
View File
@@ -0,0 +1,31 @@
You are coding song lyrics against a fixed vocabulary of
thematic keywords.
Vocabulary — the complete set of codes; use these and no
others:
(TO BE INSERTED VERBATIM WHEN THE VOCABULARY IS FINALIZED —
this file must not be used in a run before then.)
Input: the complete lyrics of one song.
Task: list every vocabulary keyword whose theme this song
expresses, by your own reading of the lyrics.
Rules:
- Use only keywords from the vocabulary, spelled exactly as
given.
- A song may match any number of keywords, including none.
- For each keyword you assign, quote 1 to 3 verbatim lines of
the lyrics that ground it; do not assign a keyword you
cannot ground.
Output a single JSON object mapping each assigned keyword to
its list of quotes (an empty object when no keyword applies),
and nothing else:
{
"first-keyword": ["quoted line", "another quoted line"],
"second-keyword": ["quoted line"]
}
+39
View File
@@ -0,0 +1,39 @@
You are arbitrating between two independent codings of the
same song against the same fixed vocabulary of thematic
keywords.
The keywords the two codings agree on have been settled by
script and are not shown. You rule only on the
disagreements: the keywords assigned by one coding but not
the other.
Input: a JSON object with the lyrics of the song and the
disagreements — each disagreement maps a keyword to the lyric
quotes the assigning coding gave as evidence:
{
"lyrics": "...",
"disagreements": {
"first-keyword": ["quoted line", "another quoted line"],
"second-keyword": ["quoted line"]
}
}
Task: for each disagreement keyword, decide whether the song
expresses that theme, by your own reading of the lyrics and
of the quoted evidence.
Rules:
- Rule on every listed keyword: keep it or drop it.
- Keep a keyword only when you can ground it in verbatim
lines of the lyrics; quote them.
- Do not add any keyword that is not listed.
Output a single JSON object mapping each kept keyword to your
list of quotes, and nothing else. A dropped keyword is simply
left out; output an empty object when nothing is kept:
{
"kept-keyword": ["quoted line", "another quoted line"]
}
+19
View File
@@ -0,0 +1,19 @@
You are screening song lyrics for one specific theme.
Input: the complete lyrics of one song.
Task: judge whether this song expresses the theme
"women-power", by your own understanding of
that label.
Rules:
- If the song expresses the theme, quote 1 to 3 verbatim
lines of the lyrics that ground the judgment; if you cannot
ground it in a quote, the answer is no.
Output a single JSON array and nothing else: the quoted
lines when the song expresses the theme, or an empty array
when it does not:
["quoted line", "another quoted line"]
+28
View File
@@ -0,0 +1,28 @@
You are arbitrating a screening of song lyrics for one
specific theme: two independent screenings of the same song
disagreed on whether it expresses the theme
"women-power".
Input: a JSON object with the lyrics of the song and the
lyric quotes that the affirming screening gave as evidence:
{
"lyrics": "...",
"evidence": ["quoted line", "another quoted line"]
}
Task: decide whether the song expresses the theme, by your
own understanding of the label, reading the lyrics and the
quoted evidence.
Rules:
- If the song expresses the theme, quote 1 to 3 verbatim
lines of the lyrics that ground the judgment; if you cannot
ground it in a quote, the answer is no.
Output a single JSON array and nothing else: the quoted
lines when the song expresses the theme, or an empty array
when it does not:
["quoted line", "another quoted line"]