Clusterização do domínio de projetos de software livre


(Felipe Fronchetti) #1

Olá pessoal, tudo certo?

Sou da Engenharia de Software e estou com um problema que acredito poder ser resolvido com NLP.
Nós temos um dataset com ~450 projetos de software livre. Estes projetos contém uma diversidade de informações, incluindo, em especial, a descrição de cada um deles.

Eu gostaria de fazer algo como a clusterização destas descrições por similaridade, pois acredito que descrições similares podem pertencer a um mesmo domínio de aplicação.

No momento nós estamos fazendo o registro do domínio de aplicação de cada projeto manualmente. Por exemplo:
Nós abrimos um projeto, analisamos qualitativamente a descrição do projeto (e até o website as vezes), e classificamos ele como um software de aplicação, de sistema, como uma biblioteca, framework, etc.

Eu estou começando em NLP e preciso de algumas dicas de como fazer isso.
Clusterização é o caminho correto? É possível agrupar projetos pela similaridade de suas descrições? Como vocês fariam para atribuir automaticamente o domínio de aplicação de um projeto, com base na descrição?

Agradeço desde já a contribuição de todos.


(Christian S. Perone) #2

Oi @fronchetti, se você quer usar clustering para visualização apenas ou para entender melhor os dados, eu faria uma baseline bem simples:

  1. Criaria embeddings das descrições dos projetos usando algum embedding de sentença (InferSent, Word2Vec bow, etc). Se forem descrições em inglês, fica tudo mais fácil porque já tem bastante modelo pré-treinado, então dependendo da língua você vai provavelmente escolher a técnica que fica mais prático;
  2. Rodaria um t-SNE para visualizar se existe uma formação de clusters nesse espaço dos embeddings dos projetos;
  3. Rodaria um clustering simples como k-means ou spectral;

Agora, se o teu objetivo é de fato classificar esses projetos automaticamente nas classes que você citou (software de aplicação, sistema, etc), você certamente vai ter resultados melhores se manualmente gerar algumas anotações e treinar um modelo simples para classificar os embeddings das sentenças. Aí para isto existem várias manerias, uma maneira simples é treinar um logistic regression com as features dos embeddings da descrição.

Se você tiver mais dados além da descrição do projeto, como por exemplo: linguagem em que foi desenvolvido, etc, você pode modelar todas estas variáveis também juntamente no teu modelo além de usar os embeddings da descrição do projeto.

Enfim, tudo depende de quais informações você tem disponível e qual é o teu objetivo, se é só explorar pra visualizar ou se é de fato categorizar os projetos. Se você tiver mais detalhes ou mais dúvidas é só postar aí !

Abração, espero ter ajudado em algo.


(Felipe Fronchetti) #3

A minha ideia é de fato classificar o domínio ao qual estes projetos pertencem @christian.perone.
Eu tenho conhecimento sobre algoritmos de aprendizagem, mas minha dúvida era de fato como utilizar a descrição destes projetos a favor do meu classificador, visto que eu precisaria “conhecer o conteúdo” das descrições, e não simplesmente contar a quantidade de caracteres que elas tem ou coisa do tipo.

Vou ler sobre embeddings e tentar aplicar isso em um classificador incluindo outras features (como as linguagens que você mencionou).

Quaisquer tutoriais são bem-vindos!

Obrigado mesmo pela ajuda!