milvus-logo
LFAI
Casa
  • Modelli

Panoramica sui reranker

Nel campo del recupero delle informazioni e dell'intelligenza artificiale generativa, un reranker è uno strumento essenziale che ottimizza l'ordine dei risultati delle ricerche iniziali. I reranker si differenziano dai tradizionali modelli di embedding perché prendono in input una query e un documento e restituiscono direttamente un punteggio di somiglianza, anziché un embedding. Questo punteggio indica la rilevanza tra la query e il documento in ingresso.

I rechercher sono spesso impiegati dopo il primo stadio di recupero, tipicamente effettuato tramite tecniche vettoriali di Approximate Nearest Neighbor (ANN). Sebbene le ricerche ANN siano efficienti nel reperire un ampio insieme di risultati potenzialmente rilevanti, non sempre riescono a dare priorità ai risultati in termini di effettiva vicinanza semantica alla query. In questo caso, rerankers viene utilizzato per ottimizzare l'ordine dei risultati utilizzando analisi contestuali più approfondite, spesso sfruttando modelli avanzati di apprendimento automatico come BERT o altri modelli basati su Transformer. In questo modo, rerankers può migliorare notevolmente l'accuratezza e la pertinenza dei risultati finali presentati all'utente.

La libreria di modelli PyMilvus integra funzioni di rerank per ottimizzare l'ordine dei risultati restituiti dalle ricerche iniziali. Dopo aver recuperato gli incorporamenti più vicini da Milvus, è possibile sfruttare questi strumenti di reranking per affinare i risultati della ricerca e migliorare la precisione dei risultati.

Funzione di rerankingAPI o Open-sourced
BGEOpen-sourced
Codificatore incrociatoIn licenza libera
ViaggioAPI
CohereAPI
Jina AIAPI
  • Prima di utilizzare i reranker open-source, assicurarsi di scaricare e installare tutte le dipendenze e i modelli necessari.

  • Per i reranker basati su API, ottenere una chiave API dal fornitore e impostarla nelle variabili d'ambiente o negli argomenti appropriati.

Esempio 1: utilizzare la funzione rerank di BGE per classificare i documenti in base a una query

In questo esempio, dimostriamo come classificare i risultati di una ricerca utilizzando il reranker di BGE in base a una query specifica.

Per utilizzare un reranker con la libreria di modelli PyMilvus, è necessario installare la libreria di modelli PyMilvus e il sottopacchetto dei modelli, che contiene tutte le utility di reranking necessarie:

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

Per utilizzare il reranker BGE, importare innanzitutto la classe BGERerankFunction:

from pymilvus.model.reranker import BGERerankFunction

Quindi, creare un'istanza di BGERerankFunction per il reranking:

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'
)

Per classificare i documenti in base a una query, utilizzare il codice seguente:

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)

Il risultato atteso è simile al seguente:

[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)]

Esempio 2: Utilizzare un reranker per migliorare la rilevanza dei risultati di ricerca

In questa guida, esploreremo come utilizzare il metodo search() in PyMilvus per condurre ricerche di somiglianza e come migliorare la rilevanza dei risultati della ricerca utilizzando un reranker. La dimostrazione utilizzerà il seguente set di dati:

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.'}
]

Componenti del dataset:

  • doc_id: Identificatore univoco per ogni documento.
  • doc_vector: Embeddings vettoriali che rappresentano il documento. Per una guida alla generazione di embeddings, fare riferimento a Embeddings.
  • doc_text: Contenuto testuale del documento.

Preparazione

Prima di avviare una ricerca di somiglianza, è necessario stabilire una connessione con Milvus, creare una raccolta e preparare e inserire i dati in tale raccolta. Il seguente frammento di codice illustra queste fasi preliminari.

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]}

Dopo l'inserimento dei dati, è possibile eseguire una ricerca di similarità con il metodo 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"]}')

Il risultato atteso è simile al seguente:

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.

Utilizzare un reranker per migliorare i risultati della ricerca

Quindi, migliorare la rilevanza dei risultati della ricerca con una fase di reranking. In questo esempio, usiamo CrossEncoderRerankFunction costruito in PyMilvus per rerankare i risultati per migliorare l'accuratezza.

# 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}')

Il risultato atteso è simile al seguente:

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.

Tradotto daDeepLogo

Try Managed Milvus for Free

Zilliz Cloud is hassle-free, powered by Milvus and 10x faster.

Get Started
Feedback

Questa pagina è stata utile?