Feature Extraction
Transformers
English
audio-text-retrieval
audio-retrieval
clap
multimodal-llm
lora
acl2026
Instructions to use JudeJiwoo/OEA-Qwen3B-Cl with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use JudeJiwoo/OEA-Qwen3B-Cl with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("feature-extraction", model="JudeJiwoo/OEA-Qwen3B-Cl")# pip install -U transformers accelerate # Load model directly from transformers import AutoModel model = AutoModel.from_pretrained("JudeJiwoo/OEA-Qwen3B-Cl", device_map="auto") - Notebooks
- Google Colab
- Kaggle
Add model card for ACL 2026 (Oral) release
Browse files
README.md
ADDED
|
@@ -0,0 +1,172 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
---
|
| 2 |
+
language: en
|
| 3 |
+
license: mit
|
| 4 |
+
library_name: transformers
|
| 5 |
+
pipeline_tag: feature-extraction
|
| 6 |
+
tags:
|
| 7 |
+
- audio-text-retrieval
|
| 8 |
+
- audio-retrieval
|
| 9 |
+
- clap
|
| 10 |
+
- multimodal-llm
|
| 11 |
+
- lora
|
| 12 |
+
- acl2026
|
| 13 |
+
base_model:
|
| 14 |
+
- Qwen/Qwen2.5-Omni-3B
|
| 15 |
+
---
|
| 16 |
+
|
| 17 |
+
# OEA-Qwen3B-Cl
|
| 18 |
+
|
| 19 |
+
`OEA-Qwen3B-Cl` is a **LoRA + projection-head checkpoint** for the **Omni-Embed-Audio (OEA)** retrieval encoder presented in:
|
| 20 |
+
|
| 21 |
+
> **Omni-Embed-Audio: Leveraging Multimodal LLMs for Robust Audio-Text Retrieval**
|
| 22 |
+
> HaeJun Yoo, Yongseop Shin, Insung Lee, Myoung-Wan Koo, Du-Seong Chang (Sogang University)
|
| 23 |
+
> *Proceedings of ACL 2026 (Oral)*
|
| 24 |
+
> Code & UIQ benchmark: <https://github.com/JudeJiwoo/Omni-Embed-Audio>
|
| 25 |
+
> Web demo: <https://omni-embed-audio.github.io>
|
| 26 |
+
|
| 27 |
+
## Model summary
|
| 28 |
+
|
| 29 |
+
| Field | Value |
|
| 30 |
+
|-------|-------|
|
| 31 |
+
| Base model | [`Qwen/Qwen2.5-Omni-3B`](https://huggingface.co/Qwen/Qwen2.5-Omni-3B) (Qwen2.5-Omni-3B, ~3B params) |
|
| 32 |
+
| Trained on | Clotho (train split) |
|
| 33 |
+
| Embedding dim | 512 (L2-normalized) |
|
| 34 |
+
| Audio sample rate | 16 kHz mono |
|
| 35 |
+
| Trainable parameters | LoRA adapters + 2 projection heads (~11β16M) |
|
| 36 |
+
| Backbone | **Frozen** |
|
| 37 |
+
| Checkpoint file | `step_40.pt` (PyTorch state dict) |
|
| 38 |
+
| License (this checkpoint) | MIT β the underlying base model is governed by its own license |
|
| 39 |
+
|
| 40 |
+
## What's inside `step_40.pt`
|
| 41 |
+
|
| 42 |
+
```python
|
| 43 |
+
ckpt = torch.load("step_40.pt", map_location="cpu")
|
| 44 |
+
ckpt.keys()
|
| 45 |
+
# dict_keys(['lora_state_dict', 'audio_head', 'text_head', ...])
|
| 46 |
+
```
|
| 47 |
+
|
| 48 |
+
- `lora_state_dict` β LoRA adapters (r=16, Ξ±=32, dropout=0.05) attached to
|
| 49 |
+
`q_proj, k_proj, v_proj, o_proj, qkv, out_proj` of the Qwen2.5-Omni-3B backbone.
|
| 50 |
+
- `audio_head`, `text_head` β modality-specific 512-d `ProjectionHead`
|
| 51 |
+
(`Linear β Dropout β LayerNorm β L2-normalize`).
|
| 52 |
+
|
| 53 |
+
The base model weights are **not** redistributed here; they are loaded from
|
| 54 |
+
[`Qwen/Qwen2.5-Omni-3B`](https://huggingface.co/Qwen/Qwen2.5-Omni-3B) on first use.
|
| 55 |
+
|
| 56 |
+
## Quick start
|
| 57 |
+
|
| 58 |
+
Install dependencies (see the repository for the full pinned list):
|
| 59 |
+
|
| 60 |
+
```bash
|
| 61 |
+
pip install torch torchaudio transformers peft huggingface_hub soundfile librosa
|
| 62 |
+
```
|
| 63 |
+
|
| 64 |
+
Minimal encoding example (text & audio β 512-d L2-normalized embeddings):
|
| 65 |
+
|
| 66 |
+
```python
|
| 67 |
+
import torch
|
| 68 |
+
from types import SimpleNamespace
|
| 69 |
+
from huggingface_hub import hf_hub_download
|
| 70 |
+
|
| 71 |
+
# Cloned from https://github.com/JudeJiwoo/Omni-Embed-Audio
|
| 72 |
+
from AudioRetrieval.models.omni_embed_adapter import OmniEmbedAdapter
|
| 73 |
+
from AudioRetrieval.training.oea.train_omniembed_lora import ProjectionHead, attach_lora
|
| 74 |
+
|
| 75 |
+
device = "cuda" if torch.cuda.is_available() else "cpu"
|
| 76 |
+
|
| 77 |
+
ckpt_path = hf_hub_download("JudeJiwoo/OEA-Qwen3B-Cl", filename="step_40.pt")
|
| 78 |
+
|
| 79 |
+
adapter = OmniEmbedAdapter(
|
| 80 |
+
repo_id="Qwen/Qwen2.5-Omni-3B",
|
| 81 |
+
device=device,
|
| 82 |
+
passage_prefix="passage:",
|
| 83 |
+
query_prefix="query:",
|
| 84 |
+
)
|
| 85 |
+
|
| 86 |
+
lora_cfg = SimpleNamespace(
|
| 87 |
+
lora_rank=16, lora_alpha=32, lora_dropout=0.05,
|
| 88 |
+
lora_targets=["q_proj","k_proj","v_proj","o_proj","qkv","out_proj"],
|
| 89 |
+
)
|
| 90 |
+
peft_model = attach_lora(adapter.get_underlying_model(), lora_cfg)
|
| 91 |
+
adapter.set_underlying_model(peft_model)
|
| 92 |
+
|
| 93 |
+
ckpt = torch.load(ckpt_path, map_location=device)
|
| 94 |
+
peft_model.load_state_dict(ckpt["lora_state_dict"], strict=False)
|
| 95 |
+
|
| 96 |
+
hidden = peft_model.config.text_config.hidden_size
|
| 97 |
+
audio_head = ProjectionHead(hidden, 512, 0.1).to(device).eval()
|
| 98 |
+
text_head = ProjectionHead(hidden, 512, 0.1).to(device).eval()
|
| 99 |
+
audio_head.load_state_dict(ckpt["audio_head"])
|
| 100 |
+
text_head.load_state_dict(ckpt["text_head"])
|
| 101 |
+
|
| 102 |
+
with torch.inference_mode():
|
| 103 |
+
a = adapter.encode_audio(["sample.wav"])
|
| 104 |
+
t = adapter.encode_text(["A clock ticks once a second as it runs."])
|
| 105 |
+
a_emb = audio_head(torch.from_numpy(a).to(device)).cpu().numpy()
|
| 106 |
+
t_emb = text_head(torch.from_numpy(t).to(device)).cpu().numpy()
|
| 107 |
+
print(a_emb.shape, t_emb.shape) # (1, 512) (1, 512)
|
| 108 |
+
print((t_emb @ a_emb.T).item()) # cosine similarity (already L2-normalized)
|
| 109 |
+
```
|
| 110 |
+
|
| 111 |
+
A ready-to-run version is at
|
| 112 |
+
[`examples/encode_example.py`](https://github.com/JudeJiwoo/Omni-Embed-Audio/blob/main/examples/encode_example.py)
|
| 113 |
+
(or the matching `.ipynb`) in the public repo β it encodes five bundled Clotho
|
| 114 |
+
clips and one query per UIQ type out of the box.
|
| 115 |
+
|
| 116 |
+
## Related checkpoints
|
| 117 |
+
|
| 118 |
+
| Repo | Base model | Trained on |
|
| 119 |
+
|------|-----------|-----------|
|
| 120 |
+
| [JudeJiwoo/OEA-Qwen3B-Cl](https://huggingface.co/JudeJiwoo/OEA-Qwen3B-Cl) | Qwen2.5-Omni-3B | Clotho |
|
| 121 |
+
| [JudeJiwoo/OEA-Qwen3B-AC](https://huggingface.co/JudeJiwoo/OEA-Qwen3B-AC) | Qwen2.5-Omni-3B | AudioCaps |
|
| 122 |
+
| [JudeJiwoo/OEA-Qwen7B-Cl](https://huggingface.co/JudeJiwoo/OEA-Qwen7B-Cl) | Qwen2.5-Omni-7B | Clotho |
|
| 123 |
+
| [JudeJiwoo/OEA-Qwen7B-AC](https://huggingface.co/JudeJiwoo/OEA-Qwen7B-AC) | Qwen2.5-Omni-7B | AudioCaps |
|
| 124 |
+
| [JudeJiwoo/OEA-Nemo3B-Cl](https://huggingface.co/JudeJiwoo/OEA-Nemo3B-Cl) | Omni-Embed-Nemotron-3B | Clotho |
|
| 125 |
+
| [JudeJiwoo/OEA-Nemo3B-AC](https://huggingface.co/JudeJiwoo/OEA-Nemo3B-AC) | Omni-Embed-Nemotron-3B | AudioCaps |
|
| 126 |
+
|
| 127 |
+
`-Cl` checkpoints are recommended for evaluation on **Clotho**, and `-AC`
|
| 128 |
+
checkpoints for **AudioCaps** (Section 4 of the paper).
|
| 129 |
+
|
| 130 |
+
## Intended use & limitations
|
| 131 |
+
|
| 132 |
+
**Intended use.** Open-vocabulary text-to-audio / audio-to-text / text-to-text
|
| 133 |
+
retrieval; UIQ-style robustness studies (questions, imperatives, paraphrases,
|
| 134 |
+
keyword tags, exclusion queries). Both encoders share a single multimodal-LLM
|
| 135 |
+
backbone, so OEA is also useful for embedding-space analyses across modalities.
|
| 136 |
+
|
| 137 |
+
**Out of scope.** Generative captioning, ASR, music transcription, speaker
|
| 138 |
+
identification, or any safety-critical downstream task. The model was trained
|
| 139 |
+
on environmental-sound captioning data; it is **not** evaluated on speech-,
|
| 140 |
+
music-, or biomedical-audio retrieval.
|
| 141 |
+
|
| 142 |
+
**Limitations.** Inherits biases of the Qwen2.5-Omni-3B backbone and of the
|
| 143 |
+
Clotho caption distribution. Performance on languages other than English
|
| 144 |
+
and on out-of-distribution audio (long-form speech, music, multilingual
|
| 145 |
+
content) is not measured.
|
| 146 |
+
|
| 147 |
+
## License
|
| 148 |
+
|
| 149 |
+
This LoRA + projection-head checkpoint is released under the **MIT License**.
|
| 150 |
+
The underlying base model (`Qwen/Qwen2.5-Omni-3B`) is governed by **its own license** β
|
| 151 |
+
review the upstream model card before redistribution.
|
| 152 |
+
|
| 153 |
+
## Citation
|
| 154 |
+
|
| 155 |
+
```bibtex
|
| 156 |
+
@inproceedings{yoo2026omniembedaudio,
|
| 157 |
+
title = {Omni-Embed-Audio: Leveraging Multimodal LLMs for Robust Audio-Text Retrieval},
|
| 158 |
+
author = {Yoo, HaeJun and Shin, Yongseop and Lee, Insung and Koo, Myoung-Wan and Chang, Du-Seong},
|
| 159 |
+
booktitle = {Proceedings of the 64th Annual Meeting of the Association for Computational Linguistics (ACL)},
|
| 160 |
+
note = {Oral presentation},
|
| 161 |
+
year = {2026}
|
| 162 |
+
}
|
| 163 |
+
```
|
| 164 |
+
|
| 165 |
+
## Acknowledgments
|
| 166 |
+
|
| 167 |
+
This work was partly supported by the Institute of Information & Communications
|
| 168 |
+
Technology Planning & Evaluation (IITP) grant funded by the Korea government
|
| 169 |
+
(MSIT) (No. RS-2025-25441313, Professional AI Talent Development Program for
|
| 170 |
+
Multimodal AI Agents, Contribution: 50%). This research was also supported by
|
| 171 |
+
the MSIT, Korea, under the Top-Tier AI Global HRD invitation program
|
| 172 |
+
(RS-2025-25461932) supervised by the IITP.
|