Представление интеграции PyMilvus с моделями встраивания
Milvus - это векторная база данных с открытым исходным кодом, разработанная специально для приложений ИИ. Независимо от того, работаете ли вы над машинным обучением, глубоким обучением или любым другим проектом, связанным с ИИ, Milvus предлагает надежный и эффективный способ обработки больших векторных данных.
Теперь, благодаря интеграции модуля модели в PyMilvus, Python SDK для Milvus, стало еще проще добавлять модели Embedding и Reranking. Эта интеграция упрощает преобразование данных в векторы для поиска или ранжирование результатов для получения более точных результатов, как, например, в Retrieval Augmented Generation (RAG).
В этом блоге мы рассмотрим модели плотного встраивания, модели разреженного встраивания и ранжирования и продемонстрируем, как использовать их на практике с помощью Milvus Lite, облегченной версии Milvus, которая может запускаться локально в ваших Python-приложениях.
Плотные и разреженные вкрапления
Прежде чем мы расскажем вам о том, как использовать наши интеграции, давайте рассмотрим две основные категории векторных вкраплений.
Векторные эмбеддинги обычно делятся на две основные категории: плотные эмбеддинги и разреженные эмбеддинги.
Плотные эмбеддинги - это высокоразмерные векторы, в которых большинство или все элементы ненулевые, что делает их идеальными для кодирования семантики текста или нечеткого смысла.
Разреженные эмбеддинги - это высокоразмерные векторы с большим количеством нулевых элементов, которые лучше подходят для кодирования точных или смежных понятий.
Milvus поддерживает оба типа вкраплений и предлагает гибридный поиск. Гибридный поиск позволяет вести поиск по различным векторным полям в одной коллекции. Эти векторы могут представлять различные аспекты данных, использовать различные модели вкраплений или применять различные методы обработки данных, объединяя результаты с помощью реранжировщиков.
Как использовать наши интеграции для встраивания и реранжирования
В следующих разделах мы продемонстрируем три практических примера использования наших интеграций для генерации вкраплений и проведения векторного поиска.
Пример 1: Использование функции встраивания по умолчанию для генерации плотных векторов
Чтобы использовать функции встраивания и ранжирования в Milvus, необходимо установить клиент pymilvus
с пакетом model
.
pip install "pymilvus[model]"
На этом шаге будет установлен Milvus Lite, позволяющий запускать Milvus локально в приложении на Python. Он также включает подпакет модели, в который входят все утилиты для встраивания и реранкинга.
Подпакет модели поддерживает различные модели встраивания, включая модели из OpenAI, Sentence Transformers, BGE-M3, BM25, SPLADE и предварительно обученные модели Jina AI.
В данном примере для простоты используется модель DefaultEmbeddingFunction
, основанная на модели all-MiniLM-L6-v2
Sentence Transformer. Модель имеет размер около 70 МБ и будет загружена при первом использовании:
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)
Ожидаемый результат должен быть примерно следующим:
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,)
Пример 2: Генерация разреженных векторов с помощью модели BM25
BM25 - это хорошо известный метод, который использует частоты встречаемости слов для определения релевантности между запросами и документами. В этом примере мы покажем, как использовать BM25EmbeddingFunction
для генерации разреженных вкраплений для запросов и документов.
В BM25 важно подсчитать статистику документов, чтобы получить IDF (Inverse Document Frequency), которая может отражать закономерности в документах. IDF измеряет, сколько информации дает слово, частое или редкое во всех документах.
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)
Пример 3: Использование ReRanker
Цель поисковой системы - быстро и эффективно находить наиболее релевантные результаты. Традиционно для ранжирования результатов поиска на основе совпадения ключевых слов используются такие методы, как BM25 или TF-IDF. Последние методы, такие как косинусное сходство на основе вложения, просты, но иногда не учитывают тонкости языка и, самое главное, взаимодействие между документами и смыслом запроса.
В этом случае на помощь приходит реранжировщик. Реранжировщик - это продвинутая модель искусственного интеллекта, которая берет первоначальный набор результатов поиска - часто предоставляемый поиском на основе вкраплений/токенов - и переоценивает их, чтобы убедиться, что они более точно соответствуют намерениям пользователя. Он не ограничивается поверхностным сопоставлением терминов, а рассматривает более глубокое взаимодействие между поисковым запросом и содержанием документов.
В данном примере мы будем использовать 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")
Ожидаемый результат будет похож на следующий:
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.
Отмечайте нас на GitHub и присоединяйтесь к нашему Discord!
Если вам понравилась эта статья в блоге, то вы можете отметить Milvus на GitHub и присоединиться к нашему Discord! 💙
- Плотные и разреженные вкрапления
- Как использовать наши интеграции для встраивания и реранжирования
- Отмечайте нас на GitHub и присоединяйтесь к нашему 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