Chercher par le sens plutôt que par mots-clés

L’an passé, j’avais expliqué l’idée derrière la recherche vectorielle: transformer du texte en vecteurs de nombres pour chercher par le sens plutôt que par les mots-clés. En juillet 2024, je veux passer de la théorie à l’atelier — parce qu’entre comprendre le concept pis bâtir un système qui marche pour vrai, il y a tout un monde. Comme Directeur TI qui a les mains encore dans le cambouis, c’est dans le concret que les vraies surprises arrivent.

Le projet typique, c’est ce qu’on appelle un RAG: faire répondre une IA à partir de NOS documents. Sur papier, ça a l’air simple: t’indexes tes documents, l’IA va piger dedans, pis elle répond. Dans l’atelier, c’est une autre histoire. La première claque, c’est le découpage des documents — le « chunking ». Tu ne peux pas avaler un manuel de 200 pages d’un coup; faut le couper en morceaux. Pis la taille de ces morceaux change tout.

L’atelier d’un système RAG

flowchart TD
    A[Nos documents] --> B[Decoupage en morceaux: chunking]
    B --> C[Chaque morceau devient un vecteur]
    C --> D[Index vectoriel]
    E[Question de l'usager] --> F[La question devient un vecteur]
    F --> G[Recherche des morceaux proches]
    D --> G
    G --> H[Les bons morceaux retrouves?]
    H -->|Oui| I[L'IA repond avec le contexte]
    H -->|Non| J[Reponse a cote: on revoit le chunking]
    J --> B

Trop gros, le morceau noie l’information utile dans du bruit, pis la recherche devient floue. Trop petit, tu perds le contexte autour, pis l’IA reçoit des bouts décousus. J’ai passé des heures à ajuster cette taille, à tester avec des vraies questions, à regarder ce que le système ramène. C’est ça, l’atelier: pas une formule magique, mais du tâtonnage méthodique.

Là où ça accroche pour vrai

La deuxième surprise, c’est la qualité de récupération. Tu poses une question, le système te ramène cinq morceaux « proches »… pis parfois le bon n’est pas dedans. Le sens calculé par les vecteurs ne colle pas toujours à ce qu’un humain jugerait pertinent. Faut alors jouer avec le nombre de morceaux récupérés, mélanger recherche vectorielle pis recherche par mots-clés, parfois reformuler la question avant de chercher.

# L'atelier RAG, juillet 2024 — le coeur du tatonnement

def decouper(document, taille_morceau=500, chevauchement=50):
    # trop gros: bruit. trop petit: contexte perdu.
    morceaux = []
    pas = taille_morceau - chevauchement
    for i in range(0, len(document), pas):
        morceaux.append(document[i:i + taille_morceau])
    return morceaux

def repondre(question, index):
    # 1. la question devient un vecteur
    v = vectoriser(question)
    # 2. on cherche les morceaux proches... pas toujours les bons
    morceaux = index.plus_proches(v, k=5)
    # 3. on donne ce contexte a l'IA pour repondre
    return ia.generer(question, contexte=morceaux)

# la vraie job: ajuster taille, chevauchement, k
# jusqu'a ce que les BONS morceaux remontent

Ce que cet atelier m’a réappris, c’est que la magie de l’IA générative repose sur une plomberie bien ordinaire. Le modèle, tout le monde l’a. Ce qui distingue un système qui répond bien d’un système qui répond à côté, c’est tout ce travail invisible: le découpage, l’indexation, le réglage de la récupération. Le diplôme de maîtrise m’a donné la théorie; l’atelier me donne l’humilité.

Ce que je retiens

En juillet 2024, je passe de la théorie des vecteurs à l’atelier: bâtir un vrai système RAG qui fait répondre l’IA à partir de nos documents. Sur papier c’est simple — t’indexes, l’IA pige, elle répond. Dans la pratique, la première claque c’est le découpage des documents en morceaux: trop gros ça noie l’info, trop petit ça perd le contexte.

Ce que je retiens, c’est que la qualité de récupération est le nerf de la guerre. Le système ramène des morceaux « proches » au sens des vecteurs, mais pas toujours ceux qu’un humain jugerait pertinents. Faut tâtonner: ajuster la taille des morceaux, le nombre récupéré, mélanger vecteurs pis mots-clés. La magie de l’IA repose sur une plomberie bien ordinaire — le modèle, tout le monde l’a; ce qui fait la différence, c’est le travail invisible autour. La théorie donne le concept, l’atelier donne l’humilité.