Llegamos a ustedes gracias a:



Reportajes y análisis

6 lenguajes de programación para el desarrollo de la IA

[06/12/2019] La IA (inteligencia artificial) abre un mundo de posibilidades para los desarrolladores de aplicaciones. Aprovechando el aprendizaje automático o el aprendizaje profundo, podría producir perfiles de usuario, personalización y recomendaciones mucho mejores, o incorporar una búsqueda más inteligente, una interfaz de voz, o asistencia inteligente, o mejorar su aplicación de cualquier otra manera. Incluso puede crear aplicaciones que vean, escuchen y reaccionen ante situaciones que nunca antes había previsto.

¿Qué lenguaje de programación debe aprender para sondear las profundidades de la IA? Querrá un idioma con muchas buenas bibliotecas de aprendizaje automático y aprendizaje profundo, por supuesto. También debe presentar un buen rendimiento en tiempo de ejecución, un buen soporte de herramientas, una gran comunidad de programadores y un ecosistema saludable de paquetes de soporte. Esa es una larga lista de requisitos, pero todavía hay muchas buenas opciones.

Aquí están mis selecciones para los seis mejores lenguajes de programación para el desarrollo de la IA, junto con dos menciones honoríficas. Algunos de estos lenguajes van en aumento, mientras que otros se están perdiendo. Y otros que solo necesita conocer si está interesado en arquitecturas y aplicaciones de aprendizaje profundo histórico. Veamos cuáles son.

Python

En el número uno, sigue estando Python. ¿Cómo podría ser otra cosa, en realidad? Aunque hay cosas enloquecedoras sobre Python, si está haciendo trabajo de IA, es casi seguro que estará usando Python en algún momento. Y algunos de los puntos difíciles se han suavizado un poco.

A medida que nos acercamos al año 2020, el problema de Python 2.x frente a Python 3.x se está volviendo discutible, ya que casi todas las librerías importantes soportan Python 3.x, y están dejando de soportar Python 2.x tan pronto como pueden. En otras palabras, puede finalmente aprovechar todas las nuevas características del lenguaje en serio.

Y aunque las pesadillas de Python -donde cada solución diferente se rompe de una manera ligeramente diferente- siguen presentes, puede usar Anaconda alrededor del 95% del tiempo y no preocuparse demasiado por las cosas. Aun así, sería bueno que el mundo Python arreglara este viejo problema de una vez por todas.

Dicho esto, las bibliotecas de matemáticas y estadísticas disponibles en Python no tienen parangón en otros idiomas. NumPy se ha vuelto tan omnipresente que es casi una API estándar para operaciones tensoriales, y Pandas trae a Python los potentes y flexibles marcos de datos de R. Para el procesamiento del lenguaje natural (PNL, por sus siglas en inglés), tiene el venerable NLTK y el increíblemente rápido SpaCy. Para el aprendizaje automático, está el probado Scikit-learn. Y cuando se trata de un aprendizaje profundo, todas las bibliotecas actuales (TensorFlow, PyTorch, Chainer, Apache MXNet, Theano, etc.) son efectivamente proyectos de Python.

Si está leyendo investigación de vanguardia sobre aprendizaje profundo en arXiv, entonces encontrará que la mayoría de los estudios que ofrecen código fuente lo hacen en Python. Luego están las otras partes del ecosistema de Python. Mientras que IPython se ha convertido en Jupyter Notebook, y menos centrado en Python, todavía encontrará que la mayoría de los usuarios de Jupython Notebook, y la mayoría de los notebooks compartidos en línea, usan Python.

En cuanto a la implementación de modelos, el advenimiento de arquitecturas y tecnologías de microservicio como Seldon Core, significa que hoy en día es muy fácil implementar modelos Python en la producción.

No hay forma de evitarlo. Python es el lenguaje que está a la vanguardia de la investigación de la IA, el lenguaje para el que encontrará más aprendizaje automático y marcos de aprendizaje profundo, y el que casi todo el mundo habla en el mundo de la IA. Por estas razones, Python es el primero entre los lenguajes de programación IA, a pesar del hecho de que su autor maldice los problemas de espacios en blanco al menos una vez al día.

C++

Es poco probable que C++ sea su primera opción cuando desarrolle una aplicación de IA, pero cuando necesite extraer hasta el último trozo de rendimiento del sistema -un escenario que se vuelve más común a medida que el aprendizaje profundo llega a su límite, y necesita ejecutar sus modelos en sistemas con recursos limitados- es el momento de volver al aterrador mundo de los punteros una vez más.

Afortunadamente, el C++ moderno puede ser agradable de escribir (¡honestamente!). Tiene la opción de elegir entre varios enfoques. Puedes sumergirse en la parte inferior de la pila utilizando librerías como CUDA de Nvidia para escribir su propio código que se ejecuta directamente en su GPU, o puede utilizar TensorFlow o PyTorch para obtener acceso a APIs flexibles de alto nivel. Tanto PyTorch como TensorFlow le permiten cargar modelos generados en Python (o en el subconjunto TorchScript de Python de PyTorch) y ejecutarlos directamente en tiempo de ejecución C++, lo que le permite estar más cerca del bare metal para la producción a la vez que preserva la flexibilidad en el desarrollo.

En resumen, C++ se convierte en una parte crítica del conjunto de herramientas a medida que las aplicaciones de IA proliferan en todos los dispositivos, desde el sistema embebido más pequeño hasta los clústeres más grandes. La IA en el borde significa que ya no es suficiente con ser preciso, sino que hay que ser bueno y rápido.

