Blog

Machine Learning en iOS

Contenidos

Hace cincuenta años, el machine learning era todavía material de ciencia ficción. Hoy es una parte esencial de nuestras vidas, ayudándonos a hacer todo, desde encontrar fotos hasta conducir coches.

El machine learning es un tipo de inteligencia artificial en el que los dispositivos «aprenden» sin ser programados explícitamente. En lugar de codificar un algoritmo, las herramientas de machine learning permiten a los dispositivos desarrollar y perfeccionar algoritmos, encontrando patrones en enormes cantidades de datos.

En este artículo, aprenderemos sobre Core ML y Vision, dos frameworks de vanguardia para iOS. También obtendrás una rápida visión general de los fundamentos del machine learning.

Deep learning

Desde la década de 1950, los primeros pensadores y manitas de la IA han desarrollado muchos enfoques para el machine learning. Sin embargo, las redes neuronales han experimentado un gran auge posteriormente. En 2012, una red neuronal creada por Google aprendió a reconocer a los humanos y a los gatos en los vídeos de YouTube, sin que se le dijera cómo caracterizar a ninguno de ellos. Se enseñó a sí misma a detectar felinos con un 74,8% de precisión y rostros con un 81,7%.

En estos momentos, el deep learning está causando furor. Es una rama del machine learning que utiliza algoritmos para, por ejemplo, reconocer objetos y entender el habla humana. Los científicos han utilizado algoritmos de deep learning con múltiples capas de procesamiento para hacer mejores modelos a partir de grandes cantidades de datos de entrenamiento.

Para utilizar el modelo, se le dan nuevas entradas y calcula las salidas: esto se llama inferencia. La inferencia sigue requiriendo mucha computación para calcular las salidas a partir de las nuevas entradas.

En pocas palabras, si le damos al ordenador una imagen de un gato y otra de una pelota, y le mostramos cuál es el gato, podemos pedirle que decida si las siguientes imágenes son gatos. El ordenador compara la imagen con su conjunto de entrenamiento y da una respuesta. Los algoritmos actuales también pueden hacer esto sin supervisión; es decir, no necesitan que cada decisión esté preprogramada.

Breve historia de Apple ML

CoreML solo ha sido público desde el lanzamiento de iOS 11 en septiembre de 2017, y ya es compatible con todas las principales plataformas de ML para convertir los modelos existentes. Pero los modelos existentes tienden a ser demasiado grandes y/o demasiado generales.

Create ML fue anunciado en la WWDC 2018. Actualmente solo incluye dos conjuntos de herramientas centrados en tareas, además de un clasificador y un regresor genéricos, y tablas de datos.

Crear ML

Create ML acelera el flujo de trabajo para mejorar su modelo mejorando sus datos, al tiempo que aplana la curva de aprendizaje al hacerlo todo en la comodidad de Xcode y Swift.

Puede utilizar Create ML con herramientas conocidas como Swift y macOS playgrounds para crear y entrenar modelos de aprendizaje automático personalizados en Mac OS. Además, puedes entrenar modelos para realizar tareas como el reconocimiento de imágenes, la extracción del significado del texto o la búsqueda de relaciones entre valores numéricos.

Create ML aprovecha la infraestructura de aprendizaje automático integrada en productos de Apple como Fotos y Siri. Esto significa que los modelos de clasificación de imágenes y de lenguaje natural son más pequeños y tardan mucho menos en entrenarse.

El modelo de clasificación de imágenes

Para entrenar un clasificador de imágenes de Create ML, debemos proporcionarle un conjunto de datos de entrenamiento: una carpeta que contenga las carpetas de las clases.

Después de entrenar el modelo, necesitaremos un conjunto de datos de prueba para evaluar el modelo. Para evaluar lo bien que funciona el modelo con imágenes que no ha visto antes, las imágenes del conjunto de datos de prueba deben ser diferentes de las imágenes del conjunto de datos de entrenamiento. Si se recogen datos, se pondría un 20% de las imágenes en el conjunto de datos de prueba y el resto en el conjunto de datos de entrenamiento.

Pero y, ¿qué es la validación? ¿y qué significan las cifras de precisión?

El entrenamiento consiste en calcular el peso que hay que dar a cada característica para calcular la respuesta. Luego, para perfeccionar las ponderaciones, se introduce la información correcta o incorrecta en la siguiente iteración.

