JudeJiwoo commited on
Commit
54ccd00
Β·
verified Β·
1 Parent(s): 8770fcb

Add model card for ACL 2026 (Oral) release

Browse files
Files changed (1) hide show
  1. README.md +172 -0
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.