Java y otros lenguajes JVM

La familia de lenguajes JVM (Java, Scala, Kotlin, Clojure, etc.) sigue siendo una gran elección para el desarrollo de aplicaciones AI. Dispone de un gran número de librerías disponibles para todas las partes del pipeline, ya sea para el procesamiento de lenguaje natural (CoreNLP), operaciones tensoriales (ND4J) o una pila de aprendizaje profundo (DL4J) acelerada en la GPU. Además, tiene fácil acceso a grandes plataformas de datos como Apache Spark y Apache Hadoop.

Java es la lengua franca de la mayoría de las empresas, y con las nuevas construcciones de lenguaje disponibles en Java 8 y versiones posteriores, escribir código Java no es la experiencia odiosa que muchos de nosotros recordamos. Escribir una aplicación de IA en Java puede parecer un poco aburrido, pero puede hacer el trabajo, y puede utilizar toda su infraestructura Java existente para el desarrollo, la implementación y la supervisión.

Javascript

Es poco probable que aprenda JavaScript únicamente para escribir aplicaciones de IA, pero TensorFlow.js de Google sigue mejorando y ofrece una forma intrigante de implementar sus modelos Keras y TensorFlow en su navegador, o a través de Node.js utilizando WebGL para cálculos acelerados por GPU.

Sin embargo, una cosa que no hemos visto desde el lanzamiento de TensorFlow.js es una enorme afluencia de desarrolladores JavaScript inundando el espacio AI. Creo que esto puede deberse a que el ecosistema JavaScript circundante no tiene la profundidad de las bibliotecas disponibles en comparación con lenguajes como Python.

Además, en el lado del servidor, no hay mucha ventaja en desplegar modelos con Node.js en comparación con una de las opciones de Python, por lo que podemos ver que las aplicaciones de IA basadas en JavaScript seguirán estando basadas principalmente en navegadores en un futuro próximo. Pero eso todavía crea un montón de oportunidades interesantes para la diversión, como el Emoji Scavenger Hunt.

Swift

En la versión del año pasado de este artículo, mencioné que Swift era un lenguaje que había que vigilar. Este año, entra en mis seis primeros puestos. ¿Qué ha pasado? Swift para TensorFlow. Una encuadernación totalmente mecanografiada, sin necesidad de cruft, de las últimas y más grandes características de TensorFlow, y magia oscura que le permite importar librerías Python como si estuvieras usando Python en primer lugar.

El equipo de Fastai está trabajando en una versión Swift de su popular biblioteca, y se nos promete muchas más optimizaciones en la generación y ejecución de modelos con el movimiento de muchos tensores inteligentes en el compilador LLVM. ¿Está lista la producción ahora mismo? En realidad, no; pero sí puede señalar el camino hacia la próxima generación de desarrollo de aprendizaje profundo, así que definitivamente debería investigar qué está pasando con Swift.

Lenguaje R

R está al final de nuestra lista, y tiende a bajar. R es el lenguaje que los científicos aman. Sin embargo, otros programadores a menudo encuentran a R un poco confuso, debido a su enfoque centrado en el marco de datos. Si tiene un grupo dedicado de desarrolladores R, entonces puede tener sentido usar las integraciones con TensorFlow, Keras o H2O para investigación, prototipos y experimentación, pero dudo en recomendar R para su uso en producción o para el desarrollo de nuevos proyectos, debido al rendimiento y a preocupaciones operativas. Mientras que puede escribir código R performante que puede ser desplegado en servidores de producción, es casi seguro que será más fácil tomar ese prototipo R y recodificarlo en Java o Python.

Otras opciones de programación de la IA

Por supuesto, Python, C++, Java, JavaScript, Swift y R no son los únicos lenguajes disponibles para la programación de la IA. Aquí hay dos lenguajes de programación más que pueden resultar interesantes o útiles, aunque yo no los consideraría prioritarios para el aprendizaje.

Lua: Hace unos años, Lua estaba en lo más alto del mundo de la inteligencia artificial debido a la estructura de Torch, una de las bibliotecas de aprendizaje automático más populares para las necesidades tanto de investigación como de producción. Si se adentra en la historia de los modelos de aprendizaje profundo, a menudo encontrará abundantes referencias a Torch y mucho código fuente Lua en los antiguos repositorios de GitHub.

Para ello, puede ser útil tener un conocimiento práctico de la API de Torch, que no está muy alejado de la API básica de PyTorch. Sin embargo, si, como la mayoría de nosotros, realmente no necesita hacer mucha investigación histórica para sus aplicaciones, probablemente pueda arreglárselas sin tener que entender las pequeñas rarezas de Lua.

Julia: Julia es un lenguaje de programación de alto rendimiento que se centra en la computación numérica, lo que hace que encaje bien en el mundo de las matemáticas de la IA. Aunque no es tan popular como una elección de lenguaje en este momento, las envolturas como TensorFlow.jl y Mocha (fuertemente influenciadas por Caffe) proporcionan un buen apoyo para el aprendizaje profundo. Si no le importa el ecosistema relativamente pequeño, y quiere beneficiarse del enfoque de Julia en hacer cálculos de alto rendimiento fáciles y rápidos, entonces probablemente vale la pena echar un vistazo a Julia.