import{s as Ce,o as Le}from"../chunks/scheduler.cc52f4b9.js";import{S as Qe,i as We,e as ke,s as p,c,h as Ae,a as ve,d as r,b as d,f as Te,g as m,k as je,l as Ie,m as u,n as f,o as a,u as Je,t as o,p as $,v as Ze}from"../chunks/index.9480bb2b.js";import{C as Ve,H as x,E as Be}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.04d617be.js";import{C as Me}from"../chunks/CodeBlock.f4148b32.js";import{C as Ee}from"../chunks/CourseFloatingBanner.cdc38ef1.js";import{Q as k}from"../chunks/Question.38e3fd1e.js";import{F as Xe}from"../chunks/FrameworkSwitchCourse.42d12053.js";function He(v){let i,g,l,q;return i=new x({props:{title:"5. What is an AutoModel?",local:"5-what-is-an-automodel",headingTag:"h3"}}),l=new k({props:{choices:[{text:"Un modèle qui s'entraîne automatiquement sur vos données",explain:"Vous confondez cela avec notre produit <a href='https://huggingface.co/autotrain>AutoTrain</a>"},{text:"Un objet qui renvoie la bonne architecture basée sur le <i>checkpoint</i> .",explain:"Exactement : <code>TFAutoModel</code> a seulement besoin de connaître le <i>checkpoint</i> à partir duquel il doit s'initialiser pour retourner à la bonne architecture.",correct:!0},{text:"Un modèle qui détecte automatiquement la langue utilisée pour ses entrées afin de charger les bonnes pondérations.",explain:"Bien que certains <i>checkpoints</i> et modèles soient capables de gérer plusieurs langues, il n'existe pas d'outils intégrés pour la sélection automatique des <i>checkpoints</i> en fonction de la langue. Vous devez vous rendre sur le <a href='https://huggingface.co/models'>Hub des modèles</a> pour trouver le meilleur <i>checkpoint</i> pour votre tâche !"}]}}),{c(){c(i.$$.fragment),g=p(),c(l.$$.fragment)},l(t){m(i.$$.fragment,t),g=d(t),m(l.$$.fragment,t)},m(t,b){f(i,t,b),u(t,g,b),f(l,t,b),q=!0},i(t){q||(o(i.$$.fragment,t),o(l.$$.fragment,t),q=!0)},o(t){a(i.$$.fragment,t),a(l.$$.fragment,t),q=!1},d(t){t&&r(g),$(i,t),$(l,t)}}}function Re(v){let i,g,l,q;return i=new x({props:{title:"5. Qu’est-ce qu’un AutoModel?",local:"5-quest-ce-quun-automodel",headingTag:"h3"}}),l=new k({props:{choices:[{text:"Un modèle qui s'entraîne automatiquement sur vos données",explain:"Vous confondez cela avec notre produit <a href='https://huggingface.co/autotrain>AutoTrain</a>"},{text:"Un objet qui renvoie la bonne architecture basée sur le <i>checkpoint</i> .",explain:"Exactement : <code>AutoModel</code> a seulement besoin de connaître le <i>checkpoint</i> à partir duquel il doit s'initialiser pour retourner à la bonne architecture.",correct:!0},{text:"Un modèle qui détecte automatiquement la langue utilisée pour ses entrées afin de charger les bonnes pondérations.",explain:"Bien que certains <i>checkpoints</i> et modèles soient capables de gérer plusieurs langues, il n'existe pas d'outils intégrés pour la sélection automatique des <i>checkpoints</i> en fonction de la langue. Vous devez vous rendre sur le <a href='https://huggingface.co/models'>Hub des modèles</a> pour trouver le meilleur <i>checkpoint</i> pour votre tâche !"}]}}),{c(){c(i.$$.fragment),g=p(),c(l.$$.fragment)},l(t){m(i.$$.fragment,t),g=d(t),m(l.$$.fragment,t)},m(t,b){f(i,t,b),u(t,g,b),f(l,t,b),q=!0},i(t){q||(o(i.$$.fragment,t),o(l.$$.fragment,t),q=!0)},o(t){a(i.$$.fragment,t),a(l.$$.fragment,t),q=!1},d(t){t&&r(g),$(i,t),$(l,t)}}}function Fe(v){let i,g,l,q,t,b;return i=new x({props:{title:"10. Y a-t-il un problème avec le code suivant ?",local:"10-y-a-t-il-un-problème-avec-le-code-suivant-",headingTag:"h3"}}),l=new Me({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbCUwQSUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmJlcnQtYmFzZS1jYXNlZCUyMiklMEFtb2RlbCUyMCUzRCUyMFRGQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZCglMjJncHQyJTIyKSUwQSUwQWVuY29kZWQlMjAlM0QlMjB0b2tlbml6ZXIoJTIySGV5ISUyMiUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwbW9kZWwoKiplbmNvZGVkKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModel

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
model = TFAutoModel.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)

