Logo Sentence Transformers

Utilizando Sentence Transformers para geração de embeddings

Inteligência Artificial Machine Learning Python Tutoriais

No campo do Processamento de Linguagem Natural (PLN), a capacidade de compreender e manipular a linguagem é fundamental. Uma das tarefas mais importantes é a vetorização de sentenças, que consiste em converter texto em uma representação numérica que pode ser entendida e processada por algoritmos de aprendizado de máquina.

Nesse sentido, a biblioteca SentenceTransformers, baseada no Pytorch e Transformers, utiliza uma grande variedades de modelos de linguagens pré-treinados prontos para geração de vetores embeddings/densos. Esses vetores capturam a semântica do texto de tal forma que sentenças com significados semelhantes são mapeadas para pontos próximos no espaço vetorial.

Nesse tutorial utilizamos a biblioteca utilizando o modelo Bertimbau. Esse modelo é uma adaptação do famoso modelo BERT, que foi pré-treinado especificamente para entender o português. Isso significa que ele é capaz de capturar nuances e contextos da língua portuguesa de forma mais eficaz do que modelos treinados em vários idiomas (multilíngues).

Vetorização com Sentence Transformers e Bertimbau

Agora, vamos ver como podemos usar o Sentence Transformers com o Bertimbau para vetorizar sentenças em português. O processo é relativamente simples e pode ser feito com algumas linhas de código em Python.

Instalação e Configuração

Primeiro, precisamos instalar a biblioteca sentence-transformers:

pip install sentence-transformers

Depois de instalada, podemos carregar o modelo Bertimbau:

from sentence_transformers import SentenceTransformer

# Carregamos o modelo Bertimbau
model = SentenceTransformer('neuralmind/bert-base-portuguese-cased')

Vetorizando uma Sentença Simples

Vamos começar com um exemplo simples, vetorizando a frase “Eu amo aprender PLN!”:

# Vetorizamos a frase
frase = "Eu amo aprender PLN!"
vetor = model.encode(frase)

# O vetor resultante é uma lista de números
print(vetor)

Comparando Sentenças

Uma aplicação interessante da vetorização é comparar o quão semelhantes são duas sentenças. Por exemplo, vamos comparar a frase acima com “Estudar PLN é minha paixão!”:

from scipy.spatial.distance import cosine

# Vetorizamos a segunda frase
frase2 = "Estudar PLN é minha paixão!"
vetor2 = model.encode(frase2)

# Calculamos a distância entre os dois vetores
distancia = cosine(vetor, vetor2)

# Quanto menor a distância, mais semelhantes são as frases
print("Distância entre as frases:", distancia)

No exemplo acima, mostramos como podemos medir a similaridade entre duas frases considerando as informações contextuais que os vetores gerados carregam. Ou seja, quanto menor a distância, mais semelhantes são as frases. Isso pode ser útil, por exemplo, para aplicações que visem o agrupamento/classificação de dados textuais de acordo com seu conteúdo.

Gerando vetores para várias sentenças

Agora, vamos trabalhar com várias frases simulando um caso real. Suponha que temos um conjunto de notícias e queremos encontrar aquelas que são mais semelhantes entre si. Para isso, podemos vetorizar cada notícia e depois calcular as distâncias entre os vetores.

noticias = [
    "Governo anuncia novas medidas para a economia.",
    "Novo pacote econômico é revelado pelo governo.",
    "Economia brasileira terá novo estímulo do governo.",
    "Governo não prevê novas ações para a economia."
]

# Vetorizamos todas as notícias
vetores_noticias = model.encode(noticias)

# Calculamos a distância entre cada par de notícias
for i in range(len(noticias)):
    for j in range(i + 1, len(noticias)):
        distancia = cosine(vetores_noticias[i], vetores_noticias[j])
        print(f"Distância entre notícia {i+1} e {j+1}: {distancia}")

Conclusão

A vetorização de sentenças é uma ferramenta poderosa no PLN e, com modelos como o Bertimbau, podemos realizar essa tarefa de forma eficiente para a língua portuguesa. A biblioteca Sentence Transformers tem recursos que facilitam a criação/geração de vetores semânticos que podem ser usados em uma variedade de aplicações, desde sistemas de recomendação até análise de sentimentos.