La precisión de la validación es similar. Antes de que comience el entrenamiento, un 10% del conjunto de datos, elegido al azar, se divide para ser datos de validación. Se extraen las características y se calculan las respuestas con los mismos pesos que el conjunto de datos de entrenamiento. Pero los resultados no se utilizan directamente para volver a calcular los pesos. Su objetivo es evitar que el modelo se adapte en exceso, es decir, que se fije en una característica que en realidad no importa, como el color del fondo o la iluminación. Si la precisión de la validación es muy diferente a la del entrenamiento, el algoritmo se ajusta a sí mismo. La elección de las imágenes de validación afecta tanto a la precisión de validación como a la de entrenamiento.

Mejorar la precisión de entrenamiento

  • Aumentar las iteraciones máximas para los clasificadores de imágenes.
  • Utilizar diferentes algoritmos para los clasificadores de texto.
  • Utilizar modelos diferentes para los clasificadores genéricos o regresores.
  • Mejorar la precisión de la validación.
  • Aumentar la cantidad de datos: para los clasificadores de imágenes, puede aumentar los datos de las imágenes volteándolas, rotándolas, cortándolas o cambiando su exposición.

Mejorar la precisión de la evaluación

Debemos asegurarnos de que la diversidad de características de nuestros datos de entrenamiento coinciden con las de nuestros datos de prueba, y que ambos conjuntos son similares a los datos que los usuarios de nuestra aplicación aportarán a nuestro modelo.

El modelo clasificador de texto

Un clasificador de texto es un modelo de machine learning que ha sido entrenado para reconocer patrones en un texto de lenguaje natural.

Debemos entrenar un clasificador de texto mostrándole muchos ejemplos de texto ya etiquetados.

Importar datos

Comienza por reunir datos textuales e importarlos a una instancia de MLDataTable. Puedes crear una tabla de datos a partir de los formatos JSON y CSV. O, si los datos textuales están en una colección de archivos, puedes ordenarlos en carpetas, utilizando los nombres de las carpetas como etiquetas.

La tabla de datos resultante tiene algunas columnas, derivadas de las claves del archivo JSON. Los nombres de las columnas pueden ser cualquier cosa, siempre y cuando sean significativos porque los usarán como parámetros en otros métodos.

Preparar los datos para el entrenamiento y la evaluación

Los datos utilizados para entrenar el modelo deben ser diferentes de los datos utilizados para evaluar el modelo.

Crear y entrenar el clasificador de texto

Crea una instancia de MLTextClassifier con una tabla de datos de entrenamiento y los nombres de sus columnas. El entrenamiento comienza de inmediato.

Para ver la precisión del modelo en los datos de entrenamiento y validación, utiliza las propiedades classificationError de las propiedades trainingMetrics y validationMetrics del modelo.

Evaluar la precisión del clasificador

A continuación, evalúa el rendimiento del modelo entrenado probándolo con frases que nunca has visto antes. Pase su tabla de datos de prueba al método evaluation(on:), que devuelve una instancia de MLClassifierMetrics.

Para obtener la precisión de la evaluación, utiliza la propiedad classificationError de la instancia MLClassifierMetrics devuelta.

Si el rendimiento de la evaluación no es lo suficientemente bueno, puedes ser necesario volver a entrenar con más datos o hacer otros ajustes.

Guarde el modelo ML principal

Si el modelo tiene un rendimiento lo suficientemente bueno, puedes guardarlo y utilizarlo en la aplicación. Utiliza el método de escritura para escribir el archivo del modelo Core ML en el disco. Proporciona cualquier información sobre el modelo, como su autor, versión o descripción en una instancia de MLModelMetadata.

Integrar un modelo Core ML en la aplicación

En primer lugar, tienes que añadir un Modelo a tu proyecto Xcode arrastrando el modelo al navegador del proyecto. Ahora, puedes ver información sobre el modelo -incluyendo el tipo de modelo y sus entradas y salidas esperadas- abriendo el modelo en Xcode.

Crear el modelo en el código

Xcode también utiliza la información sobre las entradas y salidas del modelo para generar automáticamente una interfaz programática personalizada para el modelo, que se utiliza para interactuar con el modelo en el código.

Construir y ejecutar una aplicación Core ML

Xcode compila el modelo de Core ML en un recurso que ha sido optimizado para ejecutarse en un dispositivo. Esta representación optimizada del modelo se incluye en el paquete de la aplicación y es lo que se utiliza para hacer predicciones mientras la aplicación se ejecuta en un dispositivo.

Artículos destacados

From offline to online.

Comparte tus ideas con nosotros