Semantic Search
A pesquisa semântica ordena documentos e imagens de acordo com o significado de uma consulta, em vez de pelas palavras exatas, utilizando embeddings, pesquisa dos vizinhos mais próximos e rerankers.
A busca semântica classifica documentos, imagens e outros itens de acordo com a semelhança entre seus significados e o de uma consulta, em vez de se basear nas palavras que têm em comum. Uma busca por "meu gato está com fome" pode retornar uma página intitulada "Horário de alimentação de um gatinho novo", embora as duas não compartilhem nenhuma palavra. Os sistemas modernos fazem isso com embeddings: um codificador neural converte consultas e itens em vetores próximos uns dos outros quando seus significados são semelhantes, e a busca vetorial encontra os itens mais próximos. A busca na Web avançou nessa direção em 2019, quando o Google começou a usar BERT para entender consultas de busca, uma mudança que, segundo a empresa, afetou uma em cada dez pesquisas em inglês nos EUA.
Como funciona a busca semântica#
A maioria dos sistemas de busca semântica recupera resultados com um bi-encoder e os refina com um reranqueador. O bi-encoder converte cada documento em embedding uma única vez, antecipadamente, e os vetores são armazenados em um banco de dados vetorial. No momento da consulta, somente ela é convertida em embedding, e um índice aproximado de vizinhos mais próximos retorna os principais candidatos por similaridade de cosseno. O Sentence-BERT (2019) tornou isso viável para frases: encontrar o par mais semelhante entre 10.000 frases levava cerca de 65 horas com um cross-encoder BERT e cerca de 5 segundos com seus embeddings de frases. Em seguida, o Dense Passage Retrieval (2020) mostrou que embeddings aprendidos superavam a classificação de palavras-chave BM25 em 9 a 19 pontos na precisão de recuperação de passagens entre as 20 principais em tarefas de resposta a perguntas de domínio aberto. Por fim, um reranqueador cross-encoder lê a consulta e cada candidato em conjunto para reordenar a lista curta com mais precisão.
Este exemplo compara a sobreposição de palavras com a similaridade de embeddings usando a biblioteca Sentence Transformers:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer("sentence-transformers/all-MiniLM-L6-v2")
documents = [
"How to reset a forgotten account password",
"Feeding schedule for a new kitten",
"Quarterly sales report for the retail division",
"Best hiking trails near Denver",
]
query = "my cat is hungry"
# Keyword search: documents sharing at least one word with the query
query_words = set(query.lower().split())
print("Keyword matches:", [d for d in documents if query_words & set(d.lower().split())])
# Semantic search: rank documents by cosine similarity of their embeddings
doc_embeddings = model.encode(documents)
query_embedding = model.encode(query)
scores = model.similarity(query_embedding, doc_embeddings)[0]
best = int(scores.argmax())
print(f"Semantic match: {documents[best]!r} (cosine {scores[best]:.2f})")A correspondência de palavras-chave retorna uma lista vazia, pois nenhum documento contém "meu", "gato", "está" ou "fome". A busca semântica retorna o horário de alimentação do gatinho, com similaridade de cosseno de 0,56, o documento cujo significado é mais próximo.
Busca semântica e termos relacionados#
- Busca por palavras-chave: Classifica documentos por correspondências exatas de termos usando fórmulas como BM25. Lida bem com nomes, números de peças e palavras raras que os embeddings podem confundir, mas não identifica sinônimos nem paráfrases.
- Busca híbrida: Combina a recuperação por palavras-chave e a recuperação semântica e mescla os resultados; é uma configuração comum em sistemas de busca e RAG de produção.
- Segmentação semântica: Uma tarefa de visão computacional sem relação com a busca semântica, que atribui uma classe a cada pixel de uma imagem e tem em comum apenas a palavra "semântica".
- Cache semântico: Aplica a mesma correspondência baseada no significado às solicitações de LLM, reutilizando uma resposta armazenada quando um novo prompt tem o mesmo significado de um anterior.
Aplicações no mundo real#
- Geração aumentada por recuperação (RAG): Encontra as passagens de que um modelo de linguagem precisa, mesmo quando a forma como o usuário escreve é diferente da documentação.
- Busca de patentes: Encontra anterioridades que descrevem a mesma invenção usando terminologia diferente.
- Busca de produtos no varejo: Associa uma consulta como "sapatos para ir ao trabalho num dia chuvoso" a tênis impermeáveis cujos anúncios nunca usam essas palavras.
- Sistemas de recomendação: Sugerem artigos ou produtos cujos embeddings ficam próximos dos itens que o usuário já escolheu.
Pesquisar imagens pelo significado#
Modelos treinados com aprendizado contrastivo em pares de imagens e legendas, como o CLIP, convertem texto e imagens em embeddings no mesmo espaço, permitindo que uma consulta textual classifique fotos sem tags nem legendas. A solução de busca semântica de imagens da Ultralytics funciona assim: sua classe VisualAISearch converte uma vez em embeddings todas as imagens de uma pasta usando CLIP, converte cada consulta textual em embedding no mesmo espaço e retorna até 30 imagens cuja similaridade de cosseno com a consulta supera um limite, ordenadas da mais à menos semelhante. Assim, uma consulta como "um cachorro sentado em um banco" encontra fotos correspondentes em uma coleção sem rótulos.










