Cómo entrenar un modelo Core ML para una aplicación iOS

Lo que vas a crear

Core ML facilita que los desarrolladores de iOS agreguen un profundo aprendizaje automático a sus aplicaciones. En esta publicación, te mostraré cómo puedes entrenar un modelo Core ML para obtener información inteligente.

El aprendizaje automático ha sido, sin duda, uno de los temas más candentes del año pasado, ya que empresas de todo tipo intentan hacer que sus productos sean más inteligentes para mejorar las experiencias de los usuarios y diferenciar sus ofertas. Google invirtió entre $ 20 mil millones y $ 30 mil millones en inteligencia artificial solo el año pasado, según McKinsey, State Of Machine Learning And AI, 2017. 

AI se está convirtiendo en una carrera por las patentes y la propiedad intelectual (IP) entre las principales compañías de tecnología del mundo ... El informe cita muchos ejemplos de desarrollo interno, incluidas las inversiones de Amazon en robótica y reconocimiento de voz, y Salesforce en agentes virtuales y aprendizaje automático. BMW, Tesla y Toyota lideran a los fabricantes de autos en sus inversiones en robótica y aprendizaje automático para usar en autos sin conductor. Toyota planea invertir $ 1B en el establecimiento de un nuevo instituto de investigación dedicado a la IA para robótica y vehículos sin conductor. (fuente: Forbes)

Apple no es una excepción a esta tendencia, ya que ha utilizado el aprendizaje automático en sus propias aplicaciones. Por ejemplo, la aplicación Fotos para iOS puede reconocer rostros, objetos y puntos de referencia, y Siri infiere la intención y el significado del habla. Los mensajes para iOS de forma inteligente sugieren y predicen palabras según los comportamientos de usuarios anteriores. 

En este tutorial, aprenderá cómo aplicar algoritmos de aprendizaje automático a un conjunto de datos de entrenamiento, para crear un modelo capacitado que posteriormente hará predicciones basadas en nuevas entradas. Todo gracias al nuevo marco Core ML de Apple.. 

Objetivos de este tutorial

Este tutorial le presentará un subconjunto de aprendizaje automático. Capacitará e integrará un modelo de aprendizaje automático en una aplicación iOS simple, utilizando un popular marco de algoritmo de aprendizaje profundo. En este tutorial, usted:

  • aprender algunos de los conceptos básicos de aprendizaje automático 
  • entrena tu modelo usando datos de muestra
  • integrar el modelo entrenado en una aplicación iOS

Después de pasar por la teoría de la PNL, pondremos nuestro conocimiento en práctica a través de un simple cliente de Twitter, analizando los mensajes de tweet. Adelante, clona el repositorio GitHub del tutorial y echa un vistazo a la versión final de la aplicación que crearemos desde cero.. 

Conocimiento asumido

Este tutorial asume que usted es un desarrollador de iOS con experiencia, pero aunque trabajará con el aprendizaje automático, no necesita tener ningún fondo sobre el tema. Utilizará un poco de Python para crear su modelo entrenado, pero puede seguir el ejemplo del tutorial sin el conocimiento previo de Python. 

Aprendizaje Automático 101

El objetivo del aprendizaje automático es que una computadora realice tareas sin estar explícitamente programada para hacerlo, la capacidad de pensar o interpretar de forma autónoma. Un caso de uso contemporáneo de alto perfil es la conducción autónoma: le da a los autos la capacidad de interpretar visualmente su entorno y conducir sin ayuda. 

Hoy en día, las grandes empresas aprovechan el aprendizaje automático para tomar mejores decisiones comerciales basadas en datos históricos, mediante el uso de algoritmos de aprendizaje profundo para identificar patrones y correlaciones, que les permiten realizar mejores predicciones del futuro. Por ejemplo, puede resolver problemas como "¿Qué tan probable es que un cliente específico compre un producto o servicio específico?" Con mayor confianza en función del comportamiento anterior. 

