Buckets:

rtrm's picture
download
raw
31.4 kB
import{s as hl,o as gl}from"../chunks/scheduler.893fe8c9.js";import{S as vl,i as yl,e as f,s as u,c as _,h as kl,a as b,d as r,b as c,f as bl,g as $,j as M,k as Ml,l as Tl,m as i,n as h,o as m,q as je,t as p,p as g,r as Ce}from"../chunks/index.2d09ebb4.js";import{C as wl,H as ze,E as Jl}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.0d6eb464.js";import{Y as _l}from"../chunks/Youtube.b7012d06.js";import{C as k}from"../chunks/CodeBlock.cbca5713.js";import{C as $l}from"../chunks/CourseFloatingBanner.2900b001.js";import{F as jl}from"../chunks/FrameworkSwitchCourse.f49b9dc4.js";function Cl(d){let l,s;return l=new $l({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){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Ul(d){let l,s;return l=new $l({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){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function ql(d){let l,s;return l=new _l({props:{id:"d3JVgghSOew"}}),{c(){_(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Bl(d){let l,s;return l=new _l({props:{id:"AhChOFRegn4"}}),{c(){_(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function El(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,v="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=v},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=v)},m(o,y){i(o,l,y),i(o,t,y),i(o,a,y)},d(o){o&&(r(l),r(t),r(a))}}}function Zl(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,v="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=v},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=v)},m(o,y){i(o,l,y),i(o,t,y),i(o,a,y)},d(o){o&&(r(l),r(t),r(a))}}}function xl(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){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Wl(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){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Il(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){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Ll(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){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function zl(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).",v;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){$(l.$$.fragment,o),s=c(o),t=b(o,"P",{"data-svelte-h":!0}),M(t)!=="svelte-oc9kvg"&&(t.innerHTML=a)},m(o,y){h(l,o,y),i(o,s,y),i(o,t,y),v=!0},i(o){v||(p(l.$$.fragment,o),v=!0)},o(o){m(l.$$.fragment,o),v=!1},d(o){o&&(r(s),r(t)),g(l,o)}}}function Hl(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).",v;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){$(l.$$.fragment,o),s=c(o),t=b(o,"P",{"data-svelte-h":!0}),M(t)!=="svelte-17o4yw4"&&(t.innerHTML=a)},m(o,y){h(l,o,y),i(o,s,y),i(o,t,y),v=!0},i(o){v||(p(l.$$.fragment,o),v=!0)},o(o){m(l.$$.fragment,o),v=!1},d(o){o&&(r(s),r(t)),g(l,o)}}}function Vl(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){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Rl(d){let l,s;return l=new k({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMG1vZGVsLnNhZmV0ZW5zb3Jz",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>model.safetensors`,wrap:!1}}),{c(){_(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Nl(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 Gl(d){let l,s="Le fichier <em>model.safetensors</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-a6aoz1"&&(l.innerHTML=s)},m(t,a){i(t,l,a)},d(t){t&&r(l)}}}function Ql(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){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Fl(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){$(l.$$.fragment,t)},m(t,a){h(l,t,a),s=!0},i(t){s||(p(l.$$.fragment,t),s=!0)},o(t){m(l.$$.fragment,t),s=!1},d(t){g(l,t)}}}function Al(d){let l,s,t,a,v,o,y,Ve,V,Re,T,w,Ue,J,j,qe,Be,R,Bt="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.",Ne,N,Ge,G,Et="La première chose que nous devons faire pour initialiser un modèle BERT est de charger un objet configuration :",Qe,C,U,Ee,Q,Zt="La configuration contient de nombreux attributs qui sont utilisés pour construire le modèle :",Fe,F,Ae,A,Xe,X,xt="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.",De,D,Pe,P,Wt="Un modèle créé à partir de la configuration par défaut est initialisé avec des valeurs aléatoires :",Se,q,B,Ze,S,It='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.',Ye,Y,Lt="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> :",Oe,E,Z,xe,O,zt='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>.',Ke,K,Ht="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.",et,ee,Vt="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>.",tt,te,Rt='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>.',lt,le,nt,ne,Nt="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> :",st,se,rt,re,Gt="Cela enregistre deux fichiers sur votre disque :",it,x,W,We,ie,Qt="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>.",at,Ie,ae,ot,oe,Ft="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.",ut,ue,At="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.",ct,ce,Xt="Disons que nous avons les séquences suivantes :",mt,me,pt,pe,Dt="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 :",dt,de,ft,fe,Pt="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 :",bt,I,L,Le,be,Mt,Me,St="L’utilisation des tenseurs avec le modèle est extrêmement simple, il suffit d’appeler le modèle avec les entrées :",_t,_e,$t,$e,Yt="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.",ht,he,gt,He,vt;v=new jl({props:{fw:d[0]}}),y=new wl({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),V=new ze({props:{title:"Les modèles",local:"les-modèles",headingTag:"h1"}});const Ot=[Ul,Cl],ge=[];function Kt(e,n){return e[0]==="pt"?0:1}T=Kt(d),w=ge[T]=Ot[T](d);const el=[Bl,ql],ve=[];function tl(e,n){return e[0]==="pt"?0:1}J=tl(d),j=ve[J]=el[J](d);function ll(e,n){return e[0]==="pt"?Zl:El}let yt=ll(d),z=yt(d);N=new ze({props:{title:"Création d’un <i> transformer </i>",local:"création-dun-i-transformer-i",headingTag:"h2"}});const nl=[Wl,xl],ye=[];function sl(e,n){return e[0]==="pt"?0:1}C=sl(d),U=ye[C]=nl[C](d),F=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}}),D=new ze({props:{title:"Différentes méthodes de chargement",local:"différentes-méthodes-de-chargement",headingTag:"h3"}});const rl=[Ll,Il],ke=[];function il(e,n){return e[0]==="pt"?0:1}q=il(d),B=ke[q]=rl[q](d);const al=[Hl,zl],Te=[];function ol(e,n){return e[0]==="pt"?0:1}E=ol(d),Z=Te[E]=al[E](d),le=new ze({props:{title:"Méthodes de sauvegarde",local:"méthodes-de-sauvegarde",headingTag:"h3"}}),se=new k({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const ul=[Rl,Vl],we=[];function cl(e,n){return e[0]==="pt"?0:1}x=cl(d),W=we[x]=ul[x](d);function ml(e,n){return e[0]==="pt"?Gl:Nl}let kt=ml(d),H=kt(d);ae=new ze({props:{title:"Utilisation d’un <i> transformer </i> pour l’inférence",local:"utilisation-dun-i-transformer-i-pour-linférence",headingTag:"h3"}}),me=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}}),de=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 pl=[Fl,Ql],Je=[];function dl(e,n){return e[0]==="pt"?0:1}return I=dl(d),L=Je[I]=pl[I](d),be=new ze({props:{title:"Utilisation des tenseurs comme entrées du modèle",local:"utilisation-des-tenseurs-comme-entrées-du-modèle",headingTag:"h3"}}),_e=new k({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),he=new Jl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter2/3.mdx"}}),{c(){l=f("meta"),s=u(),t=f("p"),a=u(),_(v.$$.fragment),o=u(),_(y.$$.fragment),Ve=u(),_(V.$$.fragment),Re=u(),w.c(),Ue=u(),j.c(),qe=u(),z.c(),Be=u(),R=f("p"),R.textContent=Bt,Ne=u(),_(N.$$.fragment),Ge=u(),G=f("p"),G.textContent=Et,Qe=u(),U.c(),Ee=u(),Q=f("p"),Q.textContent=Zt,Fe=u(),_(F.$$.fragment),Ae=u(),_(A.$$.fragment),Xe=u(),X=f("p"),X.innerHTML=xt,De=u(),_(D.$$.fragment),Pe=u(),P=f("p"),P.textContent=Wt,Se=u(),B.c(),Ze=u(),S=f("p"),S.innerHTML=It,Ye=u(),Y=f("p"),Y.innerHTML=Lt,Oe=u(),Z.c(),xe=u(),O=f("p"),O.innerHTML=zt,Ke=u(),K=f("p"),K.innerHTML=Ht,et=u(),ee=f("p"),ee.innerHTML=Vt,tt=u(),te=f("p"),te.innerHTML=Rt,lt=u(),_(le.$$.fragment),nt=u(),ne=f("p"),ne.innerHTML=Nt,st=u(),_(se.$$.fragment),rt=u(),re=f("p"),re.textContent=Gt,it=u(),W.c(),We=u(),ie=f("p"),ie.innerHTML=Qt,at=u(),H.c(),Ie=u(),_(ae.$$.fragment),ot=u(),oe=f("p"),oe.innerHTML=Ft,ut=u(),ue=f("p"),ue.innerHTML=At,ct=u(),ce=f("p"),ce.textContent=Xt,mt=u(),_(me.$$.fragment),pt=u(),pe=f("p"),pe.innerHTML=Dt,dt=u(),_(de.$$.fragment),ft=u(),fe=f("p"),fe.textContent=Pt,bt=u(),L.c(),Le=u(),_(be.$$.fragment),Mt=u(),Me=f("p"),Me.textContent=St,_t=u(),_(_e.$$.fragment),$t=u(),$e=f("p"),$e.innerHTML=Yt,ht=u(),_(he.$$.fragment),gt=u(),He=f("p"),this.h()},l(e){const n=kl("svelte-u9bgzb",document.head);l=b(n,"META",{name:!0,content:!0}),n.forEach(r),s=c(e),t=b(e,"P",{}),bl(t).forEach(r),a=c(e),$(v.$$.fragment,e),o=c(e),$(y.$$.fragment,e),Ve=c(e),$(V.$$.fragment,e),Re=c(e),w.l(e),Ue=c(e),j.l(e),qe=c(e),z.l(e),Be=c(e),R=b(e,"P",{"data-svelte-h":!0}),M(R)!=="svelte-16xx9u2"&&(R.textContent=Bt),Ne=c(e),$(N.$$.fragment,e),Ge=c(e),G=b(e,"P",{"data-svelte-h":!0}),M(G)!=="svelte-128hsml"&&(G.textContent=Et),Qe=c(e),U.l(e),Ee=c(e),Q=b(e,"P",{"data-svelte-h":!0}),M(Q)!=="svelte-1wcnctj"&&(Q.textContent=Zt),Fe=c(e),$(F.$$.fragment,e),Ae=c(e),$(A.$$.fragment,e),Xe=c(e),X=b(e,"P",{"data-svelte-h":!0}),M(X)!=="svelte-mmakwh"&&(X.innerHTML=xt),De=c(e),$(D.$$.fragment,e),Pe=c(e),P=b(e,"P",{"data-svelte-h":!0}),M(P)!=="svelte-sswp30"&&(P.textContent=Wt),Se=c(e),B.l(e),Ze=c(e),S=b(e,"P",{"data-svelte-h":!0}),M(S)!=="svelte-1eynxp"&&(S.innerHTML=It),Ye=c(e),Y=b(e,"P",{"data-svelte-h":!0}),M(Y)!=="svelte-quefk2"&&(Y.innerHTML=Lt),Oe=c(e),Z.l(e),xe=c(e),O=b(e,"P",{"data-svelte-h":!0}),M(O)!=="svelte-1l0tlg3"&&(O.innerHTML=zt),Ke=c(e),K=b(e,"P",{"data-svelte-h":!0}),M(K)!=="svelte-106uflv"&&(K.innerHTML=Ht),et=c(e),ee=b(e,"P",{"data-svelte-h":!0}),M(ee)!=="svelte-soti5e"&&(ee.innerHTML=Vt),tt=c(e),te=b(e,"P",{"data-svelte-h":!0}),M(te)!=="svelte-18qgxgz"&&(te.innerHTML=Rt),lt=c(e),$(le.$$.fragment,e),nt=c(e),ne=b(e,"P",{"data-svelte-h":!0}),M(ne)!=="svelte-kgp8ef"&&(ne.innerHTML=Nt),st=c(e),$(se.$$.fragment,e),rt=c(e),re=b(e,"P",{"data-svelte-h":!0}),M(re)!=="svelte-1bew937"&&(re.textContent=Gt),it=c(e),W.l(e),We=c(e),ie=b(e,"P",{"data-svelte-h":!0}),M(ie)!=="svelte-1wb32oc"&&(ie.innerHTML=Qt),at=c(e),H.l(e),Ie=c(e),$(ae.$$.fragment,e),ot=c(e),oe=b(e,"P",{"data-svelte-h":!0}),M(oe)!=="svelte-1nf2zaj"&&(oe.innerHTML=Ft),ut=c(e),ue=b(e,"P",{"data-svelte-h":!0}),M(ue)!=="svelte-193952a"&&(ue.innerHTML=At),ct=c(e),ce=b(e,"P",{"data-svelte-h":!0}),M(ce)!=="svelte-ok6y69"&&(ce.textContent=Xt),mt=c(e),$(me.$$.fragment,e),pt=c(e),pe=b(e,"P",{"data-svelte-h":!0}),M(pe)!=="svelte-5w6oym"&&(pe.innerHTML=Dt),dt=c(e),$(de.$$.fragment,e),ft=c(e),fe=b(e,"P",{"data-svelte-h":!0}),M(fe)!=="svelte-o9qyq5"&&(fe.textContent=Pt),bt=c(e),L.l(e),Le=c(e),$(be.$$.fragment,e),Mt=c(e),Me=b(e,"P",{"data-svelte-h":!0}),M(Me)!=="svelte-3uo9v2"&&(Me.textContent=St),_t=c(e),$(_e.$$.fragment,e),$t=c(e),$e=b(e,"P",{"data-svelte-h":!0}),M($e)!=="svelte-1jhan2z"&&($e.innerHTML=Yt),ht=c(e),$(he.$$.fragment,e),gt=c(e),He=b(e,"P",{}),bl(He).forEach(r),this.h()},h(){Ml(l,"name","hf:doc:metadata"),Ml(l,"content",Xl)},m(e,n){Tl(document.head,l),i(e,s,n),i(e,t,n),i(e,a,n),h(v,e,n),i(e,o,n),h(y,e,n),i(e,Ve,n),h(V,e,n),i(e,Re,n),ge[T].m(e,n),i(e,Ue,n),ve[J].m(e,n),i(e,qe,n),z.m(e,n),i(e,Be,n),i(e,R,n),i(e,Ne,n),h(N,e,n),i(e,Ge,n),i(e,G,n),i(e,Qe,n),ye[C].m(e,n),i(e,Ee,n),i(e,Q,n),i(e,Fe,n),h(F,e,n),i(e,Ae,n),h(A,e,n),i(e,Xe,n),i(e,X,n),i(e,De,n),h(D,e,n),i(e,Pe,n),i(e,P,n),i(e,Se,n),ke[q].m(e,n),i(e,Ze,n),i(e,S,n),i(e,Ye,n),i(e,Y,n),i(e,Oe,n),Te[E].m(e,n),i(e,xe,n),i(e,O,n),i(e,Ke,n),i(e,K,n),i(e,et,n),i(e,ee,n),i(e,tt,n),i(e,te,n),i(e,lt,n),h(le,e,n),i(e,nt,n),i(e,ne,n),i(e,st,n),h(se,e,n),i(e,rt,n),i(e,re,n),i(e,it,n),we[x].m(e,n),i(e,We,n),i(e,ie,n),i(e,at,n),H.m(e,n),i(e,Ie,n),h(ae,e,n),i(e,ot,n),i(e,oe,n),i(e,ut,n),i(e,ue,n),i(e,ct,n),i(e,ce,n),i(e,mt,n),h(me,e,n),i(e,pt,n),i(e,pe,n),i(e,dt,n),h(de,e,n),i(e,ft,n),i(e,fe,n),i(e,bt,n),Je[I].m(e,n),i(e,Le,n),h(be,e,n),i(e,Mt,n),i(e,Me,n),i(e,_t,n),h(_e,e,n),i(e,$t,n),i(e,$e,n),i(e,ht,n),h(he,e,n),i(e,gt,n),i(e,He,n),vt=!0},p(e,[n]){const fl={};n&1&&(fl.fw=e[0]),v.$set(fl);let Tt=T;T=Kt(e),T!==Tt&&(Ce(),m(ge[Tt],1,1,()=>{ge[Tt]=null}),je(),w=ge[T],w||(w=ge[T]=Ot[T](e),w.c()),p(w,1),w.m(Ue.parentNode,Ue));let wt=J;J=tl(e),J!==wt&&(Ce(),m(ve[wt],1,1,()=>{ve[wt]=null}),je(),j=ve[J],j||(j=ve[J]=el[J](e),j.c()),p(j,1),j.m(qe.parentNode,qe)),yt!==(yt=ll(e))&&(z.d(1),z=yt(e),z&&(z.c(),z.m(Be.parentNode,Be)));let Jt=C;C=sl(e),C!==Jt&&(Ce(),m(ye[Jt],1,1,()=>{ye[Jt]=null}),je(),U=ye[C],U||(U=ye[C]=nl[C](e),U.c()),p(U,1),U.m(Ee.parentNode,Ee));let jt=q;q=il(e),q!==jt&&(Ce(),m(ke[jt],1,1,()=>{ke[jt]=null}),je(),B=ke[q],B||(B=ke[q]=rl[q](e),B.c()),p(B,1),B.m(Ze.parentNode,Ze));let Ct=E;E=ol(e),E!==Ct&&(Ce(),m(Te[Ct],1,1,()=>{Te[Ct]=null}),je(),Z=Te[E],Z||(Z=Te[E]=al[E](e),Z.c()),p(Z,1),Z.m(xe.parentNode,xe));let Ut=x;x=cl(e),x!==Ut&&(Ce(),m(we[Ut],1,1,()=>{we[Ut]=null}),je(),W=we[x],W||(W=we[x]=ul[x](e),W.c()),p(W,1),W.m(We.parentNode,We)),kt!==(kt=ml(e))&&(H.d(1),H=kt(e),H&&(H.c(),H.m(Ie.parentNode,Ie)));let qt=I;I=dl(e),I!==qt&&(Ce(),m(Je[qt],1,1,()=>{Je[qt]=null}),je(),L=Je[I],L||(L=Je[I]=pl[I](e),L.c()),p(L,1),L.m(Le.parentNode,Le))},i(e){vt||(p(v.$$.fragment,e),p(y.$$.fragment,e),p(V.$$.fragment,e),p(w),p(j),p(N.$$.fragment,e),p(U),p(F.$$.fragment,e),p(A.$$.fragment,e),p(D.$$.fragment,e),p(B),p(Z),p(le.$$.fragment,e),p(se.$$.fragment,e),p(W),p(ae.$$.fragment,e),p(me.$$.fragment,e),p(de.$$.fragment,e),p(L),p(be.$$.fragment,e),p(_e.$$.fragment,e),p(he.$$.fragment,e),vt=!0)},o(e){m(v.$$.fragment,e),m(y.$$.fragment,e),m(V.$$.fragment,e),m(w),m(j),m(N.$$.fragment,e),m(U),m(F.$$.fragment,e),m(A.$$.fragment,e),m(D.$$.fragment,e),m(B),m(Z),m(le.$$.fragment,e),m(se.$$.fragment,e),m(W),m(ae.$$.fragment,e),m(me.$$.fragment,e),m(de.$$.fragment,e),m(L),m(be.$$.fragment,e),m(_e.$$.fragment,e),m(he.$$.fragment,e),vt=!1},d(e){e&&(r(s),r(t),r(a),r(o),r(Ve),r(Re),r(Ue),r(qe),r(Be),r(R),r(Ne),r(Ge),r(G),r(Qe),r(Ee),r(Q),r(Fe),r(Ae),r(Xe),r(X),r(De),r(Pe),r(P),r(Se),r(Ze),r(S),r(Ye),r(Y),r(Oe),r(xe),r(O),r(Ke),r(K),r(et),r(ee),r(tt),r(te),r(lt),r(nt),r(ne),r(st),r(rt),r(re),r(it),r(We),r(ie),r(at),r(Ie),r(ot),r(oe),r(ut),r(ue),r(ct),r(ce),r(mt),r(pt),r(pe),r(dt),r(ft),r(fe),r(bt),r(Le),r(Mt),r(Me),r(_t),r($t),r($e),r(ht),r(gt),r(He)),r(l),g(v,e),g(y,e),g(V,e),ge[T].d(e),ve[J].d(e),z.d(e),g(N,e),ye[C].d(e),g(F,e),g(A,e),g(D,e),ke[q].d(e),Te[E].d(e),g(le,e),g(se,e),we[x].d(e),H.d(e),g(ae,e),g(me,e),g(de,e),Je[I].d(e),g(be,e),g(_e,e),g(he,e)}}}const Xl='{"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 Dl(d,l,s){let t="pt";return gl(()=>{const a=new URLSearchParams(window.location.search);s(0,t=a.get("fw")||"pt")}),[t]}class ln extends vl{constructor(l){super(),yl(this,l,Dl,Al,hl,{})}}export{ln as component};

Xet Storage Details

Size:
31.4 kB
·
Xet hash:
87a286a365d0a5d7136e75c1bc9bf5b4f3d131caebf43d73bb1efa69ba29e3f0

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.