Elastic
Jina AI
Modèles
API
keyboard_arrow_down
Lecteur
Lisez les URL et effectuez des recherches sur le Web pour de meilleurs LLM de base.
Intégrations
Intégrations multimodales et multilingues.
Reclasseur
Outil de reclassement pour optimiser la pertinence des résultats de recherche.
Elastic Inference Service
Exécutez les modèles Jina nativement au sein d'Elasticsearch.
MCP
terminal
CLI
article
llms.txt
smart_toy
Agents
data_object
Schéma
menu_book
Documents
Se connecter
login
Aperçu rapide de ColBERT
Expliquer les classements avec des cartes thermiques
Expliquer les résultats de l'IA avec Jina-ColBERT
Blog technique
juin 19, 2024

L'explicabilité de l'IA simplifiée : Comment l'interaction tardive rend Jina-ColBERT transparent

L'explicabilité et la transparence de l'IA sont des sujets brûlants. Comment pouvons-nous faire confiance à l'IA si nous ne pouvons pas voir comment elle fonctionne ? Jina-ColBERT vous montre comment, avec la bonne architecture de modèle, vous pouvez facilement faire révéler ses secrets à votre IA.
Digital representation of a golden building seen through a blue and yellow mesh pattern, evoking a technological vibe.
Maximilian Werk, Scott Martens • 11 minutes lues

L'un des problèmes persistants des modèles d'IA est que les réseaux neuronaux n'expliquent pas comment ils produisent leurs résultats. Il n'est pas toujours évident de savoir dans quelle mesure cela constitue un réel problème pour l'intelligence artificielle. Quand nous demandons aux humains d'expliquer leur raisonnement, ils rationalisent systématiquement, généralement sans même se rendre compte qu'ils le font, donnant des explications les plus plausibles sans aucune indication de ce qui se passe réellement dans leur tête.

Nous savons déjà comment faire en sorte que les modèles d'IA inventent des réponses plausibles. Peut-être que l'intelligence artificielle est plus semblable aux humains à cet égard que nous ne voudrions l'admettre.

Il y a cinquante ans, le philosophe américain Thomas Nagel a écrit un essai influent intitulé What Is It Like To Be A Bat? Il affirmait qu'il doit y avoir quelque chose que cela fait d'être une chauve-souris : voir le monde comme une chauve-souris le voit et percevoir l'existence comme le fait une chauve-souris. Cependant, selon Nagel, même si nous connaissions tous les faits possibles sur le fonctionnement du cerveau, des sens et du corps des chauves-souris, nous ne saurions toujours pas ce que cela fait d'être une chauve-souris.

L'explicabilité de l'IA est le même type de problème. Nous connaissons tous les faits sur un modèle d'IA donné. Ce n'est qu'un ensemble de nombres à précision finie organisés en une séquence de matrices. Nous pouvons trivialement vérifier que chaque sortie du modèle est le résultat d'un calcul arithmétique correct, mais cette information est inutile comme explication.

Il n'existe pas plus de solution générale à ce problème pour l'IA que pour les humains. Cependant, l'architecture ColBERT, et particulièrement sa façon d'utiliser l'"interaction tardive" lorsqu'elle est utilisée comme reranker, vous permet d'obtenir des insights significatifs de vos modèles sur les raisons pour lesquelles il donne des résultats spécifiques dans des cas particuliers.

Cet article vous montre comment l'interaction tardive permet l'explicabilité, en utilisant le modèle Jina-ColBERT jina-colbert-v1-en et la bibliothèque Python Matplotlib.

tagAperçu rapide de ColBERT

ColBERT a été introduit dans Khattab & Zaharia (2020) comme une extension du modèle BERT introduit en 2018 par Google. Les modèles Jina-ColBERT de Jina AI s'appuient sur ce travail et sur l'architecture ColBERT v2 ultérieure proposée dans Santhanam, et al. (2021). Les modèles de type ColBERT peuvent être utilisés pour créer des embeddings, mais ils ont des fonctionnalités supplémentaires lorsqu'ils sont utilisés comme modèle de reranking. Le principal avantage est l'interaction tardive, qui est une façon de structurer le problème de la similarité sémantique de texte différemment des modèles d'embedding standard.

tagLes modèles d'Embedding

Dans un modèle d'embedding traditionnel, nous comparons deux textes en générant des vecteurs représentatifs appelés embeddings, puis nous comparons ces embeddings via des métriques de distance comme la distance cosinus ou de Hamming. La quantification de la similarité sémantique de deux textes suit généralement une procédure commune.

