Embeddings
Embeddings de texto são representações numéricas de texto que permitem medir a similaridade semântica. Este guia apresenta os embeddings, suas aplicações e como usar modelos de embedding para tarefas como busca, recomendações e detecção de anomalias.
Antes de implementar embeddings
Ao selecionar um provedor de embeddings, há vários fatores que você pode considerar dependendo de suas necessidades e preferências:
- Tamanho do conjunto de dados e especificidade de domínio: tamanho do conjunto de dados de treinamento do modelo e sua relevância para o domínio que você deseja incorporar. Dados maiores ou mais específicos do domínio geralmente produzem melhores embeddings dentro do domínio
- Desempenho de inferência: velocidade de consulta de embeddings e "latency" (latência) de ponta a ponta. Esta é uma consideração particularmente importante para implantações de produção em larga escala
- Personalização: opções para treinamento contínuo em dados privados ou especialização de modelos para domínios muito específicos. Isso pode melhorar o desempenho em vocabulários únicos
Como obter embeddings com a Anthropic
A Anthropic não oferece seu próprio modelo de embedding. Um provedor de embeddings que possui uma ampla variedade de opções e recursos abrangendo todas as considerações anteriores é a Voyage AI.
A Voyage AI cria modelos de embedding de última geração e oferece modelos personalizados para domínios específicos da indústria, como finanças e saúde, ou modelos com "fine-tuning" (ajuste fino) sob medida para clientes individuais.
O restante deste guia é para a Voyage AI, mas você deve avaliar uma variedade de fornecedores de embeddings para encontrar o mais adequado ao seu caso de uso específico.
Modelos disponíveis
A Voyage recomenda usar os seguintes modelos de embedding de texto:
Voyage 4 (geração mais recente)
| Modelo | Comprimento de contexto | Dimensão do embedding | Descrição |
|---|---|---|---|
voyage-4-large | 32.000 | 1024 (padrão), 256, 512, 2048 | A melhor qualidade de recuperação de uso geral e multilíngue. Consulte a postagem do blog sobre o Voyage 4 para detalhes. |
voyage-4 | 32.000 | 1024 (padrão), 256, 512, 2048 | Otimizado para qualidade de recuperação de uso geral e multilíngue. Equilibra qualidade e eficiência. Consulte a postagem do blog sobre o Voyage 4 para detalhes. |
voyage-4-lite | 32.000 | 1024 (padrão), 256, 512, 2048 | Otimizado para latência e custo. Consulte a postagem do blog sobre o Voyage 4 para detalhes. |
voyage-4-nano | 32.000 | 1024 (padrão), 256, 512, 2048 | Modelo de pesos abertos (licença Apache 2.0) disponível no Hugging Face. Consulte a postagem do blog sobre o Voyage 4 para detalhes. |
Geração anterior
| Modelo | Comprimento de contexto | Dimensão do embedding | Descrição |
|---|---|---|---|
voyage-3-large | 32.000 | 1024 (padrão), 256, 512, 2048 | A melhor qualidade de recuperação de uso geral e multilíngue. Consulte a postagem do blog sobre o voyage-3-large para detalhes. |
voyage-3.5 | 32.000 | 1024 (padrão), 256, 512, 2048 | Otimizado para qualidade de recuperação de uso geral e multilíngue. Consulte a postagem do blog sobre o voyage-3.5 para detalhes. |
voyage-3.5-lite | 32.000 | 1024 (padrão), 256, 512, 2048 | Otimizado para latência e custo. Consulte a postagem do blog sobre o voyage-3.5 para detalhes. |
voyage-code-3 | 32.000 | 1024 (padrão), 256, 512, 2048 | Otimizado para recuperação de código. Consulte a postagem do blog sobre o voyage-code-3 para detalhes. |
voyage-finance-2 | 32.000 | 1024 | Otimizado para recuperação e RAG em finanças. Consulte a postagem do blog sobre o voyage-finance-2 para detalhes. |
voyage-law-2 | 16.000 | 1024 | Otimizado para recuperação e RAG jurídicos e de contexto longo. Também apresenta desempenho aprimorado em todos os domínios. Consulte a postagem do blog sobre o voyage-law-2 para detalhes. |
Além disso, a Voyage recomenda os seguintes modelos de embedding multimodais:
| Modelo | Comprimento de contexto | Dimensão do embedding | Descrição |
|---|---|---|---|
voyage-multimodal-3.5 | 32.000 | 1024 (padrão), 256, 512, 2048 | Modelo de embedding multimodal rico que pode vetorizar texto, imagens e vídeos intercalados. Inclui suporte a vídeo como o primeiro modelo de embedding de vídeo em nível de produção. Consulte a postagem do blog sobre o voyage-multimodal-3.5 para detalhes. |
voyage-multimodal-3 | 32.000 | 1024 | Modelo de embedding multimodal rico que pode vetorizar texto intercalado e imagens ricas em conteúdo, como capturas de tela de PDFs, slides, tabelas, figuras e muito mais. Consulte a postagem do blog sobre o voyage-multimodal-3 para detalhes. |
Os seguintes modelos de embedding de chunks contextualizados produzem vetores em nível de chunk que capturam o contexto completo do documento sem aumento manual de metadados. Chame esses modelos com contextualized_embed() em vez de embed():
| Modelo | Comprimento de contexto | Dimensão do embedding | Descrição |
|---|---|---|---|
voyage-context-4 | 120.000 | 1024 (padrão), 256, 512, 2048 | Embeddings de chunks contextualizados otimizados para qualidade de recuperação de uso geral e multilíngue. Consulte a postagem do blog sobre o voyage-context-4 para detalhes. |
voyage-context-3 | 120.000 | 1024 (padrão), 256, 512, 2048 | Embeddings de chunks contextualizados otimizados para qualidade de recuperação de uso geral e multilíngue. Consulte a postagem do blog sobre o voyage-context-3 para detalhes. |
A Voyage AI também oferece rerankers, que recebem uma consulta e uma lista de documentos e os retornam classificados por relevância em relação à consulta. Chame esses modelos com rerank():
| Modelo | Comprimento de contexto | Descrição |
|---|---|---|
rerank-2.5 | 32.000 | Maior precisão. Recomendado para a maioria das aplicações. Consulte a postagem do blog sobre o rerank-2.5 para detalhes. |
rerank-2.5-lite | 32.000 | Otimizado para latência e custo. Consulte a postagem do blog sobre o rerank-2.5 para detalhes. |
Precisa de ajuda para decidir qual modelo de embedding de texto usar? Confira as Perguntas frequentes da Voyage AI.
Primeiros passos com a Voyage AI
Para acessar os embeddings da Voyage:
- Cadastre-se no site da Voyage AI.
- Obtenha uma chave de API.
- Defina a chave de API como uma variável de ambiente para conveniência:
export VOYAGE_API_KEY="<your secret key>"Você pode obter os embeddings usando o pacote Python voyageai oficial ou requisições HTTP, conforme descrito nas seções a seguir.
Biblioteca Python da Voyage
Instale o pacote voyageai usando o seguinte comando:
pip install -U voyageaiEm seguida, você pode criar um objeto cliente e começar a usá-lo para gerar embeddings dos seus textos:
import voyageai
vo = voyageai.Client()
# Isso usará automaticamente a variável de ambiente VOYAGE_API_KEY.
# Como alternativa, você pode usar vo = voyageai.Client(api_key="<sua chave secreta>")
texts = ["Sample text 1", "Sample text 2"]
result = vo.embed(texts, model="voyage-4", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])result.embeddings é uma lista de dois vetores de embedding, cada um contendo 1024 números de ponto flutuante. Após executar o código anterior, os dois embeddings são impressos na tela:
[-0.013131560757756233, 0.019828535616397858, ...] # embedding for "Sample text 1"
[-0.0069352793507277966, 0.020878976210951805, ...] # embedding for "Sample text 2"Ao criar os embeddings, você pode especificar alguns outros argumentos para a função embed().
Para mais informações sobre o pacote Python da Voyage, consulte a documentação do pacote Python da Voyage.
API HTTP da Voyage
Você também pode obter embeddings fazendo requisições à API HTTP da Voyage. Por exemplo, você pode enviar uma requisição HTTP por meio do comando curl em um terminal:
curl https://api.voyageai.com/v1/embeddings \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $VOYAGE_API_KEY" \
-d '{
"input": ["Sample text 1", "Sample text 2"],
"model": "voyage-4"
}'A resposta que você receberia é um objeto JSON contendo os embeddings e o uso de tokens:
{
"object": "list",
"data": [
{
"embedding": [-0.013131560757756233, 0.019828535616397858 /* ... */],
"index": 0
},
{
"embedding": [-0.0069352793507277966, 0.020878976210951805 /* ... */],
"index": 1
}
],
"model": "voyage-4",
"usage": {
"total_tokens": 10
}
}Para mais informações sobre a API HTTP da Voyage, consulte a documentação da API HTTP da Voyage.
AWS Marketplace
Os embeddings da Voyage estão disponíveis no AWS Marketplace. As instruções para acessar a Voyage na AWS estão disponíveis na documentação da Voyage no AWS Marketplace.
Exemplo de início rápido
O breve exemplo a seguir mostra como usar embeddings.
Suponha que você tenha um pequeno corpus de seis documentos dos quais recuperar
documents = [
"The Mediterranean diet emphasizes fish, olive oil, and vegetables, believed to reduce chronic diseases.",
"Photosynthesis in plants converts light energy into glucose and produces essential oxygen.",
"20th-century innovations, from radios to smartphones, centered on electronic advancements.",
"Rivers provide water, irrigation, and habitat for aquatic species, vital for ecosystems.",
"Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.",
"Shakespeare's works, like 'Hamlet' and 'A Midsummer Night's Dream,' endure in literature.",
]Primeiro, use a Voyage para converter cada documento em um vetor de embedding.
import voyageai
vo = voyageai.Client()
# Gerar embeddings dos documentos
doc_embds = vo.embed(documents, model="voyage-4", input_type="document").embeddingsOs embeddings permitem que você faça busca / recuperação semântica no espaço vetorial. Dada uma consulta de exemplo,
query = "When is Apple's conference call scheduled?"Em seguida, converta-a em um embedding e realize uma busca de vizinho mais próximo para encontrar o documento mais relevante com base na distância no espaço de embeddings.
import numpy as np
# Gera o embedding da consulta
query_embd = vo.embed([query], model="voyage-4", input_type="query").embeddings[0]
# Calcula a similaridade
# Os embeddings da Voyage são normalizados para comprimento 1, portanto o produto escalar
# e a similaridade de cosseno são iguais.
similarities = np.dot(doc_embds, query_embd)
retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])Observe que input_type="document" e input_type="query" são usados para gerar embeddings do documento e da consulta, respectivamente. Mais especificações podem ser encontradas em Biblioteca Python da Voyage.
A saída é o quinto documento, que é de fato o mais relevante para a consulta:
Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET.Se você está procurando um conjunto detalhado de receitas sobre como fazer RAG com embeddings, incluindo bancos de dados vetoriais, confira a receita de RAG.
Perguntas frequentes
Os modelos de embedding dependem de redes neurais poderosas para capturar e comprimir o contexto semântico, de forma semelhante aos modelos generativos. A equipe de pesquisadores de IA experientes da Voyage otimiza cada componente do processo de embedding, incluindo:
- Arquitetura do modelo
- Coleta de dados
- Funções de perda
- Seleção do otimizador
Saiba mais sobre a abordagem técnica da Voyage no blog da Voyage AI.
Para embeddings de uso geral, os modelos recomendados são:
voyage-4-large: Melhor qualidadevoyage-4-lite: Menor latência e custovoyage-4: Desempenho equilibrado
Para recuperação, use o parâmetro input_type para especificar se o texto é do tipo consulta ou documento.
Modelos específicos de domínio:
- Tarefas jurídicas:
voyage-law-2 - Código e documentação de programação:
voyage-code-3 - Tarefas relacionadas a finanças:
voyage-finance-2
Para recuperação em nível de chunk e em nível de documento: voyage-context-4
Você pode usar os embeddings da Voyage com similaridade por produto escalar, similaridade de cosseno ou distância euclidiana. Para uma explicação sobre similaridade de embeddings, consulte este guia de similaridade vetorial.
Os embeddings da Voyage AI são normalizados para comprimento 1, o que significa que:
- A similaridade de cosseno é equivalente à similaridade por produto escalar, sendo que esta última pode ser calculada mais rapidamente.
- A similaridade de cosseno e a distância euclidiana resultam em classificações idênticas.
Consulte o guia de tokenização da Voyage.
Para todas as tarefas e casos de uso de recuperação (por exemplo, RAG), use o parâmetro input_type para especificar se o texto de entrada é uma consulta ou um documento. Não omita input_type nem defina input_type=None. Especificar se o texto de entrada é uma consulta ou um documento pode criar melhores representações vetoriais densas para recuperação, o que pode levar a uma melhor qualidade de recuperação.
Ao usar o parâmetro input_type, prompts especiais são adicionados ao início do texto de entrada antes da geração do embedding. Especificamente:
📘 Prompts associados ao
input_type
- Para uma consulta, o prompt é “Represent the query for retrieving supporting documents: “.
- Para um documento, o prompt é “Represent the document for retrieval: “.
- Exemplo
- Quando
input_type="query", uma consulta como "When is Apple's conference call scheduled?" se tornará "Represent the query for retrieving supporting documents: When is Apple's conference call scheduled?"- Quando
input_type="document", uma consulta como "Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET." se tornará "Represent the document for retrieval: Apple's conference call to discuss fourth fiscal quarter results and business updates is scheduled for Thursday, November 2, 2023 at 2:00 p.m. PT / 5:00 p.m. ET."
O voyage-large-2-instruct, como o nome sugere, é treinado para responder a instruções adicionais que são adicionadas ao início do texto de entrada. Para classificação, clusterização ou outras subtarefas do MTEB, use as instruções do voyage-large-2-instruct.
A quantização em embeddings converte valores de alta precisão, como números de ponto flutuante de precisão simples de 32 bits, em formatos de menor precisão, como inteiros de 8 bits ou valores binários de 1 bit, reduzindo armazenamento, memória e custos em 4x e 32x, respectivamente. Os modelos da Voyage compatíveis permitem a quantização especificando o tipo de dado de saída com o parâmetro output_dtype:
float: Cada embedding retornado é uma lista de números de ponto flutuante de precisão simples de 32 bits (4 bytes). Este é o padrão e fornece a maior precisão / exatidão de recuperação.int8euint8: Cada embedding retornado é uma lista de inteiros de 8 bits (1 byte) variando de -128 a 127 e de 0 a 255, respectivamente.binaryeubinary: Cada embedding retornado é uma lista de inteiros de 8 bits que representam valores de embedding de bit único, quantizados e empacotados em bits:int8parabinaryeuint8paraubinary. O comprimento da lista de inteiros retornada é 1/8 da dimensão real do embedding. O tipo binary usa o método de binário com deslocamento (offset binary), sobre o qual você pode saber mais nas perguntas frequentes sobre embeddings.
Exemplo de quantização binária
Considere os seguintes oito valores de embedding: -0.03955078, 0.006214142, -0.07446289, -0.039001465, 0.0046463013, 0.00030612946, -0.08496094 e 0.03994751. Com a quantização binária, valores menores ou iguais a zero serão quantizados para um zero binário, e valores positivos para um um binário, resultando na seguinte sequência binária: 0, 1, 0, 0, 1, 1, 0, 1. Esses oito bits são então empacotados em um único inteiro de 8 bits, 01001101 (com o bit mais à esquerda como o bit mais significativo).
ubinary: A sequência binária é convertida diretamente e representada como o inteiro sem sinal (uint8) 77.binary: A sequência binária é representada como o inteiro com sinal (int8) -51, calculado usando o método de binário com deslocamento (77 - 128 = -51).
O aprendizado Matryoshka cria embeddings com representações do mais grosseiro ao mais refinado dentro de um único vetor. Os modelos da Voyage, como o voyage-code-3, que suportam múltiplas dimensões de saída geram esses embeddings Matryoshka. Você pode truncar esses vetores mantendo o subconjunto inicial de dimensões. Por exemplo, o código Python a seguir demonstra como truncar vetores de 1024 dimensões para 256 dimensões:
import voyageai
import numpy as np
def embd_normalize(v: np.ndarray) -> np.ndarray:
"""
Normalize the rows of a 2D numpy array to unit vectors by dividing each row by its Euclidean
norm. Raises a ValueError if any row has a norm of zero to prevent division by zero.
"""
row_norms = np.linalg.norm(v, axis=1, keepdims=True)
if np.any(row_norms == 0):
raise ValueError("Cannot normalize rows with a norm of zero.")
return v / row_norms
vo = voyageai.Client()
# Gera vetores voyage-code-3, que por padrão são números de ponto flutuante de 1024 dimensões
embd = vo.embed(["Sample text 1", "Sample text 2"], model="voyage-code-3").embeddings
# Define uma dimensão menor
short_dim = 256
# Redimensiona e normaliza os vetores para a dimensão menor
resized_embd = embd_normalize(np.array(embd)[:, :short_dim]).tolist()Preços
Visite a página de preços da Voyage para obter os detalhes de preços mais atualizados.
Was this page helpful?