import{s as Je,o as Ze}from"../chunks/scheduler.37c15a92.js";import{S as Ce,i as Le,g as he,s as p,r as d,A as Qe,h as xe,f as l,c,j as ze,u as m,k as Ue,y as Ae,a as u,v as f,t as a,b as je,d as o,w as $,p as Te}from"../chunks/index.2bf4358c.js";import{C as ke}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as We}from"../chunks/CourseFloatingBanner.15ba07e6.js";import{Q as k}from"../chunks/Question.668688bc.js";import{F as Ie}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as x,E as Ve}from"../chunks/EditOnGithub.8916dc7c.js";function Be(v){let i,g,r,q;return i=new x({props:{title:"5. What is an AutoModel?",local:"5-what-is-an-automodel",headingTag:"h3"}}),r=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(){d(i.$$.fragment),g=p(),d(r.$$.fragment)},l(t){m(i.$$.fragment,t),g=c(t),m(r.$$.fragment,t)},m(t,b){f(i,t,b),u(t,g,b),f(r,t,b),q=!0},i(t){q||(o(i.$$.fragment,t),o(r.$$.fragment,t),q=!0)},o(t){a(i.$$.fragment,t),a(r.$$.fragment,t),q=!1},d(t){t&&l(g),$(i,t),$(r,t)}}}function Ee(v){let i,g,r,q;return i=new x({props:{title:"5. Qu’est-ce qu’un AutoModel?",local:"5-quest-ce-quun-automodel",headingTag:"h3"}}),r=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(){d(i.$$.fragment),g=p(),d(r.$$.fragment)},l(t){m(i.$$.fragment,t),g=c(t),m(r.$$.fragment,t)},m(t,b){f(i,t,b),u(t,g,b),f(r,t,b),q=!0},i(t){q||(o(i.$$.fragment,t),o(r.$$.fragment,t),q=!0)},o(t){a(i.$$.fragment,t),a(r.$$.fragment,t),q=!1},d(t){t&&l(g),$(i,t),$(r,t)}}}function Xe(v){let i,g,r,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"}}),r=new ke({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(){d(i.$$.fragment),g=p(),d(r.$$.fragment),q=p(),d(t.$$.fragment)},l(n){m(i.$$.fragment,n),g=c(n),m(r.$$.fragment,n),q=c(n),m(t.$$.fragment,n)},m(n,h){f(i,n,h),u(n,g,h),f(r,n,h),u(n,q,h),f(t,n,h),b=!0},i(n){b||(o(i.$$.fragment,n),o(r.$$.fragment,n),o(t.$$.fragment,n),b=!0)},o(n){a(i.$$.fragment,n),a(r.$$.fragment,n),a(t.$$.fragment,n),b=!1},d(n){n&&(l(g),l(q)),$(i,n),$(r,n),$(t,n)}}}function He(v){let i,g,r,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"}}),r=new ke({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(){d(i.$$.fragment),g=p(),d(r.$$.fragment),q=p(),d(t.$$.fragment)},l(n){m(i.$$.fragment,n),g=c(n),m(r.$$.fragment,n),q=c(n),m(t.$$.fragment,n)},m(n,h){f(i,n,h),u(n,g,h),f(r,n,h),u(n,q,h),f(t,n,h),b=!0},i(n){b||(o(i.$$.fragment,n),o(r.$$.fragment,n),o(t.$$.fragment,n),b=!0)},o(n){a(i.$$.fragment,n),a(r.$$.fragment,n),a(t.$$.fragment,n),b=!1},d(n){n&&(l(g),l(q)),$(i,n),$(r,n),$(t,n)}}}function Re(v){let i,g,r,q,t,b,n,h,z,K,U,O,j,D,T,ee,J,te,Z,ne,C,se,L,ie,Q,re,M,y,N,A,le,W,ae,I,oe,V,ue,B,pe,E,ce,X,de,H,me,R,fe,w,_,P,F,$e,Y,ge;t=new Ie({props:{fw:v[0]}}),n=new x({props:{title:"Quiz de fin de chapitre",local:"quiz-de-fin-de-chapitre",headingTag:"h1"}}),z=new We({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),U=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}]}}),T=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"}}),J=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}]}}),Z=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"}}),C=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:""}]}}),L=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"}}),Q=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 ve=[Ee,Be],G=[];function Me(e,s){return e[0]==="pt"?0:1}M=Me(v),y=G[M]=ve[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"}}),W=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}]}}),I=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"}}),V=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}]}}),B=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"}}),E=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>."}]}}),X=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"}}),H=new ke({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}}),R=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 ye=[He,Xe],S=[];function we(e,s){return e[0]==="pt"?0:1}return w=we(v),_=S[w]=ye[w](v),F=new Ve({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter2/8.mdx"}}),{c(){i=he("meta"),g=p(),r=he("p"),q=p(),d(t.$$.fragment),b=p(),d(n.$$.fragment),h=p(),d(z.$$.fragment),K=p(),d(U.$$.fragment),O=p(),d(j.$$.fragment),D=p(),d(T.$$.fragment),ee=p(),d(J.$$.fragment),te=p(),d(Z.$$.fragment),ne=p(),d(C.$$.fragment),se=p(),d(L.$$.fragment),ie=p(),d(Q.$$.fragment),re=p(),y.c(),N=p(),d(A.$$.fragment),le=p(),d(W.$$.fragment),ae=p(),d(I.$$.fragment),oe=p(),d(V.$$.fragment),ue=p(),d(B.$$.fragment),pe=p(),d(E.$$.fragment),ce=p(),d(X.$$.fragment),de=p(),d(H.$$.fragment),me=p(),d(R.$$.fragment),fe=p(),_.c(),P=p(),d(F.$$.fragment),$e=p(),Y=he("p"),this.h()},l(e){const s=Qe("svelte-u9bgzb",document.head);i=xe(s,"META",{name:!0,content:!0}),s.forEach(l),g=c(e),r=xe(e,"P",{}),ze(r).forEach(l),q=c(e),m(t.$$.fragment,e),b=c(e),m(n.$$.fragment,e),h=c(e),m(z.$$.fragment,e),K=c(e),m(U.$$.fragment,e),O=c(e),m(j.$$.fragment,e),D=c(e),m(T.$$.fragment,e),ee=c(e),m(J.$$.fragment,e),te=c(e),m(Z.$$.fragment,e),ne=c(e),m(C.$$.fragment,e),se=c(e),m(L.$$.fragment,e),ie=c(e),m(Q.$$.fragment,e),re=c(e),y.l(e),N=c(e),m(A.$$.fragment,e),le=c(e),m(W.$$.fragment,e),ae=c(e),m(I.$$.fragment,e),oe=c(e),m(V.$$.fragment,e),ue=c(e),m(B.$$.fragment,e),pe=c(e),m(E.$$.fragment,e),ce=c(e),m(X.$$.fragment,e),de=c(e),m(H.$$.fragment,e),me=c(e),m(R.$$.fragment,e),fe=c(e),_.l(e),P=c(e),m(F.$$.fragment,e),$e=c(e),Y=xe(e,"P",{}),ze(Y).forEach(l),this.h()},h(){Ue(i,"name","hf:doc:metadata"),Ue(i,"content",Fe)},m(e,s){Ae(document.head,i),u(e,g,s),u(e,r,s),u(e,q,s),f(t,e,s),u(e,b,s),f(n,e,s),u(e,h,s),f(z,e,s),u(e,K,s),f(U,e,s),u(e,O,s),f(j,e,s),u(e,D,s),f(T,e,s),u(e,ee,s),f(J,e,s),u(e,te,s),f(Z,e,s),u(e,ne,s),f(C,e,s),u(e,se,s),f(L,e,s),u(e,ie,s),f(Q,e,s),u(e,re,s),G[M].m(e,s),u(e,N,s),f(A,e,s),u(e,le,s),f(W,e,s),u(e,ae,s),f(I,e,s),u(e,oe,s),f(V,e,s),u(e,ue,s),f(B,e,s),u(e,pe,s),f(E,e,s),u(e,ce,s),f(X,e,s),u(e,de,s),f(H,e,s),u(e,me,s),f(R,e,s),u(e,fe,s),S[w].m(e,s),u(e,P,s),f(F,e,s),u(e,$e,s),u(e,Y,s),ge=!0},p(e,[s]){const _e={};s&1&&(_e.fw=e[0]),t.$set(_e);let qe=M;M=Me(e),M!==qe&&(Te(),a(G[qe],1,1,()=>{G[qe]=null}),je(),y=G[M],y||(y=G[M]=ve[M](e),y.c()),o(y,1),y.m(N.parentNode,N));let be=w;w=we(e),w!==be&&(Te(),a(S[be],1,1,()=>{S[be]=null}),je(),_=S[w],_||(_=S[w]=ye[w](e),_.c()),o(_,1),_.m(P.parentNode,P))},i(e){ge||(o(t.$$.fragment,e),o(n.$$.fragment,e),o(z.$$.fragment,e),o(U.$$.fragment,e),o(j.$$.fragment,e),o(T.$$.fragment,e),o(J.$$.fragment,e),o(Z.$$.fragment,e),o(C.$$.fragment,e),o(L.$$.fragment,e),o(Q.$$.fragment,e),o(y),o(A.$$.fragment,e),o(W.$$.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(_),o(F.$$.fragment,e),ge=!0)},o(e){a(t.$$.fragment,e),a(n.$$.fragment,e),a(z.$$.fragment,e),a(U.$$.fragment,e),a(j.$$.fragment,e),a(T.$$.fragment,e),a(J.$$.fragment,e),a(Z.$$.fragment,e),a(C.$$.fragment,e),a(L.$$.fragment,e),a(Q.$$.fragment,e),a(y),a(A.$$.fragment,e),a(W.$$.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(_),a(F.$$.fragment,e),ge=!1},d(e){e&&(l(g),l(r),l(q),l(b),l(h),l(K),l(O),l(D),l(ee),l(te),l(ne),l(se),l(ie),l(re),l(N),l(le),l(ae),l(oe),l(ue),l(pe),l(ce),l(de),l(me),l(fe),l(P),l($e),l(Y)),l(i),$(t,e),$(n,e),$(z,e),$(U,e),$(j,e),$(T,e),$(J,e),$(Z,e),$(C,e),$(L,e),$(Q,e),G[M].d(e),$(A,e),$(W,e),$(I,e),$(V,e),$(B,e),$(E,e),$(X,e),$(H,e),$(R,e),S[w].d(e),$(F,e)}}}const Fe='{"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 Ge(v,i,g){let r="pt";return Ze(()=>{const q=new URLSearchParams(window.location.search);g(0,r=q.get("fw")||"pt")}),[r]}class et extends Ce{constructor(i){super(),Le(this,i,Ge,Re,Je,{})}}export{et as component};
