🚀 Попробуйте Zilliz Cloud, полностью управляемый Milvus, бесплатно — ощутите 10-кратное увеличение производительности! Попробовать сейчас>

milvus-logo
LFAI
Главная
  • Модели
  • Home
  • Docs
  • Модели

  • Реранкеры

  • Обзор

Обзор реранкеров

В сфере информационного поиска и генеративного ИИ реранкер - это важный инструмент, который оптимизирует порядок результатов первоначального поиска. Реранкеры отличаются от традиционных моделей встраивания тем, что принимают запрос и документ в качестве входных данных и напрямую возвращают оценку сходства вместо встраивания. Этот показатель указывает на релевантность запроса и документа.

Реранкеры часто используются после первого этапа поиска, обычно выполняемого с помощью векторного метода приближенных ближайших соседей (ANN). Хотя поиск с помощью ANN эффективен для получения широкого набора потенциально релевантных результатов, он не всегда определяет приоритет результатов с точки зрения фактической семантической близости к запросу. В данном случае rerankers используется для оптимизации порядка результатов с помощью более глубокого контекстного анализа, часто с использованием передовых моделей машинного обучения, таких как BERT или другие модели на основе трансформеров. Таким образом, rerankers может значительно повысить точность и релевантность конечных результатов, предоставляемых пользователю.

В библиотеку моделей PyMilvus интегрированы функции ранжирования для оптимизации порядка результатов, возвращаемых при первоначальном поиске. После того как вы получили ближайшие вложения из Milvus, вы можете использовать эти инструменты ранжирования для уточнения результатов поиска, чтобы повысить точность результатов поиска.

Функция ранжированияAPI или открытый источник
BGEОткрытый ресурс
Перекрестный кодировщикOpen-sourced
VoyageAPI
CohereAPI
Jina AIAPI
  • Прежде чем использовать реранкеры с открытым исходным кодом, убедитесь, что вы скачали и установили все необходимые зависимости и модели.

  • Для реранкеров на базе API получите у провайдера ключ API и задайте его в соответствующих переменных окружения или аргументах.

Пример 1: Использование функции BGE rerank для ранжирования документов в соответствии с запросом

В этом примере мы покажем, как ранжировать результаты поиска с помощью BGE reranker на основе определенного запроса.

Чтобы использовать реранкер с библиотекой моделей PyMilvus, начните с установки библиотеки моделей PyMilvus вместе с подпакетом model, который содержит все необходимые утилиты для реранкинга:

pip install pymilvus[model]
# or pip install "pymilvus[model]" for zsh.

Чтобы использовать реранкер BGE, сначала импортируйте класс BGERerankFunction:

from pymilvus.model.reranker import BGERerankFunction

Затем создайте экземпляр BGERerankFunction для ранжирования:

bge_rf = BGERerankFunction(
    model_name="BAAI/bge-reranker-v2-m3",  # Specify the model name. Defaults to `BAAI/bge-reranker-v2-m3`.
    device="cpu" # Specify the device to use, e.g., 'cpu' or 'cuda:0'
)

Чтобы проранжировать документы на основе запроса, используйте следующий код:

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."
]

bge_rf(query, documents)

Ожидаемый результат будет похож на следующий:

[RerankResult(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.", score=0.9911615761470803, index=1),
 RerankResult(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.", score=0.0326971950177779, index=0),
 RerankResult(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.', score=0.006514905766152258, index=3),
 RerankResult(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.', score=0.0042116724917325935, index=2)]

Пример 2: Использование реранкера для повышения релевантности результатов поиска

В этом руководстве мы рассмотрим, как использовать метод search() в PyMilvus для проведения поиска по сходству и как повысить релевантность результатов поиска с помощью реранкера. В нашей демонстрации будет использован следующий набор данных:

entities = [
    {'doc_id': 0, 'doc_vector': [-0.0372721,0.0101959,...,-0.114994], 'doc_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."}, 
    {'doc_id': 1, 'doc_vector': [-0.00308882,-0.0219905,...,-0.00795811], 'doc_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."}, 
    {'doc_id': 2, 'doc_vector': [0.00945078,0.00397605,...,-0.0286199], 'doc_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.'}, 
    {'doc_id': 3, 'doc_vector': [-0.0391119,-0.00880096,...,-0.0109257], 'doc_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.'}
]

Компоненты набора данных:

  • doc_id: : Уникальный идентификатор для каждого документа.
  • doc_vector: Векторные вкрапления, представляющие документ. Руководство по созданию вкраплений см. в разделе "Вкрапления".
  • doc_text: Текстовое содержимое документа.

Подготовка

Перед началом поиска сходства необходимо установить соединение с Milvus, создать коллекцию, подготовить и вставить данные в эту коллекцию. Следующий фрагмент кода иллюстрирует эти предварительные шаги.

from pymilvus import MilvusClient, DataType

client = MilvusClient(
    uri="http://10.102.6.214:19530" # replace with your own Milvus server address
)

client.drop_collection('test_collection')

# define schema

schema = client.create_schema(auto_id=False, enabel_dynamic_field=True)

schema.add_field(field_name="doc_id", datatype=DataType.INT64, is_primary=True, description="document id")
schema.add_field(field_name="doc_vector", datatype=DataType.FLOAT_VECTOR, dim=384, description="document vector")
schema.add_field(field_name="doc_text", datatype=DataType.VARCHAR, max_length=65535, description="document text")

# define index params

index_params = client.prepare_index_params()

index_params.add_index(field_name="doc_vector", index_type="IVF_FLAT", metric_type="IP", params={"nlist": 128})

# create collection

client.create_collection(collection_name="test_collection", schema=schema, index_params=index_params)

# insert data into collection

client.insert(collection_name="test_collection", data=entities)

# Output:
# {'insert_count': 4, 'ids': [0, 1, 2, 3]}

После вставки данных выполните поиск сходства с помощью метода search.

# search results based on our query

res = client.search(
    collection_name="test_collection",
    data=[[-0.045217834, 0.035171617, ..., -0.025117004]], # replace with your query vector
    limit=3,
    output_fields=["doc_id", "doc_text"]
)

for i in res[0]:
    print(f'distance: {i["distance"]}')
    print(f'doc_text: {i["entity"]["doc_text"]}')

Ожидаемый результат будет похож на следующий:

distance: 0.7235960960388184
doc_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.
distance: 0.6269873976707458
doc_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.
distance: 0.5340118408203125
doc_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.

Использование реранкера для улучшения результатов поиска

Затем улучшите релевантность результатов поиска с помощью шага ранжирования. В этом примере мы используем CrossEncoderRerankFunction, встроенный в PyMilvus, для ранжирования результатов с целью повышения точности.

# use reranker to rerank search results

from pymilvus.model.reranker import CrossEncoderRerankFunction

ce_rf = CrossEncoderRerankFunction(
    model_name="cross-encoder/ms-marco-MiniLM-L-6-v2",  # Specify the model name.
    device="cpu" # Specify the device to use, e.g., 'cpu' or 'cuda:0'
)

reranked_results = ce_rf(
    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."
    ],
    top_k=3
)

# print the reranked results
for result in reranked_results:
    print(f'score: {result.score}')
    print(f'doc_text: {result.text}')

Ожидаемый результат похож на следующий:

score: 6.250532627105713
doc_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.
score: -2.9546022415161133
doc_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.
score: -4.771512031555176
doc_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.

Попробуйте Managed Milvus бесплатно

Zilliz Cloud работает без проблем, поддерживается Milvus и в 10 раз быстрее.

Начать
Обратная связь

Была ли эта страница полезной?