← Tous les exercices
RAG, étape 2 : chercher les passages les plus proches
Partie 6 · ★★
Le vrai RAG compare des vecteurs (produit scalaire). Pour s'entraîner sans encodeur, on remplace la ressemblance par un score de recouvrement de mots : la part des mots de la question qui apparaissent dans le passage. On garde ensuite les meilleurs passages, du meilleur au moins bon.
Complète score : l'intersection de deux ensembles de mots se note &, et on divise par le nombre de mots de la question. Puis classe les indices des passages par score décroissant et garde les 2 premiers.
def mots(texte): return set(re.findall(r"\w+", texte.lower())) def score(question, passage): q = mots(question) return len(q ___ mots(passage)) / len(___) passages = [ "Fièvre sans toux : faire un bilan urinaire dans les six heures.", "Les visites sont autorisées de 14 h à 19 h.", "Si le bilan urinaire est positif, débuter un traitement adapté.", ] question = "Que faire si le bilan urinaire est positif ?" scores = [score(question, p) for p in passages] ordre = sorted(range(len(passages)), key=lambda i: scores[i], reverse=___) top2 = ordre[:2]
Ctrl/⌘+Entrée