❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦
🚀 「音乐检索进入「多模态对齐」时代!清华CLaMP 3突破三大极限:零样本分类、跨语言泛化、多模态语义桥」
大家好,我是蚝油菜花。当ChatGPT还在处理文字时,音乐AI已经学会「看见乐谱、听懂旋律、理解文化」!
CLaMP 3 的三大维度突破:
- 🎯 模态无界:乐谱特征(ABC符号)+音频特征(MERT)+MIDI文本 → 统一语义空间
- 🌐 语言无疆:基于XLM-R模型,训练27语→泛化100语,维吾尔语搜雷鬼不是梦
- 🔥 零样本飞跃:无需标注数据,直接根据语义完成音乐分类/推荐/检索
依托 231万音乐-文本对 构建的M4-RAG数据集,这项发表于ICML的研究正在重塑音乐科技版图——点击体验Hugging Face Demo,感受多模态检索如何打破音乐认知边界!
🚀 快速阅读
CLaMP 3 是一个支持多模态、多语言的音乐信息检索框架,适用于跨模态音乐检索和零样本分类等任务。
- 核心功能:文本到音乐检索、图像到音乐检索、跨模态音乐检索、零样本音乐分类、音乐推荐。
- 技术原理:基于对比学习,将不同模态的音乐数据(如乐谱、MIDI、音频)与多语言文本统一到一个共享的语义空间中。
CLaMP 3 是什么
CLaMP 3 是清华大学人工智能学院朱文武教授团队推出的一个多模态、多语言音乐信息检索框架。它基于对比学习,能够将乐谱(如ABC符号)、音频(如MERT特征)和表演信号(如MIDI文本格式)与多种语言的文本描述对齐到一个共享的表示空间中。CLaMP 3 支持27种语言,并能够泛化到100种语言,适用于跨模态检索任务,如文本到音乐、图像到音乐检索,零样本音乐分类和音乐语义相似性评估。
CLaMP 3 的主要优势在于其强大的多模态支持和多语言处理能力。通过对不同形式的音乐数据进行统一表示,CLaMP 3 可以实现高效、准确的音乐检索和分类任务,极大地提升了音乐信息检索的灵活性和实用性。
CLaMP 3 的主要功能
- 文本到音乐检索:根据文本描述(支持100种语言)检索与之语义匹配的音乐。
- 图像到音乐检索:通过图像生成的描述(如BLIP模型生成的caption)检索与之匹配的音乐。
- 跨模态音乐检索:在不同音乐表示形式(如乐谱、MIDI、音频)之间进行检索。例如,用音频检索乐谱或用乐谱检索音频。
- 零样本音乐分类:无需标注数据,基于语义相似性将音乐分类到特定类别(如风格、情绪等)。
- 音乐推荐:基于语义相似性进行音乐推荐,支持同一模态内的推荐(如音频到音频)。
CLaMP 3 的技术原理
- 多模态数据对齐:将不同模态的音乐数据(如乐谱、MIDI、音频)和多语言文本统一到一个共享的语义空间。基于对比学习,模型学习将不同模态的数据映射到相似的向量表示,实现跨模态检索。
- 对比学习框架:用对比学习(如CLIP的变体)训练模型。模型通过正样本对(如音乐与对应文本)和负样本对(随机配对的样本)学习区分语义相关和不相关的数据,优化表示空间。
- 多语言支持:基于XLM-R(一种多语言预训练模型)实现多语言文本嵌入,支持27种语言的训练,并泛化到100种语言。
- 大规模数据集训练:模型在大规模数据集(如M4-RAG)上进行训练,包含231万对高质量的音乐-文本对,覆盖27种语言和194个国家。
如何运行 CLaMP 3
1. 环境设置
要设置 CLaMP 3 的运行环境,请运行以下命令:
conda env create -f environment.yml
conda activate clamp3
AI 代码解读
2. 数据准备
2.1 将 MusicXML 文件转换为 Interleaved ABC 格式
CLaMP 3 需要使用 Interleaved ABC 格式的乐谱。首先,将 MusicXML 文件(.mxl
, .xml
, .musicxml
)转换为标准 ABC 格式:
python batch_xml2abc.py
AI 代码解读
然后,将标准 ABC 文件转换为 Interleaved ABC 格式:
python batch_interleaved_abc.py
AI 代码解读
2.2 将 MIDI 文件转换为 MTF 格式
CLaMP 3 处理性能信号时使用 MIDI 文本格式(MTF)。将 MIDI 文件(.mid
, .midi
)转换为 MTF 格式:
python batch_midi2mtf.py
AI 代码解读
2.3 提取音频特征
CLaMP 3 使用 MERT-extracted 特征处理音频。从原始音频(.mp3
, .wav
)中提取 MERT 特征:
python extract_mert.py --input_path <input_path> --output_path <output_path> --model_path m-a-p/MERT-v1-95M --mean_features
AI 代码解读
3. 训练和特征提取
3.1 训练模型
修改 config.py
中的超参数和数据路径后,可以使用以下命令训练模型:
python -m torch.distributed.launch --nproc_per_node=<GPUs> --use_env train_clamp3_symbolic.py
AI 代码解读
对于音频数据,使用:
python -m torch.distributed.launch --nproc_per_node=<GPUs> --use_env train_clamp3_audio.py
AI 代码解读
3.2 使用预训练模型
建议直接使用预训练模型权重,下载链接如下:
- CLaMP 3 SAAS(推荐用于音频检索):https://huggingface.co/sander-wood/clamp3/blob/main/weights_clamp3_saas_h_size_768_t_model_FacebookAI_xlm-roberta-base_t_length_128_a_size_768_a_layers_12_a_length_128_s_size_768_s_layers_12_p_size_64_p_length_512.pth
- CLaMP 3 C2(推荐用于符号音乐检索):https://huggingface.co/sander-wood/clamp3/blob/main/weights_clamp3_c2_h_size_768_t_model_FacebookAI_xlm-roberta-base_t_length_128_a_size_768_a_layers_12_a_length_128_s_size_768_s_layers_12_p_size_64_p_length_512.pth
3.3 提取特征
使用预训练模型提取特征:
accelerate launch extract_clamp3.py --epoch <epoch> <input_dir> <output_dir> --get_global
AI 代码解读
4. 语义搜索
使用 semantic_search.py
进行语义搜索:
python semantic_search.py <query_file> <reference_folder> [--top_k TOP_K]
AI 代码解读
5. 分类
训练线性分类器:
python train_cls.py --train_folder <path> --eval_folder <path> [--num_epochs <int>] [--learning_rate <float>] [--balanced_training]
AI 代码解读
运行推理:
python inference_cls.py <weights_path> <feature_folder> <output_file>
AI 代码解读
资源
- 项目主页:https://sanderwood.github.io/clamp3/
- GitHub 仓库:https://github.com/sanderwood/clamp3
- HuggingFace 在线体验:https://huggingface.co/spaces/sander-wood/clamp3
❤️ 如果你也关注 AI 的发展现状,且对 AI 应用开发感兴趣,我会每日分享大模型与 AI 领域的开源项目和应用,提供运行实例和实用教程,帮助你快速上手AI技术!
🥦 AI 在线答疑 -> 智能检索历史文章和开源项目 -> 尽在微信公众号 -> 搜一搜:蚝油菜花 🥦