Categorizando Comentários de Código com Aprendizado de Máquina
Um estudo sobre a eficácia de modelos de aprendizado de máquina na classificação de comentários de código.
― 7 min ler
Índice
Comentários de código são super importantes para o desenvolvimento de software. Eles ajudam os programadores a entender o que o código faz e como ele funciona. Normalmente, os comentários são escritos numa linguagem mais do dia a dia, o que significa que podem expressar informações que não ficam claras só de olhar pro código. Por exemplo, os comentários podem explicar por que um pedaço específico de código foi escrito de uma certa forma, ou podem fornecer detalhes importantes sobre quem trabalhou no código ou anotações especiais sobre isso.
Mas, conforme a quantidade de código aumenta, pode ser um saco pros desenvolvedores lerem os comentários e acharem as informações que precisam. É aí que pode ser útil classificar os comentários em diferentes categorias automaticamente. Fazendo isso, os desenvolvedores conseguem encontrar comentários relevantes mais rápido, o que resulta em uma melhor qualidade de código e menos frustração.
Propósito do Estudo
Esse estudo analisa como diferentes modelos de aprendizado de máquina conseguem categorizar comentários de código. Queríamos ver se esses modelos podiam identificar de forma confiável diferentes tipos de comentários em três linguagens de programação: Java, Python e Pharo.
Construímos um total de 19 Classificadores binários, que são ferramentas que determinam se um comentário pertence a uma certa categoria ou não. Cada modelo foi testado pra ver como se saiu. Os resultados mostraram que um modelo, chamado Classificador Linear de Vetores de Suporte, teve o melhor desempenho médio.
Metodologia
Conjunto de Dados
Pra fazer esse estudo, usamos um conjunto de dados com 6.738 comentários de código. Esses comentários vieram de vários projetos open-source escritos em Java, Python e Pharo. O conjunto de dados foi preparado por pesquisadores anteriores que categorizavam os comentários em grupos.
Para Java, tinha 2.418 comentários distribuídos em sete categorias: resumo, ponteiro, depreciação, justificativa, propriedade, uso e expandir. Já os comentários de Pharo incluíam 1.765 entradas divididas em categorias como mensagens-chave, intenção, referências de classe, exemplos, pontos-chave de implementação, responsabilidades e colaboradores. Por fim, Python tinha 2.555 comentários classificados em cinco categorias: resumo, parâmetros, uso, notas de desenvolvimento e expandir.
Pré-processamento de Texto
Comentários de código podem conter vários elementos que podem confundir um modelo, como caracteres especiais ou números. Pra facilitar a classificação dos comentários pelos modelos, limpamos o texto. Isso envolveu algumas etapas:
- Remover espaços indesejados do começo e do fim dos comentários.
- Expandir contrações, como mudar "I'm" para "I am."
- Remover caracteres especiais que não são letras ou números.
- Deletar palavras de um único caractere.
- Converter todo o texto pra letras minúsculas.
- Remover palavras comuns que não acrescentam muito significado, conhecidas como stopwords.
- Alterar palavras para suas formas básicas usando um processo chamado stemming.
- Substituir números por um token chamado NUM.
- Substituir comentários vazios por um token especial chamado EMT.
Filtrando Comentários por Categoria
Como cada classificador foi construído pra uma categoria específica, organizamos os comentários nas categorias relevantes pra cada linguagem de programação. Isso permitiu que a gente focasse em treinar modelos pra reconhecer comentários que se encaixam em um grupo específico.
Treinamento e Teste dos Modelos
Pra ver como os modelos funcionavam, dividimos os comentários filtrados em dois grupos: treinamento e teste. Usamos os dados de treinamento pra ensinar os modelos a identificar categorias de comentários e os dados de teste pra ver como eles se saíam em exemplos não vistos.
Convertendo Texto em Números
Modelos de aprendizado de máquina só conseguem trabalhar com números, então transformamos o texto limpo em características numéricas. Usamos um método chamado Frequência de Termo-Frequência Inversa de Documento (TF-IDF) pra isso. O TF-IDF ajuda a medir quão importante cada palavra é no contexto dos comentários.
Treinamos os modelos usando essa representação numérica dos comentários pra facilitar a classificação.
Lidando com Desequilíbrio de Classes
No nosso conjunto de dados, algumas categorias de comentários tinham muitos mais exemplos que outras. Esse desequilíbrio poderia fazer com que os modelos ficassem tendenciosos em relação às classes maiores. Pra resolver isso, usamos uma técnica chamada Oversampling aleatório. Essa técnica cria amostras extras pras classes menores, facilitando pro modelo aprender com elas.
Treinamento e Ajuste do Modelo
Analisamos oito diferentes algoritmos de aprendizado de máquina pra encontrar o melhor pra nossa tarefa. Esses incluíam:
- Naive Bayes: Duas versões conhecidas como Multinomial e Bernoulli.
- Máquinas de Vetores de Suporte: Especificamente, o Classificador Linear de Vetores de Suporte.
- Árvores de Decisão e Florestas Aleatórias: Ambos baseados em modelos em forma de árvore pra tomar decisões.
- K-Vizinhos mais Próximos: Um método que observa os exemplos mais próximos pra classificar uma nova instância.
- Regressão Logística: Um modelo simples que é bom pra classificação binária.
- Perceptron de Múltiplas Camadas: Um tipo de rede neural artificial.
Pra cada um desses algoritmos, fizemos uma técnica chamada grid search pra achar as melhores configurações. Isso envolveu testar diferentes combinações de parâmetros pra ver qual funcionava melhor.
Fazendo Previsões
Depois que treinamos e ajustamos os melhores modelos pra cada algoritmo, usamos eles pra prever as categorias dos comentários no conjunto de dados de teste. As previsões foram salvas pra avaliação.
Avaliando o Desempenho do Modelo
Pra avaliar como nossos modelos se saíram, analisamos três métricas principais: precisão, recall e F1 score. Essas métricas ajudaram a julgar quão efetivamente cada modelo classificou os dados de teste.
Resultados
Depois de avaliar os classificadores, descobrimos que nenhum modelo único teve o melhor desempenho em todas as categorias. No entanto, o Classificador Linear de Vetores de Suporte teve a maior média de F1 score, indicando sua eficácia geral em categorizar comentários de código. Ele foi particularmente bem com os comentários de Java, alcançando precisão total na categoria de propriedade.
Os resultados sugerem que modelos mais simples, que focam em limites claros entre categorias, podem ter um desempenho melhor nesse contexto do que abordagens mais complexas.
Preocupações com a Validade
Embora nosso estudo tenha testado vários algoritmos, existem muitos outros métodos de classificação disponíveis que não foram explorados. Além disso, tentar diferentes técnicas de pré-processamento ou características pode resultar em resultados diferentes e possivelmente melhores.
Conclusão e Direções Futuras
Esse estudo analisou como diferentes modelos de aprendizado de máquina podem classificar comentários de código em categorias específicas. Embora tenhamos descoberto que nenhum modelo se destacou em todas as categorias, o Classificador Linear de Vetores de Suporte se destacou como o melhor em média.
Ainda há muito trabalho a ser feito nessa área. Estudos futuros poderiam explorar modelos mais avançados, como técnicas de deep learning que usam mecanismos de atenção. Esses modelos podem superar os mais simples usados no nosso estudo. Além disso, poderíamos investigar diferentes formas de representar os comentários, indo além do TF-IDF pra outros métodos como Word2Vec.
Continuando a refinar e avaliar esses modelos, esperamos melhorar a organização dos comentários de código, facilitando o acesso rápido e eficaz das informações que os desenvolvedores precisam.
Título: Performance Comparison of Binary Machine Learning Classifiers in Identifying Code Comment Types: An Exploratory Study
Resumo: Code comments are vital to source code as they help developers with program comprehension tasks. Written in natural language (usually English), code comments convey a variety of different information, which are grouped into specific categories. In this study, we construct 19 binary machine learning classifiers for code comment categories that belong to three different programming languages. We present a comparison of performance scores for different types of machine learning classifiers and show that the Linear SVC classifier has the highest average F1 score of 0.5474.
Autores: Amila Indika, Peter Y. Washington, Anthony Peruma
Última atualização: 2023-03-02 00:00:00
Idioma: English
Fonte URL: https://arxiv.org/abs/2303.01035
Fonte PDF: https://arxiv.org/pdf/2303.01035
Licença: https://creativecommons.org/licenses/by/4.0/
Alterações: Este resumo foi elaborado com a assistência da AI e pode conter imprecisões. Para obter informações exactas, consulte os documentos originais ligados aqui.
Obrigado ao arxiv pela utilização da sua interoperabilidade de acesso aberto.