encoded = tokenizer(<span class="hljs-string">&quot;Hey!&quot;</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
result = model(**encoded)`,wrap:!1}}),t=new k({props:{choices:[{text:"Non, ça semble correct.",explain:"Malheureusement, coupler un modèle avec un <i>tokenizer</i> qui a été entraîné avec un <i>checkpoint</i> différent est rarement une bonne idée. Le modèle n'a pas été entraîné pour donner du sens à la sortie de ce <i>tokenizer</i> donc la sortie du modèle (s'il peut même fonctionner !) n'aura aucun sens."},{text:" Le <i>tokenizer</i> et le modèle doivent toujours provenir du même <i>checkpoint</i>.",explain:"",correct:!0},{text:" C'est une bonne pratique de faire du <i>padding</i> et de troncage avec le <i>tokenizer</i> car chaque entrée est un batch.",explain:"Il est vrai que chaque entrée de modèle doit être un batch. Cependant, tronquer ou compléter cette séquence n'aurait pas nécessairement de sens puisqu'il n'y en a qu'une seule. Il s'agit là de techniques permettant de mettre en batch une liste de phrases."}]}}),{c(){c(i.$$.fragment),g=p(),c(l.$$.fragment),q=p(),c(t.$$.fragment)},l(s){m(i.$$.fragment,s),g=d(s),m(l.$$.fragment,s),q=d(s),m(t.$$.fragment,s)},m(s,h){f(i,s,h),u(s,g,h),f(l,s,h),u(s,q,h),f(t,s,h),b=!0},i(s){b||(o(i.$$.fragment,s),o(l.$$.fragment,s),o(t.$$.fragment,s),b=!0)},o(s){a(i.$$.fragment,s),a(l.$$.fragment,s),a(t.$$.fragment,s),b=!1},d(s){s&&(r(g),r(q)),$(i,s),$(l,s),$(t,s)}}}function Ge(v){let i,g,l,q,t,b;return i=new x({props:{title:"10. Y a-t-il un problème avec le code suivant ?",local:"10-y-a-t-il-un-problème-avec-le-code-suivant-",headingTag:"h3"}}),l=new Me({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWwlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMmdwdDIlMjIpJTBBJTBBZW5jb2RlZCUyMCUzRCUyMHRva2VuaXplciglMjJIZXkhJTIyJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJwdCUyMiklMEFyZXN1bHQlMjAlM0QlMjBtb2RlbCgqKmVuY29kZWQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
model = AutoModel.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)

encoded = tokenizer(<span class="hljs-string">&quot;Hey!&quot;</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
result = model(**encoded)`,wrap:!1}}),t=new k({props:{choices:[{text:"Non, ça semble correct.",explain:"Malheureusement, coupler un modèle avec un <i>tokenizer</i> qui a été entraîné avec un <i>checkpoint</i> différent est rarement une bonne idée. Le modèle n'a pas été entraîné pour donner du sens à la sortie de ce <i>tokenizer</i> donc la sortie du modèle (s'il peut même fonctionner !) n'aura aucun sens."},{text:" Le <i>tokenizer</i> et le modèle doivent toujours provenir du même <i>checkpoint</i>.",explain:"",correct:!0},{text:" C'est une bonne pratique de faire du <i>padding</i> et de troncage avec le <i>tokenizer</i> car chaque entrée est un batch.",explain:"Il est vrai que chaque entrée de modèle doit être un batch. Cependant, tronquer ou compléter cette séquence n'aurait pas nécessairement de sens puisqu'il n'y en a qu'une seule. Il s'agit là de techniques permettant de mettre en batch une liste de phrases."}]}}),{c(){c(i.$$.fragment),g=p(),c(l.$$.fragment),q=p(),c(t.$$.fragment)},l(s){m(i.$$.fragment,s),g=d(s),m(l.$$.fragment,s),q=d(s),m(t.$$.fragment,s)},m(s,h){f(i,s,h),u(s,g,h),f(l,s,h),u(s,q,h),f(t,s,h),b=!0},i(s){b||(o(i.$$.fragment,s),o(l.$$.fragment,s),o(t.$$.fragment,s),b=!0)},o(s){a(i.$$.fragment,s),a(l.$$.fragment,s),a(t.$$.fragment,s),b=!1},d(s){s&&(r(g),r(q)),$(i,s),$(l,s),$(t,s)}}}function Se(v){let i,g,l,q,t,b,s,h,z,O,U,D,T,ee,j,te,J,ne,Z,se,C,ie,L,le,Q,re,W,ae,M,y,P,A,oe,I,ue,V,pe,B,de,E,ce,X,me,H,fe,R,$e,F,ge,w,_,Y,G,qe,K,be;t=new Xe({props:{fw:v[0]}}),s=new Ve({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),z=new x({props:{title:"Quiz de fin de chapitre",local:"quiz-de-fin-de-chapitre",headingTag:"h1"}}),U=new Ee({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),T=new x({props:{title:"1. Quel est l’ordre du pipeline de modélisation du langage ?",local:"1-quel-est-lordre-du-pipeline-de-modélisation-du-langage-",headingTag:"h3"}}),j=new k({props:{choices:[{text:" Tout d'abord, le modèle, qui traite le texte et renvoie des prédictions brutes. Puis le <i>tokenizer</i> donne un sens à ces prédictions et les reconvertit en texte si nécessaire.",explain:" Le modèle ne peut pas comprendre le texte ! Le <i>tokenizer</i> doit d'abord tokeniser le texte et le convertir en identifiants afin qu'il soit compréhensible par le modèle."},{text:" Tout d'abord, le <i>tokenizer</i>, qui traite le texte et renvoie des identifiants. Puis le modèle traite ces identifiants et produit une prédiction, qui peut être du texte.",explain:" La prédiction du modèle ne peut pas être du texte immédiatement. Le <i>tokenizer</i> doit être utilisé afin de reconvertir la prédiction en texte !"},{text:" Le <i>tokenizer</i> traite le texte et renvoie des identifiants. Le modèle traite ces identifiants et produit une prédiction. Le <i>tokenizer</i> peut alors être utilisé à nouveau pour reconvertir ces prédictions en texte.",explain:" Le <i>tokenizer</i> peut être utilisé à la fois pour la tokenisation et la dé-tokénisation.",correct:!0}]}}),J=new x({props:{title:"2. Combien de dimensions le tenseur produit par le <i> transformer </i> de base possède-t-il et quelles sont-elles ?",local:"2-combien-de-dimensions-le-tenseur-produit-par-le-i-transformer-i-de-base-possède-t-il-et-quelles-sont-elles-",headingTag:"h3"}}),Z=new k({props:{choices:[{text:"2: la longueur de la séquence et la taille du batch",explain:"Le tenseur produit par le modèle possède une troisième dimension : la taille cachée."},{text:"2: la longueur de la séquence et la taille cachée",explain:"Tous les <i>transformers</i>  gèrent les batchs, même avec une seule séquence ce serait une taille de batch de 1 !"},{text:"3: la longueur de la séquence, la taille du batch et la taille cachée.",explain:"",correct:!0}]}}),C=new x({props:{title:"3. Lequel des éléments suivants est un exemple de tokenisation en sous-mots ?",local:"3-lequel-des-éléments-suivants-est-un-exemple-de-tokenisation-en-sous-mots-",headingTag:"h3"}}),L=new k({props:{choices:[{text:"WordPiece",explain:"Oui, c'est un exemple de tokenisation en sous-mots !",correct:!0},{text:"La tokenization basée sur les caractères",explain:"La tokenization basée sur les caractères n’est pas un type de tokenisation en sous-mots."},{text:"Découpage sur les espaces et la ponctuation",explain:"C’est une tokenisation basée sur les mots !"},{text:"BPE",explain:"Oui, c'est un exemple de tokenisation en sous-mots !",correct:!0},{text:"Unigram",explain:"Oui, c'est un exemple de tokenisation en sous-mots !",correct:!0},{text:"Aucune des propositions ci-dessus",explain:""}]}}),Q=new x({props:{title:"4. Qu’est-ce qu’une tête de modèle ?",local:"4-quest-ce-quune-tête-de-modèle-",headingTag:"h3"}}),W=new k({props:{choices:[{text:" Un composant du <i>transformer</i>  de base qui redirige les tenseurs vers leurs couches correctes.",explain:"Il n'y a pas de tel composant."},{text:"Également connu sous le nom de mécanisme d'auto-attention, il adapte la représentation d'un <i>token</i>  en fonction des autres <i>tokens</i>  de la séquence.",explain:"La couche d'auto-attention contient des têtes d'attention mais ce ne sont pas des têtes d'adaptation."},{text:"Un composant supplémentaire, généralement constitué d'une ou plusieurs couches, pour convertir les prédictions du <i>transformer</i>  en une sortie spécifique à la tâche.",explain:"Les têtes d'adaptation, aussi appelées simplement têtes, se présentent sous différentes formes : têtes de modélisation du langage, têtes de réponse aux questions, têtes de classification des séquences, etc.",correct:!0}]}});const ye=[Re,He],S=[];function we(e,n){return e[0]==="pt"?0:1}M=we(v),y=S[M]=ye[M](v),A=new x({props:{title:"6. Quelles sont les techniques à connaître lors de la mise en batch de séquences de longueurs différentes ?",local:"6-quelles-sont-les-techniques-à-connaître-lors-de-la-mise-en-batch-de-séquences-de-longueurs-différentes-",headingTag:"h3"}}),I=new k({props:{choices:[{text:"La troncature",explain:" La troncature est une façon correcte d'égaliser les séquences pour qu'elles s'inscrivent dans une forme rectangulaire. Mais est-ce la seule ?",correct:!0},{text:"Retourner les tenseurs",explain:"Alors que les autres techniques vous permettent de renvoyer des tenseurs rectangulaires, retourner les tenseurs n'est pas utile lorsque vous mettez en batch des séquences."},{text:"Le <i>padding</i>",explain:"Le <i>padding</i> est une façon correcte d'égaliser les séquences pour qu'elles tiennent dans une forme rectangulaire. Mais est-ce le seul moyen ?",correct:!0},{text:"Les masques d'attention ",explain:"Les masques d'attention sont d'une importance capitale lorsqu'on manipule des séquences de longueurs différentes. Ce n'est cependant pas la seule technique à laquelle il faut faire attention.",correct:!0}]}}),V=new x({props:{title:"7. Quel est l’intérêt d’appliquer une fonction SoftMax aux logits produits par un modèle de classification de séquences ?",local:"7-quel-est-lintérêt-dappliquer-une-fonction-softmax-aux-logits-produits-par-un-modèle-de-classification-de-séquences-",headingTag:"h3"}}),B=new k({props:{choices:[{text:"Elle adoucit les logits pour qu'ils soient plus fiables.",explain:"La fonction SoftMax n'affecte pas la fiabilité des résultats."},{text:"Elle applique une limite inférieure et supérieure pour qu'ils soient compréhensibles.",explain:"Les valeurs résultantes sont comprises entre 0 et 1. Ce n'est cependant pas la seule raison pour laquelle nous utilisons une fonction SoftMax.",correct:!0},{text:"La somme totale des sorties est alors égale à 1, ce qui permet une interprétation probabiliste.",explain:"Mais ce n'est pas la seule raison pour laquelle nous utilisons une fonction SoftMax.",correct:!0}]}}),E=new x({props:{title:"8. Autour de quelle méthode s’articule la majeure partie de l’API <i> tokenizer </i> ?",local:"8-autour-de-quelle-méthode-sarticule-la-majeure-partie-de-lapi-i-tokenizer-i-",headingTag:"h3"}}),X=new k({props:{choices:[{text:"<code>encode</code>, car elle peut encoder du texte en identifiants et des identifiants en prédictions.",explain:"Bien que la méthode <code>encode</code> existe sur les <i>tokenizer</i>, elle n'existe pas sur les modèles."},{text:"Appeler directement l'objet tokenizer",explain:"La méthode <code>__call__</code> du <i>tokenizer</i> est une méthode très puissante qui peut traiter à peu près tout. C'est également la méthode utilisée pour récupérer les prédictions d'un modèle.",correct:!0},{text:"<code>pad</code>",explain:"Le <i>padding</i> est très utile mais ce n'est qu'une partie de l'API <i>tokenizer</i>."},{text:"<code>tokenize</code>",explain:"La méthode <code>tokenize</code> est est sans doute l'une des méthodes les plus utiles, mais elle ne constitue pas le cœur de l'API <i>tokenizer</i>."}]}}),H=new x({props:{title:"9. Que contient la variable result dans cet exemple de code ?",local:"9-que-contient-la-variable-result-dans-cet-exemple-de-code-",headingTag:"h3"}}),R=new Me({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyLnRva2VuaXplKCUyMkhlbGxvISUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
result = tokenizer.tokenize(<span class="hljs-string">&quot;Hello!&quot;</span>)`,wrap:!1}}),F=new k({props:{choices:[{text:"Une liste de chaînes de caractères, chaque chaîne étant un <i>token</i>.",explain:"Convertissez cela en identifiants, et donnez-les à un modèle !",correct:!0},{text:"Une liste d'identifiants",explain:"C'est à cela que la méthode <code>__call__</code> ou la méthode <code>convert_tokens_to_ids</code> sert !"},{text:"Une chaîne contenant tous les <i>tokens</i>",explain:"Ce serait sous-optimal car le but est de diviser la chaîne de caractères en plusieurs éléments."}]}});const _e=[Ge,Fe],N=[];function ze(e,n){return e[0]==="pt"?0:1}return w=ze(v),_=N[w]=_e[w](v),G=new Be({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter2/8.mdx"}}),{c(){i=ke("meta"),g=p(),l=ke("p"),q=p(),c(t.$$.fragment),b=p(),c(s.$$.fragment),h=p(),c(z.$$.fragment),O=p(),c(U.$$.fragment),D=p(),c(T.$$.fragment),ee=p(),c(j.$$.fragment),te=p(),c(J.$$.fragment),ne=p(),c(Z.$$.fragment),se=p(),c(C.$$.fragment),ie=p(),c(L.$$.fragment),le=p(),c(Q.$$.fragment),re=p(),c(W.$$.fragment),ae=p(),y.c(),P=p(),c(A.$$.fragment),oe=p(),c(I.$$.fragment),ue=p(),c(V.$$.fragment),pe=p(),c(B.$$.fragment),de=p(),c(E.$$.fragment),ce=p(),c(X.$$.fragment),me=p(),c(H.$$.fragment),fe=p(),c(R.$$.fragment),$e=p(),c(F.$$.fragment),ge=p(),_.c(),Y=p(),c(G.$$.fragment),qe=p(),K=ke("p"),this.h()},l(e){const n=Ae("svelte-u9bgzb",document.head);i=ve(n,"META",{name:!0,content:!0}),n.forEach(r),g=d(e),l=ve(e,"P",{}),Te(l).forEach(r),q=d(e),m(t.$$.fragment,e),b=d(e),m(s.$$.fragment,e),h=d(e),m(z.$$.fragment,e),O=d(e),m(U.$$.fragment,e),D=d(e),m(T.$$.fragment,e),ee=d(e),m(j.$$.fragment,e),te=d(e),m(J.$$.fragment,e),ne=d(e),m(Z.$$.fragment,e),se=d(e),m(C.$$.fragment,e),ie=d(e),m(L.$$.fragment,e),le=d(e),m(Q.$$.fragment,e),re=d(e),m(W.$$.fragment,e),ae=d(e),y.l(e),P=d(e),m(A.$$.fragment,e),oe=d(e),m(I.$$.fragment,e),ue=d(e),m(V.$$.fragment,e),pe=d(e),m(B.$$.fragment,e),de=d(e),m(E.$$.fragment,e),ce=d(e),m(X.$$.fragment,e),me=d(e),m(H.$$.fragment,e),fe=d(e),m(R.$$.fragment,e),$e=d(e),m(F.$$.fragment,e),ge=d(e),_.l(e),Y=d(e),m(G.$$.fragment,e),qe=d(e),K=ve(e,"P",{}),Te(K).forEach(r),this.h()},h(){je(i,"name","hf:doc:metadata"),je(i,"content",Ne)},m(e,n){Ie(document.head,i),u(e,g,n),u(e,l,n),u(e,q,n),f(t,e,n),u(e,b,n),f(s,e,n),u(e,h,n),f(z,e,n),u(e,O,n),f(U,e,n),u(e,D,n),f(T,e,n),u(e,ee,n),f(j,e,n),u(e,te,n),f(J,e,n),u(e,ne,n),f(Z,e,n),u(e,se,n),f(C,e,n),u(e,ie,n),f(L,e,n),u(e,le,n),f(Q,e,n),u(e,re,n),f(W,e,n),u(e,ae,n),S[M].m(e,n),u(e,P,n),f(A,e,n),u(e,oe,n),f(I,e,n),u(e,ue,n),f(V,e,n),u(e,pe,n),f(B,e,n),u(e,de,n),f(E,e,n),u(e,ce,n),f(X,e,n),u(e,me,n),f(H,e,n),u(e,fe,n),f(R,e,n),u(e,$e,n),f(F,e,n),u(e,ge,n),N[w].m(e,n),u(e,Y,n),f(G,e,n),u(e,qe,n),u(e,K,n),be=!0},p(e,[n]){const Ue={};n&1&&(Ue.fw=e[0]),t.$set(Ue);let he=M;M=we(e),M!==he&&(Ze(),a(S[he],1,1,()=>{S[he]=null}),Je(),y=S[M],y||(y=S[M]=ye[M](e),y.c()),o(y,1),y.m(P.parentNode,P));let xe=w;w=ze(e),w!==xe&&(Ze(),a(N[xe],1,1,()=>{N[xe]=null}),Je(),_=N[w],_||(_=N[w]=_e[w](e),_.c()),o(_,1),_.m(Y.parentNode,Y))},i(e){be||(o(t.$$.fragment,e),o(s.$$.fragment,e),o(z.$$.fragment,e),o(U.$$.fragment,e),o(T.$$.fragment,e),o(j.$$.fragment,e),o(J.$$.fragment,e),o(Z.$$.fragment,e),o(C.$$.fragment,e),o(L.$$.fragment,e),o(Q.$$.fragment,e),o(W.$$.fragment,e),o(y),o(A.$$.fragment,e),o(I.$$.fragment,e),o(V.$$.fragment,e),o(B.$$.fragment,e),o(E.$$.fragment,e),o(X.$$.fragment,e),o(H.$$.fragment,e),o(R.$$.fragment,e),o(F.$$.fragment,e),o(_),o(G.$$.fragment,e),be=!0)},o(e){a(t.$$.fragment,e),a(s.$$.fragment,e),a(z.$$.fragment,e),a(U.$$.fragment,e),a(T.$$.fragment,e),a(j.$$.fragment,e),a(J.$$.fragment,e),a(Z.$$.fragment,e),a(C.$$.fragment,e),a(L.$$.fragment,e),a(Q.$$.fragment,e),a(W.$$.fragment,e),a(y),a(A.$$.fragment,e),a(I.$$.fragment,e),a(V.$$.fragment,e),a(B.$$.fragment,e),a(E.$$.fragment,e),a(X.$$.fragment,e),a(H.$$.fragment,e),a(R.$$.fragment,e),a(F.$$.fragment,e),a(_),a(G.$$.fragment,e),be=!1},d(e){e&&(r(g),r(l),r(q),r(b),r(h),r(O),r(D),r(ee),r(te),r(ne),r(se),r(ie),r(le),r(re),r(ae),r(P),r(oe),r(ue),r(pe),r(de),r(ce),r(me),r(fe),r($e),r(ge),r(Y),r(qe),r(K)),r(i),$(t,e),$(s,e),$(z,e),$(U,e),$(T,e),$(j,e),$(J,e),$(Z,e),$(C,e),$(L,e),$(Q,e),$(W,e),S[M].d(e),$(A,e),$(I,e),$(V,e),$(B,e),$(E,e),$(X,e),$(H,e),$(R,e),$(F,e),N[w].d(e),$(G,e)}}}const Ne='{"title":"Quiz de fin de chapitre","local":"quiz-de-fin-de-chapitre","sections":[{"title":"1. Quel est l’ordre du pipeline de modélisation du langage ?","local":"1-quel-est-lordre-du-pipeline-de-modélisation-du-langage-","sections":[],"depth":3},{"title":"2. Combien de dimensions le tenseur produit par le <i> transformer </i> de base possède-t-il et quelles sont-elles ?","local":"2-combien-de-dimensions-le-tenseur-produit-par-le-i-transformer-i-de-base-possède-t-il-et-quelles-sont-elles-","sections":[],"depth":3},{"title":"3. Lequel des éléments suivants est un exemple de tokenisation en sous-mots ?","local":"3-lequel-des-éléments-suivants-est-un-exemple-de-tokenisation-en-sous-mots-","sections":[],"depth":3},{"title":"4. Qu’est-ce qu’une tête de modèle ?","local":"4-quest-ce-quune-tête-de-modèle-","sections":[],"depth":3},{"title":"5. Qu’est-ce qu’un AutoModel?","local":"5-quest-ce-quun-automodel","sections":[],"depth":3},{"title":"5. What is an AutoModel?","local":"5-what-is-an-automodel","sections":[],"depth":3},{"title":"6. Quelles sont les techniques à connaître lors de la mise en batch de séquences de longueurs différentes ?","local":"6-quelles-sont-les-techniques-à-connaître-lors-de-la-mise-en-batch-de-séquences-de-longueurs-différentes-","sections":[],"depth":3},{"title":"7. Quel est l’intérêt d’appliquer une fonction SoftMax aux logits produits par un modèle de classification de séquences ?","local":"7-quel-est-lintérêt-dappliquer-une-fonction-softmax-aux-logits-produits-par-un-modèle-de-classification-de-séquences-","sections":[],"depth":3},{"title":"8. Autour de quelle méthode s’articule la majeure partie de l’API <i> tokenizer </i> ?","local":"8-autour-de-quelle-méthode-sarticule-la-majeure-partie-de-lapi-i-tokenizer-i-","sections":[],"depth":3},{"title":"9. Que contient la variable result dans cet exemple de code ?","local":"9-que-contient-la-variable-result-dans-cet-exemple-de-code-","sections":[],"depth":3},{"title":"10. Y a-t-il un problème avec le code suivant ?","local":"10-y-a-t-il-un-problème-avec-le-code-suivant-","sections":[],"depth":3},{"title":"10. Y a-t-il un problème avec le code suivant ?","local":"10-y-a-t-il-un-problème-avec-le-code-suivant-","sections":[],"depth":3}],"depth":1}';function Pe(v,i,g){let l="pt";return Le(()=>{const q=new URLSearchParams(window.location.search);g(0,l=q.get("fw")||"pt")}),[l]}class st extends Qe{constructor(i){super(),We(this,i,Pe,Se,Ce,{})}}export{st as component};
