Já pensou em desenvolver um projeto que realiza buscas textuais de forma mais inteligente? Não estamos falando de busca por palavra-chave, mas sim de utilizar um modelo que compreende o significado do que estamos buscando e traz os textos mais relacionados a ele.
Tem curiosidade? Vamos aprender sobre similaridade de sentenças.
Meu nome é Mirla Costa e sou instrutora da Alura. Estarei acompanhando você durante todo o processo de aprendizado.
Audiodescrição: Mirla se identifica como uma mulher branca. Possui cabelos cacheados e pretos até abaixo dos ombros, amarrados em um rabo de cavalo baixo. No rosto, usa óculos de grau com armação redonda. No corpo, usa uma camiseta preta com uma estampa da escola de dados. Ao fundo, uma parede lisa iluminada em tons de verde e azul, com uma prateleira pequena de cada lado, preenchidas de livros e outros objetos.
Neste curso, atuaremos como cientistas de dados em uma loja online e precisaremos desenvolver uma aplicação que auxilie o time de produto a encontrar as reviews que mais se relacionam com o tema de interesse que estão estudando.
Durante todo o projeto, utilizaremos a linguagem Python e bibliotecas como Pandas, NLTK, RE e até TensorFlow para trabalhar com os dados e construir nossos modelos que encontrarão essas reviews mais similares.
Para um aprendizado bem estruturado, recomendamos ter um conhecimento sólido de Python e também das bibliotecas Pandas, NLTK e RE. Além disso, é importante já ter estudado sobre limpeza e tratamento de dados de texto.
Vamos começar?
Somos uma equipe de cientistas de dados que trabalha em uma loja de departamento online, a Zoop. Recebemos uma quantidade significativa de reviews de clientes que compraram em loja e avaliaram o serviço.
A partir disso, o time de produto, composto pelas pessoas product managers (PMs), solicitou ajuda para analisar de forma mais rápida o que a clientela comenta sobre determinados temas, como:
A ideia é que eles consigam encontrar as reviews mais relacionadas com o tema de interesse, para assim compreender rapidamente as percepções da clientela, identificando pontos de melhoria na loja, produtos e serviços oferecidos.
Nossa tarefa é desenvolver uma aplicação que permita ao time de produto encontrar mais facilmente essas reviews. Assim, eles conseguirão identificar de forma ágil os feedbacks relacionados a esse tema.
Como as reviews envolvem dados textuais, é certo que aplicaremos técnicas de NLP (Processamento de Linguagem Natural) para resolver esse problema. Para saber que técnicas utilizar, precisamos conhecer nossos dados e entender, ou mapear, quais problemas podemos atacar e resolver.
Vamos acessar o ambiente do Google Colab para conhecer os dados. Utilizaremos o mesmo notebook durante todo o projeto do curso. Aconselhamos baixá-lo por meio de uma atividade desta aula, para que possamos construir este projeto juntos.
Ao acessar o notebook pelo Colab, na primeira célula da seção "Aula 1", já podemos identificar um link de acesso aos dados. Esse link de acesso estará dentro do seu notebook e será disponibilizado nas atividades desta aula.
url = 'https://raw.githubusercontent.com/Mirlaa/NLP-trabalhando-similaridade-sentencas/refs/heads/main/reviews_zoop.csv'
Vamos executar essa célula para salvar a URL de acesso a esses dados. Após salvar, podemos acessar a célula seguinte e importar esses dados para o ambiente. Para isso, utilizaremos o Pandas, adicionando o comando import pandas as pd
.
Em seguida, pularemos uma linha na mesma célula e criaremos um data frame chamado dados
, recebendo pd.read_csv(url)
. Por fim, para visualizar os dados em formato de tabela, basta digitar dados
na próxima linha.
import pandas as pd
dados = pd.read_csv(url)
dados
Ao executar a célula acima, temos os seguintes dados:
Linha | nota_review | review |
---|---|---|
0 | 5 | Recebi bem antes do prazo estipulado. |
1 | 5 | Parabéns lojas Zoop adorei comprar pela Intern… |
2 | 4 | aparelho eficiente. no site a marca do aparelh… |
3 | 4 | Mas um pouco ,travando…pelo valor ta Boa.\r\n |
4 | 5 | Vendedor confiável, produto ok e entrega antes… |
… | … | … |
39457 | 5 | Entregou dentro do prazo. O produto chegou em … |
39458 | 3 | O produto não foi enviado com NF, não existe v… |
39459 | 5 | Excelente mochila, entrega super rápida. Super… |
39460 | 1 | Solicitei a compra de uma capa de retrovisor c… |
39461 | 1 | meu produto chegou e ja tenho que devolver, po… |
Focaremos apenas nos dados textuais de review, pois nossa análise não se concentrará em notas, mas sim nos comentários e feedbacks.
Vamos observar as características dos dados. Na célula abaixo da tabela, executaremos o seguinte comando para observar uma review:
dados['review'][1]
Retorno do Colab:
'Parabéns lojas Zoop adorei comprar pela Internet seguro e prático Parabéns a todos feliz Páscoa'
É possível constatar que não temos um padrão de letras maiúsculas ou minúsculas dentro dos textos. Também observamos acentos, como em "parabéns" e "prático".
Na célula seguinte, vamos observar a review 8:
dados['review'][8]
Retorno do Colab:
'A compra foi realizada facilmente.\r\nA entrega foi efetuada muito antes do prazo dado.\r\nO produto já começou a ser usado e até o presente,\r\nsem problemas.'
Nesse resultado, encontramos mais problemas: pontuações, os símbolos "\n" e "\r" indicando quebra de linha, letras maiúsculas e pontos.
Na célula seguinte, consultaremos também a review 11:
dados['review'][11]
Retorno do Colab:
'Sempre compro pela Internet e a entrega ocorre antes do prazo combinado, que acredito ser o prazo máximo. No o prazo máximo já se esgotou e ainda não recebi o produto.'
Nesse caso, é válido ler o texto, pois é uma review negativa. Ao contrário da review 1, que parabeniza a loja, e da review 8, que traz pontos positivos, a review 11 relata que o prazo máximo se esgotou e o produto não foi recebido.
Por fim, avaliaremos a review 18 na próxima célula:
dados['review'][18]
Retorno do Colab:
'otimo vendedor chegou ate antes do prazo , adorei o produto'
Esta review não tem acentos e apresenta apenas uma vírgula.
Temos uma grande variação nas características dos textos enviados pela clientela. Qualquer pessoa pode digitar, então é esperado que não haja um padrão textual. Precisamos pensar em técnicas de NLP para tratar esses dados.
Nosso desafio consiste em encontrar as reviews mais relacionadas de acordo com o tema. Observando os textos, percebemos que uma solução apenas com palavras-chave não será suficiente. Por exemplo, se uma pessoa PM buscar reviews relacionadas ao tema "entrega", clientes podem dizer que a entrega foi rápida, que o produto chegou rapidamente, que o pacote foi entregue dentro do prazo ou que não receberam o produto.
Ou seja, as reviews podem envolver temas relacionados à entrega, mas sem necessariamente conter a palavra "entrega". Isso é um problema se quisermos construir uma solução com buscas por palavras-chave.
Isso nos traz a oportunidade de construir uma busca mais inteligente. Podemos pensar em uma técnica chamada similaridade semântica, que permite encontrar reviews mais similares de acordo com o contexto e a semântica das frases, não apenas por termos iguais como "entrega" ou "chegou". Com essa técnica, capturaremos a essência dos comentários sobre a entrega.
No próximo vídeo, veremos como aplicar essa técnica nos dados.
Buscar por similaridades entre palavras é essencial para construir nosso projeto, pois isso permitirá que as reviews similares entre si e que têm temas semelhantes possam ser mostradas sem a necessidade de repetir termos. Verificaremos apenas através do contexto e da semântica o que essas reviews trazem.
Uma opção para encontrar essa similaridade é utilizar o Word2Vec, pois ele consegue relacionar palavras através da semelhança entre o contexto e a semântica, mesmo não sendo escritas da mesma forma. No caso, ele consegue identificar a proximidade e similaridade entre a palavra "entrega" e as palavras "chegou" ou "chegada". Ele entende o contexto em que as palavras estão inseridas.
O Word2Vec é uma técnica de aprendizado profundo que transforma palavras em vetores numéricos dentro de um espaço vetorial. Assim, palavras mais semelhantes dentro do contexto têm seus vetores mais próximos.
Conseguimos encontrar a similaridade entre essas palavras e identificar aquelas que são mais similares entre si.
Para saber mais sobre o Word2Vec e a questão da semelhança entre vetores, recomendamos conferir as atividades desta aula.
Para utilizar o Word2Vec, primeiro precisamos tokenizar palavras, ou seja, enviar as palavras em formato de tokens para o modelo. Para aplicar a tokenização nas palavras das reviews, precisamos de funções que realizem essa tarefa, obtidas utilizando a biblioteca NLTK. Vamos voltar ao notebook para começar a aplicar esse código.
Primeiro, vamos construir a função de tokenização. Acessando a primeira célula da seção "Similaridade entre as palavras", importaremos a função word_tokenize
da biblioteca NLTK com o comando abaixo:
from nltk.tokenize import word_tokenize
Na próxima linha, especificaremos que a língua é português, criando outra função que acessará esta. Para isso, importaremos o partial
da biblioteca Functools.
Pulando uma linha, criaremos a função de tokenização, chamada word_tokenize_pt
, onde "pt" especifica o idioma português. Ele receberá o partial()
, e entre os parênteses, especificaremos o word_tokenize
e a língua portuguesa, com language = 'portuguese'
.
from nltk.tokenize import word_tokenize
from functools import partial
word_tokenize_pt = partial(word_tokenize, language = 'portuguese')
Executaremos o código dessa célula para criar essa função.
Na próxima célula, executaremos o carregamento do modelo que aplicará a tokenização, também da biblioteca NLTK:
import nltk
nltk.download('punkt')
Agora podemos criar e treinar o Word2Vec. Para isso, utilizaremos a biblioteca Gensim importando-a na célula seguinte:
from gensim.models import Word2Vec
Pulando uma linha, criaremos o modelo
, recebendo o Word2Vec()
. Entre as chaves deste, especificaremos os parâmetros abaixo:
sentences = dados['review'].apply(word_tokenize_pt)
com os dados tokenizados para verificar as sentenças a serem aprendidas;vector_size=100
para atribuir o tamanho 100 ao vetor criado para cada palavra;min_count=1
para não ignorar nenhuma palavra;window=5
para definir a "janela" (distância) de 5 entre a palavra atual e a prevista pelo modelo;workers=1
para definir a quantidade de workers (CPUs ou GPUs);seed=45
com a semente no valor 45.Os parâmetros workers
e seed
servem apenas para garantir que o resultado do seu código e o do vídeo sejam iguais.
from gensim.models import Word2Vec
modelo = Word2Vec(sentences = dados['review'].apply(word_tokenize_pt),
vector_size=100, min_count=1, window=5,
workers=1, seed=45)
Por fim, executaremos o código da célula para treinar o modelo.
Com o modelo treinado, conseguimos encontrar as palavras mais similares a partir de um determinado tema. Iniciaremos a busca com o tema "entrega", adicionando o comando modelo.wv.most_similar('entrega')
na próxima célula, onde wv
significa Word2Vec e entre parênteses, adicionamos o termo a ser pesquisado:
modelo.wv.most_similar('entrega')
Após a execução da célula, observamos no retorno palavras relacionadas como "entregue", "compra", "chegou", "entregou", que se relacionam com "entrega" em contexto e semântica.
Retorno:
[('Entrega', 0.7526029944419861),
('entregue', 0.7109662294387817),
('compra', 0.6985824108123779),
('chegou', 0.6755236983299255),
('entregou', 0.6542965769767761),
('envio', 0.6249788403511047),
('cadastrado', 0.6161651611328125),
('Chegou', 0.6127404570579529),
('preparar', 0.6111896634101868),
('mercadoria', 0.6036772727966309)]
Podemos testar com a palavra "vendedor" na célula seguinte:
modelo.wv.most_similar('vendedor')
Retorno:
[('atendimento', 0.8607712388038635),
('serviço', 0.8035672307014465),
('fornecedor', 0.7637899518013),
('veiculo', 0.7295382022857666),
('produto', 0.729019284248352),
('processo', 0.710643470287323),
('parceiro', 0.702766478061676),
('cumpriu', 0.6967913508415222),
('trabalho', 0.6896953582763672),
('cumpriram', 0.6866145133972168)]
Por fim, testaremos com "produto" na próxima célula:
modelo.wv.most_similar('produto')
Retorno:
[('relógio', 0.7635505199432373),
('pedido', 0.7503548860549927),
('vendedor', 0.729019284248352),
('endereço', 0.7101667523384094),
('Produto', 0.6988608837127686),
('mesmo', 0.6944952607154846),
('tempo', 0.678637683391571),
('Mas', 0.673784077167511),
('porém', 0.6504761576652527),
('mercadoria', 0.6491450667381287)]
Embora o Word2Vec traga palavras similares, ele não é tão eficaz para solucionar nosso problema, pois retorna apenas palavras semelhantes. O ideal é retornar sentenças ou reviews mais semelhantes com o tema, e não apenas palavras. Vamos explorar isso no próximo vídeo.
O curso NLP: trabalhando com similaridade de sentenças possui 143 minutos de vídeos, em um total de 47 atividades. Gostou? Conheça nossos outros cursos de Machine Learning em Data Science, ou leia nossos artigos de Data Science.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.