Skip to main content
IA & Machine Learning

Bi-Encoder

Une architecture neuronale qui encode séparément requêtes et documents en vecteurs fixes, permettant une recherche de similarité efficace via embeddings pré-calculés et index de voisins approximatifs.

Également appelé: Dual encoder, Modèle deux-tours, Encodeur siamois

Définition

Un bi-encodeur (aussi appelé dual encoder ou modèle deux-tours) est une architecture neuronale qui encode requêtes et documents indépendamment en représentations vectorielles denses. Chaque entrée passe par un encodeur séparé (ou encodeur à poids partagés) pour produire un embedding de taille fixe. La pertinence est calculée en mesurant la similarité (typiquement cosinus ou produit scalaire) entre ces vecteurs pré-calculés. Cette architecture permet une recherche évolutive: les embeddings documents peuvent être calculés hors ligne et indexés dans des structures ANN (approximate nearest neighbor), permettant des recherches sub-seconde sur des millions de documents.

Pourquoi c’est important

Les bi-encodeurs sont la fondation de la recherche moderne:

  • Recherche évolutive — calculer embeddings documents une fois, réutiliser pour toutes requêtes
  • Retrieval temps réel — latence milliseconde sur corpus milliard-échelle
  • Matching sémantique — comprendre le sens au-delà du chevauchement de mots-clés
  • Dense retrieval — paradigme dominant remplaçant méthodes sparse
  • Enabler RAG — alimentent retrieval dans systèmes generation augmentée
  • Systèmes hybrides — combiner avec BM25 et cross-encodeurs pour meilleurs résultats

Sans bi-encodeurs, la recherche sémantique à échelle serait computationnellement infaisable.

Comment ça fonctionne

┌────────────────────────────────────────────────────────────┐
│                      BI-ENCODEUR                            │
├────────────────────────────────────────────────────────────┤
│                                                            │
│  ARCHITECTURE DEUX-TOURS:                                   │
│  ────────────────────────                                   │
│                                                            │
│        Requête                        Document             │
│          │                               │                 │
│          ↓                               ↓                 │
│  ┌──────────────┐               ┌──────────────┐          │
│  │   Encodeur   │               │   Encodeur   │          │
│  │   Requête    │               │   Document   │          │
│  │  (Tour 1)    │               │  (Tour 2)    │          │
│  └──────────────┘               └──────────────┘          │
│          │                               │                 │
│          ↓                               ↓                 │
│   ┌───────────┐                  ┌───────────┐            │
│   │ Vec Req.  │                  │ Vec Doc   │            │
│   │ [768-dim] │                  │ [768-dim] │            │
│   └───────────┘                  └───────────┘            │
│          \                           /                     │
│           → similarité(q, d) ←                            │
│              cosinus / produit scalaire                    │
│                      │                                     │
│                      ↓                                     │
│               Score de Pertinence                          │
│                                                            │
│                                                            │
│  WORKFLOW INDEXATION ET RETRIEVAL:                         │
│  ─────────────────────────────────                         │
│                                                            │
│  HORS LIGNE (Phase Indexation):                           │
│  ┌────────────────────────────────────────────────────┐  │
│  │                                                     │  │
│  │  Collection Documents                              │  │
│  │  ┌─────┬─────┬─────┬─────┬─────┬───────┐         │  │
│  │  │Doc 1│Doc 2│Doc 3│Doc 4│ ... │Doc N  │         │  │
│  │  └─────┴─────┴─────┴─────┴─────┴───────┘         │  │
│  │      │     │     │     │           │              │  │
│  │      ↓     ↓     ↓     ↓           ↓              │  │
│  │  ┌─────────────────────────────────────────┐     │  │
│  │  │          Encodeur Document               │     │  │
│  │  └─────────────────────────────────────────┘     │  │
│  │      │     │     │     │           │              │  │
│  │      ↓     ↓     ↓     ↓           ↓              │  │
│  │   [v₁]  [v₂]  [v₃]  [v₄]  ...   [vₙ]            │  │
│  │                    │                              │  │
│  │                    ↓                              │  │
│  │           ┌─────────────────┐                    │  │
│  │           │   Index ANN     │                    │  │
│  │           │ (FAISS, HNSW)   │                    │  │
│  │           └─────────────────┘                    │  │
│  │                                                     │  │
│  │  Coût unique: N passages encodeur                  │  │
│  │                                                     │  │
│  └────────────────────────────────────────────────────┘  │
│                                                            │
│  EN LIGNE (Phase Requête):                                │
│  ┌────────────────────────────────────────────────────┐  │
│  │                                                     │  │
│  │  Requête: "Qu'est-ce que machine learning?"        │  │
│  │       │                                             │  │
│  │       ↓                                             │  │
│  │  ┌─────────────────┐                               │  │
│  │  │ Encodeur Requête│  (~5-10ms sur GPU)           │  │
│  │  └─────────────────┘                               │  │
│  │       │                                             │  │
│  │       ↓                                             │  │
│  │    [vec_q]                                          │  │
│  │       │                                             │  │
│  │       ↓                                             │  │
│  │  ┌─────────────────┐                               │  │
│  │  │  Recherche ANN  │  (~1-5ms)                    │  │
│  │  │ top-k plus près │                               │  │
│  │  └─────────────────┘                               │  │
│  │       │                                             │  │
│  │       ↓                                             │  │
│  │  Résultats classés: Doc₄, Doc₁, Doc₇, ...         │  │
│  │                                                     │  │
│  │  Latence totale: ~10-20ms pour millions de docs!  │  │
│  │                                                     │  │
│  └────────────────────────────────────────────────────┘  │
│                                                            │
│                                                            │
│  COMPARAISON: BI-ENCODEUR vs CROSS-ENCODEUR:               │
│  ───────────────────────────────────────────               │
│                                                            │
│  ┌─────────────────┬───────────────────────────────────┐ │
│  │ Aspect          │ Bi-Encodeur   │ Cross-Encodeur   │ │
│  ├─────────────────┼───────────────┼──────────────────┤ │
│  │ Encodage        │ Séparé        │ Conjoint         │ │
│  │ Pré-calcul      │ ✓ Oui         │ ✗ Non            │ │
│  │ Latence (1M)    │ ~10ms         │ ~heures          │ │
│  │ Précision       │ Bonne         │ Meilleure        │ │
│  │ Cas d'usage     │ Retrieval     │ Reranking        │ │
│  └─────────────────┴───────────────┴──────────────────┘ │
│                                                            │
│                                                            │
│  MODÈLES BI-ENCODEUR POPULAIRES:                           │
│  ───────────────────────────────                           │
│                                                            │
│  • all-MiniLM-L6-v2        - Rapide, 384-dim             │
│  • all-mpnet-base-v2       - Meilleure qualité           │
│  • e5-large-v2             - Fort général                │
│  • bge-large-en-v1.5       - Top performances            │
│  • OpenAI text-embedding-3 - API, 3072-dim               │
│  • Cohere embed-v3         - API, multilingue            │
│                                                            │
└────────────────────────────────────────────────────────────┘

