Aprendizagem pessoal com IA
e orientação prática

Como escolher o melhor modelo de incorporação para aplicativos RAG

A incorporação de vetores está no centro dos atuais aplicativos RAG (Retrieval Augmented Generation). Eles capturam informações semânticas sobre objetos de dados (por exemplo, texto, imagens etc.) e as representam como matrizes de números. Nos aplicativos atuais de IA generativa, essas incorporações de vetores geralmente são geradas por modelos de incorporação. Como escolher o modelo de incorporação correto para um aplicativo RAG? Em geral, isso depende do caso de uso específico, bem como dos requisitos específicos. A seguir, vamos detalhar as etapas para analisar cada uma delas individualmente.


 

01. identificar casos de uso específicos

Consideramos as seguintes questões com base nos requisitos de aplicação do RAG:

Em primeiro lugar, um modelo genérico é suficiente para atender às necessidades?

Segundo, existem necessidades específicas? Por exemplo, modal (por exemplo, somente texto ou imagem, para opções de incorporação multimodal, consulte Como escolher o modelo de incorporação correto), específico do domínio (por exemplo, jurídico, médico etc.)

Na maioria dos casos, um modelo genérico é geralmente escolhido para os modos desejados.

 

02. seleção de modelos genéricos

Como escolher um modelo de uso geral? A tabela de classificação do Massive Text Embedding Benchmark (MTEB) no HuggingFace lista uma variedade de modelos atuais de incorporação de texto proprietários e de código aberto e, para cada modelo de incorporação, o MTEB lista uma variedade de métricas, incluindo parâmetros do modelo, memória, dimensões de incorporação, número máximo de tokens e suas pontuações em tarefas como recuperação e resumo.

Os fatores a seguir precisam ser considerados ao selecionar um modelo de incorporação para um aplicativo RAG:

mandatosNa parte superior do MTEB Leaderboard, veremos várias guias de tarefas. Para um aplicativo RAG, talvez precisemos nos concentrar mais na tarefa "Retrieve" (Recuperar), na qual podemos escolher Novo julgamento Essa guia.

multilinguismoCom base no idioma do conjunto de dados no qual o RAG é aplicado para selecionar o modelo de incorporação para o idioma correspondente.

pontuaçãoIndicação de desempenho: Indica o desempenho do modelo em um conjunto de dados de referência específico ou em vários conjuntos de dados de referência. Dependendo da tarefa, são usadas diferentes métricas de avaliação. Normalmente, essas métricas assumem valores que variam de 0 a 1, sendo que valores mais altos indicam melhor desempenho.

Tamanho do modelo e uso de memóriaEssas métricas nos dão uma ideia dos recursos computacionais necessários para executar o modelo. Embora o desempenho da recuperação melhore com o tamanho do modelo, é importante observar que o tamanho do modelo também afeta diretamente a latência. Além disso, modelos maiores podem ser excessivamente ajustados e ter baixo desempenho de generalização, o que resulta em um desempenho ruim na produção. Portanto, precisamos buscar um equilíbrio entre o desempenho e a latência em um ambiente de produção. Em geral, podemos começar com um modelo pequeno e leve e criar o aplicativo RAG rapidamente primeiro. Depois que o processo subjacente do aplicativo estiver funcionando corretamente, podemos mudar para um modelo maior e de desempenho mais alto para otimizar ainda mais o aplicativo.

Dimensões de incorporaçãoComprimento do vetor de incorporação: Esse é o comprimento do vetor de incorporação. Embora dimensões de incorporação maiores possam capturar detalhes mais finos nos dados, os resultados não são necessariamente ideais. Por exemplo, será que realmente precisamos de 8192 dimensões para dados de documentos? Provavelmente não. Por outro lado, dimensões de incorporação menores proporcionam inferência mais rápida e são mais eficientes em termos de armazenamento e memória. Portanto, precisamos encontrar um bom equilíbrio entre a captura do conteúdo dos dados e a eficiência da execução.

Número máximo de tokensindica o número máximo de tokens para uma única incorporação. Para aplicativos RAG comuns, o melhor tamanho de fragmento para incorporação é geralmente um único parágrafo, caso em que um modelo de incorporação com um token máximo de 512 deve ser suficiente. Entretanto, em alguns casos especiais, podemos precisar de modelos com um número maior de tokens para lidar com textos mais longos.

 

03. avaliação de modelos em aplicativos RAG

