3. EmbeddingIntermédiaire

Embeddings Multilingues pour un RAG Global

18 novembre 2025
11 min de lecture
Équipe de Recherche Ailog

Construisez des systèmes RAG qui fonctionnent dans toutes les langues en utilisant des modèles d'embeddings multilingues et la récupération inter-langues.

Pourquoi le multilingue ?

Cas d'usage :

  • Support client global
  • Recherche inter-langues
  • Bases de connaissances internationales
  • Chatbots multilingues

Meilleurs modèles multilingues (Nov 2025)

mE5-large (Microsoft) :

  • Plus de 100 langues
  • 1024 dimensions
  • Meilleur rapport performance/coût

multilingual-e5-large-instruct :

  • Optimisé par instructions
  • Optimisation requête/passage
  • État de l'art sur le benchmark MIRACL

LaBSE (Google) :

  • 109 langues
  • 768 dimensions
  • Excellent pour langues similaires

Implémentation de base

DEVELOPERpython
from sentence_transformers import SentenceTransformer model = SentenceTransformer('intfloat/multilingual-e5-large-instruct') # Requête anglaise, documents français query_en = "What is machine learning?" docs_fr = [ "L'apprentissage automatique est une branche de l'IA", "Les réseaux de neurones sont utilisés en ML" ] # Embedding avec préfixe d'instruction query_emb = model.encode(f"query: {query_en}") doc_embs = model.encode([f"passage: {doc}" for doc in docs_fr]) # Calculer la similarité from sklearn.metrics.pairwise import cosine_similarity scores = cosine_similarity([query_emb], doc_embs)[0]

Récupération inter-langues

Rechercher dans n'importe quelle langue, récupérer dans n'importe quelle langue :

DEVELOPERpython
# Requête en anglais, documents en plusieurs langues query = "How to bake bread?" documents = { "en": "To bake bread, mix flour, water, yeast...", "fr": "Pour faire du pain, mélanger farine, eau, levure...", "es": "Para hacer pan, mezclar harina, agua, levadura...", "de": "Um Brot zu backen, Mehl, Wasser, Hefe mischen..." } # Encoder tout avec le même modèle query_emb = model.encode(f"query: {query}") doc_embs = { lang: model.encode(f"passage: {text}") for lang, text in documents.items() } # Tous les documents sont comparables dans le même espace vectoriel

Détection de langue + Routage

DEVELOPERpython
from langdetect import detect def multilingual_rag(query): # Détecter la langue de la requête lang = detect(query) # Router vers un index spécifique à la langue (optimisation optionnelle) if lang in ['en', 'fr', 'de']: index = f"docs_{lang}" else: index = "docs_multilingual" # Rechercher results = vector_db.search( collection_name=index, query_vector=model.encode(f"query: {query}") ) return results

Repli par traduction

Pour les langues rares, traduire d'abord :

DEVELOPERpython
from transformers import pipeline translator = pipeline("translation", model="facebook/nllb-200-distilled-600M") def translate_then_search(query, source_lang, target_lang='en'): # Traduire la requête vers une langue commune if source_lang != target_lang: translated = translator( query, src_lang=source_lang, tgt_lang=target_lang )[0]['translation_text'] else: translated = query # Rechercher dans l'espace traduit results = vector_search(translated) return results

Qdrant avec filtrage par langue

DEVELOPERpython
from qdrant_client import QdrantClient from qdrant_client.models import Filter, FieldCondition, MatchValue client = QdrantClient("localhost", port=6333) # Indexer les documents avec métadonnées de langue client.upsert( collection_name="multilingual_docs", points=[{ "id": 1, "vector": embedding, "payload": { "text": "...", "language": "fr" } }] ) # Rechercher avec filtre de langue results = client.search( collection_name="multilingual_docs", query_vector=query_embedding, query_filter=Filter( must=[ FieldCondition( key="language", match=MatchValue(value="fr") ) ] ) )

Évaluation inter-langues

DEVELOPERpython
# Benchmark MIRACL (Multilingual Information Retrieval) from mteb import MTEB model = SentenceTransformer('intfloat/multilingual-e5-large-instruct') evaluation = MTEB(tasks=["MIRACL"]) results = evaluation.run(model, output_folder="results/") print(f"nDCG@10 moyen : {results['MIRACL']['ndcg@10']}")

Les embeddings multilingues débloquent le RAG global. Utilisez mE5 pour les meilleurs résultats en novembre 2025.

Tags

embeddingmultilingualcross-lingualglobal

Articles connexes

Ailog Assistant

Ici pour vous aider

Salut ! Pose-moi des questions sur Ailog et comment intégrer votre RAG dans vos projets !