Visão geral dos embeddings

Embeddings de texto são representações numéricas de strings de texto, representadas como um vetor de números de ponto flutuante. Você pode usar a distância entre dois pedaços de texto incorporados (sejam palavras, frases ou sentenças) para medir o quão relacionados esses pedaços de texto estão entre si. Uma medida popular é a similaridade do cosseno, mas você também pode medir a similaridade por meio de outras funções de distância, como a distância euclidiana ou produtos escalares (veja FAQ abaixo). Em geral, distâncias menores preveem maior relacionamento em termos da relação semântica ou sintática entre os textos.

Comparar a similaridade de strings, ou agrupar strings por sua distância umas das outras, permite uma ampla variedade de aplicações, incluindo busca (popular em arquiteturas RAG), recomendações e detecção de anomalias.


Como obter embeddings com a Anthropic

Ao selecionar um provedor de embeddings, existem vários fatores que você pode considerar, dependendo de suas necessidades e preferências:

  • Tamanho do conjunto de dados e especificidade do 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 no domínio
  • Arquitetura do modelo: Design e complexidade do modelo. Técnicas e arquiteturas mais modernas, como Transformers, tendem a aprender e produzir embeddings de maior qualidade
  • Desempenho de inferência: Velocidade de pesquisa de embeddings e latência de ponta a ponta. Essa é 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 exclusivos

A Anthropic não oferece seu próprio modelo de embeddings. Um provedor de embeddings que possui uma ampla variedade de opções e recursos que abrangem todas as quatro considerações acima é a Voyage AI. A Voyage AI cria modelos de embeddings state of the art e oferece modelos personalizados para domínios específicos da indústria, como finanças e saúde, ou modelos fine-tuned sob medida para clientes individuais.

O restante deste guia é para a Voyage AI, mas encorajamos você a avaliar uma variedade de fornecedores de embeddings para encontrar a melhor opção para seu caso de uso específico.


Começando com a Voyage AI

Confira nosso notebook de embeddings para ver um exemplo de implementação da Voyage AI.

Para acessar os embeddings da Voyage:

  1. Inscreva-se no site da Voyage AI
  2. Obtenha uma chave de API
  3. Defina a chave de API como uma variável de ambiente para conveniência:
Python
export VOYAGE_API_KEY="<sua chave secreta>"

Você pode executar os embeddings usando o pacote Python oficial da voyageai ou solicitações HTTP, conforme descrito abaixo.

Pacote Python da Voyage

O pacote voyageai pode ser instalado usando o seguinte comando:

Python
pip install -U voyageai

Em seguida, você pode criar um objeto de cliente e começar a usá-lo para incorporar seus textos:

Python
import voyageai

vo = voyageai.Client()
# Isso usará automaticamente a variável de ambiente VOYAGE_API_KEY.
# Alternativamente, você pode usar vo = voyageai.Client(api_key="<sua chave secreta>")

texts = ["Texto de exemplo 1", "Texto de exemplo 2"]

result = vo.embed(texts, model="voyage-2", input_type="document")
print(result.embeddings[0])
print(result.embeddings[1])

result.embeddings será uma lista de dois vetores de embeddings, cada um contendo 1024 números de ponto flutuante.

Após executar o código acima, os dois embeddings serão impressos na tela:

Python
[0.02012746, 0.01957859, ...]  # embedding para "Texto de exemplo 1"
[0.01429677, 0.03077182, ...]  # embedding para "Texto de exemplo 2"

Ao criar os embeddings, você pode especificar alguns outros argumentos para a função embed(). Aqui está a especificação:

voyageai.Client.embed(texts : List[str], model : str, input_type : Optional[str] = None, truncation : Optional[bool] = None)

  • texts (List[str]) - Uma lista de textos como uma lista de strings, como ["Eu gosto de gatos", "Eu também gosto de cachorros"]. Atualmente, o comprimento máximo da lista é 128 e o número total de tokens na lista é no máximo 320K para voyage-2 e 120K para voyage-large-2/voyage-code-2.
  • model (str) - Nome do modelo. Opções recomendadas: voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, opcional, padrão None) - Tipo do texto de entrada. O padrão é None. Outras opções: query, document
    • Quando o input_type é definido como None, o texto de entrada será codificado diretamente pelo modelo de embeddings da Voyage. Alternativamente, quando as entradas são documentos ou consultas, os usuários podem especificar input_type como query ou document, respectivamente. Nesses casos, a Voyage irá adicionar um prompt especial ao texto de entrada e enviar as entradas estendidas para o modelo de embeddings
    • Para casos de uso de recuperação/pesquisa, recomendamos especificar esse argumento ao codificar consultas ou documentos para melhorar a qualidade da recuperação. Embeddings gerados com e sem o argumento input_type são compatíveis
  • truncation (bool, opcional, padrão None) - Se deve truncar os textos de entrada para caber no comprimento do contexto.
    • Se True, os textos de entrada muito longos serão truncados para caber no comprimento do contexto, antes de serem vetorizados pelo modelo de embeddings
    • Se False, um erro será lançado se qualquer texto fornecido exceder o comprimento do contexto
    • Se não for especificado (padrão None), a Voyage irá truncar o texto de entrada antes de enviá-lo para o modelo de embeddings se ele exceder ligeiramente o comprimento da janela de contexto. Se exceder significativamente o comprimento da janela de contexto, um erro será lançado