Questions fréquentes

Q: Pourquoi les bi-encodeurs sont moins précis que les cross-encodeurs?

R: Les bi-encodeurs compriment chaque texte en vecteur fixe indépendamment—pas d’interaction niveau token entre requête et document. Les cross-encodeurs voient les deux ensemble, permettant attention entre “python” dans requête et “serpent” ou “programmation” dans document.

Q: Comment choisir entre modèles bi-encodeur?

R: Considérer: (1) dimension vs coût stockage, (2) exigences vitesse inférence, (3) ajustement tâche/domaine—vérifier leaderboard MTEB, (4) besoins multilingues. Commencer avec all-mpnet-base-v2 usage général.

Q: Les bi-encodeurs peuvent-ils gérer longs documents?

R: La plupart ont limites 512 tokens. Pour longs documents: (1) découper en passages, embedder chacun, (2) utiliser max-pooling sur chunks, (3) considérer modèles contexte plus long, ou (4) utiliser modèles late interaction comme ColBERT.

Q: Qu’est-ce que late interaction?

R: Modèles comme ColBERT gardent embeddings niveau token au lieu de représentations single-vector. Tokens requête matchent contre tokens document via MaxSim. Cela préserve précision cross-encodeur tout en permettant pré-calcul.

Termes associés


Références

Reimers & Gurevych (2019), “Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks”, EMNLP. [Article bi-encodeur fondateur]

Karpukhin et al. (2020), “Dense Passage Retrieval for Open-Domain Question Answering”, EMNLP. [DPR bi-encodeur pour QA]

Muennighoff et al. (2022), “MTEB: Massive Text Embedding Benchmark”, arXiv. [Benchmark évaluation bi-encodeur]

Khattab & Zaharia (2020), “ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction”, SIGIR. [Avancée late interaction]

References

Reimers & Gurevych (2019), “Sentence-BERT: Sentence Embeddings using Siamese BERT-Networks”, EMNLP. [Foundational bi-encoder paper]

Karpukhin et al. (2020), “Dense Passage Retrieval for Open-Domain Question Answering”, EMNLP. [DPR bi-encoder for QA]

Muennighoff et al. (2022), “MTEB: Massive Text Embedding Benchmark”, arXiv. [Bi-encoder evaluation benchmark]

Khattab & Zaharia (2020), “ColBERT: Efficient and Effective Passage Search via Contextualized Late Interaction”, SIGIR. [Late interaction advancement]