Buckets:
| import{s as Ni,f as Xi,o as Ei,n as Da}from"../chunks/scheduler.37c15a92.js";import{S as Fi,i as zi,g as d,s as n,r as J,m as Xt,H as $i,A as Yi,h as c,f as l,c as a,j as At,u as U,x as y,n as _t,E as Hi,k as N,y as Pe,a as t,v as T,t as u,b as _e,d as p,w as j,p as Re}from"../chunks/index.2bf4358c.js";import{T as Sa}from"../chunks/Tip.363c041f.js";import{Y as La}from"../chunks/Youtube.1e50a667.js";import{C as I}from"../chunks/CodeBlock.4e987730.js";import{C as Ri}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as qi}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as le,E as Si}from"../chunks/getInferenceSnippets.24b50994.js";function Li(v){let M,w;return M=new Ri({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter7/section7_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter7/section7_tf.ipynb"}]}}),{c(){J(M.$$.fragment)},l(i){U(M.$$.fragment,i)},m(i,m){T(M,i,m),w=!0},i(i){w||(p(M.$$.fragment,i),w=!0)},o(i){u(M.$$.fragment,i),w=!1},d(i){j(M,i)}}}function Di(v){let M,w;return M=new Ri({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter7/section7_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter7/section7_pt.ipynb"}]}}),{c(){J(M.$$.fragment)},l(i){U(M.$$.fragment,i)},m(i,m){T(M,i,m),w=!0},i(i){w||(p(M.$$.fragment,i),w=!0)},o(i){u(M.$$.fragment,i),w=!1},d(i){j(M,i)}}}function Pi(v){let M,w='💡 Les modèles basé que sur l’encodeur comme BERT ont tendance à être excellents pour extraire les réponses à des questions factuelles comme « Qui a inventé l’architecture Transformer ? » mais ne sont pas très performants lorsqu’on leur pose des questions ouvertes comme « Pourquoi le ciel est-il bleu ? ». Dans ces cas plus difficiles, les modèles encodeurs-décodeurs comme le T5 et BART sont généralement utilisés pour synthétiser les informations d’une manière assez similaire au <a href="/course/fr/chapter7/5">résumé de texte</a>. Si vous êtes intéressé par ce type de réponse aux questions <em>génératives</em>, nous vous recommandons de consulter notre <a href="https://yjernite.github.io/lfqa.html" rel="nofollow">démo</a> basée sur le <a href="https://huggingface.co/datasets/eli5" rel="nofollow">jeu de données ELI5</a>.';return{c(){M=d("p"),M.innerHTML=w},l(i){M=c(i,"P",{"data-svelte-h":!0}),y(M)!=="svelte-vwtu1r"&&(M.innerHTML=w)},m(i,m){t(i,M,m)},p:Da,d(i){i&&l(M)}}}function Ki(v){let M,w="✏️ <strong>A votre tour !</strong> En utilisant l’architecture XLNet, le <em>padding</em> est appliqué à gauche et la question et le contexte sont intervertis. Adaptez tout le code que nous venons de voir à l’architecture XLNet (et ajoutez <code>padding=True</code>). Soyez conscient que le token <code>[CLS]</code> peut ne pas être à la position 0 avec le <em>padding</em> appliqué.";return{c(){M=d("p"),M.innerHTML=w},l(i){M=c(i,"P",{"data-svelte-h":!0}),y(M)!=="svelte-1tk1v9k"&&(M.innerHTML=w)},m(i,m){t(i,M,m)},p:Da,d(i){i&&l(M)}}}function Oi(v){let M,w,i,m="Le code d’entraînement de cet exemple ressemblera beaucoup au code des sections précédentes, mais le calcul de la métrique sera un défi unique. Puisque nous avons rembourré tous les échantillons à la longueur maximale que nous avons définie, il n’y a pas d’assembleur de données à définir. Ainsi le calcul de la métrique est vraiment la seule chose dont nous devons nous soucier. La partie la plus difficile sera de post-traiter les prédictions du modèle en étendues de texte dans les exemples originaux. Une fois que nous aurons fait cela, la métrique de la bibliothèque 🤗 <em>Datasets</em> fera le gros du travail pour nous.",h;return M=new le({props:{title:"<i> Finetuner </i> fin du modèle avec Keras",local:"i-finetuner-i-fin-du-modèle-avec-keras",headingTag:"h2"}}),{c(){J(M.$$.fragment),w=n(),i=d("p"),i.innerHTML=m},l(o){U(M.$$.fragment,o),w=a(o),i=c(o,"P",{"data-svelte-h":!0}),y(i)!=="svelte-cu2r9v"&&(i.innerHTML=m)},m(o,C){T(M,o,C),t(o,w,C),t(o,i,C),h=!0},i(o){h||(p(M.$$.fragment,o),h=!0)},o(o){u(M.$$.fragment,o),h=!1},d(o){o&&(l(w),l(i)),j(M,o)}}}function er(v){let M,w,i,m="Le code d’entraînement pour cet exemple ressemblera beaucoup au code des sections précédentes mais le calcul de la métrique avec la fonction <code>compute_metrics()</code> sera un défi unique. Puisque nous avons rembourré tous les échantillons à la longueur maximale que nous avons définie, il n’y a pas d’assembleur de données à définir. Ainsi le calcul de la métrique est vraiment la seule chose dont nous devons nous soucier. La partie la plus difficile sera de post-traiter les prédictions du modèle en étendues de texte dans les exemples originaux. Une fois que nous aurons fait cela, la métrique de la bibliothèque 🤗 <em>Datasets</em> fera le gros du travail pour nous.",h;return M=new le({props:{title:"<i> Finetuner </i> le modèle avec l’API Trainer",local:"i-finetuner-i-le-modèle-avec-lapi-trainer",headingTag:"h2"}}),{c(){J(M.$$.fragment),w=n(),i=d("p"),i.innerHTML=m},l(o){U(M.$$.fragment,o),w=a(o),i=c(o,"P",{"data-svelte-h":!0}),y(i)!=="svelte-mv5unh"&&(i.innerHTML=m)},m(o,C){T(M,o,C),t(o,w,C),t(o,i,C),h=!0},i(o){h||(p(M.$$.fragment,o),h=!0)},o(o){u(M.$$.fragment,o),h=!1},d(o){o&&(l(w),l(i)),j(M,o)}}}function lr(v){let M,w;return M=new La({props:{id:"VN67ZpN33Ss"}}),{c(){J(M.$$.fragment)},l(i){U(M.$$.fragment,i)},m(i,m){T(M,i,m),w=!0},i(i){w||(p(M.$$.fragment,i),w=!0)},o(i){u(M.$$.fragment,i),w=!1},d(i){j(M,i)}}}function sr(v){let M,w;return M=new La({props:{id:"BNy08iIWVJM"}}),{c(){J(M.$$.fragment)},l(i){U(M.$$.fragment,i)},m(i,m){T(M,i,m),w=!0},i(i){w||(p(M.$$.fragment,i),w=!0)},o(i){u(M.$$.fragment,i),w=!1},d(i){j(M,i)}}}function tr(v){let M,w,i,m="Pour faciliter l’expérimentation, nous allons convertir ces sorties en tableaux NumPy :",h,o,C;return M=new I({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwVEZBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZyUwQSUwQWV2YWxfc2V0X2Zvcl9tb2RlbCUyMCUzRCUyMGV2YWxfc2V0LnJlbW92ZV9jb2x1bW5zKCU1QiUyMmV4YW1wbGVfaWQlMjIlMkMlMjAlMjJvZmZzZXRfbWFwcGluZyUyMiU1RCklMEFldmFsX3NldF9mb3JfbW9kZWwuc2V0X2Zvcm1hdCglMjJudW1weSUyMiklMEElMEFiYXRjaCUyMCUzRCUyMCU3QmslM0ElMjBldmFsX3NldF9mb3JfbW9kZWwlNUJrJTVEJTIwZm9yJTIwayUyMGluJTIwZXZhbF9zZXRfZm9yX21vZGVsLmNvbHVtbl9uYW1lcyU3RCUwQXRyYWluZWRfbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclF1ZXN0aW9uQW5zd2VyaW5nLmZyb21fcHJldHJhaW5lZCh0cmFpbmVkX2NoZWNrcG9pbnQpJTBBJTBBb3V0cHV0cyUyMCUzRCUyMHRyYWluZWRfbW9kZWwoKipiYXRjaCk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForQuestionAnswering | |
| eval_set_for_model = eval_set.remove_columns([<span class="hljs-string">"example_id"</span>, <span class="hljs-string">"offset_mapping"</span>]) | |
| eval_set_for_model.set_format(<span class="hljs-string">"numpy"</span>) | |
| batch = {k: eval_set_for_model[k] <span class="hljs-keyword">for</span> k <span class="hljs-keyword">in</span> eval_set_for_model.column_names} | |
| trained_model = TFAutoModelForQuestionAnswering.from_pretrained(trained_checkpoint) | |
| outputs = trained_model(**batch)`,wrap:!1}}),o=new I({props:{code:"c3RhcnRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5zdGFydF9sb2dpdHMubnVtcHkoKSUwQWVuZF9sb2dpdHMlMjAlM0QlMjBvdXRwdXRzLmVuZF9sb2dpdHMubnVtcHkoKQ==",highlighted:`start_logits = outputs.start_logits.numpy() | |
| end_logits = outputs.end_logits.numpy()`,wrap:!1}}),{c(){J(M.$$.fragment),w=n(),i=d("p"),i.textContent=m,h=n(),J(o.$$.fragment)},l(b){U(M.$$.fragment,b),w=a(b),i=c(b,"P",{"data-svelte-h":!0}),y(i)!=="svelte-4j1u6w"&&(i.textContent=m),h=a(b),U(o.$$.fragment,b)},m(b,Z){T(M,b,Z),t(b,w,Z),t(b,i,Z),t(b,h,Z),T(o,b,Z),C=!0},i(b){C||(p(M.$$.fragment,b),p(o.$$.fragment,b),C=!0)},o(b){u(M.$$.fragment,b),u(o.$$.fragment,b),C=!1},d(b){b&&(l(w),l(i),l(h)),j(M,b),j(o,b)}}}function nr(v){let M,w,i,m="Puisque <code>Trainer</code> nous donne les prédictions sous forme de tableaux NumPy, nous récupérons les logits de début et de fin et les convertissons dans ce format :",h,o,C;return M=new I({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsRm9yUXVlc3Rpb25BbnN3ZXJpbmclMEElMEFldmFsX3NldF9mb3JfbW9kZWwlMjAlM0QlMjBldmFsX3NldC5yZW1vdmVfY29sdW1ucyglNUIlMjJleGFtcGxlX2lkJTIyJTJDJTIwJTIyb2Zmc2V0X21hcHBpbmclMjIlNUQpJTBBZXZhbF9zZXRfZm9yX21vZGVsLnNldF9mb3JtYXQoJTIydG9yY2glMjIpJTBBJTBBZGV2aWNlJTIwJTNEJTIwdG9yY2guZGV2aWNlKCUyMmN1ZGElMjIpJTIwaWYlMjB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpJTIwZWxzZSUyMHRvcmNoLmRldmljZSglMjJjcHUlMjIpJTBBYmF0Y2glMjAlM0QlMjAlN0JrJTNBJTIwZXZhbF9zZXRfZm9yX21vZGVsJTVCayU1RC50byhkZXZpY2UpJTIwZm9yJTIwayUyMGluJTIwZXZhbF9zZXRfZm9yX21vZGVsLmNvbHVtbl9uYW1lcyU3RCUwQXRyYWluZWRfbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQodHJhaW5lZF9jaGVja3BvaW50KS50byglMEElMjAlMjAlMjAlMjBkZXZpY2UlMEEpJTBBJTBBd2l0aCUyMHRvcmNoLm5vX2dyYWQoKSUzQSUwQSUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjB0cmFpbmVkX21vZGVsKCoqYmF0Y2gp",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForQuestionAnswering | |
| eval_set_for_model = eval_set.remove_columns([<span class="hljs-string">"example_id"</span>, <span class="hljs-string">"offset_mapping"</span>]) | |
| eval_set_for_model.set_format(<span class="hljs-string">"torch"</span>) | |
| device = torch.device(<span class="hljs-string">"cuda"</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">"cpu"</span>) | |
| batch = {k: eval_set_for_model[k].to(device) <span class="hljs-keyword">for</span> k <span class="hljs-keyword">in</span> eval_set_for_model.column_names} | |
| trained_model = AutoModelForQuestionAnswering.from_pretrained(trained_checkpoint).to( | |
| device | |
| ) | |
| <span class="hljs-keyword">with</span> torch.no_grad(): | |
| outputs = trained_model(**batch)`,wrap:!1}}),o=new I({props:{code:"c3RhcnRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5zdGFydF9sb2dpdHMuY3B1KCkubnVtcHkoKSUwQWVuZF9sb2dpdHMlMjAlM0QlMjBvdXRwdXRzLmVuZF9sb2dpdHMuY3B1KCkubnVtcHkoKQ==",highlighted:`start_logits = outputs.start_logits.cpu().numpy() | |
| end_logits = outputs.end_logits.cpu().numpy()`,wrap:!1}}),{c(){J(M.$$.fragment),w=n(),i=d("p"),i.innerHTML=m,h=n(),J(o.$$.fragment)},l(b){U(M.$$.fragment,b),w=a(b),i=c(b,"P",{"data-svelte-h":!0}),y(i)!=="svelte-f4k0jv"&&(i.innerHTML=m),h=a(b),U(o.$$.fragment,b)},m(b,Z){T(M,b,Z),t(b,w,Z),t(b,i,Z),t(b,h,Z),T(o,b,Z),C=!0},i(b){C||(p(M.$$.fragment,b),p(o.$$.fragment,b),C=!0)},o(b){u(M.$$.fragment,b),u(o.$$.fragment,b),C=!1},d(b){b&&(l(w),l(i),l(h)),j(M,b),j(o,b)}}}function ar(v){let M,w="Maintenant, mettons tout ce que nous venons de faire dans une fonction <code>compute_metrics()</code> que nous utiliserons après avoir entraîné notre modèle. Nous aurons besoin de passer un peu plus que juste les logits de sortie, car nous devons chercher dans le jeu de données des caractéristiques pour le décalage et dans le jeu de données des exemples pour les contextes originaux :";return{c(){M=d("p"),M.innerHTML=w},l(i){M=c(i,"P",{"data-svelte-h":!0}),y(M)!=="svelte-w3nql5"&&(M.innerHTML=w)},m(i,m){t(i,M,m)},d(i){i&&l(M)}}}function Mr(v){let M,w="Maintenant, mettons tout ce que nous venons de faire dans une fonction <code>compute_metrics()</code> que nous utiliserons dans le <code>Trainer</code>. Normalement, cette fonction <code>compute_metrics()</code> reçoit seulement un <em>tuple</em> <code>eval_preds</code> avec les logits et les étiquettes. Ici, nous aurons besoin d’un peu plus, car nous devons chercher dans le jeu de données des caractéristiques pour le décalage et dans le jeu de données des exemples pour les contextes originaux. Ainsi nous ne serons pas en mesure d’utiliser cette fonction pour obtenir des résultats d’évaluation standards pendant l’entraînement. Nous ne l’utiliserons qu’à la fin de l’entraînement pour vérifier les résultats.",i,m,h="La fonction <code>compute_metrics()</code> regroupe les mêmes étapes que précédemment. Nous ajoutons juste une petite vérification au cas où nous ne trouverions aucune réponse valide (dans ce cas nous prédisons une chaîne vide).";return{c(){M=d("p"),M.innerHTML=w,i=n(),m=d("p"),m.innerHTML=h},l(o){M=c(o,"P",{"data-svelte-h":!0}),y(M)!=="svelte-8doecz"&&(M.innerHTML=w),i=a(o),m=c(o,"P",{"data-svelte-h":!0}),y(m)!=="svelte-n8cql8"&&(m.innerHTML=h)},m(o,C){t(o,M,C),t(o,i,C),t(o,m,C)},d(o){o&&(l(M),l(i),l(m))}}}function ir(v){let M,w="Nous sommes maintenant prêts à entraîner notre modèle. Créons-le en utilisant la classe <code>TFAutoModelForQuestionAnswering</code> comme précédemment :",i,m,h;return m=new I({props:{code:"bW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclF1ZXN0aW9uQW5zd2VyaW5nLmZyb21fcHJldHJhaW5lZChtb2RlbF9jaGVja3BvaW50KQ==",highlighted:"model = TFAutoModelForQuestionAnswering.from_pretrained(model_checkpoint)",wrap:!1}}),{c(){M=d("p"),M.innerHTML=w,i=n(),J(m.$$.fragment)},l(o){M=c(o,"P",{"data-svelte-h":!0}),y(M)!=="svelte-1g7z19h"&&(M.innerHTML=w),i=a(o),U(m.$$.fragment,o)},m(o,C){t(o,M,C),t(o,i,C),T(m,o,C),h=!0},i(o){h||(p(m.$$.fragment,o),h=!0)},o(o){u(m.$$.fragment,o),h=!1},d(o){o&&(l(M),l(i)),j(m,o)}}}function rr(v){let M,w="Nous sommes maintenant prêts à entraîner notre modèle. Créons-le en utilisant la classe <code>AutoModelForQuestionAnswering</code> comme précédemment :",i,m,h;return m=new I({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:"model = AutoModelForQuestionAnswering.from_pretrained(model_checkpoint)",wrap:!1}}),{c(){M=d("p"),M.innerHTML=w,i=n(),J(m.$$.fragment)},l(o){M=c(o,"P",{"data-svelte-h":!0}),y(M)!=="svelte-bpwrvr"&&(M.innerHTML=w),i=a(o),U(m.$$.fragment,o)},m(o,C){t(o,M,C),t(o,i,C),T(m,o,C),h=!0},i(o){h||(p(m.$$.fragment,o),h=!0)},o(o){u(m.$$.fragment,o),h=!1},d(o){o&&(l(M),l(i)),j(m,o)}}}function or(v){let M,w="Maintenant que c’est fait, nous pouvons créer nos jeux de données TensorFlow. Nous pouvons utiliser le simple assembleur de données par défaut cette fois-ci :",i,m,h,o,C="Et maintenant nous créons les jeux de données comme d’habitude.",b,Z,W,x,X="Ensuite, nous configurons nos hyperparamètres d’entraînement et compilons notre modèle :",A,G,B,k,O="Enfin, nous sommes prêts à entraîner avec <code>model.fit()</code>. Nous utilisons un <code>PushToHubCallback</code> pour télécharger le modèle sur le <em>Hub</em> après chaque époque.",se;return m=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERlZmF1bHREYXRhQ29sbGF0b3IlMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGVmYXVsdERhdGFDb2xsYXRvcihyZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DefaultDataCollator | |
| data_collator = DefaultDataCollator(return_tensors=<span class="hljs-string">"tf"</span>)`,wrap:!1}}),Z=new I({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMG1vZGVsLnByZXBhcmVfdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0QxNiUyQyUwQSklMEF0Zl9ldmFsX2RhdGFzZXQlMjAlM0QlMjBtb2RlbC5wcmVwYXJlX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwdmFsaWRhdGlvbl9kYXRhc2V0JTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEMTYlMkMlMEEp",highlighted:`tf_train_dataset = model.prepare_tf_dataset( | |
| train_dataset, | |
| collate_fn=data_collator, | |
| shuffle=<span class="hljs-literal">True</span>, | |
| batch_size=<span class="hljs-number">16</span>, | |
| ) | |
| tf_eval_dataset = model.prepare_tf_dataset( | |
| validation_dataset, | |
| collate_fn=data_collator, | |
| shuffle=<span class="hljs-literal">False</span>, | |
| batch_size=<span class="hljs-number">16</span>, | |
| )`,wrap:!1}}),G=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFmcm9tJTIwdHJhbnNmb3JtZXJzLmtlcmFzX2NhbGxiYWNrcyUyMGltcG9ydCUyMFB1c2hUb0h1YkNhbGxiYWNrJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEElMjMlMjBMZSUyMG5vbWJyZSUyMGQnJUMzJUE5dGFwZXMlMjBkJ2VudHJhJUMzJUFFbmVtZW50JTIwZXN0JTIwbGUlMjBub21icmUlMjBkJyVDMyVBOWNoYW50aWxsb25zJTIwZGFucyUyMGxlJTIwamV1JTIwZGUlMjBkb25uJUMzJUE5ZXMlMkMlMjBkaXZpcyVDMyVBOSUyMHBhciUyMGxhJTIwdGFpbGxlJTIwZHUlMjBiYXRjaCUyQyUwQSUyMyUyMHB1aXMlMjBtdWx0aXBsaSVDMyVBOSUyMHBhciUyMGxlJTIwbm9tYnJlJTIwdG90YWwlMjBkJyVDMyVBOXBvcXVlcy4lMjBOb3RleiUyMHF1ZSUyMGxlJTIwamV1JTIwZGUlMjBkb25uJUMzJUE5ZXMlMjB0Zl90cmFpbl9kYXRhc2V0JTIwZXN0JTIwaWNpJTIwdW4lMjB0Zi5kYXRhLkRhdGFzZXQlMkMlMEElMjMlMjBldCUyMG5vbiUyMGxlJTIwamV1JTIwZGUlMjBkb25uJUMzJUE5ZXMlMjBvcmlnaW5hbCUyMGRvbmMlMjBzb24lMjBsZW4oKSUyMGVzdCUyMGQlQzMlQTlqJUMzJUEwJTIwbnVtX3NhbXBsZXMlMjAlMkYlMkYlMjBiYXRjaF9zaXplLiUwQW51bV90cmFpbl9lcG9jaHMlMjAlM0QlMjAzJTBBbnVtX3RyYWluX3N0ZXBzJTIwJTNEJTIwbGVuKHRmX3RyYWluX2RhdGFzZXQpJTIwKiUyMG51bV90cmFpbl9lcG9jaHMlMEFvcHRpbWl6ZXIlMkMlMjBzY2hlZHVsZSUyMCUzRCUyMGNyZWF0ZV9vcHRpbWl6ZXIoJTBBJTIwJTIwJTIwJTIwaW5pdF9sciUzRDJlLTUlMkMlMEElMjAlMjAlMjAlMjBudW1fd2FybXVwX3N0ZXBzJTNEMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbl9zdGVwcyUzRG51bV90cmFpbl9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9kZWNheV9yYXRlJTNEMC4wMSUyQyUwQSklMEFtb2RlbC5jb21waWxlKG9wdGltaXplciUzRG9wdGltaXplciklMEElMEElMjMlMjBFbnRyYSVDMyVBRW5lciUyMGVuJTIwbWl4ZWQtcHJlY2lzaW9uJTIwZmxvYXQxNiUwQXRmLmtlcmFzLm1peGVkX3ByZWNpc2lvbi5zZXRfZ2xvYmFsX3BvbGljeSglMjJtaXhlZF9mbG9hdDE2JTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> create_optimizer | |
| <span class="hljs-keyword">from</span> transformers.keras_callbacks <span class="hljs-keyword">import</span> PushToHubCallback | |
| <span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf | |
| <span class="hljs-comment"># Le nombre d'étapes d'entraînement est le nombre d'échantillons dans le jeu de données, divisé par la taille du batch,</span> | |
| <span class="hljs-comment"># puis multiplié par le nombre total d'époques. Notez que le jeu de données tf_train_dataset est ici un tf.data.Dataset,</span> | |
| <span class="hljs-comment"># et non le jeu de données original donc son len() est déjà num_samples // batch_size.</span> | |
| num_train_epochs = <span class="hljs-number">3</span> | |
| num_train_steps = <span class="hljs-built_in">len</span>(tf_train_dataset) * num_train_epochs | |
| optimizer, schedule = create_optimizer( | |
| init_lr=<span class="hljs-number">2e-5</span>, | |
| num_warmup_steps=<span class="hljs-number">0</span>, | |
| num_train_steps=num_train_steps, | |
| weight_decay_rate=<span class="hljs-number">0.01</span>, | |
| ) | |
| model.<span class="hljs-built_in">compile</span>(optimizer=optimizer) | |
| <span class="hljs-comment"># Entraîner en mixed-precision float16</span> | |
| tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">"mixed_float16"</span>)`,wrap:!1}}),{c(){M=d("p"),M.textContent=w,i=n(),J(m.$$.fragment),h=n(),o=d("p"),o.textContent=C,b=n(),J(Z.$$.fragment),W=n(),x=d("p"),x.textContent=X,A=n(),J(G.$$.fragment),B=n(),k=d("p"),k.innerHTML=O},l(V){M=c(V,"P",{"data-svelte-h":!0}),y(M)!=="svelte-1jr548q"&&(M.textContent=w),i=a(V),U(m.$$.fragment,V),h=a(V),o=c(V,"P",{"data-svelte-h":!0}),y(o)!=="svelte-4iirs0"&&(o.textContent=C),b=a(V),U(Z.$$.fragment,V),W=a(V),x=c(V,"P",{"data-svelte-h":!0}),y(x)!=="svelte-1rpgox2"&&(x.textContent=X),A=a(V),U(G.$$.fragment,V),B=a(V),k=c(V,"P",{"data-svelte-h":!0}),y(k)!=="svelte-rhgaeb"&&(k.innerHTML=O)},m(V,g){t(V,M,g),t(V,i,g),T(m,V,g),t(V,h,g),t(V,o,g),t(V,b,g),T(Z,V,g),t(V,W,g),t(V,x,g),t(V,A,g),T(G,V,g),t(V,B,g),t(V,k,g),se=!0},i(V){se||(p(m.$$.fragment,V),p(Z.$$.fragment,V),p(G.$$.fragment,V),se=!0)},o(V){u(m.$$.fragment,V),u(Z.$$.fragment,V),u(G.$$.fragment,V),se=!1},d(V){V&&(l(M),l(i),l(h),l(o),l(b),l(W),l(x),l(A),l(B),l(k)),j(m,V),j(Z,V),j(G,V)}}}function pr(v){let M,w='Une fois ceci fait, nous pouvons définir nos <code>TrainingArguments</code>. Comme nous l’avons dit lorsque nous avons défini notre fonction pour calculer la métrique, nous ne serons pas en mesure d’avoir une boucle d’évaluation standard à cause de la signature de la fonction <code>compute_metrics()</code>. Nous pourrions écrire notre propre sous-classe de <code>Trainer</code> pour faire cela (une approche que vous pouvez trouver dans le <a href="https://github.com/huggingface/transformers/blob/master/examples/pytorch/question-answering/trainer_qa.py" rel="nofollow">script d’exemple de réponse aux questions</a>), mais c’est un peu trop long pour cette section. A la place, nous n’évaluerons le modèle qu’à la fin de l’entraînement et nous vous montrerons comment faire une évaluation cela dans le paragraphe « Une boucle d’entraînement personnalisée » ci-dessous.',i,m,h="C’est là que l’API <code>Trainer</code> montre ses limites et que la bibliothèque 🤗 <em>Accelerate</em> brille : personnaliser la classe pour un cas d’utilisation spécifique peut être pénible, mais modifier une boucle d’entraînement est facile.",o,C,b="Jetons un coup d’œil à notre <code>TrainingArguments</code> :",Z,W,x,X,A="Nous avons déjà vu la plupart d’entre eux. Nous définissons quelques hyperparamètres (comme le taux d’apprentissage, le nombre d’époques d’entraînement, un taux de décroissance des poids) et nous indiquons que nous voulons sauvegarder le modèle à la fin de chaque époque, sauter l’évaluation, et télécharger nos résultats vers le <em>Hub</em>. Nous activons également l’entraînement en précision mixte avec <code>fp16=True</code>, car cela peut accélérer l’entraînement sur un GPU récent.",G;return W=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUwQSUyMCUyMCUyMCUyMCUyMmJlcnQtZmluZXR1bmVkLXNxdWFkJTIyJTJDJTBBJTIwJTIwJTIwJTIwZXZhbHVhdGlvbl9zdHJhdGVneSUzRCUyMm5vJTIyJTJDJTBBJTIwJTIwJTIwJTIwc2F2ZV9zdHJhdGVneSUzRCUyMmVwb2NoJTIyJTJDJTBBJTIwJTIwJTIwJTIwbGVhcm5pbmdfcmF0ZSUzRDJlLTUlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5fZXBvY2hzJTNEMyUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9kZWNheSUzRDAuMDElMkMlMEElMjAlMjAlMjAlMjBmcDE2JTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMHB1c2hfdG9faHViJTNEVHJ1ZSUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments | |
| args = TrainingArguments( | |
| <span class="hljs-string">"bert-finetuned-squad"</span>, | |
| evaluation_strategy=<span class="hljs-string">"no"</span>, | |
| save_strategy=<span class="hljs-string">"epoch"</span>, | |
| learning_rate=<span class="hljs-number">2e-5</span>, | |
| num_train_epochs=<span class="hljs-number">3</span>, | |
| weight_decay=<span class="hljs-number">0.01</span>, | |
| fp16=<span class="hljs-literal">True</span>, | |
| push_to_hub=<span class="hljs-literal">True</span>, | |
| )`,wrap:!1}}),{c(){M=d("p"),M.innerHTML=w,i=n(),m=d("p"),m.innerHTML=h,o=n(),C=d("p"),C.innerHTML=b,Z=n(),J(W.$$.fragment),x=n(),X=d("p"),X.innerHTML=A},l(B){M=c(B,"P",{"data-svelte-h":!0}),y(M)!=="svelte-1655xpo"&&(M.innerHTML=w),i=a(B),m=c(B,"P",{"data-svelte-h":!0}),y(m)!=="svelte-1jlto0j"&&(m.innerHTML=h),o=a(B),C=c(B,"P",{"data-svelte-h":!0}),y(C)!=="svelte-gs08k3"&&(C.innerHTML=b),Z=a(B),U(W.$$.fragment,B),x=a(B),X=c(B,"P",{"data-svelte-h":!0}),y(X)!=="svelte-6ehdo"&&(X.innerHTML=A)},m(B,k){t(B,M,k),t(B,i,k),t(B,m,k),t(B,o,k),t(B,C,k),t(B,Z,k),T(W,B,k),t(B,x,k),t(B,X,k),G=!0},i(B){G||(p(W.$$.fragment,B),G=!0)},o(B){u(W.$$.fragment,B),G=!1},d(B){B&&(l(M),l(i),l(m),l(o),l(C),l(Z),l(x),l(X)),j(W,B)}}}function ur(v){let M,w;return M=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5rZXJhc19jYWxsYmFja3MlMjBpbXBvcnQlMjBQdXNoVG9IdWJDYWxsYmFjayUwQSUwQWNhbGxiYWNrJTIwJTNEJTIwUHVzaFRvSHViQ2FsbGJhY2sob3V0cHV0X2RpciUzRCUyMmJlcnQtZmluZXR1bmVkLXNxdWFkJTIyJTJDJTIwdG9rZW5pemVyJTNEdG9rZW5pemVyKSUwQSUwQSUyMyUyME5vdXMlMjBhbGxvbnMlMjBmYWlyZSUyMGxhJTIwdmFsaWRhdGlvbiUyMGFwciVDMyVBOHMlMkMlMjBkb25jJTIwcGFzJTIwZGUlMjB2YWxpZGF0aW9uJTIwYXUlMjBtaWxpZXUlMjBkZSUyMGwnZW50cmElQzMlQUVuZW1lbnQuJTBBbW9kZWwuZml0KHRmX3RyYWluX2RhdGFzZXQlMkMlMjBjYWxsYmFja3MlM0QlNUJjYWxsYmFjayU1RCUyQyUyMGVwb2NocyUzRG51bV90cmFpbl9lcG9jaHMp",highlighted:`<span class="hljs-keyword">from</span> transformers.keras_callbacks <span class="hljs-keyword">import</span> PushToHubCallback | |
| callback = PushToHubCallback(output_dir=<span class="hljs-string">"bert-finetuned-squad"</span>, tokenizer=tokenizer) | |
| <span class="hljs-comment"># Nous allons faire la validation après, donc pas de validation au milieu de l'entraînement.</span> | |
| model.fit(tf_train_dataset, callbacks=[callback], epochs=num_train_epochs)`,wrap:!1}}),{c(){J(M.$$.fragment)},l(i){U(M.$$.fragment,i)},m(i,m){T(M,i,m),w=!0},i(i){w||(p(M.$$.fragment,i),w=!0)},o(i){u(M.$$.fragment,i),w=!1},d(i){j(M,i)}}}function dr(v){let M,w,i,m="Enfin, nous passons tout à la classe <code>Trainer</code> et lançons l’entraînement :",h,o,C;return M=new Sa({props:{$$slots:{default:[cr]},$$scope:{ctx:v}}}),o=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluZXIlMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUzRG1vZGVsJTJDJTBBJTIwJTIwJTIwJTIwYXJncyUzRGFyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdHJhaW5fZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfZGF0YXNldCUzRHZhbGlkYXRpb25fZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMHRva2VuaXplciUzRHRva2VuaXplciUyQyUwQSklMEF0cmFpbmVyLnRyYWluKCk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer | |
| trainer = Trainer( | |
| model=model, | |
| args=args, | |
| train_dataset=train_dataset, | |
| eval_dataset=validation_dataset, | |
| tokenizer=tokenizer, | |
| ) | |
| trainer.train()`,wrap:!1}}),{c(){J(M.$$.fragment),w=n(),i=d("p"),i.innerHTML=m,h=n(),J(o.$$.fragment)},l(b){U(M.$$.fragment,b),w=a(b),i=c(b,"P",{"data-svelte-h":!0}),y(i)!=="svelte-5m3ahz"&&(i.innerHTML=m),h=a(b),U(o.$$.fragment,b)},m(b,Z){T(M,b,Z),t(b,w,Z),t(b,i,Z),t(b,h,Z),T(o,b,Z),C=!0},i(b){C||(p(M.$$.fragment,b),p(o.$$.fragment,b),C=!0)},o(b){u(M.$$.fragment,b),u(o.$$.fragment,b),C=!1},d(b){b&&(l(w),l(i),l(h)),j(M,b),j(o,b)}}}function cr(v){let M,w="💡 Si le répertoire de sortie que vous utilisez existe, il doit être un clone local du dépôt vers lequel vous voulez pousser (donc définissez un nouveau nom si vous obtenez une erreur lors de la définition de votre <code>Trainer</code>).";return{c(){M=d("p"),M.innerHTML=w},l(i){M=c(i,"P",{"data-svelte-h":!0}),y(M)!=="svelte-ae2jhg"&&(M.innerHTML=w)},m(i,m){t(i,M,m)},p:Da,d(i){i&&l(M)}}}function yr(v){let M,w="Une fois l’entraînement terminé, nous pouvons enfin évaluer notre modèle (et prier pour ne pas avoir dépensé tout ce temps de calcul pour rien). La méthode <code>predict()</code> de notre <code>model</code> se chargera d’obtenir les prédictions, et puisque nous avons fait tout le travail difficile de définir une fonction <code>compute_metrics()</code> plus tôt, nous pouvons obtenir nos résultats en une seule ligne :",i,m,h;return m=new I({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjBtb2RlbC5wcmVkaWN0KHRmX2V2YWxfZGF0YXNldCklMEFjb21wdXRlX21ldHJpY3MoJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlNUIlMjJzdGFydF9sb2dpdHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBwcmVkaWN0aW9ucyU1QiUyMmVuZF9sb2dpdHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjB2YWxpZGF0aW9uX2RhdGFzZXQlMkMlMEElMjAlMjAlMjAlMjByYXdfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBKQ==",highlighted:`predictions = model.predict(tf_eval_dataset) | |
| compute_metrics( | |
| predictions[<span class="hljs-string">"start_logits"</span>], | |
| predictions[<span class="hljs-string">"end_logits"</span>], | |
| validation_dataset, | |
| raw_datasets[<span class="hljs-string">"validation"</span>], | |
| )`,wrap:!1}}),{c(){M=d("p"),M.innerHTML=w,i=n(),J(m.$$.fragment)},l(o){M=c(o,"P",{"data-svelte-h":!0}),y(M)!=="svelte-1npk78z"&&(M.innerHTML=w),i=a(o),U(m.$$.fragment,o)},m(o,C){t(o,M,C),t(o,i,C),T(m,o,C),h=!0},i(o){h||(p(m.$$.fragment,o),h=!0)},o(o){u(m.$$.fragment,o),h=!1},d(o){o&&(l(M),l(i)),j(m,o)}}}function mr(v){let M,w="Une fois l’entraînement terminé, nous pouvons enfin évaluer notre modèle (et prier pour ne pas avoir dépensé tout ce temps de calcul pour rien). La méthode <code>predict()</code> du <code>Trainer</code> retournera un <em>tuple</em> où les premiers éléments seront les prédictions du modèle (ici une paire avec les logits de début et de fin). Nous envoyons ceci à notre fonction <code>compute_metrics()</code> :",i,m,h;return m=new I({props:{code:"cHJlZGljdGlvbnMlMkMlMjBfJTIwJTNEJTIwdHJhaW5lci5wcmVkaWN0KHZhbGlkYXRpb25fZGF0YXNldCklMEFzdGFydF9sb2dpdHMlMkMlMjBlbmRfbG9naXRzJTIwJTNEJTIwcHJlZGljdGlvbnMlMEFjb21wdXRlX21ldHJpY3Moc3RhcnRfbG9naXRzJTJDJTIwZW5kX2xvZ2l0cyUyQyUyMHZhbGlkYXRpb25fZGF0YXNldCUyQyUyMHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQp",highlighted:`predictions, _ = trainer.predict(validation_dataset) | |
| start_logits, end_logits = predictions | |
| compute_metrics(start_logits, end_logits, validation_dataset, raw_datasets[<span class="hljs-string">"validation"</span>])`,wrap:!1}}),{c(){M=d("p"),M.innerHTML=w,i=n(),J(m.$$.fragment)},l(o){M=c(o,"P",{"data-svelte-h":!0}),y(M)!=="svelte-s1z5st"&&(M.innerHTML=w),i=a(o),U(m.$$.fragment,o)},m(o,C){t(o,M,C),t(o,i,C),T(m,o,C),h=!0},i(o){h||(p(m.$$.fragment,o),h=!0)},o(o){u(m.$$.fragment,o),h=!1},d(o){o&&(l(M),l(i)),j(m,o)}}}function Ai(v){let M,w="Enfin, nous utilisons la méthode <code>push_to_hub()</code> pour nous assurer que nous téléchargeons la dernière version du modèle :",i,m,h,o,C="Cela renvoie l’URL du commit qu’il vient de faire, si vous voulez l’inspecter :",b,Z,W,x,X="Le <code>Trainer</code> rédige également une carte de modèle avec tous les résultats de l’évaluation et la télécharge.",A;return m=new I({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yihjb21taXRfbWVzc2FnZSUzRCUyMlRyYWluaW5nJTIwY29tcGxldGUlMjIp",highlighted:'trainer.push_to_hub(commit_message=<span class="hljs-string">"Training complete"</span>)',wrap:!1}}),Z=new I({props:{code:"J2h0dHBzJTNBJTJGJTJGaHVnZ2luZ2ZhY2UuY28lMkZzZ3VnZ2VyJTJGYmVydC1maW5ldHVuZWQtc3F1YWQlMkZjb21taXQlMkY5ZGNlZTFmYmMyNTk0NmE2ZWQ0YmIzMmVmYjFiZDcxZDVmYTkwYjY4Jw==",highlighted:'<span class="hljs-string">'https://huggingface.co/sgugger/bert-finetuned-squad/commit/9dcee1fbc25946a6ed4bb32efb1bd71d5fa90b68'</span>',wrap:!1}}),{c(){M=d("p"),M.innerHTML=w,i=n(),J(m.$$.fragment),h=n(),o=d("p"),o.textContent=C,b=n(),J(Z.$$.fragment),W=n(),x=d("p"),x.innerHTML=X},l(G){M=c(G,"P",{"data-svelte-h":!0}),y(M)!=="svelte-cu27l6"&&(M.innerHTML=w),i=a(G),U(m.$$.fragment,G),h=a(G),o=c(G,"P",{"data-svelte-h":!0}),y(o)!=="svelte-1ap3q1l"&&(o.textContent=C),b=a(G),U(Z.$$.fragment,G),W=a(G),x=c(G,"P",{"data-svelte-h":!0}),y(x)!=="svelte-x3gslh"&&(x.innerHTML=X)},m(G,B){t(G,M,B),t(G,i,B),T(m,G,B),t(G,h,B),t(G,o,B),t(G,b,B),T(Z,G,B),t(G,W,B),t(G,x,B),A=!0},i(G){A||(p(m.$$.fragment,G),p(Z.$$.fragment,G),A=!0)},o(G){u(m.$$.fragment,G),u(Z.$$.fragment,G),A=!1},d(G){G&&(l(M),l(i),l(h),l(o),l(b),l(W),l(x)),j(m,G),j(Z,G)}}}function Jr(v){let M,w="✏️ <strong>A votre tour</strong> Essayez un autre modèle pour voir s’il est plus performant pour cette tâche !";return{c(){M=d("p"),M.innerHTML=w},l(i){M=c(i,"P",{"data-svelte-h":!0}),y(M)!=="svelte-7lkcis"&&(M.innerHTML=w)},m(i,m){t(i,M,m)},p:Da,d(i){i&&l(M)}}}function _i(v){let M,w="Si vous voulez plonger un peu plus profondément dans la boucle d’entraînement, nous allons maintenant vous montrer comment faire la même chose en utilisant 🤗 <em>Accelerate</em>.",i,m,h,o,C='Jetons maintenant un coup d’œil à la boucle d’entraînement complète, afin que vous puissiez facilement personnaliser les parties dont vous avez besoin. Elle ressemblera beaucoup à la boucle d’entraînement du <a href="/course/fr/chapter3/4">chapitre 3</a>, à l’exception de la boucle d’évaluation. Nous serons en mesure d’évaluer le modèle régulièrement puisque nous ne sommes plus contraints par la classe <code>Trainer</code>.',b,Z,W,x,X="Tout d’abord, nous devons construire le <code>DataLoader</code>s à partir de nos jeux de données. Nous définissons le format de ces jeux de données à <code>"torch"</code> et supprimons les colonnes dans le jeu de validation qui ne sont pas utilisées par le modèle. Ensuite, nous pouvons utiliser le <code>default_data_collator</code> fourni par 🤗 <em>Transformers</em> comme <code>collate_fn</code> et mélanger l’ensemble d’entraînement mais pas celui de validation :",A,G,B,k,O="Ensuite, nous réinstantifions notre modèle afin de nous assurer que nous ne poursuivons pas le <em>finetuning</em> précédent et que nous repartons du modèle BERT pré-entraîné :",se,V,g,Be,ll="Ensuite, nous aurons besoin d’un optimiseur. Comme d’habitude, nous utilisons le classique <code>AdamW</code>, qui est comme Adam mais avec une correction dans la façon dont le taux de décroissance des poids est appliqué :",Q,Ve,Qe,F,Wt="Une fois que nous avons tous ces objets, nous pouvons les envoyer à la méthode <code>accelerator.prepare()</code>. Rappelez-vous que si vous voulez entraîner sur des TPUs dans un <em>notebook</em> Colab, vous devrez déplacer tout ce code dans une fonction d’entraînement, et qui ne devrait pas exécuter une cellule qui instancie un <code>Accelerator</code>. Nous pouvons forcer l’entraînement en précision mixte en passant l’argument <code>fp16=True</code> à <code>Accelerator</code> (ou, si vous exécutez le code comme un script, assurez-vous de remplir la 🤗 <em>Accelerate</em> <code>config</code> de manière appropriée).",Ne,E,Ee,z,sl="Comme vous devez le savoir depuis les sections précédentes, nous ne pouvons utiliser la longueur de <code>train_dataloader</code> pour calculer le nombre d’étapes d’entraînement qu’après qu’il soit passé par la méthode <code>accelerator.prepare()</code>. Nous utilisons le même programme linéaire que dans les sections précédentes :",te,ve,Fe,$,tl="Pour pousser notre modèle vers le <em>Hub</em>, nous aurons besoin de créer un objet <code>Repository</code> dans un dossier de travail. Tout d’abord, connectez-vous au <em>Hub</em>, si vous n’êtes pas déjà connecté. Nous déterminerons le nom du dépôt à partir de l’identifiant du modèle que nous voulons donner à notre modèle (n’hésitez pas à remplacer le <code>repo_name</code> par votre propre choix. Il doit juste contenir votre nom d’utilisateur, ce que fait la fonction <code>get_full_repo_name()</code>) :",ne,xe,ze,Y,$e,H,gt="Ensuite, nous pouvons cloner ce dépôt dans un dossier local. S’il existe déjà, ce dossier local doit être un clone du dépôt avec lequel nous travaillons :",Ye,q,He,S,nl="Nous pouvons maintenant télécharger tout ce que nous sauvegardons dans <code>output_dir</code> en appelant la méthode <code>repo.push_to_hub()</code>. Cela nous aidera à télécharger les modèles intermédiaires à la fin de chaque époque.",ae,We,qe,L,al="Nous sommes maintenant prêts à écrire la boucle d’entraînement complète. Après avoir défini une barre de progression pour suivre l’évolution de l’entraînement, la boucle comporte trois parties :",Me,ie,ge="<li>l’entraînement à proprement dit, qui est l’itération classique sur le <code>train_dataloader</code>, passage en avant du modèle, puis passage en arrière et étape d’optimisation.</li> <li>l’évaluation, dans laquelle nous rassemblons toutes les valeurs pour <code>start_logits</code> et <code>end_logits</code> avant de les convertir en tableaux NumPy. Une fois la boucle d’évaluation terminée, nous concaténons tous les résultats. Notez que nous devons tronquer car <code>Accelerator</code> peut avoir ajouté quelques échantillons à la fin pour s’assurer que nous avons le même nombre d’exemples dans chaque processus.</li> <li>sauvegarde et téléchargement, où nous sauvegardons d’abord le modèle et le <em>tokenizer</em>, puis appelons <code>repo.push_to_hub()</code>. Comme nous l’avons fait auparavant, nous utilisons l’argument <code>blocking=False</code> pour dire à la bibliothèque 🤗 <em>Hub</em> de pousser dans un processus asynchrone. De cette façon, l’entraînement continue normalement et cette (longue) instruction est exécutée en arrière-plan.</li>",Ml,re,ke="Voici le code complet de la boucle d’entraînement :",il,oe,pe,ue,Xe="Au cas où ce serait la première fois que vous verriez un modèle enregistré avec 🤗 <em>Accelerate</em>, prenons un moment pour inspecter les trois lignes de code qui l’accompagnent :",Se,D,rl,de,Ae="La première ligne est explicite : elle indique à tous les processus d’attendre que tout le monde soit à ce stade avant de continuer. C’est pour s’assurer que nous avons le même modèle dans chaque processus avant de sauvegarder. Ensuite, nous prenons le <code>unwrapped_model</code>, qui est le modèle de base que nous avons défini. La méthode <code>accelerator.prepare()</code> modifie le modèle pour qu’il fonctionne dans l’entraînement distribué. Donc il n’aura plus la méthode <code>save_pretrained()</code> car la méthode <code>accelerator.unwrap_model()</code> annule cette étape. Enfin, nous appelons <code>save_pretrained()</code> mais nous disons à cette méthode d’utiliser <code>accelerator.save()</code> au lieu de <code>torch.save()</code>.",Le,P,ol='Une fois ceci fait, vous devriez avoir un modèle qui produit des résultats assez similaires à celui entraîné avec <code>Trainer</code>. Vous pouvez vérifier le modèle que nous avons entraîné en utilisant ce code à <a href="https://huggingface.co/huggingface-course/bert-finetuned-squad-accelerate" rel="nofollow"><em>huggingface-course/bert-finetuned-squad-accelerate</em></a>. Et si vous voulez tester des modifications de la boucle d’entraînement, vous pouvez les implémenter directement en modifiant le code ci-dessus !',ce;return m=new le({props:{title:"Une boucle d’entraînement personnalisée",local:"une-boucle-dentraînement-personnalisée",headingTag:"h2"}}),Z=new le({props:{title:"Préparer tout pour l’entraînement",local:"préparer-tout-pour-lentraînement",headingTag:"h3"}}),G=new I({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGRlZmF1bHRfZGF0YV9jb2xsYXRvciUwQSUwQXRyYWluX2RhdGFzZXQuc2V0X2Zvcm1hdCglMjJ0b3JjaCUyMiklMEF2YWxpZGF0aW9uX3NldCUyMCUzRCUyMHZhbGlkYXRpb25fZGF0YXNldC5yZW1vdmVfY29sdW1ucyglNUIlMjJleGFtcGxlX2lkJTIyJTJDJTIwJTIyb2Zmc2V0X21hcHBpbmclMjIlNUQpJTBBdmFsaWRhdGlvbl9zZXQuc2V0X2Zvcm1hdCglMjJ0b3JjaCUyMiklMEElMEF0cmFpbl9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGVmYXVsdF9kYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDglMkMlMEEpJTBBZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB2YWxpZGF0aW9uX3NldCUyQyUyMGNvbGxhdGVfZm4lM0RkZWZhdWx0X2RhdGFfY29sbGF0b3IlMkMlMjBiYXRjaF9zaXplJTNEOCUwQSk=",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> default_data_collator | |
| train_dataset.set_format(<span class="hljs-string">"torch"</span>) | |
| validation_set = validation_dataset.remove_columns([<span class="hljs-string">"example_id"</span>, <span class="hljs-string">"offset_mapping"</span>]) | |
| validation_set.set_format(<span class="hljs-string">"torch"</span>) | |
| train_dataloader = DataLoader( | |
| train_dataset, | |
| shuffle=<span class="hljs-literal">True</span>, | |
| collate_fn=default_data_collator, | |
| batch_size=<span class="hljs-number">8</span>, | |
| ) | |
| eval_dataloader = DataLoader( | |
| validation_set, collate_fn=default_data_collator, batch_size=<span class="hljs-number">8</span> | |
| )`,wrap:!1}}),V=new I({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:"model = AutoModelForQuestionAnswering.from_pretrained(model_checkpoint)",wrap:!1}}),Ve=new I({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDJlLTUp",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW | |
| optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">2e-5</span>)`,wrap:!1}}),E=new I({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQSUwQWFjY2VsZXJhdG9yJTIwJTNEJTIwQWNjZWxlcmF0b3IoZnAxNiUzRFRydWUpJTBBbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMkMlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwYWNjZWxlcmF0b3IucHJlcGFyZSglMEElMjAlMjAlMjAlMjBtb2RlbCUyQyUyMG9wdGltaXplciUyQyUyMHRyYWluX2RhdGFsb2FkZXIlMkMlMjBldmFsX2RhdGFsb2FkZXIlMEEp",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> Accelerator | |
| accelerator = Accelerator(fp16=<span class="hljs-literal">True</span>) | |
| model, optimizer, train_dataloader, eval_dataloader = accelerator.prepare( | |
| model, optimizer, train_dataloader, eval_dataloader | |
| )`,wrap:!1}}),ve=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fdHJhaW5fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV91cGRhdGVfc3RlcHNfcGVyX2Vwb2NoJTIwJTNEJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX3RyYWluX2Vwb2NocyUyMColMjBudW1fdXBkYXRlX3N0ZXBzX3Blcl9lcG9jaCUwQSUwQWxyX3NjaGVkdWxlciUyMCUzRCUyMGdldF9zY2hlZHVsZXIoJTBBJTIwJTIwJTIwJTIwJTIybGluZWFyJTIyJTJDJTBBJTIwJTIwJTIwJTIwb3B0aW1pemVyJTNEb3B0aW1pemVyJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3dhcm11cF9zdGVwcyUzRDAlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5pbmdfc3RlcHMlM0RudW1fdHJhaW5pbmdfc3RlcHMlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler | |
| num_train_epochs = <span class="hljs-number">3</span> | |
| num_update_steps_per_epoch = <span class="hljs-built_in">len</span>(train_dataloader) | |
| num_training_steps = num_train_epochs * num_update_steps_per_epoch | |
| lr_scheduler = get_scheduler( | |
| <span class="hljs-string">"linear"</span>, | |
| optimizer=optimizer, | |
| num_warmup_steps=<span class="hljs-number">0</span>, | |
| num_training_steps=num_training_steps, | |
| )`,wrap:!1}}),xe=new I({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMFJlcG9zaXRvcnklMkMlMjBnZXRfZnVsbF9yZXBvX25hbWUlMEElMEFtb2RlbF9uYW1lJTIwJTNEJTIwJTIyYmVydC1maW5ldHVuZWQtc3F1YWQtYWNjZWxlcmF0ZSUyMiUwQXJlcG9fbmFtZSUyMCUzRCUyMGdldF9mdWxsX3JlcG9fbmFtZShtb2RlbF9uYW1lKSUwQXJlcG9fbmFtZQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> Repository, get_full_repo_name | |
| model_name = <span class="hljs-string">"bert-finetuned-squad-accelerate"</span> | |
| repo_name = get_full_repo_name(model_name) | |
| repo_name`,wrap:!1}}),Y=new I({props:{code:"J3NndWdnZXIlMkZiZXJ0LWZpbmV0dW5lZC1zcXVhZC1hY2NlbGVyYXRlJw==",highlighted:'<span class="hljs-string">'sgugger/bert-finetuned-squad-accelerate'</span>',wrap:!1}}),q=new I({props:{code:"b3V0cHV0X2RpciUyMCUzRCUyMCUyMmJlcnQtZmluZXR1bmVkLXNxdWFkLWFjY2VsZXJhdGUlMjIlMEFyZXBvJTIwJTNEJTIwUmVwb3NpdG9yeShvdXRwdXRfZGlyJTJDJTIwY2xvbmVfZnJvbSUzRHJlcG9fbmFtZSk=",highlighted:`output_dir = <span class="hljs-string">"bert-finetuned-squad-accelerate"</span> | |
| repo = Repository(output_dir, clone_from=repo_name)`,wrap:!1}}),We=new le({props:{title:"Boucle d’entraînement",local:"boucle-dentraînement",headingTag:"h2"}}),oe=new I({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEFpbXBvcnQlMjB0b3JjaCUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFmb3IlMjBlcG9jaCUyMGluJTIwcmFuZ2UobnVtX3RyYWluX2Vwb2NocyklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBFbnRyYSVDMyVBRW5lbWVudCUwQSUyMCUyMCUyMCUyMG1vZGVsLnRyYWluKCklMEElMjAlMjAlMjAlMjBmb3IlMjBzdGVwJTJDJTIwYmF0Y2glMjBpbiUyMGVudW1lcmF0ZSh0cmFpbl9kYXRhbG9hZGVyKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBvdXRwdXRzLmxvc3MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY2NlbGVyYXRvci5iYWNrd2FyZChsb3NzKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBscl9zY2hlZHVsZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnplcm9fZ3JhZCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvZ3Jlc3NfYmFyLnVwZGF0ZSgxKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEV2YWx1YXRpb24lMEElMjAlMjAlMjAlMjBtb2RlbC5ldmFsKCklMEElMjAlMjAlMjAlMjBzdGFydF9sb2dpdHMlMjAlM0QlMjAlNUIlNUQlMEElMjAlMjAlMjAlMjBlbmRfbG9naXRzJTIwJTNEJTIwJTVCJTVEJTBBJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IucHJpbnQoJTIyRXZhbHVhdGlvbiElMjIpJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRxZG0oZXZhbF9kYXRhbG9hZGVyKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdpdGglMjB0b3JjaC5ub19ncmFkKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9sb2dpdHMuYXBwZW5kKGFjY2VsZXJhdG9yLmdhdGhlcihvdXRwdXRzLnN0YXJ0X2xvZ2l0cykuY3B1KCkubnVtcHkoKSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfbG9naXRzLmFwcGVuZChhY2NlbGVyYXRvci5nYXRoZXIob3V0cHV0cy5lbmRfbG9naXRzKS5jcHUoKS5udW1weSgpKSUwQSUwQSUyMCUyMCUyMCUyMHN0YXJ0X2xvZ2l0cyUyMCUzRCUyMG5wLmNvbmNhdGVuYXRlKHN0YXJ0X2xvZ2l0cyklMEElMjAlMjAlMjAlMjBlbmRfbG9naXRzJTIwJTNEJTIwbnAuY29uY2F0ZW5hdGUoZW5kX2xvZ2l0cyklMEElMjAlMjAlMjAlMjBzdGFydF9sb2dpdHMlMjAlM0QlMjBzdGFydF9sb2dpdHMlNUIlM0ElMjBsZW4odmFsaWRhdGlvbl9kYXRhc2V0KSU1RCUwQSUyMCUyMCUyMCUyMGVuZF9sb2dpdHMlMjAlM0QlMjBlbmRfbG9naXRzJTVCJTNBJTIwbGVuKHZhbGlkYXRpb25fZGF0YXNldCklNUQlMEElMEElMjAlMjAlMjAlMjBtZXRyaWNzJTIwJTNEJTIwY29tcHV0ZV9tZXRyaWNzKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0YXJ0X2xvZ2l0cyUyQyUyMGVuZF9sb2dpdHMlMkMlMjB2YWxpZGF0aW9uX2RhdGFzZXQlMkMlMjByYXdfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJlcG9jaCUyMCU3QmVwb2NoJTdEJTNBJTIyJTJDJTIwbWV0cmljcyklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTYXV2ZWdhcmRlciUyMGV0JTIwdCVDMyVBOWwlQzMlQTljaGFyZ2VyJTBBJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQSUyMCUyMCUyMCUyMHVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEElMjAlMjAlMjAlMjB1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSklMEElMjAlMjAlMjAlMjBpZiUyMGFjY2VsZXJhdG9yLmlzX21haW5fcHJvY2VzcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplci5zYXZlX3ByZXRyYWluZWQob3V0cHV0X2RpciklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvLnB1c2hfdG9faHViKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbW1pdF9tZXNzYWdlJTNEZiUyMlRyYWluaW5nJTIwaW4lMjBwcm9ncmVzcyUyMGVwb2NoJTIwJTdCZXBvY2glN0QlMjIlMkMlMjBibG9ja2luZyUzREZhbHNlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKQ==",highlighted:`<span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm | |
| <span class="hljs-keyword">import</span> torch | |
| progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps)) | |
| <span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_train_epochs): | |
| <span class="hljs-comment"># Entraînement</span> | |
| model.train() | |
| <span class="hljs-keyword">for</span> step, batch <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(train_dataloader): | |
| outputs = model(**batch) | |
| loss = outputs.loss | |
| accelerator.backward(loss) | |
| optimizer.step() | |
| lr_scheduler.step() | |
| optimizer.zero_grad() | |
| progress_bar.update(<span class="hljs-number">1</span>) | |
| <span class="hljs-comment"># Evaluation</span> | |
| model.<span class="hljs-built_in">eval</span>() | |
| start_logits = [] | |
| end_logits = [] | |
| accelerator.<span class="hljs-built_in">print</span>(<span class="hljs-string">"Evaluation!"</span>) | |
| <span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> tqdm(eval_dataloader): | |
| <span class="hljs-keyword">with</span> torch.no_grad(): | |
| outputs = model(**batch) | |
| start_logits.append(accelerator.gather(outputs.start_logits).cpu().numpy()) | |
| end_logits.append(accelerator.gather(outputs.end_logits).cpu().numpy()) | |
| start_logits = np.concatenate(start_logits) | |
| end_logits = np.concatenate(end_logits) | |
| start_logits = start_logits[: <span class="hljs-built_in">len</span>(validation_dataset)] | |
| end_logits = end_logits[: <span class="hljs-built_in">len</span>(validation_dataset)] | |
| metrics = compute_metrics( | |
| start_logits, end_logits, validation_dataset, raw_datasets[<span class="hljs-string">"validation"</span>] | |
| ) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"epoch <span class="hljs-subst">{epoch}</span>:"</span>, metrics) | |
| <span class="hljs-comment"># Sauvegarder et télécharger</span> | |
| accelerator.wait_for_everyone() | |
| unwrapped_model = accelerator.unwrap_model(model) | |
| unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save) | |
| <span class="hljs-keyword">if</span> accelerator.is_main_process: | |
| tokenizer.save_pretrained(output_dir) | |
| repo.push_to_hub( | |
| commit_message=<span class="hljs-string">f"Training in progress epoch <span class="hljs-subst">{epoch}</span>"</span>, blocking=<span class="hljs-literal">False</span> | |
| )`,wrap:!1}}),D=new I({props:{code:"YWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQXVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEF1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSk=",highlighted:`accelerator.wait_for_everyone() | |
| unwrapped_model = accelerator.unwrap_model(model) | |
| unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save)`,wrap:!1}}),{c(){M=d("p"),M.innerHTML=w,i=n(),J(m.$$.fragment),h=n(),o=d("p"),o.innerHTML=C,b=n(),J(Z.$$.fragment),W=n(),x=d("p"),x.innerHTML=X,A=n(),J(G.$$.fragment),B=n(),k=d("p"),k.innerHTML=O,se=n(),J(V.$$.fragment),g=n(),Be=d("p"),Be.innerHTML=ll,Q=n(),J(Ve.$$.fragment),Qe=n(),F=d("p"),F.innerHTML=Wt,Ne=n(),J(E.$$.fragment),Ee=n(),z=d("p"),z.innerHTML=sl,te=n(),J(ve.$$.fragment),Fe=n(),$=d("p"),$.innerHTML=tl,ne=n(),J(xe.$$.fragment),ze=n(),J(Y.$$.fragment),$e=n(),H=d("p"),H.textContent=gt,Ye=n(),J(q.$$.fragment),He=n(),S=d("p"),S.innerHTML=nl,ae=n(),J(We.$$.fragment),qe=n(),L=d("p"),L.textContent=al,Me=n(),ie=d("ul"),ie.innerHTML=ge,Ml=n(),re=d("p"),re.textContent=ke,il=n(),J(oe.$$.fragment),pe=n(),ue=d("p"),ue.innerHTML=Xe,Se=n(),J(D.$$.fragment),rl=n(),de=d("p"),de.innerHTML=Ae,Le=n(),P=d("p"),P.innerHTML=ol},l(r){M=c(r,"P",{"data-svelte-h":!0}),y(M)!=="svelte-zatcre"&&(M.innerHTML=w),i=a(r),U(m.$$.fragment,r),h=a(r),o=c(r,"P",{"data-svelte-h":!0}),y(o)!=="svelte-pxpkf1"&&(o.innerHTML=C),b=a(r),U(Z.$$.fragment,r),W=a(r),x=c(r,"P",{"data-svelte-h":!0}),y(x)!=="svelte-1n8t4hd"&&(x.innerHTML=X),A=a(r),U(G.$$.fragment,r),B=a(r),k=c(r,"P",{"data-svelte-h":!0}),y(k)!=="svelte-7m2rnm"&&(k.innerHTML=O),se=a(r),U(V.$$.fragment,r),g=a(r),Be=c(r,"P",{"data-svelte-h":!0}),y(Be)!=="svelte-1uyi6e0"&&(Be.innerHTML=ll),Q=a(r),U(Ve.$$.fragment,r),Qe=a(r),F=c(r,"P",{"data-svelte-h":!0}),y(F)!=="svelte-1m8ctyp"&&(F.innerHTML=Wt),Ne=a(r),U(E.$$.fragment,r),Ee=a(r),z=c(r,"P",{"data-svelte-h":!0}),y(z)!=="svelte-tz4izb"&&(z.innerHTML=sl),te=a(r),U(ve.$$.fragment,r),Fe=a(r),$=c(r,"P",{"data-svelte-h":!0}),y($)!=="svelte-2hg6l9"&&($.innerHTML=tl),ne=a(r),U(xe.$$.fragment,r),ze=a(r),U(Y.$$.fragment,r),$e=a(r),H=c(r,"P",{"data-svelte-h":!0}),y(H)!=="svelte-3l45zj"&&(H.textContent=gt),Ye=a(r),U(q.$$.fragment,r),He=a(r),S=c(r,"P",{"data-svelte-h":!0}),y(S)!=="svelte-1jqz79z"&&(S.innerHTML=nl),ae=a(r),U(We.$$.fragment,r),qe=a(r),L=c(r,"P",{"data-svelte-h":!0}),y(L)!=="svelte-4p785c"&&(L.textContent=al),Me=a(r),ie=c(r,"UL",{"data-svelte-h":!0}),y(ie)!=="svelte-1gdbnqt"&&(ie.innerHTML=ge),Ml=a(r),re=c(r,"P",{"data-svelte-h":!0}),y(re)!=="svelte-1tdifmi"&&(re.textContent=ke),il=a(r),U(oe.$$.fragment,r),pe=a(r),ue=c(r,"P",{"data-svelte-h":!0}),y(ue)!=="svelte-12fvbfc"&&(ue.innerHTML=Xe),Se=a(r),U(D.$$.fragment,r),rl=a(r),de=c(r,"P",{"data-svelte-h":!0}),y(de)!=="svelte-7nwfha"&&(de.innerHTML=Ae),Le=a(r),P=c(r,"P",{"data-svelte-h":!0}),y(P)!=="svelte-q259b8"&&(P.innerHTML=ol)},m(r,f){t(r,M,f),t(r,i,f),T(m,r,f),t(r,h,f),t(r,o,f),t(r,b,f),T(Z,r,f),t(r,W,f),t(r,x,f),t(r,A,f),T(G,r,f),t(r,B,f),t(r,k,f),t(r,se,f),T(V,r,f),t(r,g,f),t(r,Be,f),t(r,Q,f),T(Ve,r,f),t(r,Qe,f),t(r,F,f),t(r,Ne,f),T(E,r,f),t(r,Ee,f),t(r,z,f),t(r,te,f),T(ve,r,f),t(r,Fe,f),t(r,$,f),t(r,ne,f),T(xe,r,f),t(r,ze,f),T(Y,r,f),t(r,$e,f),t(r,H,f),t(r,Ye,f),T(q,r,f),t(r,He,f),t(r,S,f),t(r,ae,f),T(We,r,f),t(r,qe,f),t(r,L,f),t(r,Me,f),t(r,ie,f),t(r,Ml,f),t(r,re,f),t(r,il,f),T(oe,r,f),t(r,pe,f),t(r,ue,f),t(r,Se,f),T(D,r,f),t(r,rl,f),t(r,de,f),t(r,Le,f),t(r,P,f),ce=!0},i(r){ce||(p(m.$$.fragment,r),p(Z.$$.fragment,r),p(G.$$.fragment,r),p(V.$$.fragment,r),p(Ve.$$.fragment,r),p(E.$$.fragment,r),p(ve.$$.fragment,r),p(xe.$$.fragment,r),p(Y.$$.fragment,r),p(q.$$.fragment,r),p(We.$$.fragment,r),p(oe.$$.fragment,r),p(D.$$.fragment,r),ce=!0)},o(r){u(m.$$.fragment,r),u(Z.$$.fragment,r),u(G.$$.fragment,r),u(V.$$.fragment,r),u(Ve.$$.fragment,r),u(E.$$.fragment,r),u(ve.$$.fragment,r),u(xe.$$.fragment,r),u(Y.$$.fragment,r),u(q.$$.fragment,r),u(We.$$.fragment,r),u(oe.$$.fragment,r),u(D.$$.fragment,r),ce=!1},d(r){r&&(l(M),l(i),l(h),l(o),l(b),l(W),l(x),l(A),l(B),l(k),l(se),l(g),l(Be),l(Q),l(Qe),l(F),l(Ne),l(Ee),l(z),l(te),l(Fe),l($),l(ne),l(ze),l($e),l(H),l(Ye),l(He),l(S),l(ae),l(qe),l(L),l(Me),l(ie),l(Ml),l(re),l(il),l(pe),l(ue),l(Se),l(rl),l(de),l(Le),l(P)),j(m,r),j(Z,r),j(G,r),j(V,r),j(Ve,r),j(E,r),j(ve,r),j(xe,r),j(Y,r),j(q,r),j(We,r),j(oe,r),j(D,r)}}}function Ur(v){let M,w,i,m,h,o,C,b,Z,W,x,X,A="Il est temps de s’intéresser à la réponse aux questions ! Cette tâche peut prendre plusieurs formes mais celle sur laquelle nous allons nous concentrer dans cette section est appelée réponse aux questions <em>extractives</em>. Il s’agit de poser des questions sur un document et d’identifier les réponses sous forme de « d’étendue de texte » dans le document lui-même.",G,B,k,O,se='Nous allons <em>finetuner</em> un modèle BERT sur le <a href="https://rajpurkar.github.io/SQuAD-explorer/" rel="nofollow">jeu de données SQuAD</a>, qui consiste en des questions posées par des <em>crowdworkers</em> sur un ensemble d’articles de Wikipedia. Cela nous donnera un modèle capable de calculer des prédictions comme celui-ci :',V,g,Be,ll,Q,Ve,Qe,F,Wt='Il s’agit d’une présentation du modèle qui a été entraîné à l’aide du code présenté dans cette section et qui a ensuité été téléchargé sur le <em>Hub</em>. Vous pouvez le trouver <a href="https://huggingface.co/huggingface-course/bert-finetuned-squad?context=%F0%9F%A4%97+Transformers+is+backed+by+the+three+most+popular+deep+learning+libraries+%E2%80%94+Jax%2C+PyTorch+and+TensorFlow+%E2%80%94+with+a+seamless+integration+between+them.+It%27s+straightforward+to+train+your+models+with+one+before+loading+them+for+inference+with+the+other.&question=Which+deep+learning+libraries+back+%F0%9F%A4%97+Transformers%3F" rel="nofollow">ici</a>',Ne,E,Ee,z,sl,te,ve='Le jeu de données le plus utilisé comme référence académique pour la réponse extractive aux questions est <a href="https://rajpurkar.github.io/SQuAD-explorer/" rel="nofollow">SQuAD</a>. C’est donc celui que nous utiliserons ici. Il existe également une version plus difficile <a href="https://huggingface.co/datasets/squad_v2" rel="nofollow">SQuAD v2</a>, qui comprend des questions sans réponse. Tant que votre propre jeu de données contient une colonne pour les contextes, une colonne pour les questions et une colonne pour les réponses, vous devriez être en mesure d’adapter les étapes ci-dessous.',Fe,$,tl,ne,xe="Comme d’habitude, nous pouvons télécharger et mettre en cache le jeu de données en une seule étape grâce à <code>load_dataset()</code> :",ze,Y,$e,H,gt="Nous pouvons jeter un coup d’œil à cet objet pour en savoir plus sur le jeu de données SQuAD :",Ye,q,He,S,nl,ae,We="On dirait que nous avons tout ce dont nous avons besoin avec les champs <code>context</code>, <code>question</code> et <code>answers</code>. Affichons-les pour le premier élément de notre ensemble d’entraînement :",qe,L,al,Me,ie,ge,Ml="Les champs <code>context</code> et <code>question</code> sont très simples à utiliser. Le champ <code>answers</code> est un peu plus délicat car il compile un dictionnaire avec deux champs qui sont tous deux des listes. C’est le format qui sera attendu par la métrique <code>squad</code> lors de l’évaluation. Si vous utilisez vos propres données, vous n’avez pas nécessairement besoin de vous soucier de mettre les réponses dans le même format. Le champ <code>text</code> est assez évident et le champ <code>answer_start</code> contient l’indice du caractère de départ de chaque réponse dans le contexte.",re,ke,il="Pendant l’entraînement, il n’y a qu’une seule réponse possible. Nous pouvons vérifier cela en utilisant la méthode <code>Dataset.filter()</code> :",oe,pe,ue,Xe,Se,D,rl="Pour l’évaluation, cependant, il existe plusieurs réponses possibles pour chaque échantillon, qui peuvent être identiques ou différentes :",de,Ae,Le,P,ol,ce,r="Nous ne nous plongerons pas dans le script d’évaluation car tout sera enveloppé pour nous par une métrique de 🤗 <em>Datasets</em>. La version courte est que certaines des questions ont plusieurs réponses possibles, et ce script va comparer une réponse prédite à toutes les réponses acceptables et prendre le meilleur score. Par exemple, si nous regardons l’échantillon de l’indice 2 :",f,pl,Rt,ul,Qt,dl,oM="nous pouvons voir que la réponse peut effectivement être l’une des trois possibilités que nous avons vues précédemment.",Nt,cl,Et,yl,Ft,ml,pM="Commençons par le prétraitement des données d’entraînement. La partie la plus difficile est de générer des étiquettes pour la réponse à la question, c’est-à-dire les positions de début et de fin des <em>tokens</em> correspondant à la réponse dans le contexte.",zt,Jl,uM="Mais ne nous emballons pas. Tout d’abord, à l’aide d’un <em>tokenizer</em>, nous devons convertir le texte d’entrée en identifiants que le modèle peut comprendre :",$t,Ul,Yt,Tl,dM='Comme mentionné précédemment, nous allons <em>finetuner</em> un modèle BERT, mais vous pouvez utiliser n’importe quel autre type de modèle tant qu’il a un <em>tokenizer</em> rapide implémenté. Vous pouvez voir toutes les architectures qui sont livrées avec un <em>tokenizer</em> rapide dans <a href="https://huggingface.co/transformers/#supported-frameworks" rel="nofollow">ce tableau</a>, et pour vérifier que l’objet <code>tokenizer</code> que vous utilisez est bien soutenu par 🤗 <em>Tokenizers</em> vous pouvez regarder son attribut <code>is_fast</code> :',Ht,jl,qt,wl,St,bl,cM="Nous pouvons transmettre à notre <em>tokenizer</em> la question et le contexte ensemble. Il insérera correctement les <em>tokens</em> spéciaux pour former une phrase comme celle-ci :",Lt,Il,Dt,hl,yM="Vérifions à nouveau :",Pt,Cl,Kt,fl,Ot,Zl,mM="Les étiquettes sont l’index des <em>tokens</em> de début et de fin de la réponse. Le modèle sera chargé de prédire dans l’entrée un logit de début et de fin par <em>token</em>, les étiquettes théoriques étant les suivantes :",en,Ke,JM='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/qa_labels.svg" alt="One-hot encoded labels for question answering."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/qa_labels-dark.svg" alt="One-hot encoded labels for question answering."/>',ln,Gl,UM='Dans ce cas, le contexte n’est pas trop long, mais certains des exemples du jeu de données ont des contextes très longs qui dépasseront la longueur maximale que nous avons fixée (qui est de 384 dans ce cas). Comme nous l’avons vu dans le <a href="/course/fr/chapter6/4">chapitre 6</a> lorsque nous avons exploré le pipeline de <code>question-answering</code>, nous allons traiter les contextes longs en créant plusieurs caractéristiques d’entraînement à partir d’un échantillon de notre jeu de données et avec une fenêtre glissante entre eux.',sn,Bl,TM="Pour voir comment cela fonctionne sur notre exemple, nous pouvons limiter la longueur à 100 et utiliser une fenêtre glissante de 50 <em>tokens</em>. Pour rappel, nous utilisons :",tn,Vl,jM="<li><code>max_length</code> pour définir la longueur maximale (ici 100)</li> <li><code>truncation="only_second"</code> pour tronquer le contexte (qui est en deuxième position) quand la question avec son contexte est trop longue</li> <li><code>stride</code> pour fixer le nombre de <em>tokens</em> se chevauchant entre deux morceaux successifs (ici 50)</li> <li><code>return_overflowing_tokens=True</code> pour indiquer au <em>tokenizer</em> que l’on veut les <em>tokens</em> qui débordent</li>",nn,vl,an,xl,Mn,Wl,wM="Comme nous pouvons le voir, notre exemple a été divisé en quatre entrées, chacune d’entre elles contenant la question et une partie du contexte. Notez que la réponse à la question (« Bernadette Soubirous ») n’apparaît que dans la troisième et la dernière entrée. Donc en traitant les longs contextes de cette façon, nous allons créer quelques exemples d’entraînement où la réponse n’est pas incluse dans le contexte. Pour ces exemples, les étiquettes seront <code>start_position = end_position = 0</code> (donc nous prédisons le <em>token</em> <code>[CLS]</code>). Nous définirons également ces étiquettes dans le cas malheureux où la réponse a été tronquée de sorte que nous n’avons que le début (ou la fin) de celle-ci. Pour les exemples où la réponse est entièrement dans le contexte, les étiquettes seront l’index du <em>token</em> où la réponse commence et l’index du <em>token</em> où la réponse se termine.",rn,gl,bM='Le jeu de données nous fournit le caractère de début de la réponse dans le contexte, et en ajoutant la longueur de la réponse, nous pouvons trouver le caractère de fin dans le contexte. Pour faire correspondre ces indices aux <em>tokens</em>, nous devrons utiliser les correspondances <em>offset</em> que nous avons étudiés au <a href="/course/fr/chapter6/4">chapitre 6</a>. Nous pouvons faire en sorte que notre <em>tokenizer</em> renvoie ces index en passant <code>return_offsets_mapping=True</code> :',on,kl,pn,Xl,un,Al,IM="Comme nous pouvons le voir, nous récupérons les identifiants d’entrée, les <em>tokens</em> de type identifiant, le masque d’attention, ainsi que la correspondance <em>offset</em> dont nous avions besoin et une clé supplémentaire, <code>overflow_to_sample_mapping</code>. La valeur correspondante nous sera utile lorsque nous tokeniserons plusieurs textes en même temps (ce que nous devrions faire pour bénéficier du fait que notre <em>tokenizer</em> est en Rust). Puisqu’un échantillon peut donner plusieurs caractéristiques, il fait correspondre chaque caractéristique à l’exemple d’où elle provient. Parce qu’ici nous avons seulement tokenisé un exemple, nous obtenons une liste de <code>0</code> :",dn,_l,cn,Rl,yn,Ql,hM="Mais si nous tokenisons davantage d’exemples, cela deviendra plus utile :",mn,Nl,Jn,El,Un,Fl,CM="Comme nous pouvons le voir, les trois premiers exemples (aux indices 2, 3 et 4 de l’ensemble d’entraînement) ont chacun donné quatre caractéristiques et le dernier exemple (à l’indice 5 de l’ensemble d’entraînement) a donné 7 caractéristiques.",Tn,zl,fM="Ces informations seront utiles pour associer chaque caractéristique obtenue à son étiquette correspondante. Comme mentionné précédemment, ces étiquettes sont :",jn,$l,ZM="<li><code>(0, 0)</code> si la réponse n’est pas dans l’espace correspondant du contexte.</li> <li><code>(start_position, end_position)</code> si la réponse est dans l’espace correspondant du contexte, avec <code>start_position</code> étant l’index du <em>token</em> (dans les identifiants d’entrée) au début de la réponse et <code>end_position</code> étant l’index du <em>token</em> (dans les identifiants d’entrée) où la réponse se termine.</li>",wn,Yl,GM="Pour déterminer ce qui est le cas et, le cas échéant, les positions des <em>tokens</em>, nous trouvons d’abord les indices qui commencent et finissent le contexte dans les identifiants d’entrée. Nous pourrions utiliser les <em>tokens</em> de type identifiants pour le faire, mais puisque ceux-ci n’existent pas nécessairement pour tous les modèles (DistilBERT ne les requiert pas par exemple), nous allons plutôt utiliser la méthode <code>sequence_ids()</code> du <code>BatchEncoding</code> que notre <em>tokenizer</em> retourne.",bn,Hl,BM="Une fois que nous avons ces indices de <em>tokens</em>, nous regardons les <em>offsets</em> correspondants, qui sont des <em>tuples</em> de deux entiers représentant l’étendue des caractères dans le contexte original. Nous pouvons ainsi détecter si le morceau de contexte dans cette fonctionnalité commence après la réponse ou se termine avant que la réponse ne commence (dans ce cas, l’étiquette est <code>(0, 0)</code>). Si ce n’est pas le cas, nous bouclons pour trouver le premier et le dernier <em>token</em> de la réponse :",In,ql,hn,Sl,Cn,Ll,VM="Jetons un coup d’œil à quelques résultats pour vérifier que notre approche est correcte. Pour la première caractéristique, nous trouvons <code>(83, 85)</code> comme étiquettes. Comparons alors la réponse théorique avec l’étendue décodée des <em>tokens</em> de 83 à 85 (inclus) :",fn,Dl,Zn,Pl,Gn,Kl,vM="Cela correspond ! Maintenant vérifions l’index 4, où nous avons mis les étiquettes à <code>(0, 0)</code>, signifiant que la réponse n’est pas dans le morceau de contexte de cette caractéristique :",Bn,Ol,Vn,es,vn,ls,xM="En effet, nous ne voyons pas la réponse dans le contexte.",xn,Oe,Wn,ss,WM="Maintenant que nous avons vu étape par étape comment prétraiter nos données d’entraînement, nous pouvons les regrouper dans une fonction que nous appliquerons à l’ensemble des données d’entraînement. Nous allons rembourrer chaque caractéristique à la longueur maximale que nous avons définie, car la plupart des contextes seront longs (et les échantillons correspondants seront divisés en plusieurs caractéristiques). Il n’y a donc pas de réel avantage à appliquer un rembourrage dynamique ici :",gn,ts,kn,ns,gM="Notez que nous avons défini deux constantes pour déterminer la longueur maximale utilisée ainsi que la longueur de la fenêtre glissante, et que nous avons ajouté un petit nettoyage avant la tokénisation : certaines des questions dans SQuAD ont des espaces supplémentaires au début et à la fin qui n’ajoutent rien (et prennent de la place lors de la tokénisation si vous utilisez un modèle comme RoBERTa), donc nous avons supprimé ces espaces supplémentaires.",Xn,as,kM="Pour appliquer cette fonction à l’ensemble de l’entraînement, nous utilisons la méthode <code>Dataset.map()</code> avec le flag <code>batched=True</code>. C’est nécessaire ici car nous changeons la longueur du jeu de données (puisqu’un exemple peut donner plusieurs caractéristiques d’entraînement) :",An,Ms,_n,is,Rn,rs,XM="Comme nous pouvons le voir, le prétraitement a ajouté environ 1 000 caractéristiques. Notre ensemble d’entraînement est maintenant prêt à être utilisé. Passons au prétraitement de l’ensemble de validation !",Qn,os,Nn,ps,AM="Le prétraitement des données de validation sera légèrement plus facile car nous n’avons pas besoin de générer des étiquettes (sauf si nous voulons calculer une perte de validation, mais elle ne nous aidera pas vraiment à comprendre la qualité du modèle). Le réel plaisir sera d’interpréter les prédictions du modèle dans des étendues du contexte original. Pour cela, il nous suffit de stocker les correspondances d’<em>offset</em> et un moyen de faire correspondre chaque caractéristique créée à l’exemple original dont elle provient. Puisqu’il y a une colonne identifiant dans le jeu de données original, nous l’utiliserons.",En,us,_M="La seule chose que nous allons ajouter ici est un petit nettoyage des correspondances d’<em>offset</em>. Elles contiendront les <em>offsets</em> pour la question et le contexte, mais une fois que nous serons à la phase de post-traitement, nous n’aurons aucun moyen de savoir quelle partie des identifiants d’entrée correspondait au contexte et quelle partie était la question (la méthode <code>sequence_ids()</code> que nous avons utilisée n’est disponible que pour la sortie du <em>tokenizer</em>). Donc, nous allons mettre les <em>offsets</em> correspondant à la question à <code>None</code> :",Fn,ds,zn,cs,RM="Nous pouvons appliquer cette fonction sur l’ensemble de validation comme précédemment :",$n,ys,Yn,ms,Hn,Js,QM="Dans ce cas, nous n’avons ajouté que quelques centaines d’échantillons, il semble donc que les contextes dans l’ensemble de validation soient un peu plus courts.",qn,Us,NM="Maintenant que nous avons prétraité toutes les données, nous pouvons passer à l’entraînement.",Sn,ye,me,jt,Ts,Ln,Je,Ue,wt,js,EM='Le modèle produira des logits pour les positions de début et de fin de la réponse dans les identifiants d’entrée, comme nous l’avons vu lors de notre exploration du pipeline de <code>question-answering</code> <a href="/course/fr/chapter6/3b">au chapitre 6</a>. L’étape de post-traitement sera similaire à ce que nous avons fait à ce chapitre là. Voici un rapide rappel des actions que nous avons prises :',Dn,ws,FM="<li>nous avons masqué les logits de début et de fin correspondant aux <em>tokens</em> en dehors du contexte,</li> <li>nous avons ensuite converti les logits de début et de fin en probabilités en utilisant une fonction SoftMax,</li> <li>nous avons attribué un score à chaque paire <code>(start_token, end_token)</code> en prenant le produit des deux probabilités correspondantes,</li> <li>nous avons cherché la paire avec le score maximum qui donnait une réponse valide (par exemple, un <code>start_token</code> inférieur au <code>end_token</code>).</li>",Pn,K,Pa,bt,zM="(start_token, end_token)",Ka,It,$M="n_best",Oa,ht,YM="n_best=20",eM,Kn,Qi='<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>log</mi><mo></mo><mo stretchy="false">(</mo><mi>a</mi><mi>b</mi><mo stretchy="false">)</mo><mo>=</mo><mi>log</mi><mo></mo><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mo>+</mo><mi>log</mi><mo></mo><mo stretchy="false">(</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\\log(ab) = \\log(a) + \\log(b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mopen">(</span><span class="mord mathnormal">ab</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mopen">(</span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span></span>',On,ea,bs,HM="Pour démontrer tout cela, nous aurons besoin d’un certain type de prédictions. Puisque nous n’avons pas encore entraîné notre modèle, nous allons utiliser le modèle par défaut du pipeline de <code>question-answering</code> pour générer quelques prédictions sur une petite partie de l’ensemble de validation. Nous pouvons utiliser la même fonction de traitement que précédemment car elle repose sur la constante globale <code>tokenizer</code>, nous devons juste changer cet objet par le <em>tokenizer</em> du modèle que nous voulons utiliser temporairement :",la,Is,sa,hs,qM="Maintenant que le prétraitement est terminé, nous changeons le <em>tokenizer</em> pour celui que nous avons choisi à l’origine :",ta,Cs,na,fs,SM="Nous supprimons ensuite les colonnes de notre <code>eval_set</code> qui ne sont pas attendues par le modèle. Nous construisons un batch avec tout de ce petit ensemble de validation et le passons au modèle. Si un GPU est disponible, nous l’utilisons pour aller plus vite :",aa,Te,je,Ct,Zs,LM="Maintenant, nous devons trouver la réponse prédite pour chaque exemple dans notre <code>small_eval_set</code>. Un exemple peut avoir été divisé en plusieurs caractéristiques dans <code>eval_set</code>, donc la première étape est de faire correspondre chaque exemple dans <code>small_eval_set</code> aux caractéristiques correspondantes dans <code>eval_set</code> :",Ma,Gs,ia,Bs,DM="Avec cela, nous pouvons vraiment nous mettre au travail en bouclant tous les exemples et, pour chaque exemple, toutes les caractéristiques associées. Comme nous l’avons dit précédemment, nous allons regarder les scores logit pour les <code>n_best</code> logits de début et logits de fin, en excluant les positions qui donnent :",ra,Vs,PM="<li>une réponse qui ne serait pas dans le contexte</li> <li>une réponse avec une longueur négative</li> <li>une réponse qui est trop longue (nous limitons les possibilités à <code>max_answer_length=30</code>)</li>",oa,vs,KM="Une fois que nous avons toutes les réponses possibles notées pour un exemple, nous choisissons simplement celle qui a le meilleur score logit :",pa,xs,ua,Ws,OM="Le format final des réponses prédites est celui qui sera attendu par la métrique que nous allons utiliser. Comme d’habitude, nous pouvons la charger à l’aide de la bibliothèque 🤗 <em>Evaluate</em> :",da,gs,ca,ks,ei="Cette métrique attend les réponses prédites dans le format que nous avons vu ci-dessus (une liste de dictionnaires avec une clé pour l’identifiant de l’exemple et une clé pour le texte prédit) et les réponses théoriques dans le format ci-dessous (une liste de dictionnaires avec une clé pour l’identifiant de l’exemple et une clé pour les réponses possibles) :",ya,Xs,ma,As,li="Nous pouvons maintenant vérifier que nous obtenons des résultats raisonnables en examinant le premier élément des deux listes :",Ja,_s,Ua,Rs,Ta,Qs,si="Pas trop mal ! Voyons maintenant le score que la métrique nous donne :",ja,Ns,wa,Es,ba,Fs,ti='Encore une fois, c’est plutôt bon si l’on considère que, d’après <a href="https://arxiv.org/abs/1910.01108v2" rel="nofollow">le papier</a> de DistilBERT, <em>finetuné</em> sur SQuAD, ce modèle obtient 79,1 et 86,9 pour ces scores sur l’ensemble du jeu de données.',Ia,ft,zs,ha,$s,ni="Nous pouvons vérifier que cela fonctionne sur nos prédictions :",Ca,Ys,fa,Hs,Za,qs,ai="C’est bien ! Maintenant, utilisons ceci pour <em>finetuner</em> notre modèle.",Ga,Ss,Ba,we,be,Zt,Ls,Mi="Comme d’habitude, nous recevons un avertissement indiquant que certains poids ne sont pas utilisés (ceux de la tête de pré-entraînement) et que d’autres sont initialisés de manière aléatoire (ceux de la tête de réponse aux questions). Vous devriez être habitué à cela maintenant, mais cela signifie que ce modèle n’est pas encore prêt à être utilisé et qu’il a besoin d’être <em>finetuné</em>. Une bonne chose que nous soyons sur le point de le faire !",Va,Ds,ii="Pour pouvoir pousser notre modèle vers le <em>Hub</em>, nous devons nous connecter à Hugging Face. Si vous exécutez ce code dans un <em>notebook</em>, vous pouvez le faire avec la fonction utilitaire suivante, qui affiche un <em>widget</em> où vous pouvez entrer vos identifiants de connexion :",va,Ps,xa,Ks,ri="Si vous ne travaillez pas dans un <em>notebook</em>, tapez simplement la ligne suivante dans votre terminal :",Wa,Os,ga,Ie,he,Gt,et,oi="Par défaut, le dépôt utilisé sera dans votre espace et nommé après le répertoire de sortie que vous avez défini. Donc dans notre cas il sera dans <code>"sgugger/bert-finetuned-squad"</code>. Nous pouvons passer outre en passant un <code>hub_model_id</code>, par exemple, pour pousser le modèle dans l’organisation <code>huggingface_course</code> nous avons utilisé <code>hub_model_id= "huggingface_course/bert-finetuned-squad"</code> (qui est le modèle que nous avons lié au début de cette section).",ka,Ce,fe,Bt,lt,pi="Notez que pendant l’entraînement, chaque fois que le modèle est sauvegardé (ici, à chaque époque), il est téléchargé sur le <em>Hub</em> en arrière-plan. Ainsi, vous pourrez reprendre votre entraînement sur une autre machine si nécessaire. L’ensemble de l’entraînement prend un certain temps (un peu plus d’une heure sur une Titan RTX), vous pouvez donc prendre un café ou relire les parties du cours qui vous ont semblé plus difficiles pendant qu’il se déroule. Notez également que dès que la première époque est terminée, vous verrez des poids téléchargés sur le <em>Hub</em> et vous pourrez commencer à jouer avec votre modèle sur sa page.",Xa,Ze,Ge,Vt,st,Aa,tt,ui="Super ! À titre de comparaison, les scores indiqués dans l’article de BERT pour ce tâche sont de 80,8 et 88,5. Donc nous sommes exactement là où nous devrions être.",_a,vt,nt,di="À ce stade, vous pouvez utiliser le <em>widget</em> d’inférence sur le <em>Hub</em> du modèle pour tester le modèle et le partager avec vos amis, votre famille et vos animaux préférés. Vous avez réussi à <em>finetuner</em> un modèle sur une tâche de réponse à une question. Félicitations !",Ra,el,Qa,xt,at,Na,Mt,ci="Nous vous avons déjà montré comment vous pouvez utiliser le modèle que nous avons <em>finetuné</em> sur le <em>Hub</em> avec le <em>widget</em> d’inférence. Pour l’utiliser localement dans un <code>pipeline</code>, il suffit de spécifier l’identifiant du modèle :",Ea,it,Fa,rt,za,ot,yi="Super ! Notre modèle fonctionne aussi bien que le modèle par défaut pour ce pipeline !",$a,pt,Ya,kt,Ha;h=new qi({props:{fw:v[0]}}),C=new le({props:{title:"Réponse aux questions",local:"réponse-aux-questions",headingTag:"h1"}});const mi=[Di,Li],ut=[];function Ji(e,s){return e[0]==="pt"?0:1}Z=Ji(v),W=ut[Z]=mi[Z](v),B=new La({props:{id:"ajPx5LwJD-I"}}),E=new Sa({props:{$$slots:{default:[Pi]},$$scope:{ctx:v}}}),z=new le({props:{title:"Préparation des données",local:"préparation-des-données",headingTag:"h2"}}),$=new le({props:{title:"Le jeu de données SQuAD",local:"le-jeu-de-données-squad",headingTag:"h3"}}),Y=new I({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBcmF3X2RhdGFzZXRzJTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMnNxdWFkJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| raw_datasets = load_dataset(<span class="hljs-string">"squad"</span>)`,wrap:!1}}),q=new I({props:{code:"cmF3X2RhdGFzZXRz",highlighted:"raw_datasets",wrap:!1}}),S=new I({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2lkJyUyQyUyMCd0aXRsZSclMkMlMjAnY29udGV4dCclMkMlMjAncXVlc3Rpb24nJTJDJTIwJ2Fuc3dlcnMnJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjA4NzU5OSUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB2YWxpZGF0aW9uJTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidpZCclMkMlMjAndGl0bGUnJTJDJTIwJ2NvbnRleHQnJTJDJTIwJ3F1ZXN0aW9uJyUyQyUyMCdhbnN3ZXJzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMTA1NzAlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({ | |
| train: Dataset({ | |
| features: [<span class="hljs-string">'id'</span>, <span class="hljs-string">'title'</span>, <span class="hljs-string">'context'</span>, <span class="hljs-string">'question'</span>, <span class="hljs-string">'answers'</span>], | |
| num_rows: <span class="hljs-number">87599</span> | |
| }) | |
| validation: Dataset({ | |
| features: [<span class="hljs-string">'id'</span>, <span class="hljs-string">'title'</span>, <span class="hljs-string">'context'</span>, <span class="hljs-string">'question'</span>, <span class="hljs-string">'answers'</span>], | |
| num_rows: <span class="hljs-number">10570</span> | |
| }) | |
| })`,wrap:!1}}),L=new I({props:{code:"cHJpbnQoJTIyQ29udGV4dCUzQSUyMCUyMiUyQyUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMCU1RCU1QiUyMmNvbnRleHQlMjIlNUQpJTBBcHJpbnQoJTIyUXVlc3Rpb24lM0ElMjAlMjIlMkMlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjAlNUQlNUIlMjJxdWVzdGlvbiUyMiU1RCklMEFwcmludCglMjJBbnN3ZXIlM0ElMjAlMjIlMkMlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjAlNUQlNUIlMjJhbnN3ZXJzJTIyJTVEKQ==",highlighted:`<span class="hljs-built_in">print</span>(<span class="hljs-string">"Context: "</span>, raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"context"</span>]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Question: "</span>, raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"question"</span>]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Answer: "</span>, raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"answers"</span>])`,wrap:!1}}),Me=new I({props:{code:"Q29udGV4dCUzQSUyMCdBcmNoaXRlY3R1cmFsbHklMkMlMjB0aGUlMjBzY2hvb2wlMjBoYXMlMjBhJTIwQ2F0aG9saWMlMjBjaGFyYWN0ZXIuJTIwQXRvcCUyMHRoZSUyME1haW4lMjBCdWlsZGluZyU1QydzJTIwZ29sZCUyMGRvbWUlMjBpcyUyMGElMjBnb2xkZW4lMjBzdGF0dWUlMjBvZiUyMHRoZSUyMFZpcmdpbiUyME1hcnkuJTIwSW1tZWRpYXRlbHklMjBpbiUyMGZyb250JTIwb2YlMjB0aGUlMjBNYWluJTIwQnVpbGRpbmclMjBhbmQlMjBmYWNpbmclMjBpdCUyQyUyMGlzJTIwYSUyMGNvcHBlciUyMHN0YXR1ZSUyMG9mJTIwQ2hyaXN0JTIwd2l0aCUyMGFybXMlMjB1cHJhaXNlZCUyMHdpdGglMjB0aGUlMjBsZWdlbmQlMjAlMjJWZW5pdGUlMjBBZCUyME1lJTIwT21uZXMlMjIuJTIwTmV4dCUyMHRvJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwaXMlMjB0aGUlMjBCYXNpbGljYSUyMG9mJTIwdGhlJTIwU2FjcmVkJTIwSGVhcnQuJTIwSW1tZWRpYXRlbHklMjBiZWhpbmQlMjB0aGUlMjBiYXNpbGljYSUyMGlzJTIwdGhlJTIwR3JvdHRvJTJDJTIwYSUyME1hcmlhbiUyMHBsYWNlJTIwb2YlMjBwcmF5ZXIlMjBhbmQlMjByZWZsZWN0aW9uLiUyMEl0JTIwaXMlMjBhJTIwcmVwbGljYSUyMG9mJTIwdGhlJTIwZ3JvdHRvJTIwYXQlMjBMb3VyZGVzJTJDJTIwRnJhbmNlJTIwd2hlcmUlMjB0aGUlMjBWaXJnaW4lMjBNYXJ5JTIwcmVwdXRlZGx5JTIwYXBwZWFyZWQlMjB0byUyMFNhaW50JTIwQmVybmFkZXR0ZSUyMFNvdWJpcm91cyUyMGluJTIwMTg1OC4lMjBBdCUyMHRoZSUyMGVuZCUyMG9mJTIwdGhlJTIwbWFpbiUyMGRyaXZlJTIwKGFuZCUyMGluJTIwYSUyMGRpcmVjdCUyMGxpbmUlMjB0aGF0JTIwY29ubmVjdHMlMjB0aHJvdWdoJTIwMyUyMHN0YXR1ZXMlMjBhbmQlMjB0aGUlMjBHb2xkJTIwRG9tZSklMkMlMjBpcyUyMGElMjBzaW1wbGUlMkMlMjBtb2Rlcm4lMjBzdG9uZSUyMHN0YXR1ZSUyMG9mJTIwTWFyeS4nJTBBJTIzJTIwU3VyJTIwbGUlMjBwbGFuJTIwYXJjaGl0ZWN0dXJhbCUyQyUyMGwnJUMzJUE5Y29sZSUyMGElMjB1biUyMGNhcmFjdCVDMyVBOHJlJTIwY2F0aG9saXF1ZS4lMjBBdSUyMHNvbW1ldCUyMGR1JTIwZCVDMyVCNG1lJTIwZG9yJUMzJUE5JTIwZHUlMjBiJUMzJUEydGltZW50JTIwcHJpbmNpcGFsJTIwc2UlMjB0cm91dmUlMjB1bmUlMjBzdGF0dWUlMjBkb3IlQzMlQTllJTIwZGUlMjBsYSUyMFZpZXJnZSUyME1hcmllLiUyMEltbSVDMyVBOWRpYXRlbWVudCUyMGRldmFudCUyMGxlJTIwYiVDMyVBMnRpbWVudCUyMHByaW5jaXBhbCUyMGV0JTIwZmFjZSUyMCVDMyVBMCUyMGx1aSUyQyUyMHNlJTIwdHJvdXZlJTIwdW5lJTIwc3RhdHVlJTIwZW4lMjBjdWl2cmUlMjBkdSUyMENocmlzdCUyQyUyMGxlcyUyMGJyYXMlMjBsZXYlQzMlQTlzJTJDJTIwYXZlYyUyMGxhJTIwbCVDMyVBOWdlbmRlJTIwJTIyVmVuaXRlJTIwQWQlMjBNZSUyME9tbmVzJTIyLiUyMCVDMyU4MCUyMGMlQzMlQjR0JUMzJUE5JTIwZHUlMjBiJUMzJUEydGltZW50JTIwcHJpbmNpcGFsJTIwc2UlMjB0cm91dmUlMjBsYSUyMGJhc2lsaXF1ZSUyMGR1JTIwU2FjciVDMyVBOS1DJUM1JTkzdXIuJTIwSW1tJUMzJUE5ZGlhdGVtZW50JTIwZGVycmklQzMlQThyZSUyMGxhJTIwYmFzaWxpcXVlJTIwc2UlMjB0cm91dmUlMjBsYSUyMEdyb3R0ZSUyQyUyMHVuJTIwbGlldSUyMG1hcmlhbCUyMGRlJTIwcHJpJUMzJUE4cmUlMjBldCUyMGRlJTIwciVDMyVBOWZsZXhpb24uJTIwSWwlMjBzJ2FnaXQlMjBkJ3VuZSUyMHIlQzMlQTlwbGlxdWUlMjBkZSUyMGxhJTIwZ3JvdHRlJTIwZGUlMjBMb3VyZGVzJTJDJTIwZW4lMjBGcmFuY2UlMkMlMjBvJUMzJUI5JTIwbGElMjBWaWVyZ2UlMjBNYXJpZSUyMHNlcmFpdCUyMGFwcGFydWUlMjAlQzMlQTAlMjBTYWludGUlMjBCZXJuYWRldHRlJTIwU291Ymlyb3VzJTIwZW4lMjAxODU4LiUyMEF1JTIwYm91dCUyMGRlJTIwbCdhbGwlQzMlQTllJTIwcHJpbmNpcGFsZSUyMChldCUyMGRhbnMlMjB1bmUlMjBsaWduZSUyMGRpcmVjdGUlMjBxdWklMjBwYXNzZSUyMHBhciUyMDMlMjBzdGF0dWVzJTIwZXQlMjBsZSUyMEQlQzMlQjRtZSUyMGQnb3IpJTJDJTIwc2UlMjB0cm91dmUlMjB1bmUlMjBzdGF0dWUlMjBkZSUyMHBpZXJyZSUyMHNpbXBsZSUyMGV0JTIwbW9kZXJuZSUyMGRlJTIwTWFyaWUnLiUwQVF1ZXN0aW9uJTNBJTIwJ1RvJTIwd2hvbSUyMGRpZCUyMHRoZSUyMFZpcmdpbiUyME1hcnklMjBhbGxlZ2VkbHklMjBhcHBlYXIlMjBpbiUyMDE4NTglMjBpbiUyMExvdXJkZXMlMjBGcmFuY2UlM0YnJTIwJTBBJTIzJTIwQSUyMHF1aSUyMGxhJTIwVmllcmdlJTIwTWFyaWUlMjBzZXJhaXQtZWxsZSUyMGFwcGFydWUlMjBlbiUyMDE4NTglMjAlQzMlQTAlMjBMb3VyZGVzJTJDJTIwZW4lMjBGcmFuY2UlMjAlM0YlMEFBbnN3ZXIlM0ElMjAlN0IndGV4dCclM0ElMjAlNUInU2FpbnQlMjBCZXJuYWRldHRlJTIwU291Ymlyb3VzJyU1RCUyQyUyMCdhbnN3ZXJfc3RhcnQnJTNBJTIwJTVCNTE1JTVEJTdE",highlighted:`Context: <span class="hljs-string">'Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend "Venite Ad Me Omnes". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.'</span> | |
| <span class="hljs-comment"># Sur le plan architectural, l'école a un caractère catholique. Au sommet du dôme doré du bâtiment principal se trouve une statue dorée de la Vierge Marie. Immédiatement devant le bâtiment principal et face à lui, se trouve une statue en cuivre du Christ, les bras levés, avec la légende "Venite Ad Me Omnes". À côté du bâtiment principal se trouve la basilique du Sacré-Cœur. Immédiatement derrière la basilique se trouve la Grotte, un lieu marial de prière et de réflexion. Il s'agit d'une réplique de la grotte de Lourdes, en France, où la Vierge Marie serait apparue à Sainte Bernadette Soubirous en 1858. Au bout de l'allée principale (et dans une ligne directe qui passe par 3 statues et le Dôme d'or), se trouve une statue de pierre simple et moderne de Marie'.</span> | |
| Question: <span class="hljs-string">'To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?'</span> | |
| <span class="hljs-comment"># A qui la Vierge Marie serait-elle apparue en 1858 à Lourdes, en France ?</span> | |
| Answer: {<span class="hljs-string">'text'</span>: [<span class="hljs-string">'Saint Bernadette Soubirous'</span>], <span class="hljs-string">'answer_start'</span>: [<span class="hljs-number">515</span>]}`,wrap:!1}}),pe=new I({props:{code:"cmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQuZmlsdGVyKGxhbWJkYSUyMHglM0ElMjBsZW4oeCU1QiUyMmFuc3dlcnMlMjIlNUQlNUIlMjJ0ZXh0JTIyJTVEKSUyMCElM0QlMjAxKQ==",highlighted:'raw_datasets[<span class="hljs-string">"train"</span>].<span class="hljs-built_in">filter</span>(<span class="hljs-keyword">lambda</span> x: <span class="hljs-built_in">len</span>(x[<span class="hljs-string">"answers"</span>][<span class="hljs-string">"text"</span>]) != <span class="hljs-number">1</span>)',wrap:!1}}),Xe=new I({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidpZCclMkMlMjAndGl0bGUnJTJDJTIwJ2NvbnRleHQnJTJDJTIwJ3F1ZXN0aW9uJyUyQyUyMCdhbnN3ZXJzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMCUwQSU3RCk=",highlighted:`Dataset({ | |
| features: [<span class="hljs-string">'id'</span>, <span class="hljs-string">'title'</span>, <span class="hljs-string">'context'</span>, <span class="hljs-string">'question'</span>, <span class="hljs-string">'answers'</span>], | |
| num_rows: <span class="hljs-number">0</span> | |
| })`,wrap:!1}}),Ae=new I({props:{code:"cHJpbnQocmF3X2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCU1QjAlNUQlNUIlMjJhbnN3ZXJzJTIyJTVEKSUwQXByaW50KHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQlNUIyJTVEJTVCJTIyYW5zd2VycyUyMiU1RCk=",highlighted:`<span class="hljs-built_in">print</span>(raw_datasets[<span class="hljs-string">"validation"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"answers"</span>]) | |
| <span class="hljs-built_in">print</span>(raw_datasets[<span class="hljs-string">"validation"</span>][<span class="hljs-number">2</span>][<span class="hljs-string">"answers"</span>])`,wrap:!1}}),P=new I({props:{code:"JTdCJ3RleHQnJTNBJTIwJTVCJ0RlbnZlciUyMEJyb25jb3MnJTJDJTIwJ0RlbnZlciUyMEJyb25jb3MnJTJDJTIwJ0RlbnZlciUyMEJyb25jb3MnJTVEJTJDJTIwJ2Fuc3dlcl9zdGFydCclM0ElMjAlNUIxNzclMkMlMjAxNzclMkMlMjAxNzclNUQlN0QlMEElN0IndGV4dCclM0ElMjAlNUInU2FudGElMjBDbGFyYSUyQyUyMENhbGlmb3JuaWEnJTJDJTIwJTIyTGV2aSdzJTIwU3RhZGl1bSUyMiUyQyUyMCUyMkxldmkncyUyMFN0YWRpdW0lMjBpbiUyMHRoZSUyMFNhbiUyMEZyYW5jaXNjbyUyMEJheSUyMEFyZWElMjBhdCUyMFNhbnRhJTIwQ2xhcmElMkMlMjBDYWxpZm9ybmlhLiUyMiU1RCUyQyUyMCdhbnN3ZXJfc3RhcnQnJTNBJTIwJTVCNDAzJTJDJTIwMzU1JTJDJTIwMzU1JTVEJTdE",highlighted:`{<span class="hljs-string">'text'</span>: [<span class="hljs-string">'Denver Broncos'</span>, <span class="hljs-string">'Denver Broncos'</span>, <span class="hljs-string">'Denver Broncos'</span>], <span class="hljs-string">'answer_start'</span>: [<span class="hljs-number">177</span>, <span class="hljs-number">177</span>, <span class="hljs-number">177</span>]} | |
| {<span class="hljs-string">'text'</span>: [<span class="hljs-string">'Santa Clara, California'</span>, <span class="hljs-string">"Levi's Stadium"</span>, <span class="hljs-string">"Levi's Stadium in the San Francisco Bay Area at Santa Clara, California."</span>], <span class="hljs-string">'answer_start'</span>: [<span class="hljs-number">403</span>, <span class="hljs-number">355</span>, <span class="hljs-number">355</span>]}`,wrap:!1}}),pl=new I({props:{code:"cHJpbnQocmF3X2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCU1QjIlNUQlNUIlMjJjb250ZXh0JTIyJTVEKSUwQXByaW50KHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQlNUIyJTVEJTVCJTIycXVlc3Rpb24lMjIlNUQp",highlighted:`<span class="hljs-built_in">print</span>(raw_datasets[<span class="hljs-string">"validation"</span>][<span class="hljs-number">2</span>][<span class="hljs-string">"context"</span>]) | |
| <span class="hljs-built_in">print</span>(raw_datasets[<span class="hljs-string">"validation"</span>][<span class="hljs-number">2</span>][<span class="hljs-string">"question"</span>])`,wrap:!1}}),ul=new I({props:{code:"J1N1cGVyJTIwQm93bCUyMDUwJTIwd2FzJTIwYW4lMjBBbWVyaWNhbiUyMGZvb3RiYWxsJTIwZ2FtZSUyMHRvJTIwZGV0ZXJtaW5lJTIwdGhlJTIwY2hhbXBpb24lMjBvZiUyMHRoZSUyME5hdGlvbmFsJTIwRm9vdGJhbGwlMjBMZWFndWUlMjAoTkZMKSUyMGZvciUyMHRoZSUyMDIwMTUlMjBzZWFzb24uJTIwVGhlJTIwQW1lcmljYW4lMjBGb290YmFsbCUyMENvbmZlcmVuY2UlMjAoQUZDKSUyMGNoYW1waW9uJTIwRGVudmVyJTIwQnJvbmNvcyUyMGRlZmVhdGVkJTIwdGhlJTIwTmF0aW9uYWwlMjBGb290YmFsbCUyMENvbmZlcmVuY2UlMjAoTkZDKSUyMGNoYW1waW9uJTIwQ2Fyb2xpbmElMjBQYW50aGVycyUyMDI0JUUyJTgwJTkzMTAlMjB0byUyMGVhcm4lMjB0aGVpciUyMHRoaXJkJTIwU3VwZXIlMjBCb3dsJTIwdGl0bGUuJTIwVGhlJTIwZ2FtZSUyMHdhcyUyMHBsYXllZCUyMG9uJTIwRmVicnVhcnklMjA3JTJDJTIwMjAxNiUyQyUyMGF0JTIwTGV2aSU1QydzJTIwU3RhZGl1bSUyMGluJTIwdGhlJTIwU2FuJTIwRnJhbmNpc2NvJTIwQmF5JTIwQXJlYSUyMGF0JTIwU2FudGElMjBDbGFyYSUyQyUyMENhbGlmb3JuaWEuJTIwQXMlMjB0aGlzJTIwd2FzJTIwdGhlJTIwNTB0aCUyMFN1cGVyJTIwQm93bCUyQyUyMHRoZSUyMGxlYWd1ZSUyMGVtcGhhc2l6ZWQlMjB0aGUlMjAlMjJnb2xkZW4lMjBhbm5pdmVyc2FyeSUyMiUyMHdpdGglMjB2YXJpb3VzJTIwZ29sZC10aGVtZWQlMjBpbml0aWF0aXZlcyUyQyUyMGFzJTIwd2VsbCUyMGFzJTIwdGVtcG9yYXJpbHklMjBzdXNwZW5kaW5nJTIwdGhlJTIwdHJhZGl0aW9uJTIwb2YlMjBuYW1pbmclMjBlYWNoJTIwU3VwZXIlMjBCb3dsJTIwZ2FtZSUyMHdpdGglMjBSb21hbiUyMG51bWVyYWxzJTIwKHVuZGVyJTIwd2hpY2glMjB0aGUlMjBnYW1lJTIwd291bGQlMjBoYXZlJTIwYmVlbiUyMGtub3duJTIwYXMlMjAlMjJTdXBlciUyMEJvd2wlMjBMJTIyKSUyQyUyMHNvJTIwdGhhdCUyMHRoZSUyMGxvZ28lMjBjb3VsZCUyMHByb21pbmVudGx5JTIwZmVhdHVyZSUyMHRoZSUyMEFyYWJpYyUyMG51bWVyYWxzJTIwNTAuJyUwQSUyMyUyMExlJTIwU3VwZXIlMjBCb3dsJTIwNTAlMjAlQzMlQTl0YWl0JTIwdW4lMjBtYXRjaCUyMGRlJTIwZm9vdGJhbGwlMjBhbSVDMyVBOXJpY2FpbiUyMHZpc2FudCUyMCVDMyVBMCUyMGQlQzMlQTl0ZXJtaW5lciUyMGxlJTIwY2hhbXBpb24lMjBkZSUyMGxhJTIwTmF0aW9uYWwlMjBGb290YmFsbCUyMExlYWd1ZSUyMChORkwpJTIwcG91ciUyMGxhJTIwc2Fpc29uJTIwMjAxNS4lMjBMZXMlMjBEZW52ZXIlMjBCcm9uY29zJTJDJTIwY2hhbXBpb25zJTIwZGUlMjBsYSUyMENvbmYlQzMlQTlyZW5jZSUyMGRlJTIwZm9vdGJhbGwlMjBhbSVDMyVBOXJpY2FpbiUyMChBRkMpJTJDJTIwb250JTIwYmF0dHUlMjBsZXMlMjBDYXJvbGluYSUyMFBhbnRoZXJzJTJDJTIwY2hhbXBpb25zJTIwZGUlMjBsYSUyMENvbmYlQzMlQTlyZW5jZSUyMG5hdGlvbmFsZSUyMGRlJTIwZm9vdGJhbGwlMjAoTkZDKSUyQyUyMDI0JTIwJUMzJUEwJTIwMTAlMkMlMjBwb3VyJTIwcmVtcG9ydGVyJTIwbGV1ciUyMHRyb2lzaSVDMyVBOG1lJTIwdGl0cmUlMjBkZSUyMFN1cGVyJTIwQm93bC4lMjBMZSUyMG1hdGNoJTIwcydlc3QlMjBkJUMzJUE5cm91bCVDMyVBOSUyMGxlJTIwNyUyMGYlQzMlQTl2cmllciUyMDIwMTYlMjBhdSUyMExldmklNUMncyUyMFN0YWRpdW0lMkMlMjBkYW5zJTIwbGElMjBiYWllJTIwZGUlMjBTYW4lMjBGcmFuY2lzY28lMkMlMjAlQzMlQTAlMjBTYW50YSUyMENsYXJhJTJDJTIwZW4lMjBDYWxpZm9ybmllLiUyMENvbW1lJTIwaWwlMjBzJ2FnaXNzYWl0JTIwZHUlMjA1MGUlMjBTdXBlciUyMEJvd2wlMkMlMjBsYSUyMGxpZ3VlJTIwYSUyMG1pcyUyMGwnYWNjZW50JTIwc3VyJTIwbCclMjIlMjBhbm5pdmVyc2FpcmUlMjBkb3IlQzMlQTklMjAlMjIlMjBhdmVjJTIwZGl2ZXJzZXMlMjBpbml0aWF0aXZlcyUyMHN1ciUyMGxlJTIwdGglQzMlQThtZSUyMGRlJTIwbCdvciUyQyUyMGFpbnNpJTIwcXUnZW4lMjBzdXNwZW5kYW50JTIwdGVtcG9yYWlyZW1lbnQlMjBsYSUyMHRyYWRpdGlvbiUyMGRlJTIwbm9tbWVyJTIwY2hhcXVlJTIwbWF0Y2glMjBkdSUyMFN1cGVyJTIwQm93bCUyMGF2ZWMlMjBkZXMlMjBjaGlmZnJlcyUyMHJvbWFpbnMlMjAoZW4lMjB2ZXJ0dSUyMGRlJTIwbGFxdWVsbGUlMjBsZSUyMG1hdGNoJTIwYXVyYWl0JTIwJUMzJUE5dCVDMyVBOSUyMGFwcGVsJUMzJUE5JTIwJTIyJTIwU3VwZXIlMjBCb3dsJTIwTCUyMCUyMiklMkMlMjBhZmluJTIwcXVlJTIwbGUlMjBsb2dvJTIwcHVpc3NlJTIwbWV0dHJlJTIwZW4lMjAlQzMlQTl2aWRlbmNlJTIwbGVzJTIwY2hpZmZyZXMlMjBhcmFiZXMlMjA1MC4nJyUwQSdXaGVyZSUyMGRpZCUyMFN1cGVyJTIwQm93bCUyMDUwJTIwdGFrZSUyMHBsYWNlJTNGJyUyMCUwQSUyMyUyME8lQzMlQjklMjBhJTIwZXUlMjBsaWV1JTIwbGUlMjBTdXBlciUyMEJvd2wlMjA1MCUyMCUzRg==",highlighted:`<span class="hljs-string">'Super Bowl 50 was an American football game to determine the champion of the National Football League (NFL) for the 2015 season. The American Football Conference (AFC) champion Denver Broncos defeated the National Football Conference (NFC) champion Carolina Panthers 24–10 to earn their third Super Bowl title. The game was played on February 7, 2016, at Levi\\'s Stadium in the San Francisco Bay Area at Santa Clara, California. As this was the 50th Super Bowl, the league emphasized the "golden anniversary" with various gold-themed initiatives, as well as temporarily suspending the tradition of naming each Super Bowl game with Roman numerals (under which the game would have been known as "Super Bowl L"), so that the logo could prominently feature the Arabic numerals 50.'</span> | |
| <span class="hljs-comment"># Le Super Bowl 50 était un match de football américain visant à déterminer le champion de la National Football League (NFL) pour la saison 2015. Les Denver Broncos, champions de la Conférence de football américain (AFC), ont battu les Carolina Panthers, champions de la Conférence nationale de football (NFC), 24 à 10, pour remporter leur troisième titre de Super Bowl. Le match s'est déroulé le 7 février 2016 au Levi\\'s Stadium, dans la baie de San Francisco, à Santa Clara, en Californie. Comme il s'agissait du 50e Super Bowl, la ligue a mis l'accent sur l'" anniversaire doré " avec diverses initiatives sur le thème de l'or, ainsi qu'en suspendant temporairement la tradition de nommer chaque match du Super Bowl avec des chiffres romains (en vertu de laquelle le match aurait été appelé " Super Bowl L "), afin que le logo puisse mettre en évidence les chiffres arabes 50.''</span> | |
| <span class="hljs-string">'Where did Super Bowl 50 take place?'</span> | |
| <span class="hljs-comment"># Où a eu lieu le Super Bowl 50 ?</span>`,wrap:!1}}),cl=new le({props:{title:"Traitement des données d’entraînement",local:"traitement-des-données-dentraînement",headingTag:"h3"}}),yl=new La({props:{id:"qgaM0weJHpA"}}),Ul=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLWNhc2VkJTIyJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| model_checkpoint = <span class="hljs-string">"bert-base-cased"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)`,wrap:!1}}),jl=new I({props:{code:"dG9rZW5pemVyLmlzX2Zhc3Q=",highlighted:"tokenizer.is_fast",wrap:!1}}),wl=new I({props:{code:"VHJ1ZQ==",highlighted:'<span class="hljs-literal">True</span>',wrap:!1}}),Il=new I({props:{code:"JTVCQ0xTJTVEJTIwcXVlc3Rpb24lMjAlNUJTRVAlNUQlMjBjb250ZXh0JTIwJTVCU0VQJTVE",highlighted:'<span class="hljs-selector-attr">[CLS]</span> question <span class="hljs-selector-attr">[SEP]</span> context <span class="hljs-selector-attr">[SEP]</span>',wrap:!1}}),Cl=new I({props:{code:"Y29udGV4dCUyMCUzRCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMCU1RCU1QiUyMmNvbnRleHQlMjIlNUQlMEFxdWVzdGlvbiUyMCUzRCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMCU1RCU1QiUyMnF1ZXN0aW9uJTIyJTVEJTBBJTBBaW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHF1ZXN0aW9uJTJDJTIwY29udGV4dCklMEF0b2tlbml6ZXIuZGVjb2RlKGlucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCk=",highlighted:`context = raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"context"</span>] | |
| question = raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"question"</span>] | |
| inputs = tokenizer(question, context) | |
| tokenizer.decode(inputs[<span class="hljs-string">"input_ids"</span>])`,wrap:!1}}),fl=new I({props:{code:"JyU1QkNMUyU1RCUyMFRvJTIwd2hvbSUyMGRpZCUyMHRoZSUyMFZpcmdpbiUyME1hcnklMjBhbGxlZ2VkbHklMjBhcHBlYXIlMjBpbiUyMDE4NTglMjBpbiUyMExvdXJkZXMlMjBGcmFuY2UlM0YlMjAlNUJTRVAlNUQlMjBBcmNoaXRlY3R1cmFsbHklMkMlMjAnJTBBJ3RoZSUyMHNjaG9vbCUyMGhhcyUyMGElMjBDYXRob2xpYyUyMGNoYXJhY3Rlci4lMjBBdG9wJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTVDJ3MlMjBnb2xkJTIwZG9tZSUyMGlzJTIwYSUyMGdvbGRlbiUyMHN0YXR1ZSUyMG9mJTIwdGhlJTIwVmlyZ2luJTIwJyUwQSdNYXJ5LiUyMEltbWVkaWF0ZWx5JTIwaW4lMjBmcm9udCUyMG9mJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwYW5kJTIwZmFjaW5nJTIwaXQlMkMlMjBpcyUyMGElMjBjb3BwZXIlMjBzdGF0dWUlMjBvZiUyMENocmlzdCUyMHdpdGglMjBhcm1zJTIwJyUwQSd1cHJhaXNlZCUyMHdpdGglMjB0aGUlMjBsZWdlbmQlMjAlMjIlMjBWZW5pdGUlMjBBZCUyME1lJTIwT21uZXMlMjAlMjIuJTIwTmV4dCUyMHRvJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwaXMlMjB0aGUlMjBCYXNpbGljYSUyMG9mJTIwdGhlJTIwU2FjcmVkJTIwJyUwQSdIZWFydC4lMjBJbW1lZGlhdGVseSUyMGJlaGluZCUyMHRoZSUyMGJhc2lsaWNhJTIwaXMlMjB0aGUlMjBHcm90dG8lMkMlMjBhJTIwTWFyaWFuJTIwcGxhY2UlMjBvZiUyMHByYXllciUyMGFuZCUyMHJlZmxlY3Rpb24uJTIwSXQlMjBpcyUyMGElMjAnJTBBJ3JlcGxpY2ElMjBvZiUyMHRoZSUyMGdyb3R0byUyMGF0JTIwTG91cmRlcyUyQyUyMEZyYW5jZSUyMHdoZXJlJTIwdGhlJTIwVmlyZ2luJTIwTWFyeSUyMHJlcHV0ZWRseSUyMGFwcGVhcmVkJTIwdG8lMjBTYWludCUyMEJlcm5hZGV0dGUlMjAnJTBBJ1NvdWJpcm91cyUyMGluJTIwMTg1OC4lMjBBdCUyMHRoZSUyMGVuZCUyMG9mJTIwdGhlJTIwbWFpbiUyMGRyaXZlJTIwKCUyMGFuZCUyMGluJTIwYSUyMGRpcmVjdCUyMGxpbmUlMjB0aGF0JTIwY29ubmVjdHMlMjB0aHJvdWdoJTIwMyUyMHN0YXR1ZXMlMjAnJTBBJ2FuZCUyMHRoZSUyMEdvbGQlMjBEb21lJTIwKSUyQyUyMGlzJTIwYSUyMHNpbXBsZSUyQyUyMG1vZGVybiUyMHN0b25lJTIwc3RhdHVlJTIwb2YlMjBNYXJ5LiUyMCU1QlNFUCU1RCclMEElMEEnJTVCQ0xTJTVEJTIwQSUyMHF1aSUyMGxhJTIwVmllcmdlJTIwTWFyaWUlMjBzZXJhaXQtZWxsZSUyMGFwcGFydWUlMjBlbiUyMDE4NTglMjAlQzMlQTAlMjBMb3VyZGVzJTIwZW4lMjBGcmFuY2UlMjAlM0YlMjAlNUJTRVAlNUQlMjBBcmNoaXRlY3R1cmFsZW1lbnQlMkMlMjAnJTBBJ2wlMjAlQzMlQTljb2xlJTIwYSUyMHVuJTIwY2FyYWN0JUMzJUE4cmUlMjBjYXRob2xpcXVlLiUyMEF1JTIwc29tbWV0JTIwZHUlMjBkJUMzJUI0bWUlMjBkb3IlQzMlQTklMjBkdSUyMGIlQzMlQTJ0aW1lbnQlMjBwcmluY2lwYWwlMjBzZSUyMHRyb3V2ZSUyMHVuZSUyMHN0YXR1ZSUyMGRvciVDMyVBOWUlMjBkZSUyMGxhJTIwVmllcmdlJTIwJyUwQSdNYXJpZS4lMjBJbW0lQzMlQTlkaWF0ZW1lbnQlMjBkZXZhbnQlMjBsZSUyMGIlQzMlQTJ0aW1lbnQlMjBwcmluY2lwYWwlMjBldCUyMGZhY2UlMjAlQzMlQTAlMjBsdWklMkMlMjBzZSUyMHRyb3V2ZSUyMHVuZSUyMHN0YXR1ZSUyMGVuJTIwY3VpdnJlJTIwZHUlMjBDaHJpc3QlMkMlMjBsZXMlMjBicmFzJTIwJyUwQSdsZXYlQzMlQTlzJTIwYXZlYyUyMGxhJTIwbCVDMyVBOWdlbmRlJTIwJTIyJTIwVmVuaXRlJTIwQWQlMjBNZSUyME9tbmVzJTIwJTIyLiUyMEElMjBjJUMzJUI0dCVDMyVBOSUyMGR1JTIwYiVDMyVBMnRpbWVudCUyMHByaW5jaXBhbCUyMHNlJTIwdHJvdXZlJTIwbGElMjBiYXNpbGlxdWUlMjBkdSUyMFNhY3IlQzMlQTklMjAnJTBBJ0MlQzUlOTN1ci4lMjBJbW0lQzMlQTlkaWF0ZW1lbnQlMjBkZXJyaSVDMyVBOHJlJTIwbGElMjBiYXNpbGlxdWUlMjBzZSUyMHRyb3V2ZSUyMGxhJTIwR3JvdHRlJTJDJTIwdW4lMjBsaWV1JTIwbWFyaWFsJTIwZGUlMjBwcmklQzMlQThyZSUyMGV0JTIwZGUlMjByJUMzJUE5ZmxleGlvbi4lMjBJbCUyMHMnYWdpdCUyMGQndW5lJTIwJyUwQSdyJUMzJUE5cGxpcXVlJTIwZGUlMjBsYSUyMGdyb3R0ZSUyMGRlJTIwTG91cmRlcyUyQyUyMGVuJTIwRnJhbmNlJTJDJTIwbyVDMyVCOSUyMGxhJTIwVmllcmdlJTIwTWFyaWUlMjBzZXJhaXQlMjBhcHBhcnVlJTIwJUMzJUEwJTIwU2FpbnRlJTIwQmVybmFkZXR0ZSUyMCclMEEnU291Ymlyb3VzJTIwZW4lMjAxODU4LiUyMEF1JTIwYm91dCUyMGRlJTIwbCdhbGwlQzMlQTllJTIwcHJpbmNpcGFsZSUyMCglMjBldCUyMGVuJTIwbGlnbmUlMjBkaXJlY3RlJTIwcXVpJTIwcGFzc2UlMjBwYXIlMjAzJTIwc3RhdHVlcyUyMCclMEEnZXQlMjBsZSUyMEQlQzMlQjRtZSUyMGQnb3IpJTJDJTIwc2UlMjB0cm91dmUlMjB1bmUlMjBzdGF0dWUlMjBkZSUyME1hcmllJTIwZW4lMjBwaWVycmUlMkMlMjBzaW1wbGUlMjBldCUyMG1vZGVybmUuJTIwJTVCU0VQJTVEJw==",highlighted:`<span class="hljs-string">'[CLS] To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France? [SEP] Architecturally, '</span> | |
| <span class="hljs-string">'the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin '</span> | |
| <span class="hljs-string">'Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms '</span> | |
| <span class="hljs-string">'upraised with the legend " Venite Ad Me Omnes ". Next to the Main Building is the Basilica of the Sacred '</span> | |
| <span class="hljs-string">'Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a '</span> | |
| <span class="hljs-string">'replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette '</span> | |
| <span class="hljs-string">'Soubirous in 1858. At the end of the main drive ( and in a direct line that connects through 3 statues '</span> | |
| <span class="hljs-string">'and the Gold Dome ), is a simple, modern stone statue of Mary. [SEP]'</span> | |
| <span class="hljs-string">'[CLS] A qui la Vierge Marie serait-elle apparue en 1858 à Lourdes en France ? [SEP] Architecturalement, '</span> | |
| <span class="hljs-string">'l école a un caractère catholique. Au sommet du dôme doré du bâtiment principal se trouve une statue dorée de la Vierge '</span> | |
| <span class="hljs-string">'Marie. Immédiatement devant le bâtiment principal et face à lui, se trouve une statue en cuivre du Christ, les bras '</span> | |
| <span class="hljs-string">'levés avec la légende " Venite Ad Me Omnes ". A côté du bâtiment principal se trouve la basilique du Sacré '</span> | |
| <span class="hljs-string">'Cœur. Immédiatement derrière la basilique se trouve la Grotte, un lieu marial de prière et de réflexion. Il s'</span>agit d<span class="hljs-string">'une '</span> | |
| <span class="hljs-string">'réplique de la grotte de Lourdes, en France, où la Vierge Marie serait apparue à Sainte Bernadette '</span> | |
| <span class="hljs-string">'Soubirous en 1858. Au bout de l'</span><span class="hljs-built_in">all</span>ée principale ( et en ligne directe qui passe par <span class="hljs-number">3</span> statues <span class="hljs-string">' | |
| '</span>et le Dôme d<span class="hljs-string">'or), se trouve une statue de Marie en pierre, simple et moderne. [SEP]'</span>`,wrap:!1}}),vl=new I({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMHF1ZXN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwY29udGV4dCUyQyUwQSUyMCUyMCUyMCUyMG1heF9sZW5ndGglM0QxMDAlMkMlMEElMjAlMjAlMjAlMjB0cnVuY2F0aW9uJTNEJTIyb25seV9zZWNvbmQlMjIlMkMlMEElMjAlMjAlMjAlMjBzdHJpZGUlM0Q1MCUyQyUwQSUyMCUyMCUyMCUyMHJldHVybl9vdmVyZmxvd2luZ190b2tlbnMlM0RUcnVlJTJDJTBBKSUwQSUwQWZvciUyMGlkcyUyMGluJTIwaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQodG9rZW5pemVyLmRlY29kZShpZHMpKQ==",highlighted:`inputs = tokenizer( | |
| question, | |
| context, | |
| max_length=<span class="hljs-number">100</span>, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=<span class="hljs-number">50</span>, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| ) | |
| <span class="hljs-keyword">for</span> ids <span class="hljs-keyword">in</span> inputs[<span class="hljs-string">"input_ids"</span>]: | |
| <span class="hljs-built_in">print</span>(tokenizer.decode(ids))`,wrap:!1}}),xl=new I({props:{code:"JyU1QkNMUyU1RCUyMFRvJTIwd2hvbSUyMGRpZCUyMHRoZSUyMFZpcmdpbiUyME1hcnklMjBhbGxlZ2VkbHklMjBhcHBlYXIlMjBpbiUyMDE4NTglMjBpbiUyMExvdXJkZXMlMjBGcmFuY2UlM0YlMjAlNUJTRVAlNUQlMjBBcmNoaXRlY3R1cmFsbHklMkMlMjB0aGUlMjBzY2hvb2wlMjBoYXMlMjBhJTIwQ2F0aG9saWMlMjBjaGFyYWN0ZXIuJTIwQXRvcCUyMHRoZSUyME1haW4lMjBCdWlsZGluZyU1QydzJTIwZ29sZCUyMGRvbWUlMjBpcyUyMGElMjBnb2xkZW4lMjBzdGF0dWUlMjBvZiUyMHRoZSUyMFZpcmdpbiUyME1hcnkuJTIwSW1tZWRpYXRlbHklMjBpbiUyMGZyb250JTIwb2YlMjB0aGUlMjBNYWluJTIwQnVpbGRpbmclMjBhbmQlMjBmYWNpbmclMjBpdCUyQyUyMGlzJTIwYSUyMGNvcHBlciUyMHN0YXR1ZSUyMG9mJTIwQ2hyaXN0JTIwd2l0aCUyMGFybXMlMjB1cHJhaXNlZCUyMHdpdGglMjB0aGUlMjBsZWdlbmQlMjAlMjIlMjBWZW5pdGUlMjBBZCUyME1lJTIwT21uZXMlMjAlMjIuJTIwTmV4dCUyMHRvJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwaXMlMjB0aGUlMjBCYXNpbGljYSUyMG9mJTIwdGhlJTIwU2FjcmVkJTIwSGVhcnQuJTIwSW1tZWRpYXRlbHklMjBiZWhpbmQlMjB0aGUlMjBiYXNpJTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjBBJTIwcXVpJTIwbGElMjBWaWVyZ2UlMjBNYXJpZSUyMHNlcmFpdC1lbGxlJTIwYXBwYXJ1ZSUyMGVuJTIwMTg1OCUyMCVDMyVBMCUyMExvdXJkZXMlMjBlbiUyMEZyYW5jZSUyMCUzRiUyMCU1QlNFUCU1RCUyMFN1ciUyMGxlJTIwcGxhbiUyMGFyY2hpdGVjdHVyYWwlMkMlMjBsJTIwJUMzJUE5Y29sZSUyMGElMjB1biUyMGNhcmFjdCVDMyVBOHJlJTIwY2F0aG9saXF1ZS4lMjBBdSUyMHNvbW1ldCUyMGR1JTIwZCVDMyVCNG1lJTIwZG9yJUMzJUE5JTIwZHUlMjBiJUMzJUEydGltZW50JTIwcHJpbmNpcGFsJTIwc2UlMjB0cm91dmUlMjB1bmUlMjBzdGF0dWUlMjBkb3IlQzMlQTllJTIwZGUlMjBsYSUyMFZpZXJnZSUyME1hcmllLiUyMEltbSVDMyVBOWRpYXRlbWVudCUyMGRldmFudCUyMGxlJTIwYiVDMyVBMnRpbWVudCUyMHByaW5jaXBhbCUyMGV0JTIwZmFjZSUyMCVDMyVBMCUyMGx1aSUyQyUyMHNlJTIwdHJvdXZlJTIwdW5lJTIwc3RhdHVlJTIwZW4lMjBjdWl2cmUlMjBkdSUyMENocmlzdCUyQyUyMGxlcyUyMGJyYXMlMjBsZXYlQzMlQTlzJTJDJTIwYXZlYyUyMGxhJTIwbCVDMyVBOWdlbmRlJTIwJTIyJTIwVmVuaXRlJTIwQWQlMjBNZSUyME9tbmVzJTIwJTIyLiUyMCVDMyU4MCUyMGMlQzMlQjR0JUMzJUE5JTIwZHUlMjBiJUMzJUEydGltZW50JTIwcHJpbmNpcGFsJTIwc2UlMjB0cm91dmUlMjBsYSUyMGJhc2lsaXF1ZSUyMGR1JTIwU2FjciVDMyVBOS1DJUM1JTkzdXIuJTIwSW1tJUMzJUE5ZGlhdGVtZW50JTIwZGVycmklQzMlQThyZSUyMGxhJTIwYmFzaSUyMCU1QlNFUCU1RCclMEElMEEnJTVCQ0xTJTVEJTIwVG8lMjB3aG9tJTIwZGlkJTIwdGhlJTIwVmlyZ2luJTIwTWFyeSUyMGFsbGVnZWRseSUyMGFwcGVhciUyMGluJTIwMTg1OCUyMGluJTIwTG91cmRlcyUyMEZyYW5jZSUzRiUyMCU1QlNFUCU1RCUyMHRoZSUyME1haW4lMjBCdWlsZGluZyUyMGFuZCUyMGZhY2luZyUyMGl0JTJDJTIwaXMlMjBhJTIwY29wcGVyJTIwc3RhdHVlJTIwb2YlMjBDaHJpc3QlMjB3aXRoJTIwYXJtcyUyMHVwcmFpc2VkJTIwd2l0aCUyMHRoZSUyMGxlZ2VuZCUyMCUyMiUyMFZlbml0ZSUyMEFkJTIwTWUlMjBPbW5lcyUyMCUyMi4lMjBOZXh0JTIwdG8lMjB0aGUlMjBNYWluJTIwQnVpbGRpbmclMjBpcyUyMHRoZSUyMEJhc2lsaWNhJTIwb2YlMjB0aGUlMjBTYWNyZWQlMjBIZWFydC4lMjBJbW1lZGlhdGVseSUyMGJlaGluZCUyMHRoZSUyMGJhc2lsaWNhJTIwaXMlMjB0aGUlMjBHcm90dG8lMkMlMjBhJTIwTWFyaWFuJTIwcGxhY2UlMjBvZiUyMHByYXllciUyMGFuZCUyMHJlZmxlY3Rpb24uJTIwSXQlMjBpcyUyMGElMjByZXBsaWNhJTIwb2YlMjB0aGUlMjBncm90dG8lMjBhdCUyMExvdXJkZXMlMkMlMjBGcmFuY2UlMjB3aGVyZSUyMHRoZSUyMFZpcmdpbiUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwQSUyMHF1aSUyMGxhJTIwVmllcmdlJTIwTWFyaWUlMjBzZXJhaXQtZWxsZSUyMGFwcGFydWUlMjBlbiUyMDE4NTglMjAlQzMlQTAlMjBMb3VyZGVzJTIwZW4lMjBGcmFuY2UlMjAlM0YlMjAlNUJTRVAlNUQlMjBsZSUyMGIlQzMlQTJ0aW1lbnQlMjBwcmluY2lwYWwlMjBldCUyMGZhY2UlMjAlQzMlQTAlMjBsdWklMkMlMjB1bmUlMjBzdGF0dWUlMjBlbiUyMGN1aXZyZSUyMGR1JTIwQ2hyaXN0JTIwYXV4JTIwYnJhcyUyMGxldiVDMyVBOXMlMjBhdmVjJTIwbGElMjBsJUMzJUE5Z2VuZGUlMjAlMjIlMjBWZW5pdGUlMjBBZCUyME1lJTIwT21uZXMlMjAlMjIuJTIwJUMzJTgwJTIwYyVDMyVCNHQlQzMlQTklMjBkdSUyMGIlQzMlQTJ0aW1lbnQlMjBwcmluY2lwYWwlMjBzZSUyMHRyb3V2ZSUyMGxhJTIwYmFzaWxpcXVlJTIwZHUlMjBTYWNyJUMzJUE5LUMlQzUlOTN1ci4lMjBJbW0lQzMlQTlkaWF0ZW1lbnQlMjBkZXJyaSVDMyVBOHJlJTIwbGElMjBiYXNpbGlxdWUlMjBzZSUyMHRyb3V2ZSUyMGxhJTIwR3JvdHRlJTJDJTIwdW4lMjBsaWV1JTIwbWFyaWFsJTIwZGUlMjBwcmklQzMlQThyZSUyMGV0JTIwZGUlMjByJUMzJUE5ZmxleGlvbi4lMjBJbCUyMHMlMjBhZ2l0JTIwZCd1bmUlMjByJUMzJUE5cGxpcXVlJTIwZGUlMjBsYSUyMGdyb3R0ZSUyMGRlJTIwTG91cmRlcyUyQyUyMGVuJTIwRnJhbmNlJTJDJTIwbyVDMyVCOSUyMGxhJTIwVmllcmdlJTIwJTVCU0VQJTVEJyUwQSUwQSclNUJDTFMlNUQlMjBUbyUyMHdob20lMjBkaWQlMjB0aGUlMjBWaXJnaW4lMjBNYXJ5JTIwYWxsZWdlZGx5JTIwYXBwZWFyJTIwaW4lMjAxODU4JTIwaW4lMjBMb3VyZGVzJTIwRnJhbmNlJTNGJTIwJTVCU0VQJTVEJTIwTmV4dCUyMHRvJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwaXMlMjB0aGUlMjBCYXNpbGljYSUyMG9mJTIwdGhlJTIwU2FjcmVkJTIwSGVhcnQuJTIwSW1tZWRpYXRlbHklMjBiZWhpbmQlMjB0aGUlMjBiYXNpbGljYSUyMGlzJTIwdGhlJTIwR3JvdHRvJTJDJTIwYSUyME1hcmlhbiUyMHBsYWNlJTIwb2YlMjBwcmF5ZXIlMjBhbmQlMjByZWZsZWN0aW9uLiUyMEl0JTIwaXMlMjBhJTIwcmVwbGljYSUyMG9mJTIwdGhlJTIwZ3JvdHRvJTIwYXQlMjBMb3VyZGVzJTJDJTIwRnJhbmNlJTIwd2hlcmUlMjB0aGUlMjBWaXJnaW4lMjBNYXJ5JTIwcmVwdXRlZGx5JTIwYXBwZWFyZWQlMjB0byUyMFNhaW50JTIwQmVybmFkZXR0ZSUyMFNvdWJpcm91cyUyMGluJTIwMTg1OC4lMjBBdCUyMHRoZSUyMGVuZCUyMG9mJTIwdGhlJTIwbWFpbiUyMGRyaXZlJTIwKCUyMGFuZCUyMGluJTIwYSUyMGRpcmVjdCUyMGxpbmUlMjB0aGF0JTIwY29ubmVjdHMlMjB0aHJvdWdoJTIwMyUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwQSUyMHF1aSUyMGxhJTIwVmllcmdlJTIwTWFyaWUlMjBzZXJhaXQtZWxsZSUyMGFwcGFydWUlMjBlbiUyMDE4NTglMjAlQzMlQTAlMjBMb3VyZGVzJTIwZW4lMjBGcmFuY2UlMjAlM0YlMjAlNUJTRVAlNUQlMjBBJTIwYyVDMyVCNHQlQzMlQTklMjBkdSUyMGIlQzMlQTJ0aW1lbnQlMjBwcmluY2lwYWwlMjBzZSUyMHRyb3V2ZSUyMGxhJTIwYmFzaWxpcXVlJTIwZHUlMjBTYWNyJUMzJUE5LUMlQzUlOTN1ci4lMjBJbW0lQzMlQTlkaWF0ZW1lbnQlMjBkZXJyaSVDMyVBOHJlJTIwbGElMjBiYXNpbGlxdWUlMjBzZSUyMHRyb3V2ZSUyMGxhJTIwR3JvdHRlJTJDJTIwdW4lMjBsaWV1JTIwbWFyaWFsJTIwZGUlMjBwcmklQzMlQThyZSUyMGV0JTIwZGUlMjByJUMzJUE5ZmxleGlvbi4lMjBJbCUyMHMlMjBhZ2l0JTIwZCUyMHVuZSUyMHIlQzMlQTlwbGlxdWUlMjBkZSUyMGxhJTIwZ3JvdHRlJTIwZGUlMjBMb3VyZGVzJTJDJTIwZW4lMjBGcmFuY2UlMkMlMjBvJUMzJUI5JTIwbGElMjBWaWVyZ2UlMjBNYXJpZSUyMHNlcmFpdCUyMGFwcGFydWUlMjAlQzMlQTAlMjBTYWludGUlMjBCZXJuYWRldHRlJTIwU291Ymlyb3VzJTIwZW4lMjAxODU4LiUyMEF1JTIwYm91dCUyMGRlJTIwbCUyMGFsbCVDMyVBOWUlMjBwcmluY2lwYWxlJTIwKCUyMGV0JTIwZGFucyUyMHVuZSUyMGxpZ25lJTIwZGlyZWN0ZSUyMHF1aSUyMHJlbGllJTIwcGFyJTIwMyUyMCU1QlNFUCU1RCclMEElMEEnJTVCQ0xTJTVEJTIwVG8lMjB3aG9tJTIwZGlkJTIwdGhlJTIwVmlyZ2luJTIwTWFyeSUyMGFsbGVnZWRseSUyMGFwcGVhciUyMGluJTIwMTg1OCUyMGluJTIwTG91cmRlcyUyMEZyYW5jZSUzRiUyMCU1QlNFUCU1RC4lMjBJdCUyMGlzJTIwYSUyMHJlcGxpY2ElMjBvZiUyMHRoZSUyMGdyb3R0byUyMGF0JTIwTG91cmRlcyUyQyUyMEZyYW5jZSUyMHdoZXJlJTIwdGhlJTIwVmlyZ2luJTIwTWFyeSUyMHJlcHV0ZWRseSUyMGFwcGVhcmVkJTIwdG8lMjBTYWludCUyMEJlcm5hZGV0dGUlMjBTb3ViaXJvdXMlMjBpbiUyMDE4NTguJTIwQXQlMjB0aGUlMjBlbmQlMjBvZiUyMHRoZSUyMG1haW4lMjBkcml2ZSUyMCglMjBhbmQlMjBpbiUyMGElMjBkaXJlY3QlMjBsaW5lJTIwdGhhdCUyMGNvbm5lY3RzJTIwdGhyb3VnaCUyMDMlMjBzdGF0dWVzJTIwYW5kJTIwdGhlJTIwR29sZCUyMERvbWUlMjApJTJDJTIwaXMlMjBhJTIwc2ltcGxlJTJDJTIwbW9kZXJuJTIwc3RvbmUlMjBzdGF0dWUlMjBvZiUyME1hcnkuJTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjBBJTIwcXVpJTIwbGElMjBWaWVyZ2UlMjBNYXJpZSUyMGVzdC1lbGxlJTIwcHIlQzMlQTl0ZW5kdW1lbnQlMjBhcHBhcnVlJTIwZW4lMjAxODU4JTIwJUMzJUEwJTIwTG91cmRlcyUyMEZyYW5jZSUyMCUzRiUyMCU1QlNFUCU1RC4lMjBJbCUyMHMlMjBhZ2l0JTIwZCUyMHVuZSUyMHIlQzMlQTlwbGlxdWUlMjBkZSUyMGxhJTIwZ3JvdHRlJTIwZGUlMjBMb3VyZGVzJTJDJTIwZW4lMjBGcmFuY2UlMkMlMjBvJUMzJUI5JTIwbGElMjBWaWVyZ2UlMjBNYXJpZSUyMHNlcmFpdCUyMGFwcGFydWUlMjAlQzMlQTAlMjBTYWludGUlMjBCZXJuYWRldHRlJTIwU291Ymlyb3VzJTIwZW4lMjAxODU4LiUyMEF1JTIwYm91dCUyMGRlJTIwbCUyMGFsbCVDMyVBOWUlMjBwcmluY2lwYWxlJTIwKGV0JTIwZGFucyUyMHVuZSUyMGxpZ25lJTIwZGlyZWN0ZSUyMHF1aSUyMHBhc3NlJTIwcGFyJTIwMyUyMHN0YXR1ZXMlMjBldCUyMGxlJTIwRCVDMyVCNG1lJTIwZCUyMG9yKSUyQyUyMHNlJTIwdHJvdXZlJTIwdW5lJTIwc2ltcGxlJTIwc3RhdHVlJTIwZGUlMjBwaWVycmUlMjBtb2Rlcm5lJTIwZGUlMjBNYXJpZS4lMjAlNUJTRVAlNUQn",highlighted:`<span class="hljs-string">'[CLS] To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France? [SEP] Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend " Venite Ad Me Omnes ". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basi [SEP]'</span> | |
| <span class="hljs-string">'[CLS] A qui la Vierge Marie serait-elle apparue en 1858 à Lourdes en France ? [SEP] Sur le plan architectural, l école a un caractère catholique. Au sommet du dôme doré du bâtiment principal se trouve une statue dorée de la Vierge Marie. Immédiatement devant le bâtiment principal et face à lui, se trouve une statue en cuivre du Christ, les bras levés, avec la légende " Venite Ad Me Omnes ". À côté du bâtiment principal se trouve la basilique du Sacré-Cœur. Immédiatement derrière la basi [SEP]'</span> | |
| <span class="hljs-string">'[CLS] To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France? [SEP] the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend " Venite Ad Me Omnes ". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin [SEP]'</span> | |
| <span class="hljs-string">'[CLS] A qui la Vierge Marie serait-elle apparue en 1858 à Lourdes en France ? [SEP] le bâtiment principal et face à lui, une statue en cuivre du Christ aux bras levés avec la légende " Venite Ad Me Omnes ". À côté du bâtiment principal se trouve la basilique du Sacré-Cœur. Immédiatement derrière la basilique se trouve la Grotte, un lieu marial de prière et de réflexion. Il s agit d'</span>une réplique de la grotte de Lourdes, en France, où la Vierge [SEP]<span class="hljs-string">' | |
| '</span>[CLS] To whom did the Virgin Mary allegedly appear <span class="hljs-keyword">in</span> <span class="hljs-number">1858</span> <span class="hljs-keyword">in</span> Lourdes France? [SEP] Next to the Main Building <span class="hljs-keyword">is</span> the Basilica of the Sacred Heart. Immediately behind the basilica <span class="hljs-keyword">is</span> the Grotto, a Marian place of prayer <span class="hljs-keyword">and</span> reflection. It <span class="hljs-keyword">is</span> a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous <span class="hljs-keyword">in</span> <span class="hljs-number">1858.</span> At the end of the main drive ( <span class="hljs-keyword">and</span> <span class="hljs-keyword">in</span> a direct line that connects through <span class="hljs-number">3</span> [SEP]<span class="hljs-string">' | |
| '</span>[CLS] A qui la Vierge Marie serait-elle apparue en <span class="hljs-number">1858</span> à Lourdes en France ? [SEP] A côté du bâtiment principal se trouve la basilique du Sacré-Cœur. Immédiatement derrière la basilique se trouve la Grotte, un lieu marial de prière et de réflexion. Il s agit d une réplique de la grotte de Lourdes, en France, où la Vierge Marie serait apparue à Sainte Bernadette Soubirous en <span class="hljs-number">1858.</span> Au bout de l <span class="hljs-built_in">all</span>ée principale ( et dans une ligne directe qui relie par <span class="hljs-number">3</span> [SEP]<span class="hljs-string">' | |
| '</span>[CLS] To whom did the Virgin Mary allegedly appear <span class="hljs-keyword">in</span> <span class="hljs-number">1858</span> <span class="hljs-keyword">in</span> Lourdes France? [SEP]. It <span class="hljs-keyword">is</span> a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous <span class="hljs-keyword">in</span> <span class="hljs-number">1858.</span> At the end of the main drive ( <span class="hljs-keyword">and</span> <span class="hljs-keyword">in</span> a direct line that connects through <span class="hljs-number">3</span> statues <span class="hljs-keyword">and</span> the Gold Dome ), <span class="hljs-keyword">is</span> a simple, modern stone statue of Mary. [SEP]<span class="hljs-string">' | |
| '</span>[CLS] A qui la Vierge Marie est-elle prétendument apparue en <span class="hljs-number">1858</span> à Lourdes France ? [SEP]. Il s agit d une réplique de la grotte de Lourdes, en France, où la Vierge Marie serait apparue à Sainte Bernadette Soubirous en <span class="hljs-number">1858.</span> Au bout de l <span class="hljs-built_in">all</span>ée principale (et dans une ligne directe qui passe par <span class="hljs-number">3</span> statues et le Dôme d <span class="hljs-keyword">or</span>), se trouve une simple statue de pierre moderne de Marie. [SEP]<span class="hljs-string">'</span>`,wrap:!1}}),kl=new I({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMHF1ZXN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwY29udGV4dCUyQyUwQSUyMCUyMCUyMCUyMG1heF9sZW5ndGglM0QxMDAlMkMlMEElMjAlMjAlMjAlMjB0cnVuY2F0aW9uJTNEJTIyb25seV9zZWNvbmQlMjIlMkMlMEElMjAlMjAlMjAlMjBzdHJpZGUlM0Q1MCUyQyUwQSUyMCUyMCUyMCUyMHJldHVybl9vdmVyZmxvd2luZ190b2tlbnMlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwcmV0dXJuX29mZnNldHNfbWFwcGluZyUzRFRydWUlMkMlMEEpJTBBaW5wdXRzLmtleXMoKQ==",highlighted:`inputs = tokenizer( | |
| question, | |
| context, | |
| max_length=<span class="hljs-number">100</span>, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=<span class="hljs-number">50</span>, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| return_offsets_mapping=<span class="hljs-literal">True</span>, | |
| ) | |
| inputs.keys()`,wrap:!1}}),Xl=new I({props:{code:"ZGljdF9rZXlzKCU1QidpbnB1dF9pZHMnJTJDJTIwJ3Rva2VuX3R5cGVfaWRzJyUyQyUyMCdhdHRlbnRpb25fbWFzayclMkMlMjAnb2Zmc2V0X21hcHBpbmcnJTJDJTIwJ292ZXJmbG93X3RvX3NhbXBsZV9tYXBwaW5nJyU1RCk=",highlighted:'dict_keys([<span class="hljs-string">'input_ids'</span>, <span class="hljs-string">'token_type_ids'</span>, <span class="hljs-string">'attention_mask'</span>, <span class="hljs-string">'offset_mapping'</span>, <span class="hljs-string">'overflow_to_sample_mapping'</span>])',wrap:!1}}),_l=new I({props:{code:"aW5wdXRzJTVCJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIlNUQ=",highlighted:'inputs[<span class="hljs-string">"overflow_to_sample_mapping"</span>]',wrap:!1}}),Rl=new I({props:{code:"JTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RA==",highlighted:'[<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]',wrap:!1}}),Nl=new I({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMiUzQTYlNUQlNUIlMjJxdWVzdGlvbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMiUzQTYlNUQlNUIlMjJjb250ZXh0JTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwbWF4X2xlbmd0aCUzRDEwMCUyQyUwQSUyMCUyMCUyMCUyMHRydW5jYXRpb24lM0QlMjJvbmx5X3NlY29uZCUyMiUyQyUwQSUyMCUyMCUyMCUyMHN0cmlkZSUzRDUwJTJDJTBBJTIwJTIwJTIwJTIwcmV0dXJuX292ZXJmbG93aW5nX3Rva2VucyUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZXR1cm5fb2Zmc2V0c19tYXBwaW5nJTNEVHJ1ZSUyQyUwQSklMEElMEFwcmludChmJTIyVGhlJTIwNCUyMGV4YW1wbGVzJTIwZ2F2ZSUyMCU3QmxlbihpbnB1dHMlNUInaW5wdXRfaWRzJyU1RCklN0QlMjBmZWF0dXJlcy4lMjIpJTBBcHJpbnQoZiUyMkhlcmUlMjBpcyUyMHdoZXJlJTIwZWFjaCUyMGNvbWVzJTIwZnJvbSUzQSUyMCU3QmlucHV0cyU1QidvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyclNUQlN0QuJTIyKQ==",highlighted:`inputs = tokenizer( | |
| raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">2</span>:<span class="hljs-number">6</span>][<span class="hljs-string">"question"</span>], | |
| raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">2</span>:<span class="hljs-number">6</span>][<span class="hljs-string">"context"</span>], | |
| max_length=<span class="hljs-number">100</span>, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=<span class="hljs-number">50</span>, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| return_offsets_mapping=<span class="hljs-literal">True</span>, | |
| ) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"The 4 examples gave <span class="hljs-subst">{<span class="hljs-built_in">len</span>(inputs[<span class="hljs-string">'input_ids'</span>])}</span> features."</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Here is where each comes from: <span class="hljs-subst">{inputs[<span class="hljs-string">'overflow_to_sample_mapping'</span>]}</span>."</span>)`,wrap:!1}}),El=new I({props:{code:"J1RoZSUyMDQlMjBleGFtcGxlcyUyMGdhdmUlMjAxOSUyMGZlYXR1cmVzLiclMEEnSGVyZSUyMGlzJTIwd2hlcmUlMjBlYWNoJTIwY29tZXMlMjBmcm9tJTNBJTIwJTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAyJTJDJTIwMiUyQyUyMDIlMkMlMjAyJTJDJTIwMyUyQyUyMDMlMkMlMjAzJTJDJTIwMyUyQyUyMDMlMkMlMjAzJTJDJTIwMyU1RC4n",highlighted:`<span class="hljs-string">'The 4 examples gave 19 features.'</span> | |
| <span class="hljs-string">'Here is where each comes from: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3].'</span>`,wrap:!1}}),ql=new I({props:{code:"YW5zd2VycyUyMCUzRCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMiUzQTYlNUQlNUIlMjJhbnN3ZXJzJTIyJTVEJTBBc3RhcnRfcG9zaXRpb25zJTIwJTNEJTIwJTVCJTVEJTBBZW5kX3Bvc2l0aW9ucyUyMCUzRCUyMCU1QiU1RCUwQSUwQWZvciUyMGklMkMlMjBvZmZzZXQlMjBpbiUyMGVudW1lcmF0ZShpbnB1dHMlNUIlMjJvZmZzZXRfbWFwcGluZyUyMiU1RCklM0ElMEElMjAlMjAlMjAlMjBzYW1wbGVfaWR4JTIwJTNEJTIwaW5wdXRzJTVCJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIlNUQlNUJpJTVEJTBBJTIwJTIwJTIwJTIwYW5zd2VyJTIwJTNEJTIwYW5zd2VycyU1QnNhbXBsZV9pZHglNUQlMEElMjAlMjAlMjAlMjBzdGFydF9jaGFyJTIwJTNEJTIwYW5zd2VyJTVCJTIyYW5zd2VyX3N0YXJ0JTIyJTVEJTVCMCU1RCUwQSUyMCUyMCUyMCUyMGVuZF9jaGFyJTIwJTNEJTIwYW5zd2VyJTVCJTIyYW5zd2VyX3N0YXJ0JTIyJTVEJTVCMCU1RCUyMCUyQiUyMGxlbihhbnN3ZXIlNUIlMjJ0ZXh0JTIyJTVEJTVCMCU1RCklMEElMjAlMjAlMjAlMjBzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKGkpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwVHJvdXZlciUyMGxlJTIwZCVDMyVBOWJ1dCUyMGV0JTIwbGElMjBmaW4lMjBkdSUyMGNvbnRleHRlJTBBJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwMCUwQSUyMCUyMCUyMCUyMHdoaWxlJTIwc2VxdWVuY2VfaWRzJTVCaWR4JTVEJTIwISUzRCUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZHglMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwY29udGV4dF9zdGFydCUyMCUzRCUyMGlkeCUwQSUyMCUyMCUyMCUyMHdoaWxlJTIwc2VxdWVuY2VfaWRzJTVCaWR4JTVEJTIwJTNEJTNEJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUyQiUzRCUyMDElMEElMjAlMjAlMjAlMjBjb250ZXh0X2VuZCUyMCUzRCUyMGlkeCUyMC0lMjAxJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwU2klMjBsYSUyMHIlQzMlQTlwb25zZSUyMG4nZXN0JTIwcGFzJTIwZW50aSVDMyVBOHJlbWVudCUyMGRhbnMlMjBsZSUyMGNvbnRleHRlJTJDJTIwbCclQzMlQTl0aXF1ZXR0ZSUyMGVzdCUyMCgwJTJDJTIwMCklMEElMjAlMjAlMjAlMjBpZiUyMG9mZnNldCU1QmNvbnRleHRfc3RhcnQlNUQlNUIwJTVEJTIwJTNFJTIwc3RhcnRfY2hhciUyMG9yJTIwb2Zmc2V0JTVCY29udGV4dF9lbmQlNUQlNUIxJTVEJTIwJTNDJTIwZW5kX2NoYXIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9wb3NpdGlvbnMuYXBwZW5kKDApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kX3Bvc2l0aW9ucy5hcHBlbmQoMCklMEElMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU2lub24lMkMlMjBjZSUyMHNvbnQlMjBsZXMlMjBwb3NpdGlvbnMlMjBkZSUyMGQlQzMlQTlidXQlMjBldCUyMGRlJTIwZmluJTIwZHUlMjB0b2tlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUzRCUyMGNvbnRleHRfc3RhcnQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aGlsZSUyMGlkeCUyMCUzQyUzRCUyMGNvbnRleHRfZW5kJTIwYW5kJTIwb2Zmc2V0JTVCaWR4JTVEJTVCMCU1RCUyMCUzQyUzRCUyMHN0YXJ0X2NoYXIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZHglMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3RhcnRfcG9zaXRpb25zLmFwcGVuZChpZHglMjAtJTIwMSklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZHglMjAlM0QlMjBjb250ZXh0X2VuZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwaWR4JTIwJTNFJTNEJTIwY29udGV4dF9zdGFydCUyMGFuZCUyMG9mZnNldCU1QmlkeCU1RCU1QjElNUQlMjAlM0UlM0QlMjBlbmRfY2hhciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMC0lM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kX3Bvc2l0aW9ucy5hcHBlbmQoaWR4JTIwJTJCJTIwMSklMEElMEFzdGFydF9wb3NpdGlvbnMlMkMlMjBlbmRfcG9zaXRpb25z",highlighted:`answers = raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">2</span>:<span class="hljs-number">6</span>][<span class="hljs-string">"answers"</span>] | |
| start_positions = [] | |
| end_positions = [] | |
| <span class="hljs-keyword">for</span> i, offset <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(inputs[<span class="hljs-string">"offset_mapping"</span>]): | |
| sample_idx = inputs[<span class="hljs-string">"overflow_to_sample_mapping"</span>][i] | |
| answer = answers[sample_idx] | |
| start_char = answer[<span class="hljs-string">"answer_start"</span>][<span class="hljs-number">0</span>] | |
| end_char = answer[<span class="hljs-string">"answer_start"</span>][<span class="hljs-number">0</span>] + <span class="hljs-built_in">len</span>(answer[<span class="hljs-string">"text"</span>][<span class="hljs-number">0</span>]) | |
| sequence_ids = inputs.sequence_ids(i) | |
| <span class="hljs-comment"># Trouver le début et la fin du contexte</span> | |
| idx = <span class="hljs-number">0</span> | |
| <span class="hljs-keyword">while</span> sequence_ids[idx] != <span class="hljs-number">1</span>: | |
| idx += <span class="hljs-number">1</span> | |
| context_start = idx | |
| <span class="hljs-keyword">while</span> sequence_ids[idx] == <span class="hljs-number">1</span>: | |
| idx += <span class="hljs-number">1</span> | |
| context_end = idx - <span class="hljs-number">1</span> | |
| <span class="hljs-comment"># Si la réponse n'est pas entièrement dans le contexte, l'étiquette est (0, 0)</span> | |
| <span class="hljs-keyword">if</span> offset[context_start][<span class="hljs-number">0</span>] > start_char <span class="hljs-keyword">or</span> offset[context_end][<span class="hljs-number">1</span>] < end_char: | |
| start_positions.append(<span class="hljs-number">0</span>) | |
| end_positions.append(<span class="hljs-number">0</span>) | |
| <span class="hljs-keyword">else</span>: | |
| <span class="hljs-comment"># Sinon, ce sont les positions de début et de fin du token</span> | |
| idx = context_start | |
| <span class="hljs-keyword">while</span> idx <= context_end <span class="hljs-keyword">and</span> offset[idx][<span class="hljs-number">0</span>] <= start_char: | |
| idx += <span class="hljs-number">1</span> | |
| start_positions.append(idx - <span class="hljs-number">1</span>) | |
| idx = context_end | |
| <span class="hljs-keyword">while</span> idx >= context_start <span class="hljs-keyword">and</span> offset[idx][<span class="hljs-number">1</span>] >= end_char: | |
| idx -= <span class="hljs-number">1</span> | |
| end_positions.append(idx + <span class="hljs-number">1</span>) | |
| start_positions, end_positions`,wrap:!1}}),Sl=new I({props:{code:"KCU1QjgzJTJDJTIwNTElMkMlMjAxOSUyQyUyMDAlMkMlMjAwJTJDJTIwNjQlMkMlMjAyNyUyQyUyMDAlMkMlMjAzNCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDY3JTJDJTIwMzQlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RCUyQyUwQSUyMCU1Qjg1JTJDJTIwNTMlMkMlMjAyMSUyQyUyMDAlMkMlMjAwJTJDJTIwNzAlMkMlMjAzMyUyQyUyMDAlMkMlMjA0MCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDY4JTJDJTIwMzUlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RCk=",highlighted:`([<span class="hljs-number">83</span>, <span class="hljs-number">51</span>, <span class="hljs-number">19</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">64</span>, <span class="hljs-number">27</span>, <span class="hljs-number">0</span>, <span class="hljs-number">34</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">67</span>, <span class="hljs-number">34</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>], | |
| [<span class="hljs-number">85</span>, <span class="hljs-number">53</span>, <span class="hljs-number">21</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">70</span>, <span class="hljs-number">33</span>, <span class="hljs-number">0</span>, <span class="hljs-number">40</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">68</span>, <span class="hljs-number">35</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>])`,wrap:!1}}),Dl=new I({props:{code:"aWR4JTIwJTNEJTIwMCUwQXNhbXBsZV9pZHglMjAlM0QlMjBpbnB1dHMlNUIlMjJvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyUyMiU1RCU1QmlkeCU1RCUwQWFuc3dlciUyMCUzRCUyMGFuc3dlcnMlNUJzYW1wbGVfaWR4JTVEJTVCJTIydGV4dCUyMiU1RCU1QjAlNUQlMEElMEFzdGFydCUyMCUzRCUyMHN0YXJ0X3Bvc2l0aW9ucyU1QmlkeCU1RCUwQWVuZCUyMCUzRCUyMGVuZF9wb3NpdGlvbnMlNUJpZHglNUQlMEFsYWJlbGVkX2Fuc3dlciUyMCUzRCUyMHRva2VuaXplci5kZWNvZGUoaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTVCaWR4JTVEJTVCc3RhcnQlMjAlM0ElMjBlbmQlMjAlMkIlMjAxJTVEKSUwQSUwQXByaW50KGYlMjJUaGVvcmV0aWNhbCUyMGFuc3dlciUzQSUyMCU3QmFuc3dlciU3RCUyQyUyMGxhYmVscyUyMGdpdmUlM0ElMjAlN0JsYWJlbGVkX2Fuc3dlciU3RCUyMik=",highlighted:`idx = <span class="hljs-number">0</span> | |
| sample_idx = inputs[<span class="hljs-string">"overflow_to_sample_mapping"</span>][idx] | |
| answer = answers[sample_idx][<span class="hljs-string">"text"</span>][<span class="hljs-number">0</span>] | |
| start = start_positions[idx] | |
| end = end_positions[idx] | |
| labeled_answer = tokenizer.decode(inputs[<span class="hljs-string">"input_ids"</span>][idx][start : end + <span class="hljs-number">1</span>]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Theoretical answer: <span class="hljs-subst">{answer}</span>, labels give: <span class="hljs-subst">{labeled_answer}</span>"</span>)`,wrap:!1}}),Pl=new I({props:{code:"J1RoZW9yZXRpY2FsJTIwYW5zd2VyJTNBJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTJDJTIwbGFiZWxzJTIwZ2l2ZSUzQSUyMHRoZSUyME1haW4lMjBCdWlsZGluZyc=",highlighted:'<span class="hljs-string">'Theoretical answer: the Main Building, labels give: the Main Building'</span>',wrap:!1}}),Ol=new I({props:{code:"aWR4JTIwJTNEJTIwNCUwQXNhbXBsZV9pZHglMjAlM0QlMjBpbnB1dHMlNUIlMjJvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyUyMiU1RCU1QmlkeCU1RCUwQWFuc3dlciUyMCUzRCUyMGFuc3dlcnMlNUJzYW1wbGVfaWR4JTVEJTVCJTIydGV4dCUyMiU1RCU1QjAlNUQlMEElMEFkZWNvZGVkX2V4YW1wbGUlMjAlM0QlMjB0b2tlbml6ZXIuZGVjb2RlKGlucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCU1QmlkeCU1RCklMEFwcmludChmJTIyVGhlb3JldGljYWwlMjBhbnN3ZXIlM0ElMjAlN0JhbnN3ZXIlN0QlMkMlMjBkZWNvZGVkJTIwZXhhbXBsZSUzQSUyMCU3QmRlY29kZWRfZXhhbXBsZSU3RCUyMik=",highlighted:`idx = <span class="hljs-number">4</span> | |
| sample_idx = inputs[<span class="hljs-string">"overflow_to_sample_mapping"</span>][idx] | |
| answer = answers[sample_idx][<span class="hljs-string">"text"</span>][<span class="hljs-number">0</span>] | |
| decoded_example = tokenizer.decode(inputs[<span class="hljs-string">"input_ids"</span>][idx]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Theoretical answer: <span class="hljs-subst">{answer}</span>, decoded example: <span class="hljs-subst">{decoded_example}</span>"</span>)`,wrap:!1}}),es=new I({props:{code:"J1RoZW9yZXRpY2FsJTIwYW5zd2VyJTNBJTIwYSUyME1hcmlhbiUyMHBsYWNlJTIwb2YlMjBwcmF5ZXIlMjBhbmQlMjByZWZsZWN0aW9uJTJDJTIwZGVjb2RlZCUyMGV4YW1wbGUlM0ElMjAlNUJDTFMlNUQlMjBXaGF0JTIwaXMlMjB0aGUlMjBHcm90dG8lMjBhdCUyME5vdHJlJTIwRGFtZSUzRiUyMCU1QlNFUCU1RCUyMEFyY2hpdGVjdHVyYWxseSUyQyUyMHRoZSUyMHNjaG9vbCUyMGhhcyUyMGElMjBDYXRob2xpYyUyMGNoYXJhY3Rlci4lMjBBdG9wJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTVDJ3MlMjBnb2xkJTIwZG9tZSUyMGlzJTIwYSUyMGdvbGRlbiUyMHN0YXR1ZSUyMG9mJTIwdGhlJTIwVmlyZ2luJTIwTWFyeS4lMjBJbW1lZGlhdGVseSUyMGluJTIwZnJvbnQlMjBvZiUyMHRoZSUyME1haW4lMjBCdWlsZGluZyUyMGFuZCUyMGZhY2luZyUyMGl0JTJDJTIwaXMlMjBhJTIwY29wcGVyJTIwc3RhdHVlJTIwb2YlMjBDaHJpc3QlMjB3aXRoJTIwYXJtcyUyMHVwcmFpc2VkJTIwd2l0aCUyMHRoZSUyMGxlZ2VuZCUyMCUyMiUyMFZlbml0ZSUyMEFkJTIwTWUlMjBPbW5lcyUyMCUyMi4lMjBOZXh0JTIwdG8lMjB0aGUlMjBNYWluJTIwQnVpbGRpbmclMjBpcyUyMHRoZSUyMEJhc2lsaWNhJTIwb2YlMjB0aGUlMjBTYWNyZWQlMjBIZWFydC4lMjBJbW1lZGlhdGVseSUyMGJlaGluZCUyMHRoZSUyMGJhc2lsaWNhJTIwaXMlMjB0aGUlMjBHcm90JTIwJTVCU0VQJTVEJw==",highlighted:'<span class="hljs-string">'Theoretical answer: a Marian place of prayer and reflection, decoded example: [CLS] What is the Grotto at Notre Dame? [SEP] Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend " Venite Ad Me Omnes ". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grot [SEP]'</span>',wrap:!1}}),Oe=new Sa({props:{$$slots:{default:[Ki]},$$scope:{ctx:v}}}),ts=new I({props:{code:"bWF4X2xlbmd0aCUyMCUzRCUyMDM4NCUwQXN0cmlkZSUyMCUzRCUyMDEyOCUwQSUwQSUwQWRlZiUyMHByZXByb2Nlc3NfdHJhaW5pbmdfZXhhbXBsZXMoZXhhbXBsZXMpJTNBJTBBJTIwJTIwJTIwJTIwcXVlc3Rpb25zJTIwJTNEJTIwJTVCcS5zdHJpcCgpJTIwZm9yJTIwcSUyMGluJTIwZXhhbXBsZXMlNUIlMjJxdWVzdGlvbiUyMiU1RCU1RCUwQSUyMCUyMCUyMCUyMGlucHV0cyUyMCUzRCUyMHRva2VuaXplciglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBxdWVzdGlvbnMlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGFtcGxlcyU1QiUyMmNvbnRleHQlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfbGVuZ3RoJTNEbWF4X2xlbmd0aCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRydW5jYXRpb24lM0QlMjJvbmx5X3NlY29uZCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cmlkZSUzRHN0cmlkZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybl9vdmVyZmxvd2luZ190b2tlbnMlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuX29mZnNldHNfbWFwcGluZyUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwYWRkaW5nJTNEJTIybWF4X2xlbmd0aCUyMiUyQyUwQSUyMCUyMCUyMCUyMCklMEElMEElMjAlMjAlMjAlMjBvZmZzZXRfbWFwcGluZyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb2Zmc2V0X21hcHBpbmclMjIpJTBBJTIwJTIwJTIwJTIwc2FtcGxlX21hcCUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIpJTBBJTIwJTIwJTIwJTIwYW5zd2VycyUyMCUzRCUyMGV4YW1wbGVzJTVCJTIyYW5zd2VycyUyMiU1RCUwQSUyMCUyMCUyMCUyMHN0YXJ0X3Bvc2l0aW9ucyUyMCUzRCUyMCU1QiU1RCUwQSUyMCUyMCUyMCUyMGVuZF9wb3NpdGlvbnMlMjAlM0QlMjAlNUIlNUQlMEElMEElMjAlMjAlMjAlMjBmb3IlMjBpJTJDJTIwb2Zmc2V0JTIwaW4lMjBlbnVtZXJhdGUob2Zmc2V0X21hcHBpbmcpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2FtcGxlX2lkeCUyMCUzRCUyMHNhbXBsZV9tYXAlNUJpJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYW5zd2VyJTIwJTNEJTIwYW5zd2VycyU1QnNhbXBsZV9pZHglNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9jaGFyJTIwJTNEJTIwYW5zd2VyJTVCJTIyYW5zd2VyX3N0YXJ0JTIyJTVEJTVCMCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZF9jaGFyJTIwJTNEJTIwYW5zd2VyJTVCJTIyYW5zd2VyX3N0YXJ0JTIyJTVEJTVCMCU1RCUyMCUyQiUyMGxlbihhbnN3ZXIlNUIlMjJ0ZXh0JTIyJTVEJTVCMCU1RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKGkpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwVHJvdXZlciUyMGxlJTIwZCVDMyVBOWJ1dCUyMGV0JTIwbGElMjBmaW4lMjBkdSUyMGNvbnRleHRlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwc2VxdWVuY2VfaWRzJTVCaWR4JTVEJTIwISUzRCUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZHglMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGV4dF9zdGFydCUyMCUzRCUyMGlkeCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwc2VxdWVuY2VfaWRzJTVCaWR4JTVEJTIwJTNEJTNEJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUyQiUzRCUyMDElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb250ZXh0X2VuZCUyMCUzRCUyMGlkeCUyMC0lMjAxJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU2klMjBsYSUyMHIlQzMlQTlwb25zZSUyMG4nZXN0JTIwcGFzJTIwZW50aSVDMyVBOHJlbWVudCUyMGRhbnMlMjBsZSUyMGNvbnRleHRlJTJDJTIwbCclQzMlQTl0aXF1ZXR0ZSUyMGVzdCUyMCgwJTJDJTIwMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMG9mZnNldCU1QmNvbnRleHRfc3RhcnQlNUQlNUIwJTVEJTIwJTNFJTIwc3RhcnRfY2hhciUyMG9yJTIwb2Zmc2V0JTVCY29udGV4dF9lbmQlNUQlNUIxJTVEJTIwJTNDJTIwZW5kX2NoYXIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9wb3NpdGlvbnMuYXBwZW5kKDApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kX3Bvc2l0aW9ucy5hcHBlbmQoMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU2lub24lMkMlMjBjZSUyMHNvbnQlMjBsZXMlMjBwb3NpdGlvbnMlMjBkZSUyMGQlQzMlQTlidXQlMjBldCUyMGRlJTIwZmluJTIwZHUlMjB0b2tlbiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUzRCUyMGNvbnRleHRfc3RhcnQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aGlsZSUyMGlkeCUyMCUzQyUzRCUyMGNvbnRleHRfZW5kJTIwYW5kJTIwb2Zmc2V0JTVCaWR4JTVEJTVCMCU1RCUyMCUzQyUzRCUyMHN0YXJ0X2NoYXIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZHglMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3RhcnRfcG9zaXRpb25zLmFwcGVuZChpZHglMjAtJTIwMSklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZHglMjAlM0QlMjBjb250ZXh0X2VuZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwaWR4JTIwJTNFJTNEJTIwY29udGV4dF9zdGFydCUyMGFuZCUyMG9mZnNldCU1QmlkeCU1RCU1QjElNUQlMjAlM0UlM0QlMjBlbmRfY2hhciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMC0lM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kX3Bvc2l0aW9ucy5hcHBlbmQoaWR4JTIwJTJCJTIwMSklMEElMEElMjAlMjAlMjAlMjBpbnB1dHMlNUIlMjJzdGFydF9wb3NpdGlvbnMlMjIlNUQlMjAlM0QlMjBzdGFydF9wb3NpdGlvbnMlMEElMjAlMjAlMjAlMjBpbnB1dHMlNUIlMjJlbmRfcG9zaXRpb25zJTIyJTVEJTIwJTNEJTIwZW5kX3Bvc2l0aW9ucyUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGlucHV0cw==",highlighted:`max_length = <span class="hljs-number">384</span> | |
| stride = <span class="hljs-number">128</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">preprocess_training_examples</span>(<span class="hljs-params">examples</span>): | |
| questions = [q.strip() <span class="hljs-keyword">for</span> q <span class="hljs-keyword">in</span> examples[<span class="hljs-string">"question"</span>]] | |
| inputs = tokenizer( | |
| questions, | |
| examples[<span class="hljs-string">"context"</span>], | |
| max_length=max_length, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=stride, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| return_offsets_mapping=<span class="hljs-literal">True</span>, | |
| padding=<span class="hljs-string">"max_length"</span>, | |
| ) | |
| offset_mapping = inputs.pop(<span class="hljs-string">"offset_mapping"</span>) | |
| sample_map = inputs.pop(<span class="hljs-string">"overflow_to_sample_mapping"</span>) | |
| answers = examples[<span class="hljs-string">"answers"</span>] | |
| start_positions = [] | |
| end_positions = [] | |
| <span class="hljs-keyword">for</span> i, offset <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(offset_mapping): | |
| sample_idx = sample_map[i] | |
| answer = answers[sample_idx] | |
| start_char = answer[<span class="hljs-string">"answer_start"</span>][<span class="hljs-number">0</span>] | |
| end_char = answer[<span class="hljs-string">"answer_start"</span>][<span class="hljs-number">0</span>] + <span class="hljs-built_in">len</span>(answer[<span class="hljs-string">"text"</span>][<span class="hljs-number">0</span>]) | |
| sequence_ids = inputs.sequence_ids(i) | |
| <span class="hljs-comment"># Trouver le début et la fin du contexte</span> | |
| idx = <span class="hljs-number">0</span> | |
| <span class="hljs-keyword">while</span> sequence_ids[idx] != <span class="hljs-number">1</span>: | |
| idx += <span class="hljs-number">1</span> | |
| context_start = idx | |
| <span class="hljs-keyword">while</span> sequence_ids[idx] == <span class="hljs-number">1</span>: | |
| idx += <span class="hljs-number">1</span> | |
| context_end = idx - <span class="hljs-number">1</span> | |
| <span class="hljs-comment"># Si la réponse n'est pas entièrement dans le contexte, l'étiquette est (0, 0)</span> | |
| <span class="hljs-keyword">if</span> offset[context_start][<span class="hljs-number">0</span>] > start_char <span class="hljs-keyword">or</span> offset[context_end][<span class="hljs-number">1</span>] < end_char: | |
| start_positions.append(<span class="hljs-number">0</span>) | |
| end_positions.append(<span class="hljs-number">0</span>) | |
| <span class="hljs-keyword">else</span>: | |
| <span class="hljs-comment"># Sinon, ce sont les positions de début et de fin du token</span> | |
| idx = context_start | |
| <span class="hljs-keyword">while</span> idx <= context_end <span class="hljs-keyword">and</span> offset[idx][<span class="hljs-number">0</span>] <= start_char: | |
| idx += <span class="hljs-number">1</span> | |
| start_positions.append(idx - <span class="hljs-number">1</span>) | |
| idx = context_end | |
| <span class="hljs-keyword">while</span> idx >= context_start <span class="hljs-keyword">and</span> offset[idx][<span class="hljs-number">1</span>] >= end_char: | |
| idx -= <span class="hljs-number">1</span> | |
| end_positions.append(idx + <span class="hljs-number">1</span>) | |
| inputs[<span class="hljs-string">"start_positions"</span>] = start_positions | |
| inputs[<span class="hljs-string">"end_positions"</span>] = end_positions | |
| <span class="hljs-keyword">return</span> inputs`,wrap:!1}}),Ms=new I({props:{code:"dHJhaW5fZGF0YXNldCUyMCUzRCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELm1hcCglMEElMjAlMjAlMjAlMjBwcmVwcm9jZXNzX3RyYWluaW5nX2V4YW1wbGVzJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hlZCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZW1vdmVfY29sdW1ucyUzRHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELmNvbHVtbl9uYW1lcyUyQyUwQSklMEFsZW4ocmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQpJTJDJTIwbGVuKHRyYWluX2RhdGFzZXQp",highlighted:`train_dataset = raw_datasets[<span class="hljs-string">"train"</span>].<span class="hljs-built_in">map</span>( | |
| preprocess_training_examples, | |
| batched=<span class="hljs-literal">True</span>, | |
| remove_columns=raw_datasets[<span class="hljs-string">"train"</span>].column_names, | |
| ) | |
| <span class="hljs-built_in">len</span>(raw_datasets[<span class="hljs-string">"train"</span>]), <span class="hljs-built_in">len</span>(train_dataset)`,wrap:!1}}),is=new I({props:{code:"KDg3NTk5JTJDJTIwODg3Mjkp",highlighted:'(<span class="hljs-number">87599</span>, <span class="hljs-number">88729</span>)',wrap:!1}}),os=new le({props:{title:"Traitement des données de validation",local:"traitement-des-données-de-validation",headingTag:"h3"}}),ds=new I({props:{code:"ZGVmJTIwcHJlcHJvY2Vzc192YWxpZGF0aW9uX2V4YW1wbGVzKGV4YW1wbGVzKSUzQSUwQSUyMCUyMCUyMCUyMHF1ZXN0aW9ucyUyMCUzRCUyMCU1QnEuc3RyaXAoKSUyMGZvciUyMHElMjBpbiUyMGV4YW1wbGVzJTVCJTIycXVlc3Rpb24lMjIlNUQlNUQlMEElMjAlMjAlMjAlMjBpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcXVlc3Rpb25zJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhhbXBsZXMlNUIlMjJjb250ZXh0JTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWF4X2xlbmd0aCUzRG1heF9sZW5ndGglMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0cnVuY2F0aW9uJTNEJTIyb25seV9zZWNvbmQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdHJpZGUlM0RzdHJpZGUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm5fb3ZlcmZsb3dpbmdfdG9rZW5zJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybl9vZmZzZXRzX21hcHBpbmclM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcGFkZGluZyUzRCUyMm1heF9sZW5ndGglMjIlMkMlMEElMjAlMjAlMjAlMjApJTBBJTBBJTIwJTIwJTIwJTIwc2FtcGxlX21hcCUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIpJTBBJTIwJTIwJTIwJTIwZXhhbXBsZV9pZHMlMjAlM0QlMjAlNUIlNUQlMEElMEElMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4oaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEKSklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzYW1wbGVfaWR4JTIwJTNEJTIwc2FtcGxlX21hcCU1QmklNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGFtcGxlX2lkcy5hcHBlbmQoZXhhbXBsZXMlNUIlMjJpZCUyMiU1RCU1QnNhbXBsZV9pZHglNUQpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcyhpKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9mZnNldCUyMCUzRCUyMGlucHV0cyU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTVCaSU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlucHV0cyU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTVCaSU1RCUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG8lMjBpZiUyMHNlcXVlbmNlX2lkcyU1QmslNUQlMjAlM0QlM0QlMjAxJTIwZWxzZSUyME5vbmUlMjBmb3IlMjBrJTJDJTIwbyUyMGluJTIwZW51bWVyYXRlKG9mZnNldCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMEElMEElMjAlMjAlMjAlMjBpbnB1dHMlNUIlMjJleGFtcGxlX2lkJTIyJTVEJTIwJTNEJTIwZXhhbXBsZV9pZHMlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBpbnB1dHM=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">preprocess_validation_examples</span>(<span class="hljs-params">examples</span>): | |
| questions = [q.strip() <span class="hljs-keyword">for</span> q <span class="hljs-keyword">in</span> examples[<span class="hljs-string">"question"</span>]] | |
| inputs = tokenizer( | |
| questions, | |
| examples[<span class="hljs-string">"context"</span>], | |
| max_length=max_length, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=stride, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| return_offsets_mapping=<span class="hljs-literal">True</span>, | |
| padding=<span class="hljs-string">"max_length"</span>, | |
| ) | |
| sample_map = inputs.pop(<span class="hljs-string">"overflow_to_sample_mapping"</span>) | |
| example_ids = [] | |
| <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(inputs[<span class="hljs-string">"input_ids"</span>])): | |
| sample_idx = sample_map[i] | |
| example_ids.append(examples[<span class="hljs-string">"id"</span>][sample_idx]) | |
| sequence_ids = inputs.sequence_ids(i) | |
| offset = inputs[<span class="hljs-string">"offset_mapping"</span>][i] | |
| inputs[<span class="hljs-string">"offset_mapping"</span>][i] = [ | |
| o <span class="hljs-keyword">if</span> sequence_ids[k] == <span class="hljs-number">1</span> <span class="hljs-keyword">else</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">for</span> k, o <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(offset) | |
| ] | |
| inputs[<span class="hljs-string">"example_id"</span>] = example_ids | |
| <span class="hljs-keyword">return</span> inputs`,wrap:!1}}),ys=new I({props:{code:"dmFsaWRhdGlvbl9kYXRhc2V0JTIwJTNEJTIwcmF3X2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RC5tYXAoJTBBJTIwJTIwJTIwJTIwcHJlcHJvY2Vzc192YWxpZGF0aW9uX2V4YW1wbGVzJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hlZCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZW1vdmVfY29sdW1ucyUzRHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQuY29sdW1uX25hbWVzJTJDJTBBKSUwQWxlbihyYXdfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEKSUyQyUyMGxlbih2YWxpZGF0aW9uX2RhdGFzZXQp",highlighted:`validation_dataset = raw_datasets[<span class="hljs-string">"validation"</span>].<span class="hljs-built_in">map</span>( | |
| preprocess_validation_examples, | |
| batched=<span class="hljs-literal">True</span>, | |
| remove_columns=raw_datasets[<span class="hljs-string">"validation"</span>].column_names, | |
| ) | |
| <span class="hljs-built_in">len</span>(raw_datasets[<span class="hljs-string">"validation"</span>]), <span class="hljs-built_in">len</span>(validation_dataset)`,wrap:!1}}),ms=new I({props:{code:"KDEwNTcwJTJDJTIwMTA4MjIp",highlighted:'(<span class="hljs-number">10570</span>, <span class="hljs-number">10822</span>)',wrap:!1}});const Ui=[er,Oi],dt=[];function Ti(e,s){return e[0]==="pt"?0:1}ye=Ti(v),me=dt[ye]=Ui[ye](v),Ts=new le({props:{title:"Post-traitement",local:"post-traitement",headingTag:"h3"}});const ji=[sr,lr],ct=[];function wi(e,s){return e[0]==="pt"?0:1}Je=wi(v),Ue=ct[Je]=ji[Je](v),Is=new I({props:{code:"c21hbGxfZXZhbF9zZXQlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVELnNlbGVjdChyYW5nZSgxMDApKSUwQXRyYWluZWRfY2hlY2twb2ludCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQtYmFzZS1jYXNlZC1kaXN0aWxsZWQtc3F1YWQlMjIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCh0cmFpbmVkX2NoZWNrcG9pbnQpJTBBZXZhbF9zZXQlMjAlM0QlMjBzbWFsbF9ldmFsX3NldC5tYXAoJTBBJTIwJTIwJTIwJTIwcHJlcHJvY2Vzc192YWxpZGF0aW9uX2V4YW1wbGVzJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hlZCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZW1vdmVfY29sdW1ucyUzRHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQuY29sdW1uX25hbWVzJTJDJTBBKQ==",highlighted:`small_eval_set = raw_datasets[<span class="hljs-string">"validation"</span>].select(<span class="hljs-built_in">range</span>(<span class="hljs-number">100</span>)) | |
| trained_checkpoint = <span class="hljs-string">"distilbert-base-cased-distilled-squad"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(trained_checkpoint) | |
| eval_set = small_eval_set.<span class="hljs-built_in">map</span>( | |
| preprocess_validation_examples, | |
| batched=<span class="hljs-literal">True</span>, | |
| remove_columns=raw_datasets[<span class="hljs-string">"validation"</span>].column_names, | |
| )`,wrap:!1}}),Cs=new I({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:"tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)",wrap:!1}});const bi=[nr,tr],yt=[];function Ii(e,s){return e[0]==="pt"?0:1}Te=Ii(v),je=yt[Te]=bi[Te](v),Gs=new I({props:{code:"aW1wb3J0JTIwY29sbGVjdGlvbnMlMEElMEFleGFtcGxlX3RvX2ZlYXR1cmVzJTIwJTNEJTIwY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCklMEFmb3IlMjBpZHglMkMlMjBmZWF0dXJlJTIwaW4lMjBlbnVtZXJhdGUoZXZhbF9zZXQpJTNBJTBBJTIwJTIwJTIwJTIwZXhhbXBsZV90b19mZWF0dXJlcyU1QmZlYXR1cmUlNUIlMjJleGFtcGxlX2lkJTIyJTVEJTVELmFwcGVuZChpZHgp",highlighted:`<span class="hljs-keyword">import</span> collections | |
| example_to_features = collections.defaultdict(<span class="hljs-built_in">list</span>) | |
| <span class="hljs-keyword">for</span> idx, feature <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(eval_set): | |
| example_to_features[feature[<span class="hljs-string">"example_id"</span>]].append(idx)`,wrap:!1}}),xs=new I({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBbl9iZXN0JTIwJTNEJTIwMjAlMEFtYXhfYW5zd2VyX2xlbmd0aCUyMCUzRCUyMDMwJTBBcHJlZGljdGVkX2Fuc3dlcnMlMjAlM0QlMjAlNUIlNUQlMEElMEFmb3IlMjBleGFtcGxlJTIwaW4lMjBzbWFsbF9ldmFsX3NldCUzQSUwQSUyMCUyMCUyMCUyMGV4YW1wbGVfaWQlMjAlM0QlMjBleGFtcGxlJTVCJTIyaWQlMjIlNUQlMEElMjAlMjAlMjAlMjBjb250ZXh0JTIwJTNEJTIwZXhhbXBsZSU1QiUyMmNvbnRleHQlMjIlNUQlMEElMjAlMjAlMjAlMjBhbnN3ZXJzJTIwJTNEJTIwJTVCJTVEJTBBJTBBJTIwJTIwJTIwJTIwZm9yJTIwZmVhdHVyZV9pbmRleCUyMGluJTIwZXhhbXBsZV90b19mZWF0dXJlcyU1QmV4YW1wbGVfaWQlNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9sb2dpdCUyMCUzRCUyMHN0YXJ0X2xvZ2l0cyU1QmZlYXR1cmVfaW5kZXglNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfbG9naXQlMjAlM0QlMjBlbmRfbG9naXRzJTVCZmVhdHVyZV9pbmRleCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9mZnNldHMlMjAlM0QlMjBldmFsX3NldCU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTVCZmVhdHVyZV9pbmRleCU1RCUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0YXJ0X2luZGV4ZXMlMjAlM0QlMjBucC5hcmdzb3J0KHN0YXJ0X2xvZ2l0KSU1Qi0xJTIwJTNBJTIwLW5fYmVzdCUyMC0lMjAxJTIwJTNBJTIwLTElNUQudG9saXN0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfaW5kZXhlcyUyMCUzRCUyMG5wLmFyZ3NvcnQoZW5kX2xvZ2l0KSU1Qi0xJTIwJTNBJTIwLW5fYmVzdCUyMC0lMjAxJTIwJTNBJTIwLTElNUQudG9saXN0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBzdGFydF9pbmRleCUyMGluJTIwc3RhcnRfaW5kZXhlcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGVuZF9pbmRleCUyMGluJTIwZW5kX2luZGV4ZXMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBJZ25vcmUlMjBsZXMlMjByJUMzJUE5cG9uc2VzJTIwcXVpJTIwbmUlMjBzb250JTIwcGFzJTIwZW50aSVDMyVBOHJlbWVudCUyMGRhbnMlMjBsZSUyMGNvbnRleHRlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBvZmZzZXRzJTVCc3RhcnRfaW5kZXglNUQlMjBpcyUyME5vbmUlMjBvciUyMG9mZnNldHMlNUJlbmRfaW5kZXglNUQlMjBpcyUyME5vbmUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb250aW51ZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMElnbm9yZSUyMGxlcyUyMHIlQzMlQTlwb25zZXMlMjBkb250JTIwbGElMjBsb25ndWV1ciUyMGVzdCUyMHNvaXQlMjAlM0MlMjAwJTIwc29pdCUyMCUzRSUyMG1heF9hbnN3ZXJfbGVuZ3RoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjAoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kX2luZGV4JTIwJTNDJTIwc3RhcnRfaW5kZXglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvciUyMGVuZF9pbmRleCUyMC0lMjBzdGFydF9pbmRleCUyMCUyQiUyMDElMjAlM0UlMjBtYXhfYW5zd2VyX2xlbmd0aCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb250aW51ZSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFuc3dlcnMuYXBwZW5kKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnRleHQlMjIlM0ElMjBjb250ZXh0JTVCb2Zmc2V0cyU1QnN0YXJ0X2luZGV4JTVEJTVCMCU1RCUyMCUzQSUyMG9mZnNldHMlNUJlbmRfaW5kZXglNUQlNUIxJTVEJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIybG9naXRfc2NvcmUlMjIlM0ElMjBzdGFydF9sb2dpdCU1QnN0YXJ0X2luZGV4JTVEJTIwJTJCJTIwZW5kX2xvZ2l0JTVCZW5kX2luZGV4JTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUwQSUyMCUyMCUyMCUyMGJlc3RfYW5zd2VyJTIwJTNEJTIwbWF4KGFuc3dlcnMlMkMlMjBrZXklM0RsYW1iZGElMjB4JTNBJTIweCU1QiUyMmxvZ2l0X3Njb3JlJTIyJTVEKSUwQSUyMCUyMCUyMCUyMHByZWRpY3RlZF9hbnN3ZXJzLmFwcGVuZCglN0IlMjJpZCUyMiUzQSUyMGV4YW1wbGVfaWQlMkMlMjAlMjJwcmVkaWN0aW9uX3RleHQlMjIlM0ElMjBiZXN0X2Fuc3dlciU1QiUyMnRleHQlMjIlNUQlN0Qp",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| n_best = <span class="hljs-number">20</span> | |
| max_answer_length = <span class="hljs-number">30</span> | |
| predicted_answers = [] | |
| <span class="hljs-keyword">for</span> example <span class="hljs-keyword">in</span> small_eval_set: | |
| example_id = example[<span class="hljs-string">"id"</span>] | |
| context = example[<span class="hljs-string">"context"</span>] | |
| answers = [] | |
| <span class="hljs-keyword">for</span> feature_index <span class="hljs-keyword">in</span> example_to_features[example_id]: | |
| start_logit = start_logits[feature_index] | |
| end_logit = end_logits[feature_index] | |
| offsets = eval_set[<span class="hljs-string">"offset_mapping"</span>][feature_index] | |
| start_indexes = np.argsort(start_logit)[-<span class="hljs-number">1</span> : -n_best - <span class="hljs-number">1</span> : -<span class="hljs-number">1</span>].tolist() | |
| end_indexes = np.argsort(end_logit)[-<span class="hljs-number">1</span> : -n_best - <span class="hljs-number">1</span> : -<span class="hljs-number">1</span>].tolist() | |
| <span class="hljs-keyword">for</span> start_index <span class="hljs-keyword">in</span> start_indexes: | |
| <span class="hljs-keyword">for</span> end_index <span class="hljs-keyword">in</span> end_indexes: | |
| <span class="hljs-comment"># Ignore les réponses qui ne sont pas entièrement dans le contexte</span> | |
| <span class="hljs-keyword">if</span> offsets[start_index] <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> offsets[end_index] <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>: | |
| <span class="hljs-keyword">continue</span> | |
| <span class="hljs-comment"># Ignore les réponses dont la longueur est soit < 0 soit > max_answer_length</span> | |
| <span class="hljs-keyword">if</span> ( | |
| end_index < start_index | |
| <span class="hljs-keyword">or</span> end_index - start_index + <span class="hljs-number">1</span> > max_answer_length | |
| ): | |
| <span class="hljs-keyword">continue</span> | |
| answers.append( | |
| { | |
| <span class="hljs-string">"text"</span>: context[offsets[start_index][<span class="hljs-number">0</span>] : offsets[end_index][<span class="hljs-number">1</span>]], | |
| <span class="hljs-string">"logit_score"</span>: start_logit[start_index] + end_logit[end_index], | |
| } | |
| ) | |
| best_answer = <span class="hljs-built_in">max</span>(answers, key=<span class="hljs-keyword">lambda</span> x: x[<span class="hljs-string">"logit_score"</span>]) | |
| predicted_answers.append({<span class="hljs-string">"id"</span>: example_id, <span class="hljs-string">"prediction_text"</span>: best_answer[<span class="hljs-string">"text"</span>]})`,wrap:!1}}),gs=new I({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMnNxdWFkJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> evaluate | |
| metric = evaluate.load(<span class="hljs-string">"squad"</span>)`,wrap:!1}}),Xs=new I({props:{code:"dGhlb3JldGljYWxfYW5zd2VycyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCU3QiUyMmlkJTIyJTNBJTIwZXglNUIlMjJpZCUyMiU1RCUyQyUyMCUyMmFuc3dlcnMlMjIlM0ElMjBleCU1QiUyMmFuc3dlcnMlMjIlNUQlN0QlMjBmb3IlMjBleCUyMGluJTIwc21hbGxfZXZhbF9zZXQlMEElNUQ=",highlighted:`theoretical_answers = [ | |
| {<span class="hljs-string">"id"</span>: ex[<span class="hljs-string">"id"</span>], <span class="hljs-string">"answers"</span>: ex[<span class="hljs-string">"answers"</span>]} <span class="hljs-keyword">for</span> ex <span class="hljs-keyword">in</span> small_eval_set | |
| ]`,wrap:!1}}),_s=new I({props:{code:"cHJpbnQocHJlZGljdGVkX2Fuc3dlcnMlNUIwJTVEKSUwQXByaW50KHRoZW9yZXRpY2FsX2Fuc3dlcnMlNUIwJTVEKQ==",highlighted:`<span class="hljs-built_in">print</span>(predicted_answers[<span class="hljs-number">0</span>]) | |
| <span class="hljs-built_in">print</span>(theoretical_answers[<span class="hljs-number">0</span>])`,wrap:!1}}),Rs=new I({props:{code:"JTdCJ2lkJyUzQSUyMCc1NmJlNGRiMGFjYjgwMDE0MDBhNTAyZWMnJTJDJTIwJ3ByZWRpY3Rpb25fdGV4dCclM0ElMjAnRGVudmVyJTIwQnJvbmNvcyclN0QlMEElN0InaWQnJTNBJTIwJzU2YmU0ZGIwYWNiODAwMTQwMGE1MDJlYyclMkMlMjAnYW5zd2VycyclM0ElMjAlN0IndGV4dCclM0ElMjAlNUInRGVudmVyJTIwQnJvbmNvcyclMkMlMjAnRGVudmVyJTIwQnJvbmNvcyclMkMlMjAnRGVudmVyJTIwQnJvbmNvcyclNUQlMkMlMjAnYW5zd2VyX3N0YXJ0JyUzQSUyMCU1QjE3NyUyQyUyMDE3NyUyQyUyMDE3NyU1RCU3RCU3RA==",highlighted:`{<span class="hljs-string">'id'</span>: <span class="hljs-string">'56be4db0acb8001400a502ec'</span>, <span class="hljs-string">'prediction_text'</span>: <span class="hljs-string">'Denver Broncos'</span>} | |
| {<span class="hljs-string">'id'</span>: <span class="hljs-string">'56be4db0acb8001400a502ec'</span>, <span class="hljs-string">'answers'</span>: {<span class="hljs-string">'text'</span>: [<span class="hljs-string">'Denver Broncos'</span>, <span class="hljs-string">'Denver Broncos'</span>, <span class="hljs-string">'Denver Broncos'</span>], <span class="hljs-string">'answer_start'</span>: [<span class="hljs-number">177</span>, <span class="hljs-number">177</span>, <span class="hljs-number">177</span>]}}`,wrap:!1}}),Ns=new I({props:{code:"bWV0cmljLmNvbXB1dGUocHJlZGljdGlvbnMlM0RwcmVkaWN0ZWRfYW5zd2VycyUyQyUyMHJlZmVyZW5jZXMlM0R0aGVvcmV0aWNhbF9hbnN3ZXJzKQ==",highlighted:"metric.compute(predictions=predicted_answers, references=theoretical_answers)",wrap:!1}}),Es=new I({props:{code:"JTdCJ2V4YWN0X21hdGNoJyUzQSUyMDgzLjAlMkMlMjAnZjEnJTNBJTIwODguMjUlN0Q=",highlighted:'{<span class="hljs-string">'exact_match'</span>: <span class="hljs-number">83.0</span>, <span class="hljs-string">'f1'</span>: <span class="hljs-number">88.25</span>}',wrap:!1}});function hi(e,s){return e[0]==="pt"?Mr:ar}let qa=hi(v),De=qa(v);zs=new I({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEElMEElMEFkZWYlMjBjb21wdXRlX21ldHJpY3Moc3RhcnRfbG9naXRzJTJDJTIwZW5kX2xvZ2l0cyUyQyUyMGZlYXR1cmVzJTJDJTIwZXhhbXBsZXMpJTNBJTBBJTIwJTIwJTIwJTIwZXhhbXBsZV90b19mZWF0dXJlcyUyMCUzRCUyMGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpJTBBJTIwJTIwJTIwJTIwZm9yJTIwaWR4JTJDJTIwZmVhdHVyZSUyMGluJTIwZW51bWVyYXRlKGZlYXR1cmVzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4YW1wbGVfdG9fZmVhdHVyZXMlNUJmZWF0dXJlJTVCJTIyZXhhbXBsZV9pZCUyMiU1RCU1RC5hcHBlbmQoaWR4KSUwQSUwQSUyMCUyMCUyMCUyMHByZWRpY3RlZF9hbnN3ZXJzJTIwJTNEJTIwJTVCJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwZXhhbXBsZSUyMGluJTIwdHFkbShleGFtcGxlcyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGFtcGxlX2lkJTIwJTNEJTIwZXhhbXBsZSU1QiUyMmlkJTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGV4dCUyMCUzRCUyMGV4YW1wbGUlNUIlMjJjb250ZXh0JTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYW5zd2VycyUyMCUzRCUyMCU1QiU1RCUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMFBhcmNvdXJpciUyMGVuJTIwYm91Y2xlJTIwdG91dGVzJTIwbGVzJTIwZm9uY3Rpb25uYWxpdCVDMyVBOXMlMjBhc3NvY2klQzMlQTllcyUyMCVDMyVBMCUyMGNldCUyMGV4ZW1wbGUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBmZWF0dXJlX2luZGV4JTIwaW4lMjBleGFtcGxlX3RvX2ZlYXR1cmVzJTVCZXhhbXBsZV9pZCU1RCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0YXJ0X2xvZ2l0JTIwJTNEJTIwc3RhcnRfbG9naXRzJTVCZmVhdHVyZV9pbmRleCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZF9sb2dpdCUyMCUzRCUyMGVuZF9sb2dpdHMlNUJmZWF0dXJlX2luZGV4JTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb2Zmc2V0cyUyMCUzRCUyMGZlYXR1cmVzJTVCZmVhdHVyZV9pbmRleCU1RCU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3RhcnRfaW5kZXhlcyUyMCUzRCUyMG5wLmFyZ3NvcnQoc3RhcnRfbG9naXQpJTVCLTElMjAlM0ElMjAtbl9iZXN0JTIwLSUyMDElMjAlM0ElMjAtMSU1RC50b2xpc3QoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZF9pbmRleGVzJTIwJTNEJTIwbnAuYXJnc29ydChlbmRfbG9naXQpJTVCLTElMjAlM0ElMjAtbl9iZXN0JTIwLSUyMDElMjAlM0ElMjAtMSU1RC50b2xpc3QoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMHN0YXJ0X2luZGV4JTIwaW4lMjBzdGFydF9pbmRleGVzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwZW5kX2luZGV4JTIwaW4lMjBlbmRfaW5kZXhlcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMElnbm9yZSUyMGxlcyUyMHIlQzMlQTlwb25zZXMlMjBxdWklMjBuZSUyMHNvbnQlMjBwYXMlMjBlbnRpJUMzJUE4cmVtZW50JTIwZGFucyUyMGxlJTIwY29udGV4dGUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMG9mZnNldHMlNUJzdGFydF9pbmRleCU1RCUyMGlzJTIwTm9uZSUyMG9yJTIwb2Zmc2V0cyU1QmVuZF9pbmRleCU1RCUyMGlzJTIwTm9uZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRpbnVlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwSWdub3JlJTIwbGVzJTIwciVDMyVBOXBvbnNlcyUyMGRvbnQlMjBsYSUyMGxvbmd1ZXVyJTIwZXN0JTIwc29pdCUyMCUzQyUyMDAlMkMlMjBzb2l0JTIwJTNFJTIwbWF4X2Fuc3dlcl9sZW5ndGglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfaW5kZXglMjAlM0MlMjBzdGFydF9pbmRleCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9yJTIwZW5kX2luZGV4JTIwLSUyMHN0YXJ0X2luZGV4JTIwJTJCJTIwMSUyMCUzRSUyMG1heF9hbnN3ZXJfbGVuZ3RoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRpbnVlJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYW5zd2VyJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIydGV4dCUyMiUzQSUyMGNvbnRleHQlNUJvZmZzZXRzJTVCc3RhcnRfaW5kZXglNUQlNUIwJTVEJTIwJTNBJTIwb2Zmc2V0cyU1QmVuZF9pbmRleCU1RCU1QjElNUQlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJsb2dpdF9zY29yZSUyMiUzQSUyMHN0YXJ0X2xvZ2l0JTVCc3RhcnRfaW5kZXglNUQlMjAlMkIlMjBlbmRfbG9naXQlNUJlbmRfaW5kZXglNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhbnN3ZXJzLmFwcGVuZChhbnN3ZXIpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwUyVDMyVBOWxlY3Rpb25uZSUyMGxhJTIwciVDMyVBOXBvbnNlJTIwYXZlYyUyMGxlJTIwbWVpbGxldXIlMjBzY29yZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGVuKGFuc3dlcnMpJTIwJTNFJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlc3RfYW5zd2VyJTIwJTNEJTIwbWF4KGFuc3dlcnMlMkMlMjBrZXklM0RsYW1iZGElMjB4JTNBJTIweCU1QiUyMmxvZ2l0X3Njb3JlJTIyJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZWRpY3RlZF9hbnN3ZXJzLmFwcGVuZCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0IlMjJpZCUyMiUzQSUyMGV4YW1wbGVfaWQlMkMlMjAlMjJwcmVkaWN0aW9uX3RleHQlMjIlM0ElMjBiZXN0X2Fuc3dlciU1QiUyMnRleHQlMjIlNUQlN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZWRpY3RlZF9hbnN3ZXJzLmFwcGVuZCglN0IlMjJpZCUyMiUzQSUyMGV4YW1wbGVfaWQlMkMlMjAlMjJwcmVkaWN0aW9uX3RleHQlMjIlM0ElMjAlMjIlMjIlN0QpJTBBJTBBJTIwJTIwJTIwJTIwdGhlb3JldGljYWxfYW5zd2VycyUyMCUzRCUyMCU1QiU3QiUyMmlkJTIyJTNBJTIwZXglNUIlMjJpZCUyMiU1RCUyQyUyMCUyMmFuc3dlcnMlMjIlM0ElMjBleCU1QiUyMmFuc3dlcnMlMjIlNUQlN0QlMjBmb3IlMjBleCUyMGluJTIwZXhhbXBsZXMlNUQlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBtZXRyaWMuY29tcHV0ZShwcmVkaWN0aW9ucyUzRHByZWRpY3RlZF9hbnN3ZXJzJTJDJTIwcmVmZXJlbmNlcyUzRHRoZW9yZXRpY2FsX2Fuc3dlcnMp",highlighted:`<span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">start_logits, end_logits, features, examples</span>): | |
| example_to_features = collections.defaultdict(<span class="hljs-built_in">list</span>) | |
| <span class="hljs-keyword">for</span> idx, feature <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(features): | |
| example_to_features[feature[<span class="hljs-string">"example_id"</span>]].append(idx) | |
| predicted_answers = [] | |
| <span class="hljs-keyword">for</span> example <span class="hljs-keyword">in</span> tqdm(examples): | |
| example_id = example[<span class="hljs-string">"id"</span>] | |
| context = example[<span class="hljs-string">"context"</span>] | |
| answers = [] | |
| <span class="hljs-comment"># Parcourir en boucle toutes les fonctionnalités associées à cet exemple</span> | |
| <span class="hljs-keyword">for</span> feature_index <span class="hljs-keyword">in</span> example_to_features[example_id]: | |
| start_logit = start_logits[feature_index] | |
| end_logit = end_logits[feature_index] | |
| offsets = features[feature_index][<span class="hljs-string">"offset_mapping"</span>] | |
| start_indexes = np.argsort(start_logit)[-<span class="hljs-number">1</span> : -n_best - <span class="hljs-number">1</span> : -<span class="hljs-number">1</span>].tolist() | |
| end_indexes = np.argsort(end_logit)[-<span class="hljs-number">1</span> : -n_best - <span class="hljs-number">1</span> : -<span class="hljs-number">1</span>].tolist() | |
| <span class="hljs-keyword">for</span> start_index <span class="hljs-keyword">in</span> start_indexes: | |
| <span class="hljs-keyword">for</span> end_index <span class="hljs-keyword">in</span> end_indexes: | |
| <span class="hljs-comment"># Ignore les réponses qui ne sont pas entièrement dans le contexte</span> | |
| <span class="hljs-keyword">if</span> offsets[start_index] <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> offsets[end_index] <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>: | |
| <span class="hljs-keyword">continue</span> | |
| <span class="hljs-comment"># Ignore les réponses dont la longueur est soit < 0, soit > max_answer_length</span> | |
| <span class="hljs-keyword">if</span> ( | |
| end_index < start_index | |
| <span class="hljs-keyword">or</span> end_index - start_index + <span class="hljs-number">1</span> > max_answer_length | |
| ): | |
| <span class="hljs-keyword">continue</span> | |
| answer = { | |
| <span class="hljs-string">"text"</span>: context[offsets[start_index][<span class="hljs-number">0</span>] : offsets[end_index][<span class="hljs-number">1</span>]], | |
| <span class="hljs-string">"logit_score"</span>: start_logit[start_index] + end_logit[end_index], | |
| } | |
| answers.append(answer) | |
| <span class="hljs-comment"># Sélectionne la réponse avec le meilleur score</span> | |
| <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(answers) > <span class="hljs-number">0</span>: | |
| best_answer = <span class="hljs-built_in">max</span>(answers, key=<span class="hljs-keyword">lambda</span> x: x[<span class="hljs-string">"logit_score"</span>]) | |
| predicted_answers.append( | |
| {<span class="hljs-string">"id"</span>: example_id, <span class="hljs-string">"prediction_text"</span>: best_answer[<span class="hljs-string">"text"</span>]} | |
| ) | |
| <span class="hljs-keyword">else</span>: | |
| predicted_answers.append({<span class="hljs-string">"id"</span>: example_id, <span class="hljs-string">"prediction_text"</span>: <span class="hljs-string">""</span>}) | |
| theoretical_answers = [{<span class="hljs-string">"id"</span>: ex[<span class="hljs-string">"id"</span>], <span class="hljs-string">"answers"</span>: ex[<span class="hljs-string">"answers"</span>]} <span class="hljs-keyword">for</span> ex <span class="hljs-keyword">in</span> examples] | |
| <span class="hljs-keyword">return</span> metric.compute(predictions=predicted_answers, references=theoretical_answers)`,wrap:!1}}),Ys=new I({props:{code:"Y29tcHV0ZV9tZXRyaWNzKHN0YXJ0X2xvZ2l0cyUyQyUyMGVuZF9sb2dpdHMlMkMlMjBldmFsX3NldCUyQyUyMHNtYWxsX2V2YWxfc2V0KQ==",highlighted:"compute_metrics(start_logits, end_logits, eval_set, small_eval_set)",wrap:!1}}),Hs=new I({props:{code:"JTdCJ2V4YWN0X21hdGNoJyUzQSUyMDgzLjAlMkMlMjAnZjEnJTNBJTIwODguMjUlN0Q=",highlighted:'{<span class="hljs-string">'exact_match'</span>: <span class="hljs-number">83.0</span>, <span class="hljs-string">'f1'</span>: <span class="hljs-number">88.25</span>}',wrap:!1}}),Ss=new le({props:{title:"<i> Finetuning </i> du modèle",local:"i-finetuning-i-du-modèle",headingTag:"h3"}});const Ci=[rr,ir],mt=[];function fi(e,s){return e[0]==="pt"?0:1}we=fi(v),be=mt[we]=Ci[we](v),Ps=new I({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login | |
| notebook_login()`,wrap:!1}}),Os=new I({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}});const Zi=[pr,or],Jt=[];function Gi(e,s){return e[0]==="pt"?0:1}Ie=Gi(v),he=Jt[Ie]=Zi[Ie](v);const Bi=[dr,ur],Ut=[];function Vi(e,s){return e[0]==="pt"?0:1}Ce=Vi(v),fe=Ut[Ce]=Bi[Ce](v);const vi=[mr,yr],Tt=[];function xi(e,s){return e[0]==="pt"?0:1}Ze=xi(v),Ge=Tt[Ze]=vi[Ze](v),st=new I({props:{code:"JTdCJ2V4YWN0X21hdGNoJyUzQSUyMDgxLjE4MjU5MjI0MjE5NDg5JTJDJTIwJ2YxJyUzQSUyMDg4LjY3MzgxMzIxOTA1NTE2JTdE",highlighted:'{<span class="hljs-string">'exact_match'</span>: <span class="hljs-number">81.18259224219489</span>, <span class="hljs-string">'f1'</span>: <span class="hljs-number">88.67381321905516</span>}',wrap:!1}});let _=v[0]==="pt"&&Ai();el=new Sa({props:{$$slots:{default:[Jr]},$$scope:{ctx:v}}});let R=v[0]==="pt"&&_i();return at=new le({props:{title:"Utilisation du modèle <i> finetuné </i>",local:"utilisation-du-modèle-i-finetuné-i",headingTag:"h3"}}),it=new I({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBJTIzJTIwUmVtcGxhY2V6JTIwcGFyJTIwdm90cmUlMjBwcm9wcmUlMjBjaGVja3BvaW50JTBBbW9kZWxfY2hlY2twb2ludCUyMCUzRCUyMCUyMmh1Z2dpbmdmYWNlLWNvdXJzZSUyRmJlcnQtZmluZXR1bmVkLXNxdWFkJTIyJTBBcXVlc3Rpb25fYW5zd2VyZXIlMjAlM0QlMjBwaXBlbGluZSglMjJxdWVzdGlvbi1hbnN3ZXJpbmclMjIlMkMlMjBtb2RlbCUzRG1vZGVsX2NoZWNrcG9pbnQpJTBBJTBBY29udGV4dCUyMCUzRCUyMCUyMiUyMiUyMiUwQSVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUyMGlzJTIwYmFja2VkJTIwYnklMjB0aGUlMjB0aHJlZSUyMG1vc3QlMjBwb3B1bGFyJTIwZGVlcCUyMGxlYXJuaW5nJTIwbGlicmFyaWVzJTIwJUUyJTgwJTk0JTIwSmF4JTJDJTIwUHlUb3JjaCUyMGFuZCUyMFRlbnNvckZsb3clMjAlRTIlODAlOTQlMjB3aXRoJTIwYSUyMHNlYW1sZXNzJTIwaW50ZWdyYXRpb24lMEFiZXR3ZWVuJTIwdGhlbS4lMjBJdCdzJTIwc3RyYWlnaHRmb3J3YXJkJTIwdG8lMjB0cmFpbiUyMHlvdXIlMjBtb2RlbHMlMjB3aXRoJTIwb25lJTIwYmVmb3JlJTIwbG9hZGluZyUyMHRoZW0lMjBmb3IlMjBpbmZlcmVuY2UlMjB3aXRoJTIwdGhlJTIwb3RoZXIuJTBBJTIyJTIyJTIyJTBBcXVlc3Rpb24lMjAlM0QlMjAlMjJXaGljaCUyMGRlZXAlMjBsZWFybmluZyUyMGxpYnJhcmllcyUyMGJhY2slMjAlRjAlOUYlQTQlOTclMjBUcmFuc2Zvcm1lcnMlM0YlMjIlMEFxdWVzdGlvbl9hbnN3ZXJlcihxdWVzdGlvbiUzRHF1ZXN0aW9uJTJDJTIwY29udGV4dCUzRGNvbnRleHQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline | |
| <span class="hljs-comment"># Remplacez par votre propre checkpoint</span> | |
| model_checkpoint = <span class="hljs-string">"huggingface-course/bert-finetuned-squad"</span> | |
| question_answerer = pipeline(<span class="hljs-string">"question-answering"</span>, model=model_checkpoint) | |
| context = <span class="hljs-string">""" | |
| 🤗 Transformers is backed by the three most popular deep learning libraries — Jax, PyTorch and TensorFlow — with a seamless integration | |
| between them. It's straightforward to train your models with one before loading them for inference with the other. | |
| """</span> | |
| question = <span class="hljs-string">"Which deep learning libraries back 🤗 Transformers?"</span> | |
| question_answerer(question=question, context=context)`,wrap:!1}}),rt=new I({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTk3OTAwMzA3MTc4NDk3MyUyQyUwQSUyMCdzdGFydCclM0ElMjA3OCUyQyUwQSUyMCdlbmQnJTNBJTIwMTA1JTJDJTBBJTIwJ2Fuc3dlciclM0ElMjAnSmF4JTJDJTIwUHlUb3JjaCUyMGFuZCUyMFRlbnNvckZsb3cnJTdE",highlighted:`{<span class="hljs-string">'score'</span>: <span class="hljs-number">0.9979003071784973</span>, | |
| <span class="hljs-string">'start'</span>: <span class="hljs-number">78</span>, | |
| <span class="hljs-string">'end'</span>: <span class="hljs-number">105</span>, | |
| <span class="hljs-string">'answer'</span>: <span class="hljs-string">'Jax, PyTorch and TensorFlow'</span>}`,wrap:!1}}),pt=new Si({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter7/7.mdx"}}),{c(){M=d("meta"),w=n(),i=d("p"),m=n(),J(h.$$.fragment),o=n(),J(C.$$.fragment),b=n(),W.c(),x=n(),X=d("p"),X.innerHTML=A,G=n(),J(B.$$.fragment),k=n(),O=d("p"),O.innerHTML=se,V=n(),g=d("iframe"),ll=n(),Q=d("iframe"),Qe=n(),F=d("p"),F.innerHTML=Wt,Ne=n(),J(E.$$.fragment),Ee=n(),J(z.$$.fragment),sl=n(),te=d("p"),te.innerHTML=ve,Fe=n(),J($.$$.fragment),tl=n(),ne=d("p"),ne.innerHTML=xe,ze=n(),J(Y.$$.fragment),$e=n(),H=d("p"),H.textContent=gt,Ye=n(),J(q.$$.fragment),He=n(),J(S.$$.fragment),nl=n(),ae=d("p"),ae.innerHTML=We,qe=n(),J(L.$$.fragment),al=n(),J(Me.$$.fragment),ie=n(),ge=d("p"),ge.innerHTML=Ml,re=n(),ke=d("p"),ke.innerHTML=il,oe=n(),J(pe.$$.fragment),ue=n(),J(Xe.$$.fragment),Se=n(),D=d("p"),D.textContent=rl,de=n(),J(Ae.$$.fragment),Le=n(),J(P.$$.fragment),ol=n(),ce=d("p"),ce.innerHTML=r,f=n(),J(pl.$$.fragment),Rt=n(),J(ul.$$.fragment),Qt=n(),dl=d("p"),dl.textContent=oM,Nt=n(),J(cl.$$.fragment),Et=n(),J(yl.$$.fragment),Ft=n(),ml=d("p"),ml.innerHTML=pM,zt=n(),Jl=d("p"),Jl.innerHTML=uM,$t=n(),J(Ul.$$.fragment),Yt=n(),Tl=d("p"),Tl.innerHTML=dM,Ht=n(),J(jl.$$.fragment),qt=n(),J(wl.$$.fragment),St=n(),bl=d("p"),bl.innerHTML=cM,Lt=n(),J(Il.$$.fragment),Dt=n(),hl=d("p"),hl.textContent=yM,Pt=n(),J(Cl.$$.fragment),Kt=n(),J(fl.$$.fragment),Ot=n(),Zl=d("p"),Zl.innerHTML=mM,en=n(),Ke=d("div"),Ke.innerHTML=JM,ln=n(),Gl=d("p"),Gl.innerHTML=UM,sn=n(),Bl=d("p"),Bl.innerHTML=TM,tn=n(),Vl=d("ul"),Vl.innerHTML=jM,nn=n(),J(vl.$$.fragment),an=n(),J(xl.$$.fragment),Mn=n(),Wl=d("p"),Wl.innerHTML=wM,rn=n(),gl=d("p"),gl.innerHTML=bM,on=n(),J(kl.$$.fragment),pn=n(),J(Xl.$$.fragment),un=n(),Al=d("p"),Al.innerHTML=IM,dn=n(),J(_l.$$.fragment),cn=n(),J(Rl.$$.fragment),yn=n(),Ql=d("p"),Ql.textContent=hM,mn=n(),J(Nl.$$.fragment),Jn=n(),J(El.$$.fragment),Un=n(),Fl=d("p"),Fl.textContent=CM,Tn=n(),zl=d("p"),zl.textContent=fM,jn=n(),$l=d("ul"),$l.innerHTML=ZM,wn=n(),Yl=d("p"),Yl.innerHTML=GM,bn=n(),Hl=d("p"),Hl.innerHTML=BM,In=n(),J(ql.$$.fragment),hn=n(),J(Sl.$$.fragment),Cn=n(),Ll=d("p"),Ll.innerHTML=VM,fn=n(),J(Dl.$$.fragment),Zn=n(),J(Pl.$$.fragment),Gn=n(),Kl=d("p"),Kl.innerHTML=vM,Bn=n(),J(Ol.$$.fragment),Vn=n(),J(es.$$.fragment),vn=n(),ls=d("p"),ls.textContent=xM,xn=n(),J(Oe.$$.fragment),Wn=n(),ss=d("p"),ss.textContent=WM,gn=n(),J(ts.$$.fragment),kn=n(),ns=d("p"),ns.textContent=gM,Xn=n(),as=d("p"),as.innerHTML=kM,An=n(),J(Ms.$$.fragment),_n=n(),J(is.$$.fragment),Rn=n(),rs=d("p"),rs.textContent=XM,Qn=n(),J(os.$$.fragment),Nn=n(),ps=d("p"),ps.innerHTML=AM,En=n(),us=d("p"),us.innerHTML=_M,Fn=n(),J(ds.$$.fragment),zn=n(),cs=d("p"),cs.textContent=RM,$n=n(),J(ys.$$.fragment),Yn=n(),J(ms.$$.fragment),Hn=n(),Js=d("p"),Js.textContent=QM,qn=n(),Us=d("p"),Us.textContent=NM,Sn=n(),me.c(),jt=n(),J(Ts.$$.fragment),Ln=n(),Ue.c(),wt=n(),js=d("p"),js.innerHTML=EM,Dn=n(),ws=d("ul"),ws.innerHTML=FM,Pn=n(),K=d("p"),Pa=Xt("Ici, nous allons modifier légèrement ce processus car nous n’avons pas besoin de calculer les scores réels (juste la réponse prédite). Cela signifie que nous pouvons sauter l’étape de la SoftMax. Pour aller plus vite, nous ne donnerons pas non plus un score à toutes les paires "),bt=d("code"),bt.textContent=zM,Ka=Xt(" possibles, mais seulement celles correspondant aux "),It=d("code"),It.textContent=$M,Oa=Xt(" logits les plus élevés (avec "),ht=d("code"),ht.textContent=YM,eM=Xt("). Puisque nous sautons la SoftMax, les scores seront des scores logi, et seront obtenus en prenant la somme des logits de début et de fin (au lieu du produit, à cause de la règle"),Kn=new $i(!1),On=Xt(")."),ea=n(),bs=d("p"),bs.innerHTML=HM,la=n(),J(Is.$$.fragment),sa=n(),hs=d("p"),hs.innerHTML=qM,ta=n(),J(Cs.$$.fragment),na=n(),fs=d("p"),fs.innerHTML=SM,aa=n(),je.c(),Ct=n(),Zs=d("p"),Zs.innerHTML=LM,Ma=n(),J(Gs.$$.fragment),ia=n(),Bs=d("p"),Bs.innerHTML=DM,ra=n(),Vs=d("ul"),Vs.innerHTML=PM,oa=n(),vs=d("p"),vs.textContent=KM,pa=n(),J(xs.$$.fragment),ua=n(),Ws=d("p"),Ws.innerHTML=OM,da=n(),J(gs.$$.fragment),ca=n(),ks=d("p"),ks.textContent=ei,ya=n(),J(Xs.$$.fragment),ma=n(),As=d("p"),As.textContent=li,Ja=n(),J(_s.$$.fragment),Ua=n(),J(Rs.$$.fragment),Ta=n(),Qs=d("p"),Qs.textContent=si,ja=n(),J(Ns.$$.fragment),wa=n(),J(Es.$$.fragment),ba=n(),Fs=d("p"),Fs.innerHTML=ti,Ia=n(),De.c(),ft=n(),J(zs.$$.fragment),ha=n(),$s=d("p"),$s.textContent=ni,Ca=n(),J(Ys.$$.fragment),fa=n(),J(Hs.$$.fragment),Za=n(),qs=d("p"),qs.innerHTML=ai,Ga=n(),J(Ss.$$.fragment),Ba=n(),be.c(),Zt=n(),Ls=d("p"),Ls.innerHTML=Mi,Va=n(),Ds=d("p"),Ds.innerHTML=ii,va=n(),J(Ps.$$.fragment),xa=n(),Ks=d("p"),Ks.innerHTML=ri,Wa=n(),J(Os.$$.fragment),ga=n(),he.c(),Gt=n(),et=d("p"),et.innerHTML=oi,ka=n(),fe.c(),Bt=n(),lt=d("p"),lt.innerHTML=pi,Xa=n(),Ge.c(),Vt=n(),J(st.$$.fragment),Aa=n(),tt=d("p"),tt.textContent=ui,_a=n(),_&&_.c(),vt=n(),nt=d("p"),nt.innerHTML=di,Ra=n(),J(el.$$.fragment),Qa=n(),R&&R.c(),xt=n(),J(at.$$.fragment),Na=n(),Mt=d("p"),Mt.innerHTML=ci,Ea=n(),J(it.$$.fragment),Fa=n(),J(rt.$$.fragment),za=n(),ot=d("p"),ot.textContent=yi,$a=n(),J(pt.$$.fragment),Ya=n(),kt=d("p"),this.h()},l(e){const s=Yi("svelte-u9bgzb",document.head);M=c(s,"META",{name:!0,content:!0}),s.forEach(l),w=a(e),i=c(e,"P",{}),At(i).forEach(l),m=a(e),U(h.$$.fragment,e),o=a(e),U(C.$$.fragment,e),b=a(e),W.l(e),x=a(e),X=c(e,"P",{"data-svelte-h":!0}),y(X)!=="svelte-gooydk"&&(X.innerHTML=A),G=a(e),U(B.$$.fragment,e),k=a(e),O=c(e,"P",{"data-svelte-h":!0}),y(O)!=="svelte-tkfu72"&&(O.innerHTML=se),V=a(e),g=c(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),At(g).forEach(l),ll=a(e),Q=c(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),At(Q).forEach(l),Qe=a(e),F=c(e,"P",{"data-svelte-h":!0}),y(F)!=="svelte-15fti1n"&&(F.innerHTML=Wt),Ne=a(e),U(E.$$.fragment,e),Ee=a(e),U(z.$$.fragment,e),sl=a(e),te=c(e,"P",{"data-svelte-h":!0}),y(te)!=="svelte-1btz2v1"&&(te.innerHTML=ve),Fe=a(e),U($.$$.fragment,e),tl=a(e),ne=c(e,"P",{"data-svelte-h":!0}),y(ne)!=="svelte-1fr9w3s"&&(ne.innerHTML=xe),ze=a(e),U(Y.$$.fragment,e),$e=a(e),H=c(e,"P",{"data-svelte-h":!0}),y(H)!=="svelte-5xwgzf"&&(H.textContent=gt),Ye=a(e),U(q.$$.fragment,e),He=a(e),U(S.$$.fragment,e),nl=a(e),ae=c(e,"P",{"data-svelte-h":!0}),y(ae)!=="svelte-1di0fmc"&&(ae.innerHTML=We),qe=a(e),U(L.$$.fragment,e),al=a(e),U(Me.$$.fragment,e),ie=a(e),ge=c(e,"P",{"data-svelte-h":!0}),y(ge)!=="svelte-1b9vf0l"&&(ge.innerHTML=Ml),re=a(e),ke=c(e,"P",{"data-svelte-h":!0}),y(ke)!=="svelte-1iuiuu3"&&(ke.innerHTML=il),oe=a(e),U(pe.$$.fragment,e),ue=a(e),U(Xe.$$.fragment,e),Se=a(e),D=c(e,"P",{"data-svelte-h":!0}),y(D)!=="svelte-k4qils"&&(D.textContent=rl),de=a(e),U(Ae.$$.fragment,e),Le=a(e),U(P.$$.fragment,e),ol=a(e),ce=c(e,"P",{"data-svelte-h":!0}),y(ce)!=="svelte-iwqkpw"&&(ce.innerHTML=r),f=a(e),U(pl.$$.fragment,e),Rt=a(e),U(ul.$$.fragment,e),Qt=a(e),dl=c(e,"P",{"data-svelte-h":!0}),y(dl)!=="svelte-1hrbav0"&&(dl.textContent=oM),Nt=a(e),U(cl.$$.fragment,e),Et=a(e),U(yl.$$.fragment,e),Ft=a(e),ml=c(e,"P",{"data-svelte-h":!0}),y(ml)!=="svelte-1508j97"&&(ml.innerHTML=pM),zt=a(e),Jl=c(e,"P",{"data-svelte-h":!0}),y(Jl)!=="svelte-8dg2di"&&(Jl.innerHTML=uM),$t=a(e),U(Ul.$$.fragment,e),Yt=a(e),Tl=c(e,"P",{"data-svelte-h":!0}),y(Tl)!=="svelte-u0c825"&&(Tl.innerHTML=dM),Ht=a(e),U(jl.$$.fragment,e),qt=a(e),U(wl.$$.fragment,e),St=a(e),bl=c(e,"P",{"data-svelte-h":!0}),y(bl)!=="svelte-1wt9jv1"&&(bl.innerHTML=cM),Lt=a(e),U(Il.$$.fragment,e),Dt=a(e),hl=c(e,"P",{"data-svelte-h":!0}),y(hl)!=="svelte-1vci7mq"&&(hl.textContent=yM),Pt=a(e),U(Cl.$$.fragment,e),Kt=a(e),U(fl.$$.fragment,e),Ot=a(e),Zl=c(e,"P",{"data-svelte-h":!0}),y(Zl)!=="svelte-rlzxy9"&&(Zl.innerHTML=mM),en=a(e),Ke=c(e,"DIV",{class:!0,"data-svelte-h":!0}),y(Ke)!=="svelte-cxbodn"&&(Ke.innerHTML=JM),ln=a(e),Gl=c(e,"P",{"data-svelte-h":!0}),y(Gl)!=="svelte-gm7pbj"&&(Gl.innerHTML=UM),sn=a(e),Bl=c(e,"P",{"data-svelte-h":!0}),y(Bl)!=="svelte-10q0cv"&&(Bl.innerHTML=TM),tn=a(e),Vl=c(e,"UL",{"data-svelte-h":!0}),y(Vl)!=="svelte-1p05m7n"&&(Vl.innerHTML=jM),nn=a(e),U(vl.$$.fragment,e),an=a(e),U(xl.$$.fragment,e),Mn=a(e),Wl=c(e,"P",{"data-svelte-h":!0}),y(Wl)!=="svelte-ro71sp"&&(Wl.innerHTML=wM),rn=a(e),gl=c(e,"P",{"data-svelte-h":!0}),y(gl)!=="svelte-1l0e4tv"&&(gl.innerHTML=bM),on=a(e),U(kl.$$.fragment,e),pn=a(e),U(Xl.$$.fragment,e),un=a(e),Al=c(e,"P",{"data-svelte-h":!0}),y(Al)!=="svelte-3kby3c"&&(Al.innerHTML=IM),dn=a(e),U(_l.$$.fragment,e),cn=a(e),U(Rl.$$.fragment,e),yn=a(e),Ql=c(e,"P",{"data-svelte-h":!0}),y(Ql)!=="svelte-nyr3vj"&&(Ql.textContent=hM),mn=a(e),U(Nl.$$.fragment,e),Jn=a(e),U(El.$$.fragment,e),Un=a(e),Fl=c(e,"P",{"data-svelte-h":!0}),y(Fl)!=="svelte-1u5q5k3"&&(Fl.textContent=CM),Tn=a(e),zl=c(e,"P",{"data-svelte-h":!0}),y(zl)!=="svelte-qtihlc"&&(zl.textContent=fM),jn=a(e),$l=c(e,"UL",{"data-svelte-h":!0}),y($l)!=="svelte-5n0jsk"&&($l.innerHTML=ZM),wn=a(e),Yl=c(e,"P",{"data-svelte-h":!0}),y(Yl)!=="svelte-1k6bgvg"&&(Yl.innerHTML=GM),bn=a(e),Hl=c(e,"P",{"data-svelte-h":!0}),y(Hl)!=="svelte-g9l7ye"&&(Hl.innerHTML=BM),In=a(e),U(ql.$$.fragment,e),hn=a(e),U(Sl.$$.fragment,e),Cn=a(e),Ll=c(e,"P",{"data-svelte-h":!0}),y(Ll)!=="svelte-1mx3gbb"&&(Ll.innerHTML=VM),fn=a(e),U(Dl.$$.fragment,e),Zn=a(e),U(Pl.$$.fragment,e),Gn=a(e),Kl=c(e,"P",{"data-svelte-h":!0}),y(Kl)!=="svelte-cl8bto"&&(Kl.innerHTML=vM),Bn=a(e),U(Ol.$$.fragment,e),Vn=a(e),U(es.$$.fragment,e),vn=a(e),ls=c(e,"P",{"data-svelte-h":!0}),y(ls)!=="svelte-12kp8v5"&&(ls.textContent=xM),xn=a(e),U(Oe.$$.fragment,e),Wn=a(e),ss=c(e,"P",{"data-svelte-h":!0}),y(ss)!=="svelte-1xc5r9n"&&(ss.textContent=WM),gn=a(e),U(ts.$$.fragment,e),kn=a(e),ns=c(e,"P",{"data-svelte-h":!0}),y(ns)!=="svelte-bfklpi"&&(ns.textContent=gM),Xn=a(e),as=c(e,"P",{"data-svelte-h":!0}),y(as)!=="svelte-q3xhpm"&&(as.innerHTML=kM),An=a(e),U(Ms.$$.fragment,e),_n=a(e),U(is.$$.fragment,e),Rn=a(e),rs=c(e,"P",{"data-svelte-h":!0}),y(rs)!=="svelte-1p1bzrm"&&(rs.textContent=XM),Qn=a(e),U(os.$$.fragment,e),Nn=a(e),ps=c(e,"P",{"data-svelte-h":!0}),y(ps)!=="svelte-1q75c11"&&(ps.innerHTML=AM),En=a(e),us=c(e,"P",{"data-svelte-h":!0}),y(us)!=="svelte-16sk6bb"&&(us.innerHTML=_M),Fn=a(e),U(ds.$$.fragment,e),zn=a(e),cs=c(e,"P",{"data-svelte-h":!0}),y(cs)!=="svelte-1paryn"&&(cs.textContent=RM),$n=a(e),U(ys.$$.fragment,e),Yn=a(e),U(ms.$$.fragment,e),Hn=a(e),Js=c(e,"P",{"data-svelte-h":!0}),y(Js)!=="svelte-13r2yez"&&(Js.textContent=QM),qn=a(e),Us=c(e,"P",{"data-svelte-h":!0}),y(Us)!=="svelte-orbnff"&&(Us.textContent=NM),Sn=a(e),me.l(e),jt=a(e),U(Ts.$$.fragment,e),Ln=a(e),Ue.l(e),wt=a(e),js=c(e,"P",{"data-svelte-h":!0}),y(js)!=="svelte-1ckp27h"&&(js.innerHTML=EM),Dn=a(e),ws=c(e,"UL",{"data-svelte-h":!0}),y(ws)!=="svelte-1rumwqr"&&(ws.innerHTML=FM),Pn=a(e),K=c(e,"P",{});var ee=At(K);Pa=_t(ee,"Ici, nous allons modifier légèrement ce processus car nous n’avons pas besoin de calculer les scores réels (juste la réponse prédite). Cela signifie que nous pouvons sauter l’étape de la SoftMax. Pour aller plus vite, nous ne donnerons pas non plus un score à toutes les paires "),bt=c(ee,"CODE",{"data-svelte-h":!0}),y(bt)!=="svelte-h5rtds"&&(bt.textContent=zM),Ka=_t(ee," possibles, mais seulement celles correspondant aux "),It=c(ee,"CODE",{"data-svelte-h":!0}),y(It)!=="svelte-4nlbo1"&&(It.textContent=$M),Oa=_t(ee," logits les plus élevés (avec "),ht=c(ee,"CODE",{"data-svelte-h":!0}),y(ht)!=="svelte-jugzo8"&&(ht.textContent=YM),eM=_t(ee,"). Puisque nous sautons la SoftMax, les scores seront des scores logi, et seront obtenus en prenant la somme des logits de début et de fin (au lieu du produit, à cause de la règle"),Kn=Hi(ee,!1),On=_t(ee,")."),ee.forEach(l),ea=a(e),bs=c(e,"P",{"data-svelte-h":!0}),y(bs)!=="svelte-1hk03cv"&&(bs.innerHTML=HM),la=a(e),U(Is.$$.fragment,e),sa=a(e),hs=c(e,"P",{"data-svelte-h":!0}),y(hs)!=="svelte-n4khqt"&&(hs.innerHTML=qM),ta=a(e),U(Cs.$$.fragment,e),na=a(e),fs=c(e,"P",{"data-svelte-h":!0}),y(fs)!=="svelte-153ph69"&&(fs.innerHTML=SM),aa=a(e),je.l(e),Ct=a(e),Zs=c(e,"P",{"data-svelte-h":!0}),y(Zs)!=="svelte-14jhvd3"&&(Zs.innerHTML=LM),Ma=a(e),U(Gs.$$.fragment,e),ia=a(e),Bs=c(e,"P",{"data-svelte-h":!0}),y(Bs)!=="svelte-7edm7i"&&(Bs.innerHTML=DM),ra=a(e),Vs=c(e,"UL",{"data-svelte-h":!0}),y(Vs)!=="svelte-1yw9edj"&&(Vs.innerHTML=PM),oa=a(e),vs=c(e,"P",{"data-svelte-h":!0}),y(vs)!=="svelte-1rt5912"&&(vs.textContent=KM),pa=a(e),U(xs.$$.fragment,e),ua=a(e),Ws=c(e,"P",{"data-svelte-h":!0}),y(Ws)!=="svelte-1vk8l47"&&(Ws.innerHTML=OM),da=a(e),U(gs.$$.fragment,e),ca=a(e),ks=c(e,"P",{"data-svelte-h":!0}),y(ks)!=="svelte-1u4cb8u"&&(ks.textContent=ei),ya=a(e),U(Xs.$$.fragment,e),ma=a(e),As=c(e,"P",{"data-svelte-h":!0}),y(As)!=="svelte-1c3dqzp"&&(As.textContent=li),Ja=a(e),U(_s.$$.fragment,e),Ua=a(e),U(Rs.$$.fragment,e),Ta=a(e),Qs=c(e,"P",{"data-svelte-h":!0}),y(Qs)!=="svelte-15iyuot"&&(Qs.textContent=si),ja=a(e),U(Ns.$$.fragment,e),wa=a(e),U(Es.$$.fragment,e),ba=a(e),Fs=c(e,"P",{"data-svelte-h":!0}),y(Fs)!=="svelte-1636pas"&&(Fs.innerHTML=ti),Ia=a(e),De.l(e),ft=a(e),U(zs.$$.fragment,e),ha=a(e),$s=c(e,"P",{"data-svelte-h":!0}),y($s)!=="svelte-swk5be"&&($s.textContent=ni),Ca=a(e),U(Ys.$$.fragment,e),fa=a(e),U(Hs.$$.fragment,e),Za=a(e),qs=c(e,"P",{"data-svelte-h":!0}),y(qs)!=="svelte-1l6io4e"&&(qs.innerHTML=ai),Ga=a(e),U(Ss.$$.fragment,e),Ba=a(e),be.l(e),Zt=a(e),Ls=c(e,"P",{"data-svelte-h":!0}),y(Ls)!=="svelte-cxmzfo"&&(Ls.innerHTML=Mi),Va=a(e),Ds=c(e,"P",{"data-svelte-h":!0}),y(Ds)!=="svelte-1gxynt"&&(Ds.innerHTML=ii),va=a(e),U(Ps.$$.fragment,e),xa=a(e),Ks=c(e,"P",{"data-svelte-h":!0}),y(Ks)!=="svelte-1p5kkdg"&&(Ks.innerHTML=ri),Wa=a(e),U(Os.$$.fragment,e),ga=a(e),he.l(e),Gt=a(e),et=c(e,"P",{"data-svelte-h":!0}),y(et)!=="svelte-18by3ea"&&(et.innerHTML=oi),ka=a(e),fe.l(e),Bt=a(e),lt=c(e,"P",{"data-svelte-h":!0}),y(lt)!=="svelte-13j5b8m"&&(lt.innerHTML=pi),Xa=a(e),Ge.l(e),Vt=a(e),U(st.$$.fragment,e),Aa=a(e),tt=c(e,"P",{"data-svelte-h":!0}),y(tt)!=="svelte-968ebd"&&(tt.textContent=ui),_a=a(e),_&&_.l(e),vt=a(e),nt=c(e,"P",{"data-svelte-h":!0}),y(nt)!=="svelte-1fmbje2"&&(nt.innerHTML=di),Ra=a(e),U(el.$$.fragment,e),Qa=a(e),R&&R.l(e),xt=a(e),U(at.$$.fragment,e),Na=a(e),Mt=c(e,"P",{"data-svelte-h":!0}),y(Mt)!=="svelte-1lv9460"&&(Mt.innerHTML=ci),Ea=a(e),U(it.$$.fragment,e),Fa=a(e),U(rt.$$.fragment,e),za=a(e),ot=c(e,"P",{"data-svelte-h":!0}),y(ot)!=="svelte-8cd38l"&&(ot.textContent=yi),$a=a(e),U(pt.$$.fragment,e),Ya=a(e),kt=c(e,"P",{}),At(kt).forEach(l),this.h()},h(){N(M,"name","hf:doc:metadata"),N(M,"content",Tr),Xi(g.src,Be="https://course-demos-bert-finetuned-squad.hf.space")||N(g,"src",Be),N(g,"frameborder","0"),N(g,"height","450"),N(g,"title","Gradio app"),N(g,"class","block dark:hidden container p-0 flex-grow space-iframe"),N(g,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),N(g,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),Xi(Q.src,Ve="https://course-demos-bert-finetuned-squad-darkmode.hf.space")||N(Q,"src",Ve),N(Q,"frameborder","0"),N(Q,"height","450"),N(Q,"title","Gradio app"),N(Q,"class","hidden dark:block container p-0 flex-grow space-iframe"),N(Q,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),N(Q,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),N(Ke,"class","flex justify-center"),Kn.a=On},m(e,s){Pe(document.head,M),t(e,w,s),t(e,i,s),t(e,m,s),T(h,e,s),t(e,o,s),T(C,e,s),t(e,b,s),ut[Z].m(e,s),t(e,x,s),t(e,X,s),t(e,G,s),T(B,e,s),t(e,k,s),t(e,O,s),t(e,V,s),t(e,g,s),t(e,ll,s),t(e,Q,s),t(e,Qe,s),t(e,F,s),t(e,Ne,s),T(E,e,s),t(e,Ee,s),T(z,e,s),t(e,sl,s),t(e,te,s),t(e,Fe,s),T($,e,s),t(e,tl,s),t(e,ne,s),t(e,ze,s),T(Y,e,s),t(e,$e,s),t(e,H,s),t(e,Ye,s),T(q,e,s),t(e,He,s),T(S,e,s),t(e,nl,s),t(e,ae,s),t(e,qe,s),T(L,e,s),t(e,al,s),T(Me,e,s),t(e,ie,s),t(e,ge,s),t(e,re,s),t(e,ke,s),t(e,oe,s),T(pe,e,s),t(e,ue,s),T(Xe,e,s),t(e,Se,s),t(e,D,s),t(e,de,s),T(Ae,e,s),t(e,Le,s),T(P,e,s),t(e,ol,s),t(e,ce,s),t(e,f,s),T(pl,e,s),t(e,Rt,s),T(ul,e,s),t(e,Qt,s),t(e,dl,s),t(e,Nt,s),T(cl,e,s),t(e,Et,s),T(yl,e,s),t(e,Ft,s),t(e,ml,s),t(e,zt,s),t(e,Jl,s),t(e,$t,s),T(Ul,e,s),t(e,Yt,s),t(e,Tl,s),t(e,Ht,s),T(jl,e,s),t(e,qt,s),T(wl,e,s),t(e,St,s),t(e,bl,s),t(e,Lt,s),T(Il,e,s),t(e,Dt,s),t(e,hl,s),t(e,Pt,s),T(Cl,e,s),t(e,Kt,s),T(fl,e,s),t(e,Ot,s),t(e,Zl,s),t(e,en,s),t(e,Ke,s),t(e,ln,s),t(e,Gl,s),t(e,sn,s),t(e,Bl,s),t(e,tn,s),t(e,Vl,s),t(e,nn,s),T(vl,e,s),t(e,an,s),T(xl,e,s),t(e,Mn,s),t(e,Wl,s),t(e,rn,s),t(e,gl,s),t(e,on,s),T(kl,e,s),t(e,pn,s),T(Xl,e,s),t(e,un,s),t(e,Al,s),t(e,dn,s),T(_l,e,s),t(e,cn,s),T(Rl,e,s),t(e,yn,s),t(e,Ql,s),t(e,mn,s),T(Nl,e,s),t(e,Jn,s),T(El,e,s),t(e,Un,s),t(e,Fl,s),t(e,Tn,s),t(e,zl,s),t(e,jn,s),t(e,$l,s),t(e,wn,s),t(e,Yl,s),t(e,bn,s),t(e,Hl,s),t(e,In,s),T(ql,e,s),t(e,hn,s),T(Sl,e,s),t(e,Cn,s),t(e,Ll,s),t(e,fn,s),T(Dl,e,s),t(e,Zn,s),T(Pl,e,s),t(e,Gn,s),t(e,Kl,s),t(e,Bn,s),T(Ol,e,s),t(e,Vn,s),T(es,e,s),t(e,vn,s),t(e,ls,s),t(e,xn,s),T(Oe,e,s),t(e,Wn,s),t(e,ss,s),t(e,gn,s),T(ts,e,s),t(e,kn,s),t(e,ns,s),t(e,Xn,s),t(e,as,s),t(e,An,s),T(Ms,e,s),t(e,_n,s),T(is,e,s),t(e,Rn,s),t(e,rs,s),t(e,Qn,s),T(os,e,s),t(e,Nn,s),t(e,ps,s),t(e,En,s),t(e,us,s),t(e,Fn,s),T(ds,e,s),t(e,zn,s),t(e,cs,s),t(e,$n,s),T(ys,e,s),t(e,Yn,s),T(ms,e,s),t(e,Hn,s),t(e,Js,s),t(e,qn,s),t(e,Us,s),t(e,Sn,s),dt[ye].m(e,s),t(e,jt,s),T(Ts,e,s),t(e,Ln,s),ct[Je].m(e,s),t(e,wt,s),t(e,js,s),t(e,Dn,s),t(e,ws,s),t(e,Pn,s),t(e,K,s),Pe(K,Pa),Pe(K,bt),Pe(K,Ka),Pe(K,It),Pe(K,Oa),Pe(K,ht),Pe(K,eM),Kn.m(Qi,K),Pe(K,On),t(e,ea,s),t(e,bs,s),t(e,la,s),T(Is,e,s),t(e,sa,s),t(e,hs,s),t(e,ta,s),T(Cs,e,s),t(e,na,s),t(e,fs,s),t(e,aa,s),yt[Te].m(e,s),t(e,Ct,s),t(e,Zs,s),t(e,Ma,s),T(Gs,e,s),t(e,ia,s),t(e,Bs,s),t(e,ra,s),t(e,Vs,s),t(e,oa,s),t(e,vs,s),t(e,pa,s),T(xs,e,s),t(e,ua,s),t(e,Ws,s),t(e,da,s),T(gs,e,s),t(e,ca,s),t(e,ks,s),t(e,ya,s),T(Xs,e,s),t(e,ma,s),t(e,As,s),t(e,Ja,s),T(_s,e,s),t(e,Ua,s),T(Rs,e,s),t(e,Ta,s),t(e,Qs,s),t(e,ja,s),T(Ns,e,s),t(e,wa,s),T(Es,e,s),t(e,ba,s),t(e,Fs,s),t(e,Ia,s),De.m(e,s),t(e,ft,s),T(zs,e,s),t(e,ha,s),t(e,$s,s),t(e,Ca,s),T(Ys,e,s),t(e,fa,s),T(Hs,e,s),t(e,Za,s),t(e,qs,s),t(e,Ga,s),T(Ss,e,s),t(e,Ba,s),mt[we].m(e,s),t(e,Zt,s),t(e,Ls,s),t(e,Va,s),t(e,Ds,s),t(e,va,s),T(Ps,e,s),t(e,xa,s),t(e,Ks,s),t(e,Wa,s),T(Os,e,s),t(e,ga,s),Jt[Ie].m(e,s),t(e,Gt,s),t(e,et,s),t(e,ka,s),Ut[Ce].m(e,s),t(e,Bt,s),t(e,lt,s),t(e,Xa,s),Tt[Ze].m(e,s),t(e,Vt,s),T(st,e,s),t(e,Aa,s),t(e,tt,s),t(e,_a,s),_&&_.m(e,s),t(e,vt,s),t(e,nt,s),t(e,Ra,s),T(el,e,s),t(e,Qa,s),R&&R.m(e,s),t(e,xt,s),T(at,e,s),t(e,Na,s),t(e,Mt,s),t(e,Ea,s),T(it,e,s),t(e,Fa,s),T(rt,e,s),t(e,za,s),t(e,ot,s),t(e,$a,s),T(pt,e,s),t(e,Ya,s),t(e,kt,s),Ha=!0},p(e,[s]){const ee={};s&1&&(ee.fw=e[0]),h.$set(ee);let lM=Z;Z=Ji(e),Z!==lM&&(Re(),u(ut[lM],1,1,()=>{ut[lM]=null}),_e(),W=ut[Z],W||(W=ut[Z]=mi[Z](e),W.c()),p(W,1),W.m(x.parentNode,x));const Wi={};s&2&&(Wi.$$scope={dirty:s,ctx:e}),E.$set(Wi);const gi={};s&2&&(gi.$$scope={dirty:s,ctx:e}),Oe.$set(gi);let sM=ye;ye=Ti(e),ye!==sM&&(Re(),u(dt[sM],1,1,()=>{dt[sM]=null}),_e(),me=dt[ye],me||(me=dt[ye]=Ui[ye](e),me.c()),p(me,1),me.m(jt.parentNode,jt));let tM=Je;Je=wi(e),Je!==tM&&(Re(),u(ct[tM],1,1,()=>{ct[tM]=null}),_e(),Ue=ct[Je],Ue||(Ue=ct[Je]=ji[Je](e),Ue.c()),p(Ue,1),Ue.m(wt.parentNode,wt));let nM=Te;Te=Ii(e),Te!==nM&&(Re(),u(yt[nM],1,1,()=>{yt[nM]=null}),_e(),je=yt[Te],je||(je=yt[Te]=bi[Te](e),je.c()),p(je,1),je.m(Ct.parentNode,Ct)),qa!==(qa=hi(e))&&(De.d(1),De=qa(e),De&&(De.c(),De.m(ft.parentNode,ft)));let aM=we;we=fi(e),we!==aM&&(Re(),u(mt[aM],1,1,()=>{mt[aM]=null}),_e(),be=mt[we],be||(be=mt[we]=Ci[we](e),be.c()),p(be,1),be.m(Zt.parentNode,Zt));let MM=Ie;Ie=Gi(e),Ie!==MM&&(Re(),u(Jt[MM],1,1,()=>{Jt[MM]=null}),_e(),he=Jt[Ie],he||(he=Jt[Ie]=Zi[Ie](e),he.c()),p(he,1),he.m(Gt.parentNode,Gt));let iM=Ce;Ce=Vi(e),Ce!==iM&&(Re(),u(Ut[iM],1,1,()=>{Ut[iM]=null}),_e(),fe=Ut[Ce],fe||(fe=Ut[Ce]=Bi[Ce](e),fe.c()),p(fe,1),fe.m(Bt.parentNode,Bt));let rM=Ze;Ze=xi(e),Ze!==rM&&(Re(),u(Tt[rM],1,1,()=>{Tt[rM]=null}),_e(),Ge=Tt[Ze],Ge||(Ge=Tt[Ze]=vi[Ze](e),Ge.c()),p(Ge,1),Ge.m(Vt.parentNode,Vt)),e[0]==="pt"?_?s&1&&p(_,1):(_=Ai(),_.c(),p(_,1),_.m(vt.parentNode,vt)):_&&(Re(),u(_,1,1,()=>{_=null}),_e());const ki={};s&2&&(ki.$$scope={dirty:s,ctx:e}),el.$set(ki),e[0]==="pt"?R?s&1&&p(R,1):(R=_i(),R.c(),p(R,1),R.m(xt.parentNode,xt)):R&&(Re(),u(R,1,1,()=>{R=null}),_e())},i(e){Ha||(p(h.$$.fragment,e),p(C.$$.fragment,e),p(W),p(B.$$.fragment,e),p(E.$$.fragment,e),p(z.$$.fragment,e),p($.$$.fragment,e),p(Y.$$.fragment,e),p(q.$$.fragment,e),p(S.$$.fragment,e),p(L.$$.fragment,e),p(Me.$$.fragment,e),p(pe.$$.fragment,e),p(Xe.$$.fragment,e),p(Ae.$$.fragment,e),p(P.$$.fragment,e),p(pl.$$.fragment,e),p(ul.$$.fragment,e),p(cl.$$.fragment,e),p(yl.$$.fragment,e),p(Ul.$$.fragment,e),p(jl.$$.fragment,e),p(wl.$$.fragment,e),p(Il.$$.fragment,e),p(Cl.$$.fragment,e),p(fl.$$.fragment,e),p(vl.$$.fragment,e),p(xl.$$.fragment,e),p(kl.$$.fragment,e),p(Xl.$$.fragment,e),p(_l.$$.fragment,e),p(Rl.$$.fragment,e),p(Nl.$$.fragment,e),p(El.$$.fragment,e),p(ql.$$.fragment,e),p(Sl.$$.fragment,e),p(Dl.$$.fragment,e),p(Pl.$$.fragment,e),p(Ol.$$.fragment,e),p(es.$$.fragment,e),p(Oe.$$.fragment,e),p(ts.$$.fragment,e),p(Ms.$$.fragment,e),p(is.$$.fragment,e),p(os.$$.fragment,e),p(ds.$$.fragment,e),p(ys.$$.fragment,e),p(ms.$$.fragment,e),p(me),p(Ts.$$.fragment,e),p(Ue),p(Is.$$.fragment,e),p(Cs.$$.fragment,e),p(je),p(Gs.$$.fragment,e),p(xs.$$.fragment,e),p(gs.$$.fragment,e),p(Xs.$$.fragment,e),p(_s.$$.fragment,e),p(Rs.$$.fragment,e),p(Ns.$$.fragment,e),p(Es.$$.fragment,e),p(zs.$$.fragment,e),p(Ys.$$.fragment,e),p(Hs.$$.fragment,e),p(Ss.$$.fragment,e),p(be),p(Ps.$$.fragment,e),p(Os.$$.fragment,e),p(he),p(fe),p(Ge),p(st.$$.fragment,e),p(_),p(el.$$.fragment,e),p(R),p(at.$$.fragment,e),p(it.$$.fragment,e),p(rt.$$.fragment,e),p(pt.$$.fragment,e),Ha=!0)},o(e){u(h.$$.fragment,e),u(C.$$.fragment,e),u(W),u(B.$$.fragment,e),u(E.$$.fragment,e),u(z.$$.fragment,e),u($.$$.fragment,e),u(Y.$$.fragment,e),u(q.$$.fragment,e),u(S.$$.fragment,e),u(L.$$.fragment,e),u(Me.$$.fragment,e),u(pe.$$.fragment,e),u(Xe.$$.fragment,e),u(Ae.$$.fragment,e),u(P.$$.fragment,e),u(pl.$$.fragment,e),u(ul.$$.fragment,e),u(cl.$$.fragment,e),u(yl.$$.fragment,e),u(Ul.$$.fragment,e),u(jl.$$.fragment,e),u(wl.$$.fragment,e),u(Il.$$.fragment,e),u(Cl.$$.fragment,e),u(fl.$$.fragment,e),u(vl.$$.fragment,e),u(xl.$$.fragment,e),u(kl.$$.fragment,e),u(Xl.$$.fragment,e),u(_l.$$.fragment,e),u(Rl.$$.fragment,e),u(Nl.$$.fragment,e),u(El.$$.fragment,e),u(ql.$$.fragment,e),u(Sl.$$.fragment,e),u(Dl.$$.fragment,e),u(Pl.$$.fragment,e),u(Ol.$$.fragment,e),u(es.$$.fragment,e),u(Oe.$$.fragment,e),u(ts.$$.fragment,e),u(Ms.$$.fragment,e),u(is.$$.fragment,e),u(os.$$.fragment,e),u(ds.$$.fragment,e),u(ys.$$.fragment,e),u(ms.$$.fragment,e),u(me),u(Ts.$$.fragment,e),u(Ue),u(Is.$$.fragment,e),u(Cs.$$.fragment,e),u(je),u(Gs.$$.fragment,e),u(xs.$$.fragment,e),u(gs.$$.fragment,e),u(Xs.$$.fragment,e),u(_s.$$.fragment,e),u(Rs.$$.fragment,e),u(Ns.$$.fragment,e),u(Es.$$.fragment,e),u(zs.$$.fragment,e),u(Ys.$$.fragment,e),u(Hs.$$.fragment,e),u(Ss.$$.fragment,e),u(be),u(Ps.$$.fragment,e),u(Os.$$.fragment,e),u(he),u(fe),u(Ge),u(st.$$.fragment,e),u(_),u(el.$$.fragment,e),u(R),u(at.$$.fragment,e),u(it.$$.fragment,e),u(rt.$$.fragment,e),u(pt.$$.fragment,e),Ha=!1},d(e){e&&(l(w),l(i),l(m),l(o),l(b),l(x),l(X),l(G),l(k),l(O),l(V),l(g),l(ll),l(Q),l(Qe),l(F),l(Ne),l(Ee),l(sl),l(te),l(Fe),l(tl),l(ne),l(ze),l($e),l(H),l(Ye),l(He),l(nl),l(ae),l(qe),l(al),l(ie),l(ge),l(re),l(ke),l(oe),l(ue),l(Se),l(D),l(de),l(Le),l(ol),l(ce),l(f),l(Rt),l(Qt),l(dl),l(Nt),l(Et),l(Ft),l(ml),l(zt),l(Jl),l($t),l(Yt),l(Tl),l(Ht),l(qt),l(St),l(bl),l(Lt),l(Dt),l(hl),l(Pt),l(Kt),l(Ot),l(Zl),l(en),l(Ke),l(ln),l(Gl),l(sn),l(Bl),l(tn),l(Vl),l(nn),l(an),l(Mn),l(Wl),l(rn),l(gl),l(on),l(pn),l(un),l(Al),l(dn),l(cn),l(yn),l(Ql),l(mn),l(Jn),l(Un),l(Fl),l(Tn),l(zl),l(jn),l($l),l(wn),l(Yl),l(bn),l(Hl),l(In),l(hn),l(Cn),l(Ll),l(fn),l(Zn),l(Gn),l(Kl),l(Bn),l(Vn),l(vn),l(ls),l(xn),l(Wn),l(ss),l(gn),l(kn),l(ns),l(Xn),l(as),l(An),l(_n),l(Rn),l(rs),l(Qn),l(Nn),l(ps),l(En),l(us),l(Fn),l(zn),l(cs),l($n),l(Yn),l(Hn),l(Js),l(qn),l(Us),l(Sn),l(jt),l(Ln),l(wt),l(js),l(Dn),l(ws),l(Pn),l(K),l(ea),l(bs),l(la),l(sa),l(hs),l(ta),l(na),l(fs),l(aa),l(Ct),l(Zs),l(Ma),l(ia),l(Bs),l(ra),l(Vs),l(oa),l(vs),l(pa),l(ua),l(Ws),l(da),l(ca),l(ks),l(ya),l(ma),l(As),l(Ja),l(Ua),l(Ta),l(Qs),l(ja),l(wa),l(ba),l(Fs),l(Ia),l(ft),l(ha),l($s),l(Ca),l(fa),l(Za),l(qs),l(Ga),l(Ba),l(Zt),l(Ls),l(Va),l(Ds),l(va),l(xa),l(Ks),l(Wa),l(ga),l(Gt),l(et),l(ka),l(Bt),l(lt),l(Xa),l(Vt),l(Aa),l(tt),l(_a),l(vt),l(nt),l(Ra),l(Qa),l(xt),l(Na),l(Mt),l(Ea),l(Fa),l(za),l(ot),l($a),l(Ya),l(kt)),l(M),j(h,e),j(C,e),ut[Z].d(e),j(B,e),j(E,e),j(z,e),j($,e),j(Y,e),j(q,e),j(S,e),j(L,e),j(Me,e),j(pe,e),j(Xe,e),j(Ae,e),j(P,e),j(pl,e),j(ul,e),j(cl,e),j(yl,e),j(Ul,e),j(jl,e),j(wl,e),j(Il,e),j(Cl,e),j(fl,e),j(vl,e),j(xl,e),j(kl,e),j(Xl,e),j(_l,e),j(Rl,e),j(Nl,e),j(El,e),j(ql,e),j(Sl,e),j(Dl,e),j(Pl,e),j(Ol,e),j(es,e),j(Oe,e),j(ts,e),j(Ms,e),j(is,e),j(os,e),j(ds,e),j(ys,e),j(ms,e),dt[ye].d(e),j(Ts,e),ct[Je].d(e),j(Is,e),j(Cs,e),yt[Te].d(e),j(Gs,e),j(xs,e),j(gs,e),j(Xs,e),j(_s,e),j(Rs,e),j(Ns,e),j(Es,e),De.d(e),j(zs,e),j(Ys,e),j(Hs,e),j(Ss,e),mt[we].d(e),j(Ps,e),j(Os,e),Jt[Ie].d(e),Ut[Ce].d(e),Tt[Ze].d(e),j(st,e),_&&_.d(e),j(el,e),R&&R.d(e),j(at,e),j(it,e),j(rt,e),j(pt,e)}}}const Tr='{"title":"Réponse aux questions","local":"réponse-aux-questions","sections":[{"title":"Préparation des données","local":"préparation-des-données","sections":[{"title":"Le jeu de données SQuAD","local":"le-jeu-de-données-squad","sections":[],"depth":3},{"title":"Traitement des données d’entraînement","local":"traitement-des-données-dentraînement","sections":[],"depth":3},{"title":"Traitement des données de validation","local":"traitement-des-données-de-validation","sections":[],"depth":3}],"depth":2},{"title":"<i> Finetuner </i> le modèle avec l’API Trainer","local":"i-finetuner-i-le-modèle-avec-lapi-trainer","sections":[],"depth":2},{"title":"<i> Finetuner </i> fin du modèle avec Keras","local":"i-finetuner-i-fin-du-modèle-avec-keras","sections":[{"title":"Post-traitement","local":"post-traitement","sections":[],"depth":3},{"title":"<i> Finetuning </i> du modèle","local":"i-finetuning-i-du-modèle","sections":[],"depth":3}],"depth":2},{"title":"Une boucle d’entraînement personnalisée","local":"une-boucle-dentraînement-personnalisée","sections":[{"title":"Préparer tout pour l’entraînement","local":"préparer-tout-pour-lentraînement","sections":[],"depth":3}],"depth":2},{"title":"Boucle d’entraînement","local":"boucle-dentraînement","sections":[{"title":"Utilisation du modèle <i> finetuné </i>","local":"utilisation-du-modèle-i-finetuné-i","sections":[],"depth":3}],"depth":2}],"depth":1}';function jr(v,M,w){let i="pt";return Ei(()=>{const m=new URLSearchParams(window.location.search);w(0,i=m.get("fw")||"pt")}),[i]}class Br extends Fi{constructor(M){super(),zi(this,M,jr,Ur,Ni,{})}}export{Br as component}; | |
Xet Storage Details
- Size:
- 205 kB
- Xet hash:
- 86ff5c857198b7ded9b76efaaa9c8823f93ad47634b071020417c5c2e9af67b2
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.