Habla con una persona real
Sin bots, sin vueltas. Te mostramos Kleva en vivo.
Entrenar modelos de IA para cobranza en español presenta desafíos únicos: 21 países hispanohablantes con dialectos marcadamente diferentes, variaciones culturales en comunicación financiera, y necesidad de compliance regulatorio por región.
El concepto de "español neutro" busca un balance: suficientemente genérico para funcionar en múltiples países, pero lo suficientemente natural para no sonar robótico.

Un voice agent de cobranza requiere 5 modelos de IA trabajando coordinadamente:
Función: Convertir audio de deudor en texto.
Desafíos en español:
• Variación fonética: "s" final desaparece en Caribe ("¿cómo está?" → "¿cómo etá?")
• Velocidad de habla: Español dominicano 18% más rápido que español mexicano
• Ruido ambiental: Deudores en mercados, calles, transporte público
• Acentos regionales: "ll" en Argentina ("llamada" suena "shamada")
Modelos base disponibles:
• Whisper (OpenAI): Multilingüe, buen punto de partida, requiere fine-tuning
• Wav2Vec 2.0: Modelo de Facebook, código abierto, customizable
• Google Speech-to-Text: API comercial con soporte español, 20+ dialectos
Función: Entender intención y extraer entidades del texto.
Intenciones típicas en cobranza:
• intent_pagar_ahora: "Sí, voy a pagar", "Déjame hacerlo ahora"
• intent_pagar_despues: "La próxima semana", "Cuando cobre"
• intent_problema_flujo: "No he vendido", "Esta semana estuvo floja"
• intent_disputa: "Eso no es correcto", "Ya pagué eso"
• intent_solicitar_humano: "Quiero hablar con una persona", "Dame con un supervisor"
• intent_rechazar: "No puedo pagar", "No tengo dinero"
Entidades a extraer:
• fecha: "mañana", "el 15", "el viernes", "la próxima semana"
• monto: "200 pesos", "la mitad", "todo"
• motivo: "no he vendido", "me enfermé", "perdí el trabajo"
Modelos base:
• BERT multilingual: 104 idiomas, funciona para español
• BETO: BERT entrenado específicamente en español (UBA/UNAM)
• RoBERTa español: Modelo más robusto, mejores resultados
Función: Decidir qué decir siguiente según contexto.
Flujo típico:
1. Identificación: "Buenos días [Nombre], habla [Agente] de [Banco]..."
2. Motivo: "Te llamo porque tu cuota está vencida desde [Fecha]"
3. Pregunta abierta: "¿Qué pasó? ¿Pudiste hacer el pago?"
4. Escucha y clasifica intención
5. Respuesta contextual: Ofrece solución según intención detectada
6. Cierre: Confirma compromiso o escala a humano
Frameworks:
• Rasa: Código abierto, muy customizable
• Dialogflow (Google): Managed service, fácil de usar
• Desarrollos custom: State machines con GPT-4 o Claude
Función: Detectar frustración, enojo, confusión en tiempo real.
Por qué es crítico: Permite escalar a humano ANTES de que deudor se moleste y genere queja.
Emociones a detectar:
• Neutral/Positivo: Continuar con IA
• Confusión: Simplificar explicación, repetir opciones
• Frustración leve: Ofrecer hablar con humano
• Frustración alta/Enojo: Transferir inmediatamente a humano
Modelos:
• Pysentimiento: Modelo pre-entrenado en español de América Latina
• BERT sentiment: Fine-tuned en datasets de atención al cliente
• Análisis acústico: Tono de voz, velocidad, volumen (complementa texto)
Función: Convertir texto generado en audio natural.
Requisitos:
• Naturalidad: No sonar robótico (WaveNet, Tacotron 2)
• Prosodia: Entonación apropiada para preguntas vs afirmaciones
• Velocidad adaptable: Más lento para adultos mayores
• Voces por género: Masculina y femenina
Opciones comerciales:
• Google Cloud TTS: Voces WaveNet de alta calidad
• Amazon Polly: Neural voices, varios acentos español
• Microsoft Azure Speech: Voces neuronales personalizables
1. Transcripciones de llamadas reales (Gold Standard)
Volumen mínimo: 5,000-10,000 llamadas transcritas y etiquetadas
Qué etiquetar:
• Intención de cada turno de deudor
• Entidades mencionadas (fechas, montos)
• Sentimiento (neutral, positivo, frustrado, enojado)
• Resultado final (PTP, pago, rechazo, escalamiento)
Ejemplo de transcripción etiquetada:
{
"speaker": "customer",
"text": "Mira, es que esta semana no he vendido nada, ¿me puedes dar hasta el viernes?",
"intent": "intent_pagar_despues",
"entities": {
"fecha": "viernes",
"motivo": "no he vendido"
},
"sentiment": "neutral",
"next_action": "ofrecer_plan_pago"
}
Costo de etiquetado: $0.50-$2.00 por llamada (servicios como Scale AI, Labelbox)
2. Corpus de español neutro LATAM
Necesitas textos representativos de cómo hablan tus deudores:
• Redes sociales: Twitter/X de países objetivo (lenguaje informal)
• Transcripciones de servicio al cliente: Bancos, telecom
• Corpus académicos: CORPES XXI (Real Academia Española)
3. Variaciones dialectales por país
Necesitas ejemplos de cómo la MISMA intención se expresa diferente:
| Intención | México | Argentina | Colombia |
|---|---|---|---|
| Pagar después | "Ahorita no puedo" | "Ahora no me da" | "De una no puedo" |
| Pagar ahora | "Sale, lo hago" | "Dale, lo hago" | "Listo, lo hago" |
| Problema flujo | "Ando corto de lana" | "Estoy re corto de guita" | "Ando mal de plata" |
Recolección: Crowdsourcing en cada país objetivo (plataformas como Amazon MTurk, Toloka)
Si tienes un dataset pequeño, puedes ampliarlo con estas técnicas:
Back-translation:
1. Traduce español → inglés (Google Translate)
2. Traduce inglés → español
Parafraseo con LLM:
Prompt a GPT-4: "Genera 10 formas diferentes de decir 'no puedo pagar ahora' en español mexicano informal"
Output:
• "Ahorita no se puede"
• "En este momento no traigo"
• "Ando corto, no puedo"
• "No me alcanza ahorita"
• ...
Sinónimos y variaciones:
• "dinero" → "plata", "lana", "guita", "billete"
• "pagar" → "abonar", "cancelar", "saldar"
• "hoy" → "ahorita", "ya", "en este momento"

