Openjmla
模型概述
OpenJMLA 旨在解決開放集音樂標籤問題,通過聯合音樂和語言注意力(JMLA)模型實現零樣本音樂標籤系統,在相關數據集上取得了優異的成績。
模型特點
開放集音樂標籤
解決了傳統封閉集音樂標籤無法推廣到新標籤的問題。
創新的模型架構
結合音頻編碼器和語言解碼器,引入預感知器重採樣器和密集註意力連接。
大規模數據集
使用互聯網收集的音樂和描述數據,並通過 ChatGPT 進行形式化和多樣化處理。
優異的性能
在 GTZAN 數據集上實現了 64.82% 的零樣本音頻標籤準確率。
模型能力
音樂標籤生成
音樂描述生成
零樣本學習
使用案例
音樂分類
流派識別
識別音樂的流派,如流行、搖滾等。
在 GTZAN 數據集上準確率 64.82%
情緒分析
分析音樂的情緒,如憂鬱、快樂等。
音樂推薦
場景匹配
根據音樂標籤推薦適合的場景,如酒吧、運動等。
🚀 統一音樂項目:OpenJMLA
統一音樂項目 OpenJMLA 旨在解決開放集音樂標籤問題,通過聯合音樂和語言注意力(JMLA)模型實現零樣本音樂標籤系統,在相關數據集上取得了優異的成績。
🚀 快速開始
安裝依賴
以下是安裝項目所需依賴的命令:
conda create -name SpectPrompt python=3.9
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install transformers datasets librosa einops_exts einops mmcls peft ipdb torchlibrosa
pip install -U openmim
mim install mmcv==1.7.1
使用🤗 Transformers 進行推理
使用 OpenJMLA 進行推理非常簡單,只需輸入以下幾行代碼:
from transformers import AutoModel, AutoTokenizer
import torch
import numpy as np
model = AutoModel.from_pretrained('UniMus/OpenJMLA', trust_remote_code=True)
device = model.device
# sample rate: 16k
music_path = '/path/to/music.wav'
# 1. get logmelspectrogram
# get the file wav_to_mel.py from https://github.com/taugastcn/SpectPrompt.git
from wav_to_mel import wav_to_mel
lms = wav_to_mel(music_path)
import os
from torch.nn.utils.rnn import pad_sequence
import random
# get the file transforms.py from https://github.com/taugastcn/SpectPrompt.git
from transforms import Normalize, SpecRandomCrop, SpecPadding, SpecRepeat
transforms = [ Normalize(-4.5, 4.5), SpecRandomCrop(target_len=2992), SpecPadding(target_len=2992), SpecRepeat() ]
lms = lms.numpy()
for trans in transforms:
lms = trans(lms)
# 2. template of input
input_dic = dict()
input_dic['filenames'] = [music_path.split('/')[-1]]
input_dic['ans_crds'] = [0]
input_dic['audio_crds'] = [0]
input_dic['attention_mask'] = torch.tensor([[1, 1, 1, 1, 1]]).to(device)
input_dic['input_ids'] = torch.tensor([[1, 694, 5777, 683, 13]]).to(device)
input_dic['spectrogram'] = torch.from_numpy(lms).unsqueeze(dim=0).to(device)
# 3. generation
model.eval()
gen_ids = model.forward_test(input_dic)
gen_text = model.neck.tokenizer.batch_decode(gen_ids.clip(0))
# 4. Post-processing
# Given that the training data may contain biases, the generated texts might need some straightforward post-processing to ensure accuracy.
# In future versions, we will enhance the quality of the data.
gen_text = gen_text[0].split('<s>')[-1].split('\n')[0].strip()
gen_text = gen_text.replace(' in Chinese','')
gen_text = gen_text.replace(' Chinese','')
print(gen_text)
✨ 主要特性
- 解決開放集音樂標籤問題:以往的音樂標籤研究主要集中在封閉集音樂標籤任務上,無法推廣到新標籤。本項目提出的零樣本音樂標籤系統通過聯合音樂和語言注意力(JMLA)模型,有效解決了開放集音樂標籤問題。
- 創新的模型架構:JMLA 模型由一個基於預訓練掩碼自編碼器的音頻編碼器和一個基於 Falcon7B 的解碼器組成。引入了預感知器重採樣器將任意長度的音頻轉換為固定長度的嵌入,並在編碼器和解碼器層之間引入了密集註意力連接,以改善信息流動。
- 大規模數據集:從互聯網上收集了大規模的音樂和描述數據集,並使用 ChatGPT 將原始描述轉換為形式化和多樣化的描述,用於訓練 JMLA 模型。
- 優異的性能:在 GTZAN 數據集上實現了 64.82% 的零樣本音頻標籤準確率,優於以往的零樣本系統,並在 FMA 和 MagnaTagATune 數據集上取得了與以往系統相當的結果。
📦 安裝指南
按照以下步驟安裝項目所需的依賴:
- 創建一個名為 SpectPrompt 的 conda 環境,Python 版本為 3.9:
conda create -name SpectPrompt python=3.9
- 安裝 PyTorch 及其相關庫:
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
- 安裝其他依賴庫:
pip install transformers datasets librosa einops_exts einops mmcls peft ipdb torchlibrosa
- 安裝 OpenMIM 並使用它安裝 MMCV:
pip install -U openmim
mim install mmcv==1.7.1
💻 使用示例
基礎用法
以下是一個使用 OpenJMLA 進行推理的簡單示例:
from transformers import AutoModel, AutoTokenizer
import torch
import numpy as np
model = AutoModel.from_pretrained('UniMus/OpenJMLA', trust_remote_code=True)
device = model.device
# sample rate: 16k
music_path = '/path/to/music.wav'
# 1. get logmelspectrogram
# get the file wav_to_mel.py from https://github.com/taugastcn/SpectPrompt.git
from wav_to_mel import wav_to_mel
lms = wav_to_mel(music_path)
import os
from torch.nn.utils.rnn import pad_sequence
import random
# get the file transforms.py from https://github.com/taugastcn/SpectPrompt.git
from transforms import Normalize, SpecRandomCrop, SpecPadding, SpecRepeat
transforms = [ Normalize(-4.5, 4.5), SpecRandomCrop(target_len=2992), SpecPadding(target_len=2992), SpecRepeat() ]
lms = lms.numpy()
for trans in transforms:
lms = trans(lms)
# 2. template of input
input_dic = dict()
input_dic['filenames'] = [music_path.split('/')[-1]]
input_dic['ans_crds'] = [0]
input_dic['audio_crds'] = [0]
input_dic['attention_mask'] = torch.tensor([[1, 1, 1, 1, 1]]).to(device)
input_dic['input_ids'] = torch.tensor([[1, 694, 5777, 683, 13]]).to(device)
input_dic['spectrogram'] = torch.from_numpy(lms).unsqueeze(dim=0).to(device)
# 3. generation
model.eval()
gen_ids = model.forward_test(input_dic)
gen_text = model.neck.tokenizer.batch_decode(gen_ids.clip(0))
# 4. Post-processing
# Given that the training data may contain biases, the generated texts might need some straightforward post-processing to ensure accuracy.
# In future versions, we will enhance the quality of the data.
gen_text = gen_text[0].split('<s>')[-1].split('\n')[0].strip()
gen_text = gen_text.replace(' in Chinese','')
gen_text = gen_text.replace(' Chinese','')
print(gen_text)
示例音樂及標籤
- 音樂鏈接:https://www.youtube.com/watch?v=Q_yuO8UNGmY
- 標籤信息:
- 樂器:人聲、鋼琴、絃樂
- 流派:流行
- 主題:心碎
- 情緒:憂鬱
- 時代:當代
- 節奏:快
- 最佳場景:一個昏暗的小酒吧。這首歌的憂鬱情緒將與舞臺靈感的旋律相得益彰。
📚 詳細文檔
本項目是 JMLA 的重新實現。關於 JMLA 模型的詳細信息,請參考上述論文。
🔧 技術細節
模型架構
JMLA 模型由一個基於預訓練掩碼自編碼器的音頻編碼器和一個基於 Falcon7B 的解碼器組成。
- 音頻編碼器:使用預訓練的掩碼自編碼器對音頻進行編碼。
- 解碼器:使用 Falcon7B 作為解碼器。
- 預感知器重採樣器:將任意長度的音頻轉換為固定長度的嵌入。
- 密集註意力連接:在編碼器和解碼器層之間引入密集註意力連接,以改善信息流動。
數據集
從互聯網上收集了大規模的音樂和描述數據集,並使用 ChatGPT 將原始描述轉換為形式化和多樣化的描述,用於訓練 JMLA 模型。
訓練和評估
在 GTZAN、FMA 和 MagnaTagATune 等數據集上進行訓練和評估。在 GTZAN 數據集上實現了 64.82% 的零樣本音頻標籤準確率,優於以往的零樣本系統,並在 FMA 和 MagnaTagATune 數據集上取得了與以往系統相當的結果。
📄 許可證
本項目採用 CC 許可證。
📚 引用
如果您在研究中發現我們的論文和代碼有用,請考慮給項目加星並引用:
@article{JMLA,
title={JOINT MUSIC AND LANGUAGE ATTENTION MODELS FOR ZERO-SHOT MUSIC TAGGING},
author={Xingjian Du, Zhesong Yu, Jiaju Lin, Bilei Zhu, Qiuqiang Kong},
journal={arXiv preprint arXiv:2310.10159},
year={2023}
}
項目圖標
Phi 4 Multimodal Instruct
MIT
Phi-4-multimodal-instruct是一款輕量級開源多模態基礎模型,融合了Phi-3.5和4.0模型的語言、視覺及語音研究數據。支持文本、圖像和音頻輸入,生成文本輸出,並具備128K token的上下文長度。
文本生成音頻
Transformers 支持多種語言

