Inicio/ Blog/ Cómo entrenar modelos de IA para cobranza en español neutro

Cómo entrenar modelos de IA para cobranza en español neutro

1 may 2026 – 11 min de lectura

por Ed Escobar Co-Founder & CEO

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.

Fundamentos: Componentes del Modelo de IA para Cobranza

Ilustración de la interfaz de Kleva: ficha de un caso con la fecha de pago, el monto y las cuotas, marcada como acuerdo de pago registrado y con un recordatorio programado.

Un voice agent de cobranza requiere 5 modelos de IA trabajando coordinadamente:

1. Speech-to-Text (STT) - Transcripción

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

2. Natural Language Understanding (NLU) - Comprensión

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

3. Dialogue Management - Gestión de Conversación

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

4. Sentiment Analysis - Análisis de Emoción

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)

5. Text-to-Speech (TTS) - Síntesis de Voz

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

Dataset de Entrenamiento: La Base de Todo

Qué Datos Necesitas

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ónMéxicoArgentinaColombia
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)

Aumento de Datos (Data Augmentation)

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"

Fine-Tuning: Proceso Paso a Paso

Ilustración de la interfaz de Kleva: panel de cartera de una campaña con barras de clientes contactados y pendientes por tramo de mora, sin cifras.

Paso 1: Entrenar STT (Speech-to-Text)

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.

Paso 2: Entrenar NLU (Intent + Entities)

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()

Paso 3: Entrenar Sentiment Analysis

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)

Paso 4: Configurar Dialogue Management

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

Español Neutro: Estrategias de Balance

Qué Incluir en Español Neutro

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"

Qué Adaptar por País (Dialectos)

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

Evaluación y Métricas de Calidad

Ilustración de la interfaz de Kleva: tarjeta de la agente de voz Valeria en llamada, con el tiempo de la llamada y la transcripción en vivo de la conversación con el cliente.

Métricas Técnicas

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.

Testing Continuo

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.

Infraestructura de Entrenamiento

Requisitos de Cómputo

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)

MLOps: Ciclo de Mejora Continua

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

Alternativa: Usar Plataforma Pre-Entrenada vs Build Your Own

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

Conclusión: Complejidad Justificada, Pero Evitable

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?

Volver al índice ↑
FAQ

¿Tienes preguntas?

Seguir leyendo
Tu siguiente paso

Más tiempo para resolver. Menos llamadas pendientes.

Ve qué llamadas y seguimientos puedes delegar. Decide con tu equipo qué quieres mejorar y cómo medirlo.

Solicitar demo