A biblioteca Sentence Transformers é amplamente utilizada para transformar sentenças em representações numéricas chamadas de embeddings. Esses embeddings capturam o significado semântico dos textos, permitindo comparar, buscar e organizar sentenças com base em suas similaridades.
Uma das aplicações mais interessantes dessa biblioteca é a possibilidade de realizar agrupamentos semânticos. Isso significa categorizar sentenças ou documentos automaticamente com base no significado, sem a necessidade de palavras-chave fixas ou regras manuais.
Veja outros posts relacionados a essa biblioteca aqui no blog para conhecer seu poder em outras aplicações NLP.
Por que usar Sentence Transformers para agrupamento?
- Semântica rica: Captura o significado de sentenças, mesmo quando escritas de maneiras diferentes.
- Flexibilidade: Pode ser aplicado a textos em vários idiomas e domínios.
- Automação: Reduz a necessidade de classificação manual de grandes volumes de texto.
Com essa base, vamos explorar o que é o agrupamento (clustering) e como podemos combiná-lo com Sentence Transformers para aplicações práticas.
O que é Agrupamento de Textos?
O agrupamento de textos é uma técnica de aprendizado não supervisionado que organiza conjuntos de textos em grupos (ou clusters) com base em características semelhantes. Em outras palavras, textos mais próximos no espaço vetorial ficam no mesmo grupo.
Como funciona o agrupamento?
O agrupamento geralmente envolve duas etapas principais:
- Transformação: Textos são convertidos em representações numéricas, como embeddings.
- Agrupamento: Um algoritmo como K-Means ou HDBSCAN é usado para encontrar padrões nos dados e formar os grupos.
Aplicações práticas do agrupamento semântico:
- Organização de documentos.
- Identificação de tópicos em postagens de redes sociais.
- Agrupamento de feedbacks de clientes.
- Classificação de notícias por tema.
Agora que entendemos o conceito, vamos ver como isso funciona na prática com a biblioteca Sentence Transformers.
Agrupamento Prático com Sentence Transformers
Passo 1: Instalação e Configuração
Certifique-se de que a biblioteca Sentence Transformers e outras dependências estão instaladas:
pip install sentence-transformers sklearn hdbscan
Passo 2: Preparando os Dados
Vamos começar com um conjunto de exemplos, como frases sobre tecnologia, esporte e viagens.
from sentence_transformers import SentenceTransformer
# Conjunto de textos de exemplo
sentencas = [
"A inteligência artificial está revolucionando o mundo.",
"Os novos avanços em robótica são impressionantes.",
"A equipe venceu o campeonato após um jogo emocionante.",
"O futebol é o esporte mais popular do mundo.",
"Planejar uma viagem para a Europa pode ser emocionante.",
"As praias do Brasil são um destino turístico incrível."
]
# Carregando o modelo para gerar embeddings
model = SentenceTransformer('all-MiniLM-L6-v2')
embeddings = model.encode(sentencas)
Passo 3: Aplicando o Algoritmo de Agrupamento
Usaremos o K-Means para dividir os textos em três grupos. O K-Means tenta minimizar a distância dos pontos ao centro do cluster correspondente.
from sklearn.cluster import KMeans
# Definindo o número de clusters
num_clusters = 3
clustering_model = KMeans(n_clusters=num_clusters)
clustering_model.fit(embeddings)
# Associando cada sentença a um cluster
cluster_labels = clustering_model.labels_
# Organizando as sentenças por cluster
clusters = {i: [] for i in range(num_clusters)}
for sentenca, label in zip(sentencas, cluster_labels):
clusters[label].append(sentenca)
# Exibindo os resultados
for cluster_id, texts in clusters.items():
print(f"\nCluster {cluster_id}:")
for text in texts:
print(f" - {text}")
Resultados Esperados
Após a execução, você verá que as sentenças sobre temas semelhantes (tecnologia, esportes e viagens) foram agrupadas. Por exemplo:
- Cluster 0: Sentenças sobre tecnologia.
- Cluster 1: Sentenças sobre esportes.
- Cluster 2: Sentenças sobre viagens.
Melhorando os Agrupamentos com HDBSCAN
O K-Means exige que o número de clusters seja definido antecipadamente. Em cenários onde isso não é viável, o HDBSCAN é uma alternativa poderosa, capaz de determinar automaticamente o número de clusters com base na densidade dos dados.
Implementação com HDBSCAN
import hdbscan
# Aplicando o HDBSCAN
hdbscan_model = hdbscan.HDBSCAN(min_cluster_size=2, metric='euclidean')
hdbscan_labels = hdbscan_model.fit_predict(embeddings)
# Organizando as sentenças por cluster
hdbscan_clusters = {}
for sentenca, label in zip(sentencas, hdbscan_labels):
if label not in hdbscan_clusters:
hdbscan_clusters[label] = []
hdbscan_clusters[label].append(sentenca)
# Exibindo os resultados
for cluster_id, texts in hdbscan_clusters.items():
print(f"\nCluster {cluster_id}:")
for text in texts:
print(f" - {text}")
Vantagens do HDBSCAN
- Não precisa definir o número de clusters.
- Identifica pontos “ruído” que não pertencem a nenhum cluster.
Sugestão de Aplicação Real: Agrupando Feedbacks de Clientes
Imagine que você tem os seguintes feedbacks de clientes sobre um produto:
feedbacks = [
"O produto é excelente e de alta qualidade.",
"Muito ruim, veio com defeito.",
"Adorei a entrega rápida e o atendimento.",
"Produto excelente, recomendo!",
"Veio quebrado, muito decepcionado.",
"O preço é justo e a qualidade é ótima."
]
Usando o mesmo processo de geração de embeddings e algoritmos de agrupamento, é possível categorizar os feedbacks em grupos como positivos, negativos e elogios ao atendimento. Assim, empresas podem priorizar ações corretivas ou promover aspectos bem avaliados.
Resumindo
O agrupamento semântico de textos com Sentence Transformers é uma técnica poderosa para organizar grandes volumes de dados textuais de maneira automatizada. Seja para descobrir tópicos em dados desestruturados ou categorizar informações para análise, essa abordagem combina simplicidade, eficiência e flexibilidade.