BAAI / bge-m3
Milvus Integrated
Tarefa: Incorporação
Modalidade: Texto
Métrica de Similaridade: Cosseno, produto escalar
Licença: Mit
Dimensões: 1024
Tokens Máximos de Entrada: 8192
Preço: Grátis
Introdução à BGE-M3
O BGE-M3 é um modelo de incorporação de texto desenvolvido pelo BAAI, adaptado para ser versátil em diferentes línguas e tarefas. Suporta mais de 100 idiomas e lida com tamanhos de entrada de até 8192 tokens. Esta capacidade permite que o BGE-M3 se destaque em tarefas de recuperação densas, esparsas e multi-vectoriais, tornando-o altamente eficaz na recuperação de documentos e na resposta a perguntas. O desempenho de ponta do modelo é demonstrado em benchmarks como MKQA e MLDR. A sua arquitetura inclui a destilação de auto-conhecimento, melhorando a adaptabilidade e a precisão em vários conjuntos de dados, posicionando-o como uma ferramenta poderosa para a recuperação de informação multilingue.
Como criar embeddings com BGE-M3
Existem duas formas de gerar embeddings vectoriais:
- PyMilvus: o Python SDK para Milvus que integra perfeitamente o modelo
bge-m3. - Biblioteca FlagEmbedding: a biblioteca Python
FlagEmbedding.
Uma vez criados os embeddings vectoriais, estes podem ser armazenados na Zilliz Cloud (um serviço de base de dados vetorial totalmente gerido pelo Milvus) e utilizados para pesquisa de similaridade semântica. Aqui estão quatro etapas principais:
- Inscrever-se](https://cloud.zilliz.com/signup) para uma conta Zilliz Cloud gratuitamente.
- Configurar um cluster sem servidor](https://docs.zilliz.com/docs/create-cluster#set-up-a-free-cluster) e obter o Ponto de extremidade público e chave de API.
- Crie uma coleção de vectores e insira os seus embeddings vectoriais.
- Execute uma pesquisa semântica nos embeddings armazenados.
Criar embeddings via PyMilvus
from pymilvus.model.hybrid import BGEM3EmbeddingFunction
from pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
ef = BGEM3EmbeddingFunction()
docs = [
"A inteligência artificial foi fundada como disciplina académica em 1956",
"Alan Turing foi a primeira pessoa a efetuar investigação substancial em IA.",
"Nascido em Maida Vale, Londres, Turing foi criado no sul de Inglaterra."
]
# Gerar embeddings para os documentos
docs_embeddings = ef.encode_documents(docs)
consultas = [ "Quando foi fundada a inteligência artificial",
"Onde nasceu Alan Turing?"]
# Gerar ligações para as consultas
consultas_embeddings = ef.encode_queries(consultas)
cliente = MilvusClient(
uri=ZILLIZ_PUBLIC_ENDPOINT,
token=ZILLIZ_API_KEY)
schema = client.create_schema(
auto_id=True,
enable_dynamic_field=True,
)
schema.add_field(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
nome_do_campo="vector_denso",
datatype=DataType.FLOAT_VECTOR,
dim=ef.dim["dense"],
)
schema.add_field(
nome_do_campo="vector_esparso", tipo de dados=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
field_name="dense_vector", index_type="FLAT", metric_type="IP"
)
index_params.add_index(
nome_do_campo="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
COLLECTION = "documents" (coleção = "documentos")
if client.has_collection(nome_da_colecção=COLLECTION):
cliente.drop_collection(nome_da_colecção=COLLECTION)
client.create_collection(
nome_da_colecção=COLLECTION,
schema=schema,
index_params=index_params,
enable_dynamic_field=True,
)
for i in range(len(docs)):
doc, dense_embedding, sparse_embedding = docs[i], docs_embeddings["dense"][i], docs_embeddings["sparse"][[i]]
client.insert(COLLECTION, {"text": doc, "dense_vector": dense_embedding, "sparse_vector": sparse_embedding})
k = 1
lista_req = []
dense_embedding = query_embeddings["dense"][0]
esparso_embedding = query_embeddings["esparso"][[0]]
dense_search_param = {
"data": [dense_embedding],
"anns_field": "vector_denso",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
dense_req = AnnSearchRequest(**dense_search_param)
req_list.append(dense_req)
sparse_search_param = {
"data": [sparse_embedding],
"anns_field": "vector_esparso",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
resultados = client.hybrid_search(
COLLECTION,
req_list,
WeightedRanker(1.0, 1.0),
k,
consistency_level="Strong",
output_fields=["text"]
)
Consulte a nossa PyMilvus Documentation para um guia passo-a-passo detalhado.
Gerar embeddings vectoriais através da biblioteca FlagEmbedding
from pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=False)
docs = [
"A inteligência artificial foi fundada como disciplina académica em 1956",
"Alan Turing foi a primeira pessoa a efetuar investigação substancial em IA",
"Nascido em Maida Vale, Londres, Turing foi criado no sul de Inglaterra."
]
# Gerar embeddings para documentos
docs_embeddings = model.encode(docs, return_dense=True, return_sparse=True)
consultas = ["Quando foi fundada a inteligência artificial",
"Onde nasceu Alan Turing?"]
# Gerar embeddings para as consultas
query_embeddings = model.encode(queries, return_dense=True, return_sparse=True)
cliente = MilvusClient(
uri=ZILLIZ_PUBLIC_ENDPOINT,
token=ZILLIZ_API_KEY)
schema = client.create_schema(
auto_id=True,
enable_dynamic_field=True,
)
schema.add_field(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
nome_do_campo="vector_denso",
datatype=DataType.FLOAT_VECTOR,
dim=1024,
)
schema.add_field(
nome do campo="vector_esparso", tipo de dados=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
field_name="dense_vector", index_type="FLAT", metric_type="IP"
)
index_params.add_index(
nome_do_campo="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
COLLECTION = "documents" (coleção = "documentos")
if client.has_collection(nome_da_colecção=COLLECTION):
cliente.drop_collection(nome_da_colecção=COLLECTION)
cliente.create_collection(
nome_da_colecção=COLLECTION,
schema=schema,
index_params=index_params,
enable_dynamic_field=True,
)
for i in range(len(docs)):
doc, dense_embedding, sparse_embedding = docs[i], docs_embeddings["dense_vecs"][i], docs_embeddings["lexical_weights"][i]
client.insert(COLLECTION, {"text": doc, "dense_vector": dense_embedding, "sparse_vector": {int(k): sparse_embedding[k] for k in sparse_embedding}})
k = 1
lista_req = []
dense_embedding = query_embeddings["dense_vecs"][0]
esparso_embedding = {int(k): query_embeddings["lexical_weights"][0][k] for k in query_embeddings["lexical_weights"][0]}
dense_search_param = {
"data": [dense_embedding],
"anns_field": "vector_denso",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
dense_req = AnnSearchRequest(**dense_search_param)
req_list.append(dense_req)
sparse_search_param = {
"data": [sparse_embedding],
"anns_field": "vector_esparso",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
resultados = client.hybrid_search(
COLLECTION,
req_list,
WeightedRanker(1.0, 1.0),
k,
consistency_level="Strong",
output_fields=["text"]
)
Leitura adicional
Fluxos de trabalho de IA sem interrupções
De embeddings a busca escalável de IA—Zilliz Cloud permite armazenar, indexar e recuperar embeddings com velocidade e eficiência incomparáveis.
Experimente o Zilliz Cloud grátis

