Technical
Detecção de duplicados em dados textuais
Beatriz Santos · 25 de outubro de 2022
Um caso de uso comum em várias indústrias é o desenvolvimento de sistemas capazes de detectar semelhança entre pares de objetos, tanto imagens como textos. Por exemplo, a detecção de duplicados em marketplaces, ou sistemas de recomendação que mostram objetos semelhantes aos pesquisados pelos utilizadores, podem beneficiar destes sistemas. Também são úteis para detectar plágio em teses ou artigos, dado o volume massivo de publicações ao longo dos anos. Assim, sendo o texto uma modalidade de dados tão disseminada, a capacidade de detectar duplicados em textos é uma tarefa crítica em Machine Learning.
Mas como desenvolvemos estes sistemas? Um humano consegue facilmente perceber a semelhança entre duas frases ditas de formas diferentes. Por exemplo, as frases "Ela sobreviveu" e "Ela não morreu" têm o mesmo significado. Um algoritmo de similaridade textual deve ser capaz de atribuir uma taxa de semelhança muito elevada. Para alcançar isto, Machine Learning é o caminho correto, mas não é assim tão simples, devido às complexidades do Natural Language Processing (NLP).
Este artigo descreve o desenvolvimento de duas ferramentas que criei sob a orientação de Pedro Dias, Data Scientist na NILG.AI, durante o meu estágio curricular.
Processamento de Linguagem Natural e modelação de texto
NLP é um subcampo da inteligência artificial que se dedica à interação entre computadores e linguagem humana, particularmente sobre como programar computadores para processar e analisar grandes volumes de dados em linguagem natural.
A modelação de texto foi a base principal do meu trabalho. Consiste em analisar dados textuais para identificar um conjunto de palavras de uma coleção de documentos que melhor represente a informação contida nessa coleção.
Existem naturalmente muitas formas de realizar extração de características a partir de textos, mas o caminho escolhido foi utilizar Word2Vec e Bag-of-N-Gram.
Word2Vec é um método para obter word embeddings, um termo utilizado para representar palavras num espaço vetorial para análise textual. Uma vez treinado, consegue detectar palavras sinónimas ou sugerir palavras adicionais para uma frase incompleta.
Bag-of-N-Gram é uma técnica que conta quantas vezes um N-Gram aparece num documento. Um N-Gram é uma sequência de N palavras, onde N é um número entre 1 e infinito. Por exemplo, na frase "Olá vizinho porta ao lado", "Olá vizinho" é um 2-Gram enquanto "Olá vizinho porta ao lado" é um 4-Gram.
Detecção de Duplicados em Texto com Machine Learning
Uma das ferramentas desenvolvidas tinha como objetivo obter a semelhança entre dois textos inseridos pelo utilizador. Para tal, foi criada uma representação abstrata destes textos utilizando diferentes métodos. O passo seguinte consistiu em calcular a distância entre estas representações abstratas, gerando a probabilidade de serem semelhantes. Abaixo apresenta-se um esquema para melhor compreender estes passos.
A outra ferramenta desenvolvida permitia ao utilizador inserir um texto e retornava os 10 textos mais semelhantes de um banco de dados. Este banco de dados pertence a um dataset do Quora Question Pairs.
Foram utilizadas três abordagens distintas no desenvolvimento do produto: uma não supervisionada, utilizando Word2Vec e Bag-of-N-Gram para a representação abstrata; uma supervisionada, utilizando Logistic Regression; e outra que simula situações reais, explicada mais adiante.
Todos estes métodos utilizaram o dataset mencionado acima, representado na figura seguinte, para treinar o modelo.
Simulação de situações reais
Nesta abordagem, o dataset inicial apresenta uma particularidade. A segunda pergunta é substituída por uma frase sinónima, mas apenas nas linhas que indicam que as perguntas são duplicados. Isto simula o cenário onde duas frases com palavras diferentes mas semelhantes têm o mesmo significado, e situações onde não existem dados anotados para os duplicados, mas conseguimos ainda assim treinar um modelo.
Desenvolvimento de uma API REST e uma Aplicação Web
Adicionalmente, foram criados dois serviços para disponibilizar a ferramenta que recupera a semelhança entre dois textos e a que, dado um texto, retorna os textos mais semelhantes de um banco de dados. Estes serviços foram implementados para cada método. Ao integrar estes modelos numa API REST (backend) e numa interface Dash (frontend), o resultado final encontra-se neste dashboard.
Automação da implementação
Isto foi realizado para disponibilizar versões sem dificuldade e de forma muito mais suave na entrega de produtos na indústria. Para colocar os serviços mencionados em produção utilizando Terraform, foram criadas uma máquina EC2 e um repositório ECR para armazenar as imagens docker de cada interface.
Ao gerar a imagem docker num computador e enviá-la para o repositório ECR, basta aceder à instância EC2 gerada e obter estas imagens a partir do repositório ECR. A imagem abaixo pretende clarificar este processo.
Todos estes passos estão agregados num script de implementação para facilitar a disponibilização para um eventual cliente.
Conclusões sobre o meu estágio: Detecção de duplicados em dados textuais
Considero que o trabalho em detecção de duplicados em texto foi executado com sucesso, embora acredite que poderia ter aumentado a precisão e fiabilidade das ferramentas desenvolvidas com mais tempo disponível.
Esta experiência permitiu-me participar num projeto com grande utilidade para empresas ou entidades privadas, como detectar dados duplicados para eliminação, ou detectar plágio.
No geral, senti que foi um estágio que me aproximou mais do mundo dos negócios e me proporcionou muito conhecimento na área de machine learning, especialmente sobre NLP e aprendizagem supervisionada e não supervisionada. Também me forneceu mais conhecimento sobre como realizar uma implementação, não focando apenas na área de inteligência artificial.
Por último, gostaria de agradecer ao meu excelente orientador da NILG.AI, que esteve sempre disponível para ajudar e ensinar ao longo do semestre.
