{"id":667,"date":"2026-10-09T16:36:33","date_gmt":"2026-10-09T14:36:33","guid":{"rendered":"https:\/\/www.ranksignal.fr\/blog\/?p=667"},"modified":"2026-10-14T17:02:56","modified_gmt":"2026-10-14T15:02:56","slug":"la-bibliotheque-bertviz","status":"publish","type":"post","link":"https:\/\/www.ranksignal.fr\/blog\/deep-learning\/la-bibliotheque-bertviz\/","title":{"rendered":"BERTviz : voir ce que regarde un mod\u00e8le BERT"},"content":{"rendered":"<p>Un mod\u00e8le de langage te rend une r\u00e9ponse, jamais ses h\u00e9sitations. Pourtant, quand <a href=\"\/blog\/deep-learning\/le-modele-bert\/\" title=\"BERT\">BERT<\/a> lit ta phrase, plus d&rsquo;une centaine de t\u00eates d&rsquo;attention p\u00e8sent chacune les mots les uns par rapport aux autres. BERTviz est la biblioth\u00e8que qui met ces pes\u00e9es sous tes yeux. Tu vas voir ce qu&rsquo;elle affiche, comment l&rsquo;appeler en deux lignes, et comment lire le r\u00e9sultat sans te perdre.<\/p>\n<p><strong>Sommaire<\/strong><\/p>\n<ul>\n<li><a href=\"#l-essentiel-en-30-secondes\">L&rsquo;essentiel en 30 secondes<\/a><\/li>\n<li><a href=\"#un-outil-pour-regarder-pas-pour-entrainer\">Un outil pour regarder, pas pour entra\u00eener<\/a><\/li>\n<li><a href=\"#deux-appels-deux-grossissements\">Deux appels, deux grossissements<\/a><\/li>\n<li><a href=\"#lire-les-couleurs-parcourir-les-tetes\">Lire les couleurs, parcourir les t\u00eates<\/a><\/li>\n<li><a href=\"#voir-l-attention-ce-n-est-pas-tout-voir\">Voir l&rsquo;attention, ce n&rsquo;est pas tout voir<\/a><\/li>\n<\/ul>\n<h2 id=\"l-essentiel-en-30-secondes\">L&rsquo;essentiel en 30 secondes<\/h2>\n<ul>\n<li>BERTviz est <strong>un outil de visualisation<\/strong>, pas un outil d&rsquo;entra\u00eenement : il affiche les poids d&rsquo;attention d&rsquo;un mod\u00e8le BERT.<\/li>\n<li>Il propose <strong>deux vues<\/strong> : <code>head_view<\/code> pour regarder les t\u00eates, <code>model_view<\/code> pour embrasser le mod\u00e8le entier.<\/li>\n<li>La vue est <strong>interactive<\/strong> : tu changes de phrase, tu choisis la couche dans un menu, tu survoles un mot.<\/li>\n<li>Dans ces vues, <strong>une couleur sombre<\/strong> signale un poids d&rsquo;attention proche de 1.<\/li>\n<li>Elle montre qui regarde qui, mais <strong>d&rsquo;autres m\u00e9thodes<\/strong> r\u00e9pondent \u00e0 d&rsquo;autres questions, comme l&rsquo;influence d&rsquo;un mot sur la sortie.<\/li>\n<\/ul>\n<h2 id=\"un-outil-pour-regarder-pas-pour-entrainer\">Un outil pour regarder, pas pour entra\u00eener<\/h2>\n<p>BERTviz est un paquet Python de visualisation. On le croise dans des exemples \u00e9crits avec la biblioth\u00e8que Transformers de Hugging Face, aux c\u00f4t\u00e9s d&rsquo;un autre outil du m\u00eame genre, Ecco.<\/p>\n<p>Son terrain, c&rsquo;est le m\u00e9canisme d&rsquo;attention, qui a une particularit\u00e9 : on peut en visualiser les relations. Dans chaque couche d&rsquo;un mod\u00e8le BERT vivent plusieurs t\u00eates, et chacune apprend <strong>une repr\u00e9sentation diff\u00e9rente des donn\u00e9es<\/strong>. BERTviz t&rsquo;en montre une \u00e0 la fois, ou toutes ensemble.<\/p>\n<p>Ce qu&rsquo;il te donne n&rsquo;est donc pas une explication toute faite, mais un tableau de poids que tu lis toi-m\u00eame : quel mot consulte quel autre mot, et avec quelle intensit\u00e9.<\/p>\n<h2 id=\"deux-appels-deux-grossissements\">Deux appels, deux grossissements<\/h2>\n<p>Premi\u00e8re question concr\u00e8te : comment regarder ce que fait une seule t\u00eate sur une paire de phrases ? Un seul appel suffit.<\/p>\n<pre><code>head_view(attention, tokens, sentence_b_start)\n<\/code><\/pre>\n<p>L&rsquo;extrait suppose que trois objets existent d\u00e9j\u00e0 : les poids d&rsquo;attention (<code>attention<\/code>), la liste des jetons (<code>tokens<\/code>) et l&rsquo;indice o\u00f9 commence la seconde phrase (<code>sentence_b_start<\/code>), car BERT lit ses entr\u00e9es par paires, s\u00e9par\u00e9es par un jeton <code>[SEP]<\/code>.<\/p>\n<p>La vue qui s&rsquo;ouvre se manipule. Tu peux <strong>essayer d&rsquo;autres phrases<\/strong>, ouvrir le menu d\u00e9roulant pour passer d&rsquo;une couche \u00e0 l&rsquo;autre, et survoler un mot pour voir les poids que lui accorde chaque t\u00eate.<\/p>\n<p>Pour prendre du recul, m\u00eame signature, autre fonction :<\/p>\n<pre><code>model_view(attention, tokens, sentence_b_start)\n<\/code><\/pre>\n<p>Elle affiche tout d&rsquo;un coup, couches et t\u00eates r\u00e9unies, l\u00e0 o\u00f9 <code>head_view<\/code> te laisse choisir. Pense \u00e0 une carte routi\u00e8re : <code>model_view<\/code> te donne le plan de la ville, <code>head_view<\/code> le zoom sur une rue.<\/p>\n<blockquote>\n<p><strong>\ud83d\udca1 Intuition<\/strong> Les deux fonctions re\u00e7oivent exactement les m\u00eames trois arguments. Changer de grossissement ne co\u00fbte donc que le nom de la fonction : tu peux encha\u00eener la vue large pour rep\u00e9rer une zone int\u00e9ressante, puis la vue par t\u00eate pour la lire de pr\u00e8s.<\/p>\n<\/blockquote>\n<h2 id=\"lire-les-couleurs-parcourir-les-tetes\">Lire les couleurs, parcourir les t\u00eates<\/h2>\n<p>Tout repose sur une seule convention : <strong>sombre veut dire proche de 1<\/strong>, et plus clair veut dire plus faible. Pour te faire l&rsquo;\u0153il, regarde ce genre de tableau, ici celui d&rsquo;une traduction.<\/p>\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1485\" height=\"1219\" src=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_attention_alignement.png\" alt=\"Tableau de poids d&#x27;attention o\u00f9 chaque case color\u00e9e dit combien un mot produit consulte un mot de la phrase d&#x27;origine\" class=\"wp-image-282\" srcset=\"https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_attention_alignement.png 1485w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_attention_alignement-300x246.png 300w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_attention_alignement-1024x841.png 1024w, https:\/\/www.ranksignal.fr\/wp-content\/uploads\/2026\/10\/b1_ch02_attention_alignement-768x630.png 768w\" sizes=\"auto, (max-width: 1485px) 100vw, 1485px\" \/><figcaption class=\"wp-element-caption\">Rep\u00e8re les cases les plus fonc\u00e9es : elles portent des valeurs voisines de 0,85 ou 0,90, et relient les mots qui se correspondent. Les valeurs sont illustratives, mais la lecture est la m\u00eame devant n&rsquo;importe quelle vue de poids d&rsquo;attention : tu cherches les cases sombres, puis tu te demandes pourquoi ces deux mots-l\u00e0.<\/figcaption><\/figure>\n\n<p>Reste \u00e0 savoir o\u00f9 regarder. Un BERT \u00e0 12 couches de 12 t\u00eates te propose autant de petits tableaux de ce genre pour une m\u00eame phrase, soit plus de cent lectures diff\u00e9rentes. C&rsquo;est ce qui fait la capacit\u00e9 du mod\u00e8le, et c&rsquo;est aussi ce qui rend <code>model_view<\/code> pr\u00e9cieux pour s&rsquo;y retrouver.<\/p>\n<p>Un conseil de lecture d\u00e9coule d&rsquo;un fait : ces repr\u00e9sentations ne sont pas ind\u00e9pendantes. Ce que les premi\u00e8res couches ont <strong>appris peut resservir plus haut<\/strong>, donc mieux vaut parcourir les couches dans l&rsquo;ordre que de juger une t\u00eate isol\u00e9e.<\/p>\n<h2 id=\"voir-l-attention-ce-n-est-pas-tout-voir\">Voir l&rsquo;attention, ce n&rsquo;est pas tout voir<\/h2>\n<p>BERTviz r\u00e9pond \u00e0 une question pr\u00e9cise : qui regarde qui ? D&rsquo;autres questions existent, avec d&rsquo;autres outils. Pour savoir quels jetons comptent le plus quand un mod\u00e8le g\u00e9n\u00e8re le suivant, on utilise la m\u00e9thode gradient \u00d7 entr\u00e9e : \u00e0 un pas de temps donn\u00e9, elle calcule le gradient des probabilit\u00e9s de sortie des jetons les plus probables par rapport aux jetons d&rsquo;entr\u00e9e.<\/p>\n<p>Le raisonnement est simple : de petits changements sur les jetons d&rsquo;entr\u00e9e les plus importants provoquent <strong>les plus grands changements<\/strong> de sortie.<\/p>\n<p>Autre angle, les neurones. On capture l&rsquo;activation des neurones des couches feedforward, on la d\u00e9compose en quelques facteurs que l&rsquo;utilisateur choisit, puis on observe de fa\u00e7on interactive les facteurs les plus actifs quand un jeton est g\u00e9n\u00e9r\u00e9. Certains se concentrent sur une portion du texte (d\u00e9but, milieu, fin), d&rsquo;autres sur des structures grammaticales comme les conjonctions ou les articles.<\/p>\n<blockquote>\n<p><strong>\u26a0\ufe0f Pi\u00e8ge<\/strong> Une vue d&rsquo;attention ne remplace pas ces analyses. Elle d\u00e9crit les relations entre mots \u00e0 l&rsquo;int\u00e9rieur des t\u00eates ; l&rsquo;influence d&rsquo;un mot d&rsquo;entr\u00e9e sur la sortie, ou ce que code un neurone, se mesure autrement.<\/p>\n<\/blockquote>\n<p>Retiens donc le r\u00f4le de BERTviz : une loupe sur l&rsquo;attention de BERT, simple \u00e0 lancer, qui te donne envie de poser la question suivante.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>BERTviz affiche les poids d&rsquo;attention de BERT, t\u00eate par t\u00eate ou d&rsquo;un seul coup d&rsquo;\u0153il. Ce que fait la biblioth\u00e8que, comment l&rsquo;appeler, comment lire ses couleurs.<\/p>\n","protected":false},"author":1,"featured_media":666,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[],"class_list":["post-667","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-deep-learning"],"_links":{"self":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/667","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/comments?post=667"}],"version-history":[{"count":2,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/667\/revisions"}],"predecessor-version":[{"id":769,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/posts\/667\/revisions\/769"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media\/666"}],"wp:attachment":[{"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/media?parent=667"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/categories?post=667"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.ranksignal.fr\/blog\/wp-json\/wp\/v2\/tags?post=667"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}