Antes de implementar embeddings

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

  • Tamanho do dataset e especificidade do domínio: tamanho do dataset 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
  • Desempenho de inferência: velocidade de busca de embedding e latência fim a fim. Esta é uma consideração particularmente importante para implantações em 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 Anthropic

A Anthropic não oferece seu próprio modelo de embedding. Um provedor de embeddings que tem uma ampla variedade de opções e recursos abrangendo todas as considerações acima é a Voyage AI.

A Voyage AI desenvolve modelos de embedding estado da arte e oferece modelos personalizados para domínios específicos da indústria, como finanças e saúde, ou modelos ajustados sob medida para clientes individuais.

O resto deste guia é para a Voyage AI, mas incentivamos 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. Cadastre-se no site da Voyage AI
  2. Obtenha uma chave de API
  3. Configure a chave de API como uma variável de ambiente para conveniência:
Python
export VOYAGE_API_KEY="<your secret key>"

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

Pacote Python Voyage

O pacote voyageai pode ser instalado usando o seguinte comando:

Python
pip install -U voyageai

Em seguida, você pode criar um objeto 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="<your secret key>")

texts = ["Sample text 1", "Sample text 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 embedding, 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 "Sample text 1"
[0.01429677, 0.03077182, ...]  # embedding para "Sample text 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 ["I like cats", "I also like dogs"]. 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. 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 embedding 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 embedding
    • Para casos de uso de recuperação/busca, recomendamos especificar este 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 dentro do comprimento do contexto.
    • Se True, textos de entrada muito longos serão truncados para caber dentro do comprimento do contexto, antes de serem vetorizados pelo modelo de embedding
    • Se False, um erro será gerado se algum texto dado exceder o comprimento do contexto
    • Se não especificado (padrão é None), a Voyage truncará o texto de entrada antes de enviá-lo ao modelo de embedding se ele exceder ligeiramente o comprimento da janela de contexto. Se exceder significativamente o comprimento da janela de contexto, um erro será gerado

API HTTP Voyage

Você também pode obter embeddings solicitando a API HTTP da Voyage. Por exemplo, você pode enviar uma solicitação HTTP através 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": ["Sample text 1", "Sample text 2"],
    "model": "voyage-2"
  }'

A resposta que você receberia é 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 embedding da Voyage AI é https://api.voyageai.com/v1/embeddings (POST). O cabeçalho da requisição deve conter a chave da API. O corpo da requisiçã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. Padrão é None. Outras opções: query, document
  • truncation (bool, opcional, padrão é None) - Se deve truncar os textos de entrada para caber dentro do comprimento do contexto
    • Se True, textos de entrada muito longos serão truncados para caber dentro do comprimento do contexto antes de serem vetorizados pelo modelo de embedding
    • Se False, um erro será gerado se algum texto dado exceder o comprimento do contexto
    • Se não especificado (padrão é None), a Voyage truncará o texto de entrada antes de enviá-lo ao modelo de embedding se ele exceder ligeiramente o comprimento da janela de contexto. Se exceder significativamente o comprimento da janela de contexto, um erro será gerado
  • 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 especificado (padrão é None): os embeddings são representados como listas de números de ponto flutuante
    • "base64": os embeddings são comprimidos para codificações Base64

Exemplo de embedding Voyage

Agora que sabemos como obter embeddings com a Voyage, vamos ver isso em ação com um breve exemplo.

Suponha que temos um pequeno corpus de seis documentos para recuperar

Python
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 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 busca semântica / recuperação no espaço vetorial. Podemos então converter uma consulta de exemplo,

Python
query = "When is Apple's conference call scheduled?"

em um embedding, e então conduzir uma busca do 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 os mesmos.
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:

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.

Modelos Voyage disponíveis

A Voyage recomenda usar os seguintes modelos de embedding:

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 alternativas), e também estado da arte em corpora de propósito geral. Veja este post do blog da Voyage para detalhes.
voyage-240001024Modelo de embedding generalista base otimizado para latência e qualidade.
voyage-lite-02-instruct40001024Treinado com instruções 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 embedding generalistas, que alcançam desempenho estado da arte em diversos domínios e mantêm alta eficiência. voyage-code-2 é otimizado para a área de código, oferecendo 4x o comprimento do contexto para uso mais flexível, embora com uma latência relativamente maior.

A Voyage está ativamente desenvolvendo 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 Anthropic ou entre em contato com o suporte Anthropic para 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. Assine o pacote do modelo
    1. Navegue até a página de listagem do pacote do modelo e selecione o modelo para implantar
    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. Depois de selecionar Continue to configuration e escolher uma região, você receberá um Product Arn. Este é o ARN do pacote do modelo necessário para criar um modelo implantável usando 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 nele contidas.


FAQ


Preços

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