D'abord, nous créons des embeddings pour les deux textes séparément. Pour chaque texte :

  1. Un tokenizer découpe le texte en morceaux de la taille approximative d'un mot.
  2. Chaque token est mappé à un vecteur.
  3. Les vecteurs de tokens interagissent via le système d'attention et les couches de convolution, ajoutant des informations contextuelles à la représentation de chaque token.
  4. Une couche de pooling transforme ces vecteurs de tokens modifiés en un seul vecteur d'embedding.
Diagram of text classification model with convolutional, attention, pooling layers, and text tokens on a black background.
Un modèle d'embedding schématisé qui crée un embedding unique pour un texte.

Ensuite, lorsqu'il y a un embedding pour chaque texte, nous les comparons entre eux, généralement en utilisant la métrique cosinus ou la distance de Hamming.

Flowchart describing a text similarity calculation process with tokenization, embedding models, and scoring.
Dans un modèle d'embedding conventionnel, les documents sont comparés en comparant directement leurs embeddings.

Le scoring se fait en comparant les deux embeddings complets entre eux, sans information spécifique sur les tokens. Toute l'interaction entre les tokens est "précoce" puisqu'elle se produit avant que les deux textes ne soient comparés entre eux.

tagLes modèles de Reranking

Les modèles de reranking fonctionnent différemment.

Tout d'abord, au lieu de créer un embedding pour chaque texte, il prend un texte, appelé requête, et une collection d'autres textes que nous appellerons documents cibles puis attribue un score à chaque document cible par rapport au texte de la requête. Ces nombres ne sont pas normalisés et ne sont pas comme la comparaison d'embeddings, mais ils peuvent être triés. Les documents cibles qui obtiennent les scores les plus élevés par rapport à la requête sont les textes qui sont les plus sémantiquement liés à la requête selon le modèle.

Voyons comment cela fonctionne concrètement avec le modèle de reranking jina-colbert-v1-en, en utilisant l'API Jina Reranker et Python.

Le code ci-dessous est également disponible dans un notebook que vous pouvez télécharger ou exécuter dans Google Colab.

Vous devez d'abord installer la version la plus récente de la bibliothèque requests dans votre environnement Python. Vous pouvez le faire avec la commande suivante :

pip install requests -U

Ensuite, visitez la page de l'API Jina Reranker et obtenez un token API gratuit, valable pour jusqu'à un million de tokens de traitement de texte. Copiez la clé du token API depuis le bas de la page, comme montré ci-dessous :

Screenshot of Reranker API's interface with explanatory text and red-highlighted code segment for search optimization.
Comment obtenir votre clé API personnelle depuis la page de l'API Jina Reranker.

Nous utiliserons le texte de requête suivant :

  • "Elephants eat 150 kg of food per day."

Et comparerons cette requête à trois textes :

  • "Elephants eat 150 kg of food per day."
  • "Every day, the average elephant consumes roughly 150 kg of plants."
  • "The rain in Spain falls mainly on the plain."

Le premier document est identique à la requête, le second est une reformulation du premier, et le dernier texte est complètement sans rapport.

Utilisez le code Python suivant pour obtenir les scores, en assignant votre token API Jina Reranker à la variable jina_api_key :

import requests

url = "<https://api.jina.ai/v1/rerank>"
jina_api_key = "<VOTRE TOKEN API JINA RERANKER ICI>"

headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {jina_api_key}"
}
data = {
    "model": "jina-colbert-v1-en",
    "query": "Elephants eat 150 kg of food per day.",
    "documents": [
        "Elephants eat 150 kg of food per day.",
        "Every day, the average elephant consumes roughly 150 kg of food.",
        "The rain in Spain falls mainly on the plain.",
    ],
    "top_n": 3
}

response = requests.post(url, headers=headers, json=data)
for item in response.json()['results']:
    print(f"{item['relevance_score']} : {item['document']['text']}")

L'exécution de ce code depuis un fichier Python ou dans un notebook devrait produire le résultat suivant :

11.15625 : Elephants eat 150 kg of food per day.
9.6328125 : Every day, the average elephant consumes roughly 150 kg of food.
1.568359375 : The rain in Spain falls mainly on the plain.

La correspondance exacte a le score le plus élevé, comme on pouvait s'y attendre, tandis que la reformulation a le deuxième score le plus élevé, et un texte complètement sans rapport a un score beaucoup plus bas.

tagScoring avec ColBERT

