- 19 октября 2014 г.
- Василис Вриниотис
- . 5 комментариев
Я рад сообщить, что платформа машинного обучения Datumbox теперь находится в открытом доступе под лицензией GPL 3.0, и вы можете загрузить ее код с Гитхаб!
Что это за фреймворк?
Платформа машинного обучения Datumbox — это платформа с открытым исходным кодом, написанная на Java, которая позволяет быстро разрабатывать модели машинного обучения и статистические приложения. Это код, который в настоящее время приводит в действие API Datumbox. Основное внимание в структуре уделяется включению большого количества алгоритмов машинного обучения и статистических методов, а также возможности обработки наборов данных небольшого и среднего размера. Несмотря на то, что платформа предназначена для помощи в разработке моделей из различных областей, она также предоставляет инструменты, которые особенно полезны в приложениях для обработки естественного языка и анализа текста.
Какие типы моделей/алгоритмов поддерживаются?
Фреймворк разделен на несколько уровней, таких как машинное обучение, статистика, математика, алгоритмы и утилиты. Каждый из них предоставляет серию классов, которые используются для обучения моделей машинного обучения. Двумя наиболее важными слоями являются статистика и слой машинного обучения.
Уровень статистики предоставляет классы для расчета описательной статистики, выполнения различных типов выборки, оценки CDF и PDF на основе часто используемых распределений вероятностей и выполнения более 35 параметрических и непараметрических тестов. Такие типы классов обычно необходимы при выполнении объяснительного анализа данных, выборки и отбора признаков.
Уровень машинного обучения предоставляет классы, которые можно использовать в большом количестве задач, включая классификацию, регрессию, кластерный анализ, моделирование тем, уменьшение размерности, выбор функций, ансамблевое обучение и рекомендательные системы. Вот некоторые из поддерживаемых алгоритмов: LDA, Max Entropy, Naive Bayes, SVM, Bootstrap Aggregation, Adaboost, Kmeans, Hierarchical Clustering, Dirichlet Process Mixture Models, Softmax Regression, Ordinal Regression, Linear Regression, Stepwise Regression, PCA и другие.
Datumbox Framework VS Mahout VS Scikit-Learn
И Mahout, и Scikit-Learn — отличные проекты, и у обоих совершенно разные цели. Mahout поддерживает только очень ограниченное количество алгоритмов, которые можно распараллелить и, таким образом, использовать структуру Hadoop Map-Reduce для обработки больших данных. С другой стороны, Scikit-Learn поддерживает большое количество алгоритмов, но не может обрабатывать огромные объемы данных. Кроме того, он разработан на Python, который является отличным языком для прототипирования и научных вычислений, но не является моим любимым языком для разработки программного обеспечения.
Datumbox Framework находится посередине двух решений. Он пытается поддерживать большое количество алгоритмов и написан на Java. Это означает, что его легче включить в производственный код, его легче настроить для уменьшения потребления памяти, и его можно использовать в системах реального времени. Наконец, несмотря на то, что в настоящее время Datumbox Framework может обрабатывать наборы данных среднего размера, я планирую расширить его для обработки наборов данных большого размера.
Насколько он стабилен?
Ранние версии фреймворка (до 0.3.x) были разработаны в августе и сентябре 2013 года и написаны на PHP (ага!). В мае и июне 2014 года (версии 0.4.x) фреймворк был переписан на Java и дополнен дополнительными функциями. Обе ветки были тщательно протестированы в коммерческих приложениях, включая Datumbox API. Текущая версия 0.5.0 кажется достаточно зрелой, чтобы быть выпущенной в качестве первой общедоступной альфа-версии фреймворка. При этом важно отметить, что некоторые функции фреймворка тестируются более тщательно, чем другие. Более того, поскольку эта версия является альфа-версией, вы должны ожидать кардинальных изменений в будущих выпусках.
Почему я написал это и почему я открываю исходный код?
Мое участие в машинном обучении и NLP восходит к 2009 году, когда я стал соучредителем WebSEOAnalytics.com. С тех пор я разрабатываю реализации различных алгоритмов машинного обучения для различных проектов и приложений. К сожалению, большинство первоначальных реализаций были очень специфичны для конкретной задачи, и их вряд ли можно было использовать в какой-либо другой задаче. В августе 2013 года я решил запустить Datumbox как личный проект и разработать фреймворк, предоставляющий инструменты для разработки моделей машинного обучения, ориентированных на области НЛП и классификации текстов. Моя цель состояла в том, чтобы создать структуру, которую можно было бы повторно использовать в будущем для быстрой разработки моделей машинного обучения, включив ее в проекты, требующие компонентов машинного обучения или предлагающие ее в качестве услуги (машинное обучение как услуга).
И вот я сейчас, спустя несколько строк кода, открываю исходный код проекта. Почему? Честный ответ заключается в том, что на данный момент я не планирую идти по пути «давайте построим новый стартап». В то же время я чувствовал, что хранить код на жестком диске на случай, если он мне понадобится в будущем, не имеет смысла. Поэтому единственно логичным выходом было открыть исходный код. 🙂
Документация?
Если вы читали предыдущие два абзаца, вы, вероятно, должны были предвидеть это. Поскольку фреймворк разрабатывался без учета того, что я буду делиться им с другими, документация плохая/отсутствует. Большинство классов и общедоступных методов не прокомментированы должным образом, и нет документа, описывающего архитектуру кода. К счастью, все имена классов говорят сами за себя, а платформа предоставляет тесты JUnit для каждого общедоступного метода и алгоритма, и их можно использовать в качестве примеров того, как использовать код. Я надеюсь, что с помощью сообщества мы создадим надлежащую документацию, так что я рассчитываю на вас!
Текущие ограничения и будущее развитие
Как и в любом программном обеспечении (и особенно в проектах с открытым исходным кодом в альфа-версии), Datumbox Machine Learning Framework имеет свои уникальные и очаровательные ограничения. Давайте покопаемся в них:
- Документация: Как упоминалось ранее, документация оставляет желать лучшего.
- Нет многопоточности: К сожалению, в настоящее время фреймворк не поддерживает многопоточность. Конечно, следует отметить, что не все алгоритмы машинного обучения можно распараллелить.
- Примеры кода: Поскольку фреймворк только что был опубликован, вы не можете найти в Интернете никаких примеров кода, кроме тех, которые предоставляются фреймворком в виде тестов JUnit.
- Структура кода: Создание надежной архитектуры для любого крупного проекта всегда является сложной задачей, не говоря уже о том, что вам приходится иметь дело со значительно отличающимися алгоритмами машинного обучения (обучение с учителем, обучение без учителя, алгоритмы уменьшения размерности и т. д.).
- Постоянство модели и большие коллекции данных: В настоящее время модели можно обучать и хранить либо в файлах на диске, либо в базах данных MongoDB. Чтобы иметь возможность обрабатывать большие объемы данных, необходимо изучить другие решения. Например MapDB кажется хорошим кандидатом для хранения данных и параметров во время обучения. Кроме того, важно удалить любые 3рд сторонние библиотеки, которые в настоящее время обрабатывают сохраняемость моделей и разрабатывают лучшее сухое и модульное решение.
- Новые алгоритмы/тесты/модели: Существует так много замечательных методов, которые в настоящее время не поддерживаются (особенно для анализа временных рядов).
К сожалению, все вышеперечисленное слишком много работы и так мало времени. Вот почему, если вы заинтересованы в проекте, сделайте шаг вперед и помогите мне с любым из вышеперечисленных. Кроме того, я хотел бы услышать от людей, которые имеют опыт работы с открытым исходным кодом средних и крупных проектов, и могут дать какие-либо советы о том, как ими управлять. Кроме того, я был бы признателен любому смельчаку, который осмелился бы заглянуть в код и задокументировать некоторые классы или общедоступные методы. И последнее, но не менее важное: если вы используете фреймворк для чего-то интересного, напишите мне или поделитесь им в блоге.
Наконец, я хотел бы поблагодарить моего любимого Кириаки за то, что терпел меня во время написания этого проекта, моего друга и супер-ниндзя-Java-разработчика. Элефтериос Бампалетакис за помощь в важных вопросах Java и вас за участие в проекте. Я с нетерпением жду ваших комментариев.