API HTTP da Voyage

Você também pode obter embeddings solicitando a API HTTP da Voyage. Por exemplo, você pode enviar uma solicitação HTTP por meio do comando curl em um terminal:

Shell
curl https://api.voyageai.com/v1/embeddings \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $VOYAGE_API_KEY" \
  -d '{
    "input": ["Texto de exemplo 1", "Texto de exemplo 2"],
    "model": "voyage-2"
  }'

A resposta que você obteria é um objeto JSON contendo os embeddings e o uso de tokens:

Shell
{
  "object": "list",
  "data": [
    {
      "embedding": [0.02012746, 0.01957859, ...],
      "index": 0
    },
    {
      "embedding": [0.01429677, 0.03077182, ...],
      "index": 1
    }
  ],
  "model": "voyage-2",
  "usage": {
    "total_tokens": 10
  }
}

O endpoint de embeddings da Voyage AI é https://api.voyageai.com/v1/embeddings (POST). O cabeçalho da solicitação deve conter a chave de API. O corpo da solicitação é um objeto JSON contendo os seguintes argumentos:

  • input (str, List[str]) - Uma única string de texto ou uma lista de textos como uma lista de strings. Atualmente, o comprimento máximo da lista é 128 e o número total de tokens na lista é no máximo 320K para voyage-2 e 120K para voyage-large-2/voyage-code-2.
  • model (str) - Nome do modelo. Opções recomendadas: voyage-2, voyage-large-2, voyage-code-2.
  • input_type (str, opcional, padrão None) - Tipo do texto de entrada. O padrão é None. Outras opções: query, document
  • truncation (bool, opcional, padrão None) - Se deve truncar os textos de entrada para caber no comprimento do contexto
    • Se True, os textos de entrada muito longos serão truncados para caber no comprimento do contexto antes de serem vetorizados pelo modelo de embeddings
    • Se False, um erro será lançado se qualquer texto fornecido exceder o comprimento do contexto
    • Se não for especificado (padrão None), a Voyage irá truncar o texto de entrada antes de enviá-lo para o modelo de embeddings se ele exceder ligeiramente o comprimento da janela de contexto. Se exceder significativamente o comprimento da janela de contexto, um erro será lançado
  • encoding_format (str, opcional, padrão None) - Formato no qual os embeddings são codificados. A Voyage atualmente suporta duas opções:
    • Se não for especificado (padrão None): os embeddings são representados como listas de números de ponto flutuante
    • "base64": os embeddings são compactados em codificações Base64

Exemplo de embedding da Voyage

Agora que sabemos como obter embeddings com a Voyage, vamos vê-la em ação com um breve exemplo.

Suponha que tenhamos um pequeno corpus de seis documentos para recuperar

Python
documents = [
    "A dieta mediterrânea enfatiza peixes, azeite e vegetais, acredita-se que reduz doenças crônicas.",
    "A fotossíntese nas plantas converte a energia luminosa em glicose e produz oxigênio essencial.",
    "Inovações do século 20, de rádios a smartphones, centradas em avanços eletrônicos.",
    "Os rios fornecem água, irrigação e habitat para espécies aquáticas, vitais para os ecossistemas.",
    "A teleconferência da Apple para discutir os resultados do quarto trimestre fiscal e atualizações de negócios está programada para quinta-feira, 2 de novembro de 2023, às 14h PT / 17h ET.",
    "As obras de Shakespeare, como 'Hamlet' e 'Sonho de uma Noite de Verão', perduram na literatura."
]

Primeiro, usaremos a Voyage para converter cada um deles em um vetor de embedding

Python
import voyageai

vo = voyageai.Client()

# Incorporar os documentos
doc_embds = vo.embed(
    documents, model="voyage-2", input_type="document"
).embeddings

Os embeddings nos permitirão fazer pesquisa/recuperação semântica no espaço vetorial. Podemos então converter uma consulta de exemplo,

Python
query = "Quando está programada a teleconferência da Apple?"

