Nova estrutura de aprendizado de máquina de código aberto escrita em Java PlatoBlockchain Data Intelligence. Pesquisa vertical. Ai.

Novo framework de aprendizado de máquina de código aberto escrito em Java

Estou feliz em anunciar que o Datumbox Machine Learning Framework agora é de código aberto sob GPL 3.0 e você pode baixar seu código em Github!

O que é este framework?

A Estrutura de aprendizado de máquina Datumbox é uma estrutura de código aberto escrita em Java que permite o rápido desenvolvimento de modelos de aprendizado de máquina e aplicativos estatísticos. É o código que atualmente ativa a API Datumbox. O foco principal da estrutura é incluir um grande número de algoritmos de aprendizado de máquina e métodos estatísticos e ser capaz de lidar com conjuntos de dados de pequeno e médio porte. Embora o framework tenha como objetivo auxiliar no desenvolvimento de modelos de vários campos, ele também fornece ferramentas que são particularmente úteis em aplicativos de processamento de linguagem natural e análise de texto.

Que tipos de modelos / algoritmos são suportados?

O framework é dividido em várias camadas como Aprendizado de Máquina, Estatística, Matemática, Algoritmos e Utilitários. Cada um deles fornece uma série de classes que são usadas para treinar modelos de aprendizado de máquina. As duas camadas mais importantes são as camadas Estatísticas e Aprendizado de máquina.

A camada de estatísticas fornece classes para calcular estatísticas descritivas, realizar vários tipos de amostragem, estimar CDFs e PDFs a partir de distribuições de probabilidade comumente usadas e realizar mais de 35 testes paramétricos e não paramétricos. Esses tipos de classes são geralmente necessários durante a realização de análises explicativas de dados, amostragem e seleção de recursos.

A camada de Aprendizado de Máquina fornece classes que podem ser usadas em um grande número de problemas, incluindo Classificação, Regressão, Análise de Cluster, Modelagem de Tópico, Redução de Dimensionalidade, Seleção de Recursos, Ensemble Learning e Sistemas de Recomendação. Aqui estão alguns dos algoritmos suportados: LDA, Max Entropy, Naive Bayes, SVM, Bootstrap Aggregating, Adaboost, Kmeans, Hierarchical Clustering, Dirichlet Process Mixture Models, Softmax Regression, Ordinal Regression, Linear Regression, Stepwise Regression, PCA e muito mais.

Estrutura Datumbox VS Mahout VS Scikit-Learn

Tanto o Mahout quanto o Scikit-Learn são grandes projetos e ambos têm objetivos completamente diferentes. Mahout suporta apenas um número muito limitado de algoritmos que podem ser paralelizados e, portanto, usam a estrutura Map-Reduce do Hadoop para lidar com Big Data. Por outro lado, o Scikit-Learn suporta um grande número de algoritmos, mas não pode lidar com uma grande quantidade de dados. Além disso, é desenvolvido em Python, que é uma ótima linguagem para prototipagem e computação científica, mas não é a minha favorita para desenvolvimento de software.

O Datumbox Framework fica no meio das duas soluções. Tenta suportar um grande número de algoritmos e é escrito em Java. Isso significa que ele pode ser incorporado mais facilmente ao código de produção, pode ser mais facilmente ajustado para reduzir o consumo de memória e pode ser usado em sistemas de tempo real. Finalmente, embora atualmente o Datumbox Framework seja capaz de lidar com conjuntos de dados de tamanho médio, está dentro dos meus planos expandi-lo para lidar com conjuntos de dados de grande porte.

Quão estável é?

As primeiras versões do framework (até 0.3.x) foram desenvolvidas em agosto e setembro de 2013 e foram escritas em PHP (sim!). Durante maio e junho de 2014 (versões 0.4.x), a estrutura foi reescrita em Java e aprimorada com recursos adicionais. Ambos os ramos foram fortemente testados em aplicativos comerciais, incluindo a API Datumbox. A versão atual é 0.5.0 e parece madura o suficiente para ser lançada como a primeira versão alfa pública do framework. Dito isso, é importante notar que algumas funcionalidades do framework são testadas de forma mais completa do que outras. Além disso, como esta versão é alfa, você deve esperar mudanças drásticas nas versões futuras.

Por que o escrevi e por que abro o código?