Ce qui rend le reranking ColBERT différent du scoring basé sur les embeddings, c'est que les tokens des deux textes sont comparés les uns aux autres pendant le processus de scoring. Les deux textes n'ont jamais leurs propres embeddings.

D'abord, nous utilisons la même architecture que les modèles d'embedding pour créer de nouvelles représentations pour chaque token qui incluent des informations contextuelles du texte. Ensuite, nous comparons chaque token de la requête avec chaque token du document.

Pour chaque token de la requête, nous identifions le token dans le document qui a l'interaction la plus forte avec lui, et nous additionnons ces scores d'interaction pour calculer une valeur numérique finale.

Detailed diagram showing computational model with tokens, scored and categorized into "Early" and "Late" interactions.

Cette interaction est « tardive » : les tokens interagissent entre les deux textes lorsque nous les comparons. Mais rappelons que l'interaction « tardive » n'exclut pas l'interaction « précoce ». Les paires de vecteurs de tokens comparées contiennent déjà des informations sur leurs contextes spécifiques.

Ce schéma d'interaction tardive préserve l'information au niveau des tokens, même si cette information est spécifique au contexte. Cela nous permet de voir, en partie, comment le modèle ColBERT calcule son score car nous pouvons identifier quelles paires de tokens contextualisés contribuent au score final.

tagExpliquer les classements avec des cartes thermiques

Les cartes thermiques sont une technique de visualisation utile pour voir ce qui se passe dans Jina-ColBERT lors de la création des scores. Dans cette section, nous utiliserons les bibliothèques seaborn et matplotlib pour créer des cartes thermiques à partir de la couche d'interaction tardive de jina-colbert-v1-en, montrant comment les tokens de la requête interagissent avec chaque token du texte cible.

tagConfiguration

Nous avons créé un fichier de bibliothèque Python contenant le code pour accéder au modèle jina-colbert-v1-en et utiliser seaborn, matplotlib et Pillow pour créer des cartes thermiques. Vous pouvez télécharger cette bibliothèque directement depuis GitHub, ou utiliser le notebook fourni sur votre propre système, ou sur Google Colab.

D'abord, installez les prérequis. Vous aurez besoin de la dernière version de la bibliothèque requests dans votre environnement Python. Donc, si vous ne l'avez pas déjà fait, exécutez :

pip install requests -U 

Ensuite, installez les bibliothèques principales :

pip install matplotlib seaborn torch Pillow

Ensuite, téléchargez jina_colbert_heatmaps.py depuis GitHub. Vous pouvez le faire via un navigateur web ou en ligne de commande si wget est installé :

wget https://raw.githubusercontent.com/jina-ai/workshops/main/notebooks/heatmaps/jina_colbert_heatmaps.py

Avec les bibliothèques en place, nous n'avons plus qu'à déclarer une fonction pour le reste de cet article :

from jina_colbert_heatmaps import JinaColbertHeatmapMaker

def create_heatmap(query, document, figsize=None):
    heat_map_maker = JinaColbertHeatmapMaker(jina_api_key=jina_api_key)
    # get token embeddings for the query
    query_emb = heat_map_maker.embed(query, is_query=True)
    # get token embeddings for the target document
    document_emb = heat_map_maker.embed(document, is_query=False)
    return heat_map_maker.compute_heatmap(document_emb[0], query_emb[0], figsize)

tagRésultats

Maintenant que nous pouvons créer des cartes thermiques, créons-en quelques-unes et voyons ce qu'elles nous disent.

Exécutez la commande suivante en Python :

create_heatmap("Elephants eat 150 kg of food per day.", "Elephants eat 150 kg of food per day.")

Le résultat sera une carte thermique qui ressemble à ceci :

Heatmap visualizing relationships between phrases like "elephants eat 150 kg of food per day" with color gradients indicating

Ceci est une carte thermique des niveaux d'activation entre les paires de tokens lorsque nous comparons deux textes identiques. Chaque carré montre l'interaction entre deux tokens, un de chaque texte. Les tokens supplémentaires [CLS] et [SEP] indiquent respectivement le début et la fin du texte, et q et d sont insérés juste après le token [CLS] dans les requêtes et les documents cibles respectivement. Cela permet au modèle de prendre en compte les interactions entre les tokens et le début et la fin des textes, mais permet également aux représentations des tokens d'être sensibles à leur présence dans les requêtes ou les cibles.

