БААИ / bge-m3
Milvus Integrated
Задача: Встраивание
Модальность: Текст
Метрика сходства: Косинус, точечное произведение
Лицензия: Mit
Размерности: 1024
Максимальное количество входных токенов: 8192
Цена: Бесплатно
Введение в BGE-M3
BGE-M3 - это модель встраивания текста, разработанная в BAAI и предназначенная для универсального использования в различных языках и задачах. Она поддерживает более 100 языков и обрабатывает входные данные размером до 8192 лексем. Благодаря этим возможностям BGE-M3 отлично справляется с задачами плотного, разреженного и многовекторного поиска, что делает ее очень эффективной для поиска документов и ответов на вопросы. Современная производительность модели продемонстрирована в таких бенчмарках, как MKQA и MLDR. Ее архитектура включает в себя дистилляцию самопознания, что повышает адаптивность и точность при работе с различными наборами данных, позиционируя ее как мощный инструмент для многоязычного поиска информации.
Как создавать вкрапления с помощью BGE-M3
Существует два способа создания векторных вкраплений:
- PyMilvus: Python SDK для Milvus, который легко интегрирует модель
bge-m3. - Библиотека FlagEmbedding: библиотека Python
FlagEmbedding.
После создания векторных вкраплений их можно хранить в Zilliz Cloud (полностью управляемый сервис векторных баз данных на базе Milvus) и использовать для поиска семантического сходства. Вот четыре ключевых шага:
- Зарегистрируйтесь для бесплатной учетной записи Zilliz Cloud.
- Настройте бессерверный кластер и получите Публичную конечную точку и ключ API.
- Создайте коллекцию векторов и вставьте в нее свои векторные вкрапления.
- Запустите семантический поиск по сохраненным вкраплениям.
Создание вкраплений с помощью PyMilvus
from pymilvus.model.hybrid import BGEM3EmbeddingFunction
из pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
ef = BGEM3EmbeddingFunction()
docs = [
"Искусственный интеллект был основан как академическая дисциплина в 1956 году",
"Алан Тьюринг был первым человеком, который провел серьезные исследования в области искусственного интеллекта",
"Тьюринг родился в Мейда-Вейл, Лондон, и вырос в южной Англии".
]
# Генерируем вкрапления для документов
docs_embeddings = ef.encode_documents(docs)
запросы = ["Когда был основан искусственный интеллект",
"Где родился Алан Тьюринг?"]
# Генерируем вкрапления для запросов
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["dense"],
)
schema.add_field(
field_name="sparse_vector", datatype=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
имя_поля="dense_vector", тип_индекса="FLAT", тип_метрики="IP"
)
index_params.add_index(
имя_поля="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
КОЛЛЕКЦИЯ = "документы"
if client.has_collection(collection_name=COLLECTION):
client.drop_collection(collection_name=COLLECTION)
client.create_collection(
имя_коллекции=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": "dense_vector",
"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(
КОЛЛЕКЦИЯ,
req_list,
WeightedRanker(1.0, 1.0),
k,
уровень_согласованности="Сильный",
output_fields=["text"]
)
Обратитесь к нашей PyMilvus Documentation за подробным пошаговым руководством.
Генерируем векторные вложения с помощью библиотеки FlagEmbedding
from pymilvus import MilvusClient, DataType, AnnSearchRequest, WeightedRanker
from FlagEmbedding import BGEM3FlagModel
model = BGEM3FlagModel('BAAI/bge-m3', use_fp16=False)
docs = [
"Искусственный интеллект был основан как академическая дисциплина в 1956 году",
"Алан Тьюринг был первым человеком, который провел серьезные исследования в области искусственного интеллекта",
"Тьюринг родился в Мейда-Вейл, Лондон, и вырос в южной Англии".
]
# Генерируем вкрапления для документов
docs_embeddings = model.encode(docs, return_dense=True, return_sparse=True)
запросы = ["Когда был основан искусственный интеллект",
"Где родился Алан Тьюринг?"].
# Генерируем вкрапления для запросов
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(
field_name="sparse_vector", datatype=DataType.SPARSE_FLOAT_VECTOR
)
index_params = client.prepare_index_params()
index_params.add_index(
имя_поля="dense_vector", тип_индекса="FLAT", тип_метрики="IP"
)
index_params.add_index(
имя_поля="sparse_vector",
index_type="SPARSE_INVERTED_INDEX",
metric_type="IP",
)
КОЛЛЕКЦИЯ = "документы"
if client.has_collection(collection_name=COLLECTION):
client.drop_collection(collection_name=COLLECTION)
client.create_collection(
имя_коллекции=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": "dense_vector",
"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(
КОЛЛЕКЦИЯ,
req_list,
WeightedRanker(1.0, 1.0),
k,
уровень_согласованности="Сильный",
output_fields=["text"]
)
Дальнейшее чтение
Беспрерывные AI рабочие процессы
От встраиваний до масштабируемого AI поиска—Zilliz Cloud позволяет вам хранить, индексировать и извлекать встраивания с непревзойденной скоростью и эффективностью.
Попробуйте Zilliz Cloud Бесплатно

