Retrieval-Augmented Generation (RAG)

Mise en œuvre de la recherche hybride : équilibrer les poids des mots-clés et des vecteurs pour la précision du RAG d'entreprise

Dans le paysage en constante évolution de la Génération Augmentée par Récupération (RAG), un piège courant pour les développeurs est de s'appuyer uniquement sur des embeddings vectoriels denses. Bien que la recherche vectorielle excelle dans la compréhension sémantique, elle rencontre souvent des difficultés avec la correspondance exacte des mots-clés, les acronymes propriétaires et les requêtes numériques précises. Pour les applications d'entreprise où la précision est primordiale, la recherche purement sémantique est souvent insuffisante. La solution réside dans la recherche hybride : une approche sophistiquée qui combine la puissance sémantique de la recherche vectorielle avec la précision lexicale de la recherche par mots-clés.

Les limites de la recherche vectorielle pure

Pour comprendre pourquoi la recherche hybride est critique, nous devons d'abord reconnaître les limites des approches purement vectorielles. Les embeddings vectoriels cartographient le texte dans un espace de haute dimension où les significations similaires sont regroupées. Cependant, cette méthode présente des angles morts. Par exemple, si un utilisateur recherche « chiffre d'affaires du T3 2023 », une base de données vectorielle pourrait retourner des résultats sur « la performance financière à la fin de l'année 2023 », même si le trimestre spécifique n'est pas mentionné. Inversement, si un utilisateur recherche un code interne spécifique comme « SKU-8842-X », la recherche vectorielle peut échouer complètement car la signification sémantique de cette chaîne est négligeable par rapport à son utilité en tant qu'identifiant.

Les données d'entreprise sont souvent un mélange de texte narratif non structuré et de métadonnées structurées et précises. Un système RAG robuste doit gérer les deux. En intégrant la recherche par mots-clés clairsemés (BM25) avec la recherche vectorielle dense, nous créons un pipeline de récupération qui capture à la fois l'« intention » et la « correspondance exacte ».

Stratégies d'équilibrage des poids

Le défi central de la recherche hybride consiste à déterminer le poids optimal entre le score vectoriel et le score de mots-clés. Il n'existe pas de ratio universel ; cela dépend fortement de votre domaine de données. Une base de données juridique pourrait privilégier la terminologie exacte (poids de mot-clé plus élevé), tandis qu'un assistant d'écriture créative pourrait privilégier la pertinence thématique (poids vectoriel plus élevé).

Les stratégies courantes incluent :

  1. Fusion de rangs réciproques (RRF) : Cette méthode d'agrégation combine les classements de différents moteurs de recherche sans nécessiter de normalisation explicite. Elle est robuste et largement utilisée.
  2. Combinaison linéaire : Normalisation des deux scores dans une plage de 0 à 1 et application d'une somme pondérée : S_final = α * S_vector + (1-α) * S_keyword.
  3. Descente de gradient bursty : Une technique avancée qui ajuste les poids dynamiquement en fonction de la complexité de la requête.

Mise en œuvre pratique avec Python

Examinons un exemple pratique utilisant Elasticsearch, une norme pour la recherche hybride dans les environnements d'entreprise. Voici un extrait Python démontrant comment exécuter une requête hybride qui équilibre la recherche BM25 et vectorielle.

from elasticsearch import Elasticsearch

es = Elasticsearch(["http://localhost:9200"])

def hybrid_search(es_client, index_name, query_text, k=10):
    """
    Effectue une recherche hybride combinant des requêtes clairsemées (BM25) et denses (vecteur).
    """
    # Définir la structure de la requête hybride
    hybrid_query = {
        "query": {
            "hybrid": {
                "queries": [
                    {
                        "sparse": {
                            "query_string": query_text,  # Gère la correspondance des mots-clés
                            "field": "content_vector"    # Ajuster en fonction de votre mappage
                        }
                    },
                    {
                        "dense_vector": {
                            "query_vector": generate_embedding(query_text), # Votre fonction d'embedding
                            "k": 100,
                            "num_candidates": 100,
                            "field": "embedding"
                        }
                    }
                ],
                # La valeur alpha équilibre les deux signaux. 
                # 0.5 est un point de départ courant.
                "alpha": 0.5 
            }
        },
        "size": k
    }

    response = es_client.search(index=index_name, body=hybrid_query)
    return response["hits"]["hits"]

# Utilisation
results = hybrid_search(es, "enterprise_docs", "écarts dans le rapport financier du T3")

Dans cet exemple, le paramètre alpha est crucial. Si vos utilisateurs recherchent fréquemment des identifiants de produits spécifiques, augmentez le poids de la requête clairsemée. S'ils recherchent des explications conceptuelles, penchez-vous vers la requête de vecteur dense.

Optimisation et réglage

La mise en œuvre de la recherche hybride n'est pas une tâche « définir et oublier ». Une évaluation continue est requise. Utilisez un ensemble de test isolé de requêtes étiquetées avec des documents pertinents. Mesurez des métriques telles que le MRR (Mean Reciprocal Rank) et le NDCG (Normalized Discounted Cumulative Gain) pour évaluer la qualité du classement. Si la précision diminue, ajustez le poids alpha ou appliquez un boosting à des champs de métadonnées spécifiques (par exemple, accorder plus de poids aux correspondances dans le titre du document qu'à celles dans le corps du texte).

Conclusion

Pour les applications RAG de niveau entreprise, la recherche hybride n'est plus une option ; elle est essentielle. En équilibrant la précision des mots-clés avec la compréhension sémantique, les développeurs peuvent construire des systèmes à la fois précis et robustes. Commencez par une approche équilibrée, testez rigoureusement votre pipeline de récupération et ajustez itérativement les poids pour correspondre aux caractéristiques spécifiques de vos données. Le résultat est un système d'IA qui comprend véritablement à la fois ce que les utilisateurs veulent dire et exactement ce qu'ils demandent.

Share: