Machine Learning para desarrolladores Java

Las aplicaciones inteligentes con capacidad de aprendizaje, Machine Learning, llevan con nosotros desde 1952. Sin embargo, con el enorme incremento de la información digital, los desarrollos en la nube y sus aplicaciones prácticas esta es una de las áreas punteras en el desarrollo tecnológico actual. No son pocas las empresas que ya demandan profesionales especializados en este sector.

Para muestra un botón. Piensa en todo lo que nos rodea ahora mismo y verás multitud de ejemplos o aplicaciones. Tenemos coches que pueden conducirse solos; software que nos reconoce mediante el análisis de nuestro rostro; asistentes personales con los que podemos dar órdenes mediante comandos de voz; máquinas que son capaces de “pensar” y jugar una partidita al Doom mejor que cualquier humano. El futuro ya está aquí y se llama Machine Learning. ¿Estás preparado?

 

Aprendiendo sobre Machine Learning, primeros pasos

En mi tiempo libre suelo asistir a diferentes meetups en mi comunidad donde los desarrolladores nos reunimos para descubrir nuevas tecnologías, lenguajes, métodos y soluciones para el desarrollo de nuestro trabajo. Es muy frecuente que tras los eventos y entre las “pizzas y cervezas” que sirven para hacer networking, la gente hable sobre Deep Learning. Surgen consultas como:

- “¿Por donde empiezo? TensorFlow es el más conocido, ¿no?”.

- “Yo he oído que Python se usa mucho, pero creo que es un poco lento, ¿qué tal Java?”.

 

Entre frameworks anda el juego

En el pasado, para crear un sistema de inteligencia artificial teníamos que vernos en la tediosa obligación de implementar los algoritmos básicos por nuestra cuenta y entrenarlos para identificar patrones, imágenes, procesar textos, etc.

Por fortuna, ahora disponemos de diferentes entornos de desarrollo o frameworks que nos permiten comenzar a desarrollar aplicaciones machine learning de una manera mucho más cómoda y rápida.

Alguno de los más conocidos Framework que podemos usar para Java son los siguientes:

 

WEKA

Es una plataforma de aprendizaje automático y la minería de datos escrito en Java y desarrollador por la Universidad de Waikato. Su licencia es libre y como librería Java cuenta con una colección de algoritmos (pre-procesado, clasificación, regresión, clustering, etc.) para Machine Learning (ML) que la hace muy interesante para aquellas personas que quieran dar sus primeros pasos.

 

TensorFlow

Me arriesgo a decir que es la más popular y se define como una librería para computación numérica usando grafos de flujo de datos. Bajo licencia open source fue liberada por Google para la comunidad un tiempo atrás.

TensorFlow es que es una librería muy buena. Permitirte distribuir los cálculos en CPU, GPU (varias de forma simultánea) e incluso el escalado horizontal usando gRPC, pero de muy bajo nivel. Esto mola mucho pero tiene un punto negativo. Nos obliga a trabajar escribiendo demasiado código. La recomendación es utilizar otras capas por encima con un nivel de abstracción mayor para evitarlo.

 

DL4J

Con una documentación muy completa y extensa Deeplearning4j (DL4J) es uno de mis framework de código abierto favoritos. Este framework está pensado para desarrolladores expertos en deep learning que no quieren desarrollar algoritmos desde cero. Necesitas tener los deberes hechos y tener claros los conceptos más básicos. No vale lanzarse a la piscina si no sabes nadar porque donde está DL4J el agua cubre. ;)

 

CognitiveJ

Este framework fascinará a todo aquel interesado en el análisis de imagen basado en aprendizaje automático. CognitiveJ es una librería Java open source (Apache 2 License) que facilita la detección, identificación e interpretación de caras y de sus características. Cuenta con muy buena documentación, es fácil encontrar múltiples tutoriales/ejemplos, además de su código fuente en GitHub.

Entre las funcionalidades soportadas destacan su capacidad para la detección facial (captura de caras, identificación de sexo, edad, detección de emociones, verificación, diferenciación y agrupación de caras), visión (descripción y análisis del contenido visual de una imagen) y aplicar capas sobre imágenes para representar distintas características, etc.

 

El aprendizaje continuo

Estos son en mi criterio los más interesantes frameworks de Inteligencia Artificial, pero hay muchos más. A medida que buscaba documentación para la redacción de este artículo me he dado cuenta de que todo lo relacionado con el Machine Learning es muy activo y cambiante. Lo que ayer era un estándar, puede que mañana no lo sea o que algunas de las recomendaciones que ahora enumero dejen de tener vigencia. Por eso, es importante mantenerse al tanto de las novedades y continuar nuestra formación.

Internet es un buen recurso si no tienes mucho dinero y tiempo para un curso presencial.

Existen muy buenos MOOCs como Udacity o Coursera para aprender todo lo que necesitamos sobre Machine Learning o inteligencia artificial. Eso sí, deberás ser constante si no quieres que todo se quede en el intento.

Aunque en este artículo he hablado de frameworks que ofrecen soporte a Java me he dejado en el tintero otros muy potentes pero que utilizan otros lenguajes. De hecho, el más popular y extendido es Python debido a que la mayoría de librerías en la actualidad usan un enfoque de lenguaje simbólico en lugar de imperativo, con ello se logra optimizar el pico de ejecución una vez lanzado nuestro programa.

Si estás empezando y optas por Java, mi recomendación es comenzar nuestro aprendizaje usando WEKA o Deeplearning4j (DL4J) para luego avanzar a otras opciones de más bajo nivel y potentes.

Aunque es solo mi opinión. Ya sabes que en este mundillo cada maestro tiene su librillo. ¿Conoces otros framework? ¿Cual recomiendas? Comparte tus impresiones en los comentarios.

 

Guía de Posibilidades Profesionales en el Ecosistema de Java