语料层(Case Studies & Corroboration)
这一层回答一个问题:
教材说的,真实作品到底做不做?
本库的规则不是抄来的,是抄来之后拿 62 首真实多轨验过的。 验过的结果分三档,只有强规则才进 20 条自查表。
按任务读哪几节
| 任务 | 读 |
|---|---|
| 想知道某条规则靠不靠谱 | §4 佐证表 |
| 要加一条新规则 | §4.3 流程 |
| 规则和数据打架了 | ★ §5 |
| 要找一个真实例子 | §6 |
| 要标注一首曲子 | §3.3 |
| 想知道这套语料能测什么 | §2.2 |
边界
| 不归这里 | 归哪 |
|---|---|
| 规则本身的内容 | L1/L2 各 skill |
| 生成结果的验收 | mc-ai-tell-audit |
| 规格写完的检查 | mc-workflow §3.0 |
| 某个风格的语汇 | mc-style-*(L3) |
| 具体曲目的逐段拆解 | reference.md |
1. 语料的三条原则
1.1 ★ 只存结构与参数,不存作品
语料条目里没有音频、没有谱面、没有歌词——只有测出来的数值。
这既是版权上的必需,也是方法上的正确: 我们要的是"真实作品的参数分布",不是作品本身。
1.2 ★ 自然抽样胜过策展
语料不精选,用自然抽样。
策展会把语料偏向"规则成立"的那一侧—— 你挑的是你认为的好例子,而你认为的好例子就是符合你已有理论的例子。
自然抽样自动供给反例。
所以最终用的是 Cambridge-MT 的 60+ 首自然样本,不筛选。 这也顺带取消了另找 MIDI/分轨语料的必要(它原本的唯一用途是给分轨工具做标定, 而真分轨直接消除了这个需求)。
1.3 语料的单元是"反向 ARR-SPEC"
不是音频文件,是从音频反推测出来的一份 ARR-SPEC。 选这个单元是因为它和我们的产出用同一套字段:结构、编制进退场、能量曲线都记在同样的位置, 所以佐证表能直接拿语料条目和规则判据对齐,不用先做一层格式转换。 字段长什么样、哪些标记是诚实留白而非漏填,见 §2.1。
2. 反向 ARR-SPEC
2.1 长什么样
本库的实测语料是 63 条(Cambridge-MT 多轨 60 首 + 3 首华语流行成品)。每条头部就写明了性质:
yaml# 实测 ARR-SPEC(语料条目)—— 从音频自动反推生成 # ★ 只存结构与参数,不存谱面与歌词。intent / hooks 等 TODO 项需人工填。
★ 注意那些 # TODO 和 # 估算,非实测 的注释——
它们是诚实标注,不是没做完。
intent.one_thing 这类东西机器测不出来,硬填就是造假。
2.2 ★ 这套语料能测什么、不能测什么
Cambridge-MT 是未混的原始多轨,不是母带成品。 所以:
| 能测 | 不能测 |
|---|---|
| 段落边界、小节数 | DR / 响度(未混) |
| 拍速 | 立体声宽度(未混) |
| 能量曲线、减法事件 | 频谱质心的绝对值(未混 + 无母带) |
| 编制进退场(有真分轨!) | 制作质感 |
| onset 相对网格偏移 | |
| 和弦(chroma 匹配) |
★ 测不了的规则要标出来,不许硬跑。
规则表里这类规则标 evidence: unusable_here,
统计时跳过而不是给一个假数字。
本库的语料是多轨分轨,不含成品混音,所以这类规则目前没有数字。
3. 真值与标注
3.1 为什么需要人工真值
算法测出来的段落边界本身可信度存疑(规则表里标 no_truth)。
没有一份独立的真值,就没法判断一个异常的命中率到底是规则不成立,还是算法本身测错了——
§5.2 那次"硬编码阈值把命中率压到 16%"就是靠人工真值才翻案的实例。
所以做了一批人工标注当真值,校准结果见 §3.2。
3.2 ★ 一个被验证过的担心
用户担心"我不是专家,标的边界不准"。实测结果推翻了这个担心:
人工标记与算法的偏差中位数 = 0.0 秒。
★ 结论:段落边界是感知判断,不是品味判断。 非专家标出来的边界和算法一致——这说明这件事本来就不需要专家。 (能标的和不能标的要分清:边界能标,"这段好不好听"不能标。)
校准结果:7 首人工标注,算法命中 72%,偏差中位 0.0 s。
3.3 怎么标注
在任何能看波形、能播放的软件里,边听边记下每个段落起点的秒数;段落名可填可不填,主要用的是时间点。 只标听得出来的边界,拿不准就别标——这是要当真值用的,标错比不标更糟。标 5 首就能用。
本库已标注的 7 首(Cambridge-MT): AMContra_HeartPeripheral、APZX_CyberMower、DigitalHumans_Electrvm、 Forkupines_Semantics、MERCMusic_Knockout、MR1103_Flags、SimonLyn_Copper
4. ★ 佐证表:规则 × 语料 → 命中率 → 分档
4.1 两条诚实约束
违反了,佐证表就是自欺:
| # | 约束 |
|---|---|
| 1 | ★ 判据不能复用生成器的定义。 反向 ARR-SPEC 里的 subtraction_events 是反推时按"较前段降 >1 dB"自动填的;拿它去验"真编曲有没有减法"是循环论证。所以涉及减法的判据一律直接从 energy_curve 重算,用一个有音乐意义的阈值(≥3 dB),不读 subtraction_events 字段 |
| 2 | ★ 语料测不了的规则要标出来,不许硬跑(见 §2.2) |
evidence 的三个取值:
| 值 | 含义 |
|---|---|
ok | 本语料能验 |
unusable_here | 本语料性质不对,需要成品混音语料 |
no_truth | 缺真值(如段落边界),判据本身可信度存疑 |
4.2 第一轮结果
| 规则 | 命中 | 档 |
|---|---|---|
| 能量曲线必须有下降 | 62/62 | 强规则 |
| 编制必须有乐器中途进场 | 59/59 | 强规则 |
| 至少一件乐器提前退场 | 59/59 | 强规则 |
| 不该全声部严格对齐网格 | 62/62 | 强规则 |
| 开场不该把乐器一次铺满 | 54/59 | 强规则 |
| 全曲至少一处明显减法 | 36/62 = 70% | 倾向 |
| 最高潮前应有能量回落 | 全量 22% / 人工真值 5/7 | ★ 矛盾,只当手法 |
| 编制在最高潮最密 | 25/59 = 42% | 挂起 |
4.3 分档决定什么
| 档 | 在 skill 里怎么写 | 进 lint 吗 |
|---|---|---|
| 强规则 | "必须" | ✅ 硬检查 |
| 倾向 | "通常应该" | ❌,进"写完后必过"清单 |
| 手法 | "可以这么做" | ❌,只在诊断路径里出现 |
| 挂起 | 不写进 skill | ❌,只在佐证表里列着,等更多数据 |
4.4 加一条规则的流程
- 把规则写成一条:规则 + 可跑的判据 +
evidence - 检查是否违反 §4.1 的两条约束
- 拿判据逐首过一遍语料(自然抽样,§1.2),数命中
- 按命中率分档(§4.3)
- ★ 先把结果记下来(哪批语料、什么判据、命中多少、分到哪档),然后才改规格或规则
规则集是有版本的。 改了规则集就要重跑,否则前后轮不可比。
5. ★ 规则和数据打架时怎么办
这是本 skill 最重要的一节。
5.1 先问:指标测的是不是那回事
不要拿指标去推翻教科书。
实例:「最高潮前应有能量回落」在全量 62 首里只有 22%, 但在 7 首人工标注真值里是 5/7。
差距的来源:算法用能量峰值定位"最高潮",而人耳不是。 所以 22% 那个数测的不是这条规则,测的是"能量峰值前有没有回落"。
★ 结论:这条不降级为伪规则,也不升为强规则——列为手法。
5.2 另一个实例:硬编码阈值造成的假低命中率
佐证统计时曾把判据硬编码成"12 dB 动态范围", 把规则 ARR-R-012 的命中率压到 16%,差点被报成"教科书是错的"。
证伪方法:拿 7 首人工标注真值测 → 5/7 = 71%。 修法:改成在归一化的 0–10 单位上打分,不假装能还原 dB。
★ 通用教训:一个异常低的命中率,先怀疑判据,再怀疑规则。
5.3 佐证表与 lint 问的不是同一个问题
| 问什么 | |
|---|---|
| 佐证表 | 人类一般会不会这么做 |
| 20 条自查 | 不这么做会不会听起来像 AI |
★ 所以 70% 的命中率不会机械地把一条 lint 检查降级。 一件事可能只有 70% 的人做,但不做的那 30% 恰好都听起来像机器。
6. 找一个真实例子
| 你要 | 去哪 |
|---|---|
| 某个技法的真实用例 | reference.md 的逐段拆解 |
| 某个和弦进行用在哪首歌 | mc-progressions reference.md §7 名曲索引 |
| 各风格的实测参数(中位数) | reference.md §1.2 |
| 配器/混合音色的谱例 | mc-orchestration reference.md §4 |
| 对位的谱例 | mc-counterpoint reference.md |
6.1 逐段拆解的格式
四者对齐:时间码 / 段落 / 编制事件 / 和声。 格式与反向 ARR-SPEC 一致,人工补上机器测不出的部分(intent、hooks、为什么)。
7. 与其他层的接口
| 方向 | 内容 |
|---|---|
| → L1/L2 各 skill | 提供"实测:62/62,强规则"这样的证据等级标注 |
| → 20 条自查 | 只有强规则才能进自查表 |
→ mc-ai-tell-audit | 零点校准(不相关成品得 63–66)就是在这套语料上测的 |
| ← 成品混音语料(★ 缺) | §2.2 那些 unusable_here 的规则需要它 |
8. 用完必过
- 引用规则时带了证据等级(强规则/倾向/手法),不是光说"教材说"
- 新加的判据没有复用生成器的定义(§4.1 约束 1)
- 语料测不了的规则标了
unusable_here,没有硬跑出假数字 - 命中率异常低时,先怀疑了判据(§5.2)
- 没有拿佐证表的命中率机械地给 lint 检查降级(§5.3)
- 改了规则集就重跑,并把这一轮的结果记下来
附:现状
本 skill 的数字建立在:
- 63 条实测 ARR-SPEC(Cambridge-MT 多轨 60 首 + 3 首华语流行成品)
- 一份带版本号的规则集(第一轮佐证表见 §4.2)
- 7 首人工标注的段落边界真值(§3)
- 拍速校准:56 首真值


