Commit bf098870 bf098870a097ab8c7ff31835e0332f067624b0ca by cnb.bofCdSsphPA

Document asset-type training policy before bulk internal ingestion

Constraint: Internal media types need a clear training whitelist and versioning policy before they are mapped into manifests and pgvector
Rejected: Treat all audio-like assets as the same training label source | Would blur original-vs-instrumental semantics and degrade retrieval quality
Confidence: high
Scope-risk: narrow
Directive: Keep original recordings, instrumental variants, and short-video clips explicitly separated by audio_role and version semantics during ingestion
Tested: Verified new documentation anchors and mapping tables in training-data-and-pgvector-guide.md
Not-tested: Automated import from the upstream SQL type enum into manifests
1 parent a68a7296
...@@ -2,6 +2,32 @@ ...@@ -2,6 +2,32 @@
2 2
3 ## 2026-06-02 3 ## 2026-06-02
4 4
5 ### Stage: 为内部素材 type 枚举补齐训练参与策略文档
6
7 完成项:
8 -[training-data-and-pgvector-guide.md](./training-data-and-pgvector-guide.md) 新增内部素材 type 映射章节
9 - 对用户给出的素材类型补齐:
10 - 主 reference 推荐
11 - 主 query 推荐
12 - 伴奏类的条件式参与策略
13 - 文本/图片/授权/压缩包的 metadata-only 策略
14 - 增加 `canonical_song_id / version_id / asset_type_code / audio_role` 的落库建议
15
16 验证结果:
17 - 文档中已出现以下关键锚点:
18 - `12. 你这批内部素材 type,哪些推荐参与训练`
19 - `12.3 最推荐的主任务训练组合`
20 - `instrumental_variant`
21 - `short_video_clip`
22 - 当前建议与现有数据规范保持一致:
23 - reference / query 分离
24 - 伴奏版本默认不无脑并入原曲主标签
25 - 非音频资产不进入音频模型训练
26
27 结论:
28 - 现在这批内部资产已经有一套明确的训练白名单 / 条件白名单 / 元数据白名单
29 - 后续做批量导入或 pgvector 入库时,可以直接按文档映射执行
30
5 ### Stage: 为外部数据集接入增加 overlap query manifest 能力 31 ### Stage: 为外部数据集接入增加 overlap query manifest 能力
6 32
7 完成项: 33 完成项:
......
...@@ -343,5 +343,140 @@ flowchart TD ...@@ -343,5 +343,140 @@ flowchart TD
343 4. **固定一部分永不训练,只做 test set。** 343 4. **固定一部分永不训练,只做 test set。**
344 5. **先把 manifest 字段做全,再谈 pgvector 和工业服务。** 344 5. **先把 manifest 字段做全,再谈 pgvector 和工业服务。**
345 345
346 ---
347
348 ## 12. 你这批内部素材 type,哪些推荐参与训练
349
350 ## 12.1 一页结论
351
352 如果目标是做 **音乐 ACR / 歌曲识别**,推荐按下面的优先级:
353
354 - **主 reference 首选**`11 原曲-无损`
355 - **次级 reference / 兼容增强**`1 原曲-压缩`
356 - **主 query 来源**`7 抖音片段``8 片段(副歌)``16 快手片段``18 音频demo`
357 - **伴奏类**`2/9/10/12` 不建议直接无脑混进“原曲主任务”同标签训练,除非你们的业务明确要识别伴奏版本
358 - **纯文本/图片/授权/压缩包**:不进音频训练,只进元数据治理
359
360 ---
361
362 ## 12.2 推荐映射表
363
364 | type | 内容 | 建议角色 | 是否进主训练 | 建议说明 |
365 |---:|---|---|---|---|
366 | 1 | 原曲-压缩(mp3) | secondary reference / clean query 来源 | 是 | 当 11 缺失时可做主 reference;有 11 时更适合做压缩退化增强 |
367 | 2 | 伴奏有和声-压缩(mp3) | 可选单独版本库 / hard negative | 条件式 | 不建议直接和原曲共用同一训练语义 |
368 | 3 | TXT歌词 | metadata | 否 | 可入库做检索增强,不进音频模型 |
369 | 4 | 封面 | metadata | 否 | 不进音频训练 |
370 | 5 | 授权书 | compliance metadata | 否 | 只做合规治理 |
371 | 6 | 专辑信息(txt) | metadata | 否 | 只做元数据 |
372 | 7 | 抖音片段 | query | 是 | 很适合真实 query 训练/评测 |
373 | 8 | 片段(副歌) | query | 是 | 高价值 query,建议重点保留 |
374 | 9 | 伴奏无和声-压缩(mp3) | 可选单独版本库 / hard negative | 条件式 | 不建议默认并入原曲主标签 |
375 | 10 | 伴奏无和声-无损 | 可选 reference / hard negative | 条件式 | 仅在“识别伴奏版本”任务里进入主训练 |
376 | 11 | 原曲-无损(wav/flac) | primary reference | **强烈推荐** | 最适合作为标准 reference 真值 |
377 | 12 | 伴奏有和声-无损 | 可选单独版本库 / hard negative | 条件式 | 与原曲声学差异大,默认不要并到原曲主任务 |
378 | 13 | 滚动歌词(lrc) | metadata | 否 | 可做歌词侧检索,不进音频模型 |
379 | 14 | 封面源文件(psd) | metadata | 否 | 不进训练 |
380 | 16 | 快手片段 | query | 是 | 与 7 类似,适合真实短视频场景评测 |
381 | 17 | 词曲压缩包 | archive metadata | 否 | 先解包治理,不直接训练 |
382 | 18 | 音频demo(mp3/wav) | query / weak reference | 条件式 | 先按质量分层;可做 query,必要时做辅 reference |
383 | 19 | 曲谱(png) | metadata | 否 | 不进音频训练 |
384 | 20 | 译文滚动歌词 | metadata | 否 | 只做文本侧扩展 |
385
386 ---
387
388 ## 12.3 最推荐的主任务训练组合
389
390 ### A. 如果你的目标是“识别原曲”
391
392 ```text
393 reference:
394 - 11 原曲无损(主)
395 - 1 原曲压缩(辅)
396
397 query:
398 - 从 11 / 1 切 5s / 8s clean query
399 - 7 抖音片段
400 - 8 副歌片段
401 - 16 快手片段
402 - 18 音频demo(筛质后)
403 ```
404
405 ### B. 如果你的目标是“原曲 + 伴奏版本都要识别”
406
407 建议不要直接把原曲和伴奏粗暴合并成同一个训练标签,而是至少保留:
408
409 - `canonical_song_id`:作品级 ID
410 - `version_id`:版本级 ID
411 - `audio_role``original / inst_with_harmony / inst_no_harmony / short_clip / demo`
412
413 这样你后面可以做两种策略:
414
415 1. **作品级识别**
416 - 原曲和伴奏共享 `canonical_song_id`
417 - 但保留不同 `version_id`
418 2. **版本级识别**
419 - 原曲和伴奏完全分开标签
420
421 如果你现在主目标只是 ACR 识别“这首歌是谁”,而不是区分伴奏版本,建议先走策略 1,但**训练时不要让伴奏版本无脑占太高比例**,否则会把主模型拉偏。
422
423 ---
424
425 ## 12.4 我给你的实际建议
426
427 ### 第一批一定要进的数据
428
429 - `11 原曲无损`
430 - `1 原曲压缩`
431 - `7 抖音片段`
432 - `8 副歌片段`
433 - `16 快手片段`
434
435 ### 第二批可控加入的数据
436
437 - `18 音频demo`
438 - 先按质量筛选
439 - 干净 demo 可做 query
440 - 明显截断/噪声重的 demo 进 hard-case pool
441
442 ### 不建议第一阶段直接并入主训练标签的数据
443
444 - `2 伴奏有和声`
445 - `9 伴奏无和声-压缩`
446 - `10 伴奏无和声-无损`
447 - `12 伴奏有和声-无损`
448
449 更稳妥的做法:
450 - 先单独入库
451 - 先做评测集 / hard negative
452 - 等主模型稳定后,再决定是否做多版本任务
453
454 ---
455
456 ## 12.5 对应 manifest / pgvector 字段建议
457
458 如果你们要把这些 type 真正落到训练和数据库,建议至少补这几个字段:
459
460 | 字段 | 示例 | 作用 |
461 |---|---|---|
462 | `canonical_song_id` | `song_123` | 作品主键 |
463 | `version_id` | `song_123_orig_lossless` | 版本主键 |
464 | `asset_type_code` | `11` | 原始 type 枚举 |
465 | `audio_role` | `original_lossless` | 训练与检索语义 |
466 | `type` | `reference / clean / augmented / confused` | 模型训练角色 |
467 | `source_platform` | `douyin / kuaishou / internal` | 来源治理 |
468
469 ### 一个实用映射例子
470
471 | 原始 type | 推荐 `audio_role` | 推荐训练 `type` |
472 |---:|---|---|
473 | 11 | `original_lossless` | `reference` |
474 | 1 | `original_lossy` | `reference``clean` |
475 | 7 | `short_video_clip` | `clean` / `confused` |
476 | 8 | `chorus_clip` | `clean` |
477 | 16 | `short_video_clip` | `clean` / `confused` |
478 | 18 | `demo_audio` | `clean` / `augmented` |
479 | 2/9/10/12 | `instrumental_variant` | 先不进主训练,或做 hard negative |
480
346 ## Sources 481 ## Sources
347 - 当前代码事实来自 [acr-engine/src/data/dataset.py](../acr-engine/src/data/dataset.py), [acr-engine/src/data/manifest_tools.py](../acr-engine/src/data/manifest_tools.py), [acr-engine/src/data/external_adapters.py](../acr-engine/src/data/external_adapters.py), [acr-engine/src/utils/audio.py](../acr-engine/src/utils/audio.py), [acr-engine/src/engines/ecapa_embedder.py](../acr-engine/src/engines/ecapa_embedder.py), [acr-engine/train.py](../acr-engine/train.py) 482 - 当前代码事实来自 [acr-engine/src/data/dataset.py](../acr-engine/src/data/dataset.py), [acr-engine/src/data/manifest_tools.py](../acr-engine/src/data/manifest_tools.py), [acr-engine/src/data/external_adapters.py](../acr-engine/src/data/external_adapters.py), [acr-engine/src/utils/audio.py](../acr-engine/src/utils/audio.py), [acr-engine/src/engines/ecapa_embedder.py](../acr-engine/src/engines/ecapa_embedder.py), [acr-engine/train.py](../acr-engine/train.py)
......