P
microsoft
584.02k
1,329
Ultravox V0 5 Llama 3 2 1b
MIT
Ultravox是一個基於Llama3.2-1B和Whisper-large-v3構建的多模態語音大語言模型,能夠同時處理語音和文本輸入。
文本生成音頻
Transformers 支持多種語言

U
fixie-ai
167.25k
21
Seamless M4t V2 Large
SeamlessM4T v2 是 Facebook 發佈的大規模多語言多模態機器翻譯模型,支持近100種語言的語音和文本翻譯。
文本生成音頻
Transformers 支持多種語言

S
facebook
64.59k
821
Ultravox V0 3
MIT
Ultravox 是一個基於 Llama3.1-8B-Instruct 和 Whisper-small 構建的多模態語音大語言模型,能夠同時處理語音和文本輸入。
文本生成音頻
Transformers 英語

U
fixie-ai
48.30k
17
Ultravox V0 5 Llama 3 1 8b
MIT
Ultravox是一款基於Llama3.1-8B-Instruct和whisper-large-v3-turbo構建的多模態語音大語言模型,能夠同時處理語音和文本輸入。
文本生成音頻
Transformers 支持多種語言

U
fixie-ai
17.86k
12
Hf Seamless M4t Medium
SeamlessM4T 是一個多語言翻譯模型,支持語音和文本的輸入輸出,實現跨語言交流。
文本生成音頻
Transformers