El aprendizaje automático se aplica mejor a los problemas en los que tiene un historial de respuestas, como descubrirá más adelante en este tutorial cuando examinemos nuestro problema de muestra. Un ejemplo de aprendizaje automático en acción sería su filtro de correo no deseado, que utiliza el aprendizaje supervisado (a medida que marca elementos como correo no deseado) para filtrar mejor el correo no deseado. El modelo de aprendizaje automático codifica todo este conocimiento sobre resultados pasados ​​y lo pone a disposición del algoritmo para un uso eficiente en tiempo de ejecución..

Puede que todo parezca un poco abrumador al principio, pero no es complicado, y te explicaré cómo crear un modelo entrenado en breve. Una vez que haya ideado un modelo entrenado a través de un algoritmo, lo convertirá en un modelo que puede ser consumido por iOS, gracias a Core ML.

Core ML es nuevo en la familia de SDK de Apple, introducido como parte de iOS 11 para permitir a los desarrolladores implementar una gran variedad de modos de aprendizaje automático y tipos de capa de aprendizaje profundo. 

El procesamiento del lenguaje natural (NLP) se encuentra lógicamente dentro del marco Core ML junto con otras dos bibliotecas poderosas, Vision y GameplayKit. Vision proporciona a los desarrolladores la capacidad de implementar el aprendizaje automático de visión artificial para lograr cosas como la detección de rostros, puntos de referencia u otros objetos, mientras que GameplayKit proporciona a los desarrolladores de juegos herramientas para crear juegos y funciones de juego específicas.. 

La ventaja de Core ML en comparación con otras soluciones es que Apple ha optimizado el aprendizaje automático para ejecutarse en el dispositivo, lo que significa un menor consumo de energía en la memoria y una latencia reducida. Esto también contiene información del usuario dentro del dispositivo, mejorando la privacidad.

Con una visión general del aprendizaje automático y modelos fuera del camino, pongamos la teoría en práctica al crear su primer modelo de entrenamiento. 

Entrenando a tu modelo

Para que un modelo sea útil, debe estar capacitado para reconocer los datos como información que puede usar posteriormente para hacer valer las predicciones con un algoritmo apropiado. Core ML actualmente admite los siguientes tipos de modelos:

Además de designar un algoritmo, cuantos más datos tenga, mejor entrenado estará su modelo y más precisas serán las predicciones. Antes de comenzar a crear nuestro modelo Core ML, echemos un vistazo a la aplicación de ejemplo con la que trabajaremos y, en particular, a los datos de muestra.. 

Ejemplo de aplicación: Las Vegas Hotel Score Predictor

Para este tutorial, vamos a utilizar un conjunto de datos de fuente abierta en las reseñas de hoteles en el Strip de Las Vegas, que obtuve de UCI para ilustrar cómo entrenar un modelo y calcular las correlaciones. Puede echar un vistazo al archivo completo CSV delimitado por comas que usaremos en nuestra aplicación. La estructura de los datos es la siguiente:

Nr. opiniones, n. críticas de hotel, puntaje, nombre del hotel, estrellas del hotel 11, 4, 5, Circus Circus Hotel & Casino Las Vegas, 3 119, 21, 3, Circus Circus Hotel & Casino Las Vegas, 3… 

Nos interesará predecir las calificaciones de estrellas de hoteles según la correlación entre el número de reseñas de hoteles y las revisiones generales de cada hotel específico, lo cual es un ejemplo bastante ingenioso pero lo suficientemente simple como para ilustrar el concepto de entrenamiento de un modelo con datos directos. 

