{"id":199,"date":"2026-06-01T14:09:48","date_gmt":"2026-06-01T14:09:48","guid":{"rendered":"https:\/\/blog.chataignon.org\/joseph\/?p=199"},"modified":"2026-06-01T14:09:48","modified_gmt":"2026-06-01T14:09:48","slug":"comment-entrainer-des-modeles-de-vecteurs-semantiques","status":"publish","type":"post","link":"https:\/\/blog.chataignon.org\/joseph\/fr\/post-199\/comment-entrainer-des-modeles-de-vecteurs-semantiques\/","title":{"rendered":"Comment entra\u00eener des mod\u00e8les de vecteurs s\u00e9mantiques"},"content":{"rendered":"\n<p>Beaucoup de gens \u00e0 qui j&rsquo;ai parl\u00e9 r\u00e9cemment pensent spontan\u00e9ment que les mod\u00e8les de vecteurs s\u00e9mantiques (<em>embeddings<\/em>) peuvent \u00eatre entra\u00een\u00e9s avec du texte, comme les mod\u00e8les g\u00e9n\u00e9ratifs. Mais la r\u00e9alit\u00e9 est diff\u00e9rente. <a href=\"https:\/\/sbert.net\/\">SentenceTransformers<\/a> est souvent le point de d\u00e9part dans ce domaine; il fournit une <a href=\"https:\/\/huggingface.co\/datasets\/sentence-transformers\/embedding-training-data\">liste de jeux de donn\u00e9es publics<\/a> disponibles pour entra\u00eener des mod\u00e8les de vectorisation, et vous pouvez y voir que les donn\u00e9es sont structur\u00e9es en paires ou triplets de texte. Cet article va expliquer pourquoi les donn\u00e9es doivent \u00eatre structur\u00e9es ainsi, et comment adapter vos donn\u00e9es pour ce format.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Objectif d&rsquo;entra\u00eenement<\/h3>\n\n\n\n<p>Le processus d&rsquo;entra\u00eenement d&rsquo;un r\u00e9seau de neurones d\u00e9pend de l&rsquo;objectif qu&rsquo;on cherche \u00e0 accomplir. Il faut trouver des exemples de ce qu&rsquo;on veut que le r\u00e9seau de neurones accomplisse, puis l&rsquo;entra\u00eener sur ces exemples. Pour les vecteurs s\u00e9mantiques, le but est que le mod\u00e8le transforme des phrases en vecteurs qui sont proches l&rsquo;une de l&rsquo;autre (dans l&rsquo;espace vectoriel) si le sens des phrases est similaire. On a donc besoin de donn\u00e9es qui montrent des exemples de phrases au sens proche.<\/p>\n\n\n\n<p>La structure exacte des donn\u00e9es d\u00e9pend de la fonction de co\u00fbt. SentenceTransformer a un paragraphe sur les fonctions de co\u00fbt <a href=\"https:\/\/sbert.net\/docs\/sentence_transformer\/loss_overview.html\">qui dit<\/a>: <\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"has-ast-global-color-7-color has-text-color has-link-color wp-elements-f6178a8eeca93576b9a39e2138e558e0\">malheureusement il n&rsquo;y a pas de fonction de co\u00fbt qui fonctionne partout. La fonction de co\u00fbt \u00e0 utiliser d\u00e9pend des donn\u00e9es disponibles et de la t\u00e2che objectif.<\/p>\n<\/blockquote>\n\n\n\n<p>Toujours dans SentenceTransformers, voyons quel type de donn\u00e9es d&rsquo;entra\u00eenement est support\u00e9 par les fonctions de co\u00fbt. En gardant uniquement les fonctions de co\u00fbt pour l&rsquo;entra\u00eenement normal, voici le genre d&rsquo;entr\u00e9es qui reste.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th class=\"has-text-align-center\" data-align=\"center\">texte<\/th><th class=\"has-text-align-center\" data-align=\"center\">\u00e9tiquette<\/th><\/tr><\/thead><tbody><tr><td class=\"has-text-align-center\" data-align=\"center\">singletons<\/td><td class=\"has-text-align-center\" data-align=\"center\">classe<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">paires <em>(ancre, positive)<\/em> <\/td><td class=\"has-text-align-center\" data-align=\"center\">aucune<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">paires <em>(ancre, positive\/n\u00e9gative)<\/em> <\/td><td class=\"has-text-align-center\" data-align=\"center\">1 (positive) or 0 (n\u00e9gative)<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">paires <em>(texte_A, texte_B)<\/em> <\/td><td class=\"has-text-align-center\" data-align=\"center\">score de similarit\u00e9 entre 0 et 1<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\">triplets <em>(ancre, positive, n\u00e9gative)<\/em> <\/td><td class=\"has-text-align-center\" data-align=\"center\">aucune<\/td><\/tr><tr><td class=\"has-text-align-center\" data-align=\"center\"><em>(ancre, positive, n\u00e9gative_1, n\u00e9gative_2, &#8230;)<\/em><\/td><td class=\"has-text-align-center\" data-align=\"center\">aucune<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>Il y a des variations, mais toutes les entr\u00e9es contiennent <em>du texte<\/em>, associ\u00e9 \u00e0 une \u00e9tiquette ou \u00e0 un autre texte, et indiquent si (ou \u00e0 quel degr\u00e9) le texte-ancre est proche s\u00e9mantiquement des autres textes.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Structurer les donn\u00e9es<\/h3>\n\n\n\n<p>Maintenant que vous comprenez pourquoi on ne peut pas juste utiliser du texte brut, la question est <strong>comment obtenir ce type de donn\u00e9es structur\u00e9es<\/strong> ?<\/p>\n\n\n\n<p>Les vecteurs entra\u00een\u00e9s sur des classes sont <a href=\"https:\/\/proceedings.mlr.press\/v119\/chen20j\/chen20j.pdf\">en g\u00e9n\u00e9ral moins efficaces<\/a> que ceux entra\u00een\u00e9s avec des approches contrastives, donc nous nous concentrerons sur ces derni\u00e8res. Bien s\u00fbr, si vous avez juste besoin de donn\u00e9es d&rsquo;entra\u00eenement g\u00e9n\u00e9ral, vous pouvez retourner \u00e0 la <a href=\"https:\/\/huggingface.co\/datasets\/sentence-transformers\/embedding-training-data\">liste des jeux de donn\u00e9es<\/a> mentionn\u00e9s plus t\u00f4t. Mais le probl\u00e8me le plus int\u00e9ressant est celui de transformer vos propres donn\u00e9es en un jeu de donn\u00e9es adapt\u00e9 \u00e0 l&rsquo;entra\u00eenement de vecteurs s\u00e9mantiques. Cette section va lister quelques techniques.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>OpenAI, quand ils publiaient encore de la recherche dans le bon vieux temps de 2022, <a href=\"https:\/\/arxiv.org\/pdf\/2201.10005\">a montr\u00e9<\/a> que des donn\u00e9es de texte massives issues d&rsquo;internet pouvaient \u00eatre utilis\u00e9es pour entra\u00eener des mod\u00e8les de vecteurs s\u00e9mantiques, avec la supposition que les textes apparaissant c\u00f4te-\u00e0-c\u00f4te doivent avoir un sens proche. Ils ont donc utilis\u00e9 des paires de textes apparaissant ensemble comme positifs (similaires) et d&rsquo;autres textes al\u00e9atoirement tir\u00e9s des donn\u00e9es comme n\u00e9gatifs (diff\u00e9rents).<\/li>\n\n\n\n<li>Dans le m\u00eame papier, ils ont aussi entra\u00een\u00e9 des vecteurs s\u00e9mantiques pour du code informatique, en profitant de l&rsquo;existence de docstrings (une courte explication de ce que fait une fonction). Ils ont utilis\u00e9 des paires <em>(docstring, code)<\/em> comme positifs pour l&rsquo;entra\u00eenement.<\/li>\n\n\n\n<li>Une technique plus ancienne consiste \u00e0 retirer une phrase du milieu d&rsquo;un paragraphe, et de faire de cette phrase la requ\u00eate et du paragraphe priv\u00e9 de cette phrase la r\u00e9ponse. On utilise alors la paire <em>(requ\u00eate, paragraphe)<\/em> comme paire positive pour l&rsquo;entra\u00eenement.<\/li>\n\n\n\n<li>De nombreux jeux de donn\u00e9es ont des titres associ\u00e9s \u00e0 des articles, ou des r\u00e9sum\u00e9s d&rsquo;articles. Il existe des jeux de donn\u00e9es publics utilisant des paires <em>(titre, article)<\/em> de wikip\u00e9dia, des paires <em>(r\u00e9sum\u00e9, texte)<\/em> de Wikihow ou encore <em>(titre, abstract)<\/em> de publications acad\u00e9miques (voir <a href=\"https:\/\/aclanthology.org\/2025.emnlp-main.758.pdf\">ici<\/a>, tables 10-11 pour plus d&rsquo;exemples).<\/li>\n\n\n\n<li>Si vous n&rsquo;avez pas exactement ce type de donn\u00e9es, vous pouvez \u00e9ventuellement les cr\u00e9er depuis du texte structur\u00e9. Par exemple, si votre texte a des titres de section, vous pouvez les extraire et former une paire <em>(titre de section, contenu de la section)<\/em>.<\/li>\n\n\n\n<li>Les r\u00e9f\u00e9rences crois\u00e9es. Par exemple, utiliser les citations dans les publications acad\u00e9miques. Les paires <em>(papier-ancre, papier cit\u00e9)<\/em> peuvent \u00eatre utilis\u00e9es comme positifs.<\/li>\n\n\n\n<li>Associer des doubles connus. Il existe un jeu de donn\u00e9es bas\u00e9 sur les questions de StackOverflow marqu\u00e9es comme dupliqu\u00e9es, disponibles publiquement (voir la liste mentionn\u00e9e plus t\u00f4t).<\/li>\n\n\n\n<li>Lorsque vous avez acc\u00e8s \u00e0 des versions pass\u00e9es de documents (par exemple une documentation technique qui est mis \u00e0 jour r\u00e9guli\u00e8rement), vous pouvez utiliser les versions pass\u00e9es\/pr\u00e9sentes du m\u00eame texte comme positif.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Augmenter les donn\u00e9es<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\">Ajouter des n\u00e9gatifs<\/h4>\n\n\n\n<p>Notez que ces techniques aident \u00e0 obtenir des <strong>positifs<\/strong> mais pas des <strong>n\u00e9gatifs<\/strong>. Pas d&rsquo;inqui\u00e9tude, ceux-ci sont faciles \u00e0 obtenir. Pour chaque paire positive, vous pouvez juste utiliser une entr\u00e9e choisie al\u00e9atoirement dans le jeu de donn\u00e9es comme n\u00e9gatif. Ceux-ci sont des n\u00e9gatifs <em>faibles<\/em>. Des impl\u00e9mentations de la <em>triplet loss<\/em> sont optimis\u00e9es pour r\u00e9utiliser les donn\u00e9es du m\u00eame batch comme n\u00e9gatif, ce qui les rend tr\u00e8s efficaces \u00e0 l&rsquo;entra\u00eenement.<\/p>\n\n\n\n<p>Mais vous pouvez aussi cr\u00e9er des n\u00e9gatifs <em>forts<\/em>. Vous devez d&rsquo;abord pr\u00e9-s\u00e9lectionner des entr\u00e9es du m\u00eame document, ou qui ont les m\u00eames mots-cl\u00e9s que votre ancre. Classez ces entr\u00e9es en utilisant soit un mod\u00e8le de vectorisation existant, soit une technique classique comme BM25. Choisissez alors les entr\u00e9es les moins bien class\u00e9es, c&rsquo;est-\u00e0-dire les moins similaires \u00e0 l&rsquo;ancre, et utilisez-les comme <em>n\u00e9gatifs forts<\/em>. Comme elles ont des similarit\u00e9s avec l&rsquo;ancre (m\u00eame document ou m\u00eames mot-cl\u00e9s) mais ont un sens diff\u00e9rent, cela force le mod\u00e8le \u00e0 \u00eatre plus pr\u00e9cis dans la distinction des entr\u00e9es.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Augmentation des donn\u00e9es par LLM<\/h4>\n\n\n\n<p>Les <em>Large Language Models<\/em> (LLMs) sont de bons outils pour augmenter les donn\u00e9es de texte. Il y a diverses fa\u00e7ons de les utiliser:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><em>(ancre, reformulation par LLM)<\/em>, id\u00e9al pour la classification<\/li>\n\n\n\n<li><em>(ancre, question \u00e0 propos de l&rsquo;ancre)<\/em>, id\u00e9al pour les t\u00e2ches de recherche<\/li>\n\n\n\n<li>&#8230;<\/li>\n<\/ul>\n\n\n\n<p>&#8230; et la plupart des cas d&rsquo;utilisation envisageables ont une fa\u00e7on \u00e9vidente d&rsquo;\u00eatre trait\u00e9s.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Conclusion<\/h3>\n\n\n\n<p>L\u2019astuce commune \u00e0 la plupart de ces techniques est de trouver des structures sous-jacentes dans vos donn\u00e9es, et de les utiliser pour former des paires de textes similaires.<\/p>\n\n\n\n<p>Cela demande un peu plus de travail que de simplement utiliser du texte brut comme les mod\u00e8les g\u00e9n\u00e9ratifs, mais j\u2019esp\u00e8re vous avoir montr\u00e9 que c\u2019est possible dans la plupart des cas.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Beaucoup de gens \u00e0 qui j&rsquo;ai parl\u00e9 r\u00e9cemment pensent spontan\u00e9ment que les mod\u00e8les de vecteurs s\u00e9mantiques (embeddings) peuvent \u00eatre entra\u00een\u00e9s [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[42,11],"tags":[],"class_list":["post-199","post","type-post","status-publish","format-standard","hentry","category-embeddings-vecteurs-semantiques","category-ia"],"_links":{"self":[{"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/posts\/199","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/comments?post=199"}],"version-history":[{"count":4,"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/posts\/199\/revisions"}],"predecessor-version":[{"id":206,"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/posts\/199\/revisions\/206"}],"wp:attachment":[{"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/media?parent=199"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/categories?post=199"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.chataignon.org\/joseph\/wp-json\/wp\/v2\/tags?post=199"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}