Meu envolvimento com Aprendizado de Máquina e PNL remonta a 2009, quando co-fundei o WebSEOAnalytics.com. Desde então venho desenvolvendo implementações de diversos algoritmos de aprendizado de máquina para diversos projetos e aplicações. Infelizmente, a maioria das implementações originais era muito específica para o problema e dificilmente poderia ser usada em qualquer outro problema. Em agosto de 2013 decidi iniciar o Datumbox como um projeto pessoal e desenvolver um framework que forneça as ferramentas para o desenvolvimento de modelos de aprendizado de máquina com foco na área de PNL e Classificação de Textos. Meu objetivo era construir um framework que pudesse ser reutilizado no futuro para desenvolver rapidamente modelos de aprendizado de máquina, incorporando-o em projetos que requerem componentes de aprendizado de máquina ou os ofereçam como serviço (Machine Learning as a Service).

E aqui estou eu agora, várias linhas de código depois, abrindo o código do projeto. Porque? A resposta honesta é que, neste ponto, não está em meus planos passar por uma jornada de “vamos construir uma nova start-up”. Ao mesmo tempo, senti que não fazia sentido manter o código em meu disco rígido caso eu precisasse no futuro. Portanto, a única coisa lógica a fazer era abrir o código-fonte. 🙂

Documentação?

Se você leu os dois parágrafos anteriores, provavelmente já deve ter percebido isso. Como o framework não foi desenvolvido pensando que eu iria compartilhá-lo com outras pessoas, a documentação é pobre / inexistente. A maioria das classes e métodos públicos não são comentados adequadamente e não há nenhum documento descrevendo a arquitetura do código. Felizmente, todos os nomes de classe são autoexplicativos e a estrutura fornece testes JUnit para cada método e algoritmo público e podem ser usados ​​como exemplos de como usar o código. Espero que com a ajuda da comunidade possamos construir uma documentação adequada, então conto com você!

Limitações atuais e desenvolvimento futuro

Como em todo software (e especialmente nos projetos de código aberto na versão alfa), o Datumbox Machine Learning Framework vem com suas próprias e adoráveis ​​limitações. Vamos investigá-los:

  1. Documentação: Conforme mencionado anteriormente, a documentação é pobre.
  2. Sem multithreading: Infelizmente, a estrutura atualmente não oferece suporte a multithreading. É claro que devemos observar que nem todos os algoritmos de aprendizado de máquina podem ser paralelizados.
  3. Exemplos de código: Como a estrutura acabou de ser publicada, você não pode encontrar nenhum exemplo de código na web além dos fornecidos pela estrutura na forma de testes JUnit.
  4. Estrutura do código: Criar uma arquitetura sólida para qualquer grande projeto é sempre desafiador, muito menos quando você tem que lidar com algoritmos de Aprendizado de Máquina que diferem significativamente (aprendizado supervisionado, aprendizado não supervisionado, algoritmos de redução de dimensionalidade etc.).
  5. Persistência do modelo e grandes coleções de dados: Atualmente, os modelos podem ser treinados e armazenados em arquivos em disco ou em bancos de dados MongoDB. Para ser capaz de lidar com uma grande quantidade de dados, outras soluções devem ser investigadas. Por exemplo MapDB parece um bom candidato para armazenar dados e parâmetros durante o treinamento. Além disso, é importante remover quaisquer 3rd bibliotecas partidárias que atualmente lidam com a persistência dos modelos e desenvolvem uma solução mais seca e modular.
  6. Novos algoritmos /testes / modelos: Existem tantas técnicas excelentes que atualmente não são suportadas (especialmente para análise de séries temporais).

Infelizmente, todos os itens acima são muito trabalhosos e há tão pouco tempo. É por isso que se você estiver interessado no projeto, dê um passo à frente e me ajude com qualquer uma das opções acima. Além disso, adoraria ouvir de pessoas que têm experiência em projetos de médio-grande porte de código aberto e poderiam fornecer dicas sobre como gerenciá-los. Além disso, eu ficaria grato a qualquer pessoa corajosa que se atrevesse a examinar o código e documentar algumas classes ou métodos públicos. Por último, mas não menos importante, se você usar a estrutura para algo interessante, por favor, escreva-me ou compartilhe em uma postagem do blog.

Finalmente, gostaria de agradecer ao meu amor Kyriaki por me tolerar enquanto escrevia este projeto, meu amigo e super-ninja-desenvolvedor Java Eleftherios Bampaletakis por ajudar em questões importantes do Java e por se envolver no projeto. Estou ansioso para seus comentários.

Carimbo de hora:

Mais de Caixa de dados