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