Embora possamos encontrar modelos genéricos nas tabelas de classificação do MTEB, precisamos tratar seus resultados com cautela. Levando em conta que esses resultados são informados pelos próprios modelos, é possível que alguns modelos produzam pontuações que aumentam seu desempenho porque podem ter incluído os conjuntos de dados do MTEB em seus dados de treinamento, que são, afinal, conjuntos de dados disponíveis publicamente. Além disso, o conjunto de dados que o modelo usa para avaliação comparativa pode não representar com precisão os dados usados em nosso aplicativo. Portanto, precisamos avaliar os modelos de incorporação em nossos próprios conjuntos de dados.

3.1 Conjuntos de dados

Podemos gerar um pequeno conjunto de dados marcados a partir dos dados usados pelo aplicativo RAG. Vamos usar o seguinte conjunto de dados como exemplo.

Idioma Descrição
C/C++ Linguagem de programação de uso geral, conhecida por seu desempenho e eficiência, que oferece recursos de manipulação de memória de baixo nível e é amplamente usada no desenvolvimento de sistemas/software, desenvolvimento de jogos e aplicativos que exigem alto desempenho.
Java Uma linguagem de programação versátil e orientada a objetos, projetada para ter o mínimo possível de dependências de implementação. É amplamente usada para criar aplicativos de escala empresarial, aplicativos móveis (especialmente Android) e aplicativos da Web devido à sua portabilidade e robustez.
Python Linguagem de programação interpretada de alto nível, conhecida por sua legibilidade e simplicidade. Suporta vários paradigmas de programação e é amplamente Oferece suporte a vários paradigmas de programação e é amplamente utilizada no desenvolvimento da Web, na análise de dados, na inteligência artificial, na computação científica e na automação.
JavaScript Linguagem de programação dinâmica e de alto nível usada principalmente para criar conteúdo interativo e dinâmico na Web. É uma tecnologia essencial para o desenvolvimento front-end da Web e é cada vez mais usada no lado do servidor com ambientes como o Node.js.
C# É usado para o desenvolvimento de uma ampla gama de aplicativos, incluindo web, desktop, dispositivos móveis e jogos, especialmente dentro do ecossistema da Microsoft. É usado para o desenvolvimento de uma ampla variedade de aplicativos, incluindo Web, desktop, móveis e jogos, especialmente no ecossistema da Microsoft.
SQL Linguagem específica de domínio usada na programação e no gerenciamento de bancos de dados relacionais, essencial para consultar, atualizar e gerenciar dados em bancos de dados. É essencial para consultar, atualizar e gerenciar dados em bancos de dados e é amplamente usada em análise de dados e business intelligence.
PHP Ele é incorporado ao HTML e é amplamente usado para criar páginas da Web e aplicativos dinâmicos, com uma forte presença em sistemas de gerenciamento de conteúdo como o WordPress. aplicativos, com uma forte presença em sistemas de gerenciamento de conteúdo como o WordPress.
Golang Linguagem de programação compilada e estaticamente tipada, projetada pelo Google. Conhecida por sua simplicidade e eficiência, é usada para criar aplicativos escalonáveis e de alto desempenho, principalmente em serviços de nuvem e sistemas distribuídos. -desempenho, especialmente em serviços de nuvem e sistemas distribuídos.
Ferrugem Linguagem de programação de sistemas focada em segurança e simultaneidade. Fornece segurança de memória sem usar um coletor de lixo e é usada para criar software confiável e eficiente. Fornece segurança de memória sem usar um coletor de lixo e é usada para criar software confiável e eficiente, especialmente em programação de sistemas e montagem na Web.

3.2 Criação de incorporação

Em seguida, usamos opymilvus [modelo]Para o conjunto de dados acima, o vetor Embedding correspondente é gerado. pymilvus [modelo] Para uso, consulte https://milvus.io/blog/introducing-pymilvus-integrations-with-embedding-models.md

def gen_embedding(nome_do_modelo).
    openai_ef = model.dense.OpenAIEmbeddingFunction(
        model_name=model_name, api_key=os.environ.
        api_key=os.environ["OPENAI_API_KEY"]
    )

    docs_embeddings = openai_ef.encode_documents(df['description'].tolist())

return docs_embeddings, openai_ef

Em seguida, o Embedding gerado é depositado na coleção do Milvus.

def save_embedding(docs_embeddings, collection_name, dim):
    data = [
        {"id": i, "vector": docs_embeddings[i].data, "text": row.language}
        for i, row in df.iterrows()
    ]

    if milvus_client.has_collection(collection_name=collection_name).
        milvus_client.drop_collection(nome_da_coleção=nome_da_coleção)
    milvus_client.create_collection(nome_da_coleção=nome_da_coleção, dimensão=dim)

    res = milvus_client.insert(nome_da_coleção=nome_da_coleção, dados=dados)

