Back to blog
    Clasificacion de texto en el dispositivo para apps moviles
    text classificationon-device AImobile AINLPimplementationsegment:mobile-builder

    Clasificacion de texto en el dispositivo para apps moviles

    Como construir clasificacion de texto rapida y precisa que se ejecuta en el telefono del usuario. Analisis de sentimiento, categorizacion de contenido, deteccion de intencion y filtrado de spam sin llamadas a API.

    EErtas Team·

    La clasificacion de texto es la funcion de IA en el dispositivo mas practica. Es rapida (menos de 100ms), precisa (90%+ con fine-tuning), funciona en los modelos mas pequenos (1B) y se ejecuta en practicamente cualquier telefono moderno.

    Si tu app necesita categorizar contenido, detectar intencion, filtrar spam, analizar sentimiento o enrutar mensajes, la clasificacion en el dispositivo es el enfoque mas eficiente.

    Por que la clasificacion es ideal para el dispositivo

    La clasificacion tiene propiedades que la hacen perfecta para movil:

    Salida corta: El modelo genera una sola palabra o frase corta (la etiqueta de categoria). Esto toma milisegundos, no segundos.

    Modelo pequeno suficiente: Un modelo 1B fine-tuned maneja clasificacion con 90-94% de precision. No se necesitan modelos mas grandes y lentos.

    Alta frecuencia: La clasificacion frecuentemente se ejecuta en cada pieza de contenido (cada mensaje, cada nota, cada titulo de foto). A alta frecuencia, los costos de API en la nube se acumulan rapido. En el dispositivo, cada clasificacion es gratuita.

    Compatible con segundo plano: La clasificacion puede ejecutarse en segundo plano sin interaccion del usuario. Auto-categorizar gastos mientras se ingresan. Auto-etiquetar notas al guardar. Auto-detectar spam al recibir mensajes.

    Casos de uso de clasificacion

    Analisis de sentimiento

    Determina el tono emocional de la entrada del usuario. Util para:

    • Apps de retroalimentacion de clientes (positivo/negativo/neutral)
    • Monitoreo de redes sociales
    • Apps de diario/seguimiento de animo
    • Enrutamiento de prioridad de tickets de soporte

    Categorizacion de contenido

    Asigna categorias automaticamente al contenido del usuario:

    • Categorizacion de gastos (comida, transporte, entretenimiento, servicios)
    • Etiquetado de notas (trabajo, personal, ideas, referencia)
    • Clasificacion de correos (importante, boletin, social, transaccional)
    • Organizacion de albumes de fotos (viaje, comida, personas, naturaleza)

    Deteccion de intencion

    Entiende lo que el usuario quiere hacer:

    • Enrutamiento de asistente de voz (reproducir musica, poner temporizador, enviar mensaje, buscar)
    • Clasificacion de intencion de chatbot (hacer pregunta, presentar queja, solicitar reembolso)
    • Clasificacion de consultas de busqueda (navegacion, informacion, transaccion)

    Filtrado de contenido

    Detecta y filtra contenido no deseado:

    • Deteccion de spam en apps de mensajeria
    • Marcado de contenido inapropiado
    • Deteccion de mensajes fuera de tema en apps de comunidad

    Deteccion de idioma

    Identifica el idioma del texto de entrada para apps multilingues. Enruta al modelo o pipeline de traduccion apropiado.

    Implementacion

    El patron de prompt

    Para clasificacion basada en LLM, el prompt es simple:

    Classify the following text into one of these categories: [Food, Transport, Entertainment, Utilities, Shopping, Healthcare, Other]
    
    Text: "Uber ride to airport"
    Category:
    

    El modelo genera una sola palabra: "Transport"

    Fine-tuning para clasificacion

    Crea ejemplos de entrenamiento en formato de chat:

    {"messages": [
      {"role": "user", "content": "Classify: Uber ride to airport"},
      {"role": "assistant", "content": "Transport"}
    ]}
    
    {"messages": [
      {"role": "user", "content": "Classify: Netflix monthly subscription"},
      {"role": "assistant", "content": "Entertainment"}
    ]}
    
    {"messages": [
      {"role": "user", "content": "Classify: Grocery store visit"},
      {"role": "assistant", "content": "Food"}
    ]}
    

    Con 500-1,000 ejemplos en todas las categorias, un modelo 1B fine-tuned logra 90-94% de precision. Esto supera lo que GPT-4o con prompts logra en la misma tarea (tipicamente 78-85%).

    Salida estructurada

    Para parsing confiable, instruye al modelo a generar JSON:

    {"messages": [
      {"role": "user", "content": "Classify this expense: Uber ride to airport\nOutput JSON with 'category' and 'confidence' fields."},
      {"role": "assistant", "content": "{\"category\": \"Transport\", \"confidence\": \"high\"}"}
    ]}
    

    Los modelos fine-tuned aprenden a producir JSON consistente. Parsea la salida directamente en el codigo de tu app.

    Optimizacion de velocidad

    La clasificacion genera muy pocos tokens (1-10). Puedes optimizar para maximo rendimiento:

    • Configura n_predict a un valor bajo (10-20 tokens maximo)
    • Usa tokens de stop para detener la generacion despues de la etiqueta de categoria
    • Usa temperatura 0 para salida determinista
    • Agrupa multiples clasificaciones si procesas una lista

    Con estas optimizaciones, un modelo 1B clasifica 5-15 elementos por segundo en un telefono flagship.

    Expectativas de rendimiento

    Precision por tamano de datos de entrenamiento

    Ejemplos de entrenamientoPrecision 1BPrecision 3B
    10078-82%82-86%
    25084-88%87-91%
    50088-92%91-94%
    1,00090-94%93-96%
    2,00092-95%94-97%

    Rendimientos decrecientes por encima de 1,000 ejemplos para la mayoria de tareas de clasificacion. Comienza con 500 y agrega mas solo si la precision es insuficiente.

    Velocidad por dispositivo

    DispositivoTiempo de clasificacion 1BClasificaciones/segundo
    iPhone 16 Pro30-60ms15-30
    iPhone 1450-80ms12-20
    Galaxy S2440-70ms14-25
    Android gama media80-130ms8-12

    Cada clasificacion se completa en menos de 150ms en cualquier telefono moderno. Los usuarios lo perciben como instantaneo.

    Comparacion con APIs en la nube

    MetricaAPI en la nubeEn dispositivo 1B (fine-tuned)
    Latencia500-2,000ms30-130ms
    Precision (dominio)78-85% (con prompts)90-94% (fine-tuned)
    Costo por clasificacion$0.00003-0.0003$0
    OfflineNoSi
    PrivacidadDatos enviados a tercerosEn el dispositivo

    En el dispositivo gana en cada metrica para clasificacion: mas rapido, mas preciso (cuando esta fine-tuned), gratuito, offline y privado.

    Patron de arquitectura

    Servicio de clasificacion en segundo plano

    Para apps que necesitan clasificar contenido automaticamente:

    // Android: Clasificacion en segundo plano
    class ClassificationService {
        private val model: LlamaModel = LlamaModel()
    
        fun classifyExpense(description: String): ExpenseCategory {
            val prompt = "Classify: $description"
            val result = model.generate(prompt, maxTokens = 10, temperature = 0f)
            return ExpenseCategory.fromString(result.trim())
        }
    
        fun classifyBatch(items: List<String>): List<ExpenseCategory> {
            return items.map { classifyExpense(it) }
        }
    }
    

    Clasificacion en tiempo real

    Para funciones que clasifican mientras el usuario escribe (auto-sugerir categoria mientras ingresa un gasto):

    // iOS: Clasificacion en tiempo real con debounce
    class ClassificationViewModel: ObservableObject {
        @Published var suggestedCategory: String = ""
        private var classifyTask: Task<Void, Never>?
    
        func onTextChanged(_ text: String) {
            classifyTask?.cancel()
            classifyTask = Task {
                try? await Task.sleep(nanoseconds: 300_000_000) // 300ms debounce
                guard !Task.isCancelled else { return }
                let category = await classifier.classify(text)
                await MainActor.run { suggestedCategory = category }
            }
        }
    }
    

    Como empezar

    1. Define tus categorias. Lista las 5-20 etiquetas que tu clasificador debe producir.
    2. Crea ejemplos de entrenamiento. 500 ejemplos minimo, cubriendo todas las categorias con entradas realistas.
    3. Fine-tunea un modelo 1B. Usa una plataforma como Ertas: sube tus ejemplos, selecciona un modelo base 1B, entrena con LoRA, exporta GGUF.
    4. Integra llama.cpp. Agrega la libreria de inferencia a tu proyecto iOS o Android.
    5. Prueba con datos reales. Ejecuta tu conjunto de evaluacion a traves del modelo. Apunta a 90%+ de precision.
    6. Despliega. Incluye el modelo en el bundle o entrega via descarga post-instalacion.

    La clasificacion es el camino mas rapido a IA en el dispositivo de calidad de produccion. El modelo es pequeno, la tarea es simple y los resultados son mediblemente mejores que las APIs en la nube para categorias especificas de dominio.

    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