em um embedding e, em seguida, realizar uma pesquisa de vizinho mais próximo para encontrar o documento mais relevante com base na distância no espaço de embedding.

Python
import numpy as np

# Incorporar a consulta
query_embd = vo.embed(
    [query], model="voyage-2", input_type="query"
).embeddings[0]

# Calcular a similaridade
# Os embeddings da Voyage são normalizados para comprimento 1, portanto, o produto escalar
# e a similaridade do cosseno são iguais.
similarities = np.dot(doc_embds, query_embd)

retrieved_id = np.argmax(similarities)
print(documents[retrieved_id])

Observe que usamos input_type="document" e input_type="query" para incorporar o documento e a consulta, respectivamente. Mais especificações podem ser encontradas aqui.

A saída seria o 5º documento, que de fato é o mais relevante para a consulta:

A teleconferência da Apple para discutir os resultados do quarto trimestre fiscal e atualizações de negócios está programada para quinta-feira, 2 de novembro de 2023, às 14h PT / 17h ET.

Modelos Voyage disponíveis

A Voyage recomenda o uso dos seguintes modelos de embeddings:

ModeloComprimento do ContextoDimensão do EmbeddingDescrição
voyage-large-2160001536O modelo de embedding generalista mais poderoso da Voyage AI.
voyage-code-2160001536Otimizado para recuperação de código (17% melhor que as alternativas) e também SoTA em corpora de propósito geral. Veja este post no blog da Voyage para detalhes.
voyage-240001024Modelo de embedding generalista base otimizado para latência e qualidade.
voyage-lite-02-instruct40001024Instruction-tuned para tarefas de classificação, agrupamento e similaridade textual de sentenças, que são os únicos casos de uso recomendados para este modelo.

voyage-2 e voyage-large-2 são modelos de embeddings generalistas, que alcançam desempenho state-of-the-art em todos os domínios e mantêm alta eficiência. voyage-code-2 é otimizado para o campo de código, oferecendo 4 vezes o comprimento do contexto para uso mais flexível, embora com uma latência relativamente maior.

A Voyage está desenvolvendo ativamente modelos mais avançados e especializados, e também oferece serviços de fine-tuning para personalizar modelos sob medida para clientes individuais. Envie um e-mail para seu gerente de conta da Anthropic ou entre em contato com o suporte da Anthropic para obter mais informações sobre modelos personalizados.

-voyage-finance-2: em breve -voyage-law-2: em breve -voyage-multilingual-2: em breve -voyage-healthcare-2: em breve


Voyage no AWS Marketplace

Os embeddings da Voyage também estão disponíveis no AWS Marketplace. Aqui estão as instruções para acessar a Voyage na AWS:

  1. Inscreva-se no pacote do modelo
    1. Navegue até a página de listagem do pacote do modelo e selecione o modelo a ser implantado
    2. Clique no botão Continue to subscribe
    3. Revise cuidadosamente os detalhes na página Subscribe to this software. Se você concordar com o Contrato de Licença de Usuário Final (EULA) padrão, preços e termos de suporte, clique em “Accept Offer”
    4. Após selecionar Continue to configuration e escolher uma região, você receberá um Product Arn. Esse é o ARN do pacote do modelo necessário para criar um modelo implantável usando o Boto3
      1. Copie o ARN que corresponde à sua região selecionada e use-o na célula subsequente
  2. Implante o pacote do modelo

A partir daqui, crie um espaço JupyterLab no Sagemaker Studio, faça upload do notebook da Voyage e siga as instruções dentro dele.


Perguntas frequentes

Como calculo a distância entre dois vetores de embedding?

A similaridade do cosseno é uma escolha popular, mas a maioria das funções de distância funcionará bem. Os embeddings da Voyage são normalizados para comprimento 1, portanto, a similaridade do cosseno é essencialmente a mesma que o produto escalar entre dois vetores. Aqui está um trecho de código que você pode usar para calcular a similaridade do cosseno entre dois vetores de embedding.

Python
import numpy

similarity = np.dot(embd1, embd2)
# Os embeddings da Voyage são normalizados para comprimento 1, portanto, a similaridade do cosseno
# é igual ao produto escalar.

Se você quiser encontrar os K vetores de embedding mais próximos em um grande corpus, recomendamos usar os recursos integrados na maioria dos bancos de dados vetoriais.

Posso contar o número de tokens em uma string antes de incorporá-la?

Sim! Você pode fazer isso com o seguinte código.

Python
import voyageai

vo = voyageai.Client()
total_tokens = vo.count_tokens(["Texto de exemplo"])

Preços

Visite a página de preços da Voyage para obter os detalhes de preços mais atualizados.