Plus le carré est lumineux, plus l'interaction entre les deux tokens est forte, ce qui indique qu'ils sont sémantiquement liés. Le score d'interaction de chaque paire de tokens est compris entre -1.0 et 1.0. Les carrés encadrés en rouge sont ceux qui comptent pour le score final : pour chaque token dans la requête, c'est son niveau d'interaction le plus élevé avec n'importe quel token du document qui compte.

Les meilleures correspondances — les points les plus lumineux — et les valeurs maximales encadrées en rouge sont presque toutes exactement sur la diagonale, et elles ont une très forte interaction. Les seules exceptions sont les tokens « techniques » [CLS], q, et d, ainsi que le mot « of » qui est un « mot vide » très fréquent en anglais qui porte très peu d'information indépendante.

Prenons une phrase structurellement similaire — "Cats eat 50 g of food per day." — et voyons comment les tokens interagissent :

create_heatmap("Elephants eat 150 kg of food per day.", "Cats eat 50 g of food per day.")
Heatmap visualizing the relevance of keywords like "elephants", "food", and "kg" with varying intensity colors, indicating da

Encore une fois, les meilleures correspondances sont principalement sur la diagonale car les mots sont souvent les mêmes et la structure de la phrase est presque identique. Même « cats » et « elephants » correspondent, en raison de leurs contextes communs, bien que pas très bien.

Moins le contexte est similaire, moins la correspondance est bonne. Considérons le texte "Employees eat at the company canteen."

create_heatmap("Elephants eat 150 kg of food per day.", "Employees eat at the company canteen.")
Heatmap visualization showing word correlations from news articles, including topics like food, elephants, and work environme

Bien que structurellement similaire, la seule correspondance forte ici est entre les deux instances de « eat ». Thématiquement, ce sont des phrases très différentes, même si leurs structures sont très parallèles.

En regardant l'obscurité des couleurs dans les carrés encadrés en rouge, nous pouvons voir comment le modèle les classerait comme correspondances pour "Elephants eat 150 kg of food per day", et jina-colbert-v1-en confirme cette intuition :

Score Text
11.15625 Elephants eat 150 kg of food per day.
8.3671875 Cats eat 50 g of food per day.
3.734375 Employees eat at the company canteen.

Maintenant, comparons "Elephants eat 150 kg of food per day." à une phrase qui a essentiellement le même sens mais une formulation différente : "Every day, the average elephant consumes roughly 150 kg of food."

create_heatmap("Elephants eat 150 kg of food per day.", "Every day, the average elephant consumes roughly 150 kg of food.")
Colorful heatmap visualizing the relationship between elephant consumption metrics and other variables.

Notez la forte interaction entre "eat" dans la première phrase et "consume" dans la seconde. La différence de vocabulaire n'empêche pas Jina-ColBERT de reconnaître le sens commun.

De plus, "every day" correspond fortement à "per day", même s'ils sont à des endroits complètement différents. Seul le mot de faible valeur "of" est une correspondance anormalement faible.

Maintenant, comparons la même requête avec un texte totalement sans rapport : "The rain in Spain falls mainly on the plain."

create_heatmap("Elephants eat 150 kg of food per day.", "The rain in Spain falls mainly on the plain.")
Carte thermique Seaborn visualisant les fréquences des discussions sur les sujets au fil des mois, nuancée du rouge au bleu foncé.

Vous pouvez voir que les interactions de "meilleure correspondance" ont des scores beaucoup plus faibles pour cette paire, et il y a très peu d'interaction entre les mots des deux textes. Intuitivement, nous nous attendrions à ce qu'il obtienne un score faible par rapport à "Every day, the average elephant consumes roughly 150 kg of food", et jina-colbert-v1-en est d'accord :

Score Text
9.6328125 Every day, the average elephant consumes roughly 150 kg of food.
1.568359375 The rain in Spain falls mainly on the plain.

tagTextes longs

Ce sont des exemples simples pour démontrer le fonctionnement des modèles de reclassement de type ColBERT. Dans les contextes de recherche d'information, comme la génération augmentée par récupération, les requêtes ont tendance à être des textes courts tandis que les documents candidats correspondants sont plus longs, souvent aussi longs que la fenêtre de contexte d'entrée du modèle.

Les modèles Jina-ColBERT prennent tous en charge des contextes d'entrée de 8192 tokens, ce qui équivaut à environ 16 pages standard de texte à simple interligne.

Nous pouvons également générer des cartes thermiques pour ces cas asymétriques. Par exemple, prenons la première section de la page Wikipedia sur les éléphants indiens :

Capture d'écran de la page Wikipedia sur les éléphants indiens, présentant des articles, trois images d'éléphants et le statut de conservation.

