Voice-text contrastive embedding model — the larger of the two anchors released with VoiceNet.
VoiceCLAP-Large is a single-tower model: a rank-16 LoRA finetune of LCO-Embedding-Omni-7B (Qwen2.5-Omni-Thinker-7B backbone with a sentence-transformer last-token-pooling head) trained with the symmetric InfoNCE loss. The audio and text embeddings are produced by the same backbone — the modality is determined by what is fed in via the multimodal chat template.
Architecture
single-tower Omni-Embedding (Qwen2.5-Omni-Thinker-7B + ST last-token-pool)
Adaptation
rank-16 LoRA (alpha 32, dropout 0.05), merged into the released weights
The model uses the SentenceTransformer multimodal API — both sentence-transformers and transformers are on PyPI; only librosa (or torchaudio) is needed in addition, for resampling input audio to 16 kHz.
If you already have a 16 kHz mono numpy array, librosa is not needed:
import soundfile as sf
arr, sr = sf.read("clip_16k.wav")
assert sr == 16000, "audio must be 16 kHz mono — resample first if not"
audio_emb = model.encode([{"array": arr, "sampling_rate": 16000}])
import os
os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com"
from transformers import AutoModel, AutoTokenizer
tok = AutoTokenizer.from_pretrained("laion/voiceclap-large", revision="6254dbba9d172288a0d0de1bf453196dedb66483")
model = AutoModel.from_pretrained("laion/voiceclap-large", revision="6254dbba9d172288a0d0de1bf453196dedb66483", device_map="auto")
sentence-transformersEmbed text with sentence-transformers.
import os
os.environ["HF_ENDPOINT"] = "https://freeweights.allternit.com"
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("laion/voiceclap-large", revision="6254dbba9d172288a0d0de1bf453196dedb66483")
vectors = model.encode(["Hello"])