import{s as te,o as ne,n as se}from"../chunks/scheduler.cc52f4b9.js";import{S as ie,i as re,e as c,s as o,c as w,h as le,a as d,d as n,b as u,f as ee,g as y,j as b,k as K,l as ae,m as s,n as z,t as A,o as E,p as k,q as R,r as J}from"../chunks/index.9480bb2b.js";import{T as oe}from"../chunks/Tip.f7b80743.js";import{C as ue,H as me,E as pe}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.04d617be.js";import{C as ce}from"../chunks/CourseFloatingBanner.cdc38ef1.js";function de(I){let l,m,x="Hub",h,r,q="Transformers",p,a,f="de créer un compte",v;return{c(){l=R("⚠️ Afin de bénéficier de toutes les fonctionnalités disponibles avec le "),m=c("i"),m.textContent=x,h=R(" et la bibliothèque 🤗 "),r=c("i"),r.textContent=q,p=R(", nous vous recommandons "),a=c("a"),a.textContent=f,v=R("."),this.h()},l(i){l=J(i,"⚠️ Afin de bénéficier de toutes les fonctionnalités disponibles avec le "),m=d(i,"I",{"data-svelte-h":!0}),b(m)!=="svelte-fdaeut"&&(m.textContent=x),h=J(i," et la bibliothèque 🤗 "),r=d(i,"I",{"data-svelte-h":!0}),b(r)!=="svelte-oa866k"&&(r.textContent=q),p=J(i,", nous vous recommandons "),a=d(i,"A",{href:!0,"data-svelte-h":!0}),b(a)!=="svelte-q4j571"&&(a.textContent=f),v=J(i,"."),this.h()},h(){K(a,"href","https://huggingface.co/join")},m(i,$){s(i,l,$),s(i,m,$),s(i,h,$),s(i,r,$),s(i,p,$),s(i,a,$),s(i,v,$)},p:se,d(i){i&&(n(l),n(m),n(h),n(r),n(p),n(a),n(v))}}}function fe(I){let l,m,x,h,r,q,p,a,f,v,i,$='Comme vous l’avez vu dans le <a href="/course/fr/chapter1">chapitre 1</a>, les <em>transformers</em> sont généralement très grands. Pouvant aller de plusieurs millions à des dizaines de milliards de paramètres, l’entraînement et le déploiement de ces modèles est une entreprise compliquée. De plus, avec de nouveaux modèles publiés presque quotidiennement et ayant chacun sa propre implémentation, les essayer tous n’est pas une tâche facile.',S,_,Q="La bibliothèque 🤗 <em>Transformers</em> a été créée pour résoudre ce problème. Son objectif est de fournir une API unique à travers laquelle tout modèle de <em>transformers</em> peut être chargé, entraîné et sauvegardé. Les principales caractéristiques de la bibliothèque sont :",j,L,V="<li><strong>La facilité d’utilisation</strong> : en seulement deux lignes de code il est possible de télécharger, charger et utiliser un modèle de NLP à l’état de l’art pour faire de l’inférence,</li> <li><strong>La flexibilité</strong> : au fond, tous les modèles sont de simples classes PyTorch <code>nn.Module</code> ou TensorFlow <code>tf.keras.Model</code> et peuvent être manipulés comme n’importe quel autre modèle dans leurs <em>frameworks</em> d’apprentissage automatique respectifs,</li> <li><strong>La simplicité</strong> : pratiquement aucune abstraction n’est faite dans la bibliothèque. Avoir tout dans un fichier est un concept central : la passe avant d’un modèle est entièrement définie dans un seul fichier afin que le code lui-même soit compréhensible et modifiable.</li>",N,C,W=`Cette dernière caractéristique rend 🤗 <em>Transformers</em> très différent des autres bibliothèques d’apprentissage automatique.
Les modèles ne sont pas construits sur des modules partagés entre plusieurs fichiers. Au lieu de cela, chaque modèle possède ses propres couches.
En plus de rendre les modèles plus accessibles et compréhensibles, cela vous permet d’expérimenter des choses facilement sur un modèle sans affecter les autres.`,F,T,X=`Ce chapitre commence par un exemple de bout en bout où nous utilisons un modèle et un <em>tokenizer</em> ensemble pour reproduire la fonction <code>pipeline()</code> introduite dans le <a href="/course/fr/chapter1">chapitre 1</a>.
Ensuite, nous aborderons l’API <em>model</em> : nous nous plongerons dans les classes de modèle et de configuration, nous verrons comment charger un modèle et enfin comment il traite les entrées numériques pour produire des prédictions.`,U,M,Y=`Nous examinerons ensuite l’API <em>tokenizer</em> qui est l’autre composant principal de la fonction <code>pipeline()</code>.
Les <em>tokenizers</em> s’occupent de la première et de la dernière étape du traitement en gérant la conversion du texte en entrées numériques pour le réseau neuronal et la reconversion en texte lorsqu’elle est nécessaire.
Enfin, nous montrerons comment gérer l’envoi de plusieurs phrases à travers un modèle dans un batch préparé et nous conclurons le tout en examinant de plus près la fonction <code>tokenizer()</code>.`,B,g,D,P,G,H,O;return r=new ue({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),p=new me({props:{title:"Introduction",local:"introduction",headingTag:"h1"}}),f=new ce({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),g=new oe({props:{$$slots:{default:[de]},$$scope:{ctx:I}}}),P=new pe({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter2/1.mdx"}}),{c(){l=c("meta"),m=o(),x=c("p"),h=o(),w(r.$$.fragment),q=o(),w(p.$$.fragment),a=o(),w(f.$$.fragment),v=o(),i=c("p"),i.innerHTML=$,S=o(),_=c("p"),_.innerHTML=Q,j=o(),L=c("ul"),L.innerHTML=V,N=o(),C=c("p"),C.innerHTML=W,F=o(),T=c("p"),T.innerHTML=X,U=o(),M=c("p"),M.innerHTML=Y,B=o(),w(g.$$.fragment),D=o(),w(P.$$.fragment),G=o(),H=c("p"),this.h()},l(e){const t=le("svelte-u9bgzb",document.head);l=d(t,"META",{name:!0,content:!0}),t.forEach(n),m=u(e),x=d(e,"P",{}),ee(x).forEach(n),h=u(e),y(r.$$.fragment,e),q=u(e),y(p.$$.fragment,e),a=u(e),y(f.$$.fragment,e),v=u(e),i=d(e,"P",{"data-svelte-h":!0}),b(i)!=="svelte-e09bqm"&&(i.innerHTML=$),S=u(e),_=d(e,"P",{"data-svelte-h":!0}),b(_)!=="svelte-19e5e4s"&&(_.innerHTML=Q),j=u(e),L=d(e,"UL",{"data-svelte-h":!0}),b(L)!=="svelte-1xq54ma"&&(L.innerHTML=V),N=u(e),C=d(e,"P",{"data-svelte-h":!0}),b(C)!=="svelte-1vdtbi5"&&(C.innerHTML=W),F=u(e),T=d(e,"P",{"data-svelte-h":!0}),b(T)!=="svelte-rvm6ll"&&(T.innerHTML=X),U=u(e),M=d(e,"P",{"data-svelte-h":!0}),b(M)!=="svelte-156nxd"&&(M.innerHTML=Y),B=u(e),y(g.$$.fragment,e),D=u(e),y(P.$$.fragment,e),G=u(e),H=d(e,"P",{}),ee(H).forEach(n),this.h()},h(){K(l,"name","hf:doc:metadata"),K(l,"content",$e)},m(e,t){ae(document.head,l),s(e,m,t),s(e,x,t),s(e,h,t),z(r,e,t),s(e,q,t),z(p,e,t),s(e,a,t),z(f,e,t),s(e,v,t),s(e,i,t),s(e,S,t),s(e,_,t),s(e,j,t),s(e,L,t),s(e,N,t),s(e,C,t),s(e,F,t),s(e,T,t),s(e,U,t),s(e,M,t),s(e,B,t),z(g,e,t),s(e,D,t),z(P,e,t),s(e,G,t),s(e,H,t),O=!0},p(e,[t]){const Z={};t&2&&(Z.$$scope={dirty:t,ctx:e}),g.$set(Z)},i(e){O||(A(r.$$.fragment,e),A(p.$$.fragment,e),A(f.$$.fragment,e),A(g.$$.fragment,e),A(P.$$.fragment,e),O=!0)},o(e){E(r.$$.fragment,e),E(p.$$.fragment,e),E(f.$$.fragment,e),E(g.$$.fragment,e),E(P.$$.fragment,e),O=!1},d(e){e&&(n(m),n(x),n(h),n(q),n(a),n(v),n(i),n(S),n(_),n(j),n(L),n(N),n(C),n(F),n(T),n(U),n(M),n(B),n(D),n(G),n(H)),n(l),k(r,e),k(p,e),k(f,e),k(g,e),k(P,e)}}}const $e='{"title":"Introduction","local":"introduction","sections":[],"depth":1}';function he(I){return ne(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class _e extends ie{constructor(l){super(),re(this,l,he,fe,te,{})}}export{_e as component};
