milvus-logo
LFAI
Home
  • Modelos

Visão geral da incorporação

A incorporação é um conceito de aprendizagem automática para mapear dados num espaço de elevada dimensão, onde dados de semântica semelhante são colocados próximos uns dos outros. Sendo normalmente uma Rede Neuronal Profunda do BERT ou de outras famílias de Transformadores, o modelo de incorporação pode representar eficazmente a semântica de texto, imagens e outros tipos de dados com uma série de números conhecidos como vectores. Uma caraterística fundamental destes modelos é que a distância matemática entre vectores no espaço de elevada dimensão pode indicar a semelhança da semântica do texto ou das imagens originais. Esta propriedade abre muitas aplicações de recuperação de informação, como os motores de pesquisa da Web, como o Google e o Bing, a pesquisa de produtos e as recomendações em sítios de comércio eletrónico, e o paradigma recentemente popular da Geração Aumentada de Recuperação (RAG) na IA generativa.

Existem duas categorias principais de embeddings, cada uma produzindo um tipo diferente de vetor:

  • Incorporação densa: A maioria dos modelos de incorporação representa a informação como um vetor de vírgula flutuante de centenas a milhares de dimensões. O resultado é designado por vectores "densos", uma vez que a maioria das dimensões tem valores diferentes de zero. Por exemplo, o popular modelo de incorporação de fonte aberta BAAI/bge-base-en-v1.5 produz vectores de 768 números de vírgula flutuante (vetor flutuante de 768 dimensões).

  • Incorporação esparsa: Em contrapartida, os vectores de saída das incorporações esparsas têm a maior parte das dimensões igual a zero, nomeadamente os vectores "esparsos". Estes vectores têm frequentemente dimensões muito mais elevadas (dezenas de milhares ou mais), o que é determinado pela dimensão do vocabulário de símbolos. Os vectores esparsos podem ser gerados por redes neurais profundas ou pela análise estatística de corpora de texto. Devido à sua interpretabilidade e às melhores capacidades de generalização observadas fora do domínio, as incorporações esparsas são cada vez mais adoptadas pelos programadores como um complemento às incorporações densas.

Milvus é uma base de dados vetorial concebida para a gestão, armazenamento e recuperação de dados vectoriais. Ao integrar os principais modelos de incorporação e classificação, pode facilmente transformar o texto original em vectores pesquisáveis ou classificar os resultados utilizando modelos poderosos para obter resultados mais precisos para RAG. Esta integração simplifica a transformação de texto e elimina a necessidade de componentes adicionais de incorporação ou classificação, optimizando assim o desenvolvimento e a validação de RAG.

Para criar embeddings em ação, consulte Utilizar o modelo do PyMilvus para gerar embeddings de texto.

Função de incorporaçãoTipo de funçãoAPI ou código aberto
openaiDensaAPI
transformador de frasesDensoOpen-sourced
SpladeEsparsoDe fonte aberta
bge-m3HíbridoDe fonte aberta
voyageaiDensaAPI
jinaDensaAPI
cohereDensaAPI
InstrutorDensaCódigo aberto
IA MistralDensaAPI
NomicDensaAPI
mGTEHíbridaDe fonte aberta

Exemplo 1: Utilizar a função de incorporação predefinida para gerar vectores densos

Para usar funções de incorporação com Milvus, primeiro instale a biblioteca cliente PyMilvus com o subpacote model que envolve todos os utilitários para a geração de incorporação.

pip install "pymilvus[model]"

O subpacote model suporta vários modelos de incorporação, desde OpenAI, Sentence Transformers, BGE M3, até modelos pré-treinados SPLADE. Por uma questão de simplicidade, este exemplo utiliza o DefaultEmbeddingFunction que é um modelo de transformador de frases totalmente MiniLM-L6-v2, o modelo tem cerca de 70MB e será descarregado durante a primeira utilização:

from pymilvus import model

# This will download "all-MiniLM-L6-v2", a light weight model.
ef = model.DefaultEmbeddingFunction()

# Data from which embeddings are to be generated 
docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]

embeddings = ef.encode_documents(docs)

# Print embeddings
print("Embeddings:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)

O resultado esperado é semelhante ao seguinte:

Embeddings: [array([-3.09392996e-02, -1.80662833e-02,  1.34775648e-02,  2.77156215e-02,
       -4.86349640e-03, -3.12581174e-02, -3.55921760e-02,  5.76934684e-03,
        2.80773244e-03,  1.35783911e-01,  3.59678417e-02,  6.17732145e-02,
...
       -4.61330153e-02, -4.85207550e-02,  3.13997865e-02,  7.82178566e-02,
       -4.75336798e-02,  5.21207601e-02,  9.04406682e-02, -5.36676683e-02],
      dtype=float32)]
Dim: 384 (384,)

Exemplo 2: Gerar vectores densos e esparsos numa única chamada com o modelo BGE M3

Neste exemplo, utilizamos o modelo híbrido BGE M3 para incorporar texto em vectores densos e esparsos e utilizá-los para obter documentos relevantes. Os passos gerais são os seguintes:

  1. Incorporar o texto como vectores densos e esparsos utilizando o modelo BGE-M3;

  2. Criar uma coleção Milvus para armazenar os vectores densos e esparsos;

  3. Inserir os dados no Milvus;

  4. Pesquisar e inspecionar o resultado.

Primeiro, precisamos de instalar as dependências necessárias.

from pymilvus.model.hybrid import BGEM3EmbeddingFunction
from pymilvus import (
    utility,
    FieldSchema, CollectionSchema, DataType,
    Collection, AnnSearchRequest, RRFRanker, connections,
)

Utilizar o BGE M3 para codificar documentos e consultas para recuperação por incorporação.

# 1. prepare a small corpus to search
docs = [
    "Artificial intelligence was founded as an academic discipline in 1956.",
    "Alan Turing was the first person to conduct substantial research in AI.",
    "Born in Maida Vale, London, Turing was raised in southern England.",
]
query = "Who started AI research?"

# BGE-M3 model can embed texts as dense and sparse vectors.
# It is included in the optional `model` module in pymilvus, to install it,
# simply run "pip install pymilvus[model]".

bge_m3_ef = BGEM3EmbeddingFunction(use_fp16=False, device="cpu")

docs_embeddings = bge_m3_ef(docs)
query_embeddings = bge_m3_ef([query])

Traduzido porDeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Esta página foi útil?