Apresentando a integração do PyMilvus com modelos de incorporação
O Milvus é uma base de dados vetorial de código aberto concebida especificamente para aplicações de IA. Quer esteja a trabalhar em aprendizagem automática, aprendizagem profunda ou qualquer outro projeto relacionado com IA, o Milvus oferece uma forma robusta e eficiente de lidar com dados vectoriais em grande escala.
Agora, com a integração do módulo de modelo no PyMilvus, o Python SDK para Milvus, é ainda mais fácil adicionar modelos de Embedding e Reranking. Esta integração simplifica a transformação dos seus dados em vectores pesquisáveis ou a reclassificação dos resultados para obter resultados mais precisos, como no Retrieval Augmented Generation (RAG).
Neste blogue, vamos rever os modelos de incorporação densos, modelos de incorporação esparsos e re-classificadores e demonstrar como usá-los na prática usando o Milvus Lite, uma versão leve do Milvus que pode ser executada localmente nas suas aplicações Python.
Embeddings densos vs esparsos
Antes de mostrarmos como usar nossas integrações, vamos dar uma olhada em duas categorias principais de embeddings vetoriais.
Embeddings v etoriais geralmente se enquadram em duas categorias principais: Embeddings densos e Embeddings esparsos.
Os Embeddings densos são vetores de alta dimensão nos quais a maioria ou todos os elementos são diferentes de zero, o que os torna ideais para codificar a semântica do texto ou o significado difuso.
Os Embeddings esparsos são vectores de alta dimensão com muitos elementos nulos, mais adequados para codificar conceitos exactos ou adjacentes.
Milvus suporta ambos os tipos de embeddings e oferece pesquisa híbrida. A pesquisa híbrida permite-lhe efetuar pesquisas em vários campos vectoriais dentro da mesma coleção. Estes vectores podem representar diferentes facetas dos dados, utilizar diversos modelos de embedding ou empregar métodos de processamento de dados distintos, combinando os resultados através de re-rankers.
Como usar nossas integrações de incorporação e classificação
Nas seções a seguir, demonstraremos três exemplos práticos de uso de nossas integrações para gerar embeddings e conduzir pesquisas vetoriais.
Exemplo 1: usar a função de incorporação padrão para gerar vetores densos
É necessário instalar o cliente pymilvus
com o pacote model
para usar as funções de embedding e reranking com o Milvus.
pip install "pymilvus[model]"
Este passo irá instalar o Milvus Lite, permitindo-lhe executar o Milvus localmente dentro da sua aplicação Python. Também inclui o subpacote do modelo, que inclui todos os utilitários para Embedding e reranking.
O subpacote de modelos suporta vários modelos de incorporação, incluindo os da OpenAI, Sentence Transformers, BGE-M3, BM25, SPLADE e modelos pré-treinados da Jina AI.
Este exemplo usa o DefaultEmbeddingFunction
, baseado no modelo all-MiniLM-L6-v2
Sentence Transformer para simplificar. O modelo tem cerca de 70 MB e será descarregado durante a primeira utilização:
from pymilvus import model
# This will download "all-MiniLM-L6-v2", a lightweight 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:", embeddings)
# Print dimension and shape of embeddings
print("Dim:", ef.dim, embeddings[0].shape)
O resultado esperado deve ser algo como o 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 esparsos usando o modelo BM25
O BM25 é um método bem conhecido que usa frequências de ocorrência de palavras para determinar a relevância entre consultas e documentos. Neste exemplo, mostraremos como usar BM25EmbeddingFunction
para gerar embeddings esparsos para consultas e documentos.
No BM25, é importante calcular as estatísticas nos seus documentos para obter o IDF (Inverse Document Frequency), que pode representar os padrões nos seus documentos. O IDF mede a quantidade de informações que uma palavra fornece, seja ela comum ou rara em todos os documentos.
from pymilvus.model.sparse import BM25EmbeddingFunction
# 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 = "Where was Turing born?"
bm25_ef = BM25EmbeddingFunction()
# 2. Fit the corpus to get BM25 model parameters on your documents.
bm25_ef.fit(docs)
# 3. Store the fitted parameters to expedite future processing.
bm25_ef.save("bm25_params.json")
# 4. Load the saved params
new_bm25_ef = BM25EmbeddingFunction()
new_bm25_ef.load("bm25_params.json")
docs_embeddings = new_bm25_ef.encode_documents(docs)
query_embeddings = new_bm25_ef.encode_queries([query])
print("Dim:", new_bm25_ef.dim, list(docs_embeddings)[0].shape)
Exemplo 3: Utilizar um ReRanker
Um sistema de pesquisa tem como objetivo encontrar os resultados mais relevantes de forma rápida e eficiente. Tradicionalmente, métodos como BM25 ou TF-IDF têm sido utilizados para classificar os resultados da pesquisa com base na correspondência de palavras-chave. Os métodos mais recentes, como a similaridade de cosseno baseada na incorporação, são simples, mas podem por vezes ignorar as subtilezas da linguagem e, mais importante, a interação entre os documentos e a intenção de uma consulta.
É aqui que a utilização de um re-ranker ajuda. Um re-classificador é um modelo avançado de IA que pega no conjunto inicial de resultados de uma pesquisa - muitas vezes fornecido por uma pesquisa baseada em embeddings/token - e reavalia-os para garantir que se alinham melhor com a intenção do utilizador. Não se limita à correspondência superficial de termos e considera a interação mais profunda entre a consulta de pesquisa e o conteúdo dos documentos.
Para este exemplo, vamos utilizar o Jina AI Reranker.
from pymilvus.model.reranker import JinaRerankFunction
jina_api_key = "<YOUR_JINA_API_KEY>"
rf = JinaRerankFunction("jina-reranker-v1-base-en", jina_api_key)
query = "What event in 1956 marked the official birth of artificial intelligence as a discipline?"
documents = [
"In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.",
"The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.",
"In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.",
"The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems."
]
results = rf(query, documents)
for result in results:
print(f"Index: {result.index}")
print(f"Score: {result.score:.6f}")
print(f"Text: {result.text}\n")
O resultado esperado é semelhante ao seguinte:
Index: 1
Score: 0.937096
Text: The Dartmouth Conference in 1956 is considered the birthplace of artificial intelligence as a field; here, John McCarthy and others coined the term 'artificial intelligence' and laid out its basic goals.
Index: 3
Score: 0.354210
Text: The invention of the Logic Theorist by Allen Newell, Herbert A. Simon, and Cliff Shaw in 1955 marked the creation of the first true AI program, which was capable of solving logic problems, akin to proving mathematical theorems.
Index: 0
Score: 0.349866
Text: In 1950, Alan Turing published his seminal paper, 'Computing Machinery and Intelligence,' proposing the Turing Test as a criterion of intelligence, a foundational concept in the philosophy and development of artificial intelligence.
Index: 2
Score: 0.272896
Text: In 1951, British mathematician and computer scientist Alan Turing also developed the first program designed to play chess, demonstrating an early example of AI in game strategy.
Inscreva-nos no GitHub e junte-se ao nosso Discord!
Se gostou deste post, considere marcar Milvus com uma estrela no GitHub e junte-se ao nosso Discord! 💙
- Embeddings densos vs esparsos
- Como usar nossas integrações de incorporação e classificação
- Inscreva-nos no GitHub e junte-se ao nosso Discord!
On This Page
Try Managed Milvus for Free
Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.
Get StartedLike the article? Spread the word