3.3 Consultas

Definimos funções de consulta para facilitar a recuperação do vetor Embedding.

def query_results(query, collection_name, openai_ef).
    query_embeddings = openai_ef.encode_queries(query)
    res = milvus_client.search(
        nome_da_coleção=nome_da_coleção,
        data=query_embeddings,
        limit=4,
        output_fields=["text"],
    )

result = {}
    for items in res.
        for item in items: result[item.get("entity")]=item.get('distance')
            result[item.get("entity").get("text")] = item.get('distance')

retornar resultado

3.4 Avaliação do desempenho do modelo de incorporação

Usamos dois modelos de incorporação da OpenAI.incorporação de texto-3-pequeno responder cantando incorporação de texto-3-grandepara as duas consultas a seguir são comparados. Há muitas métricas de avaliação, como precisão, recall, MRR, MAP etc. Aqui, usamos a precisão e a recuperação.

Precisão Avalia a porcentagem de conteúdo genuinamente relevante nos resultados da pesquisa, ou seja, quantos dos resultados retornados são relevantes para a consulta de pesquisa.

Precisão = TP / (TP + FP)

Nesse caso, os True Positives (TP) são aqueles que são realmente relevantes para a consulta, enquanto os False Positives (FP) referem-se àqueles que não são relevantes nos resultados da pesquisa.

O recall avalia a quantidade de conteúdo relevante recuperado com êxito de todo o conjunto de dados.

Recuperação = TP / (TP + FN)

Os falsos negativos (FN) referem-se a todos os itens relevantes que não estão incluídos no conjunto de resultados finais.

Para obter uma explicação mais detalhada desses dois conceitos

Consulta 1::coleta automática de lixo

Itens relacionados: Java, Python, JavaScript, Golang

Classificação incorporação de texto-3-pequeno incorporação de texto-3-grande
1 ❎ Ferrugem ❎ Ferrugem
2 ❎ C/C++ ❎ C/C++
3 ✅ Golang ✅ Java
4 ✅ Java ✅ Golang
Precisão 0.50 0.50
Recall 0.50 0.50

Consulta 2::suíte para desenvolvimento de servidor de back-end da Web

Itens relacionados: Java, JavaScript, PHP, Python (as respostas incluem julgamento subjetivo)

Classificação incorporação de texto-3-pequeno incorporação de texto-3-grande
1 ✅ PHP ✅ JavaScript
2 ✅ Java ✅ Java
3 ✅ JavaScript ✅ PHP
4 ❎ C# ✅Python
Precisão 0.75 1.0
Recall 0.75 1.0

Nessas duas consultas, comparamos os dois modelos de incorporação de acordo com a precisão e a recuperação incorporação de texto-3-pequeno responder cantando incorporação de texto-3-grande O modelo Embedding pode ser usado como ponto de partida. Podemos usá-lo como ponto de partida para aumentar o número de objetos de dados no conjunto de dados, bem como o número de consultas, para que o modelo de incorporação possa ser avaliado com mais eficácia.

 

04. resumo

Nos aplicativos Retrieval Augmented Generation (RAG), a seleção de modelos de incorporação de vetores adequados é crucial. Neste artigo, ilustramos que, depois de selecionar um modelo genérico do MTEB a partir dos requisitos reais do negócio, a precisão e a recuperação são usadas para testar o modelo com base em um conjunto de dados específico do negócio, de modo a selecionar o modelo de incorporação mais adequado, o que, por sua vez, melhora efetivamente a precisão da recuperação do aplicativo RAG.

O código completo está disponível para download

Endereço para download de documentos relacionados
Os direitos autorais dos recursos de download © pertencem ao autor; todos os recursos deste site são da rede, apenas para fins de aprendizado; por favor, apoie a versão original!
Não pode ser reproduzido sem permissão:Chefe do Círculo de Compartilhamento de IA " Como escolher o melhor modelo de incorporação para aplicativos RAG

Chefe do Círculo de Compartilhamento de IA

O Chief AI Sharing Circle se concentra no aprendizado de IA, fornecendo conteúdo abrangente de aprendizado de IA, ferramentas de IA e orientação prática. Nosso objetivo é ajudar os usuários a dominar a tecnologia de IA e explorar juntos o potencial ilimitado da IA por meio de conteúdo de alta qualidade e compartilhamento de experiências práticas. Seja você um iniciante em IA ou um especialista sênior, este é o lugar ideal para adquirir conhecimento, aprimorar suas habilidades e realizar inovações.

Entre em contato conosco
pt_BRPortuguês do Brasil