Какой язык программирования выбрать специалисту по машинному обучению?
Машинное обучение ― это только Python и R или нет? Разбираемся, какие ещё языки любят инженеры по ML.
На GitHub есть рейтинг популярности языков программирования для машинного обучения. Критерий оценки — количество ML-проектов, которые хостятся на платформе. Расскажем, почему именно они стали популярными и какой лучше изучать. Языки размещены в порядке от наиболее используемых к наименее.
Python
Python лидирует в машинном обучении. И вот почему:
- Это универсальный язык, и на нём можно написать что угодно — от облачного сервиса до нейронной сети.
- У Python активное сообщество и огромное количество свободных МL-инструментов (TensorFlow, Keras, Scikit-learn, Pandas).
- Новички в разработке нередко начинают именно с Python — его синтаксис прост и понятен.
Но есть и минусы: низкая скорость выполнения программ и высокое потребление памяти.
Пример ML-проекта на Python: Video Object Removal ― программа, которая использует алгоритмы глубокого обучения, чтобы убрать из видео любые лишние объекты всего за пару секунд.
Одновременно существует две версии языка: Python 2 и Python 3. У Python 3 нет обратной совместимостью со второй версией — то есть код, написанный на старой версии, не будет работать в новой. Советуем изучать именно Python 3 — предыдущий уже официально не поддерживается.
С++
C++ — мощный язык, программы на нём работают стабильно и быстро. Но многие не любят его из-за сложного синтаксиса и обилия абстрактных функций. С++ создавался как дополненная версия С — в то время сложность использования языка ещё не воспринималась как серьёзный барьер, ведь программировали на нём только учёные и высококлассные инженеры.
Преимущество C++ в том, что на нём можно вручную управлять оперативной памятью и извлечением данных. Это помогает оптимизировать работу программы, если данных для обработки очень много, а ресурсы ограничены и скорость критически важна.
Пример ML-проекта на C++: AirSim — симулятор дронов и беспилотных автомобилей.
JavaScript
Многие слышали о JavaScript только в связке с HTML и CSS — когда речь идёт о веб-дизайне и фронтенде. JS часто используют для разработки пользовательских интерфейсов.
Но в JS есть и немало ML-библиотек: Brain.js, Deeplearnjs и ConvNetJS ― для нейронных сетей, Compromise ― для NLP, TensorFlow.js ― для всего понемногу.
Примеры ML-проекта на JavaScript: «Катана» — текстовый виртуальный ассистент, который любая компания может подстроить под себя в пару кликов; Beat Blender — фановый софт для создания музыки.
Java
Синтаксис Java похож на синтаксис С/C++. Но это высокоуровневый язык программирования, который не требует ручного управления памятью. У тех, кто занимается разработкой для ML на Java, есть отличные библиотеки: Weka, MOA, MALLET.
Примеры ML-проектов на Java: Seldon Server ― движок для создания рекомендательных систем, который позволяет развернуть нейронную сеть для рекомендаций, даже если вы новичок; GROBID ― программа для парсинга и извлечения информации даже из неструктурированных документов.
Если вы уже знакомы с Java, то сможете зайти с ним в машинное обучение. Но если вы его не знаете и собираетесь идти в ИИ, лучше изучите другой язык. Да, на GitHub есть много Java-проектов в сфере машинного обучения. Но инфраструктура в сфере ML для того же Python гораздо богаче, выучить его с нуля до хорошего уровня проще.
C#
C# — универсальный, гибкий и многофункциональный язык от Microsoft. Он позволяет программистам писать всё — от системных приложений до сайтов.
Microsoft активно поддерживает C# и даже создала для него библиотеку ML.NET, которая содержит всё необходимое для работы с машинным обучением. Компания активно обкатывала библиотеку на протяжении десяти лет и только после этого выложила в открытый доступ. По замыслу разработчиков, она должна стать альтернативой многочисленным библиотекам Python и сделать C# ведущим языком в ML. Но пока это только мечты — прямо сейчас найти работу в сфере искусственного интеллекта на C# не так просто.
Пример ML-проекта на C#: BotSharp ― опенсорс-платформа для создания чат-ботов.
Julia
Julia — молодой язык, конкурент R и Python, совместимый с ними. Однако он гораздо быстрее Python и по скорости может сравниться с C/C++. Julia — универсальный язык, хотя изначально его разработали для числовых и технических вычислений.
Его можно и нужно использовать для веб-программирования низкоуровневого системного программирования в качестве языка спецификации. Он поддерживает динамическую типизацию — это делает его более гибким, но и увеличивает вероятность ошибки. В Julia есть и мастхэв-библиотеки для ML: Flux, Mocha.jl, Knet, TensorFlow.jl, ScikitLearn.jl.
Примеры ML-проектов на Julia: SALSA — софт для продвинутой работы со стохастическими алгоритмами; MLJTuning — программа для оптимизации гиперпараметров.
Проекты на Julia в основном создают для учёных и для ML-поддержки лабораторий. Из этого вывод: делать ставку только на Julia не нужно — язык ещё растёт. Но обратить внимание точно стоит.
Shell
Shell — это скриптовый язык, то есть с его помощью можно быстро потестить в командной строке всякие интересные штуки или выполнить мелкие рутинные действия.
Shell легко изучить — по сути, это просто набор текстовых команд. В машинном обучении Shell используется для быстрого решения рутинных задач — например, для создания API, которое помогает легко установить нужные фреймворки и библиотеки.
Пример ML-проекта на Shell: mlmmj-archivist — программа, которая автоматически генерирует веб-архивы для email-рассылок.
R
R обычно используют в связке с Python. Он подходит для статической обработки данных и работы с графиками. Под R есть несколько пакетов для машинного обучения — например, benchm-ml, CARET, KernLab.
Однако R может и осложнить решение простых задач. В нём существует множество полезных функций — согласно CRAN, для R создано больше 11 тысяч пакетов, а это сотни тысяч функций. Привычной системы меню, как в Excel, нет. Новичку легко запутаться в таком количестве команд. Например, где взять функцию для проведения какого-нибудь статистического анализа? Придётся пролистать немало документации.
Примеры ML-проектов на R: Healthcare.ai ― платформа для создания искусственного интеллекта в здравоохранении. Student Early Warning — программа, которая предсказывает, насколько велика вероятность того, что ученик бросит школу.
TypeScript
TypeScript — это надстройка над JavaScript. Любой TS-код корректен с точки зрения JS. На нём можно писать алгоритмы и строить модели машинного обучения. Самые популярные ML-библиотеки для TypeScript — machinelearn.js, TensorFlow Deep Playground, machine-learning.
Одно из главных преимуществ TypeScript в сравнении с JS — строгая типизация. Язык сам отлавливает ошибки вроде «сложить свиней с апельсинами» (например, типы «строка» и «число»). JS часто высмеивают за то, что в таких случаях он выдаёт непредсказуемые результаты.
Примеры ML-проектов на TypeScript: BrainGames ― игровой бот, который можно тренировать самому; Windows Machine Learning — облачный сервис для создания и обучения моделей.
Scala
Scala поддерживает и объектно-ориентированное, и функциональное программирование. Его синтаксис похож на Java, а чтобы полноценно овладеть языком, нужно понимать и функциональное программирование. Поэтому у Scala высокий порог вхождения. Зато код получается более стабильным и хорошо подходит для крупных многозадачных проектов в ML.
Хотя язык молодой, для него уже есть хорошие библиотеки: Apache Spark, Apache PredictionIO, OpenNLP, Aerosolve. Конечно, пока ему сложно конкурировать с Python или C++, но в него инвестируют многие крупные компании.
Примеры ML-проектов на Scala: Big Data Project ― инструмент для идентификации спам-отзывов на Amazon; Awesome Recommendation Engine — программа для создания рекомендаций в реальном времени.
Популярность языков на рынке труда
По информации hh.ru, обычно работодатели ищут в ML кандидатов с опытом разработки на одном из этих языков:
- Python. Большинство компаний — от крупных брендов до исследовательских центов — использует именно Python и его библиотеки. С одной стороны, он универсален и может интегрироваться с чем угодно. С другой — заточен под машинное обучение благодаря большому количеству библиотек.
- С++. Этот второй по популярности язык среди работодателей. Когда появляется задача из мира интернета вещей или роботехники, то есть приходится напрямую работать с оборудованием (hardware), без него не обойтись.
- Java. Один из самых популярных языков в мире. Поэтому компаниям проще всего нанять разработчика для своего проекта на этом языке.
Вывод
Мы рекомендуем начать с самых популярных технологий: Python, C++ или Java. Благодаря большому количеству библиотек и поддержке комьюнити на них можно написать что угодно. Изучив эти языки, можно перейти к чему-то более нестандартному — например, Julia или Scala.
Получить востребованную специальность можно на профессии «Data Scientist: машинное обучение». Вы научитесь с нуля программировать на Python, работать с библиотеками и базами данных. Применить знания и собрать портфолио можно на стажировке ещё во время обучения.