Modelo base: Whisper Large v3 (mejor para español según benchmarks)
Fine-tuning con Common Voice:
1. Descarga dataset Common Voice español (Mozilla, gratuito)
2. Filtra por países LATAM (México, Colombia, Argentina, etc.)
3. Añade tus grabaciones de cobranza (5,000+ horas idealmente)
4. Fine-tune con Hugging Face Transformers:
from transformers import WhisperForConditionalGeneration, Seq2SeqTrainer
model = WhisperForConditionalGeneration.from_pretrained("openai/whisper-large-v3")
# Configuración de entrenamiento
training_args = Seq2SeqTrainingArguments(
output_dir="./whisper-cobranza-latam",
per_device_train_batch_size=16,
learning_rate=1e-5,
num_train_epochs=3,
fp16=True, # Mixed precision para velocidad
)
trainer = Seq2SeqTrainer(
model=model,
args=training_args,
train_dataset=train_dataset,
eval_dataset=eval_dataset,
)
trainer.train()
Evaluación: Medir WER (Word Error Rate) por dialecto.
Modelo base: BETO (BERT español) o RoBERTa-base-spanish
Arquitectura:
• Intent classification: Capa clasificadora multi-clase (15-20 intents)
• Entity extraction: NER (Named Entity Recognition) con BIO tagging
Código ejemplo (Hugging Face):
from transformers import AutoModelForSequenceClassification, Trainer
# Cargar BETO
model = AutoModelForSequenceClassification.from_pretrained(
"dccuchile/bert-base-spanish-wwm-cased",
num_labels=18 # Número de intents
)
# Dataset etiquetado
train_texts = [
"No puedo pagar ahorita",
"Dame hasta el viernes",
"Ya pagué eso",
...
]
train_labels = [7, 3, 12, ...] # IDs de intents
# Fine-tuning
trainer = Trainer(
model=model,
train_dataset=encoded_dataset,
eval_dataset=eval_dataset,
)
trainer.train()
Dataset recomendado: Combinar:
• TASS (Twitter): 68,000 tweets en español etiquetados por sentimiento
• Tu dataset de llamadas: Etiqueta frustración/neutral/positivo
• Datasets de reviews: Amazon, TripAdvisor en español
Fine-tune Pysentimiento:
from pysentimiento import create_analyzer
from pysentimiento.preprocessing import preprocess_tweet
# Pysentimiento viene pre-entrenado, pero puedes fine-tunear
analyzer = create_analyzer(task="sentiment", lang="es")
# Para cobranza, añade categoría "frustrado"
# (Requiere re-entrenar con tus datos etiquetados)
Opción 1: Rule-based con GPT-4 (Híbrido recomendado)
Usa reglas para flujo principal + GPT-4 para respuestas naturales:
# Pseudo-código
def handle_intent_pagar_despues(entities, context):
fecha = entities.get('fecha')
if fecha:
# GPT-4 genera respuesta natural
prompt = f"""Eres un agente de cobranza empático.
El cliente dijo que pagará el {fecha}.
Confirma la fecha y pregunta el monto de forma amable.
Usa español neutro latinoamericano."""
response = gpt4_call(prompt)
return response
else:
# Pide fecha específica
return "¿Qué día específicamente podrías pagar?"
Ventaja: Flexibilidad de GPT-4 + control de flujo con reglas
Opción 2: Rasa (Full control)
# domain.yml
intents:
- intent_pagar_despues
- intent_pagar_ahora
- intent_disputa
responses:
utter_confirmar_fecha:
- text: "Perfecto, entonces confirmamos pago el {fecha}. ¿Es correcto?"
utter_pedir_fecha:
- text: "¿Qué día podrías hacer el pago?"
# stories.yml
stories:
- story: cliente promete pagar
steps:
- intent: intent_pagar_despues
entities:
- fecha: "viernes"
- action: utter_confirmar_fecha
- intent: affirm
- action: action_registrar_ptp
Vocabulario universal:
• Usar: dinero, pagar, cuota, banco, préstamo
• Evitar: Regionalismos extremos ("guita", "lana", "vaina")
Conjugación estándar:
• Usar: Tú ("¿puedes pagar?") o Usted según formalidad del país
• Evitar: Voseo argentino ("¿podés pagar?") en modelo neutro
Expresiones transversales:
• Usar: "¿Cómo estás?", "Entiendo tu situación", "¿Qué día te viene mejor?"
• Evitar: "¿Qué onda?", "¿Qué hubo?", "Dime a ver"
El modelo neutro es la base, pero añade capa de adaptación:
Detección automática de país:
def get_dialect(phone_number):
country_code = phone_number[:3]
dialect_map = {
"+52": "mx", # México
"+54": "ar", # Argentina
"+57": "co", # Colombia
"+56": "cl", # Chile
...
}
return dialect_map.get(country_code, "neutral")
def adapt_response(response, dialect):
adaptations = {
"mx": {"dinero": "lana", "¿puedes?": "¿puedes?"},
"ar": {"dinero": "guita", "¿puedes?": "¿podés?"},
"co": {"dinero": "plata", "ok": "listo"},
}
for original, local in adaptations.get(dialect, {}).items():
response = response.replace(original, local)
return response

