BAAI / bge-m3
Milvus Integrated
Aufgabe: Einbettung
Modalität: Text
Ähnlichkeitsmetrik: Kosinus, Punktprodukt
Lizenz: Mit
Dimensionen: 1024
Maximale Eingabe-Tokens: 8192
Preis: Kostenlos
Einführung in BGE-M3
BGE-M3 ist ein vom BAAI entwickeltes Modell zur Texteinbettung, das auf Vielseitigkeit in verschiedenen Sprachen und Aufgaben zugeschnitten ist. Es unterstützt über 100 Sprachen und bewältigt Eingabegrößen von bis zu 8192 Token. Dank dieser Fähigkeit kann BGE-M3 bei dichten, spärlichen und multivektoriellen Suchaufgaben glänzen, was es für die Dokumentensuche und die Beantwortung von Fragen sehr effektiv macht. Die Spitzenleistung des Modells wird in Benchmarks wie MKQA und MLDR demonstriert. Seine Architektur umfasst die Destillation von Selbstwissen, was die Anpassungsfähigkeit und Genauigkeit über verschiedene Datensätze hinweg verbessert und es zu einem leistungsstarken Werkzeug für die mehrsprachige Informationsbeschaffung macht.
Wie man Einbettungen mit BGE-M3 erstellt
Es gibt zwei Möglichkeiten, Vektoreinbettungen zu erzeugen:
- PyMilvus: das Python SDK für Milvus, das das
bge-m3Modell nahtlos integriert. - FlagEmbedding-Bibliothek: die Python-Bibliothek
FlagEmbedding.
Sobald die Vektoreinbettungen erstellt sind, können sie in der Zilliz Cloud (ein vollständig verwalteter, von Milvus betriebener Vektor-Datenbankdienst) gespeichert und für die semantische Ähnlichkeitssuche verwendet werden. Dies sind die vier wichtigsten Schritte:
- Registrieren Sie sich für ein kostenloses Zilliz Cloud-Konto.
- Richten Sie einen serverlosen Cluster ein und erhalten Sie den Public Endpoint and API Key.
- Erstellen Sie eine Vektorsammlung und fügen Sie Ihre Vektoreinbettungen ein.
- Führen Sie eine semantische Suche nach den gespeicherten Einbettungen durch.
Einbettungen über PyMilvus erstellen
from pymilvus.model.hybrid import BGEM3EmbeddingFunction
from pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
ef = BGEM3EmbeddingFunction()
docs = [
"Künstliche Intelligenz wurde 1956 als akademische Disziplin gegründet.",
"Alan Turing war die erste Person, die umfangreiche Forschungen im Bereich der KI durchführte.",
"Geboren in Maida Vale, London, wuchs Turing in Südengland auf."
]
# Einbettungen für Dokumente generieren
docs_embeddings = ef.encode_documents(docs)
queries = ["Wann wurde die künstliche Intelligenz begründet",
"Wo wurde Alan Turing geboren?"]
# Einbettungen für Abfragen generieren
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(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
field_name="dense_vector",
datatype=DataType.FLOAT_VECTOR,
dim=ef.dim["dichte"],
)
schema.add_field(
field_name="sparse_vector", datatype=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(
field_name="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
COLLECTION = "Dokumente"
if client.has_collection(collection_name=COLLECTION):
client.drop_collection(collection_name=COLLECTION)
client.create_collection(
collection_name=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
req_list = []
dense_embedding = query_embeddings["dense"][0]
sparse_embedding = query_embeddings["sparse"][[0]]
dense_search_param = {
"data": [dense_embedding],
"anns_field": "dichten_Vektor",
"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": "sparse_vector",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
results = client.hybrid_search(
COLLECTION,
req_list,
WeightedRanker(1.0, 1.0),
k,
consistency_level="Strong",
output_fields=["text"]
)
Eine ausführliche Schritt-für-Schritt-Anleitung finden Sie in unserer [PyMilvus-Dokumentation] (https://milvus.io/docs/embed-with-bgm-m3.md).
Erzeugen von Vektoreinbettungen über die FlagEmbedding Bibliothek
from pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
von FlagEmbedding importieren BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=False)
docs = [
"Künstliche Intelligenz wurde 1956 als akademische Disziplin gegründet.",
"Alan Turing war die erste Person, die umfangreiche Forschungen im Bereich der KI durchführte.",
"Geboren in Maida Vale, London, wuchs Turing in Südengland auf."
]
# Einbettungen für Dokumente generieren
docs_embeddings = model.encode(docs, return_dense=True, return_sparse=True)
queries = ["Wann wurde die künstliche Intelligenz begründet",
"Wo wurde Alan Turing geboren?"]
# Einbettungen für Abfragen generieren
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(field_name="pk", datatype=DataType.INT64, is_primary=True)
schema.add_field(
field_name="dense_vector",
datatype=DataType.FLOAT_VECTOR,
dim=1024,
)
schema.add_field(
feld_name="sparse_vector", datatype=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(
field_name="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
COLLECTION = "Dokumente"
if client.has_collection(collection_name=COLLECTION):
client.drop_collection(collection_name=COLLECTION)
client.create_collection(
collection_name=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
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 = {
"data": [dense_embedding],
"anns_field": "dichten_Vektor",
"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": "sparse_vector",
"param": {"metric_type": "IP"},
"limit": k * 2,
}
sparse_req = AnnSearchRequest(**sparse_search_param)
req_list.append(sparse_req)
results = client.hybrid_search(
COLLECTION,
req_list,
WeightedRanker(1.0, 1.0),
k,
consistency_level="Strong",
output_fields=["text"]
)
Weitere Lektüre
- Die Wahl des richtigen Einbettungsmodells für Ihre Daten
- Evaluierung Ihres Einbettungsmodells_
- Trainieren Sie Ihr eigenes Texteinbettungsmodell_
- Ein Leitfaden für Einsteiger zum Chunking und Einbetten von Webseiten für Ihre RAG-Anwendungen](https://zilliz.com/learn/beginner-guide-to-website-chunking-and-embedding-for-your-genai-applications)_
- Was ist RAG?
Nahtlose KI-Workflows
Von Embeddings bis hin zu skalierbarer KI-Suche – Zilliz Cloud ermöglicht es Ihnen, Embeddings mit beispielloser Geschwindigkeit und Effizienz zu speichern, zu indizieren und abzurufen.
Zilliz Cloud kostenlos ausprobieren

