Back to blog
    Construyendo un dataset de entrenamiento desde las interacciones de tu app
    training datadatasetfine-tuningdata collectionmobile AIsegment:mobile-builder

    Construyendo un dataset de entrenamiento desde las interacciones de tu app

    Tu app ya genera los datos de entrenamiento que necesitas para fine-tuning. Como recolectar, limpiar y formatear interacciones de usuarios en un dataset que produce un modelo en el dispositivo de alta calidad.

    EErtas Team·

    Los mejores datos de entrenamiento para tu modelo de IA vienen de tu propia app. Las interacciones reales de tus usuarios, preguntas reales y contenido real representan exactamente el dominio que tu modelo necesita aprender. Ningun dato sintetico o dataset publico igualara la calidad de datos de tu caso de uso real.

    Esta guia cubre como recolectar, limpiar y formatear esos datos para fine-tuning.

    Que cuenta como datos de entrenamiento

    Cada interaccion del usuario en tu app es un ejemplo de entrenamiento potencial:

    Tipo de appDatos crudosEjemplo de entrenamiento
    Soporte al clientePregunta del usuario + respuesta del agentePar de Q&A
    NotasNotas del usuario + resumenes auto-generadosPar de resumen
    FinanzasDescripcion de transaccion + categoria asignadaPar de clasificacion
    CorreoCorreo entrante + respuesta del usuarioPar de generacion de respuesta
    E-commerceProducto + resena del usuarioPar de sentimiento
    SaludDescripcion de sintomas + resultado de triajePar de clasificacion

    El patron: cualquier par entrada-salida donde la salida "correcta" es conocida (ya sea por accion explicita del usuario o juicio de expertos) es un ejemplo de entrenamiento.

    Estrategia de recoleccion de datos

    Recoleccion pasiva (Inicio recomendado)

    Registra interacciones de usuario que naturalmente producen pares entrada-salida:

    • Consultas de busqueda + resultados clickeados: El resultado clickeado es la respuesta "correcta"
    • Acciones de categorizacion: Cuando un usuario asigna una categoria a contenido, eso es un ejemplo etiquetado
    • Correcciones: Cuando un usuario edita una respuesta generada por IA, la version editada es la salida "correcta"
    • Completaciones: Cuando un usuario acepta una sugerencia, eso es un ejemplo positivo
    // Registrar correcciones del usuario para datos de entrenamiento
    function onAiResponseEdited(original: string, edited: string, context: string) {
      logTrainingExample({
        input: context,
        output: edited,  // La correccion del usuario es el objetivo de entrenamiento
        source: "user_correction",
        timestamp: Date.now(),
      });
    }
    

    Recoleccion activa

    Pide a los usuarios retroalimentacion que directamente produce datos de entrenamiento:

    • Pulgar arriba/abajo en respuestas de IA: Filtra las respuestas con pulgar arriba como ejemplos positivos
    • Interfaz de correccion: Deja que los usuarios corrijan respuestas de IA; registra las correcciones
    • Uso de plantillas: Cuando los usuarios seleccionan y usan una plantilla, la plantilla completada es un ejemplo de entrenamiento

    Aumentacion sintetica

    Complementa datos reales con ejemplos sinteticos:

    1. Toma tus mejores ejemplos reales
    2. Usa un modelo mas grande (GPT-4o, Claude Sonnet) para generar variaciones
    3. Valida ejemplos sinteticos contra los reales
    4. Mezcla datos sinteticos y reales (apunta a al menos 30% datos reales)

    Privacidad y consentimiento

    Requisitos legales

    Antes de recolectar cualquier dato de usuario para entrenamiento:

    1. Actualiza tu politica de privacidad para divulgar que datos de interaccion anonimizados pueden usarse para mejorar funciones de IA
    2. Obtener consentimiento donde sea requerido (GDPR requiere consentimiento explicito para procesar datos personales)
    3. Proporciona opcion de exclusion para usuarios que no quieran que sus interacciones se usen para entrenamiento
    4. Anonimiza datos antes de usarlos para entrenamiento. Remueve nombres, correos, numeros de telefono y otra informacion personal.

    Anonimizacion tecnica

    import re
    
    def anonymize(text: str) -> str:
        # Remover direcciones de correo
        text = re.sub(r'\b[\w.-]+@[\w.-]+\.\w+\b', '[EMAIL]', text)
        # Remover numeros de telefono
        text = re.sub(r'\b\d{3}[-.]?\d{3}[-.]?\d{4}\b', '[PHONE]', text)
        # Remover nombres (requiere NER o una lista de nombres)
        text = replace_names(text, '[NAME]')
        return text
    

    Recoleccion en el dispositivo

    El enfoque mas seguro: recolecta datos de entrenamiento en el dispositivo y solo transmite datos anonimizados y agregados. La interaccion cruda se queda en el telefono del usuario. Solo el ejemplo de entrenamiento anonimizado sale del dispositivo.

    Limpieza de datos

    Los datos de interaccion crudos son ruidosos. La limpieza es el paso mas importante del pipeline.

    Filtros de calidad

    1. Elimina ejemplos demasiado cortos: Entradas menores de 10 caracteres o salidas menores de 20 caracteres raramente contienen senal util
    2. Elimina duplicados: Ejemplos exactos y casi-duplicados agregan ruido
    3. Elimina errores: Interacciones donde la app se crasheo o el usuario abandono a mitad de flujo
    4. Elimina fuera de tema: Interacciones que no coinciden con tu tarea objetivo
    5. Elimina PII que paso la anonimizacion: Segunda pasada con patrones mas estrictos

    Puntuacion de calidad

    No todos los ejemplos son igualmente utiles. Puntua cada ejemplo:

    SenalPesoRazon
    Usuario acepto la respuesta de IAAltoSenal positiva directa
    Usuario edito y luego aceptoMas altoLa edicion es la salida ideal
    Usuario rechazo la respuesta de IABajo (usar con moderacion)Senal negativa, util para contraste
    Interaccion larga y detalladaMedioMas contexto para el modelo
    Patron de consulta comunMedioLos patrones de alta frecuencia importan mas

    Distribucion objetivo

    Tu conjunto de entrenamiento debe aproximadamente coincidir con tu distribucion de consultas en produccion. Si el 40% de las consultas de usuario son sobre el tema A y el 10% sobre el tema B, tu conjunto de entrenamiento debe reflejar esa proporcion. Sobre-representar temas raros puede sesgar el modelo.

    Formateo para fine-tuning

    Formato de chat (Estandar)

    La mayoria de frameworks de fine-tuning esperan el formato de chat:

    {"messages": [
      {"role": "system", "content": "You are an assistant for FitTracker app."},
      {"role": "user", "content": "How many calories in a banana?"},
      {"role": "assistant", "content": "A medium banana has about 105 calories, 27g carbs, 1.3g protein, and 0.4g fat."}
    ]}
    

    Conversaciones multi-turno

    Para funciones de chat, incluye la conversacion completa:

    {"messages": [
      {"role": "system", "content": "You are an assistant for FitTracker app."},
      {"role": "user", "content": "What should I eat before a workout?"},
      {"role": "assistant", "content": "A light meal 1-2 hours before works best. Good options: banana with peanut butter, oatmeal, or a small smoothie. Focus on easily digestible carbs."},
      {"role": "user", "content": "What about protein?"},
      {"role": "assistant", "content": "Add a small amount of protein: a scoop of whey in your smoothie, Greek yogurt with your oatmeal, or a handful of almonds. Keep it under 20g to avoid feeling heavy during the workout."}
    ]}
    

    Formato de clasificacion

    Para tareas de clasificacion, el formato es mas simple:

    {"messages": [
      {"role": "user", "content": "Classify: Morning run in the park"},
      {"role": "assistant", "content": "Cardio"}
    ]}
    

    Guia de tamano de dataset

    TareaMinimoBuenoExcelente
    Clasificacion (5-10 categorias)200500-1,0002,000+
    Q&A (dominio acotado)3001,000-2,0003,000+
    Chat (multi-turno)5002,000-3,0005,000+
    Resumen3001,000-2,0003,000+
    Generacion de contenido5001,500-3,0005,000+

    La calidad importa mas que la cantidad. 500 ejemplos cuidadosamente curados superan a 5,000 ruidosos.

    El pipeline

    1. Instrumenta tu app para registrar interacciones (con consentimiento del usuario)
    2. Acumula datos durante 2-4 semanas de uso normal
    3. Exporta y anonimiza las interacciones registradas
    4. Limpia y filtra usando los criterios de calidad anteriores
    5. Formatea en la estructura JSON de chat
    6. Divide en conjuntos de entrenamiento (90%) y evaluacion (10%)
    7. Fine-tunea usando una plataforma como Ertas: sube el dataset formateado, selecciona tu modelo base, entrena con LoRA, exporta GGUF
    8. Evalua en el conjunto reservado
    9. Despliega el modelo GGUF en el dispositivo
    10. Itera recolectando mas datos y re-entrenando periodicamente

    Tu app esta generando datos de entrenamiento ahora mismo. La pregunta es si los estas capturando.

    Ship AI that runs on your users' devices.

    Early bird pricing starts at $14.50/mo — locked in for life. Plans for builders and agencies.

    Keep reading