Downloads · 30 days
14
2% of all-time downloads
gijs/voiceclap-lco-7b-lora
voiceclap-lco-7b-lora is a feature extraction model from gijs. Use it when you need embeddings to search or compare text. It is set up for sentence-transformers. The card lists the license as apache-2.0.
A rank-16 LoRA finetune of LCO-Embedding-Omni-7B (Qwen2.5-Omni thinker) trained contrastively on the voiceclap10safe mix (got-talent, emolia, majestrino, vocal bursts, ears, expresso, vox1, vox2 — 9 datasets, ~2,909 W…
Downloads · 30 days
14
2% of all-time downloads
All-time downloads
716
Public
Parameters
8.9B
17.9 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors17.9 GB · 100%
From the Hugging Face model README
A rank-16 LoRA finetune of LCO-Embedding-Omni-7B (Qwen2.5-Omni thinker)
trained contrastively on the voiceclap_10_safe mix (got-talent, emolia,
majestrino, vocal bursts, ears, expresso, vox1, vox2 — 9 datasets, ~2,909
WebDataset shards) for voice-emotion audio↔text retrieval.
This is the best-performing single model on emolia per-emo balanced
accuracy (0.7044) from the Track I LoRA fine-tune sweep — matches a
6-way ensemble baseline at single-model cost. The LoRA delta was
re-merged into the base safetensors via the salvage_lora_snapshot.py
tool (manual ΔW = (α/r) · B @ A merge) to work around a save-path bug
in the original fine-tune script.
Single-tower: audio + text are both fed through the same Qwen2.5-Omni
thinker; modality is determined by the chat-template placeholder
(<|audio_bos|><|AUDIO|><|audio_eos|>). The last-non-pad-token
hidden state at the final layer is the embedding (3,584-d, L2-normalized).
| Base model | LCO-Embedding/LCO-Embedding-Omni-7B |
| Embedding dim | 3,584 (L2-normalized) |
| Audio input | 16 kHz mono FLAC, max 15s at train (20s eval) |
| Total parameters | ~7 B |
| Loss | symmetric InfoNCE on (audio, text) batches with gather-with-grad |
| Split | voiceclap_10_safe.txt (~2,909 shards · ~14 M unique samples) |
| Samples seen | 76,000 × 6 epochs = ~456k (≈ 3% of one full pass) |
| LoRA | r = 16, α = 32, dropout = 0.05, target = all-linear |
| lr / wd | 1e-4 / 0.01 (cosine, warmup = 200 steps) |
| Batch | 2 × accum 16 × 4 GH200 GPUs = effective 128 |
| Precision | bf16 |
| Best epoch | 1 (selected on emolia per-emo bal_acc) |
Reported numbers are for epoch 1 (the saved checkpoint) on the two voice-emotion benchmarks the project is built around.
| Metric | Value |
|---|---|
| Balanced accuracy (per-emotion threshold) | 0.7044 |
| Balanced accuracy (optimal global threshold) | 0.6731 |
| Spearman ρ (within-emotion vote correlation) | 0.1964 |
| Metric | Value |
|---|---|
| top-1 accuracy | 0.1553 |
| top-3 accuracy | 0.3225 |
| Spearman ρ | 0.3506 |
voiceclap-lco-7b-lora improves on the released
laion/voiceclap-large on
emolia per-emo bal_acc (+0.007) and emonet top-1 (+0.009) for the same
model class, at the cost of weaker emonet Spearman (-0.034). It is a
member of the E9 ensemble that reaches emolia per-emo 0.7157.
import torch
from sentence_transformers import SentenceTransformer
model = SentenceTransformer(
"gijs/voiceclap-lco-7b-lora",
trust_remote_code=True,
model_kwargs={"torch_dtype": torch.bfloat16},
)
# audio
audio_emb = model.encode("voice_clip.flac")
# text
text_emb = model.encode("A person speaking with anger in their voice")
# cosine similarity
score = (audio_emb @ text_emb.T).item()
LCO-Embedding/LCO-Embedding-Omni-7B, drop the unused talker
submodule via disable_talker().peft LoRA (r=16, α=32, all-linear).voiceclap_10_safe WebDataset shards with
finetune_omni_embed.py (open_clap_scaling repo).ΔW = (α/r) · B @ A to the base
safetensors via salvage_lora_snapshot.py so the merged model loads
cleanly through sentence_transformers.Apache-2.0 (inherits from the base model). See
laion/voiceclap-large
for the LAION-trained sibling model on a newer 9-corpus mix with
MOSS-Audio captions.