đ NouveautĂ©s du filtrage des mĂ©tadonnĂ©es dans Milvus v2.4.3
Milvus v2.4.3 a introduit la correspondance de mĂ©tadonnĂ©es sur chaĂźne complĂšte ! đ DĂ©sormais, vous pouvez faire correspondre des chaĂźnes Ă lâaide de recherches par prĂ©fixe, infixe, suffixe, ou mĂȘme avec caractĂšre gĂ©nĂ©rique.
# Prefix example, matches any string starting with âTheâ.
expression='title like "The%"'
# Infix example, matches any string with the word âtheâ anywhere in the sentence.
expression='title like "%the%"'
# Postfix example, matches any string ending with âRyeâ.
expression='title like "%Rye"'
# Single character wildcard example, matches any one single character at a specific position.
expression='title like "Flip_ed"'
Dans des blogs prĂ©cĂ©dents, nous nâavions parlĂ© que de la correspondance de chaĂźnes par prĂ©fixe. Cependant, depuis Milvus v2.4.3, toutes les variantes sont Ă©galement possibles, tout comme lâutilisation de valeurs de tableau, soit par correspondances exactes, soit en vĂ©rifiant si des Ă©lĂ©ments du tableau correspondent (contains_any()). đïžđ
Ces mises à jour rendent le filtrage des métadonnées plus polyvalent et plus puissant !
Rendons tout cela plus clair avec un exemple. Pour ce blog, jâutiliserai les donnĂ©es de films IMDB, que jâai tĂ©lĂ©chargĂ©es depuis Kaggle.
# Import common libraries.
import sys, os, time, pprint
import pandas as pd
# Read CSV data.
df = pd.read_csv("data/original_data.csv")
# Shortcut the data for demo.
df = df.tail(200)
display(df.head())
Chaque film possĂšde un champ âtextâ avec sa description et ses critiques. đ
Chaque film inclut des mĂ©tadonnĂ©es comme lâannĂ©e de sortie, la note, ainsi que des listes de genres, dâacteurs et de mots-clĂ©s. đŹâïžđ
Chaque âligneâ reprĂ©sente un fragment de texte dâune critique de film, sa reprĂ©sentation vectorielle et des mĂ©tadonnĂ©es telles que movie_id, le titre du film, le lien de lâaffiche, les genres et les acteurs.
En suivant le modĂšle habituel de RAG : đđŹ
Se connecter Ă Milvus : Tout dâabord, connectez-vous Ă Milvus Lite, le dĂ©ploiement local de Milvus. Câest notre base de donnĂ©es pour stocker et gĂ©rer les vecteurs. đ„ïžđ
Transformer le texte des films en vecteurs : Prenez le champ texte de chaque film, qui inclut la description et la critique, et transformez-le en vecteur. Nous utiliserons le modĂšle HuggingFace BAAI/bge-large-en-v1.5 pour cela. đ§ âĄïžđ
đ„đ InsĂ©rer les vecteurs et les mĂ©tadonnĂ©es dans Milvus : InsĂ©rez ce vecteur, avec le texte dâorigine (appelĂ© le âchunkâ) et ses mĂ©tadonnĂ©es (comme lâannĂ©e, la note, les genres, etc.) dans Milvus. đ„đ
GĂ©rer les requĂȘtes utilisateur : Transformez la requĂȘte de lâutilisateur en vecteur Ă lâaide du mĂȘme modĂšle dâembedding. Ensuite, lancez une recherche des plus proches voisins approximatifs pour trouver les vecteurs de donnĂ©es les plus proches du vecteur de requĂȘte. đđŹ
Vous pouvez trouver le code complet sur mon GitHub.
Tout dâabord, connectez-vous Ă Milvus. Vous devrez installer Pymilvus avec pip. (En spĂ©cifiant simplement un nom de fichier local, il utilise Milvus Lite, une base de donnĂ©es vectorielle locale. Si vous avez un autre Milvus, par exemple dĂ©ployĂ© avec docker ou K8s, ou Zilliz Cloud entiĂšrement managĂ©, vous pouvez spĂ©cifier lâURI et le Token pour vous y connecter. Le reste du code fonctionne de la mĂȘme maniĂšre.)
# !python -m pip install -U pymilvus
import pymilvus
# Connect a client to the Milvus Lite server.
from pymilvus import MilvusClient
client = MilvusClient("milvus_demo.db")
Ensuite, segmentez et vectorisez la colonne de texte contenant la critique de film en vecteurs. De nombreuses ressources donnent des exemples de la maniÚre de procéder, je ne montrerai donc pas à nouveau le code ici. Ci-dessous, je montre comment assembler le texte segmenté, la représentation vectorielle et les métadonnées, puis insérer les données dans Milvus.
# Create chunk_list and dict_list in a single loop
dict_list = []
for id, title, chunk, vector, poster_url, director,\
genres, actors, keywords, film_year, rating in zip(
df.id, df.Name, chunks, converted_values, df.PosterLink,
df.Director, df.Genres, df.Actors, df.Keywords,
df.MovieYear, df.RatingValue):
# Assemble embedding vector, original text chunk, metadata.
chunk_dict = {
'movie_index': id,
'title': title,
'chunk': chunk.page_content,
'poster_url': poster_url,
'director': director,
'genres': genres,
'actors': actors,
'keywords': keywords,
'film_year': film_year,
'rating': rating,
'vector': vector,
}
dict_list.append(chunk_dict)
# Insert data into the Milvus collection.
print("Start inserting entities")
start_time = time.time()
client.insert(
COLLECTION_NAME,
data=dict_list,
progress_bar=True)
end_time = time.time()
print(f"Milvus insert time for {len(dict_list)} vectors: ", end="")
print(f"{np.round(end_time - start_time, 2)} seconds")
Maintenant que les donnĂ©es sont dans Milvus, nous sommes prĂȘts Ă effectuer une recherche !
Recherche Ă lâaide de filtres de mĂ©tadonnĂ©es de chaĂźne
Disons que nous voulons trouver des films de science-fiction qui prĂ©sentent un futur dystopique avec des robots et qui sont trĂšs bien notĂ©s. Nos donnĂ©es dâexemple contiennent des mĂ©tadonnĂ©es que nous pouvons utiliser pour cette recherche.
Voici un exemple de filtrage de mĂ©tadonnĂ©es utilisant des correspondances de chaĂźne approximatives. Ci-dessous, jâai encapsulĂ© lâAPI de recherche Milvus standard uniquement pour afficher plus facilement les mĂ©tadonnĂ©es aprĂšs chaque recherche.
SAMPLE_QUESTION = "Dystopia science fiction with a robot."
TOP_K = 1
# Metadata filters.
expression='rating >= 7'
# Infix string match.
expression=expression + ' && title like "%Panther%"'
formatted_results, contexts, context_metadata = \
mc_run_search(SAMPLE_QUESTION, expression, TOP_K)
Ressources et lectures complémentaires
Guide de démarrage rapide de Milvus
Utiliser des champs de tableau | Documentation Milvus
https://github.com/milvus-io/pymilvus/blob/2.4/examples/fuzzy_match.py
https://milvus.io/docs/boolean.md#Usage
https://milvus.io/docs/single-vector-search.md#Filtered-search
Continuer Ă lire

How to Improve Retrieval Quality for Japanese Text with Sudachi, Milvus/Zilliz, and AWS Bedrock
Learn how Sudachi normalization and Milvus/Zilliz hybrid search improve Japanese RAG accuracy with BM25 + vector fusion, AWS Bedrock embeddings, and practical code examples.

Zilliz Cloud Update: Smarter Autoscaling for Cost Savings, Stronger Compliance with Audit Logs, and More
What's new in Zilliz Cloud? Smarter autoscaling with scale-down, audit logs GA, enhanced SSO, and Milvus 2.6 in Private Preview.

OpenAI o1: What Developers Need to Know
In this article, we will talk about the o1 series from a developer's perspective, exploring how these models can be implemented for sophisticated use cases.