STT (Speech-to-Text):
• WER (Word Error Rate): métrica principal de calidad de transcripción
• Evaluación por dialecto: Medir WER separadamente para mexicano, argentino, colombiano, etc.
A/B Testing:
• Versión A: Script actual
• Versión B: Script optimizado
• Medir recovery rate, NPS, quejas en muestras de 1,000 casos c/u
Análisis de conversaciones fallidas:
Cada semana, revisar 50 conversaciones donde:
• Cliente colgó abruptamente
• Escaló a humano frustrado
• No se entendió la intención
• Se generó queja
Identificar patterns y re-entrenar modelo.
Fine-tuning de modelos grandes:
• GPU: NVIDIA A100 (40GB VRAM) o V100 (32GB)
• Alternativa cloud: Google Colab Pro ($10/mes), AWS SageMaker, Google Vertex AI
• Tiempo: Fine-tuning de BERT toma 2-8 horas según dataset
Para producción:
• Inferencia: GPU no necesaria si usas CPU optimizado (ONNX Runtime)
Pipeline automatizado:
1. Recolección: Nuevas llamadas se transcriben automáticamente
2. Etiquetado: Humanos etiquetan muestra (10% de nuevas llamadas)
3. Re-entrenamiento: Mensual con datos nuevos
4. Evaluación: Validar que métricas mejoren (no empeoren)
5. Deploy: Gradual (10% → 50% → 100%) monitoreando performance
Herramientas:
• Experiment tracking: MLflow, Weights & Biases
• Model registry: Hugging Face Hub (privado), AWS SageMaker Model Registry
• Monitoring: Grafana + Prometheus para latencia y accuracy en producción
DimensiónBuild Your OwnUsar Kleva (Pre-Entrenado)
Expertise requeridoML engineers, lingüistas, DevOpsSolo configuración de casos de uso
Recomendación:
• Build your own si: Tienes equipo ML in-house, casos de uso MUY específicos no cubiertos por soluciones comerciales, presupuesto $500k+
• Usa plataforma si: Quieres resultados rápidos, enfoque en negocio no en ML, presupuesto limitado
Entrenar modelos de IA para cobranza en español neutro es técnicamente complejo: requiere datasets masivos, expertise en NLP, infraestructura GPU, y ciclo continuo de mejora.
Sin embargo, para la mayoría de instituciones financieras, no necesitas construir desde cero.
La pregunta no es si puedes entrenar tu propio modelo. Es: ¿tiene sentido reinventar la rueda cuando soluciones probadas ya existen?
Habla con una persona real
Sin bots, sin vueltas. Te mostramos Kleva en vivo.