A biblioteca Sentence Transformers é uma poderosa ferramenta baseada em modelos Transformer, desenvolvida para gerar representações numéricas (chamadas de embeddings) para textos. Essas representações capturam o significado semântico das sentenças, facilitando diversas aplicações de Processamento de Linguagem Natural (NLP), como busca semântica, classificação de textos, análise de similaridade, entre outras.
Os embeddings gerados pela Sentence Transformers são vetores que representam o significado de sentenças ou documentos em um espaço multidimensional. A proximidade desses vetores reflete o grau de similaridade semântica entre os textos originais.
Por que usar Sentence Transformers?
- Eficiência: A biblioteca é otimizada para criar embeddings rapidamente.
- Flexibilidade: Suporta diversas arquiteturas e modelos pré-treinados, incluindo versões multilingues.
- Aplicações amplas: Pode ser usada para tarefas como análise de similaridade, agrupamento de sentenças e busca semântica.
Agora que entendemos a biblioteca, vamos explorar como usá-la em uma aplicação específica. Escolhemos aqui a tarefa de Análise de Sentimento.
O que é Análise de Sentimento?
A análise de sentimento é uma técnica de NLP que busca identificar a emoção ou opinião expressa em um texto. Geralmente, é usada para classificar textos em categorias como positivo, negativo ou neutro. Essa técnica tem aplicações práticas em diversas áreas:
- Mídias sociais: Análise de reações a campanhas publicitárias.
- E-commerce: Avaliação de opiniões sobre produtos.
- Assistência ao cliente: Identificação de sentimentos em mensagens para priorizar atendimentos.
Embora a análise de sentimento geralmente use classificadores específicos, embeddings semânticos também podem ser úteis. Eles permitem analisar quão próximo o sentimento de uma sentença está de exemplos positivos ou negativos conhecidos. Isso é feito através da similaridade de textos, como veremos nos próximos exemplos.
Calculando a Similaridade de Sentenças com Sentence Transformers
A similaridade semântica entre textos mede o quão próximos os significados das sentenças são. A biblioteca Sentence Transformers facilita esse cálculo, usando a distância entre os vetores de embeddings das sentenças. O método mais comum para isso é o cosseno de similaridade.
Passo 1: Instalação e Configuração
Certifique-se de que a biblioteca está instalada no seu ambiente Python:
pip install sentence-transformers
Passo 2: Gerando Embeddings
Aqui, vamos usar um modelo pré-treinado para gerar embeddings. O modelo escolhido será o all-MiniLM-L6-v2
, conhecido por ser leve e eficiente.
from sentence_transformers import SentenceTransformer
import numpy as np
# Carregar o modelo
model = SentenceTransformer('all-MiniLM-L6-v2')
# Sentenças de exemplo
sentenca1 = "Eu amo este produto!"
sentenca2 = "Este produto é incrível!"
sentenca3 = "Não gostei do atendimento."
# Gerar embeddings
embeddings = model.encode([sentenca1, sentenca2, sentenca3])
Passo 3: Calculando a Similaridade
Utilizaremos a fórmula de similaridade do cosseno, que você pode consultar detalhadamente aqui.
Aqui está como calcular isso no código:
from sklearn.metrics.pairwise import cosine_similarity
# Calcular similaridade entre as sentenças
similaridade12 = cosine_similarity([embeddings[0]], [embeddings[1]])[0][0]
similaridade13 = cosine_similarity([embeddings[0]], [embeddings[2]])[0][0]
print(f"Similaridade entre sentenças 1 e 2: {similaridade12:.2f}")
print(f"Similaridade entre sentenças 1 e 3: {similaridade13:.2f}")
Saída Esperada
A similaridade será alta entre sentenças 1 e 2 (que expressam sentimentos positivos) e baixa entre 1 e 3 (que tem um sentimento negativo).
Exemplo Prático: Detectando Sentenças com Sentimentos Similares
Vamos aplicar o conceito em um exemplo prático: determinar se novas avaliações de clientes são mais próximas de sentimentos positivos ou negativos conhecidos.
Base de Sentenças de Referência
Definimos sentenças positivas e negativas como base:
referencias_positivas = ["Este produto é maravilhoso!", "Excelente qualidade!", "Adorei a experiência!"]
referencias_negativas = ["O produto chegou quebrado.", "Horrível, nunca mais compro!", "Muito ruim, estou insatisfeito."]
Implementando a Análise de Sentimentos
# Embeddings das referências
ref_embeddings_positivas = model.encode(referencias_positivas)
ref_embeddings_negativas = model.encode(referencias_negativas)
# Nova sentença
nova_sentenca = "Ótima qualidade e entrega rápida."
novo_embedding = model.encode([nova_sentenca])
# Similaridade com referências positivas e negativas
similaridade_positiva = cosine_similarity(novo_embedding, ref_embeddings_positivas).mean()
similaridade_negativa = cosine_similarity(novo_embedding, ref_embeddings_negativas).mean()
# Classificação baseada na maior similaridade
if similaridade_positiva > similaridade_negativa:
print("A sentença tem um sentimento positivo.")
else:
print("A sentença tem um sentimento negativo.")
Ressaltando os Resultados
Com base nas similaridades calculadas, o código classifica a nova sentença em positivo ou negativo.
Resumindo
Usar Sentence Transformers para calcular similaridade de textos é uma abordagem eficiente para várias tarefas de NLP, incluindo análise de sentimentos. A biblioteca permite gerar embeddings de alta qualidade e realizar análises semânticas profundas, mesmo em cenários multilíngues.
Iremos explorar ainda mais a utilização da biblioteca em posts futuros!
Para outros conteúdos relacionados veja nossos posts aqui no Janela do Dev.