Vue d'ensemble des rerankers
Dans le domaine de la recherche d'informations et de l'IA générative, un re-rangeur est un outil essentiel qui optimise l'ordre des résultats des recherches initiales. Les rerankers diffèrent des modèles d'intégration traditionnels en prenant une requête et un document en entrée et en renvoyant directement un score de similarité au lieu des intégrations. Ce score indique la pertinence de la requête et du document.
Les re-rangeurs sont souvent utilisés après la première étape de recherche, généralement effectuée au moyen de techniques vectorielles d'approximation du plus proche voisin (ANN). Bien que les recherches ANN soient efficaces pour obtenir un large ensemble de résultats potentiellement pertinents, elles ne donnent pas toujours la priorité aux résultats en termes de proximité sémantique réelle avec la requête. Ici, rerankers est utilisé pour optimiser l'ordre des résultats en utilisant des analyses contextuelles plus approfondies, souvent en tirant parti de modèles d'apprentissage automatique avancés tels que BERT ou d'autres modèles basés sur Transformer. Ce faisant, les rerankers peuvent améliorer considérablement la précision et la pertinence des résultats finaux présentés à l'utilisateur.
La bibliothèque de modèles PyMilvus intègre des fonctions de rerank pour optimiser l'ordre des résultats renvoyés par les recherches initiales. Après avoir récupéré les intégrations les plus proches dans Milvus, vous pouvez exploiter ces outils de reclassement pour affiner les résultats de la recherche afin d'améliorer la précision des résultats de la recherche.
Fonction de reclassement | API ou Open-sourced |
---|---|
BGE | Open-sourced |
Encodeur croisé | Open-sourced |
Voyage | API |
Cohere | API |
Jina AI | API |
Avant d'utiliser les rerankers open-source, assurez-vous de télécharger et d'installer toutes les dépendances et tous les modèles requis.
Pour les rerankers basés sur une API, obtenez une clé d'API auprès du fournisseur et définissez-la dans les variables d'environnement ou les arguments appropriés.
Exemple 1 : utilisation de la fonction BGE rerank pour reclasser des documents en fonction d'une requête
Dans cet exemple, nous montrons comment classer les résultats de recherche à l'aide de la fonction BGE reranker en fonction d'une requête spécifique.
Pour utiliser un reranker avec la bibliothèque de modèles Py Milvus, commencez par installer la bibliothèque de modèles PyMilvus ainsi que le sous-paquet de modèles qui contient tous les utilitaires de reranking nécessaires :
pip install pymilvus[model]
# or pip install "pymilvus[model]" for zsh.
Pour utiliser le reranker BGE, importez d'abord la classe BGERerankFunction
:
from pymilvus.model.reranker import BGERerankFunction
Ensuite, créez une instance BGERerankFunction
pour le 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'
)
Pour classer les documents en fonction d'une requête, utilisez le code suivant :
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)
Le résultat attendu est similaire à ce qui suit :
[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)]
Exemple 2 : Utiliser un reranker pour améliorer la pertinence des résultats de recherche
Dans ce guide, nous allons voir comment utiliser la méthode search()
de PyMilvus pour effectuer des recherches de similarité et comment améliorer la pertinence des résultats de la recherche à l'aide d'un reranker. Notre démonstration utilisera le jeu de données suivant :
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.'}
]
Composants du jeu de données:
doc_id
: Identifiant unique pour chaque document.doc_vector
: Vecteurs d'intégration représentant le document. Pour obtenir des conseils sur la génération d'embeddings, reportez-vous à Embeddings.doc_text
: Le contenu textuel du document.
Préparations
Avant de lancer une recherche de similarités, vous devez établir une connexion avec Milvus, créer une collection et préparer et insérer des données dans cette collection. L'extrait de code suivant illustre ces étapes préliminaires.
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]}
Effectuer une recherche de similarité
Après l'insertion des données, effectuez des recherches de similarité à l'aide de la méthode 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"]}')
Le résultat attendu est similaire à ce qui suit :
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.
Utiliser un reranker pour améliorer les résultats de la recherche
Améliorez ensuite la pertinence de vos résultats de recherche à l'aide d'une étape de reclassement. Dans cet exemple, nous utilisons CrossEncoderRerankFunction
construit dans PyMilvus pour classer les résultats afin d'améliorer la précision.
# 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}')
Le résultat attendu est similaire à ce qui suit :
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.