BAAI / bge-m3
Milvus Integrated
Compito: Incorporazione
Modalità: Testo
Metrica di Similarità: Coseno, prodotto di punti
Licenza: Mit
Dimensioni: 1024
Token di Input Massimi: 8192
Prezzo: Gratuito
Introduzione a BGE-M3
BGE-M3 è un modello di incorporamento del testo sviluppato da BAAI, studiato per essere versatile in diverse lingue e compiti. Supporta oltre 100 lingue e gestisce input fino a 8192 token. Questa capacità consente a BGE-M3 di eccellere in compiti di recupero di testi densi, radi e multivettoriali, rendendolo molto efficace per il recupero di documenti e per la risposta a domande. Le prestazioni all'avanguardia del modello sono dimostrate da benchmark come MKQA e MLDR. La sua architettura include la distillazione dell'autoconoscenza, migliorando l'adattabilità e l'accuratezza su diversi insiemi di dati, e posizionandolo come un potente strumento per il reperimento di informazioni multilingue.
Come creare le incorporazioni con BGE-M3
Esistono due modi per generare embeddings vettoriali:
- PyMilvus: l'SDK Python per Milvus che integra perfettamente il modello
bge-m3. - Libreria FlagEmbedding: la libreria Python
FlagEmbedding.
Una volta create le incorporazioni vettoriali, queste possono essere memorizzate in Zilliz Cloud (un servizio di database vettoriale completamente gestito da Milvus) e utilizzate per la ricerca di similarità semantica. Ecco i quattro passaggi chiave:
- Iscriversi per un account Zilliz Cloud gratuito.
- Configurare un cluster serverless](https://docs.zilliz.com/docs/create-cluster#set-up-a-free-cluster) e ottenere Endpoint pubblico e chiave API.
- Creare una collezione di vettori e inserire gli embeddings vettoriali.
- Eseguire una ricerca semantica sugli embeddings memorizzati.
Creare embeddings tramite PyMilvus
da pymilvus.model.hybrid import BGEM3EmbeddingFunction
da pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
ef = BGEM3EmbeddingFunction()
docs = [
"L'intelligenza artificiale è stata fondata come disciplina accademica nel 1956",
"Alan Turing è stato il primo a condurre una ricerca sostanziale sull'intelligenza artificiale",
"Nato a Maida Vale, Londra, Turing è cresciuto nel sud dell'Inghilterra".
]
# Generare le incorporazioni per i documenti
docs_embeddings = ef.encode_documents(docs)
query = ["Quando è stata fondata l'intelligenza artificiale",
"Dove è nato Alan Turing?"]
# Generare embeddings per le query
query_embeddings = ef.encode_queries(queries)
client = MilvusClient(
uri=ZILLIZ_PUBLIC_ENDPOINT,
token=ZILLIZ_API_KEY)
schema = client.create_schema(
auto_id=True,
enable_dynamic_field=True,
)
schema.add_field(nome_campo="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
nome_campo="vettore_denso",
datatype=DataType.FLOAT_VECTOR,
dim=ef.dim["denso"],
)
schema.add_field(
nome_campo="sparse_vector", datatype=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
nome_campo="dense_vector", tipo_indice="FLAT", tipo_metrico="IP"
)
index_params.add_index(
nome_campo="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
COLLEZIONE = "documenti"
se client.has_collection(nome_raccolta=COLLEZIONE):
client.drop_collection(nome_raccolta=COLLEZIONE)
client.create_collection(
nome_collezione=COLLEZIONE,
schema=schema,
index_params=index_params,
enable_dynamic_field=True,
)
per 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
req_list = []
dense_embedding = query_embeddings["dense"][0]
sparse_embedding = query_embeddings["sparse"][[0]]
dense_search_param = {
"dati": [dense_embedding],
"anns_field": "vettore_denso",
"param": {"metric_type": "IP"},
"limite": k * 2,
}
dense_req = AnnSearchRequest(**dense_search_param)
req_list.append(dense_req)
sparse_search_param = {
"dati": [sparse_embedding],
"anns_field": "sparse_vector",
"param": {"metric_type": "IP"},
"limite": k * 2,
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
risultati = client.hybrid_search(
RACCOLTA,
req_list,
WeightedRanker(1.0, 1.0),
k,
consistency_level="Strong",
output_fields=["text"]
)
Per una guida dettagliata passo-passo, consultare la [Documentazione di PyMilvus] (https://milvus.io/docs/embed-with-bgm-m3.md).
Generare incorporazioni vettoriali tramite la libreria FlagEmbedding
da pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
da FlagEmbedding importare BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=False)
docs = [
"L'intelligenza artificiale è stata fondata come disciplina accademica nel 1956",
"Alan Turing è stato il primo a condurre una ricerca sostanziale sull'intelligenza artificiale",
"Nato a Maida Vale, Londra, Turing è cresciuto nel sud dell'Inghilterra".
]
# Generare le incorporazioni per i documenti
docs_embeddings = model.encode(docs, return_dense=True, return_sparse=True)
query = ["Quando è stata fondata l'intelligenza artificiale",
"Dove è nato Alan Turing?"]
# Generare embeddings per le query
query_embeddings = model.encode(queries, return_dense=True, return_sparse=True)
client = MilvusClient(
uri=ZILLIZ_PUBLIC_ENDPOINT,
token=ZILLIZ_API_KEY)
schema = client.create_schema(
auto_id=True,
enable_dynamic_field=True,
)
schema.add_field(nome_campo="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
nome_campo="vettore_denso",
datatype=DataType.FLOAT_VECTOR,
dim=1024,
)
schema.add_field(
nome_campo="sparse_vector", datatype=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
nome_campo="dense_vector", tipo_indice="FLAT", tipo_metrico="IP"
)
index_params.add_index(
nome_campo="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
COLLEZIONE = "documenti"
se client.has_collection(nome_raccolta=COLLEZIONE):
client.drop_collection(nome_raccolta=COLLEZIONE)
client.create_collection(
nome_collezione=COLLEZIONE,
schema=schema,
index_params=index_params,
enable_dynamic_field=True,
)
per 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] per k in sparse_embedding}})
k = 1
req_list = []
dense_embedding = query_embeddings["dense_vecs"][0]
sparse_embedding = {int(k): query_embeddings["lexical_weights"][0][k] for k in query_embeddings["lexical_weights"][0]}
dense_search_param = {
"dati": [dense_embedding],
"anns_field": "vettore_denso",
"param": {"metric_type": "IP"},
"limite": k * 2,
}
dense_req = AnnSearchRequest(**dense_search_param)
req_list.append(dense_req)
sparse_search_param = {
"dati": [sparse_embedding],
"anns_field": "sparse_vector",
"param": {"metric_type": "IP"},
"limite": k * 2,
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
risultati = client.hybrid_search(
RACCOLTA,
req_list,
WeightedRanker(1.0, 1.0),
k,
consistency_level="Strong",
output_fields=["text"]
)
Ulteriori letture
- Scegliere il giusto modello di incorporazione per i propri dati
- {\an8}Valutazione del modello di incorporamento{\an8}
- {\an8}Addestrare il proprio modello di incorporamento del testo{\an8}
- Guida per principianti al chunking e all'incorporamento di siti web per le vostre applicazioni RAGGuida per principianti al chunking e all'incorporamento di siti web per le vostre applicazioni RAG_
- Che cos'è il RAG?[Che cos'è il RAG?
Flussi di lavoro AI senza interruzioni
Dalle embedding alla ricerca AI scalabile—Zilliz Cloud ti consente di memorizzare, indicizzare e recuperare embedding con velocità e efficienza senza pari.
Prova Zilliz Cloud gratuitamente

