Veo que la mayoría de las API de Machine Learning están en Python, algunas usan C o C ++ bajo el capó. ¿Por qué los desarrolladores de framework no exponen las API de C ++?

TL; DR : un modelo ML (o un ‘prototipo’) en python es más fácil, más limpio y más rápido de desarrollar y modificar a pesar de tener un impacto significativo en el rendimiento. Algunas industrias son lo suficientemente valientes como para no preocuparse por eso y terminan usándolo también para la producción.

Python es para el aprendizaje automático lo que la plastilina es para la industria del diseño.


Hay bastantes razones para esto.

Principalmente, una gran cantidad de aprendizaje automático se trata de experimentar con diferentes modelos y probar diferentes técnicas para explorar datos. Python (o matlab o R) facilita esto por su soporte nativo para REPL (y algunas otras abstracciones de nivel de lenguaje que lo hacen más fácil, más limpio y más rápido de desarrollar).

Desde mi poca experiencia profesional y académica, Python (o matlab o R) no se usan “en general” en sistemas de producción a gran escala, donde el rendimiento es de suma importancia.

Dicho esto, de hecho hay bastantes empresas que usan python incluso para sistemas de producción a mediana escala. La razón puede variar, pero en mi experiencia, esas son las compañías que tienen que hacer cambios drásticos en sus tuberías de ML en un corto período de tiempo, ya sea para adaptarse a los cambios en la estructura de sus datos o para implementar técnicas más nuevas para mantener con el campo en rápida evolución. La velocidad a la que realizan tales cambios hace que sea más costoso mantener sus bases de código en C ++.

Las empresas que no usan Python para producción lo usan principalmente para ‘probar’ diferentes canales (o para construir modelos únicos a partir de sus datos). Una vez que se concibe esta sólida tubería, el modelo se vuelve a implementar en C ++ o Java (o más recientemente scala (mllib)), si es un modelo en línea (donde el rendimiento es bastante importante) o los parámetros del modelo exportados (lea sobre PMML) de python y estos datos se utilizan como parte de una base de código más grande escrita en su lenguaje de bajo nivel de elección.

La conclusión es que las personas usan python donde (o cuándo) el costo de reconstruir sistemas es lo suficientemente alto como para justificar el compromiso que hacen al elegir python. Ahora, dados estos casos de uso, tendría mucho más sentido exponer las API de Python que las facilitarían.

Otra razón para esto es que muchos avances de aprendizaje automático ocurren en la academia. La gente en la academia rara vez se preocupa por el rendimiento. Para ellos, un código que es más fácil de escribir / modificar / mantener es mucho más valioso para su investigación que un código que se desempeña 100 veces mejor, pero que les hace arrancar el pelo cuando se trata de modificaciones menores para acomodar sus epifanías repentinas (y las retracciones de los mismos). ) durante el curso de su investigación. (Aparentemente, Python es más amable con su cuero cabelludo).

Aquí, exponer las API de Python facilitaría la integración de eso en su investigación. También ayuda a los estudiantes a aprender y experimentar con ML sin exigir un gran conocimiento en programación. (Lee como ‘Python es más fácil de aprender’).

En otro eje de pensamiento, hay, aunque comparativamente menos en número, bastantes bibliotecas C ++ ML con API C ++ como su interfaz principal (MLPack / shogun / shark / WEKA / dlib). A menudo no terminan siendo ‘tan famosos’ como sus contrapartes donde la interfaz principal es Python ya que su caso de uso (y, por lo tanto, la base de usuarios) es mucho más pequeño en comparación con los últimos (* puede * leerse como ‘exclusivamente para el profesional mundo’).

(Esta queja es solo mi humilde opinión de mi muy pequeña experiencia en el aprendizaje académico y profesional de ML).