Modelos de Incorporação de Texto
Os modelos de incorporação de texto são usados principalmente para calcular a representação vetorial do texto. Aqui, o termo "vetor" refere-se a um vetor matemático, também conhecido como vetor de características. Como desenvolvedor, tudo o que você precisa saber é que um modelo de incorporação de texto pode calcular o vetor de características de um trecho de texto e, em seguida, usando cálculos de similaridade de vetores, pode identificar conteúdo de texto com características semelhantes.
Dica: Para conhecimentos básicos sobre modelos de incorporação de texto, consulte o Tutorial Introdutório sobre Modelos de Incorporação de Texto
Diferença Entre Busca por Vetor e Busca Baseada em Palavras-Chave
- A busca por vetor é baseada na similaridade semântica de vetores de palavras. Ela pode encontrar resultados que estão semanticamente relacionados à consulta, mesmo que as palavras da consulta e as palavras nos resultados não coincidam exatamente. A busca por vetor mapeia palavras para um espaço vetorial de alta dimensão e calcula a similaridade entre vetores. Isso significa que mesmo que as palavras em si não coincidam, contanto que sejam semanticamente semelhantes, os resultados relacionados podem ser encontrados.
- Por outro lado, a busca baseada em palavras-chave é um processo simples de correspondência de strings. Ela retorna apenas resultados que contenham palavras de consulta que coincidam exatamente. Se um documento usar palavras diferentes, mesmo que sejam semanticamente semelhantes, elas não serão correspondidas.
A classe de Incorporações é um tipo de classe especificamente projetada para interagir com modelos de incorporação de texto. Existem muitos provedores de modelos de incorporação (como OpenAI, Cohere, Hugging Face, etc.), e o design desta classe é fornecer uma interface padrão para todos os provedores.
A classe de Incorporações cria a representação vetorial do texto. Com a busca por vetor, buscas semânticas podem ser realizadas, por exemplo, procurando os trechos de texto mais semelhantes no espaço vetorial.
A classe de Incorporações básica em LangChain expõe dois métodos: um para incorporar documentos e outro para incorporar consultas. O primeiro recebe múltiplos textos como entrada, enquanto o segundo recebe um único texto como entrada. A razão pela qual eles são tratados como dois métodos diferentes é que alguns provedores de incorporação têm métodos de incorporação diferentes para os documentos a serem pesquisados e as consultas (as próprias consultas de pesquisa).
Início Rápido
Abaixo está um exemplo usando o modelo de incorporação da OpenAI:
Configuração
Primeiro, precisamos instalar o pacote Python da OpenAI. Como o LangChain possui muitas implementações diferentes de modelos de incorporação de texto, os desenvolvedores precisam instalar as dependências de diferentes modelos de acordo com suas escolhas:
pip install langchain-openai
Configure a chave da OpenAI por meio de variáveis de ambiente:
export OPENAI_API_KEY="..."
Se você não deseja definir variáveis de ambiente, pode passar o parâmetro nomeado openai_api_key
diretamente ao inicializar a classe LLM da OpenAI para passar a chave:
from langchain_openai import OpenAIEmbeddings
modelo_incorporacao = OpenAIEmbeddings(openai_api_key="...")
Caso contrário, você pode inicializar sem parâmetros:
from langchain_openai import OpenAIEmbeddings
modelo_incorporacao = OpenAIEmbeddings()
incorporar_documentos
Calcular as características vetoriais de um lote de texto:
incorporacoes = modelo_incorporacao.incorporar_documentos(
[
"Oi!",
"Ah, olá!",
"Qual é o seu nome?",
"Meus amigos me chamam de World",
"Olá, Mundo!"
]
)
len(incorporacoes), len(incorporacoes[0])
(5, 1536)
incorporar_consulta
Esta função calcula a característica vetorial de um texto de consulta. Tipicamente, envolve a conversão da pergunta a ser pesquisada em um vetor de características e, em seguida, usar este vetor para pesquisar textos semelhantes no banco de dados vetorial.
consulta_incorporada = modelo_incorporacao.incorporar_consulta("Qual era o nome mencionado na conversa?")
consulta_incorporada[:5]
[0.0053587136790156364,
-0.0004999046213924885,
0.038883671164512634,
-0.003001077566295862,
-0.00900818221271038]