Saltar al contenido →

Create ML. Tutorial

Cuando hablábamos de Machine Learning para las plataformas Apple el flujo de trabajo era desarrollar y entrenar nuestro modelo escrito en Python usando librerías como Keras, TensorFlow o scikit-learn y exportándolos como coremltools para poder añadirlos a nuestro proyecto Xcode.

Pero en la pasada WWDC 2018 Apple nos presentó Create ML, un nuevo framework que junto a los Playgrounds va a permitir desarrollar y entrenar los modelos de Machine Learning o Deep Learning con Swift en un entorno familiar a los desarrolladores de soluciones Apple.

Si tuvieramos que buscar una equivalencia podríamos decir que…

(Create ML + Playgrounds) == (Python + Jupyter)

A lo largo de una serie de artículos exploraremos los distintos modelos que podemos generar con esta nueva herramienta así como las diferentes opciones que tiene para cada uno de ellos.

Requisitos

Los primero que necesitamos es comprobar que cumplimos con los siguientes requisitos:

  • Mojave instalado en nuestro Mac
  • Xcode 10

Y nada más, con esto ya estamos listos para comenzar.

Un paseo por Create ML

Para empezar a trabajar con Create ML tenemos que abrir un nuevo Playground para macOS. Esto es importante ya que el framework sólo está disponible para el SDK de macOS 10.14.

Dentro del playground necesitamos import el framework CreateML, y en caso de quere usar la vista del constructor de clasificador para imágenes debemos añadir CreateMLUI

Tipos de modelos

Ya hemos visto el entorno, pero ahora necesitamos saber qué tipo de modelos vamos a poder entrenar, y en esto Create ML no defrauda ya que podemos ir desde los más espefícicos como…

  • Clasificación de imágenes con MLImageClassifier
  • Clasificación de texto natural con MLTextClassifier
  • Clasificación de texto a nivel de palabras con MLWordTagger

… hasta los más generales como son…

  • Reconocimiento de categorías con MLClassifier. Si se quiere trabajar con imágenes o texto deben usarse los listados arriba. Los tipos de clasificación soportados son:
    • Decision Tree
    • Random Forest
    • Boosted Tree
    • Logistic Regression
    • Support Vector
  • Predicción de valores con MLRegressor. Soporta los siguiente tipos:
    • Lineal
    • Decision Tree
    • Random Forest
    • Boosted Tree

Caso Práctico

El hilo conductor de esta presentación del entorno de Create ML va a ser la construcción de un modelo de clasificación de texto que averiguará la valoración que va a hacer un usuario de nuestra app en base al título de su reseña.

Necesitamos datos

Como cualquier modelo de Machine Learning nuestro clasificador de texto necesita datos para poder entrenarse y aprender. Para poder saciar su apetito por los datos he descargado 90.000 reseñas de más de 30 apps en 8 paises en lo que el inglés es el idioma oficial o uno de los principales.

Los datos de las reviews están en formato json y cada review tiene los siguientes datos

  • appID Identificador único de una app dentro de la App Store
  • name Nombre de la app
  • title El título de la reseña. Es texto corto.
  • content Contenido de la reseña de un usuario.
  • rating La valoración del usuario sobre la app que está reseñando.

No hay datos referentes a los usuarios que han escrito la reseña.

Lo que queremos conseguir es que a partir de un title que le pasameos al modelo este sea capaz de predicir el rating que tendrá la reseña que va a escrbir el usuario.

Y si sólo necesito los campos title y rating ¿Para qué estoy guardando el resto de campos? Porque me servirá para mostrar algunas de las operaciones que podemos hacer con los juegos de datos en Create ML.

Vamos a verlo.

Juegos de datos para entrenamimento y validación. MLDataTable

Tenemos los datos, ahora vamos a ponerlos dentro del Playground y de eso se encarga la estructura MLDataTable. Con ella podemos cargar datos en formato json, csv o que residan en memoria, por ejemplo en un diccionario.

Como ya tenemos un archivo con los datos en formato json vamos a usar uno de los inicializador de la estructura que recibe como parámetro una URL con la ruta al archivo además de poder indicar opciones de parseo del archivo, si fuera necesario, gracias a la estructura MLDataTable.ParsingOptions que será muy útil si los datos están en formato CSV.