Pour voir ceci en texte brut, tel que transmis à jina-colbert-v1-en, cliquez sur ce lien.

Ce texte fait 364 mots, donc notre carte thermique ne sera pas très carrée :

create_heatmap("Elephants eat 150 kg of food per day.", wikipedia_elephants, figsize=(50,7))
Carte thermique graphique affichant des données génétiques, avec des points rouges et orange indiquant différents niveaux d'expression à travers les paires de bases

Nous voyons que "elephants" correspond à beaucoup d'endroits dans le texte. Ce n'est pas surprenant dans un texte sur les éléphants. Mais nous pouvons aussi voir une zone où il y a beaucoup plus d'interaction :

Carte thermique génomique avec motifs rouges et noirs, axe étiqueté 'XNTY', et régions surlignées indiquant des points de données.

Que se passe-t-il ici ? Avec Jina-ColBERT, nous pouvons trouver la partie du texte plus long qui y correspond. Il s'avère que c'est la quatrième phrase du deuxième paragraphe :

The species is classified as a megaherbivore and consume up to 150 kg (330 lb) of plant matter per day.

Cela réaffirme la même information que dans le texte de la requête. Si nous regardons la carte thermique pour cette seule phrase, nous pouvons voir les correspondances fortes :

Carte thermique montrant la co-occurrence des mots avec un focus sur "elephants", "food", et "day", l'intensité de la couleur indiquant la force

Jina-ColBERT vous fournit les moyens de voir exactement quelles zones d'un texte long ont provoqué sa correspondance avec la requête. Cela conduit à un meilleur débogage, mais aussi à une plus grande explicabilité. Il ne faut pas beaucoup de sophistication pour voir comment une correspondance est établie.

tagExpliquer les résultats de l'IA avec Jina-ColBERT

Les embeddings sont une technologie fondamentale dans l'IA moderne. Presque tout ce que nous faisons est basé sur l'idée que des relations complexes et apprenables dans les données d'entrée peuvent être exprimées dans la géométrie d'espaces de haute dimension. Cependant, il est très difficile pour les simples humains de donner un sens aux relations spatiales dans des milliers à des millions de dimensions.

ColBERT est un pas en arrière par rapport à ce niveau d'abstraction. Ce n'est pas une réponse complète au problème d'explication de ce qu'un modèle d'IA fait, mais il nous montre directement quelles parties de nos données sont responsables de nos résultats.

Parfois, l'IA doit être une boîte noire. Les matrices géantes qui font tout le travail lourd sont trop grandes pour qu'un humain puisse les garder en tête. Mais l'architecture ColBERT projette un peu de lumière dans la boîte et démontre que plus est possible.

Le modèle Jina-ColBERT n'est actuellement disponible qu'en anglais (jina-colbert-v1-en) mais d'autres langues et contextes d'utilisation sont en cours de développement. Cette ligne de modèles, qui non seulement effectue une recherche d'information à la pointe de la technologie mais peut vous dire pourquoi ils ont trouvé une correspondance, démontre l'engagement de Jina AI à rendre les technologies d'IA à la fois accessibles et utiles.

Catégories:
Blog technique
rss_feed

En savoir plus
mars 11, 2026 • 7 minutes lues
Bootstrapping Audio Embeddings from Multimodal LLMs
Han Xiao
Abstract illustration of a sound wave or heartbeat, formed by blue, orange, and gray dots on a white background.
mars 06, 2026 • 6 minutes lues
Identifying Embedding Models from Raw Numerical Values
Han Xiao
Fingerprint illustration made from numbers, showcasing digital and high-tech design on a light background.
septembre 09, 2025 • 11 minutes lues
Multimodal Embeddings in Llama.cpp and GGUF
Andrei Ungureanu
Alex C-G
Cartoon llama in the center of a white background, emitting laser-like beams from its eyes. The illustration creates a playfu
Langue / thème actuel
Search Foundation
Lecteur
Intégrations
Reclasseur
Obtenir la clé API Jina
Limite de taux
À propos de nous
Nouvelles
Télécharger le logo Jina
open_in_new
Télécharger le logo Elastic
open_in_new
Statut de l'API
Elastic © 2026.Sécuritétermes et conditionsConfidentialitéGérer les cookiesNe vendez ni ne partagez mes informations personnelles
Ce site web et l'ensemble de son contenu, logiciels, produits et services sont destinés exclusivement à un usage professionnel. Leur utilisation par les consommateurs n'est ni prévue ni autorisée.