Rohan Surana¹ · Amit Namburi¹ · Gagan Mundada¹ · Abhay Lal¹ · Zachary Novack · Julian McAuley · Junda Wu
University of California, San Diego
¹Equal contribution
MusiCRS is the first benchmark for audio-centric conversational recommendation that explicitly links authentic user conversations with corresponding audio tracks. Built from large-scale Reddit discussions where users naturally exchange music suggestions, MusiCRS enables rigorous evaluation of cross-modal understanding in conversational recommendation systems.
Representative examples showing Reddit conversations, queries, and candidates across genres (Full PDF)
Performance across genres and modalities
reddit-music/
├── data_prep/ # Data preparation and preprocessing scripts
│ ├── extract_month_subreddit.py
│ ├── filter_threads.py
│ ├── download_audio_dataset.py
│ ├── convert_to_wav.py
│ └── README.md # Detailed data pipeline documentation
├── pipeline/ # Candidate pool selection and enhancement
│ └── candidate_pool_selection_enhanced.py
├── generative/ # Generative model implementations
│ ├── qwen.py # Qwen2-Audio
│ ├── qwen-omni.py # Qwen2.5-Omni
│ ├── phi.py # Phi-4-Mini
│ ├── SALMONN/ # SALMONN model
│ ├── SALMONN-7B/ # SALMONN-7B model
│ ├── FUTGA/ # FUTGA model
│ └── audio-flamingo-3/ # Audio Flamingo 3
├── retrieval/ # Retrieval-based baselines
│ ├── clap.py # CLAP model
│ └── collap.py # CoLLAP model
├── traditional/ # Traditional baselines
│ ├── popularity.py # Popularity-based
│ └── naive_nbcrs.py # Naive NBCRS
├── requirements_qwen_audio.txt
├── requirements_qwen_omni.txt
└── img/ # Paper figures and visualizations
ffmpeg (for audio processing)zstd (for data decompression)git clone https://github.com/rohan2810/musiCRS.git
cd musiCRS
conda create -n musicrs python=3.10 -y
conda activate musicrs
# For Qwen2-Audio models
pip install -r requirements_qwen_audio.txt
# For Qwen2.5-Omni
pip install -r requirements_qwen_omni.txt
# For SALMONN and SALMONN-7B
pip install -r generative/SALMONN/requirements.txt
pip install -r generative/SALMONN-7B/requirements.txt
# Optional utilities (retrieval baselines, data processing)
pip install sentence-transformers faiss-cpu google-api-python-client streamlit duckdb zstandard
export WANDB_API_KEY="your_wandb_key" # For experiment tracking
export YOUTUBE_API_KEY="your_youtube_key" # For dataset enhancement
The MusiCRS dataset is available on Hugging Face:
from datasets import load_dataset
dataset = load_dataset("rohan2810/MusiCRS")
Or download directly: 🤗 MusiCRS Dataset
| Metric | Value |
|---|---|
| Total Conversations | 477 |
| Unique Musical Entities | 3,589 |
| Genres | 7 (Classical, Hip-Hop, Electronic, Metal, Pop, Indie, Jazz) |
| Avg. Candidates per Query | 100 |
| Avg. Ground Truth Items | 10 per conversation |
Configure data paths via environment variables (defaults provided):
export AUDIO_BASE_DIR=audio/full/wav
export INPUT_JSONL=data/merged_final_cleaned_music_clean_queries_with_candidates_enhanced_v2_100_candidates.jsonl
All models support three evaluation modes:
audio_only: Use only audio tracks for rankingquery_only: Use only conversational text for rankingaudio_query: Combine both audio and text (multimodal)python retrieval/clap.py
Configuration: Edit MODES variable in the script or set environment variables:
AUDIO_BASE_DIR: Path to audio files (default: audio/full/wav)INPUT_JSONL: Path to dataset JSONL fileCLAP_OUTPUT_DIR: Output directory (default: retrieval/results/CLAP_FINAL)Key Parameters:
laion/larger_clap_music_and_speechpython retrieval/collap.py
Requirements: Requires pre-trained SALMONN model for audio feature extraction.
Configuration:
INPUT_JSONL and AUDIO_DIR in the scriptAUDIO_BUDGET_SECS (default: 300s) and MAX_CLIPS (default: 10)python generative/qwen.py
Model: Qwen/Qwen2-Audio-7B-Instruct
Configuration: Edit modes variable in script (line 143):
modes = ["audio_only", "query_only", "audio_query"]
Key Features:
python generative/qwen-omni.py
Model: Qwen/Qwen2.5-Omni-7B
Configuration: Edit modes variable in script (line 178):
modes = ["audio_query", "audio_only", "query_only"]
Special Features:
python generative/phi.py
Model: microsoft/Phi-4-multimodal-instruct
Requirements: Flash Attention 2 recommended
Configuration:
audio_base, input_jsonl, output_root in scriptmodes list (line 181)Note: Uses special audio tokens (<|audio_1|>, <|audio_2|>, etc.)
python generative/SALMONN/cli_inference.py \
--cfg-path generative/SALMONN/configs/decode_config.yaml \
--device cuda:0
Requirements:
generative/SALMONN/configs/decode_config.yamlConfiguration:
modes in script or config YAMLaudio_budget_secs (default: 30s for SALMONN)Environment Variables:
SALMONN_CFG: Path to config fileINPUT_JSONL: Input data pathAUDIO_BASE_DIR: Audio directorypython generative/SALMONN-7B/cli_inference.py \
--cfg-path generative/SALMONN-7B/configs/decode_config.yaml \
--device cuda:0
Similar to SALMONN but with 7B parameter model for enhanced performance.
python generative/FUTGA/cli_inference.py \
--device cuda:0 \
--ckpt_path ./salomnn_7b.bin \
--whisper_path generative/SALMONN/whisper-large-v2 \
--beats_path generative/SALMONN/BEATs_iter3_plus_AS2M_finetuned_on_AS2M_cpt2.pt \
--vicuna_path generative/SALMONN-7B/vicuna-7b-v1.5
Requirements: Pre-trained checkpoints for Whisper, BEATs, and Vicuna
Optional Flags:
--low_resource: Enable for limited GPU memory--debug: Enable debug modeConfiguration: Edit modes variable in script (default: all three modes)
python traditional/popularity.py
Ranks candidates by subreddit-specific popularity (frequency in candidate pools).
Configuration:
INPUT_JSONL: Input datasetPOPULARITY_OUTPUT: Output pathMAX_PREDICTIONS: Number of predictions (default: 100)python traditional/naive_nbcrs.py
Traditional neighborhood-based collaborative recommender system.
All models automatically compute and log metrics. For standalone evaluation:
python eval_stats.py
Metrics Computed:
For researchers interested in reproducing the dataset or creating similar benchmarks, we provide comprehensive data preparation scripts.
See data_prep/README.md for detailed documentation.
Pipeline Overview:
yt-dlpOur comprehensive benchmark reveals critical insights about current audio-centric conversational recommendation systems:
🎯 The Multimodal Integration Challenge: Current models often perform better with single modalities (audio-only OR query-only) than combined inputs, exposing fundamental limitations in cross-modal knowledge integration.
📊 Model Performance Comparison (Recall@20 / nDCG@20):
| Model | Best Config | Recall@20 | nDCG@20 |
|---|---|---|---|
| CLAP (Retrieval) | Query-only | 22.71% | 15.90% |
| Qwen2.5-Omni (Generative) | Combined | 21.49% | 16.21% |
| CoLLAP (Retrieval) | Query-only | 20.85% | 14.14% |
| Phi-4-Multimodal | Audio-only | 20.04% | 13.72% |
| SALMONN-7B | Audio-only | 19.55% | 13.66% |
| Popularity Baseline | N/A | 16.51% | 11.09% |
🎵 Genre-Specific Performance (Best Recall@20):
| Genre | Performance | Best Model |
|---|---|---|
| Jazz | 28.09% | Qwen2.5-Omni (audio-only) |
| Classical | 26.53% | Qwen2.5-Omni (combined) |
| Metal | 26.42% | CLAP (audio-only) |
| Hip-Hop | 25.12% | Phi-4 (audio-only) |
| Pop | 23.38% | Qwen2.5-Omni (query-only) |
| Electronic | 23.55% | SALMONN-7B (query-only) |
| Indie | 22.95% | Phi-4 (audio-only) |
Key Takeaways:
For comprehensive analysis, evaluation protocols, and additional experiments, see our full paper on arXiv.
We welcome contributions! Please feel free to:
Please open an issue or pull request on our GitHub repository.
If you use MusiCRS in your research, please cite our paper:
@article{surana2025musicrs,
title={MusiCRS: Benchmarking Audio-Centric Conversational Recommendation},
author={Surana, Rohan and Namburi, Amit and Mundada, Gagan and Lal, Abhay and Novack, Zachary and McAuley, Julian and Wu, Junda},
journal={arXiv preprint arXiv:2509.19469},
year={2025}
}
Paper: https://arxiv.org/abs/2509.19469
This project is licensed under the Creative Commons Attribution 4.0 International License (CC-BY-4.0). See individual model directories for specific model licenses.
MusiCRS - Benchmarking Audio-Centric Conversational Recommendation
University of California, San Diego • 2025
1,111 followers · starred Jan 2026
Rohan Surana¹ · Amit Namburi¹ · Gagan Mundada¹ · Abhay Lal¹ · Zachary Novack · Julian McAuley · Junda Wu
University of California, San Diego
¹Equal contribution
MusiCRS is the first benchmark for audio-centric conversational recommendation that explicitly links authentic user conversations with corresponding audio tracks. Built from large-scale Reddit discussions where users naturally exchange music suggestions, MusiCRS enables rigorous evaluation of cross-modal understanding in conversational recommendation systems.
Representative examples showing Reddit conversations, queries, and candidates across genres (Full PDF)
Performance across genres and modalities
reddit-music/
├── data_prep/ # Data preparation and preprocessing scripts
│ ├── extract_month_subreddit.py
│ ├── filter_threads.py
│ ├── download_audio_dataset.py
│ ├── convert_to_wav.py
│ └── README.md # Detailed data pipeline documentation
├── pipeline/ # Candidate pool selection and enhancement
│ └── candidate_pool_selection_enhanced.py
├── generative/ # Generative model implementations
│ ├── qwen.py # Qwen2-Audio
│ ├── qwen-omni.py # Qwen2.5-Omni
│ ├── phi.py # Phi-4-Mini
│ ├── SALMONN/ # SALMONN model
│ ├── SALMONN-7B/ # SALMONN-7B model
│ ├── FUTGA/ # FUTGA model
│ └── audio-flamingo-3/ # Audio Flamingo 3
├── retrieval/ # Retrieval-based baselines
│ ├── clap.py # CLAP model
│ └── collap.py # CoLLAP model
├── traditional/ # Traditional baselines
│ ├── popularity.py # Popularity-based
│ └── naive_nbcrs.py # Naive NBCRS
├── requirements_qwen_audio.txt
├── requirements_qwen_omni.txt
└── img/ # Paper figures and visualizations
ffmpeg (for audio processing)zstd (for data decompression)git clone https://github.com/rohan2810/musiCRS.git
cd musiCRS
conda create -n musicrs python=3.10 -y
conda activate musicrs
# For Qwen2-Audio models
pip install -r requirements_qwen_audio.txt
# For Qwen2.5-Omni
pip install -r requirements_qwen_omni.txt
# For SALMONN and SALMONN-7B
pip install -r generative/SALMONN/requirements.txt
pip install -r generative/SALMONN-7B/requirements.txt
# Optional utilities (retrieval baselines, data processing)
pip install sentence-transformers faiss-cpu google-api-python-client streamlit duckdb zstandard
export WANDB_API_KEY="your_wandb_key" # For experiment tracking
export YOUTUBE_API_KEY="your_youtube_key" # For dataset enhancement
The MusiCRS dataset is available on Hugging Face:
from datasets import load_dataset
dataset = load_dataset("rohan2810/MusiCRS")
Or download directly: 🤗 MusiCRS Dataset
| Metric | Value |
|---|---|
| Total Conversations | 477 |
| Unique Musical Entities | 3,589 |
| Genres | 7 (Classical, Hip-Hop, Electronic, Metal, Pop, Indie, Jazz) |
| Avg. Candidates per Query | 100 |
| Avg. Ground Truth Items | 10 per conversation |
Configure data paths via environment variables (defaults provided):
export AUDIO_BASE_DIR=audio/full/wav
export INPUT_JSONL=data/merged_final_cleaned_music_clean_queries_with_candidates_enhanced_v2_100_candidates.jsonl
All models support three evaluation modes:
audio_only: Use only audio tracks for rankingquery_only: Use only conversational text for rankingaudio_query: Combine both audio and text (multimodal)python retrieval/clap.py
Configuration: Edit MODES variable in the script or set environment variables:
AUDIO_BASE_DIR: Path to audio files (default: audio/full/wav)INPUT_JSONL: Path to dataset JSONL fileCLAP_OUTPUT_DIR: Output directory (default: retrieval/results/CLAP_FINAL)Key Parameters:
laion/larger_clap_music_and_speechpython retrieval/collap.py
Requirements: Requires pre-trained SALMONN model for audio feature extraction.
Configuration:
INPUT_JSONL and AUDIO_DIR in the scriptAUDIO_BUDGET_SECS (default: 300s) and MAX_CLIPS (default: 10)python generative/qwen.py
Model: Qwen/Qwen2-Audio-7B-Instruct
Configuration: Edit modes variable in script (line 143):
modes = ["audio_only", "query_only", "audio_query"]
Key Features:
python generative/qwen-omni.py
Model: Qwen/Qwen2.5-Omni-7B
Configuration: Edit modes variable in script (line 178):
modes = ["audio_query", "audio_only", "query_only"]
Special Features:
python generative/phi.py
Model: microsoft/Phi-4-multimodal-instruct
Requirements: Flash Attention 2 recommended
Configuration:
audio_base, input_jsonl, output_root in scriptmodes list (line 181)Note: Uses special audio tokens (<|audio_1|>, <|audio_2|>, etc.)
python generative/SALMONN/cli_inference.py \
--cfg-path generative/SALMONN/configs/decode_config.yaml \
--device cuda:0
Requirements:
generative/SALMONN/configs/decode_config.yamlConfiguration:
modes in script or config YAMLaudio_budget_secs (default: 30s for SALMONN)Environment Variables:
SALMONN_CFG: Path to config fileINPUT_JSONL: Input data pathAUDIO_BASE_DIR: Audio directorypython generative/SALMONN-7B/cli_inference.py \
--cfg-path generative/SALMONN-7B/configs/decode_config.yaml \
--device cuda:0
Similar to SALMONN but with 7B parameter model for enhanced performance.
python generative/FUTGA/cli_inference.py \
--device cuda:0 \
--ckpt_path ./salomnn_7b.bin \
--whisper_path generative/SALMONN/whisper-large-v2 \
--beats_path generative/SALMONN/BEATs_iter3_plus_AS2M_finetuned_on_AS2M_cpt2.pt \
--vicuna_path generative/SALMONN-7B/vicuna-7b-v1.5
Requirements: Pre-trained checkpoints for Whisper, BEATs, and Vicuna
Optional Flags:
--low_resource: Enable for limited GPU memory--debug: Enable debug modeConfiguration: Edit modes variable in script (default: all three modes)
python traditional/popularity.py
Ranks candidates by subreddit-specific popularity (frequency in candidate pools).
Configuration:
INPUT_JSONL: Input datasetPOPULARITY_OUTPUT: Output pathMAX_PREDICTIONS: Number of predictions (default: 100)python traditional/naive_nbcrs.py
Traditional neighborhood-based collaborative recommender system.
All models automatically compute and log metrics. For standalone evaluation:
python eval_stats.py
Metrics Computed:
For researchers interested in reproducing the dataset or creating similar benchmarks, we provide comprehensive data preparation scripts.
See data_prep/README.md for detailed documentation.
Pipeline Overview:
yt-dlpOur comprehensive benchmark reveals critical insights about current audio-centric conversational recommendation systems:
🎯 The Multimodal Integration Challenge: Current models often perform better with single modalities (audio-only OR query-only) than combined inputs, exposing fundamental limitations in cross-modal knowledge integration.
📊 Model Performance Comparison (Recall@20 / nDCG@20):
| Model | Best Config | Recall@20 | nDCG@20 |
|---|---|---|---|
| CLAP (Retrieval) | Query-only | 22.71% | 15.90% |
| Qwen2.5-Omni (Generative) | Combined | 21.49% | 16.21% |
| CoLLAP (Retrieval) | Query-only | 20.85% | 14.14% |
| Phi-4-Multimodal | Audio-only | 20.04% | 13.72% |
| SALMONN-7B | Audio-only | 19.55% | 13.66% |
| Popularity Baseline | N/A | 16.51% | 11.09% |
🎵 Genre-Specific Performance (Best Recall@20):
| Genre | Performance | Best Model |
|---|---|---|
| Jazz | 28.09% | Qwen2.5-Omni (audio-only) |
| Classical | 26.53% | Qwen2.5-Omni (combined) |
| Metal | 26.42% | CLAP (audio-only) |
| Hip-Hop | 25.12% | Phi-4 (audio-only) |
| Pop | 23.38% | Qwen2.5-Omni (query-only) |
| Electronic | 23.55% | SALMONN-7B (query-only) |
| Indie | 22.95% | Phi-4 (audio-only) |
Key Takeaways:
For comprehensive analysis, evaluation protocols, and additional experiments, see our full paper on arXiv.
We welcome contributions! Please feel free to:
Please open an issue or pull request on our GitHub repository.
If you use MusiCRS in your research, please cite our paper:
@article{surana2025musicrs,
title={MusiCRS: Benchmarking Audio-Centric Conversational Recommendation},
author={Surana, Rohan and Namburi, Amit and Mundada, Gagan and Lal, Abhay and Novack, Zachary and McAuley, Julian and Wu, Junda},
journal={arXiv preprint arXiv:2509.19469},
year={2025}
}
Paper: https://arxiv.org/abs/2509.19469
This project is licensed under the Creative Commons Attribution 4.0 International License (CC-BY-4.0). See individual model directories for specific model licenses.
MusiCRS - Benchmarking Audio-Centric Conversational Recommendation
University of California, San Diego • 2025
1,111 followers · starred Jan 2026