Renombrar columnas

Vamos a suponer que nos envían un nuevo archivo json con más reseñas, pero que cuando los cargamos nos damos cuenta que el campo appID se llama application_id. Pues que no cuando el pánico porque podemos cambiarlo con una sola línea

Borrar columnas

Además también nos damos cuenta que han incluido la fecha en la que se escribió la reseña. Como no es un campo que necesitamos lo vamos a eliminar

Unir 2 o más MLDataTable

Ya tenemos el nuevo archivo con el formato que esperamos y sólo tenemos que juntarlo con el que ya teníamos

Ahora ya tenemos un único juego de datos. Pero si algo sabemos de entrenar modelos es que necesitamos como mínimo 2, una para entrenamiento y otro para validación. Tranquilos que los ingenieros de Create ML también han pensado en eso.

Dividir un MLDataTable

Quizá una de las mejores funciones que tiene MLDataTable, ya que nos permite dividir un conjunto de datos con datos aleatorios y en la proporción que queremos.

Seguro que se te viene a la mente eso de 80% para entrenamiento y 20% para validación…

…o 70% entrenamiento, 20% validación y 10% evaluación.

La función randomSplit devuelve una tupla con los 2 MLDataTable resultantes de la división

Otras operaciones

Si a algunos de los registros les falta algún campo podemos añadirlo usando un valor por defecto con la función fillMissing

Si nuestros juego de datos tiene registros duplicados se pueden eliminar mediante dropDuplicates

Otro caso que se puede presentar es que a algún registro le falta algún campo, en ese caso se pueden eliminar con la función dropMissing

Si necesitamos ver información detallada de nuestro juego de datos podemos usar la propiedad description para ver en la consola de depuración un informe como el siguiente:

El tamaño de nuestros juego de datos también está a nuestra disposición gracias a la propiedad size

Y si necesitamos obtener un número determinado de registros del inicio o del final del conjunto de datos usaremos las funciones prefix o sufíx

Clasificación de imágenes con ayuda. MLImageClassifierBuilder

Los modelos de clasificación de imágenes tienen una ayuda especial en Create ML que no tiene el resto de modelos. Cuentan con un control visual que nos ayudará a la hora de configuración los conjuntos de datos así como las opciones para el aumento de datos, o Augmentation, sin necesidad de escribir líneas de código.

Para usarlo necesitamos el nuevo framework CreateMLUI donde se encuentra la clase MLImageClassifierBuilder. Basta con crear una instancia de la clase e invocar a su función showInLiveView para que aparezca empotrada en el playground.

La función devuelve un String con la explicación de como ver la live view resultante.

En este vídeo podéis ver lo fácil que resulta todo.

Esto que acabamos de ver es lo mismo que hace la clase ImageDataGenerator de Keras, una librería de Deep Learning escrita en Python.

En este artículo podréis ver como se hace este mismo proceso, llamado Data Augmentation, directamente en Keras.

¿Y qué es el Data Augmentation? Pues es una técnica que consiste en aumentar la cantidad de imágenes de nuestros modelo aplicándolas unas serie de filtros como pueden ser recortes, difuminados, cambios de perspectiva, etc, para así disponer de un número mayor de imágenes con las que entrenar y validar nuestro modelo.

Conclusión

Hemos visto como Create ML es una ayuda indispensable para todos aquellos desarrolladores que quieran generar sus propios modelos de Machine Learning o Deep Learning usando un entorno (Xcode) y lenguaje (Swift) conocido por los programadores de iOS o macOS.

En el próximo artículo…

…veremos como entrenar un modelo de clasificación de texto con los juegos de datos que acabamos de crear y lo exportaremos al formato .mlmodel para incluirlo en una app iOS que nos dirá cómo de buena va a ser la reseña que escriba el usuario de nuestra app.

Código Fuente

En este repositorio de GitHub podéis encontrar el script escrito en Python para descargar las reseñas, el playground con el código de Create ML y los juegos de datos de entrenamiento y validación

Enlaces de interés

Artículos de la serie

1.- Create ML. Tutorial
2.- Create ML. MLTextClassifier

Publicado en Create ML Machine Learning Swift

Un comentario

Los comentarios están cerrados, pero los trackbacks y pingbacks están abiertos.