H
facebook
14.74k
30
Granite Speech 3.3 8b
Apache-2.0
專為自動語音識別(ASR)和自動語音翻譯(AST)設計的緊湊高效語音語言模型,採用雙階段設計處理音頻和文本
文本生成音頻
Transformers 英語

G
ibm-granite
5,532
35
Voila Tokenizer
MIT
Voila是一個大型語音-語言基礎模型系列,旨在提升人機交互體驗,支持多種音頻任務和語言。
文本生成音頻
Transformers 支持多種語言

V
maitrix-org
4,912
3
Hf Seamless M4t Large
SeamlessM4T 是一個支持多語言語音和文本翻譯的統一模型,能夠實現語音到語音、語音到文本、文本到語音和文本到文本的翻譯任務。
文本生成音頻
Transformers

H
facebook
4,648
57
Minicpm O 2 6 Int4
MiniCPM-o 2.6的int4量化版本,顯著降低GPU顯存佔用,支持多模態處理能力。
文本生成音頻
Transformers 其他

M
openbmb
4,249
42
精選推薦AI模型
Llama 3 Typhoon V1.5x 8b Instruct
專為泰語設計的80億參數指令模型,性能媲美GPT-3.5-turbo,優化了應用場景、檢索增強生成、受限生成和推理任務
大型語言模型
Transformers 支持多種語言

L
scb10x
3,269
16
Cadet Tiny
Openrail
Cadet-Tiny是一個基於SODA數據集訓練的超小型對話模型,專為邊緣設備推理設計,體積僅為Cosmo-3B模型的2%左右。
對話系統
Transformers 英語

C
ToddGoldfarb
2,691
6
Roberta Base Chinese Extractive Qa
基於RoBERTa架構的中文抽取式問答模型,適用於從給定文本中提取答案的任務。
問答系統 中文
R
uer
2,694
98