import{s as bl,o as Ml}from"../chunks/scheduler.37c15a92.js";import{S as _l,i as hl,g as f,s as u,r as _,A as $l,h as b,f as r,c,j as ml,u as h,x as M,k as pl,y as vl,a as i,v as $,t as m,b as we,d as p,w as v,p as Je}from"../chunks/index.2bf4358c.js";import{Y as dl}from"../chunks/Youtube.1e50a667.js";import{C as k}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as fl}from"../chunks/CourseFloatingBanner.15ba07e6.js";import{F as yl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Ie}from"../chunks/Heading.8ada512a.js";function gl(d){let l,s;return l=new fl({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter2/section3_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter2/section3_tf.ipynb"}]}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function kl(d){let l,s;return l=new fl({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter2/section3_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter2/section3_pt.ipynb"}]}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function Tl(d){let l,s;return l=new dl({props:{id:"d3JVgghSOew"}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function wl(d){let l,s;return l=new dl({props:{id:"AhChOFRegn4"}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function Jl(d){let l,s="Dans cette section, nous allons examiner de plus près la création et l’utilisation d’un modèle. Nous utiliserons la classe <code>TFAutoModel</code> qui est pratique lorsque vous voulez instancier n’importe quel modèle à partir d’un checkpoint.",t,a,y="La classe <code>TFAutoModel</code> et toutes les classes apparentées sont en fait de simples <em>wrappers</em> sur la grande variété de modèles disponibles dans la bibliothèque. C’est une enveloppe intelligente car elle peut automatiquement deviner l’architecture appropriée pour votre <em>checkpoint</em> et ensuite instancier un modèle avec cette architecture.";return{c(){l=f("p"),l.innerHTML=s,t=u(),a=f("p"),a.innerHTML=y},l(o){l=b(o,"P",{"data-svelte-h":!0}),M(l)!=="svelte-1ph37vu"&&(l.innerHTML=s),t=c(o),a=b(o,"P",{"data-svelte-h":!0}),M(a)!=="svelte-1m5wxjv"&&(a.innerHTML=y)},m(o,g){i(o,l,g),i(o,t,g),i(o,a,g)},d(o){o&&(r(l),r(t),r(a))}}}function jl(d){let l,s="Dans cette section, nous allons examiner de plus près la création et l’utilisation d’un modèle. Nous utiliserons la classe <code>AutoModel</code> qui est pratique lorsque vous voulez instancier n’importe quel modèle à partir d’un checkpoint.",t,a,y="La classe <code>AutoModel</code> et toutes les classes apparentées sont en fait de simples <em>wrappers</em> sur la grande variété de modèles disponibles dans la bibliothèque. C’est une enveloppe intelligente car elle peut automatiquement deviner l’architecture appropriée pour votre <em>checkpoint</em> et ensuite instancier un modèle avec cette architecture.";return{c(){l=f("p"),l.innerHTML=s,t=u(),a=f("p"),a.innerHTML=y},l(o){l=b(o,"P",{"data-svelte-h":!0}),M(l)!=="svelte-1sa2u10"&&(l.innerHTML=s),t=c(o),a=b(o,"P",{"data-svelte-h":!0}),M(a)!=="svelte-338jxt"&&(a.innerHTML=y)},m(o,g){i(o,l,g),i(o,t,g),i(o,a,g)},d(o){o&&(r(l),r(t),r(a))}}}function Cl(d){let l,s;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQSUyMyUyMENvbnN0cnVpcmUlMjBsYSUyMGNvbmZpZ3VyYXRpb24lMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEElMEElMjMlMjBDb25zdHJ1aXJlJTIwbGUlMjBtb2QlQzMlQThsZSUyMCVDMyVBMCUyMHBhcnRpciUyMGRlJTIwbGElMjBjb25maWd1cmF0aW9uJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbChjb25maWcp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

<span class="hljs-comment"># Construire la configuration</span>
config = BertConfig()

<span class="hljs-comment"># Construire le modèle à partir de la configuration</span>
model = TFBertModel(config)`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function Ul(d){let l,s;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEElMjMlMjBDb25zdHJ1aXJlJTIwbGElMjBjb25maWd1cmF0aW9uJTBBY29uZmlnJTIwJTNEJTIwQmVydENvbmZpZygpJTBBJTBBJTIzJTIwQ29uc3RydWlyZSUyMGxlJTIwbW9kJUMzJUE4bGUlMjAlQzMlQTAlMjBwYXJ0aXIlMjBkZSUyMGxhJTIwY29uZmlndXJhdGlvbiUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsKGNvbmZpZyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

<span class="hljs-comment"># Construire la configuration</span>
config = BertConfig()

<span class="hljs-comment"># Construire le modèle à partir de la configuration</span>
model = BertModel(config)`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function ql(d){let l,s;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKSUwQSUwQSUyMyUyMExlJTIwbW9kJUMzJUE4bGUlMjBlc3QlMjBpbml0aWFsaXMlQzMlQTklMjBkZSUyMGZhJUMzJUE3b24lMjBhbCVDMyVBOWF0b2lyZSUyMCE=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

config = BertConfig()
model = TFBertModel(config)

<span class="hljs-comment"># Le modèle est initialisé de façon aléatoire !</span>`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function Bl(d){let l,s;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwTGUlMjBtb2QlQzMlQThsZSUyMGVzdCUyMGluaXRpYWxpcyVDMyVBOSUyMGRlJTIwZmElQzMlQTdvbiUyMGFsJUMzJUE5YXRvaXJlJTIwIQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

config = BertConfig()
model = BertModel(config)

<span class="hljs-comment"># Le modèle est initialisé de façon aléatoire !</span>`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function El(d){let l,s,t,a="Comme vu précédemment, nous pouvons remplacer <code>TFBertModel</code> par la classe équivalente <code>TFAutoModel</code>. A partir de maintenant nous ferons cela car cela produit un code agnostique <em>checkpoint</em>, c’est-à-dire que si votre code fonctionne pour un <em>checkpoint</em> donné, il devrait fonctionner sans problème avec un autre. Cela s’applique même si l’architecture est différente du moment que le <em>checkpoint</em> a été entraîné pour une tâche similaire (par exemple, une tâche d’analyse de sentiments).",y;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQmVydE1vZGVsJTBBJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyYmVydC1iYXNlLWNhc2VkJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFBertModel

model = TFBertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){_(l.$$.fragment),s=u(),t=f("p"),t.innerHTML=a},l(o){h(l.$$.fragment,o),s=c(o),t=b(o,"P",{"data-svelte-h":!0}),M(t)!=="svelte-oc9kvg"&&(t.innerHTML=a)},m(o,g){$(l,o,g),i(o,s,g),i(o,t,g),y=!0},i(o){y||(p(l.$$.fragment,o),y=!0)},o(o){m(l.$$.fragment,o),y=!1},d(o){o&&(r(s),r(t)),v(l,o)}}}function Zl(d){let l,s,t,a="Comme vu précédemment, nous pouvons remplacer <code>BertModel</code> par la classe équivalente <code>AutoModel</code>. A partir de maintenant nous ferons cela car cela produit un code agnostique <em>checkpoint</em>, c’est-à-dire que si votre code fonctionne pour un <em>checkpoint</em> donné, il devrait fonctionner sans problème avec un autre. Cela s’applique même si l’architecture est différente du moment que le <em>checkpoint</em> a été entraîné pour une tâche similaire (par exemple, une tâche d’analyse de sentiments).",y;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUwQSUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel

model = BertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){_(l.$$.fragment),s=u(),t=f("p"),t.innerHTML=a},l(o){h(l.$$.fragment,o),s=c(o),t=b(o,"P",{"data-svelte-h":!0}),M(t)!=="svelte-17o4yw4"&&(t.innerHTML=a)},m(o,g){$(l,o,g),i(o,s,g),i(o,t,g),y=!0},i(o){y||(p(l.$$.fragment,o),y=!0)},o(o){m(l.$$.fragment,o),y=!1},d(o){o&&(r(s),r(t)),v(l,o)}}}function Wl(d){let l,s;return l=new k({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHRmX21vZGVsLmg1",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>tf_model.h5`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function xl(d){let l,s;return l=new k({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHB5dG9yY2hfbW9kZWwuYmlu",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>pytorch_model.<span class="hljs-keyword">bin</span>`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function Il(d){let l,s="Le fichier <em>tf_model.h5</em> est connu comme le <em>dictionnaire d’état</em>. Il contient tous les poids de votre modèle. Les deux fichiers vont de pair : la configuration est nécessaire pour connaître l’architecture de votre modèle, tandis que les poids du modèle sont les paramètres de votre modèle.";return{c(){l=f("p"),l.innerHTML=s},l(t){l=b(t,"P",{"data-svelte-h":!0}),M(l)!=="svelte-b3fl78"&&(l.innerHTML=s)},m(t,a){i(t,l,a)},d(t){t&&r(l)}}}function Ll(d){let l,s="Le fichier <em>pytorch_model.bin</em> est connu comme le <em>dictionnaire d’état</em>. Il contient tous les poids de votre modèle. Les deux fichiers vont de pair : la configuration est nécessaire pour connaître l’architecture de votre modèle, tandis que les poids du modèle sont les paramètres de votre modèle.";return{c(){l=f("p"),l.innerHTML=s},l(t){l=b(t,"P",{"data-svelte-h":!0}),M(l)!=="svelte-xwkf9d"&&(l.innerHTML=s)},m(t,a){i(t,l,a)},d(t){t&&r(l)}}}function Hl(d){let l,s;return l=new k({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0Zi5jb25zdGFudChlbmNvZGVkX3NlcXVlbmNlcyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

model_inputs = tf.constant(encoded_sequences)`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function zl(d){let l,s;return l=new k({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW5jb2RlZF9zZXF1ZW5jZXMp",highlighted:`<span class="hljs-keyword">import</span> torch

model_inputs = torch.tensor(encoded_sequences)`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){h(l.$$.fragment,t)},m(t,a){$(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){v(l,t)}}}function Rl(d){let l,s,t,a,y,o,g,He,T,w,je,J,j,Ce,Ue,R,jt="Cependant, si vous connaissez le type de modèle que vous voulez utiliser, vous pouvez utiliser directement la classe qui définit son architecture. Voyons comment cela fonctionne avec un modèle BERT.",ze,V,Re,N,Ct="La première chose que nous devons faire pour initialiser un modèle BERT est de charger un objet configuration :",Ve,C,U,qe,Q,Ut="La configuration contient de nombreux attributs qui sont utilisés pour construire le modèle :",Ne,G,Qe,A,Ge,F,qt="Bien que vous n’ayez pas encore vu ce que font tous ces attributs, vous devriez en reconnaître certains : l’attribut <code>hidden_size</code> définit la taille du vecteur <code>hidden_states</code>, et <code>num_hidden_layers</code> définit le nombre de couches que le <em>transformer</em> possède.",Ae,X,Fe,D,Bt="Un modèle créé à partir de la configuration par défaut est initialisé avec des valeurs aléatoires :",Xe,q,B,Be,P,Et='Le modèle peut être utilisé tel quel mais il produira du charabia. En effet, il doit d’abord être entraîné. Nous pourrions entraîner le modèle à partir de zéro sur la tâche qui nous intéresse mais comme vous l’avez vu dans le <a href="/course/fr/chapter1">chapitre 1</a> cela nécessiterait beaucoup de temps et de données. De plus cela aurait un impact environnemental non négligeable. Pour éviter les efforts inutiles et redondants, il est impératif de pouvoir partager et réutiliser les modèles qui ont déjà été entraînés.',De,Y,Zt="Charger un <em>transformer</em> qui a déjà été entraîné est simple : nous pouvons le faire en utilisant la méthode <code>from_pretrained()</code> :",Pe,E,Z,Ee,S,Wt='Dans l’exemple de code ci-dessus, nous n’avons pas utilisé <code>BertConfig</code> et avons à la place chargé un modèle pré-entraîné via l’identifiant <code>bert-base-cased</code>. Il s’agit d’un <em>checkpoint</em> qui a été entraîné par les auteurs de BERT eux-mêmes. Vous pouvez trouver davantage de détails à son sujet dans la <a href="https://huggingface.co/bert-base-cased" rel="nofollow">fiche du modèle</a>.',Ye,O,xt="Ce modèle est maintenant initialisé avec tous les poids du <em>checkpoint</em>. Il peut être utilisé directement pour l’inférence sur les tâches sur lesquelles il a été entraîné. Il peut également être <em>finetuné</em> sur une nouvelle tâche. En entraînant avec des poids pré-entraînés plutôt qu’à partir de zéro, nous pouvons rapidement obtenir de bons résultats.",Se,K,It="Les poids ont été téléchargés et mis en cache (afin que les futurs appels à la méthode <code>from_pretrained()</code> ne les retéléchargent pas) dans le dossier cache, qui est par défaut <em>~/.cache/huggingface/transformers</em>. Vous pouvez personnaliser votre dossier de cache en définissant la variable d’environnement <code>HF_HOME</code>.",Oe,ee,Lt='L’identifiant utilisé pour charger le modèle peut être l’identifiant de n’importe quel modèle sur le <em>Model Hub</em> du moment qu’il est compatible avec l’architecture BERT. La liste complète des <em>checkpoints</em> de BERT disponibles peut être trouvée <a href="https://huggingface.co/models?filter=bert" rel="nofollow">ici</a>.',Ke,te,et,le,Ht="Sauvegarder un modèle est aussi facile que d’en charger un. Nous utilisons la méthode <code>save_pretrained()</code>, qui est analogue à la méthode <code>from_pretrained()</code> :",tt,ne,lt,se,zt="Cela enregistre deux fichiers sur votre disque :",nt,W,x,Ze,re,Rt="Si vous jetez un coup d’œil au fichier <em>config.json</em>, vous reconnaîtrez les attributs nécessaires pour construire l’architecture du modèle. Ce fichier contient également certaines métadonnées, comme l’origine du <em>checkpoint</em> et la version de la bibliothèque 🤗 <em>Transformers</em> que vous utilisiez lors du dernier enregistrement du point <em>checkpoint</em>.",st,We,ie,rt,ae,Vt="Maintenant que vous savez comment charger et sauvegarder un modèle, essayons de l’utiliser pour faire quelques prédictions. Les <em>transformers</em> ne peuvent traiter que des nombres. Des nombres que le <em>tokenizer</em> génère. Mais avant de parler des <em>tokenizers</em>, explorons les entrées que le modèle accepte.",it,oe,Nt="Les <em>tokenizers</em> se chargent de passer les entrées vers les tenseurs du <em>framework</em> approprié. Pour vous aider à comprendre ce qui se passe, jetons un coup d’œil rapide à ce qui doit être fait avant d’envoyer les entrées au modèle.",at,ue,Qt="Disons que nous avons les séquences suivantes :",ot,ce,ut,me,Gt="Le <em>tokenizer</em> les convertit en indices de vocabulaire qui sont généralement appelés <em>input IDs</em>. Chaque séquence est maintenant une liste de nombres ! La sortie résultante est :",ct,pe,mt,de,At="Il s’agit d’une liste de séquences encodées : une liste de listes. Les tenseurs n’acceptent que des formes rectangulaires (pensez aux matrices). Ce « tableau » est déjà de forme rectangulaire, donc le convertir en tenseur est facile :",pt,I,L,xe,fe,dt,be,Ft="L’utilisation des tenseurs avec le modèle est extrêmement simple, il suffit d’appeler le modèle avec les entrées :",ft,Me,bt,_e,Xt="Bien que le modèle accepte un grand nombre d’arguments différents, seuls les identifiants d’entrée sont nécessaires. Nous expliquerons plus tard ce que font les autres arguments et quand ils sont nécessaires. Avant cela, regardons de plus près les <em>tokenizers</em>, cet outil qui construit les entrées qu’un <em>transformer</em> peut comprendre.",Mt,Le,_t;y=new yl({props:{fw:d[0]}}),g=new Ie({props:{title:"Les modèles",local:"les-modèles",headingTag:"h1"}});const Dt=[kl,gl],he=[];function Pt(e,n){return e[0]==="pt"?0:1}T=Pt(d),w=he[T]=Dt[T](d);const Yt=[wl,Tl],$e=[];function St(e,n){return e[0]==="pt"?0:1}J=St(d),j=$e[J]=Yt[J](d);function Ot(e,n){return e[0]==="pt"?jl:Jl}let ht=Ot(d),H=ht(d);V=new Ie({props:{title:"Création d’un <i> transformer </i>",local:"création-dun-i-transformer-i",headingTag:"h2"}});const Kt=[Ul,Cl],ve=[];function el(e,n){return e[0]==="pt"?0:1}C=el(d),U=ve[C]=Kt[C](d),G=new k({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),A=new k({props:{code:"QmVydENvbmZpZyUyMCU3QiUwQSUyMCUyMCU1Qi4uLiU1RCUwQSUyMCUyMCUyMmhpZGRlbl9zaXplJTIyJTNBJTIwNzY4JTJDJTBBJTIwJTIwJTIyaW50ZXJtZWRpYXRlX3NpemUlMjIlM0ElMjAzMDcyJTJDJTBBJTIwJTIwJTIybWF4X3Bvc2l0aW9uX2VtYmVkZGluZ3MlMjIlM0ElMjA1MTIlMkMlMEElMjAlMjAlMjJudW1fYXR0ZW50aW9uX2hlYWRzJTIyJTNBJTIwMTIlMkMlMEElMjAlMjAlMjJudW1faGlkZGVuX2xheWVycyUyMiUzQSUyMDEyJTJDJTBBJTIwJTIwJTVCLi4uJTVEJTBBJTdE",highlighted:`BertConfig {
  [...]
  <span class="hljs-string">&quot;hidden_size&quot;</span>: <span class="hljs-number">768</span>,
  <span class="hljs-string">&quot;intermediate_size&quot;</span>: <span class="hljs-number">3072</span>,
  <span class="hljs-string">&quot;max_position_embeddings&quot;</span>: <span class="hljs-number">512</span>,
  <span class="hljs-string">&quot;num_attention_heads&quot;</span>: <span class="hljs-number">12</span>,
  <span class="hljs-string">&quot;num_hidden_layers&quot;</span>: <span class="hljs-number">12</span>,
  [...]
}`,wrap:!1}}),X=new Ie({props:{title:"Différentes méthodes de chargement",local:"différentes-méthodes-de-chargement",headingTag:"h3"}});const tl=[Bl,ql],ye=[];function ll(e,n){return e[0]==="pt"?0:1}q=ll(d),B=ye[q]=tl[q](d);const nl=[Zl,El],ge=[];function sl(e,n){return e[0]==="pt"?0:1}E=sl(d),Z=ge[E]=nl[E](d),te=new Ie({props:{title:"Méthodes de sauvegarde",local:"méthodes-de-sauvegarde",headingTag:"h3"}}),ne=new k({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const rl=[xl,Wl],ke=[];function il(e,n){return e[0]==="pt"?0:1}W=il(d),x=ke[W]=rl[W](d);function al(e,n){return e[0]==="pt"?Ll:Il}let $t=al(d),z=$t(d);ie=new Ie({props:{title:"Utilisation d’un <i> transformer </i> pour l’inférence",local:"utilisation-dun-i-transformer-i-pour-linférence",headingTag:"h3"}}),ce=new k({props:{code:"c2VxdWVuY2VzJTIwJTNEJTIwJTVCJTIySGVsbG8hJTIyJTJDJTIwJTIyQ29vbC4lMjIlMkMlMjAlMjJOaWNlISUyMiU1RA==",highlighted:'sequences = [<span class="hljs-string">&quot;Hello!&quot;</span>, <span class="hljs-string">&quot;Cool.&quot;</span>, <span class="hljs-string">&quot;Nice!&quot;</span>]',wrap:!1}}),pe=new k({props:{code:"ZW5jb2RlZF9zZXF1ZW5jZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjA3NTkyJTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTVCMTAxJTJDJTIwNDY1OCUyQyUyMDEwMTIlMkMlMjAxMDIlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjAzODM1JTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTVE",highlighted:`encoded_sequences = [
    [<span class="hljs-number">101</span>, <span class="hljs-number">7592</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">4658</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">3835</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
]`,wrap:!1}});const ol=[zl,Hl],Te=[];function ul(e,n){return e[0]==="pt"?0:1}return I=ul(d),L=Te[I]=ol[I](d),fe=new Ie({props:{title:"Utilisation des tenseurs comme entrées du modèle",local:"utilisation-des-tenseurs-comme-entrées-du-modèle",headingTag:"h3"}}),Me=new k({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),{c(){l=f("meta"),s=u(),t=f("p"),a=u(),_(y.$$.fragment),o=u(),_(g.$$.fragment),He=u(),w.c(),je=u(),j.c(),Ce=u(),H.c(),Ue=u(),R=f("p"),R.textContent=jt,ze=u(),_(V.$$.fragment),Re=u(),N=f("p"),N.textContent=Ct,Ve=u(),U.c(),qe=u(),Q=f("p"),Q.textContent=Ut,Ne=u(),_(G.$$.fragment),Qe=u(),_(A.$$.fragment),Ge=u(),F=f("p"),F.innerHTML=qt,Ae=u(),_(X.$$.fragment),Fe=u(),D=f("p"),D.textContent=Bt,Xe=u(),B.c(),Be=u(),P=f("p"),P.innerHTML=Et,De=u(),Y=f("p"),Y.innerHTML=Zt,Pe=u(),Z.c(),Ee=u(),S=f("p"),S.innerHTML=Wt,Ye=u(),O=f("p"),O.innerHTML=xt,Se=u(),K=f("p"),K.innerHTML=It,Oe=u(),ee=f("p"),ee.innerHTML=Lt,Ke=u(),_(te.$$.fragment),et=u(),le=f("p"),le.innerHTML=Ht,tt=u(),_(ne.$$.fragment),lt=u(),se=f("p"),se.textContent=zt,nt=u(),x.c(),Ze=u(),re=f("p"),re.innerHTML=Rt,st=u(),z.c(),We=u(),_(ie.$$.fragment),rt=u(),ae=f("p"),ae.innerHTML=Vt,it=u(),oe=f("p"),oe.innerHTML=Nt,at=u(),ue=f("p"),ue.textContent=Qt,ot=u(),_(ce.$$.fragment),ut=u(),me=f("p"),me.innerHTML=Gt,ct=u(),_(pe.$$.fragment),mt=u(),de=f("p"),de.textContent=At,pt=u(),L.c(),xe=u(),_(fe.$$.fragment),dt=u(),be=f("p"),be.textContent=Ft,ft=u(),_(Me.$$.fragment),bt=u(),_e=f("p"),_e.innerHTML=Xt,Mt=u(),Le=f("p"),this.h()},l(e){const n=$l("svelte-u9bgzb",document.head);l=b(n,"META",{name:!0,content:!0}),n.forEach(r),s=c(e),t=b(e,"P",{}),ml(t).forEach(r),a=c(e),h(y.$$.fragment,e),o=c(e),h(g.$$.fragment,e),He=c(e),w.l(e),je=c(e),j.l(e),Ce=c(e),H.l(e),Ue=c(e),R=b(e,"P",{"data-svelte-h":!0}),M(R)!=="svelte-16xx9u2"&&(R.textContent=jt),ze=c(e),h(V.$$.fragment,e),Re=c(e),N=b(e,"P",{"data-svelte-h":!0}),M(N)!=="svelte-128hsml"&&(N.textContent=Ct),Ve=c(e),U.l(e),qe=c(e),Q=b(e,"P",{"data-svelte-h":!0}),M(Q)!=="svelte-1wcnctj"&&(Q.textContent=Ut),Ne=c(e),h(G.$$.fragment,e),Qe=c(e),h(A.$$.fragment,e),Ge=c(e),F=b(e,"P",{"data-svelte-h":!0}),M(F)!=="svelte-mmakwh"&&(F.innerHTML=qt),Ae=c(e),h(X.$$.fragment,e),Fe=c(e),D=b(e,"P",{"data-svelte-h":!0}),M(D)!=="svelte-sswp30"&&(D.textContent=Bt),Xe=c(e),B.l(e),Be=c(e),P=b(e,"P",{"data-svelte-h":!0}),M(P)!=="svelte-1eynxp"&&(P.innerHTML=Et),De=c(e),Y=b(e,"P",{"data-svelte-h":!0}),M(Y)!=="svelte-quefk2"&&(Y.innerHTML=Zt),Pe=c(e),Z.l(e),Ee=c(e),S=b(e,"P",{"data-svelte-h":!0}),M(S)!=="svelte-1l0tlg3"&&(S.innerHTML=Wt),Ye=c(e),O=b(e,"P",{"data-svelte-h":!0}),M(O)!=="svelte-106uflv"&&(O.innerHTML=xt),Se=c(e),K=b(e,"P",{"data-svelte-h":!0}),M(K)!=="svelte-soti5e"&&(K.innerHTML=It),Oe=c(e),ee=b(e,"P",{"data-svelte-h":!0}),M(ee)!=="svelte-18qgxgz"&&(ee.innerHTML=Lt),Ke=c(e),h(te.$$.fragment,e),et=c(e),le=b(e,"P",{"data-svelte-h":!0}),M(le)!=="svelte-kgp8ef"&&(le.innerHTML=Ht),tt=c(e),h(ne.$$.fragment,e),lt=c(e),se=b(e,"P",{"data-svelte-h":!0}),M(se)!=="svelte-1bew937"&&(se.textContent=zt),nt=c(e),x.l(e),Ze=c(e),re=b(e,"P",{"data-svelte-h":!0}),M(re)!=="svelte-1wb32oc"&&(re.innerHTML=Rt),st=c(e),z.l(e),We=c(e),h(ie.$$.fragment,e),rt=c(e),ae=b(e,"P",{"data-svelte-h":!0}),M(ae)!=="svelte-1nf2zaj"&&(ae.innerHTML=Vt),it=c(e),oe=b(e,"P",{"data-svelte-h":!0}),M(oe)!=="svelte-193952a"&&(oe.innerHTML=Nt),at=c(e),ue=b(e,"P",{"data-svelte-h":!0}),M(ue)!=="svelte-ok6y69"&&(ue.textContent=Qt),ot=c(e),h(ce.$$.fragment,e),ut=c(e),me=b(e,"P",{"data-svelte-h":!0}),M(me)!=="svelte-5w6oym"&&(me.innerHTML=Gt),ct=c(e),h(pe.$$.fragment,e),mt=c(e),de=b(e,"P",{"data-svelte-h":!0}),M(de)!=="svelte-o9qyq5"&&(de.textContent=At),pt=c(e),L.l(e),xe=c(e),h(fe.$$.fragment,e),dt=c(e),be=b(e,"P",{"data-svelte-h":!0}),M(be)!=="svelte-3uo9v2"&&(be.textContent=Ft),ft=c(e),h(Me.$$.fragment,e),bt=c(e),_e=b(e,"P",{"data-svelte-h":!0}),M(_e)!=="svelte-1jhan2z"&&(_e.innerHTML=Xt),Mt=c(e),Le=b(e,"P",{}),ml(Le).forEach(r),this.h()},h(){pl(l,"name","hf:doc:metadata"),pl(l,"content",Vl)},m(e,n){vl(document.head,l),i(e,s,n),i(e,t,n),i(e,a,n),$(y,e,n),i(e,o,n),$(g,e,n),i(e,He,n),he[T].m(e,n),i(e,je,n),$e[J].m(e,n),i(e,Ce,n),H.m(e,n),i(e,Ue,n),i(e,R,n),i(e,ze,n),$(V,e,n),i(e,Re,n),i(e,N,n),i(e,Ve,n),ve[C].m(e,n),i(e,qe,n),i(e,Q,n),i(e,Ne,n),$(G,e,n),i(e,Qe,n),$(A,e,n),i(e,Ge,n),i(e,F,n),i(e,Ae,n),$(X,e,n),i(e,Fe,n),i(e,D,n),i(e,Xe,n),ye[q].m(e,n),i(e,Be,n),i(e,P,n),i(e,De,n),i(e,Y,n),i(e,Pe,n),ge[E].m(e,n),i(e,Ee,n),i(e,S,n),i(e,Ye,n),i(e,O,n),i(e,Se,n),i(e,K,n),i(e,Oe,n),i(e,ee,n),i(e,Ke,n),$(te,e,n),i(e,et,n),i(e,le,n),i(e,tt,n),$(ne,e,n),i(e,lt,n),i(e,se,n),i(e,nt,n),ke[W].m(e,n),i(e,Ze,n),i(e,re,n),i(e,st,n),z.m(e,n),i(e,We,n),$(ie,e,n),i(e,rt,n),i(e,ae,n),i(e,it,n),i(e,oe,n),i(e,at,n),i(e,ue,n),i(e,ot,n),$(ce,e,n),i(e,ut,n),i(e,me,n),i(e,ct,n),$(pe,e,n),i(e,mt,n),i(e,de,n),i(e,pt,n),Te[I].m(e,n),i(e,xe,n),$(fe,e,n),i(e,dt,n),i(e,be,n),i(e,ft,n),$(Me,e,n),i(e,bt,n),i(e,_e,n),i(e,Mt,n),i(e,Le,n),_t=!0},p(e,[n]){const cl={};n&1&&(cl.fw=e[0]),y.$set(cl);let vt=T;T=Pt(e),T!==vt&&(Je(),m(he[vt],1,1,()=>{he[vt]=null}),we(),w=he[T],w||(w=he[T]=Dt[T](e),w.c()),p(w,1),w.m(je.parentNode,je));let yt=J;J=St(e),J!==yt&&(Je(),m($e[yt],1,1,()=>{$e[yt]=null}),we(),j=$e[J],j||(j=$e[J]=Yt[J](e),j.c()),p(j,1),j.m(Ce.parentNode,Ce)),ht!==(ht=Ot(e))&&(H.d(1),H=ht(e),H&&(H.c(),H.m(Ue.parentNode,Ue)));let gt=C;C=el(e),C!==gt&&(Je(),m(ve[gt],1,1,()=>{ve[gt]=null}),we(),U=ve[C],U||(U=ve[C]=Kt[C](e),U.c()),p(U,1),U.m(qe.parentNode,qe));let kt=q;q=ll(e),q!==kt&&(Je(),m(ye[kt],1,1,()=>{ye[kt]=null}),we(),B=ye[q],B||(B=ye[q]=tl[q](e),B.c()),p(B,1),B.m(Be.parentNode,Be));let Tt=E;E=sl(e),E!==Tt&&(Je(),m(ge[Tt],1,1,()=>{ge[Tt]=null}),we(),Z=ge[E],Z||(Z=ge[E]=nl[E](e),Z.c()),p(Z,1),Z.m(Ee.parentNode,Ee));let wt=W;W=il(e),W!==wt&&(Je(),m(ke[wt],1,1,()=>{ke[wt]=null}),we(),x=ke[W],x||(x=ke[W]=rl[W](e),x.c()),p(x,1),x.m(Ze.parentNode,Ze)),$t!==($t=al(e))&&(z.d(1),z=$t(e),z&&(z.c(),z.m(We.parentNode,We)));let Jt=I;I=ul(e),I!==Jt&&(Je(),m(Te[Jt],1,1,()=>{Te[Jt]=null}),we(),L=Te[I],L||(L=Te[I]=ol[I](e),L.c()),p(L,1),L.m(xe.parentNode,xe))},i(e){_t||(p(y.$$.fragment,e),p(g.$$.fragment,e),p(w),p(j),p(V.$$.fragment,e),p(U),p(G.$$.fragment,e),p(A.$$.fragment,e),p(X.$$.fragment,e),p(B),p(Z),p(te.$$.fragment,e),p(ne.$$.fragment,e),p(x),p(ie.$$.fragment,e),p(ce.$$.fragment,e),p(pe.$$.fragment,e),p(L),p(fe.$$.fragment,e),p(Me.$$.fragment,e),_t=!0)},o(e){m(y.$$.fragment,e),m(g.$$.fragment,e),m(w),m(j),m(V.$$.fragment,e),m(U),m(G.$$.fragment,e),m(A.$$.fragment,e),m(X.$$.fragment,e),m(B),m(Z),m(te.$$.fragment,e),m(ne.$$.fragment,e),m(x),m(ie.$$.fragment,e),m(ce.$$.fragment,e),m(pe.$$.fragment,e),m(L),m(fe.$$.fragment,e),m(Me.$$.fragment,e),_t=!1},d(e){e&&(r(s),r(t),r(a),r(o),r(He),r(je),r(Ce),r(Ue),r(R),r(ze),r(Re),r(N),r(Ve),r(qe),r(Q),r(Ne),r(Qe),r(Ge),r(F),r(Ae),r(Fe),r(D),r(Xe),r(Be),r(P),r(De),r(Y),r(Pe),r(Ee),r(S),r(Ye),r(O),r(Se),r(K),r(Oe),r(ee),r(Ke),r(et),r(le),r(tt),r(lt),r(se),r(nt),r(Ze),r(re),r(st),r(We),r(rt),r(ae),r(it),r(oe),r(at),r(ue),r(ot),r(ut),r(me),r(ct),r(mt),r(de),r(pt),r(xe),r(dt),r(be),r(ft),r(bt),r(_e),r(Mt),r(Le)),r(l),v(y,e),v(g,e),he[T].d(e),$e[J].d(e),H.d(e),v(V,e),ve[C].d(e),v(G,e),v(A,e),v(X,e),ye[q].d(e),ge[E].d(e),v(te,e),v(ne,e),ke[W].d(e),z.d(e),v(ie,e),v(ce,e),v(pe,e),Te[I].d(e),v(fe,e),v(Me,e)}}}const Vl='{"title":"Les modèles","local":"les-modèles","sections":[{"title":"Création d’un <i> transformer </i>","local":"création-dun-i-transformer-i","sections":[{"title":"Différentes méthodes de chargement","local":"différentes-méthodes-de-chargement","sections":[],"depth":3},{"title":"Méthodes de sauvegarde","local":"méthodes-de-sauvegarde","sections":[],"depth":3},{"title":"Utilisation d’un <i> transformer </i> pour l’inférence","local":"utilisation-dun-i-transformer-i-pour-linférence","sections":[],"depth":3},{"title":"Utilisation des tenseurs comme entrées du modèle","local":"utilisation-des-tenseurs-comme-entrées-du-modèle","sections":[],"depth":3}],"depth":2}],"depth":1}';function Nl(d,l,s){let t="pt";return Ml(()=>{const a=new URLSearchParams(window.location.search);s(0,t=a.get("fw")||"pt")}),[t]}class Yl extends _l{constructor(l){super(),hl(this,l,Nl,Rl,bl,{})}}export{Yl as component};
