Audio8-ASR-0.1B Spanish (Rioplatense) SFT

Fine-tune de Audio8/Audio8-ASR-0.1B especializado en español rioplatense / latinoamericano mediante SFT (supervised fine-tuning) completo.

El modelo base no incluía español entre sus 7 idiomas de entrenamiento (en, zh, fr, ja, yue, de, ko), por lo que su WER zero-shot en español rioplatense era ~65%. Tras el fine-tune baja a 12.39% WER / 5.25% CER.

Resultados (eval: 573 clips Argentinian Spanish, held-out)

Modelo WER CER
Audio8/Audio8-ASR-0.1B (baseline, zero-shot) 64.76% 28.28%
Este modelo (es_google_v3) 12.39% 5.25%

Arquitectura

Idéntica al modelo base (324M parámetros end-to-end):

  • Audio encoder: Qwen3-ASR audio encoder (18 capas Conformer-like, 128 mel bins)
  • MLP tower: 4 capas MLP residual (GELU)
  • Projector: LayerNorm + Linear 1024→512
  • LM: Qwen2-style causal LM, 8 capas, hidden 512, vocab 151936, tied embeddings

Se carga con trust_remote_code=True (custom code incluido en el repo).

Datos de entrenamiento

13.5k clips (15h) de habla leída en español latinoamericano, combinando:

  • ylacombe/google-argentinian-spanish (female + male)
  • ylacombe/google-chilean-spanish (female + male)
  • ylacombe/google-colombian-spanish (female + male)

Split 90/10 train/eval por dataset; el eval reportado es el held-out argentino.

Receta de entrenamiento

Full fine-tune (todos los módulos descongelados, incluido el audio encoder), en 3 etapas con learning rate decreciente:

  1. 8 epochs, lr 3e-5, audio encoder congelado
  2. +6 epochs, lr 1e-5, audio encoder descongelado
  3. +8 epochs, lr 5e-6 (esta versión)

bf16, batch efectivo 32, cosine schedule, warmup 2-3%, weight decay 0.005, grad clip 1.0, AdamW. Audio cap 30s @ 16kHz. transformers 4.57.3.

Uso

import torch
from transformers import AutoModelForCausalLM, AutoProcessor

model_path = "surus-lat/audio8-asr-0.1b-es-rioplatense"
audio_path = "audio.wav"

device = "cuda" if torch.cuda.is_available() else "cpu"
torch_dtype = torch.bfloat16 if device == "cuda" else torch.float32

processor = AutoProcessor.from_pretrained(model_path, trust_remote_code=True)
model = AutoModelForCausalLM.from_pretrained(
    model_path, trust_remote_code=True,
    torch_dtype=torch_dtype, attn_implementation="eager",
).to(device)
model.eval()

conversation = [{
    "role": "user",
    "content": [
        {"type": "audio", "path": audio_path},
        {"type": "text", "text": "Please transcribe this audio."},
    ],
}]
batch = processor.apply_chat_template(
    conversation, return_tensors="pt", sampling_rate=16000,
    audio_padding="longest", add_generation_prompt=True,
    audio_max_length=30 * 16000,
    text_kwargs={"padding": "longest", "truncation": True, "max_length": 1000},
)
batch = {k: (v.to(device) if hasattr(v, "to") else v) for k, v in dict(batch).items()}

with torch.inference_mode():
    ids = model.generate(**batch, max_new_tokens=128, do_sample=False)
prompt_len = int(batch["input_ids"].shape[1])
print(processor.decode(ids[0, prompt_len:], skip_special_tokens=True).strip())

Importante: usar transformers==4.57.3. En transformers 5.x el lm_head ligado (tied) no se carga correctamente y el modelo degrada a salida aleatoria.

Limitaciones

  • Optimizado para español rioplatense/latam de habla leída; puede rendir peor en otros dominios (conversacional espontáneo, ruido, otros acentos).
  • Audio cap 30 segundos.
  • Los errores residuales son mayormente ortografía fina (tildes, género/número) — limitación del LM de 0.1B.
  • Licencia CC-BY-NC-4.0 (no comercial), heredada del modelo base.

Citation

Modelo base: Audio8-ASR-0.1BData-Efficient On-Policy Distillation for Automatic Speech Recognition (arXiv 2605.28139, AutoArk-AI).

Downloads last month
16
Safetensors
Model size
0.3B params
Tensor type
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Model tree for surus-ai/audio8-asr-0.1b-es-rioplatense

Finetuned
(1)
this model