Descargue el archivo CSV delimitado por comas en una nueva carpeta que utilizará para este ejercicio. Ahora avancemos y ensuciemos nuestras manos con algo de Python, con el objetivo de lograr lo siguiente: 

  • importar las bibliotecas necesarias, incluidas las bibliotecas Python Core ML
  • importando nuestros datos de muestra
  • aplicando un algoritmo de regresión lineal a nuestros datos, usando una biblioteca llamada SciKit
  • identificando las columnas en los datos que nos interesa modelar (Nr. opiniones, Nr. críticas de hoteles, Estrellas del hotel)
  • identificando la columna que puede estar influyendo (Puntuación
  • Convertir el modelo entrenado en un modelo Core ML

Puede parecer que hay unos cuantos pasos, pero no es tan desalentador como parece. El código Python que demostraremos a continuación no será difícil de seguir, independientemente de su experiencia con el idioma.. 

Primero, vamos a configurar nuestros módulos y dependencias requeridos, incluyendo SciKit, coremltools (las herramientas oficiales de Core ML de Apple para Python) y pandas, una poderosa herramienta para el análisis de la estructura de datos.. 

Abra una ventana de terminal, navegue a la carpeta del proyecto donde tiene el archivo CSV e ingrese lo siguiente:

sudo -H pip instalar --imploror-instalado coremltools scikit-learn pandas

A continuación, utilizando un editor de su elección, cree un nuevo .py archivo, y el nombre de algo así como convertir_reviews.py, agregando las siguientes líneas para importar las bibliotecas que usará:

desde sklearn.linear_model import LinearRegression import pandas import coremltools 

Inmediatamente después de las instrucciones de importación, agregue lo siguiente:

data = pandas.read_csv ("LasVegas-Trip-Dataset.csv") # (1) Importar modelo de archivo CSV = LinearRegression () # (2) Aplicar impresión de regresión lineal (datos) model.fit (data [["Nr. reviews "," Nr. Reseñas de hoteles "," Estrellas de hotel "]], datos [" Puntuación "]) # (3) Datos a extrapolar

Hasta ahora, simplemente estamos importando el CSV utilizando el marco de pandas, imprimiendo los datos importados a la pantalla y luego utilizando el marco de SciKit para establecer un algoritmo de regresión lineal para aplicar a las columnas que estamos interesados ​​en extrapolar. 

No se preocupe demasiado por lo que significa un algoritmo de regresión lineal, pero sepa que estamos usando una técnica de algoritmo de modelado simple para hacer predicciones. En este proyecto, estamos interesados ​​en cómo afecta la puntuación de nuestro hotel, que acabamos de establecer utilizando el model.fit función. 

Ahora tenemos nuestro modelo entrenado, pero todavía necesitamos convertirlo en un modelo que Core ML pueda consumir, que es donde entra en juego coremltools. Inserte las siguientes líneas de código:

coreml_model = coremltools.converters.sklearn.convert (modelo, ["Nr. reviews", "Nr. hotel reviews", "Hotel stars"], "Score") # (4) Convertir coreml_model.save ("Vegas_Reviews.mlmodel" ) # (5) Exportar a un objeto de modelo CoreML

Las dos últimas líneas convierten su modelo en un modelo compatible con Core ML antes de guardar el resultado como un .mlmodel Objeto, listo para ser consumido en tu proyecto Xcode. Guarde el script de Python y ejecútelo a través de terminal:

Python convertir_reviews.py

Suponiendo que no ha encontrado ningún error, el  Vegas_Reviews.mlmodel se generará un archivo, y su modelo entrenado será preparado para ser importado a Xcode. 

Integrando el modelo entrenado

Para la segunda parte de este tutorial, va a crear una aplicación simple con un controlador de vista único, unos controles deslizantes y un control de segmento para permitir a los usuarios alternar varios valores, lo que le permite observar varias predicciones de Core ML. La aplicación final se verá cerca de lo siguiente:

En Xcode, crea un nuevo Aplicación de vista única Proyecto veloz, y dale un nombre..

A continuación, asegúrese de haber incluido el generado Vegas_Reviews.mlmodel archivo en su proyecto, arrastrándolo al panel de proyecto de navegación.

Ahora, abre el ViewController.swift archivo, y agregue lo siguiente:

clase ViewController: UIViewController deja comentarios = Vegas_Reviews () @IBOutlet debilidad var stackView: UIStackView! @IBOutlet weak var scoreValue: UILabel! @IBOutlet weak var nrReviews: ¡UISlider! @IBOutlet weak var nrReseñas del hotel: ¡UISlider! @IBOutlet debil var stars: UISegmentedControl!

Lo primero que está haciendo es crear una instancia de nuestro modelo, que utilizará para hacer predicciones más adelante en la clase. También estás creando algunos IBOutlet las variables que se conectarán en el guión gráfico en breve, que se asignan a las propiedades del modelo individual con las que queremos jugar.

Cambie a Storyboard y agregue los controles correspondientes que declaramos en su controlador de vista, asegurándose de conectar cada control al controlador de vista:

Vuelve a la ViewController.swift archivo, y agregar lo siguiente @IBAction método: 

@IBAction func makePrediction (_ sender: Any) let nrReviewsSelected = Double (nrReviews.value) let nrHotelReviewsSelected = Double (nrHotelReviews.value) var starsSelected: Double switch stars.selectedSegmentIndex case 0: return 3.0 case 1: return 4.0 case 2: devolver 5.0 por defecto: devolver 5.0 si dejar predicciones = intentar? self.reviews.prediction (Nr__reviews: nrReviewsSelected, Nr__hotel_reviews: nrControl. Puntuación) else print ("Error")

Este es el código funcional principal de nuestro motor de predicción, así que analicemos este método paso a paso. Primero echamos los diversos controles en el Doble tipo, que se pasará como argumentos cuando llamemos a nuestro método de predicciones. Dentro de un tratar? bloquear, llamar self.reviews.prediction (), que es un método generado automáticamente que pertenece a nuestro modelo, junto con las propiedades esperadas que definimos al importar nuestro modelo capacitado.

El resultado del bloque de predicciones se pasa a la etiqueta ScoreValue, para mostrar en su aplicación. Ya casi hemos terminado, solo volvemos a cambiar al guión gráfico y mapeamos cada control valueChanged: propiedad a @IBAction Método que creamos en el controlador de vista. Desea que se llame a este método cada vez que cambie un control deslizante o un valor de segmento. Y, por si acaso, también puede asegurarse de llamar automáticamente a este método dentro de su viewDidLoad () Método para que se actualice desde el principio:

anular func viewDidLoad () super.viewDidLoad () self.makePrediction (self)

Cree y ejecute la aplicación en Xcode, y en el simulador, alterne los distintos controles deslizantes y observe la predicción del valor de la puntuación a medida que cambia en función de los otros factores de atribución del número de reseñas de hoteles y de revisiones en general.. 

Como se enfatizó anteriormente, este es realmente un ejemplo artificial, pero le da una idea de cómo construir sus propios experimentos para correlacionarlos y, lo que es más importante, lo sencillo que es implementar modelos entrenados en iOS. 

Conclusión

Gracias a Core ML en iOS 11, Apple ha facilitado a los desarrolladores de todos los días que no tienen experiencia en aprendizaje profundo el poder agregar inteligencia a sus aplicaciones. Todo el procesamiento se realiza en el dispositivo, lo que garantiza un mayor rendimiento sin las preocupaciones de privacidad del almacenamiento de datos en la nube. Con Apple previamente 'dog-fooding' su implementación de aprendizaje automático en aplicaciones integradas como Photos y Mail, los desarrolladores externos ahora tienen la oportunidad de reconocer patrones, imágenes e intención textual con solo unas pocas líneas de código. 

Sin duda, esto es solo el comienzo del movimiento Core ML de Apple, pero es una gran oportunidad para que los desarrolladores empiecen a pensar de manera más integral sobre los datos. Con Core ML, podemos brindarles a los usuarios mejores experiencias de usuario y, al mismo tiempo, proporcionarles a los gerentes de productos una mejor perspectiva empresarial sobre los comportamientos de los usuarios.. 

Mientras esté aquí, eche un vistazo a algunas de nuestras otras publicaciones sobre desarrollo de aplicaciones iOS y aprendizaje automático.!