Buckets:

rtrm's picture
download
raw
144 kB
import{s as Oa,f as Hn,o as er,n as Se}from"../chunks/scheduler.37c15a92.js";import{S as sr,i as lr,g as M,s as n,r as d,A as tr,h as m,f as s,c as a,j as Rn,u as y,x as T,k as K,y as nr,a as l,v as J,t as c,b as Ql,d as u,w as f,p as ql}from"../chunks/index.2bf4358c.js";import{T as ss}from"../chunks/Tip.363c041f.js";import{Y as Vn}from"../chunks/Youtube.1e50a667.js";import{C as h}from"../chunks/CodeBlock.4e987730.js";import{C as Ka}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as ar}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Ze,E as rr}from"../chunks/getInferenceSnippets.ebf8be91.js";function ir(k){let r,w;return r=new Ka({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section4_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter7/section4_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section4_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter7/section4_tf.ipynb"}]}}),{c(){d(r.$$.fragment)},l(p){y(r.$$.fragment,p)},m(p,U){J(r,p,U),w=!0},i(p){w||(u(r.$$.fragment,p),w=!0)},o(p){c(r.$$.fragment,p),w=!1},d(p){f(r,p)}}}function pr(k){let r,w;return r=new Ka({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section4_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter7/section4_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section4_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter7/section4_pt.ipynb"}]}}),{c(){d(r.$$.fragment)},l(p){y(r.$$.fragment,p)},m(p,U){J(r,p,U),w=!0},i(p){w||(u(r.$$.fragment,p),w=!0)},o(p){c(r.$$.fragment,p),w=!1},d(p){f(r,p)}}}function or(k){let r,w="✏️ <strong>A votre tour !</strong> Un autre mot anglais souvent utilisé en français est « <em>email</em> ». Trouvez le premier échantillon dans l’échantillon d’entraînement qui utilise ce mot. Comment est-il traduit ? Comment le modèle pré-entraîné traduit-il cette même phrase ?";return{c(){r=M("p"),r.innerHTML=w},l(p){r=m(p,"P",{"data-svelte-h":!0}),T(r)!=="svelte-9dwuzb"&&(r.innerHTML=w)},m(p,U){l(p,r,U)},p:Se,d(p){p&&s(r)}}}function ur(k){let r,w="💡 Si vous utilisez un <em>tokenizer</em> multilingue tel que mBART, mBART-50 ou M2M100, vous devrez définir les codes de langue de vos entrées et cibles dans le <em>tokenizer</em> en définissant <code>tokenizer.src_lang</code> et <code>tokenizer.tgt_lang</code> aux bonnes valeurs.";return{c(){r=M("p"),r.innerHTML=w},l(p){r=m(p,"P",{"data-svelte-h":!0}),T(r)!=="svelte-249rmz"&&(r.innerHTML=w)},m(p,U){l(p,r,U)},p:Se,d(p){p&&s(r)}}}function cr(k){let r,w="💡 Si vous utilisez un modèle T5 (plus précisément, un des <em>checkpoints</em> <code>t5-xxx</code>), le modèle s’attendra à ce que les entrées aient un préfixe indiquant la tâche à accomplir, comme <code>translate: English to French:</code>.";return{c(){r=M("p"),r.innerHTML=w},l(p){r=m(p,"P",{"data-svelte-h":!0}),T(r)!=="svelte-qntner"&&(r.innerHTML=w)},m(p,U){l(p,r,U)},p:Se,d(p){p&&s(r)}}}function Mr(k){let r,w="⚠️ Nous ne faisons pas attention au masque d’attention des cibles car le modèle ne s’y attend pas. Au lieu de cela, les étiquettes correspondant à un <em>token</em> de <em>padding</em> doivent être mises à <code>-100</code> afin qu’elles soient ignorées dans le calcul de la perte. Cela sera fait par notre assembleur de données plus tard puisque nous appliquons le <em>padding</em> dynamique, mais si vous utilisez le <em>padding</em> ici, vous devriez adapter la fonction de prétraitement pour mettre toutes les étiquettes qui correspondent au <em>token</em> de <em>padding</em> à <code>-100</code>.";return{c(){r=M("p"),r.innerHTML=w},l(p){r=m(p,"P",{"data-svelte-h":!0}),T(r)!=="svelte-p2mn2v"&&(r.innerHTML=w)},m(p,U){l(p,r,U)},p:Se,d(p){p&&s(r)}}}function mr(k){let r,w,p,U="Tout d’abord, nous avons besoin d’un modèle à <em>finetuner</em>. Nous allons utiliser l’API habituelle <code>AutoModel</code> :",I,j,Z,_,x;return r=new Ze({props:{title:"<i> Finetuner </i> du modèle avec Keras",local:"i-finetuner-i-du-modèle-avec-keras",headingTag:"h2"}}),j=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsRm9yU2VxMlNlcUxNJTBBJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcTJTZXFMTS5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCUyQyUyMGZyb21fcHQlM0RUcnVlKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForSeq2SeqLM
model = TFAutoModelForSeq2SeqLM.from_pretrained(model_checkpoint, from_pt=<span class="hljs-literal">True</span>)`,wrap:!1}}),_=new ss({props:{warning:!1,$$slots:{default:[yr]},$$scope:{ctx:k}}}),{c(){d(r.$$.fragment),w=n(),p=M("p"),p.innerHTML=U,I=n(),d(j.$$.fragment),Z=n(),d(_.$$.fragment)},l($){y(r.$$.fragment,$),w=a($),p=m($,"P",{"data-svelte-h":!0}),T(p)!=="svelte-j27an9"&&(p.innerHTML=U),I=a($),y(j.$$.fragment,$),Z=a($),y(_.$$.fragment,$)},m($,C){J(r,$,C),l($,w,C),l($,p,C),l($,I,C),J(j,$,C),l($,Z,C),J(_,$,C),x=!0},i($){x||(u(r.$$.fragment,$),u(j.$$.fragment,$),u(_.$$.fragment,$),x=!0)},o($){c(r.$$.fragment,$),c(j.$$.fragment,$),c(_.$$.fragment,$),x=!1},d($){$&&(s(w),s(p),s(I),s(Z)),f(r,$),f(j,$),f(_,$)}}}function dr(k){let r,w,p,U='Le code actuel utilisant <code>Trainer</code> sera le même que précédemment, avec juste un petit changement : nous utilisons ici <a href="https://huggingface.co/transformers/main_classes/trainer.html#seq2seqtrainer" rel="nofollow"><code>Seq2SeqTrainer</code></a> qui est une sous-classe de <code>Trainer</code> qui nous permet de traiter correctement l’évaluation, en utilisant la méthode <code>generate()</code> pour prédire les sorties à partir des entrées. Nous y reviendrons plus en détail lorsque nous parlerons du calcul de la métrique.',I,j,Z="Tout d’abord, nous avons besoin d’un modèle à <em>finetuner</em>. Nous allons utiliser l’API habituelle <code>AutoModel</code> :",_,x,$;return r=new Ze({props:{title:"<i> Finetuner </i> le modèle avec l’API Trainer",local:"i-finetuner-i-le-modèle-avec-lapi-trainer",headingTag:"h2"}}),x=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcTJTZXFMTSUwQSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yU2VxMlNlcUxNLmZyb21fcHJldHJhaW5lZChtb2RlbF9jaGVja3BvaW50KQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSeq2SeqLM
model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)`,wrap:!1}}),{c(){d(r.$$.fragment),w=n(),p=M("p"),p.innerHTML=U,I=n(),j=M("p"),j.innerHTML=Z,_=n(),d(x.$$.fragment)},l(C){y(r.$$.fragment,C),w=a(C),p=m(C,"P",{"data-svelte-h":!0}),T(p)!=="svelte-1yfhvqf"&&(p.innerHTML=U),I=a(C),j=m(C,"P",{"data-svelte-h":!0}),T(j)!=="svelte-j27an9"&&(j.innerHTML=Z),_=a(C),y(x.$$.fragment,C)},m(C,B){J(r,C,B),l(C,w,B),l(C,p,B),l(C,I,B),l(C,j,B),l(C,_,B),J(x,C,B),$=!0},i(C){$||(u(r.$$.fragment,C),u(x.$$.fragment,C),$=!0)},o(C){c(r.$$.fragment,C),c(x.$$.fragment,C),$=!1},d(C){C&&(s(w),s(p),s(I),s(j),s(_)),f(r,C),f(x,C)}}}function yr(k){let r,w="💡 Le <em>checkpoint</em> <code>Helsinki-NLP/opus-mt-en-fr</code> ne dispose que de poids PyTorch, vous aurez donc une erreur si vous essayez de charger le modèle sans utiliser l’argument <code>from_pt=True</code> dans la méthode <code>from_pretrained()</code>. Lorsque vous spécifiez <code>from_pt=True</code>, la bibliothèque téléchargera et convertira automatiquement les poids PyTorch pour vous. Comme vous pouvez le constater, c’est très simple de passer d’un <em>framework</em> à l’autre dans 🤗 <em>Transformers</em> !";return{c(){r=M("p"),r.innerHTML=w},l(p){r=m(p,"P",{"data-svelte-h":!0}),T(r)!=="svelte-1vhjyee"&&(r.innerHTML=w)},m(p,U){l(p,r,U)},p:Se,d(p){p&&s(r)}}}function Jr(k){let r,w;return r=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvckZvclNlcTJTZXElMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGF0YUNvbGxhdG9yRm9yU2VxMlNlcSh0b2tlbml6ZXIlMkMlMjBtb2RlbCUzRG1vZGVsJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJ0ZiUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorForSeq2Seq
data_collator = DataCollatorForSeq2Seq(tokenizer, model=model, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>)`,wrap:!1}}),{c(){d(r.$$.fragment)},l(p){y(r.$$.fragment,p)},m(p,U){J(r,p,U),w=!0},i(p){w||(u(r.$$.fragment,p),w=!0)},o(p){c(r.$$.fragment,p),w=!1},d(p){f(r,p)}}}function fr(k){let r,w;return r=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvckZvclNlcTJTZXElMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGF0YUNvbGxhdG9yRm9yU2VxMlNlcSh0b2tlbml6ZXIlMkMlMjBtb2RlbCUzRG1vZGVsKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorForSeq2Seq
data_collator = DataCollatorForSeq2Seq(tokenizer, model=model)`,wrap:!1}}),{c(){d(r.$$.fragment)},l(p){y(r.$$.fragment,p)},m(p,U){J(r,p,U),w=!0},i(p){w||(u(r.$$.fragment,p),w=!0)},o(p){c(r.$$.fragment,p),w=!1},d(p){f(r,p)}}}function Tr(k){let r,w="Nous pouvons maintenant utiliser ce <code>data_collator</code> pour convertir chacun de nos jeux de données en un <code>tf.data.Dataset</code>, prêt pour l’entraînement :",p,U,I;return U=new h({props:{code:"bW9kZWwucHJlcGFyZV90Zl9kYXRhc2V0KCUwQSUyMCUyMCUyMCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0QzMiUyQyUwQSklMEF0Zl9ldmFsX2RhdGFzZXQlMjAlM0QlMjBtb2RlbC5wcmVwYXJlX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzREZhbHNlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDE2JTJDJTBBKQ==",highlighted:`model.prepare_tf_dataset(
tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
collate_fn=data_collator,
shuffle=<span class="hljs-literal">True</span>,
batch_size=<span class="hljs-number">32</span>,
)
tf_eval_dataset = model.prepare_tf_dataset(
tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>],
collate_fn=data_collator,
shuffle=<span class="hljs-literal">False</span>,
batch_size=<span class="hljs-number">16</span>,
)`,wrap:!1}}),{c(){r=M("p"),r.innerHTML=w,p=n(),d(U.$$.fragment)},l(j){r=m(j,"P",{"data-svelte-h":!0}),T(r)!=="svelte-k50ows"&&(r.innerHTML=w),p=a(j),y(U.$$.fragment,j)},m(j,Z){l(j,r,Z),l(j,p,Z),J(U,j,Z),I=!0},i(j){I||(u(U.$$.fragment,j),I=!0)},o(j){c(U.$$.fragment,j),I=!1},d(j){j&&(s(r),s(p)),f(U,j)}}}function jr(k){let r,w="Nous allons transmettre ce <code>data_collator</code> au <code>Seq2SeqTrainer</code>. Ensuite, jetons un coup d’oeil à la métrique.";return{c(){r=M("p"),r.innerHTML=w},l(p){r=m(p,"P",{"data-svelte-h":!0}),T(r)!=="svelte-9srzz2"&&(r.innerHTML=w)},m(p,U){l(p,r,U)},i:Se,o:Se,d(p){p&&s(r)}}}function Da(k){let r,w="La fonctionnalité que <code>Seq2SeqTrainer</code> ajoute à sa superclasse <code>Trainer</code> est la possibilité d’utiliser la méthode <code>generate()</code> pendant l’évaluation ou la prédiction. Pendant l’entraînement, le modèle utilisera les <code>decoder_input_ids</code> avec un masque d’attention assurant qu’il n’utilise pas les <em>tokens</em> après le <em>token</em> qu’il essaie de prédire, pour accélérer l’entraînement. Pendant l’inférence, nous ne pourrons pas les utiliser puisque nous n’aurons pas d’étiquettes. Ainsi c’est une bonne idée d’évaluer notre modèle avec la même configuration.",p,U,I='Comme nous l’avons vu dans le <a href="/course/fr/chapter1/6">chapitre 1</a>, le décodeur effectue l’inférence en prédisant les <em>tokens</em> un par un. C’est quelque chose qui est implémenté en coulisses dans 🤗 <em>Transformers</em> par la méthode <code>generate()</code>. Le <code>Seq2SeqTrainer</code> nous laissera utiliser cette méthode pour l’évaluation si nous indiquons <code>predict_with_generate=True</code>.';return{c(){r=M("p"),r.innerHTML=w,p=n(),U=M("p"),U.innerHTML=I},l(j){r=m(j,"P",{"data-svelte-h":!0}),T(r)!=="svelte-1h2zg5c"&&(r.innerHTML=w),p=a(j),U=m(j,"P",{"data-svelte-h":!0}),T(U)!=="svelte-12ernq4"&&(U.innerHTML=I)},m(j,Z){l(j,r,Z),l(j,p,Z),l(j,U,Z)},d(j){j&&(s(r),s(p),s(U))}}}function br(k){let r,w="Pour passer des sorties du modèle aux textes utilisables par la métrique, nous allons utiliser la méthode <code>tokenizer.batch_decode()</code>. Nous devons juste nettoyer tous les <code>-100</code> dans les étiquettes. Le <em>tokenizer</em> fera automatiquement la même chose pour le <em>token</em> de <em>padding</em> :",p,U,I;return U=new h({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBJTBBZGVmJTIwY29tcHV0ZV9tZXRyaWNzKGV2YWxfcHJlZHMpJTNBJTBBJTIwJTIwJTIwJTIwcHJlZHMlMkMlMjBsYWJlbHMlMjAlM0QlMjBldmFsX3ByZWRzJTBBJTIwJTIwJTIwJTIwJTIzJTIwRGFucyUyMGxlJTIwY2FzJTIwbyVDMyVCOSUyMGxlJTIwbW9kJUMzJUE4bGUlMjByZXRvdXJuZSUyMHBsdXMlMjBxdWUlMjBsZXMlMjBsb2dpdHMlMjBkZSUyMHByJUMzJUE5ZGljdGlvbiUwQSUyMCUyMCUyMCUyMGlmJTIwaXNpbnN0YW5jZShwcmVkcyUyQyUyMHR1cGxlKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZWRzJTIwJTNEJTIwcHJlZHMlNUIwJTVEJTBBJTBBJTIwJTIwJTIwJTIwZGVjb2RlZF9wcmVkcyUyMCUzRCUyMHRva2VuaXplci5iYXRjaF9kZWNvZGUocHJlZHMlMkMlMjBza2lwX3NwZWNpYWxfdG9rZW5zJTNEVHJ1ZSklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBSZW1wbGFjZXIlMjBsZXMlMjAtMTAwJTIwZGFucyUyMGxlcyUyMCVDMyVBOXRpcXVldHRlcyUyMGNhciUyMG5vdXMlMjBuZSUyMHBvdXZvbnMlMjBwYXMlMjBsZXMlMjBkJUMzJUE5Y29kZXIlMEElMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBucC53aGVyZShsYWJlbHMlMjAhJTNEJTIwLTEwMCUyQyUyMGxhYmVscyUyQyUyMHRva2VuaXplci5wYWRfdG9rZW5faWQpJTBBJTIwJTIwJTIwJTIwZGVjb2RlZF9sYWJlbHMlMjAlM0QlMjB0b2tlbml6ZXIuYmF0Y2hfZGVjb2RlKGxhYmVscyUyQyUyMHNraXBfc3BlY2lhbF90b2tlbnMlM0RUcnVlKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFF1ZWxxdWVzJTIwcG9zdC10cmFpdGVtZW50cyUyMHNpbXBsZXMlMEElMjAlMjAlMjAlMjBkZWNvZGVkX3ByZWRzJTIwJTNEJTIwJTVCcHJlZC5zdHJpcCgpJTIwZm9yJTIwcHJlZCUyMGluJTIwZGVjb2RlZF9wcmVkcyU1RCUwQSUyMCUyMCUyMCUyMGRlY29kZWRfbGFiZWxzJTIwJTNEJTIwJTVCJTVCbGFiZWwuc3RyaXAoKSU1RCUyMGZvciUyMGxhYmVsJTIwaW4lMjBkZWNvZGVkX2xhYmVscyU1RCUwQSUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMG1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEZGVjb2RlZF9wcmVkcyUyQyUyMHJlZmVyZW5jZXMlM0RkZWNvZGVkX2xhYmVscyklMEElMjAlMjAlMjAlMjByZXR1cm4lMjAlN0IlMjJibGV1JTIyJTNBJTIwcmVzdWx0JTVCJTIyc2NvcmUlMjIlNUQlN0Q=",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">eval_preds</span>):
preds, labels = eval_preds
<span class="hljs-comment"># Dans le cas où le modèle retourne plus que les logits de prédiction</span>
<span class="hljs-keyword">if</span> <span class="hljs-built_in">isinstance</span>(preds, <span class="hljs-built_in">tuple</span>):
preds = preds[<span class="hljs-number">0</span>]
decoded_preds = tokenizer.batch_decode(preds, skip_special_tokens=<span class="hljs-literal">True</span>)
<span class="hljs-comment"># Remplacer les -100 dans les étiquettes car nous ne pouvons pas les décoder</span>
labels = np.where(labels != -<span class="hljs-number">100</span>, labels, tokenizer.pad_token_id)
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=<span class="hljs-literal">True</span>)
<span class="hljs-comment"># Quelques post-traitements simples</span>
decoded_preds = [pred.strip() <span class="hljs-keyword">for</span> pred <span class="hljs-keyword">in</span> decoded_preds]
decoded_labels = [[label.strip()] <span class="hljs-keyword">for</span> label <span class="hljs-keyword">in</span> decoded_labels]
result = metric.compute(predictions=decoded_preds, references=decoded_labels)
<span class="hljs-keyword">return</span> {<span class="hljs-string">&quot;bleu&quot;</span>: result[<span class="hljs-string">&quot;score&quot;</span>]}`,wrap:!1}}),{c(){r=M("p"),r.innerHTML=w,p=n(),d(U.$$.fragment)},l(j){r=m(j,"P",{"data-svelte-h":!0}),T(r)!=="svelte-1qarl4r"&&(r.innerHTML=w),p=a(j),y(U.$$.fragment,j)},m(j,Z){l(j,r,Z),l(j,p,Z),J(U,j,Z),I=!0},i(j){I||(u(U.$$.fragment,j),I=!0)},o(j){c(U.$$.fragment,j),I=!1},d(j){j&&(s(r),s(p)),f(U,j)}}}function Ur(k){let r,w='Pour passer des sorties du modèle aux textes utilisables par la métrique, nous allons utiliser la méthode <code>tokenizer.batch_decode()</code>. Nous devons juste nettoyer tous les <code>-100</code> dans les étiquettes. Le <em>tokenizer</em> fera automatiquement la même chose pour le <em>token</em> de remplissage. Définissons une fonction qui prend notre modèle et un jeu de données et calcule des métriques sur ceux-ci. Nous allons également utiliser une astuce qui augmente considérablement les performances : compiler notre code de génération avec <a href="https://www.tensorflow.org/xla" rel="nofollow">XLA</a>, le compilateur d’algèbre linéaire accéléré de TensorFlow. XLA applique diverses optimisations au graphe de calcul du modèle, ce qui permet d’améliorer considérablement la vitesse et l’utilisation de la mémoire. Comme décrit dans un article du <a href="https://huggingface.co/blog/tf-xla-generate" rel="nofollow">blog d’Hugging Face</a>, XLA fonctionne mieux lorsque nos formes d’entrée ne varient pas trop. Pour gérer cela, nous allons rembourrer nos entrées à des multiples de 128, et créer un nouveau jeu de données avec l’assembleur de rembourrage. Puis nous appliquerons le décorateur <code>@tf.function(jit_compile=True)</code> à notre fonction de génération, qui marque la fonction entière pour la compilation avec XLA.',p,U,I;return U=new h({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFmcm9tJTIwdHFkbSUyMGltcG9ydCUyMHRxZG0lMEElMEFnZW5lcmF0aW9uX2RhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JGb3JTZXEyU2VxKCUwQSUyMCUyMCUyMCUyMHRva2VuaXplciUyQyUyMG1vZGVsJTNEbW9kZWwlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyJTJDJTIwcGFkX3RvX211bHRpcGxlX29mJTNEMTI4JTBBKSUwQXRmX2dlbmVyYXRlX2RhdGFzZXQlMjAlM0QlMjBtb2RlbC5wcmVwYXJlX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RnZW5lcmF0aW9uX2RhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEOCUyQyUwQSklMEElMEElMEElNDB0Zi5mdW5jdGlvbihqaXRfY29tcGlsZSUzRFRydWUpJTBBZGVmJTIwZ2VuZXJhdGVfd2l0aF94bGEoYmF0Y2gpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwbW9kZWwuZ2VuZXJhdGUoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW5wdXRfaWRzJTNEYmF0Y2glNUIlMjJpbnB1dF9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhdHRlbnRpb25fbWFzayUzRGJhdGNoJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfbmV3X3Rva2VucyUzRDEyOCUyQyUwQSUyMCUyMCUyMCUyMCklMEElMEElMEFkZWYlMjBjb21wdXRlX21ldHJpY3MoKSUzQSUwQSUyMCUyMCUyMCUyMGFsbF9wcmVkcyUyMCUzRCUyMCU1QiU1RCUwQSUyMCUyMCUyMCUyMGFsbF9sYWJlbHMlMjAlM0QlMjAlNUIlNUQlMEElMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyQyUyMGxhYmVscyUyMGluJTIwdHFkbSh0Zl9nZW5lcmF0ZV9kYXRhc2V0KSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwZ2VuZXJhdGVfd2l0aF94bGEoYmF0Y2gpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVjb2RlZF9wcmVkcyUyMCUzRCUyMHRva2VuaXplci5iYXRjaF9kZWNvZGUocHJlZGljdGlvbnMlMkMlMjBza2lwX3NwZWNpYWxfdG9rZW5zJTNEVHJ1ZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBsYWJlbHMubnVtcHkoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMG5wLndoZXJlKGxhYmVscyUyMCElM0QlMjAtMTAwJTJDJTIwbGFiZWxzJTJDJTIwdG9rZW5pemVyLnBhZF90b2tlbl9pZCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkZWNvZGVkX2xhYmVscyUyMCUzRCUyMHRva2VuaXplci5iYXRjaF9kZWNvZGUobGFiZWxzJTJDJTIwc2tpcF9zcGVjaWFsX3Rva2VucyUzRFRydWUpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVjb2RlZF9wcmVkcyUyMCUzRCUyMCU1QnByZWQuc3RyaXAoKSUyMGZvciUyMHByZWQlMjBpbiUyMGRlY29kZWRfcHJlZHMlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkZWNvZGVkX2xhYmVscyUyMCUzRCUyMCU1QiU1QmxhYmVsLnN0cmlwKCklNUQlMjBmb3IlMjBsYWJlbCUyMGluJTIwZGVjb2RlZF9sYWJlbHMlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhbGxfcHJlZHMuZXh0ZW5kKGRlY29kZWRfcHJlZHMpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWxsX2xhYmVscy5leHRlbmQoZGVjb2RlZF9sYWJlbHMpJTBBJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwbWV0cmljLmNvbXB1dGUocHJlZGljdGlvbnMlM0RhbGxfcHJlZHMlMkMlMjByZWZlcmVuY2VzJTNEYWxsX2xhYmVscyklMEElMjAlMjAlMjAlMjByZXR1cm4lMjAlN0IlMjJibGV1JTIyJTNBJTIwcmVzdWx0JTVCJTIyc2NvcmUlMjIlNUQlN0Q=",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf
<span class="hljs-keyword">from</span> tqdm <span class="hljs-keyword">import</span> tqdm
generation_data_collator = DataCollatorForSeq2Seq(
tokenizer, model=model, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>, pad_to_multiple_of=<span class="hljs-number">128</span>
)
tf_generate_dataset = model.prepare_tf_dataset(
tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>],
collate_fn=generation_data_collator,
shuffle=<span class="hljs-literal">False</span>,
batch_size=<span class="hljs-number">8</span>,
)
<span class="hljs-meta">@tf.function(<span class="hljs-params">jit_compile=<span class="hljs-literal">True</span></span>)</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">generate_with_xla</span>(<span class="hljs-params">batch</span>):
<span class="hljs-keyword">return</span> model.generate(
input_ids=batch[<span class="hljs-string">&quot;input_ids&quot;</span>],
attention_mask=batch[<span class="hljs-string">&quot;attention_mask&quot;</span>],
max_new_tokens=<span class="hljs-number">128</span>,
)
<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>():
all_preds = []
all_labels = []
<span class="hljs-keyword">for</span> batch, labels <span class="hljs-keyword">in</span> tqdm(tf_generate_dataset):
predictions = generate_with_xla(batch)
decoded_preds = tokenizer.batch_decode(predictions, skip_special_tokens=<span class="hljs-literal">True</span>)
labels = labels.numpy()
labels = np.where(labels != -<span class="hljs-number">100</span>, labels, tokenizer.pad_token_id)
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=<span class="hljs-literal">True</span>)
decoded_preds = [pred.strip() <span class="hljs-keyword">for</span> pred <span class="hljs-keyword">in</span> decoded_preds]
decoded_labels = [[label.strip()] <span class="hljs-keyword">for</span> label <span class="hljs-keyword">in</span> decoded_labels]
all_preds.extend(decoded_preds)
all_labels.extend(decoded_labels)
result = metric.compute(predictions=all_preds, references=all_labels)
<span class="hljs-keyword">return</span> {<span class="hljs-string">&quot;bleu&quot;</span>: result[<span class="hljs-string">&quot;score&quot;</span>]}`,wrap:!1}}),{c(){r=M("p"),r.innerHTML=w,p=n(),d(U.$$.fragment)},l(j){r=m(j,"P",{"data-svelte-h":!0}),T(r)!=="svelte-tgb0fh"&&(r.innerHTML=w),p=a(j),y(U.$$.fragment,j)},m(j,Z){l(j,r,Z),l(j,p,Z),J(U,j,Z),I=!0},i(j){I||(u(U.$$.fragment,j),I=!0)},o(j){c(U.$$.fragment,j),I=!1},d(j){j&&(s(r),s(p)),f(U,j)}}}function wr(k){let r,w="Une fois ceci fait, nous pouvons définir notre <code>Seq2SeqTrainingArguments</code>. Comme pour le <code>Trainer</code>, nous utilisons une sous-classe de <code>TrainingArguments</code> qui contient quelques champs supplémentaires :",p,U,I,j,Z="En dehors des hyperparamètres habituels (comme le taux d’apprentissage, le nombre d’époques, la taille des batchs et une le taux de décroissance des poids), voici quelques changements par rapport à ce que nous avons vu dans les sections précédentes :",_,x,$="<li>Nous ne définissons pas d’évaluation car elle prend du temps. Nous allons juste évaluer une fois notre modèle avant l’entraînement et après.</li> <li>Nous avons mis <code>fp16=True</code>, ce qui accélère l’entraînement sur les GPUs modernes.</li> <li>Nous définissons <code>predict_with_generate=True</code>, comme discuté ci-dessus.</li> <li>Nous utilisons <code>push_to_hub=True</code> pour télécharger le modèle sur le <em>Hub</em> à la fin de chaque époque.</li>",C,B,P='Notez que vous pouvez spécifier le nom complet du dépôt vers lequel vous voulez pousser avec l’argument <code>hub_model_id</code> (en particulier, vous devrez utiliser cet argument pour pousser vers une organisation). Par exemple, lorsque nous avons poussé le modèle vers l’organisation <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code></a>, nous avons ajouté <code>hub_model_id=&quot;huggingface-course/marian-finetuned-kde4-en-to-fr&quot;</code> à <code>Seq2SeqTrainingArguments</code>. Par défaut, le dépôt utilisé sera dans votre espace et nommé d’après le répertoire de sortie que vous avez défini. Dans notre cas ce sera <code>&quot;sgugger/marian-finetuned-kde4-en-to-fr&quot;</code> (qui est le modèle que nous avons lié au début de cette section).',de,N,A,F,V="Enfin, nous passons tout au <code>Seq2SeqTrainer</code> :",ye,Q,E,S,W="Avant d’entraîner, nous allons d’abord regarder le score obtenu par notre modèle, pour vérifier que nous n’aggravons pas les choses avec notre <em>finetuning</em>. Cette commande va prendre un peu de temps, vous pouvez donc prendre un café pendant qu’elle s’exécute :",ge,L,R,O,q,z,ie="Un score BLEU de 39 n’est pas trop mauvais, ce qui reflète le fait que notre modèle est déjà bon pour traduire des phrases anglaises en phrases françaises.",ee,X,b="Vient ensuite l’entraînement, qui prendra également un peu de temps :",G,D,Je,ce,pe="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. De cette façon, vous serez en mesure de reprendre votre entraînement sur une autre machine si nécessaire.",_e,se,Ie="Une fois l’entraînement terminé, nous évaluons à nouveau notre modèle. Avec un peu de chance, nous verrons une amélioration du score BLEU !",he,H,xe,le,fe,Me,oe="C’est une amélioration de près de 14 points, ce qui est formidable.",Ge,te,ke="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. <code>Trainer</code> rédige également une carte de modèle avec tous les résultats de l’évaluation et la télécharge. Cette carte de modèle contient des métadonnées qui aident le <em>Hub</em> à choisir le <em>widget</em> pour l’inférence. Habituellement, il n’y a pas besoin de dire quoi que ce soit car il peut inférer le bon <em>widget</em> à partir de la classe du modèle, mais dans ce cas, la même classe de modèle peut être utilisée pour toutes sortes de problèmes de séquence à séquence. Ainsi nous spécifions que c’est un modèle de traduction :",Ce,Y,Be,ne,ve="Cette commande renvoie l’URL du commit qu’elle vient de faire, si vous voulez l’inspecter :",Xe,ae,Te,je,be="À ce stade, vous pouvez utiliser le <em>widget</em> d’inférence sur le <em>Hub</em> pour tester votre modèle et le partager avec vos amis. Vous avez réussi à <em>finetuner</em> un modèle sur une tâche de traduction. Félicitations !",Ue,me,ue="Si vous souhaitez vous 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>.",$e;return U=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFNlcTJTZXFUcmFpbmluZ0FyZ3VtZW50cyUwQSUwQWFyZ3MlMjAlM0QlMjBTZXEyU2VxVHJhaW5pbmdBcmd1bWVudHMoJTBBJTIwJTIwJTIwJTIwZiUyMm1hcmlhbi1maW5ldHVuZWQta2RlNC1lbi10by1mciUyMiUyQyUwQSUyMCUyMCUyMCUyMGV2YWx1YXRpb25fc3RyYXRlZ3klM0QlMjJubyUyMiUyQyUwQSUyMCUyMCUyMCUyMHNhdmVfc3RyYXRlZ3klM0QlMjJlcG9jaCUyMiUyQyUwQSUyMCUyMCUyMCUyMGxlYXJuaW5nX3JhdGUlM0QyZS01JTJDJTBBJTIwJTIwJTIwJTIwcGVyX2RldmljZV90cmFpbl9iYXRjaF9zaXplJTNEMzIlMkMlMEElMjAlMjAlMjAlMjBwZXJfZGV2aWNlX2V2YWxfYmF0Y2hfc2l6ZSUzRDY0JTJDJTBBJTIwJTIwJTIwJTIwd2VpZ2h0X2RlY2F5JTNEMC4wMSUyQyUwQSUyMCUyMCUyMCUyMHNhdmVfdG90YWxfbGltaXQlM0QzJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluX2Vwb2NocyUzRDMlMkMlMEElMjAlMjAlMjAlMjBwcmVkaWN0X3dpdGhfZ2VuZXJhdGUlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwZnAxNiUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBwdXNoX3RvX2h1YiUzRFRydWUlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Seq2SeqTrainingArguments
args = Seq2SeqTrainingArguments(
<span class="hljs-string">f&quot;marian-finetuned-kde4-en-to-fr&quot;</span>,
evaluation_strategy=<span class="hljs-string">&quot;no&quot;</span>,
save_strategy=<span class="hljs-string">&quot;epoch&quot;</span>,
learning_rate=<span class="hljs-number">2e-5</span>,
per_device_train_batch_size=<span class="hljs-number">32</span>,
per_device_eval_batch_size=<span class="hljs-number">64</span>,
weight_decay=<span class="hljs-number">0.01</span>,
save_total_limit=<span class="hljs-number">3</span>,
num_train_epochs=<span class="hljs-number">3</span>,
predict_with_generate=<span class="hljs-literal">True</span>,
fp16=<span class="hljs-literal">True</span>,
push_to_hub=<span class="hljs-literal">True</span>,
)`,wrap:!1}}),N=new ss({props:{$$slots:{default:[Cr]},$$scope:{ctx:k}}}),Q=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFNlcTJTZXFUcmFpbmVyJTBBJTBBdHJhaW5lciUyMCUzRCUyMFNlcTJTZXFUcmFpbmVyKCUwQSUyMCUyMCUyMCUyMG1vZGVsJTJDJTBBJTIwJTIwJTIwJTIwYXJncyUyQyUwQSUyMCUyMCUyMCUyMHRyYWluX2RhdGFzZXQlM0R0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfZGF0YXNldCUzRHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBkYXRhX2NvbGxhdG9yJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMHRva2VuaXplciUzRHRva2VuaXplciUyQyUwQSUyMCUyMCUyMCUyMGNvbXB1dGVfbWV0cmljcyUzRGNvbXB1dGVfbWV0cmljcyUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Seq2SeqTrainer
trainer = Seq2SeqTrainer(
model,
args,
train_dataset=tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
eval_dataset=tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>],
data_collator=data_collator,
tokenizer=tokenizer,
compute_metrics=compute_metrics,
)`,wrap:!1}}),L=new h({props:{code:"dHJhaW5lci5ldmFsdWF0ZShtYXhfbGVuZ3RoJTNEbWF4X3RhcmdldF9sZW5ndGgp",highlighted:"trainer.evaluate(max_length=max_target_length)",wrap:!1}}),O=new h({props:{code:"JTdCJ2V2YWxfbG9zcyclM0ElMjAxLjY5NjQ0MDgxNTkyNTU5ODElMkMlMEElMjAnZXZhbF9ibGV1JyUzQSUyMDM5LjI2ODY1MDYxMDA3NjE2JTJDJTBBJTIwJ2V2YWxfcnVudGltZSclM0ElMjA5NjUuODg4NCUyQyUwQSUyMCdldmFsX3NhbXBsZXNfcGVyX3NlY29uZCclM0ElMjAyMS43NiUyQyUwQSUyMCdldmFsX3N0ZXBzX3Blcl9zZWNvbmQnJTNBJTIwMC4zNDElN0Q=",highlighted:`{<span class="hljs-string">&#x27;eval_loss&#x27;</span>: <span class="hljs-number">1.6964408159255981</span>,
<span class="hljs-string">&#x27;eval_bleu&#x27;</span>: <span class="hljs-number">39.26865061007616</span>,
<span class="hljs-string">&#x27;eval_runtime&#x27;</span>: <span class="hljs-number">965.8884</span>,
<span class="hljs-string">&#x27;eval_samples_per_second&#x27;</span>: <span class="hljs-number">21.76</span>,
<span class="hljs-string">&#x27;eval_steps_per_second&#x27;</span>: <span class="hljs-number">0.341</span>}`,wrap:!1}}),D=new h({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),H=new h({props:{code:"dHJhaW5lci5ldmFsdWF0ZShtYXhfbGVuZ3RoJTNEbWF4X3RhcmdldF9sZW5ndGgp",highlighted:"trainer.evaluate(max_length=max_target_length)",wrap:!1}}),le=new h({props:{code:"JTdCJ2V2YWxfbG9zcyclM0ElMjAwLjg1NTg1MDU3NzM1NDQzMTIlMkMlMEElMjAnZXZhbF9ibGV1JyUzQSUyMDUyLjk0MTYxMzM3Nzc1NTc2JTJDJTBBJTIwJ2V2YWxfcnVudGltZSclM0ElMjA3MTQuMjU3NiUyQyUwQSUyMCdldmFsX3NhbXBsZXNfcGVyX3NlY29uZCclM0ElMjAyOS40MjYlMkMlMEElMjAnZXZhbF9zdGVwc19wZXJfc2Vjb25kJyUzQSUyMDAuNDYxJTJDJTBBJTIwJ2Vwb2NoJyUzQSUyMDMuMCU3RA==",highlighted:`{<span class="hljs-string">&#x27;eval_loss&#x27;</span>: <span class="hljs-number">0.8558505773544312</span>,
<span class="hljs-string">&#x27;eval_bleu&#x27;</span>: <span class="hljs-number">52.94161337775576</span>,
<span class="hljs-string">&#x27;eval_runtime&#x27;</span>: <span class="hljs-number">714.2576</span>,
<span class="hljs-string">&#x27;eval_samples_per_second&#x27;</span>: <span class="hljs-number">29.426</span>,
<span class="hljs-string">&#x27;eval_steps_per_second&#x27;</span>: <span class="hljs-number">0.461</span>,
<span class="hljs-string">&#x27;epoch&#x27;</span>: <span class="hljs-number">3.0</span>}`,wrap:!1}}),Y=new h({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yih0YWdzJTNEJTIydHJhbnNsYXRpb24lMjIlMkMlMjBjb21taXRfbWVzc2FnZSUzRCUyMlRyYWluaW5nJTIwY29tcGxldGUlMjIp",highlighted:'trainer.push_to_hub(tags=<span class="hljs-string">&quot;translation&quot;</span>, commit_message=<span class="hljs-string">&quot;Training complete&quot;</span>)',wrap:!1}}),ae=new h({props:{code:"J2h0dHBzJTNBJTJGJTJGaHVnZ2luZ2ZhY2UuY28lMkZzZ3VnZ2VyJTJGbWFyaWFuLWZpbmV0dW5lZC1rZGU0LWVuLXRvLWZyJTJGY29tbWl0JTJGMzYwMWQ2MjFlM2JhYWUyYmM2M2QzMzExNDUyNTM1ZjhmNThmNmVmMyc=",highlighted:'<span class="hljs-string">&#x27;https://huggingface.co/sgugger/marian-finetuned-kde4-en-to-fr/commit/3601d621e3baae2bc63d3311452535f8f58f6ef3&#x27;</span>',wrap:!1}}),{c(){r=M("p"),r.innerHTML=w,p=n(),d(U.$$.fragment),I=n(),j=M("p"),j.textContent=Z,_=n(),x=M("ul"),x.innerHTML=$,C=n(),B=M("p"),B.innerHTML=P,de=n(),d(N.$$.fragment),A=n(),F=M("p"),F.innerHTML=V,ye=n(),d(Q.$$.fragment),E=n(),S=M("p"),S.innerHTML=W,ge=n(),d(L.$$.fragment),R=n(),d(O.$$.fragment),q=n(),z=M("p"),z.textContent=ie,ee=n(),X=M("p"),X.textContent=b,G=n(),d(D.$$.fragment),Je=n(),ce=M("p"),ce.innerHTML=pe,_e=n(),se=M("p"),se.textContent=Ie,he=n(),d(H.$$.fragment),xe=n(),d(le.$$.fragment),fe=n(),Me=M("p"),Me.textContent=oe,Ge=n(),te=M("p"),te.innerHTML=ke,Ce=n(),d(Y.$$.fragment),Be=n(),ne=M("p"),ne.textContent=ve,Xe=n(),d(ae.$$.fragment),Te=n(),je=M("p"),je.innerHTML=be,Ue=n(),me=M("p"),me.innerHTML=ue},l(o){r=m(o,"P",{"data-svelte-h":!0}),T(r)!=="svelte-1sz966c"&&(r.innerHTML=w),p=a(o),y(U.$$.fragment,o),I=a(o),j=m(o,"P",{"data-svelte-h":!0}),T(j)!=="svelte-ga8l48"&&(j.textContent=Z),_=a(o),x=m(o,"UL",{"data-svelte-h":!0}),T(x)!=="svelte-100suig"&&(x.innerHTML=$),C=a(o),B=m(o,"P",{"data-svelte-h":!0}),T(B)!=="svelte-1wlzniy"&&(B.innerHTML=P),de=a(o),y(N.$$.fragment,o),A=a(o),F=m(o,"P",{"data-svelte-h":!0}),T(F)!=="svelte-1pms38y"&&(F.innerHTML=V),ye=a(o),y(Q.$$.fragment,o),E=a(o),S=m(o,"P",{"data-svelte-h":!0}),T(S)!=="svelte-1l1653n"&&(S.innerHTML=W),ge=a(o),y(L.$$.fragment,o),R=a(o),y(O.$$.fragment,o),q=a(o),z=m(o,"P",{"data-svelte-h":!0}),T(z)!=="svelte-4199t9"&&(z.textContent=ie),ee=a(o),X=m(o,"P",{"data-svelte-h":!0}),T(X)!=="svelte-v4m94t"&&(X.textContent=b),G=a(o),y(D.$$.fragment,o),Je=a(o),ce=m(o,"P",{"data-svelte-h":!0}),T(ce)!=="svelte-3g6v09"&&(ce.innerHTML=pe),_e=a(o),se=m(o,"P",{"data-svelte-h":!0}),T(se)!=="svelte-1wc6dby"&&(se.textContent=Ie),he=a(o),y(H.$$.fragment,o),xe=a(o),y(le.$$.fragment,o),fe=a(o),Me=m(o,"P",{"data-svelte-h":!0}),T(Me)!=="svelte-ztdkbh"&&(Me.textContent=oe),Ge=a(o),te=m(o,"P",{"data-svelte-h":!0}),T(te)!=="svelte-1vhd9th"&&(te.innerHTML=ke),Ce=a(o),y(Y.$$.fragment,o),Be=a(o),ne=m(o,"P",{"data-svelte-h":!0}),T(ne)!=="svelte-hbu2"&&(ne.textContent=ve),Xe=a(o),y(ae.$$.fragment,o),Te=a(o),je=m(o,"P",{"data-svelte-h":!0}),T(je)!=="svelte-y3mub6"&&(je.innerHTML=be),Ue=a(o),me=m(o,"P",{"data-svelte-h":!0}),T(me)!=="svelte-5wbt18"&&(me.innerHTML=ue)},m(o,g){l(o,r,g),l(o,p,g),J(U,o,g),l(o,I,g),l(o,j,g),l(o,_,g),l(o,x,g),l(o,C,g),l(o,B,g),l(o,de,g),J(N,o,g),l(o,A,g),l(o,F,g),l(o,ye,g),J(Q,o,g),l(o,E,g),l(o,S,g),l(o,ge,g),J(L,o,g),l(o,R,g),J(O,o,g),l(o,q,g),l(o,z,g),l(o,ee,g),l(o,X,g),l(o,G,g),J(D,o,g),l(o,Je,g),l(o,ce,g),l(o,_e,g),l(o,se,g),l(o,he,g),J(H,o,g),l(o,xe,g),J(le,o,g),l(o,fe,g),l(o,Me,g),l(o,Ge,g),l(o,te,g),l(o,Ce,g),J(Y,o,g),l(o,Be,g),l(o,ne,g),l(o,Xe,g),J(ae,o,g),l(o,Te,g),l(o,je,g),l(o,Ue,g),l(o,me,g),$e=!0},i(o){$e||(u(U.$$.fragment,o),u(N.$$.fragment,o),u(Q.$$.fragment,o),u(L.$$.fragment,o),u(O.$$.fragment,o),u(D.$$.fragment,o),u(H.$$.fragment,o),u(le.$$.fragment,o),u(Y.$$.fragment,o),u(ae.$$.fragment,o),$e=!0)},o(o){c(U.$$.fragment,o),c(N.$$.fragment,o),c(Q.$$.fragment,o),c(L.$$.fragment,o),c(O.$$.fragment,o),c(D.$$.fragment,o),c(H.$$.fragment,o),c(le.$$.fragment,o),c(Y.$$.fragment,o),c(ae.$$.fragment,o),$e=!1},d(o){o&&(s(r),s(p),s(I),s(j),s(_),s(x),s(C),s(B),s(de),s(A),s(F),s(ye),s(E),s(S),s(ge),s(R),s(q),s(z),s(ee),s(X),s(G),s(Je),s(ce),s(_e),s(se),s(he),s(xe),s(fe),s(Me),s(Ge),s(te),s(Ce),s(Be),s(ne),s(Xe),s(Te),s(je),s(Ue),s(me)),f(U,o),f(N,o),f(Q,o),f(L,o),f(O,o),f(D,o),f(H,o),f(le,o),f(Y,o),f(ae,o)}}}function hr(k){let r,w="Avant de commencer, voyons quel type de résultats nous obtenons avec notre modèle sans entraînement :",p,U,I,j,Z,_,x="Une fois ceci fait, nous pouvons préparer tout ce dont nous avons besoin pour compiler et entraîner notre modèle. Notez l’utilisation de <code>tf.keras.mixed_precision.set_global_policy(&quot;mixed_float16&quot;)</code>. Ceci indiquera à Keras de s’entraîner en utilisant float16, ce qui peut donner un gain de vitesse significatif sur les GPUs qui le supportent (Nvidia 20xx/V100 ou plus récent).",$,C,B,P,de='Ensuite, nous définissons un <code>PushToHubCallback</code> pour télécharger notre modèle sur le <em>Hub</em> pendant l’entraînement, comme nous l’avons vu dans la <a href="/course/fr/chapter7/2">section 2</a>, puis nous entraînons simplement le modèle avec ce <em>callback</em> :',N,A,F,V,ye='Notez que vous pouvez spécifier le nom du dépôt vers lequel vous voulez pousser le modèle avec l’argument <code>hub_model_id</code> (en particulier, vous devrez utiliser cet argument pour pousser vers une organisation). Par exemple, lorsque nous avons poussé le modèle vers l’organisation <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code></a>, nous avons ajouté <code>hub_model_id=&quot;huggingface-course/marian-finetuned-kde4-en-to-fr&quot;</code> dans <code>Seq2SeqTrainingArguments</code>. 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. Ici ce sera <code>&quot;sgugger/marian-finetuned-kde4-en-to-fr&quot;</code> (qui est le modèle que nous avons lié au début de cette section).',Q,E,S,W,ge="Enfin, voyons à quoi ressemblent nos métriques maintenant que l’entraînement est terminé :",L,R,O,q,z,ie,ee="À ce stade, vous pouvez utiliser le <em>widget</em> d’inférence sur le <em>Hub</em> pour tester votre modèle et le partager avec vos amis. Vous avez réussi à <em>finetuner</em> un modèle sur une tâche de traduction. Félicitations !",X;return U=new h({props:{code:"cHJpbnQoY29tcHV0ZV9tZXRyaWNzKCkp",highlighted:'<span class="hljs-built_in">print</span>(compute_metrics())',wrap:!1}}),j=new h({props:{code:"JTdCJ2JsZXUnJTNBJTIwMzMuMjY5ODM3MDE0NTQ3MzMlN0Q=",highlighted:'{&#x27;bleu&#x27;: <span class="hljs-number">33.26983701454733</span>}',wrap:!1}}),C=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFmcm9tJTIwdHJhbnNmb3JtZXJzLmtlcmFzX2NhbGxiYWNrcyUyMGltcG9ydCUyMFB1c2hUb0h1YkNhbGxiYWNrJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEElMjMlMjBMZSUyMG5vbWJyZSUyMGQnJUMzJUE5dGFwZXMlMjBkJ2VudHJhJUMzJUFFbmVtZW50JTIwZXN0JTIwbGUlMjBub21icmUlMjBkJyVDMyVBOWNoYW50aWxsb25zJTIwZGFucyUyMGxlJTIwamV1JTIwZGUlMjBkb25uJUMzJUE5ZXMlMkMlMjBkaXZpcyVDMyVBOSUyMHBhciUyMGxhJTIwdGFpbGxlJTIwZHUlMjBiYXRjaCUyQyUwQSUyMyUyMHB1aXMlMjBtdWx0aXBsaSVDMyVBOSUyMHBhciUyMGxlJTIwbm9tYnJlJTIwdG90YWwlMjBkJyVDMyVBOXBvcXVlcy4lMjBOb3RleiUyMHF1ZSUyMGxlJTIwamV1JTIwZGUlMjBkb25uJUMzJUE5ZXMlMjB0Zl90cmFpbl9kYXRhc2V0JTIwZXN0JTIwaWNpJTIwdW4lMjB0Zi5kYXRhLkRhdGFzZXQlMkMlMEElMjMlMjBldCUyMG5vbiUyMGxlJTIwamV1JTIwZGUlMjBkb25uJUMzJUE5ZXMlMjBvcmlnaW5hbCUyMGRvbmMlMjBzb24lMjBsZW4oKSUyMGVzdCUyMGQlQzMlQTlqJUMzJUEwJTIwbnVtX3NhbXBsZXMlMjAlMkYlMkYlMjBiYXRjaF9zaXplLiUwQW51bV9lcG9jaHMlMjAlM0QlMjAzJTBBbnVtX3RyYWluX3N0ZXBzJTIwJTNEJTIwbGVuKHRmX3RyYWluX2RhdGFzZXQpJTIwKiUyMG51bV9lcG9jaHMlMEElMEFvcHRpbWl6ZXIlMkMlMjBzY2hlZHVsZSUyMCUzRCUyMGNyZWF0ZV9vcHRpbWl6ZXIoJTBBJTIwJTIwJTIwJTIwaW5pdF9sciUzRDVlLTUlMkMlMEElMjAlMjAlMjAlMjBudW1fd2FybXVwX3N0ZXBzJTNEMCUyQyUwQSUyMCUyMCUyMCUyMG51bV90cmFpbl9zdGVwcyUzRG51bV90cmFpbl9zdGVwcyUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9kZWNheV9yYXRlJTNEMC4wMSUyQyUwQSklMEFtb2RlbC5jb21waWxlKG9wdGltaXplciUzRG9wdGltaXplciklMEElMEElMjMlMjBFbnRyYSVDMyVBRW5lciUyMGVuJTIwbWl4ZWQtcHJlY2lzaW9uJTIwZmxvYXQxNiUwQXRmLmtlcmFzLm1peGVkX3ByZWNpc2lvbi5zZXRfZ2xvYmFsX3BvbGljeSglMjJtaXhlZF9mbG9hdDE2JTIyKQ==",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&#x27;étapes d&#x27;entraînement est le nombre d&#x27;é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&#x27;é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_epochs = <span class="hljs-number">3</span>
num_train_steps = <span class="hljs-built_in">len</span>(tf_train_dataset) * num_epochs
optimizer, schedule = create_optimizer(
init_lr=<span class="hljs-number">5e-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">&quot;mixed_float16&quot;</span>)`,wrap:!1}}),A=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5rZXJhc19jYWxsYmFja3MlMjBpbXBvcnQlMjBQdXNoVG9IdWJDYWxsYmFjayUwQSUwQWNhbGxiYWNrJTIwJTNEJTIwUHVzaFRvSHViQ2FsbGJhY2soJTBBJTIwJTIwJTIwJTIwb3V0cHV0X2RpciUzRCUyMm1hcmlhbi1maW5ldHVuZWQta2RlNC1lbi10by1mciUyMiUyQyUyMHRva2VuaXplciUzRHRva2VuaXplciUwQSklMEElMEFtb2RlbC5maXQoJTBBJTIwJTIwJTIwJTIwdGZfdHJhaW5fZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMHZhbGlkYXRpb25fZGF0YSUzRHRmX2V2YWxfZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMGNhbGxiYWNrcyUzRCU1QmNhbGxiYWNrJTVEJTJDJTBBJTIwJTIwJTIwJTIwZXBvY2hzJTNEbnVtX2Vwb2NocyUyQyUwQSk=",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">&quot;marian-finetuned-kde4-en-to-fr&quot;</span>, tokenizer=tokenizer
)
model.fit(
tf_train_dataset,
validation_data=tf_eval_dataset,
callbacks=[callback],
epochs=num_epochs,
)`,wrap:!1}}),E=new ss({props:{$$slots:{default:[vr]},$$scope:{ctx:k}}}),R=new h({props:{code:"cHJpbnQoY29tcHV0ZV9tZXRyaWNzKCkp",highlighted:'<span class="hljs-built_in">print</span>(compute_metrics())',wrap:!1}}),q=new h({props:{code:"JTdCJ2JsZXUnJTNBJTIwNTcuMzM0MDY2MjcxNTQ1ODY1JTdE",highlighted:'{&#x27;bleu&#x27;: <span class="hljs-number">57.334066271545865</span>}',wrap:!1}}),{c(){r=M("p"),r.textContent=w,p=n(),d(U.$$.fragment),I=n(),d(j.$$.fragment),Z=n(),_=M("p"),_.innerHTML=x,$=n(),d(C.$$.fragment),B=n(),P=M("p"),P.innerHTML=de,N=n(),d(A.$$.fragment),F=n(),V=M("p"),V.innerHTML=ye,Q=n(),d(E.$$.fragment),S=n(),W=M("p"),W.textContent=ge,L=n(),d(R.$$.fragment),O=n(),d(q.$$.fragment),z=n(),ie=M("p"),ie.innerHTML=ee},l(b){r=m(b,"P",{"data-svelte-h":!0}),T(r)!=="svelte-qmex94"&&(r.textContent=w),p=a(b),y(U.$$.fragment,b),I=a(b),y(j.$$.fragment,b),Z=a(b),_=m(b,"P",{"data-svelte-h":!0}),T(_)!=="svelte-1ykkbz5"&&(_.innerHTML=x),$=a(b),y(C.$$.fragment,b),B=a(b),P=m(b,"P",{"data-svelte-h":!0}),T(P)!=="svelte-ugk5ie"&&(P.innerHTML=de),N=a(b),y(A.$$.fragment,b),F=a(b),V=m(b,"P",{"data-svelte-h":!0}),T(V)!=="svelte-dbzkyx"&&(V.innerHTML=ye),Q=a(b),y(E.$$.fragment,b),S=a(b),W=m(b,"P",{"data-svelte-h":!0}),T(W)!=="svelte-lkrxqr"&&(W.textContent=ge),L=a(b),y(R.$$.fragment,b),O=a(b),y(q.$$.fragment,b),z=a(b),ie=m(b,"P",{"data-svelte-h":!0}),T(ie)!=="svelte-y3mub6"&&(ie.innerHTML=ee)},m(b,G){l(b,r,G),l(b,p,G),J(U,b,G),l(b,I,G),J(j,b,G),l(b,Z,G),l(b,_,G),l(b,$,G),J(C,b,G),l(b,B,G),l(b,P,G),l(b,N,G),J(A,b,G),l(b,F,G),l(b,V,G),l(b,Q,G),J(E,b,G),l(b,S,G),l(b,W,G),l(b,L,G),J(R,b,G),l(b,O,G),J(q,b,G),l(b,z,G),l(b,ie,G),X=!0},i(b){X||(u(U.$$.fragment,b),u(j.$$.fragment,b),u(C.$$.fragment,b),u(A.$$.fragment,b),u(E.$$.fragment,b),u(R.$$.fragment,b),u(q.$$.fragment,b),X=!0)},o(b){c(U.$$.fragment,b),c(j.$$.fragment,b),c(C.$$.fragment,b),c(A.$$.fragment,b),c(E.$$.fragment,b),c(R.$$.fragment,b),c(q.$$.fragment,b),X=!1},d(b){b&&(s(r),s(p),s(I),s(Z),s(_),s($),s(B),s(P),s(N),s(F),s(V),s(Q),s(S),s(W),s(L),s(O),s(z),s(ie)),f(U,b),f(j,b),f(C,b),f(A,b),f(E,b),f(R,b),f(q,b)}}}function Cr(k){let r,w="💡 Si le répertoire de sortie que vous utilisez existe déjà, il doit être un clone local du dépôt vers lequel vous voulez pousser. S’il ne l’est pas, vous obtiendrez une erreur lors de la définition de votre <code>Seq2SeqTrainer</code> et devrez définir un nouveau nom.";return{c(){r=M("p"),r.innerHTML=w},l(p){r=m(p,"P",{"data-svelte-h":!0}),T(r)!=="svelte-psr1e0"&&(r.innerHTML=w)},m(p,U){l(p,r,U)},p:Se,d(p){p&&s(r)}}}function vr(k){let r,w="💡 Si le répertoire de sortie que vous utilisez existe déjà, il doit être un clone local du dépôt vers lequel vous voulez pousser. S’il ne l’est pas, vous obtiendrez une erreur lors de l’appel de <code>model.fit()</code> et devrez définir un nouveau nom.";return{c(){r=M("p"),r.innerHTML=w},l(p){r=m(p,"P",{"data-svelte-h":!0}),T(r)!=="svelte-wgkrpj"&&(r.innerHTML=w)},m(p,U){l(p,r,U)},p:Se,d(p){p&&s(r)}}}function Pa(k){let r,w,p,U='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 à ce que nous avons fait dans la <a href="/course/fr/chapter7/2">section 2</a> et dans le <a href="/course/fr/chapter3/4">chapitre 3</a>.',I,j,Z,_,x="Vous avez vu tout cela plusieurs fois maintenant, donc nous allons passer en revue le code assez rapidement. D’abord, nous allons construire le <code>DataLoader</code> à partir de nos jeux de données, après avoir configuré les jeux de données au format <code>&quot;torch&quot;</code> pour obtenir les tenseurs PyTorch :",$,C,B,P,de="Ensuite, nous réinstantifions notre modèle pour nous assurer que nous ne poursuivons pas le <em>finetuning</em> précédent et que nous repartons du modèle pré-entraîné :",N,A,F,V,ye="Nous aurons alors besoin d’un optimiseur :",Q,E,S,W,ge="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> de Colab, vous devez déplacer tout ce code dans une fonction d’entraînement et ne devrait pas exécuter une cellule qui instancie un <code>Accelerator</code>.",L,R,O,q,z="Maintenant que nous avons envoyé notre <code>train_dataloader</code> à <code>accelerator.prepare()</code>, nous pouvons utiliser sa longueur pour calculer le nombre d’étapes d’entraînement. Rappelez-vous que nous devrions toujours faire cela après avoir préparé le chargeur de données car cette méthode va changer la longueur du <code>DataLoader</code>. Nous utilisons un programme linéaire classique du taux d’apprentissage à 0 :",ie,ee,X,b,G="Enfin, 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>) :",D,Je,ce,pe,_e,se,Ie="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 :",he,H,xe,le,fe="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.",Me,oe,Ge,te,ke="Nous sommes maintenant prêts à écrire la boucle d’entraînement complète. Pour simplifier sa partie évaluation, nous définissons cette fonction <code>postprocess()</code> qui prend les prédictions et les étiquettes et les convertit en listes de chaînes de caractères que notre objet <code>metric</code> attend :",Ce,Y,Be,ne,ve='La boucle d’entraînement ressemble beaucoup à celles de la <a href="/course/fr/chapter7/2">section 2</a> et du <a href="/course/fr/chapter3">chapitre 3</a>, avec quelques différences dans la partie évaluation. Donc concentrons-nous sur cela !',Xe,ae,Te="La première chose à noter est que nous utilisons la méthode <code>generate()</code> pour calculer les prédictions. C’est une méthode sur notre modèle de base et non pas le modèle enveloppé créé dans la méthode <code>prepare()</code>. C’est pourquoi nous déballons d’abord le modèle, puis nous appelons cette méthode.",je,be,Ue='La deuxième chose est que, comme avec la classification de <a href="/course/fr/chapter7/2"><em>token</em></a>, deux processus peuvent avoir rembourrés les entrées et les étiquettes à des formes différentes. Ainsi nous utilisons <code>accelerator.pad_across_processes()</code> pour rendre les prédictions et les étiquettes de la même forme avant d’appeler la méthode <code>gather()</code>. Si nous ne faisons pas cela, l’évaluation va soit se tromper, soit se bloquer pour toujours.',me,ue,$e,o,g,ze,Fe='Une fois que c’est fait, vous devriez avoir un modèle qui a des résultats assez similaires à celui entraîné avec <code>Seq2SeqTrainer</code>. Vous pouvez vérifier celui que nous avons entraîné en utilisant ce code sur <a href="https://huggingface.co/huggingface-course/marian-finetuned-kde4-en-to-fr-accelerate" rel="nofollow"><em>huggingface-course/marian-finetuned-kde4-en-to-fr-accelerate</em></a>. Et si vous voulez tester des modifications de la boucle d’entraînement, vous pouvez les mettre en œuvre directement en modifiant le code ci-dessus !',Le;return r=new Ze({props:{title:"Une boucle d’entraînement personnalisée",local:"une-boucle-dentraînement-personnalisée",headingTag:"h2"}}),j=new Ze({props:{title:"Préparer le tout pour l’entraînement",local:"préparer-le-tout-pour-lentraînement",headingTag:"h3"}}),C=new h({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBJTBBdG9rZW5pemVkX2RhdGFzZXRzLnNldF9mb3JtYXQoJTIydG9yY2glMjIpJTBBdHJhaW5fZGF0YWxvYWRlciUyMCUzRCUyMERhdGFMb2FkZXIoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDglMkMlMEEpJTBBZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMjBiYXRjaF9zaXplJTNEOCUwQSk=",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader
tokenized_datasets.set_format(<span class="hljs-string">&quot;torch&quot;</span>)
train_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
shuffle=<span class="hljs-literal">True</span>,
collate_fn=data_collator,
batch_size=<span class="hljs-number">8</span>,
)
eval_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>], collate_fn=data_collator, batch_size=<span class="hljs-number">8</span>
)`,wrap:!1}}),A=new h({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXEyU2VxTE0uZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2NoZWNrcG9pbnQp",highlighted:"model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)",wrap:!1}}),E=new h({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}}),R=new h({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQSUwQWFjY2VsZXJhdG9yJTIwJTNEJTIwQWNjZWxlcmF0b3IoKSUwQW1vZGVsJTJDJTIwb3B0aW1pemVyJTJDJTIwdHJhaW5fZGF0YWxvYWRlciUyQyUyMGV2YWxfZGF0YWxvYWRlciUyMCUzRCUyMGFjY2VsZXJhdG9yLnByZXBhcmUoJTBBJTIwJTIwJTIwJTIwbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMkMlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> Accelerator
accelerator = Accelerator()
model, optimizer, train_dataloader, eval_dataloader = accelerator.prepare(
model, optimizer, train_dataloader, eval_dataloader
)`,wrap:!1}}),ee=new h({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">&quot;linear&quot;</span>,
optimizer=optimizer,
num_warmup_steps=<span class="hljs-number">0</span>,
num_training_steps=num_training_steps,
)`,wrap:!1}}),Je=new h({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMFJlcG9zaXRvcnklMkMlMjBnZXRfZnVsbF9yZXBvX25hbWUlMEElMEFtb2RlbF9uYW1lJTIwJTNEJTIwJTIybWFyaWFuLWZpbmV0dW5lZC1rZGU0LWVuLXRvLWZyLWFjY2VsZXJhdGUlMjIlMEFyZXBvX25hbWUlMjAlM0QlMjBnZXRfZnVsbF9yZXBvX25hbWUobW9kZWxfbmFtZSklMEFyZXBvX25hbWU=",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">&quot;marian-finetuned-kde4-en-to-fr-accelerate&quot;</span>
repo_name = get_full_repo_name(model_name)
repo_name`,wrap:!1}}),pe=new h({props:{code:"J3NndWdnZXIlMkZtYXJpYW4tZmluZXR1bmVkLWtkZTQtZW4tdG8tZnItYWNjZWxlcmF0ZSc=",highlighted:'<span class="hljs-string">&#x27;sgugger/marian-finetuned-kde4-en-to-fr-accelerate&#x27;</span>',wrap:!1}}),H=new h({props:{code:"b3V0cHV0X2RpciUyMCUzRCUyMCUyMm1hcmlhbi1maW5ldHVuZWQta2RlNC1lbi10by1mci1hY2NlbGVyYXRlJTIyJTBBcmVwbyUyMCUzRCUyMFJlcG9zaXRvcnkob3V0cHV0X2RpciUyQyUyMGNsb25lX2Zyb20lM0RyZXBvX25hbWUp",highlighted:`output_dir = <span class="hljs-string">&quot;marian-finetuned-kde4-en-to-fr-accelerate&quot;</span>
repo = Repository(output_dir, clone_from=repo_name)`,wrap:!1}}),oe=new Ze({props:{title:"Boucle d’entraînement",local:"boucle-dentraînement",headingTag:"h3"}}),Y=new h({props:{code:"ZGVmJTIwcG9zdHByb2Nlc3MocHJlZGljdGlvbnMlMkMlMjBsYWJlbHMpJTNBJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlMjAlM0QlMjBwcmVkaWN0aW9ucy5jcHUoKS5udW1weSgpJTBBJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwbGFiZWxzLmNwdSgpLm51bXB5KCklMEElMEElMjAlMjAlMjAlMjBkZWNvZGVkX3ByZWRzJTIwJTNEJTIwdG9rZW5pemVyLmJhdGNoX2RlY29kZShwcmVkaWN0aW9ucyUyQyUyMHNraXBfc3BlY2lhbF90b2tlbnMlM0RUcnVlKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFJlbXBsYWNlJTIwLTEwMCUyMGRhbnMlMjBsZXMlMjAlQzMlQTl0aXF1ZXR0ZXMlMjBjYXIlMjBub3VzJTIwbmUlMjBwb3V2b25zJTIwcGFzJTIwbGVzJTIwZCVDMyVBOWNvZGVyJTBBJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwbnAud2hlcmUobGFiZWxzJTIwISUzRCUyMC0xMDAlMkMlMjBsYWJlbHMlMkMlMjB0b2tlbml6ZXIucGFkX3Rva2VuX2lkKSUwQSUyMCUyMCUyMCUyMGRlY29kZWRfbGFiZWxzJTIwJTNEJTIwdG9rZW5pemVyLmJhdGNoX2RlY29kZShsYWJlbHMlMkMlMjBza2lwX3NwZWNpYWxfdG9rZW5zJTNEVHJ1ZSklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBRdWVscXVlcyUyMHBvc3QtdHJhaXRlbWVudHMlMjBzaW1wbGVzJTBBJTIwJTIwJTIwJTIwZGVjb2RlZF9wcmVkcyUyMCUzRCUyMCU1QnByZWQuc3RyaXAoKSUyMGZvciUyMHByZWQlMjBpbiUyMGRlY29kZWRfcHJlZHMlNUQlMEElMjAlMjAlMjAlMjBkZWNvZGVkX2xhYmVscyUyMCUzRCUyMCU1QiU1QmxhYmVsLnN0cmlwKCklNUQlMjBmb3IlMjBsYWJlbCUyMGluJTIwZGVjb2RlZF9sYWJlbHMlNUQlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBkZWNvZGVkX3ByZWRzJTJDJTIwZGVjb2RlZF9sYWJlbHM=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">postprocess</span>(<span class="hljs-params">predictions, labels</span>):
predictions = predictions.cpu().numpy()
labels = labels.cpu().numpy()
decoded_preds = tokenizer.batch_decode(predictions, skip_special_tokens=<span class="hljs-literal">True</span>)
<span class="hljs-comment"># Remplace -100 dans les étiquettes car nous ne pouvons pas les décoder</span>
labels = np.where(labels != -<span class="hljs-number">100</span>, labels, tokenizer.pad_token_id)
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=<span class="hljs-literal">True</span>)
<span class="hljs-comment"># Quelques post-traitements simples</span>
decoded_preds = [pred.strip() <span class="hljs-keyword">for</span> pred <span class="hljs-keyword">in</span> decoded_preds]
decoded_labels = [[label.strip()] <span class="hljs-keyword">for</span> label <span class="hljs-keyword">in</span> decoded_labels]
<span class="hljs-keyword">return</span> decoded_preds, decoded_labels`,wrap:!1}}),ue=new h({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEFpbXBvcnQlMjB0b3JjaCUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFmb3IlMjBlcG9jaCUyMGluJTIwcmFuZ2UobnVtX3RyYWluX2Vwb2NocyklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBFbnRyYSVDMyVBRW5lbWVudCUwQSUyMCUyMCUyMCUyMG1vZGVsLnRyYWluKCklMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyMGluJTIwdHJhaW5fZGF0YWxvYWRlciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBvdXRwdXRzLmxvc3MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY2NlbGVyYXRvci5iYWNrd2FyZChsb3NzKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBscl9zY2hlZHVsZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnplcm9fZ3JhZCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvZ3Jlc3NfYmFyLnVwZGF0ZSgxKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEV2YWx1YXRpb24lMEElMjAlMjAlMjAlMjBtb2RlbC5ldmFsKCklMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyMGluJTIwdHFkbShldmFsX2RhdGFsb2FkZXIpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2l0aCUyMHRvcmNoLm5vX2dyYWQoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGdlbmVyYXRlZF90b2tlbnMlMjAlM0QlMjBhY2NlbGVyYXRvci51bndyYXBfbW9kZWwobW9kZWwpLmdlbmVyYXRlKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJhdGNoJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXR0ZW50aW9uX21hc2slM0RiYXRjaCU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWF4X2xlbmd0aCUzRDEyOCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBiYXRjaCU1QiUyMmxhYmVscyUyMiU1RCUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME4lQzMlQTljZXNzYWlyZSUyMHBvdXIlMjByZW1ib3VycmVyJTIwbGVzJTIwcHIlQzMlQTlkaWN0aW9ucyUyMGV0JTIwbGVzJTIwJUMzJUE5dGlxdWV0dGVzJTIwJUMzJUEwJTIwcmFzc2VtYmxlciUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGdlbmVyYXRlZF90b2tlbnMlMjAlM0QlMjBhY2NlbGVyYXRvci5wYWRfYWNyb3NzX3Byb2Nlc3NlcyglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBnZW5lcmF0ZWRfdG9rZW5zJTJDJTIwZGltJTNEMSUyQyUyMHBhZF9pbmRleCUzRHRva2VuaXplci5wYWRfdG9rZW5faWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwYWNjZWxlcmF0b3IucGFkX2Fjcm9zc19wcm9jZXNzZXMobGFiZWxzJTJDJTIwZGltJTNEMSUyQyUyMHBhZF9pbmRleCUzRC0xMDApJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJlZGljdGlvbnNfZ2F0aGVyZWQlMjAlM0QlMjBhY2NlbGVyYXRvci5nYXRoZXIoZ2VuZXJhdGVkX3Rva2VucyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbHNfZ2F0aGVyZWQlMjAlM0QlMjBhY2NlbGVyYXRvci5nYXRoZXIobGFiZWxzKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGRlY29kZWRfcHJlZHMlMkMlMjBkZWNvZGVkX2xhYmVscyUyMCUzRCUyMHBvc3Rwcm9jZXNzKHByZWRpY3Rpb25zX2dhdGhlcmVkJTJDJTIwbGFiZWxzX2dhdGhlcmVkKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1ldHJpYy5hZGRfYmF0Y2gocHJlZGljdGlvbnMlM0RkZWNvZGVkX3ByZWRzJTJDJTIwcmVmZXJlbmNlcyUzRGRlY29kZWRfbGFiZWxzKSUwQSUwQSUyMCUyMCUyMCUyMHJlc3VsdHMlMjAlM0QlMjBtZXRyaWMuY29tcHV0ZSgpJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMmVwb2NoJTIwJTdCZXBvY2glN0QlMkMlMjBCTEVVJTIwc2NvcmUlM0ElMjAlN0JyZXN1bHRzJTVCJ3Njb3JlJyU1RCUzQS4yZiU3RCUyMiklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTYXV2ZWdhcmRlciUyMGV0JTIwdCVDMyVBOWwlQzMlQTljaGFyZ2VyJTBBJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQSUyMCUyMCUyMCUyMHVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEElMjAlMjAlMjAlMjB1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSklMEElMjAlMjAlMjAlMjBpZiUyMGFjY2VsZXJhdG9yLmlzX21haW5fcHJvY2VzcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplci5zYXZlX3ByZXRyYWluZWQob3V0cHV0X2RpciklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvLnB1c2hfdG9faHViKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbW1pdF9tZXNzYWdlJTNEZiUyMlRyYWluaW5nJTIwaW4lMjBwcm9ncmVzcyUyMGVwb2NoJTIwJTdCZXBvY2glN0QlMjIlMkMlMjBibG9ja2luZyUzREZhbHNlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKQ==",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> batch <span class="hljs-keyword">in</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>()
<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():
generated_tokens = accelerator.unwrap_model(model).generate(
batch[<span class="hljs-string">&quot;input_ids&quot;</span>],
attention_mask=batch[<span class="hljs-string">&quot;attention_mask&quot;</span>],
max_length=<span class="hljs-number">128</span>,
)
labels = batch[<span class="hljs-string">&quot;labels&quot;</span>]
<span class="hljs-comment"># Nécessaire pour rembourrer les prédictions et les étiquettes à rassembler</span>
generated_tokens = accelerator.pad_across_processes(
generated_tokens, dim=<span class="hljs-number">1</span>, pad_index=tokenizer.pad_token_id
)
labels = accelerator.pad_across_processes(labels, dim=<span class="hljs-number">1</span>, pad_index=-<span class="hljs-number">100</span>)
predictions_gathered = accelerator.gather(generated_tokens)
labels_gathered = accelerator.gather(labels)
decoded_preds, decoded_labels = postprocess(predictions_gathered, labels_gathered)
metric.add_batch(predictions=decoded_preds, references=decoded_labels)
results = metric.compute()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;epoch <span class="hljs-subst">{epoch}</span>, BLEU score: <span class="hljs-subst">{results[<span class="hljs-string">&#x27;score&#x27;</span>]:<span class="hljs-number">.2</span>f}</span>&quot;</span>)
<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&quot;Training in progress epoch <span class="hljs-subst">{epoch}</span>&quot;</span>, blocking=<span class="hljs-literal">False</span>
)`,wrap:!1}}),o=new h({props:{code:"ZXBvY2glMjAwJTJDJTIwQkxFVSUyMHNjb3JlJTNBJTIwNTMuNDclMEFlcG9jaCUyMDElMkMlMjBCTEVVJTIwc2NvcmUlM0ElMjA1NC4yNCUwQWVwb2NoJTIwMiUyQyUyMEJMRVUlMjBzY29yZSUzQSUyMDU0LjQ0",highlighted:`epoch <span class="hljs-number">0</span>, BLEU score: <span class="hljs-number">53.47</span>
epoch <span class="hljs-number">1</span>, BLEU score: <span class="hljs-number">54.24</span>
epoch <span class="hljs-number">2</span>, BLEU score: <span class="hljs-number">54.44</span>`,wrap:!1}}),{c(){d(r.$$.fragment),w=n(),p=M("p"),p.innerHTML=U,I=n(),d(j.$$.fragment),Z=n(),_=M("p"),_.innerHTML=x,$=n(),d(C.$$.fragment),B=n(),P=M("p"),P.innerHTML=de,N=n(),d(A.$$.fragment),F=n(),V=M("p"),V.textContent=ye,Q=n(),d(E.$$.fragment),S=n(),W=M("p"),W.innerHTML=ge,L=n(),d(R.$$.fragment),O=n(),q=M("p"),q.innerHTML=z,ie=n(),d(ee.$$.fragment),X=n(),b=M("p"),b.innerHTML=G,D=n(),d(Je.$$.fragment),ce=n(),d(pe.$$.fragment),_e=n(),se=M("p"),se.textContent=Ie,he=n(),d(H.$$.fragment),xe=n(),le=M("p"),le.innerHTML=fe,Me=n(),d(oe.$$.fragment),Ge=n(),te=M("p"),te.innerHTML=ke,Ce=n(),d(Y.$$.fragment),Be=n(),ne=M("p"),ne.innerHTML=ve,Xe=n(),ae=M("p"),ae.innerHTML=Te,je=n(),be=M("p"),be.innerHTML=Ue,me=n(),d(ue.$$.fragment),$e=n(),d(o.$$.fragment),g=n(),ze=M("p"),ze.innerHTML=Fe},l(i){y(r.$$.fragment,i),w=a(i),p=m(i,"P",{"data-svelte-h":!0}),T(p)!=="svelte-1kstkds"&&(p.innerHTML=U),I=a(i),y(j.$$.fragment,i),Z=a(i),_=m(i,"P",{"data-svelte-h":!0}),T(_)!=="svelte-mqkqwh"&&(_.innerHTML=x),$=a(i),y(C.$$.fragment,i),B=a(i),P=m(i,"P",{"data-svelte-h":!0}),T(P)!=="svelte-4k9sem"&&(P.innerHTML=de),N=a(i),y(A.$$.fragment,i),F=a(i),V=m(i,"P",{"data-svelte-h":!0}),T(V)!=="svelte-qybzjb"&&(V.textContent=ye),Q=a(i),y(E.$$.fragment,i),S=a(i),W=m(i,"P",{"data-svelte-h":!0}),T(W)!=="svelte-106ku41"&&(W.innerHTML=ge),L=a(i),y(R.$$.fragment,i),O=a(i),q=m(i,"P",{"data-svelte-h":!0}),T(q)!=="svelte-tuu19l"&&(q.innerHTML=z),ie=a(i),y(ee.$$.fragment,i),X=a(i),b=m(i,"P",{"data-svelte-h":!0}),T(b)!=="svelte-wv5b87"&&(b.innerHTML=G),D=a(i),y(Je.$$.fragment,i),ce=a(i),y(pe.$$.fragment,i),_e=a(i),se=m(i,"P",{"data-svelte-h":!0}),T(se)!=="svelte-3l45zj"&&(se.textContent=Ie),he=a(i),y(H.$$.fragment,i),xe=a(i),le=m(i,"P",{"data-svelte-h":!0}),T(le)!=="svelte-1jqz79z"&&(le.innerHTML=fe),Me=a(i),y(oe.$$.fragment,i),Ge=a(i),te=m(i,"P",{"data-svelte-h":!0}),T(te)!=="svelte-9ifctd"&&(te.innerHTML=ke),Ce=a(i),y(Y.$$.fragment,i),Be=a(i),ne=m(i,"P",{"data-svelte-h":!0}),T(ne)!=="svelte-13o1cpm"&&(ne.innerHTML=ve),Xe=a(i),ae=m(i,"P",{"data-svelte-h":!0}),T(ae)!=="svelte-y39t5d"&&(ae.innerHTML=Te),je=a(i),be=m(i,"P",{"data-svelte-h":!0}),T(be)!=="svelte-1cwku9q"&&(be.innerHTML=Ue),me=a(i),y(ue.$$.fragment,i),$e=a(i),y(o.$$.fragment,i),g=a(i),ze=m(i,"P",{"data-svelte-h":!0}),T(ze)!=="svelte-p0z2iq"&&(ze.innerHTML=Fe)},m(i,v){J(r,i,v),l(i,w,v),l(i,p,v),l(i,I,v),J(j,i,v),l(i,Z,v),l(i,_,v),l(i,$,v),J(C,i,v),l(i,B,v),l(i,P,v),l(i,N,v),J(A,i,v),l(i,F,v),l(i,V,v),l(i,Q,v),J(E,i,v),l(i,S,v),l(i,W,v),l(i,L,v),J(R,i,v),l(i,O,v),l(i,q,v),l(i,ie,v),J(ee,i,v),l(i,X,v),l(i,b,v),l(i,D,v),J(Je,i,v),l(i,ce,v),J(pe,i,v),l(i,_e,v),l(i,se,v),l(i,he,v),J(H,i,v),l(i,xe,v),l(i,le,v),l(i,Me,v),J(oe,i,v),l(i,Ge,v),l(i,te,v),l(i,Ce,v),J(Y,i,v),l(i,Be,v),l(i,ne,v),l(i,Xe,v),l(i,ae,v),l(i,je,v),l(i,be,v),l(i,me,v),J(ue,i,v),l(i,$e,v),J(o,i,v),l(i,g,v),l(i,ze,v),Le=!0},i(i){Le||(u(r.$$.fragment,i),u(j.$$.fragment,i),u(C.$$.fragment,i),u(A.$$.fragment,i),u(E.$$.fragment,i),u(R.$$.fragment,i),u(ee.$$.fragment,i),u(Je.$$.fragment,i),u(pe.$$.fragment,i),u(H.$$.fragment,i),u(oe.$$.fragment,i),u(Y.$$.fragment,i),u(ue.$$.fragment,i),u(o.$$.fragment,i),Le=!0)},o(i){c(r.$$.fragment,i),c(j.$$.fragment,i),c(C.$$.fragment,i),c(A.$$.fragment,i),c(E.$$.fragment,i),c(R.$$.fragment,i),c(ee.$$.fragment,i),c(Je.$$.fragment,i),c(pe.$$.fragment,i),c(H.$$.fragment,i),c(oe.$$.fragment,i),c(Y.$$.fragment,i),c(ue.$$.fragment,i),c(o.$$.fragment,i),Le=!1},d(i){i&&(s(w),s(p),s(I),s(Z),s(_),s($),s(B),s(P),s(N),s(F),s(V),s(Q),s(S),s(W),s(L),s(O),s(q),s(ie),s(X),s(b),s(D),s(ce),s(_e),s(se),s(he),s(xe),s(le),s(Me),s(Ge),s(te),s(Ce),s(Be),s(ne),s(Xe),s(ae),s(je),s(be),s(me),s($e),s(g),s(ze)),f(r,i),f(j,i),f(C,i),f(A,i),f(E,i),f(R,i),f(ee,i),f(Je,i),f(pe,i),f(H,i),f(oe,i),f(Y,i),f(ue,i),f(o,i)}}}function $r(k){let r,w="✏️ <strong>A votre tour !</strong> Que retourne le modèle sur l’échantillon avec le mot « <em>email</em> » que vous avez identifié plus tôt ?";return{c(){r=M("p"),r.innerHTML=w},l(p){r=m(p,"P",{"data-svelte-h":!0}),T(r)!=="svelte-1065r59"&&(r.innerHTML=w)},m(p,U){l(p,r,U)},p:Se,d(p){p&&s(r)}}}function gr(k){let r,w,p,U,I,j,Z,_,x,$,C,B,P='Plongeons maintenant dans la traduction. Il s’agit d’une autre <a href="/course/fr/chapitre1/7">tâche de séquence à séquence</a>, ce qui signifie que c’est un problème qui peut être formulé comme le passage d’une séquence à une autre. En ce sens, le problème est assez proche de la tâche de <a href="/course/fr/chapitre7/6">résumé</a> et vous pouvez adapter ce que nous allons voir ici à d’autres problèmes de séquence à séquence tels que :',de,N,A="<li>Le <strong>transfert de style</strong> ? c’est-à-dire créer un modèle qui <em>traduit</em> des textes écrits dans un certain style vers un autre (par exemple, du formel au décontracté ou de l’anglais shakespearien à l’anglais moderne).</li> <li>La <strong>génération de réponse à des questions</strong> c’est-à-dire créer un modèle qui génère des réponses à des questions compte tenu d’un contexte.</li>",F,V,ye,Q,E='Si vous disposez d’un corpus de textes suffisamment important en deux langues différentes (ou plus), vous pouvez entraîner un nouveau modèle de traduction à partir de zéro, comme nous le ferons dans la section sur la <a href="/course/fr/chapitre7/6">modélisation causale du langage</a>. Il est toutefois plus rapide de <em>finetuner</em> un modèle de traduction existant, qu’il s’agisse d’un modèle multilingue comme mT5 ou mBART que vous souhaitez adapter à une paire de langues spécifique, ou même d’un modèle spécialisé dans la traduction d’une langue vers une autre que vous souhaitez adapter à votre corpus spécifique.',S,W,ge='Dans cette section, nous allons <em>finetuner</em> un modèle Marian pré-entraîné pour traduire de l’anglais au français (puisque de nombreux employés de Hugging Face parlent ces deux langues) sur le jeu de données <a href="https://huggingface.co/datasets/kde4" rel="nofollow">KDE4</a> qui est un jeu de données de fichiers localisés pour les applications <a href="https://apps.kde.org/" rel="nofollow">KDE</a>. Le modèle que nous utiliserons a été pré-entraîné sur un large corpus de textes français et anglais provenant du jeu de données <a href="https://opus.nlpl.eu/" rel="nofollow">Opus</a> qui contient en fait le jeu de données KDE4. A noter que même si le modèle pré-entraîné que nous utilisons a vu ces données pendant son pré-entraînement, nous verrons que nous pouvons obtenir une meilleure version de ce modèle après un <em>finetuning</em>.',L,R,O="Une fois que nous aurons terminé, nous aurons un modèle capable de faire des prédictions comme celle-ci :",q,z,ie,ee,X,b,G,D,Je='<img class="block dark:hidden lg:w-3/5" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/modeleval-marian-finetuned-kde4-en-to-fr.png" alt="One-hot encoded labels for question answering."/> <img class="hidden dark:block lg:w-3/5" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/modeleval-marian-finetuned-kde4-en-to-fr-dark.png" alt="One-hot encoded labels for question answering."/>',ce,pe,_e='Comme dans les sections précédentes, vous pouvez trouver, télécharger et vérifier les précisions de ce modèle sur le <a href="https://huggingface.co/huggingface-course/marian-finetuned-kde4-en-to-fr?text=This+plugin+allows+you+to+automatically+translate+web+pages+between+several+languages." rel="nofollow"><em>Hub</em></a>.',se,Ie,he,H,xe='Pour <em>finetuner</em> ou entraîner un modèle de traduction à partir de zéro, nous avons besoin d’un jeu de données adapté à cette tâche. Comme mentionné précédemment, nous utiliserons le jeu de données <a href="https://huggingface.co/datasets/kde4" rel="nofollow">KDE4</a> dans cette section. Notez que vous pouvez adapter assez facilement le code pour utiliser vos propres données du moment que vous disposez de paires de phrases dans les deux langues que vous voulez traduire. Reportez-vous au <a href="/course/fr/chapter5">chapitre 5</a> si vous avez besoin d’un rappel sur la façon de charger vos données personnalisées dans un <code>Dataset</code>.',le,fe,Me,oe,Ge="Comme d’habitude, nous téléchargeons notre jeu de données en utilisant la fonction <code>load_dataset()</code> :",te,ke,Ce,Y,Be='Si vous souhaitez travailler avec une autre paire de langues, 92 langues sont disponibles au total pour ce jeu de données. Vous pouvez les voir dans la <a href="https://huggingface.co/datasets/kde4" rel="nofollow">carte du jeu de données</a>.',ne,ve,Xe,ae,Te,je="Jetons un coup d’œil au jeu de données :",be,Ue,me,ue,$e,o,g='Nous avons 210 173 paires de phrases. Cependant regroupées dans un seul échantillon. Nous devrons donc créer notre propre jeu de validation. Comme nous l’avons vu dans le <a href="/course/fr/chapter5">chapitre 5</a>, un <code>Dataset</code> possède une méthode <code>train_test_split()</code> qui peut nous aider. Nous allons fournir une graine pour la reproductibilité :',ze,Fe,Le,i,v,ls,Yn="Nous pouvons renommer la clé <code>test</code> en <code>validation</code> comme ceci :",Pl,ts,Kl,ns,Fn="Examinons maintenant un élément de ce jeu de données :",Ol,as,et,rs,st,is,Sn=`Nous obtenons un dictionnaire contenant deux phrases dans la paire de langues qui nous intéresse.
Une particularité de ce jeu de données rempli de termes techniques informatiques est qu’ils sont tous entièrement traduits en français. Cependant, les ingénieurs français laissent la plupart des mots spécifiques à l’informatique en anglais lorsqu’ils parlent. Ici, par exemple, le mot « <em>threads</em> » pourrait très bien apparaître dans une phrase française, surtout dans une conversation technique. Mais dans ce jeu de données, il a été traduit en « fils de discussion ». Le modèle pré-entraîné que nous utilisons (qui a été pré-entraîné sur un plus grand corpus de phrases françaises et anglaises) prend l’option de laisser le mot tel quel :`,lt,ps,tt,os,nt,us,Ln=`Un autre exemple de ce comportement peut être observé avec le mot « <em>plugin</em> » qui n’est pas officiellement un mot français mais que la plupart des francophones comprendront et ne prendront pas la peine de traduire.
Dans le jeu de données KDE4, ce mot a été traduit en français par le plus officiel « module d’extension » :`,at,cs,rt,Ms,it,ms,Dn="Notre modèle pré-entraîné, lui, s’en tient au mot anglais :",pt,ds,ot,ys,ut,Js,Pn="Il sera intéressant de voir si notre modèle <em>finetuné</em> tient compte de ces particularités (alerte <em>spoiler</em> : il le fera).",ct,fs,Mt,De,mt,Ts,dt,js,yt,bs,Kn='Vous devriez maintenant connaître le principe : les textes doivent tous être convertis en ensembles d’ID de <em>tokens</em> pour que le modèle puisse leur donner un sens. Pour cette tâche, nous aurons besoin de tokeniser les entrées et les cibles. Notre première tâche est de créer notre objet <code>tokenizer</code>. Comme indiqué précédemment, nous utiliserons un modèle pré-entraîné Marian English to French. Si vous essayez ce code avec une autre paire de langues, assurez-vous d’adapter le <em>checkpoint</em> du modèle. L’organisation <a href="https://huggingface.co/Helsinki-NLP" rel="nofollow">Helsinki-NLP</a> fournit plus de mille modèles dans plusieurs langues.',Jt,Us,ft,ws,On='Vous pouvez remplacer le <code>model_checkpoint</code> par un tout autre modèle disponible sur le <a href="https://huggingface.co/models" rel="nofollow"><em>Hub</em></a> qui aurait votre préférence, ou par un dossier en local où vous avez sauvegardé un modèle pré-entraîné et un <em>tokenizer</em>.',Tt,Pe,jt,hs,ea="La préparation de nos données est assez simple. Il y a juste une chose à retenir : vous traitez les entrées comme d’habitude, mais pour les cibles, vous devez envelopper le <em>tokenizer</em> dans le gestionnaire de contexte <code>as_target_tokenizer()</code>.",bt,Cs,sa="Un gestionnaire de contexte en Python est introduit avec l’instruction <code>with</code> et est utile lorsque vous avez deux opérations liées à exécuter en paire. L’exemple le plus courant est lorsque vous écrivez ou lisez un fichier, ce qui est souvent fait dans une instruction comme :",Ut,vs,wt,$s,la="Ici, les deux opérations connexes qui sont exécutées en paire sont les actions d’ouverture et de fermeture du fichier. L’objet correspondant au fichier ouvert <code>f</code> n’existe qu’à l’intérieur du bloc indenté sous le <code>with</code>. L’ouverture se produit avant ce bloc et la fermeture à la fin du bloc.",ht,gs,ta="Dans le cas présent, le gestionnaire de contexte <code>as_target_tokenizer()</code> va définir le <em>tokenizer</em> dans la langue de sortie (ici, le français) avant l’exécution du bloc indenté, puis le redéfinir dans la langue d’entrée (ici, l’anglais).",Ct,Is,na="Ainsi, le prétraitement d’un échantillon ressemble à ceci :",vt,ks,$t,Zs,aa="Si nous oublions de tokeniser les cibles dans le gestionnaire de contexte, elles seront tokenisées par le <em>tokenizer</em> d’entrée, ce qui dans le cas d’un modèle Marian, ne va pas du tout bien se passer :",gt,_s,It,xs,kt,Gs,ra="Comme on peut le voir, utiliser le <em>tokenizer</em> anglais pour prétraiter une phrase française donne un batch de <em>tokens</em> plus important, puisque le <em>tokenizer</em> ne connaît aucun mot français (sauf ceux qui apparaissent aussi en anglais, comme « discussion »).",Zt,Bs,ia="Les <code>inputs</code> et les <code>targets</code> sont des dictionnaires avec nos clés habituelles (identifiants d’entrée, masque d’attention, etc.). La dernière étape est de définir une clé <code>&quot;labels&quot;</code> dans les entrées. Nous faisons cela dans la fonction de prétraitement que nous allons appliquer sur les jeux de données :",_t,Xs,xt,zs,pa="Notez que nous avons fixé des longueurs maximales similaires pour nos entrées et nos sorties. Comme les textes que nous traitons semblent assez courts, nous utilisons 128.",Gt,Ke,Bt,Oe,Xt,Rs,oa="Nous pouvons maintenant appliquer ce prétraitement en une seule fois sur toutes les échantillons de notre jeu de données :",zt,Vs,Rt,Ws,ua="Maintenant que les données ont été prétraitées, nous sommes prêts à <em>finetuner</em> notre modèle pré-entraîné !",Vt,Re,Ve,Al,Ns,ca="Notez que cette fois-ci, nous utilisons un modèle qui a été entraîné sur une tâche de traduction et qui peut déjà être utilisé, donc il n’y a pas d’avertissement concernant les poids manquants ou ceux nouvellement initialisés.",Wt,Qs,Nt,qs,Ma='Nous aurons besoin d’un assembleur de données pour gérer le rembourrage pour la mise en batchs dynamique. Ici, nous ne pouvons pas simplement utiliser un <code>DataCollatorWithPadding</code> comme dans le <a href="/course/fr/chapter3">chapitre 3</a> car cela ne rembourre que les entrées (identifiants d’entrée, masque d’attention, et <em>token</em> de type identifiants). Nos étiquettes doivent également être rembourrées à la longueur maximale rencontrée dans les étiquettes. Et, comme mentionné précédemment, la valeur de remplissage utilisée pour remplir les étiquettes doit être <code>-100</code> et non le <em>token</em> de <em>padding</em> du <em>tokenizer</em> afin de s’assurer que ces valeurs soient ignorées dans le calcul de la perte.',Qt,As,ma='Tout ceci est réalisé par un <a href="https://huggingface.co/transformers/main_classes/data_collator.html#datacollatorforseq2seq" rel="nofollow"><code>DataCollatorForSeq2Seq</code></a>. Comme le <code>DataCollatorWithPadding</code>, il prend le <code>tokenizer</code> utilisé pour prétraiter les entrées, mais également le <code>model</code>. C’est parce que cet assembleur de données est également responsable de la préparation des identifiants d’entrée du décodeur, qui sont des versions décalées des étiquettes avec un <em>token</em> spécial au début. Comme ce décalage est effectué de manière légèrement différente selon les architectures, le <code>DataCollatorForSeq2Seq</code> a besoin de connaître l’objet <code>model</code> :',qt,We,Ne,El,Es,da="Pour le tester sur quelques échantillons, nous l’appelons simplement sur une liste d’exemples de notre échantillon d’entrainement tokénisé :",At,Hs,Et,Ys,Ht,Fs,ya="Nous pouvons vérifier que nos étiquettes ont été rembourrées à la longueur maximale du batch, en utilisant <code>-100</code> :",Yt,Ss,Ft,Ls,St,Ds,Ja="Nous pouvons aussi jeter un coup d’œil aux identifiants d’entrée du décodeur, pour voir qu’il s’agit de versions décalées des étiquettes :",Lt,Ps,Dt,Ks,Pt,Os,fa="Voici les étiquettes des premier et deuxième éléments de notre jeu de données :",Kt,el,Ot,sl,en,Qe,qe,Hl,ll,sn,tl,ln,Yl,nl,Ta='La métrique traditionnelle utilisée pour la traduction est le <a href="https://en.wikipedia.org/wiki/BLEU" rel="nofollow">score BLEU</a>, introduit dans <a href="https://aclanthology.org/P02-1040.pdf" rel="nofollow">un article de 2002</a> par Kishore Papineni et al. Le score BLEU évalue dans quelle mesure les traductions sont proches de leurs étiquettes. Il ne mesure pas l’intelligibilité ou l’exactitude grammaticale des résultats générés par le modèle, mais utilise des règles statistiques pour garantir que tous les mots des résultats générés apparaissent également dans les cibles. En outre, il existe des règles qui pénalisent les répétitions des mêmes mots s’ils ne sont pas également répétés dans les cibles (pour éviter que le modèle ne produise des phrases telles que « the the the the the the the ») et les phrases produites qui sont plus courtes que celles des cibles (pour éviter que le modèle ne produise des phrases telles que « the »).',tn,al,ja='L’une des faiblesses de BLEU est qu’il s’attend à ce que le texte soit déjà tokenisé, ce qui rend difficile la comparaison des scores entre les modèles qui utilisent différents <em>tokenizers</em>. Par conséquent, la mesure la plus couramment utilisée aujourd’hui pour évaluer les modèles de traduction est <a href="https://github.com/mjpost/sacrebleu" rel="nofollow">SacreBLEU</a> qui remédie à cette faiblesse (et à d’autres) en standardisant l’étape de tokenisation. Pour utiliser cette métrique, nous devons d’abord installer la bibliothèque <em>SacreBLEU</em> :',nn,rl,an,il,ba='Nous pouvons ensuite charger ce score via <code>evaluate.load()</code> comme nous l’avons fait dans le <a href="/course/fr/chapter3">chapitre 3</a> :',rn,pl,pn,ol,Ua="Cette métrique prend des textes comme entrées et cibles. Elle est conçue pour accepter plusieurs cibles acceptables car il y a souvent plusieurs traductions possibles d’une même phrase. Le jeu de données que nous utilisons n’en fournit qu’une seule, mais en NLP, il n’est pas rare de trouver des jeux de données ayant plusieurs phrases comme étiquettes. Ainsi, les prédictions doivent être une liste de phrases mais les références doivent être une liste de listes de phrases.",on,ul,wa="Essayons un exemple :",un,cl,cn,Ml,Mn,ml,ha='Cela donne un score BLEU de 46.75, ce qui est plutôt bon. A titre de comparaison, le <em>Transformer</em> original dans l’article <a href="https://arxiv.org/pdf/1706.03762.pdf" rel="nofollow"><em>Attention Is All You Need</em></a> a obtenu un score BLEU de 41.8 sur une tâche de traduction similaire entre l’anglais et le français ! (Pour plus d’informations sur les métriques individuelles, comme <code>counts</code> et <code>bp</code>, voir le <a href="https://github.com/mjpost/sacrebleu/blob/078c440168c6adc89ba75fe6d63f0d922d42bcfe/sacrebleu/metrics/bleu.py#L74" rel="nofollow">dépôt SacreBLEU</a>. D’autre part, si nous essayons avec les deux mauvais types de prédictions (répétitions ou prédiction trop courte) qui sortent souvent des modèles de traduction, nous obtiendrons des scores BLEU plutôt mauvais :',mn,dl,dn,yl,yn,Jl,Jn,fl,fn,Tl,Ca="Le score peut aller de 0 à 100. Plus il est élevé, mieux c’est.",Tn,Ae,Ee,Fl,jl,va="Maintenant que c’est fait, nous sommes prêts à <em>finetuner</em> notre modèle !",jn,bl,bn,Ul,$a="La première étape consiste à se connecter à Hugging Face, afin de pouvoir télécharger vos résultats sur le <em>Hub</em>. Il y a une fonction pratique pour vous aider à le faire dans un <em>notebook</em> :",Un,wl,wn,hl,ga="Cela affichera un <em>widget</em> où vous pourrez entrer vos identifiants de connexion à Hugging Face.",hn,Cl,Ia="Si vous ne travaillez pas dans un <em>notebook</em>, tapez simplement la ligne suivante dans votre terminal :",Cn,vl,vn,He,Ye,Sl,Ll,$l,$n,gl,ka="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>, nous devons juste spécifier l’identifiant de modèle approprié :",gn,Il,In,kl,kn,Zl,Za="Comme prévu, notre modèle pré-entraîné a adapté ses connaissances au corpus sur lequel nous l’avons <em>finetuné</em>. Et au lieu de laisser le mot anglais « <em>threads</em> », le modèle le traduit maintenant par la version française officielle. Il en va de même pour « <em>plugin</em> » :",Zn,_l,_n,xl,xn,Gl,_a="Un autre excellent exemple d’adaptation au domaine !",Gn,es,Bn,Bl,Xn,Dl,zn;I=new ar({props:{fw:k[0]}}),Z=new Ze({props:{title:"Traduction",local:"traduction",headingTag:"h1"}});const xa=[pr,ir],Xl=[];function Ga(e,t){return e[0]==="pt"?0:1}x=Ga(k),$=Xl[x]=xa[x](k),V=new Vn({props:{id:"1JvfrvZgi6c"}}),Ie=new Ze({props:{title:"Préparation des données",local:"préparation-des-données",headingTag:"h2"}}),fe=new Ze({props:{title:"Le jeu de données KDE4",local:"le-jeu-de-données-kde4",headingTag:"h3"}}),ke=new h({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBcmF3X2RhdGFzZXRzJTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMmtkZTQlMjIlMkMlMjBsYW5nMSUzRCUyMmVuJTIyJTJDJTIwbGFuZzIlM0QlMjJmciUyMik=",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset
raw_datasets = load_dataset(<span class="hljs-string">&quot;kde4&quot;</span>, lang1=<span class="hljs-string">&quot;en&quot;</span>, lang2=<span class="hljs-string">&quot;fr&quot;</span>)`,wrap:!1}}),Ue=new h({props:{code:"cmF3X2RhdGFzZXRz",highlighted:"raw_datasets",wrap:!1}}),ue=new h({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2lkJyUyQyUyMCd0cmFuc2xhdGlvbiclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDIxMDE3MyUwQSUyMCUyMCUyMCUyMCU3RCklMEElN0Qp",highlighted:`DatasetDict({
train: Dataset({
features: [<span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;translation&#x27;</span>],
num_rows: <span class="hljs-number">210173</span>
})
})`,wrap:!1}}),Fe=new h({props:{code:"c3BsaXRfZGF0YXNldHMlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC50cmFpbl90ZXN0X3NwbGl0KHRyYWluX3NpemUlM0QwLjklMkMlMjBzZWVkJTNEMjApJTBBc3BsaXRfZGF0YXNldHM=",highlighted:`split_datasets = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>].train_test_split(train_size=<span class="hljs-number">0.9</span>, seed=<span class="hljs-number">20</span>)
split_datasets`,wrap:!1}}),i=new h({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2lkJyUyQyUyMCd0cmFuc2xhdGlvbiclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE4OTE1NSUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB0ZXN0JTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidpZCclMkMlMjAndHJhbnNsYXRpb24nJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjAyMTAxOCUwQSUyMCUyMCUyMCUyMCU3RCklMEElN0Qp",highlighted:`DatasetDict({
train: Dataset({
features: [<span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;translation&#x27;</span>],
num_rows: <span class="hljs-number">189155</span>
})
test: Dataset({
features: [<span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;translation&#x27;</span>],
num_rows: <span class="hljs-number">21018</span>
})
})`,wrap:!1}}),ts=new h({props:{code:"c3BsaXRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTIwJTNEJTIwc3BsaXRfZGF0YXNldHMucG9wKCUyMnRlc3QlMjIp",highlighted:'split_datasets[<span class="hljs-string">&quot;validation&quot;</span>] = split_datasets.pop(<span class="hljs-string">&quot;test&quot;</span>)',wrap:!1}}),as=new h({props:{code:"c3BsaXRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjElNUQlNUIlMjJ0cmFuc2xhdGlvbiUyMiU1RA==",highlighted:'split_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">1</span>][<span class="hljs-string">&quot;translation&quot;</span>]',wrap:!1}}),rs=new h({props:{code:"JTdCJ2VuJyUzQSUyMCdEZWZhdWx0JTIwdG8lMjBleHBhbmRlZCUyMHRocmVhZHMnJTJDJTBBJTIwJ2ZyJyUzQSUyMCdQYXIlMjBkJUMzJUE5ZmF1dCUyQyUyMGQlQzMlQTl2ZWxvcHBlciUyMGxlcyUyMGZpbHMlMjBkZSUyMGRpc2N1c3Npb24nJTdE",highlighted:`{<span class="hljs-string">&#x27;en&#x27;</span>: <span class="hljs-string">&#x27;Default to expanded threads&#x27;</span>,
<span class="hljs-string">&#x27;fr&#x27;</span>: <span class="hljs-string">&#x27;Par défaut, développer les fils de discussion&#x27;</span>}`,wrap:!1}}),ps=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBbW9kZWxfY2hlY2twb2ludCUyMCUzRCUyMCUyMkhlbHNpbmtpLU5MUCUyRm9wdXMtbXQtZW4tZnIlMjIlMEF0cmFuc2xhdG9yJTIwJTNEJTIwcGlwZWxpbmUoJTIydHJhbnNsYXRpb24lMjIlMkMlMjBtb2RlbCUzRG1vZGVsX2NoZWNrcG9pbnQpJTBBdHJhbnNsYXRvciglMjJEZWZhdWx0JTIwdG8lMjBleHBhbmRlZCUyMHRocmVhZHMlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline
model_checkpoint = <span class="hljs-string">&quot;Helsinki-NLP/opus-mt-en-fr&quot;</span>
translator = pipeline(<span class="hljs-string">&quot;translation&quot;</span>, model=model_checkpoint)
translator(<span class="hljs-string">&quot;Default to expanded threads&quot;</span>)`,wrap:!1}}),os=new h({props:{code:"JTVCJTdCJ3RyYW5zbGF0aW9uX3RleHQnJTNBJTIwJ1BhciUyMGQlQzMlQTlmYXV0JTIwcG91ciUyMGxlcyUyMHRocmVhZHMlMjAlQzMlQTlsYXJnaXMnJTdEJTVE",highlighted:'[{<span class="hljs-string">&#x27;translation_text&#x27;</span>: <span class="hljs-string">&#x27;Par défaut pour les threads élargis&#x27;</span>}]',wrap:!1}}),cs=new h({props:{code:"c3BsaXRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjE3MiU1RCU1QiUyMnRyYW5zbGF0aW9uJTIyJTVE",highlighted:'split_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">172</span>][<span class="hljs-string">&quot;translation&quot;</span>]',wrap:!1}}),Ms=new h({props:{code:"JTdCJ2VuJyUzQSUyMCdVbmFibGUlMjB0byUyMGltcG9ydCUyMCUyNTElMjB1c2luZyUyMHRoZSUyME9GWCUyMGltcG9ydGVyJTIwcGx1Z2luLiUyMFRoaXMlMjBmaWxlJTIwaXMlMjBub3QlMjB0aGUlMjBjb3JyZWN0JTIwZm9ybWF0LiclMkMlMEElMjAnZnInJTNBJTIwJTIySW1wb3NzaWJsZSUyMGQnaW1wb3J0ZXIlMjAlMjUxJTIwZW4lMjB1dGlsaXNhbnQlMjBsZSUyMG1vZHVsZSUyMGQnZXh0ZW5zaW9uJTIwZCdpbXBvcnRhdGlvbiUyME9GWC4lMjBDZSUyMGZpY2hpZXIlMjBuJ2ElMjBwYXMlMjB1biUyMGZvcm1hdCUyMGNvcnJlY3QuJTIyJTdE",highlighted:`{<span class="hljs-string">&#x27;en&#x27;</span>: <span class="hljs-string">&#x27;Unable to import %1 using the OFX importer plugin. This file is not the correct format.&#x27;</span>,
<span class="hljs-string">&#x27;fr&#x27;</span>: <span class="hljs-string">&quot;Impossible d&#x27;importer %1 en utilisant le module d&#x27;extension d&#x27;importation OFX. Ce fichier n&#x27;a pas un format correct.&quot;</span>}`,wrap:!1}}),ds=new h({props:{code:"dHJhbnNsYXRvciglMEElMjAlMjAlMjAlMjAlMjJVbmFibGUlMjB0byUyMGltcG9ydCUyMCUyNTElMjB1c2luZyUyMHRoZSUyME9GWCUyMGltcG9ydGVyJTIwcGx1Z2luLiUyMFRoaXMlMjBmaWxlJTIwaXMlMjBub3QlMjB0aGUlMjBjb3JyZWN0JTIwZm9ybWF0LiUyMiUwQSk=",highlighted:`translator(
<span class="hljs-string">&quot;Unable to import %1 using the OFX importer plugin. This file is not the correct format.&quot;</span>
)`,wrap:!1}}),ys=new h({props:{code:"JTVCJTdCJ3RyYW5zbGF0aW9uX3RleHQnJTNBJTIwJTIySW1wb3NzaWJsZSUyMGQnaW1wb3J0ZXIlMjAlMjUxJTIwZW4lMjB1dGlsaXNhbnQlMjBsZSUyMHBsdWdpbiUyMGQnaW1wb3J0YXRldXIlMjBPRlguJTIwQ2UlMjBmaWNoaWVyJTIwbidlc3QlMjBwYXMlMjBsZSUyMGJvbiUyMGZvcm1hdC4lMjIlN0QlNUQ=",highlighted:'[{<span class="hljs-string">&#x27;translation_text&#x27;</span>: <span class="hljs-string">&quot;Impossible d&#x27;importer %1 en utilisant le plugin d&#x27;importateur OFX. Ce fichier n&#x27;est pas le bon format.&quot;</span>}]',wrap:!1}}),fs=new Vn({props:{id:"0Oxphw4Q9fo"}}),De=new ss({props:{$$slots:{default:[or]},$$scope:{ctx:k}}}),Ts=new Ze({props:{title:"Traitement des données",local:"traitement-des-données",headingTag:"h3"}}),js=new Vn({props:{id:"XAR8jnZZuUs"}}),Us=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIySGVsc2lua2ktTkxQJTJGb3B1cy1tdC1lbi1mciUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2NoZWNrcG9pbnQlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer
model_checkpoint = <span class="hljs-string">&quot;Helsinki-NLP/opus-mt-en-fr&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>)`,wrap:!1}}),Pe=new ss({props:{$$slots:{default:[ur]},$$scope:{ctx:k}}}),vs=new h({props:{code:"d2l0aCUyMG9wZW4oZmlsZV9wYXRoKSUyMGFzJTIwZiUzQSUwQSUyMCUyMCUyMCUyMGNvbnRlbnQlMjAlM0QlMjBmLnJlYWQoKQ==",highlighted:`<span class="hljs-keyword">with</span> <span class="hljs-built_in">open</span>(file_path) <span class="hljs-keyword">as</span> f:
content = f.<span class="hljs-built_in">read</span>()`,wrap:!1}}),ks=new h({props:{code:"ZW5fc2VudGVuY2UlMjAlM0QlMjBzcGxpdF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMSU1RCU1QiUyMnRyYW5zbGF0aW9uJTIyJTVEJTVCJTIyZW4lMjIlNUQlMEFmcl9zZW50ZW5jZSUyMCUzRCUyMHNwbGl0X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIxJTVEJTVCJTIydHJhbnNsYXRpb24lMjIlNUQlNUIlMjJmciUyMiU1RCUwQSUwQWlucHV0cyUyMCUzRCUyMHRva2VuaXplcihlbl9zZW50ZW5jZSklMEF3aXRoJTIwdG9rZW5pemVyLmFzX3RhcmdldF90b2tlbml6ZXIoKSUzQSUwQSUyMCUyMCUyMCUyMHRhcmdldHMlMjAlM0QlMjB0b2tlbml6ZXIoZnJfc2VudGVuY2Up",highlighted:`en_sentence = split_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">1</span>][<span class="hljs-string">&quot;translation&quot;</span>][<span class="hljs-string">&quot;en&quot;</span>]
fr_sentence = split_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">1</span>][<span class="hljs-string">&quot;translation&quot;</span>][<span class="hljs-string">&quot;fr&quot;</span>]
inputs = tokenizer(en_sentence)
<span class="hljs-keyword">with</span> tokenizer.as_target_tokenizer():
targets = tokenizer(fr_sentence)`,wrap:!1}}),_s=new h({props:{code:"d3JvbmdfdGFyZ2V0cyUyMCUzRCUyMHRva2VuaXplcihmcl9zZW50ZW5jZSklMEFwcmludCh0b2tlbml6ZXIuY29udmVydF9pZHNfdG9fdG9rZW5zKHdyb25nX3RhcmdldHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQpKSUwQXByaW50KHRva2VuaXplci5jb252ZXJ0X2lkc190b190b2tlbnModGFyZ2V0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCkp",highlighted:`wrong_targets = tokenizer(fr_sentence)
<span class="hljs-built_in">print</span>(tokenizer.convert_ids_to_tokens(wrong_targets[<span class="hljs-string">&quot;input_ids&quot;</span>]))
<span class="hljs-built_in">print</span>(tokenizer.convert_ids_to_tokens(targets[<span class="hljs-string">&quot;input_ids&quot;</span>]))`,wrap:!1}}),xs=new h({props:{code:"JTVCJyVFMiU5NiU4MVBhciclMkMlMjAnJUUyJTk2JTgxZCVDMyVBOSclMkMlMjAnZiclMkMlMjAnYXV0JyUyQyUyMCclMkMnJTJDJTIwJyVFMiU5NiU4MWQlQzMlQTknJTJDJTIwJ3ZlJyUyQyUyMCdsb3AnJTJDJTIwJ3BlciclMkMlMjAnJUUyJTk2JTgxbGVzJyUyQyUyMCclRTIlOTYlODFmaWwnJTJDJTIwJ3MnJTJDJTIwJyVFMiU5NiU4MWRlJyUyQyUyMCclRTIlOTYlODFkaXNjdXNzaW9uJyUyQyUyMCclM0MlMkZzJTNFJyU1RCUwQSU1QiclRTIlOTYlODFQYXInJTJDJTIwJyVFMiU5NiU4MWQlQzMlQTlmYXV0JyUyQyUyMCclMkMnJTJDJTIwJyVFMiU5NiU4MWQlQzMlQTl2ZWxvcHBlciclMkMlMjAnJUUyJTk2JTgxbGVzJyUyQyUyMCclRTIlOTYlODFmaWxzJyUyQyUyMCclRTIlOTYlODFkZSclMkMlMjAnJUUyJTk2JTgxZGlzY3Vzc2lvbiclMkMlMjAnJTNDJTJGcyUzRSclNUQ=",highlighted:`[<span class="hljs-string">&#x27;▁Par&#x27;</span>, <span class="hljs-string">&#x27;▁dé&#x27;</span>, <span class="hljs-string">&#x27;f&#x27;</span>, <span class="hljs-string">&#x27;aut&#x27;</span>, <span class="hljs-string">&#x27;,&#x27;</span>, <span class="hljs-string">&#x27;▁dé&#x27;</span>, <span class="hljs-string">&#x27;ve&#x27;</span>, <span class="hljs-string">&#x27;lop&#x27;</span>, <span class="hljs-string">&#x27;per&#x27;</span>, <span class="hljs-string">&#x27;▁les&#x27;</span>, <span class="hljs-string">&#x27;▁fil&#x27;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;▁de&#x27;</span>, <span class="hljs-string">&#x27;▁discussion&#x27;</span>, <span class="hljs-string">&#x27;&lt;/s&gt;&#x27;</span>]
[<span class="hljs-string">&#x27;▁Par&#x27;</span>, <span class="hljs-string">&#x27;▁défaut&#x27;</span>, <span class="hljs-string">&#x27;,&#x27;</span>, <span class="hljs-string">&#x27;▁développer&#x27;</span>, <span class="hljs-string">&#x27;▁les&#x27;</span>, <span class="hljs-string">&#x27;▁fils&#x27;</span>, <span class="hljs-string">&#x27;▁de&#x27;</span>, <span class="hljs-string">&#x27;▁discussion&#x27;</span>, <span class="hljs-string">&#x27;&lt;/s&gt;&#x27;</span>]`,wrap:!1}}),Xs=new h({props:{code:"bWF4X2lucHV0X2xlbmd0aCUyMCUzRCUyMDEyOCUwQW1heF90YXJnZXRfbGVuZ3RoJTIwJTNEJTIwMTI4JTBBJTBBJTBBZGVmJTIwcHJlcHJvY2Vzc19mdW5jdGlvbihleGFtcGxlcyklM0ElMEElMjAlMjAlMjAlMjBpbnB1dHMlMjAlM0QlMjAlNUJleCU1QiUyMmVuJTIyJTVEJTIwZm9yJTIwZXglMjBpbiUyMGV4YW1wbGVzJTVCJTIydHJhbnNsYXRpb24lMjIlNUQlNUQlMEElMjAlMjAlMjAlMjB0YXJnZXRzJTIwJTNEJTIwJTVCZXglNUIlMjJmciUyMiU1RCUyMGZvciUyMGV4JTIwaW4lMjBleGFtcGxlcyU1QiUyMnRyYW5zbGF0aW9uJTIyJTVEJTVEJTBBJTIwJTIwJTIwJTIwbW9kZWxfaW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKGlucHV0cyUyQyUyMG1heF9sZW5ndGglM0RtYXhfaW5wdXRfbGVuZ3RoJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ29uZmlndXJlciUyMGxlJTIwdG9rZW5pemVyJTIwcG91ciUyMGxlcyUyMGNpYmxlcy4lMEElMjAlMjAlMjAlMjB3aXRoJTIwdG9rZW5pemVyLmFzX3RhcmdldF90b2tlbml6ZXIoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMHRva2VuaXplcih0YXJnZXRzJTJDJTIwbWF4X2xlbmd0aCUzRG1heF90YXJnZXRfbGVuZ3RoJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUpJTBBJTBBJTIwJTIwJTIwJTIwbW9kZWxfaW5wdXRzJTVCJTIybGFiZWxzJTIyJTVEJTIwJTNEJTIwbGFiZWxzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwbW9kZWxfaW5wdXRz",highlighted:`max_input_length = <span class="hljs-number">128</span>
max_target_length = <span class="hljs-number">128</span>
<span class="hljs-keyword">def</span> <span class="hljs-title function_">preprocess_function</span>(<span class="hljs-params">examples</span>):
inputs = [ex[<span class="hljs-string">&quot;en&quot;</span>] <span class="hljs-keyword">for</span> ex <span class="hljs-keyword">in</span> examples[<span class="hljs-string">&quot;translation&quot;</span>]]
targets = [ex[<span class="hljs-string">&quot;fr&quot;</span>] <span class="hljs-keyword">for</span> ex <span class="hljs-keyword">in</span> examples[<span class="hljs-string">&quot;translation&quot;</span>]]
model_inputs = tokenizer(inputs, max_length=max_input_length, truncation=<span class="hljs-literal">True</span>)
<span class="hljs-comment"># Configurer le tokenizer pour les cibles.</span>
<span class="hljs-keyword">with</span> tokenizer.as_target_tokenizer():
labels = tokenizer(targets, max_length=max_target_length, truncation=<span class="hljs-literal">True</span>)
model_inputs[<span class="hljs-string">&quot;labels&quot;</span>] = labels[<span class="hljs-string">&quot;input_ids&quot;</span>]
<span class="hljs-keyword">return</span> model_inputs`,wrap:!1}}),Ke=new ss({props:{$$slots:{default:[cr]},$$scope:{ctx:k}}}),Oe=new ss({props:{warning:!0,$$slots:{default:[Mr]},$$scope:{ctx:k}}}),Vs=new h({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwc3BsaXRfZGF0YXNldHMubWFwKCUwQSUyMCUyMCUyMCUyMHByZXByb2Nlc3NfZnVuY3Rpb24lMkMlMEElMjAlMjAlMjAlMjBiYXRjaGVkJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMHJlbW92ZV9jb2x1bW5zJTNEc3BsaXRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC5jb2x1bW5fbmFtZXMlMkMlMEEp",highlighted:`tokenized_datasets = split_datasets.<span class="hljs-built_in">map</span>(
preprocess_function,
batched=<span class="hljs-literal">True</span>,
remove_columns=split_datasets[<span class="hljs-string">&quot;train&quot;</span>].column_names,
)`,wrap:!1}});const Ba=[dr,mr],zl=[];function Xa(e,t){return e[0]==="pt"?0:1}Re=Xa(k),Ve=zl[Re]=Ba[Re](k),Qs=new Ze({props:{title:"Assemblage des données",local:"assemblage-des-données",headingTag:"h3"}});const za=[fr,Jr],Rl=[];function Ra(e,t){return e[0]==="pt"?0:1}We=Ra(k),Ne=Rl[We]=za[We](k),Hs=new h({props:{code:"YmF0Y2glMjAlM0QlMjBkYXRhX2NvbGxhdG9yKCU1QnRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCaSU1RCUyMGZvciUyMGklMjBpbiUyMHJhbmdlKDElMkMlMjAzKSU1RCklMEFiYXRjaC5rZXlzKCk=",highlighted:`batch = data_collator([tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">1</span>, <span class="hljs-number">3</span>)])
batch.keys()`,wrap:!1}}),Ys=new h({props:{code:"ZGljdF9rZXlzKCU1QidhdHRlbnRpb25fbWFzayclMkMlMjAnaW5wdXRfaWRzJyUyQyUyMCdsYWJlbHMnJTJDJTIwJ2RlY29kZXJfaW5wdXRfaWRzJyU1RCk=",highlighted:'dict_keys([<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;decoder_input_ids&#x27;</span>])',wrap:!1}}),Ss=new h({props:{code:"YmF0Y2glNUIlMjJsYWJlbHMlMjIlNUQ=",highlighted:'batch[<span class="hljs-string">&quot;labels&quot;</span>]',wrap:!1}}),Ls=new h({props:{code:"dGVuc29yKCU1QiU1QiUyMCUyMDU3NyUyQyUyMCUyMDU4OTElMkMlMjAlMjAlMjAlMjAlMjAyJTJDJTIwJTIwMzE4NCUyQyUyMCUyMCUyMCUyMDE2JTJDJTIwJTIwMjU0MiUyQyUyMCUyMCUyMCUyMCUyMDUlMkMlMjAlMjAxNzEwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMC0xMDAlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAtMTAwJTJDJTIwJTIwLTEwMCUyQyUyMCUyMC0xMDAlMkMlMjAlMjAtMTAwJTJDJTIwJTIwLTEwMCUyQyUyMCUyMC0xMDAlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMjAxMjExJTJDJTIwJTIwJTIwJTIwJTIwMyUyQyUyMCUyMCUyMCUyMDQ5JTJDJTIwJTIwOTQwOSUyQyUyMCUyMDEyMTElMkMlMjAlMjAlMjAlMjAlMjAzJTJDJTIwMjkxNDAlMkMlMjAlMjAlMjA4MTclMkMlMjAlMjAzMTI0JTJDJTIwJTIwJTIwODE3JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwNTUwJTJDJTIwJTIwNzAzMiUyQyUyMCUyMDU4MjElMkMlMjAlMjA3OTA3JTJDJTIwMTI2NDklMkMlMjAlMjAlMjAlMjAlMjAwJTVEJTVEKQ==",highlighted:`tensor([[ <span class="hljs-number">577</span>, <span class="hljs-number">5891</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3184</span>, <span class="hljs-number">16</span>, <span class="hljs-number">2542</span>, <span class="hljs-number">5</span>, <span class="hljs-number">1710</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">100</span>,
-<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>],
[ <span class="hljs-number">1211</span>, <span class="hljs-number">3</span>, <span class="hljs-number">49</span>, <span class="hljs-number">9409</span>, <span class="hljs-number">1211</span>, <span class="hljs-number">3</span>, <span class="hljs-number">29140</span>, <span class="hljs-number">817</span>, <span class="hljs-number">3124</span>, <span class="hljs-number">817</span>,
<span class="hljs-number">550</span>, <span class="hljs-number">7032</span>, <span class="hljs-number">5821</span>, <span class="hljs-number">7907</span>, <span class="hljs-number">12649</span>, <span class="hljs-number">0</span>]])`,wrap:!1}}),Ps=new h({props:{code:"YmF0Y2glNUIlMjJkZWNvZGVyX2lucHV0X2lkcyUyMiU1RA==",highlighted:'batch[<span class="hljs-string">&quot;decoder_input_ids&quot;</span>]',wrap:!1}}),Ks=new h({props:{code:"dGVuc29yKCU1QiU1QjU5NTEzJTJDJTIwJTIwJTIwNTc3JTJDJTIwJTIwNTg5MSUyQyUyMCUyMCUyMCUyMCUyMDIlMkMlMjAlMjAzMTg0JTJDJTIwJTIwJTIwJTIwMTYlMkMlMjAlMjAyNTQyJTJDJTIwJTIwJTIwJTIwJTIwNSUyQyUyMCUyMDE3MTAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwNTk1MTMlMkMlMjA1OTUxMyUyQyUyMDU5NTEzJTJDJTIwNTk1MTMlMkMlMjA1OTUxMyUyQyUyMDU5NTEzJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCNTk1MTMlMkMlMjAlMjAxMjExJTJDJTIwJTIwJTIwJTIwJTIwMyUyQyUyMCUyMCUyMCUyMDQ5JTJDJTIwJTIwOTQwOSUyQyUyMCUyMDEyMTElMkMlMjAlMjAlMjAlMjAlMjAzJTJDJTIwMjkxNDAlMkMlMjAlMjAlMjA4MTclMkMlMjAlMjAzMTI0JTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwODE3JTJDJTIwJTIwJTIwNTUwJTJDJTIwJTIwNzAzMiUyQyUyMCUyMDU4MjElMkMlMjAlMjA3OTA3JTJDJTIwMTI2NDklNUQlNUQp",highlighted:`tensor([[<span class="hljs-number">59513</span>, <span class="hljs-number">577</span>, <span class="hljs-number">5891</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3184</span>, <span class="hljs-number">16</span>, <span class="hljs-number">2542</span>, <span class="hljs-number">5</span>, <span class="hljs-number">1710</span>, <span class="hljs-number">0</span>,
<span class="hljs-number">59513</span>, <span class="hljs-number">59513</span>, <span class="hljs-number">59513</span>, <span class="hljs-number">59513</span>, <span class="hljs-number">59513</span>, <span class="hljs-number">59513</span>],
[<span class="hljs-number">59513</span>, <span class="hljs-number">1211</span>, <span class="hljs-number">3</span>, <span class="hljs-number">49</span>, <span class="hljs-number">9409</span>, <span class="hljs-number">1211</span>, <span class="hljs-number">3</span>, <span class="hljs-number">29140</span>, <span class="hljs-number">817</span>, <span class="hljs-number">3124</span>,
<span class="hljs-number">817</span>, <span class="hljs-number">550</span>, <span class="hljs-number">7032</span>, <span class="hljs-number">5821</span>, <span class="hljs-number">7907</span>, <span class="hljs-number">12649</span>]])`,wrap:!1}}),el=new h({props:{code:"Zm9yJTIwaSUyMGluJTIwcmFuZ2UoMSUyQyUyMDMpJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQodG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUJpJTVEJTVCJTIybGFiZWxzJTIyJTVEKQ==",highlighted:`<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">1</span>, <span class="hljs-number">3</span>):
<span class="hljs-built_in">print</span>(tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][i][<span class="hljs-string">&quot;labels&quot;</span>])`,wrap:!1}}),sl=new h({props:{code:"JTVCNTc3JTJDJTIwNTg5MSUyQyUyMDIlMkMlMjAzMTg0JTJDJTIwMTYlMkMlMjAyNTQyJTJDJTIwNSUyQyUyMDE3MTAlMkMlMjAwJTVEJTBBJTVCMTIxMSUyQyUyMDMlMkMlMjA0OSUyQyUyMDk0MDklMkMlMjAxMjExJTJDJTIwMyUyQyUyMDI5MTQwJTJDJTIwODE3JTJDJTIwMzEyNCUyQyUyMDgxNyUyQyUyMDU1MCUyQyUyMDcwMzIlMkMlMjA1ODIxJTJDJTIwNzkwNyUyQyUyMDEyNjQ5JTJDJTIwMCU1RA==",highlighted:`[<span class="hljs-number">577</span>, <span class="hljs-number">5891</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3184</span>, <span class="hljs-number">16</span>, <span class="hljs-number">2542</span>, <span class="hljs-number">5</span>, <span class="hljs-number">1710</span>, <span class="hljs-number">0</span>]
[<span class="hljs-number">1211</span>, <span class="hljs-number">3</span>, <span class="hljs-number">49</span>, <span class="hljs-number">9409</span>, <span class="hljs-number">1211</span>, <span class="hljs-number">3</span>, <span class="hljs-number">29140</span>, <span class="hljs-number">817</span>, <span class="hljs-number">3124</span>, <span class="hljs-number">817</span>, <span class="hljs-number">550</span>, <span class="hljs-number">7032</span>, <span class="hljs-number">5821</span>, <span class="hljs-number">7907</span>, <span class="hljs-number">12649</span>, <span class="hljs-number">0</span>]`,wrap:!1}});const Va=[jr,Tr],Vl=[];function Wa(e,t){return e[0]==="pt"?0:1}Qe=Wa(k),qe=Vl[Qe]=Va[Qe](k),ll=new Ze({props:{title:"Métriques",local:"métriques",headingTag:"h3"}}),tl=new Vn({props:{id:"M05L1DhFqcw"}});let we=k[0]==="pt"&&Da();rl=new h({props:{code:"IXBpcCUyMGluc3RhbGwlMjBzYWNyZWJsZXU=",highlighted:"!pip install sacrebleu",wrap:!1}}),pl=new h({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMnNhY3JlYmxldSUyMik=",highlighted:`<span class="hljs-keyword">import</span> evaluate
metric = evaluate.load(<span class="hljs-string">&quot;sacrebleu&quot;</span>)`,wrap:!1}}),cl=new h({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjJUaGlzJTIwcGx1Z2luJTIwbGV0cyUyMHlvdSUyMHRyYW5zbGF0ZSUyMHdlYiUyMHBhZ2VzJTIwYmV0d2VlbiUyMHNldmVyYWwlMjBsYW5ndWFnZXMlMjBhdXRvbWF0aWNhbGx5LiUyMiUwQSU1RCUwQXJlZmVyZW5jZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJUaGlzJTIwcGx1Z2luJTIwYWxsb3dzJTIweW91JTIwdG8lMjBhdXRvbWF0aWNhbGx5JTIwdHJhbnNsYXRlJTIwd2ViJTIwcGFnZXMlMjBiZXR3ZWVuJTIwc2V2ZXJhbCUyMGxhbmd1YWdlcy4lMjIlMEElMjAlMjAlMjAlMjAlNUQlMEElNUQlMEFtZXRyaWMuY29tcHV0ZShwcmVkaWN0aW9ucyUzRHByZWRpY3Rpb25zJTJDJTIwcmVmZXJlbmNlcyUzRHJlZmVyZW5jZXMp",highlighted:`predictions = [
<span class="hljs-string">&quot;This plugin lets you translate web pages between several languages automatically.&quot;</span>
]
references = [
[
<span class="hljs-string">&quot;This plugin allows you to automatically translate web pages between several languages.&quot;</span>
]
]
metric.compute(predictions=predictions, references=references)`,wrap:!1}}),Ml=new h({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDQ2Ljc1MDQ2OTY4Mjk5MDE2NSUyQyUwQSUyMCdjb3VudHMnJTNBJTIwJTVCMTElMkMlMjA2JTJDJTIwNCUyQyUyMDMlNUQlMkMlMEElMjAndG90YWxzJyUzQSUyMCU1QjEyJTJDJTIwMTElMkMlMjAxMCUyQyUyMDklNUQlMkMlMEElMjAncHJlY2lzaW9ucyclM0ElMjAlNUI5MS42NyUyQyUyMDU0LjU0JTJDJTIwNDAuMCUyQyUyMDMzLjMzJTVEJTJDJTBBJTIwJ2JwJyUzQSUyMDAuOTIwMDQ0NDE0NjI5MzIzMyUyQyUwQSUyMCdzeXNfbGVuJyUzQSUyMDEyJTJDJTBBJTIwJ3JlZl9sZW4nJTNBJTIwMTMlN0Q=",highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">46.750469682990165</span>,
<span class="hljs-string">&#x27;counts&#x27;</span>: [<span class="hljs-number">11</span>, <span class="hljs-number">6</span>, <span class="hljs-number">4</span>, <span class="hljs-number">3</span>],
<span class="hljs-string">&#x27;totals&#x27;</span>: [<span class="hljs-number">12</span>, <span class="hljs-number">11</span>, <span class="hljs-number">10</span>, <span class="hljs-number">9</span>],
<span class="hljs-string">&#x27;precisions&#x27;</span>: [<span class="hljs-number">91.67</span>, <span class="hljs-number">54.54</span>, <span class="hljs-number">40.0</span>, <span class="hljs-number">33.33</span>],
<span class="hljs-string">&#x27;bp&#x27;</span>: <span class="hljs-number">0.9200444146293233</span>,
<span class="hljs-string">&#x27;sys_len&#x27;</span>: <span class="hljs-number">12</span>,
<span class="hljs-string">&#x27;ref_len&#x27;</span>: <span class="hljs-number">13</span>}`,wrap:!1}}),dl=new h({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjAlNUIlMjJUaGlzJTIwVGhpcyUyMFRoaXMlMjBUaGlzJTIyJTVEJTBBcmVmZXJlbmNlcyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMlRoaXMlMjBwbHVnaW4lMjBhbGxvd3MlMjB5b3UlMjB0byUyMGF1dG9tYXRpY2FsbHklMjB0cmFuc2xhdGUlMjB3ZWIlMjBwYWdlcyUyMGJldHdlZW4lMjBzZXZlcmFsJTIwbGFuZ3VhZ2VzLiUyMiUwQSUyMCUyMCUyMCUyMCU1RCUwQSU1RCUwQW1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEcHJlZGljdGlvbnMlMkMlMjByZWZlcmVuY2VzJTNEcmVmZXJlbmNlcyk=",highlighted:`predictions = [<span class="hljs-string">&quot;This This This This&quot;</span>]
references = [
[
<span class="hljs-string">&quot;This plugin allows you to automatically translate web pages between several languages.&quot;</span>
]
]
metric.compute(predictions=predictions, references=references)`,wrap:!1}}),yl=new h({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDEuNjgzNjAyNjkzMTY3Njg5JTJDJTBBJTIwJ2NvdW50cyclM0ElMjAlNUIxJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTVEJTJDJTBBJTIwJ3RvdGFscyclM0ElMjAlNUI0JTJDJTIwMyUyQyUyMDIlMkMlMjAxJTVEJTJDJTBBJTIwJ3ByZWNpc2lvbnMnJTNBJTIwJTVCMjUuMCUyQyUyMDE2LjY3JTJDJTIwMTIuNSUyQyUyMDEyLjUlNUQlMkMlMEElMjAnYnAnJTNBJTIwMC4xMDUzOTkyMjQ1NjE4NjQzMyUyQyUwQSUyMCdzeXNfbGVuJyUzQSUyMDQlMkMlMEElMjAncmVmX2xlbiclM0ElMjAxMyU3RA==",highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">1.683602693167689</span>,
<span class="hljs-string">&#x27;counts&#x27;</span>: [<span class="hljs-number">1</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>],
<span class="hljs-string">&#x27;totals&#x27;</span>: [<span class="hljs-number">4</span>, <span class="hljs-number">3</span>, <span class="hljs-number">2</span>, <span class="hljs-number">1</span>],
<span class="hljs-string">&#x27;precisions&#x27;</span>: [<span class="hljs-number">25.0</span>, <span class="hljs-number">16.67</span>, <span class="hljs-number">12.5</span>, <span class="hljs-number">12.5</span>],
<span class="hljs-string">&#x27;bp&#x27;</span>: <span class="hljs-number">0.10539922456186433</span>,
<span class="hljs-string">&#x27;sys_len&#x27;</span>: <span class="hljs-number">4</span>,
<span class="hljs-string">&#x27;ref_len&#x27;</span>: <span class="hljs-number">13</span>}`,wrap:!1}}),Jl=new h({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjAlNUIlMjJUaGlzJTIwcGx1Z2luJTIyJTVEJTBBcmVmZXJlbmNlcyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMlRoaXMlMjBwbHVnaW4lMjBhbGxvd3MlMjB5b3UlMjB0byUyMGF1dG9tYXRpY2FsbHklMjB0cmFuc2xhdGUlMjB3ZWIlMjBwYWdlcyUyMGJldHdlZW4lMjBzZXZlcmFsJTIwbGFuZ3VhZ2VzLiUyMiUwQSUyMCUyMCUyMCUyMCU1RCUwQSU1RCUwQW1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEcHJlZGljdGlvbnMlMkMlMjByZWZlcmVuY2VzJTNEcmVmZXJlbmNlcyk=",highlighted:`predictions = [<span class="hljs-string">&quot;This plugin&quot;</span>]
references = [
[
<span class="hljs-string">&quot;This plugin allows you to automatically translate web pages between several languages.&quot;</span>
]
]
metric.compute(predictions=predictions, references=references)`,wrap:!1}}),fl=new h({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuMCUyQyUwQSUyMCdjb3VudHMnJTNBJTIwJTVCMiUyQyUyMDElMkMlMjAwJTJDJTIwMCU1RCUyQyUwQSUyMCd0b3RhbHMnJTNBJTIwJTVCMiUyQyUyMDElMkMlMjAwJTJDJTIwMCU1RCUyQyUwQSUyMCdwcmVjaXNpb25zJyUzQSUyMCU1QjEwMC4wJTJDJTIwMTAwLjAlMkMlMjAwLjAlMkMlMjAwLjAlNUQlMkMlMEElMjAnYnAnJTNBJTIwMC4wMDQwODY3NzE0Mzg0NjQwNjclMkMlMEElMjAnc3lzX2xlbiclM0ElMjAyJTJDJTBBJTIwJ3JlZl9sZW4nJTNBJTIwMTMlN0Q=",highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.0</span>,
<span class="hljs-string">&#x27;counts&#x27;</span>: [<span class="hljs-number">2</span>, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>],
<span class="hljs-string">&#x27;totals&#x27;</span>: [<span class="hljs-number">2</span>, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>],
<span class="hljs-string">&#x27;precisions&#x27;</span>: [<span class="hljs-number">100.0</span>, <span class="hljs-number">100.0</span>, <span class="hljs-number">0.0</span>, <span class="hljs-number">0.0</span>],
<span class="hljs-string">&#x27;bp&#x27;</span>: <span class="hljs-number">0.004086771438464067</span>,
<span class="hljs-string">&#x27;sys_len&#x27;</span>: <span class="hljs-number">2</span>,
<span class="hljs-string">&#x27;ref_len&#x27;</span>: <span class="hljs-number">13</span>}`,wrap:!1}});const Na=[Ur,br],Wl=[];function Qa(e,t){return e[0]==="tf"?0:1}Ae=Qa(k),Ee=Wl[Ae]=Na[Ae](k),bl=new Ze({props:{title:"<i> Finetuner </i> le modèle",local:"i-finetuner-i-le-modèle",headingTag:"h3"}}),wl=new h({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login
notebook_login()`,wrap:!1}}),vl=new h({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}});const qa=[hr,wr],Nl=[];function Aa(e,t){return e[0]==="tf"?0:1}He=Aa(k),Ye=Nl[He]=qa[He](k);let re=k[0]==="pt"&&Pa();return $l=new Ze({props:{title:"Utilisation du modèle <i> finetuné </i>",local:"utilisation-du-modèle-i-finetuné-i",headingTag:"h3"}}),Il=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBJTIzJTIwUmVtcGxhY2V6JTIwY2VjaSUyMHBhciUyMHZvdHJlJTIwcHJvcHJlJTIwY2hlY2twb2ludCUwQW1vZGVsX2NoZWNrcG9pbnQlMjAlM0QlMjAlMjJodWdnaW5nZmFjZS1jb3Vyc2UlMkZtYXJpYW4tZmluZXR1bmVkLWtkZTQtZW4tdG8tZnIlMjIlMEF0cmFuc2xhdG9yJTIwJTNEJTIwcGlwZWxpbmUoJTIydHJhbnNsYXRpb24lMjIlMkMlMjBtb2RlbCUzRG1vZGVsX2NoZWNrcG9pbnQpJTBBdHJhbnNsYXRvciglMjJEZWZhdWx0JTIwdG8lMjBleHBhbmRlZCUyMHRocmVhZHMlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline
<span class="hljs-comment"># Remplacez ceci par votre propre checkpoint</span>
model_checkpoint = <span class="hljs-string">&quot;huggingface-course/marian-finetuned-kde4-en-to-fr&quot;</span>
translator = pipeline(<span class="hljs-string">&quot;translation&quot;</span>, model=model_checkpoint)
translator(<span class="hljs-string">&quot;Default to expanded threads&quot;</span>)`,wrap:!1}}),kl=new h({props:{code:"JTVCJTdCJ3RyYW5zbGF0aW9uX3RleHQnJTNBJTIwJ1BhciUyMGQlQzMlQTlmYXV0JTJDJTIwZCVDMyVBOXZlbG9wcGVyJTIwbGVzJTIwZmlscyUyMGRlJTIwZGlzY3Vzc2lvbiclN0QlNUQ=",highlighted:'[{<span class="hljs-string">&#x27;translation_text&#x27;</span>: <span class="hljs-string">&#x27;Par défaut, développer les fils de discussion&#x27;</span>}]',wrap:!1}}),_l=new h({props:{code:"dHJhbnNsYXRvciglMEElMjAlMjAlMjAlMjAlMjJVbmFibGUlMjB0byUyMGltcG9ydCUyMCUyNTElMjB1c2luZyUyMHRoZSUyME9GWCUyMGltcG9ydGVyJTIwcGx1Z2luLiUyMFRoaXMlMjBmaWxlJTIwaXMlMjBub3QlMjB0aGUlMjBjb3JyZWN0JTIwZm9ybWF0LiUyMiUwQSk=",highlighted:`translator(
<span class="hljs-string">&quot;Unable to import %1 using the OFX importer plugin. This file is not the correct format.&quot;</span>
)`,wrap:!1}}),xl=new h({props:{code:"JTVCJTdCJ3RyYW5zbGF0aW9uX3RleHQnJTNBJTIwJTIySW1wb3NzaWJsZSUyMGQnaW1wb3J0ZXIlMjAlMjUxJTIwZW4lMjB1dGlsaXNhbnQlMjBsZSUyMG1vZHVsZSUyMGV4dGVybmUlMjBkJ2ltcG9ydGF0aW9uJTIwT0ZYLiUyMENlJTIwZmljaGllciUyMG4nZXN0JTIwcGFzJTIwbGUlMjBib24lMjBmb3JtYXQuJTIyJTdEJTVE",highlighted:'[{<span class="hljs-string">&#x27;translation_text&#x27;</span>: <span class="hljs-string">&quot;Impossible d&#x27;importer %1 en utilisant le module externe d&#x27;importation OFX. Ce fichier n&#x27;est pas le bon format.&quot;</span>}]',wrap:!1}}),es=new ss({props:{$$slots:{default:[$r]},$$scope:{ctx:k}}}),Bl=new rr({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter7/4.mdx"}}),{c(){r=M("meta"),w=n(),p=M("p"),U=n(),d(I.$$.fragment),j=n(),d(Z.$$.fragment),_=n(),$.c(),C=n(),B=M("p"),B.innerHTML=P,de=n(),N=M("ul"),N.innerHTML=A,F=n(),d(V.$$.fragment),ye=n(),Q=M("p"),Q.innerHTML=E,S=n(),W=M("p"),W.innerHTML=ge,L=n(),R=M("p"),R.textContent=O,q=n(),z=M("iframe"),ee=n(),X=M("iframe"),G=n(),D=M("a"),D.innerHTML=Je,ce=n(),pe=M("p"),pe.innerHTML=_e,se=n(),d(Ie.$$.fragment),he=n(),H=M("p"),H.innerHTML=xe,le=n(),d(fe.$$.fragment),Me=n(),oe=M("p"),oe.innerHTML=Ge,te=n(),d(ke.$$.fragment),Ce=n(),Y=M("p"),Y.innerHTML=Be,ne=n(),ve=M("img"),ae=n(),Te=M("p"),Te.textContent=je,be=n(),d(Ue.$$.fragment),me=n(),d(ue.$$.fragment),$e=n(),o=M("p"),o.innerHTML=g,ze=n(),d(Fe.$$.fragment),Le=n(),d(i.$$.fragment),v=n(),ls=M("p"),ls.innerHTML=Yn,Pl=n(),d(ts.$$.fragment),Kl=n(),ns=M("p"),ns.textContent=Fn,Ol=n(),d(as.$$.fragment),et=n(),d(rs.$$.fragment),st=n(),is=M("p"),is.innerHTML=Sn,lt=n(),d(ps.$$.fragment),tt=n(),d(os.$$.fragment),nt=n(),us=M("p"),us.innerHTML=Ln,at=n(),d(cs.$$.fragment),rt=n(),d(Ms.$$.fragment),it=n(),ms=M("p"),ms.textContent=Dn,pt=n(),d(ds.$$.fragment),ot=n(),d(ys.$$.fragment),ut=n(),Js=M("p"),Js.innerHTML=Pn,ct=n(),d(fs.$$.fragment),Mt=n(),d(De.$$.fragment),mt=n(),d(Ts.$$.fragment),dt=n(),d(js.$$.fragment),yt=n(),bs=M("p"),bs.innerHTML=Kn,Jt=n(),d(Us.$$.fragment),ft=n(),ws=M("p"),ws.innerHTML=On,Tt=n(),d(Pe.$$.fragment),jt=n(),hs=M("p"),hs.innerHTML=ea,bt=n(),Cs=M("p"),Cs.innerHTML=sa,Ut=n(),d(vs.$$.fragment),wt=n(),$s=M("p"),$s.innerHTML=la,ht=n(),gs=M("p"),gs.innerHTML=ta,Ct=n(),Is=M("p"),Is.textContent=na,vt=n(),d(ks.$$.fragment),$t=n(),Zs=M("p"),Zs.innerHTML=aa,gt=n(),d(_s.$$.fragment),It=n(),d(xs.$$.fragment),kt=n(),Gs=M("p"),Gs.innerHTML=ra,Zt=n(),Bs=M("p"),Bs.innerHTML=ia,_t=n(),d(Xs.$$.fragment),xt=n(),zs=M("p"),zs.textContent=pa,Gt=n(),d(Ke.$$.fragment),Bt=n(),d(Oe.$$.fragment),Xt=n(),Rs=M("p"),Rs.textContent=oa,zt=n(),d(Vs.$$.fragment),Rt=n(),Ws=M("p"),Ws.innerHTML=ua,Vt=n(),Ve.c(),Al=n(),Ns=M("p"),Ns.textContent=ca,Wt=n(),d(Qs.$$.fragment),Nt=n(),qs=M("p"),qs.innerHTML=Ma,Qt=n(),As=M("p"),As.innerHTML=ma,qt=n(),Ne.c(),El=n(),Es=M("p"),Es.textContent=da,At=n(),d(Hs.$$.fragment),Et=n(),d(Ys.$$.fragment),Ht=n(),Fs=M("p"),Fs.innerHTML=ya,Yt=n(),d(Ss.$$.fragment),Ft=n(),d(Ls.$$.fragment),St=n(),Ds=M("p"),Ds.textContent=Ja,Lt=n(),d(Ps.$$.fragment),Dt=n(),d(Ks.$$.fragment),Pt=n(),Os=M("p"),Os.textContent=fa,Kt=n(),d(el.$$.fragment),Ot=n(),d(sl.$$.fragment),en=n(),qe.c(),Hl=n(),d(ll.$$.fragment),sn=n(),d(tl.$$.fragment),ln=n(),we&&we.c(),Yl=n(),nl=M("p"),nl.innerHTML=Ta,tn=n(),al=M("p"),al.innerHTML=ja,nn=n(),d(rl.$$.fragment),an=n(),il=M("p"),il.innerHTML=ba,rn=n(),d(pl.$$.fragment),pn=n(),ol=M("p"),ol.textContent=Ua,on=n(),ul=M("p"),ul.textContent=wa,un=n(),d(cl.$$.fragment),cn=n(),d(Ml.$$.fragment),Mn=n(),ml=M("p"),ml.innerHTML=ha,mn=n(),d(dl.$$.fragment),dn=n(),d(yl.$$.fragment),yn=n(),d(Jl.$$.fragment),Jn=n(),d(fl.$$.fragment),fn=n(),Tl=M("p"),Tl.textContent=Ca,Tn=n(),Ee.c(),Fl=n(),jl=M("p"),jl.innerHTML=va,jn=n(),d(bl.$$.fragment),bn=n(),Ul=M("p"),Ul.innerHTML=$a,Un=n(),d(wl.$$.fragment),wn=n(),hl=M("p"),hl.innerHTML=ga,hn=n(),Cl=M("p"),Cl.innerHTML=Ia,Cn=n(),d(vl.$$.fragment),vn=n(),Ye.c(),Sl=n(),re&&re.c(),Ll=n(),d($l.$$.fragment),$n=n(),gl=M("p"),gl.innerHTML=ka,gn=n(),d(Il.$$.fragment),In=n(),d(kl.$$.fragment),kn=n(),Zl=M("p"),Zl.innerHTML=Za,Zn=n(),d(_l.$$.fragment),_n=n(),d(xl.$$.fragment),xn=n(),Gl=M("p"),Gl.textContent=_a,Gn=n(),d(es.$$.fragment),Bn=n(),d(Bl.$$.fragment),Xn=n(),Dl=M("p"),this.h()},l(e){const t=tr("svelte-u9bgzb",document.head);r=m(t,"META",{name:!0,content:!0}),t.forEach(s),w=a(e),p=m(e,"P",{}),Rn(p).forEach(s),U=a(e),y(I.$$.fragment,e),j=a(e),y(Z.$$.fragment,e),_=a(e),$.l(e),C=a(e),B=m(e,"P",{"data-svelte-h":!0}),T(B)!=="svelte-1nf0i3r"&&(B.innerHTML=P),de=a(e),N=m(e,"UL",{"data-svelte-h":!0}),T(N)!=="svelte-1pfnmaq"&&(N.innerHTML=A),F=a(e),y(V.$$.fragment,e),ye=a(e),Q=m(e,"P",{"data-svelte-h":!0}),T(Q)!=="svelte-188hyg7"&&(Q.innerHTML=E),S=a(e),W=m(e,"P",{"data-svelte-h":!0}),T(W)!=="svelte-1u2yyzy"&&(W.innerHTML=ge),L=a(e),R=m(e,"P",{"data-svelte-h":!0}),T(R)!=="svelte-ce3i1"&&(R.textContent=O),q=a(e),z=m(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Rn(z).forEach(s),ee=a(e),X=m(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Rn(X).forEach(s),G=a(e),D=m(e,"A",{class:!0,href:!0,"data-svelte-h":!0}),T(D)!=="svelte-1ifl6xg"&&(D.innerHTML=Je),ce=a(e),pe=m(e,"P",{"data-svelte-h":!0}),T(pe)!=="svelte-19ubzf9"&&(pe.innerHTML=_e),se=a(e),y(Ie.$$.fragment,e),he=a(e),H=m(e,"P",{"data-svelte-h":!0}),T(H)!=="svelte-nk5aza"&&(H.innerHTML=xe),le=a(e),y(fe.$$.fragment,e),Me=a(e),oe=m(e,"P",{"data-svelte-h":!0}),T(oe)!=="svelte-1s872au"&&(oe.innerHTML=Ge),te=a(e),y(ke.$$.fragment,e),Ce=a(e),Y=m(e,"P",{"data-svelte-h":!0}),T(Y)!=="svelte-6n54ry"&&(Y.innerHTML=Be),ne=a(e),ve=m(e,"IMG",{src:!0,alt:!0,width:!0}),ae=a(e),Te=m(e,"P",{"data-svelte-h":!0}),T(Te)!=="svelte-1r6opjh"&&(Te.textContent=je),be=a(e),y(Ue.$$.fragment,e),me=a(e),y(ue.$$.fragment,e),$e=a(e),o=m(e,"P",{"data-svelte-h":!0}),T(o)!=="svelte-1tnqx2x"&&(o.innerHTML=g),ze=a(e),y(Fe.$$.fragment,e),Le=a(e),y(i.$$.fragment,e),v=a(e),ls=m(e,"P",{"data-svelte-h":!0}),T(ls)!=="svelte-1o67em0"&&(ls.innerHTML=Yn),Pl=a(e),y(ts.$$.fragment,e),Kl=a(e),ns=m(e,"P",{"data-svelte-h":!0}),T(ns)!=="svelte-d0q2z8"&&(ns.textContent=Fn),Ol=a(e),y(as.$$.fragment,e),et=a(e),y(rs.$$.fragment,e),st=a(e),is=m(e,"P",{"data-svelte-h":!0}),T(is)!=="svelte-1ron92l"&&(is.innerHTML=Sn),lt=a(e),y(ps.$$.fragment,e),tt=a(e),y(os.$$.fragment,e),nt=a(e),us=m(e,"P",{"data-svelte-h":!0}),T(us)!=="svelte-1bxqb0q"&&(us.innerHTML=Ln),at=a(e),y(cs.$$.fragment,e),rt=a(e),y(Ms.$$.fragment,e),it=a(e),ms=m(e,"P",{"data-svelte-h":!0}),T(ms)!=="svelte-1qmwc8u"&&(ms.textContent=Dn),pt=a(e),y(ds.$$.fragment,e),ot=a(e),y(ys.$$.fragment,e),ut=a(e),Js=m(e,"P",{"data-svelte-h":!0}),T(Js)!=="svelte-o8hef4"&&(Js.innerHTML=Pn),ct=a(e),y(fs.$$.fragment,e),Mt=a(e),y(De.$$.fragment,e),mt=a(e),y(Ts.$$.fragment,e),dt=a(e),y(js.$$.fragment,e),yt=a(e),bs=m(e,"P",{"data-svelte-h":!0}),T(bs)!=="svelte-17kiv99"&&(bs.innerHTML=Kn),Jt=a(e),y(Us.$$.fragment,e),ft=a(e),ws=m(e,"P",{"data-svelte-h":!0}),T(ws)!=="svelte-1wbpk08"&&(ws.innerHTML=On),Tt=a(e),y(Pe.$$.fragment,e),jt=a(e),hs=m(e,"P",{"data-svelte-h":!0}),T(hs)!=="svelte-dwrvvk"&&(hs.innerHTML=ea),bt=a(e),Cs=m(e,"P",{"data-svelte-h":!0}),T(Cs)!=="svelte-1cbannd"&&(Cs.innerHTML=sa),Ut=a(e),y(vs.$$.fragment,e),wt=a(e),$s=m(e,"P",{"data-svelte-h":!0}),T($s)!=="svelte-vc27kp"&&($s.innerHTML=la),ht=a(e),gs=m(e,"P",{"data-svelte-h":!0}),T(gs)!=="svelte-45jqim"&&(gs.innerHTML=ta),Ct=a(e),Is=m(e,"P",{"data-svelte-h":!0}),T(Is)!=="svelte-4kcbq"&&(Is.textContent=na),vt=a(e),y(ks.$$.fragment,e),$t=a(e),Zs=m(e,"P",{"data-svelte-h":!0}),T(Zs)!=="svelte-16p897q"&&(Zs.innerHTML=aa),gt=a(e),y(_s.$$.fragment,e),It=a(e),y(xs.$$.fragment,e),kt=a(e),Gs=m(e,"P",{"data-svelte-h":!0}),T(Gs)!=="svelte-1xte8vj"&&(Gs.innerHTML=ra),Zt=a(e),Bs=m(e,"P",{"data-svelte-h":!0}),T(Bs)!=="svelte-i6rlrt"&&(Bs.innerHTML=ia),_t=a(e),y(Xs.$$.fragment,e),xt=a(e),zs=m(e,"P",{"data-svelte-h":!0}),T(zs)!=="svelte-5pvcvi"&&(zs.textContent=pa),Gt=a(e),y(Ke.$$.fragment,e),Bt=a(e),y(Oe.$$.fragment,e),Xt=a(e),Rs=m(e,"P",{"data-svelte-h":!0}),T(Rs)!=="svelte-hke3yz"&&(Rs.textContent=oa),zt=a(e),y(Vs.$$.fragment,e),Rt=a(e),Ws=m(e,"P",{"data-svelte-h":!0}),T(Ws)!=="svelte-1vi5zdd"&&(Ws.innerHTML=ua),Vt=a(e),Ve.l(e),Al=a(e),Ns=m(e,"P",{"data-svelte-h":!0}),T(Ns)!=="svelte-14fljy7"&&(Ns.textContent=ca),Wt=a(e),y(Qs.$$.fragment,e),Nt=a(e),qs=m(e,"P",{"data-svelte-h":!0}),T(qs)!=="svelte-1ze7um"&&(qs.innerHTML=Ma),Qt=a(e),As=m(e,"P",{"data-svelte-h":!0}),T(As)!=="svelte-llf45b"&&(As.innerHTML=ma),qt=a(e),Ne.l(e),El=a(e),Es=m(e,"P",{"data-svelte-h":!0}),T(Es)!=="svelte-hc1pc1"&&(Es.textContent=da),At=a(e),y(Hs.$$.fragment,e),Et=a(e),y(Ys.$$.fragment,e),Ht=a(e),Fs=m(e,"P",{"data-svelte-h":!0}),T(Fs)!=="svelte-dt4nx1"&&(Fs.innerHTML=ya),Yt=a(e),y(Ss.$$.fragment,e),Ft=a(e),y(Ls.$$.fragment,e),St=a(e),Ds=m(e,"P",{"data-svelte-h":!0}),T(Ds)!=="svelte-ntnof5"&&(Ds.textContent=Ja),Lt=a(e),y(Ps.$$.fragment,e),Dt=a(e),y(Ks.$$.fragment,e),Pt=a(e),Os=m(e,"P",{"data-svelte-h":!0}),T(Os)!=="svelte-1nq4qmi"&&(Os.textContent=fa),Kt=a(e),y(el.$$.fragment,e),Ot=a(e),y(sl.$$.fragment,e),en=a(e),qe.l(e),Hl=a(e),y(ll.$$.fragment,e),sn=a(e),y(tl.$$.fragment,e),ln=a(e),we&&we.l(e),Yl=a(e),nl=m(e,"P",{"data-svelte-h":!0}),T(nl)!=="svelte-xw3iju"&&(nl.innerHTML=Ta),tn=a(e),al=m(e,"P",{"data-svelte-h":!0}),T(al)!=="svelte-mmeieq"&&(al.innerHTML=ja),nn=a(e),y(rl.$$.fragment,e),an=a(e),il=m(e,"P",{"data-svelte-h":!0}),T(il)!=="svelte-1tk6kv0"&&(il.innerHTML=ba),rn=a(e),y(pl.$$.fragment,e),pn=a(e),ol=m(e,"P",{"data-svelte-h":!0}),T(ol)!=="svelte-1xuh3mm"&&(ol.textContent=Ua),on=a(e),ul=m(e,"P",{"data-svelte-h":!0}),T(ul)!=="svelte-pn5dwe"&&(ul.textContent=wa),un=a(e),y(cl.$$.fragment,e),cn=a(e),y(Ml.$$.fragment,e),Mn=a(e),ml=m(e,"P",{"data-svelte-h":!0}),T(ml)!=="svelte-gr5e6r"&&(ml.innerHTML=ha),mn=a(e),y(dl.$$.fragment,e),dn=a(e),y(yl.$$.fragment,e),yn=a(e),y(Jl.$$.fragment,e),Jn=a(e),y(fl.$$.fragment,e),fn=a(e),Tl=m(e,"P",{"data-svelte-h":!0}),T(Tl)!=="svelte-18cy19d"&&(Tl.textContent=Ca),Tn=a(e),Ee.l(e),Fl=a(e),jl=m(e,"P",{"data-svelte-h":!0}),T(jl)!=="svelte-1wkjdcv"&&(jl.innerHTML=va),jn=a(e),y(bl.$$.fragment,e),bn=a(e),Ul=m(e,"P",{"data-svelte-h":!0}),T(Ul)!=="svelte-2x44ph"&&(Ul.innerHTML=$a),Un=a(e),y(wl.$$.fragment,e),wn=a(e),hl=m(e,"P",{"data-svelte-h":!0}),T(hl)!=="svelte-1kdf134"&&(hl.innerHTML=ga),hn=a(e),Cl=m(e,"P",{"data-svelte-h":!0}),T(Cl)!=="svelte-1p5kkdg"&&(Cl.innerHTML=Ia),Cn=a(e),y(vl.$$.fragment,e),vn=a(e),Ye.l(e),Sl=a(e),re&&re.l(e),Ll=a(e),y($l.$$.fragment,e),$n=a(e),gl=m(e,"P",{"data-svelte-h":!0}),T(gl)!=="svelte-e7avw4"&&(gl.innerHTML=ka),gn=a(e),y(Il.$$.fragment,e),In=a(e),y(kl.$$.fragment,e),kn=a(e),Zl=m(e,"P",{"data-svelte-h":!0}),T(Zl)!=="svelte-ik4qyi"&&(Zl.innerHTML=Za),Zn=a(e),y(_l.$$.fragment,e),_n=a(e),y(xl.$$.fragment,e),xn=a(e),Gl=m(e,"P",{"data-svelte-h":!0}),T(Gl)!=="svelte-8g19o0"&&(Gl.textContent=_a),Gn=a(e),y(es.$$.fragment,e),Bn=a(e),y(Bl.$$.fragment,e),Xn=a(e),Dl=m(e,"P",{}),Rn(Dl).forEach(s),this.h()},h(){K(r,"name","hf:doc:metadata"),K(r,"content",Ir),Hn(z.src,ie="https://course-demos-marian-finetuned-kde4-en-to-fr.hf.space")||K(z,"src",ie),K(z,"frameborder","0"),K(z,"height","350"),K(z,"title","Gradio app"),K(z,"class","block dark:hidden container p-0 flex-grow space-iframe"),K(z,"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"),K(z,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),Hn(X.src,b="https://course-demos-marian-finetuned-kde4-en-to-fr-darkmode.hf.space")||K(X,"src",b),K(X,"frameborder","0"),K(X,"height","350"),K(X,"title","Gradio app"),K(X,"class","hidden dark:block container p-0 flex-grow space-iframe"),K(X,"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"),K(X,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),K(D,"class","flex justify-center"),K(D,"href","/huggingface-course/marian-finetuned-kde4-en-to-fr"),Hn(ve.src,Xe="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/language_tags.png")||K(ve,"src",Xe),K(ve,"alt","Language available for the KDE4 dataset."),K(ve,"width","100%")},m(e,t){nr(document.head,r),l(e,w,t),l(e,p,t),l(e,U,t),J(I,e,t),l(e,j,t),J(Z,e,t),l(e,_,t),Xl[x].m(e,t),l(e,C,t),l(e,B,t),l(e,de,t),l(e,N,t),l(e,F,t),J(V,e,t),l(e,ye,t),l(e,Q,t),l(e,S,t),l(e,W,t),l(e,L,t),l(e,R,t),l(e,q,t),l(e,z,t),l(e,ee,t),l(e,X,t),l(e,G,t),l(e,D,t),l(e,ce,t),l(e,pe,t),l(e,se,t),J(Ie,e,t),l(e,he,t),l(e,H,t),l(e,le,t),J(fe,e,t),l(e,Me,t),l(e,oe,t),l(e,te,t),J(ke,e,t),l(e,Ce,t),l(e,Y,t),l(e,ne,t),l(e,ve,t),l(e,ae,t),l(e,Te,t),l(e,be,t),J(Ue,e,t),l(e,me,t),J(ue,e,t),l(e,$e,t),l(e,o,t),l(e,ze,t),J(Fe,e,t),l(e,Le,t),J(i,e,t),l(e,v,t),l(e,ls,t),l(e,Pl,t),J(ts,e,t),l(e,Kl,t),l(e,ns,t),l(e,Ol,t),J(as,e,t),l(e,et,t),J(rs,e,t),l(e,st,t),l(e,is,t),l(e,lt,t),J(ps,e,t),l(e,tt,t),J(os,e,t),l(e,nt,t),l(e,us,t),l(e,at,t),J(cs,e,t),l(e,rt,t),J(Ms,e,t),l(e,it,t),l(e,ms,t),l(e,pt,t),J(ds,e,t),l(e,ot,t),J(ys,e,t),l(e,ut,t),l(e,Js,t),l(e,ct,t),J(fs,e,t),l(e,Mt,t),J(De,e,t),l(e,mt,t),J(Ts,e,t),l(e,dt,t),J(js,e,t),l(e,yt,t),l(e,bs,t),l(e,Jt,t),J(Us,e,t),l(e,ft,t),l(e,ws,t),l(e,Tt,t),J(Pe,e,t),l(e,jt,t),l(e,hs,t),l(e,bt,t),l(e,Cs,t),l(e,Ut,t),J(vs,e,t),l(e,wt,t),l(e,$s,t),l(e,ht,t),l(e,gs,t),l(e,Ct,t),l(e,Is,t),l(e,vt,t),J(ks,e,t),l(e,$t,t),l(e,Zs,t),l(e,gt,t),J(_s,e,t),l(e,It,t),J(xs,e,t),l(e,kt,t),l(e,Gs,t),l(e,Zt,t),l(e,Bs,t),l(e,_t,t),J(Xs,e,t),l(e,xt,t),l(e,zs,t),l(e,Gt,t),J(Ke,e,t),l(e,Bt,t),J(Oe,e,t),l(e,Xt,t),l(e,Rs,t),l(e,zt,t),J(Vs,e,t),l(e,Rt,t),l(e,Ws,t),l(e,Vt,t),zl[Re].m(e,t),l(e,Al,t),l(e,Ns,t),l(e,Wt,t),J(Qs,e,t),l(e,Nt,t),l(e,qs,t),l(e,Qt,t),l(e,As,t),l(e,qt,t),Rl[We].m(e,t),l(e,El,t),l(e,Es,t),l(e,At,t),J(Hs,e,t),l(e,Et,t),J(Ys,e,t),l(e,Ht,t),l(e,Fs,t),l(e,Yt,t),J(Ss,e,t),l(e,Ft,t),J(Ls,e,t),l(e,St,t),l(e,Ds,t),l(e,Lt,t),J(Ps,e,t),l(e,Dt,t),J(Ks,e,t),l(e,Pt,t),l(e,Os,t),l(e,Kt,t),J(el,e,t),l(e,Ot,t),J(sl,e,t),l(e,en,t),Vl[Qe].m(e,t),l(e,Hl,t),J(ll,e,t),l(e,sn,t),J(tl,e,t),l(e,ln,t),we&&we.m(e,t),l(e,Yl,t),l(e,nl,t),l(e,tn,t),l(e,al,t),l(e,nn,t),J(rl,e,t),l(e,an,t),l(e,il,t),l(e,rn,t),J(pl,e,t),l(e,pn,t),l(e,ol,t),l(e,on,t),l(e,ul,t),l(e,un,t),J(cl,e,t),l(e,cn,t),J(Ml,e,t),l(e,Mn,t),l(e,ml,t),l(e,mn,t),J(dl,e,t),l(e,dn,t),J(yl,e,t),l(e,yn,t),J(Jl,e,t),l(e,Jn,t),J(fl,e,t),l(e,fn,t),l(e,Tl,t),l(e,Tn,t),Wl[Ae].m(e,t),l(e,Fl,t),l(e,jl,t),l(e,jn,t),J(bl,e,t),l(e,bn,t),l(e,Ul,t),l(e,Un,t),J(wl,e,t),l(e,wn,t),l(e,hl,t),l(e,hn,t),l(e,Cl,t),l(e,Cn,t),J(vl,e,t),l(e,vn,t),Nl[He].m(e,t),l(e,Sl,t),re&&re.m(e,t),l(e,Ll,t),J($l,e,t),l(e,$n,t),l(e,gl,t),l(e,gn,t),J(Il,e,t),l(e,In,t),J(kl,e,t),l(e,kn,t),l(e,Zl,t),l(e,Zn,t),J(_l,e,t),l(e,_n,t),J(xl,e,t),l(e,xn,t),l(e,Gl,t),l(e,Gn,t),J(es,e,t),l(e,Bn,t),J(Bl,e,t),l(e,Xn,t),l(e,Dl,t),zn=!0},p(e,[t]){const Ea={};t&1&&(Ea.fw=e[0]),I.$set(Ea);let Wn=x;x=Ga(e),x!==Wn&&(ql(),c(Xl[Wn],1,1,()=>{Xl[Wn]=null}),Ql(),$=Xl[x],$||($=Xl[x]=xa[x](e),$.c()),u($,1),$.m(C.parentNode,C));const Ha={};t&2&&(Ha.$$scope={dirty:t,ctx:e}),De.$set(Ha);const Ya={};t&2&&(Ya.$$scope={dirty:t,ctx:e}),Pe.$set(Ya);const Fa={};t&2&&(Fa.$$scope={dirty:t,ctx:e}),Ke.$set(Fa);const Sa={};t&2&&(Sa.$$scope={dirty:t,ctx:e}),Oe.$set(Sa);let Nn=Re;Re=Xa(e),Re!==Nn&&(ql(),c(zl[Nn],1,1,()=>{zl[Nn]=null}),Ql(),Ve=zl[Re],Ve||(Ve=zl[Re]=Ba[Re](e),Ve.c()),u(Ve,1),Ve.m(Al.parentNode,Al));let Qn=We;We=Ra(e),We!==Qn&&(ql(),c(Rl[Qn],1,1,()=>{Rl[Qn]=null}),Ql(),Ne=Rl[We],Ne||(Ne=Rl[We]=za[We](e),Ne.c()),u(Ne,1),Ne.m(El.parentNode,El));let qn=Qe;Qe=Wa(e),Qe!==qn&&(ql(),c(Vl[qn],1,1,()=>{Vl[qn]=null}),Ql(),qe=Vl[Qe],qe||(qe=Vl[Qe]=Va[Qe](e),qe.c()),u(qe,1),qe.m(Hl.parentNode,Hl)),e[0]==="pt"?we||(we=Da(),we.c(),we.m(Yl.parentNode,Yl)):we&&(we.d(1),we=null);let An=Ae;Ae=Qa(e),Ae!==An&&(ql(),c(Wl[An],1,1,()=>{Wl[An]=null}),Ql(),Ee=Wl[Ae],Ee||(Ee=Wl[Ae]=Na[Ae](e),Ee.c()),u(Ee,1),Ee.m(Fl.parentNode,Fl));let En=He;He=Aa(e),He!==En&&(ql(),c(Nl[En],1,1,()=>{Nl[En]=null}),Ql(),Ye=Nl[He],Ye||(Ye=Nl[He]=qa[He](e),Ye.c()),u(Ye,1),Ye.m(Sl.parentNode,Sl)),e[0]==="pt"?re?t&1&&u(re,1):(re=Pa(),re.c(),u(re,1),re.m(Ll.parentNode,Ll)):re&&(ql(),c(re,1,1,()=>{re=null}),Ql());const La={};t&2&&(La.$$scope={dirty:t,ctx:e}),es.$set(La)},i(e){zn||(u(I.$$.fragment,e),u(Z.$$.fragment,e),u($),u(V.$$.fragment,e),u(Ie.$$.fragment,e),u(fe.$$.fragment,e),u(ke.$$.fragment,e),u(Ue.$$.fragment,e),u(ue.$$.fragment,e),u(Fe.$$.fragment,e),u(i.$$.fragment,e),u(ts.$$.fragment,e),u(as.$$.fragment,e),u(rs.$$.fragment,e),u(ps.$$.fragment,e),u(os.$$.fragment,e),u(cs.$$.fragment,e),u(Ms.$$.fragment,e),u(ds.$$.fragment,e),u(ys.$$.fragment,e),u(fs.$$.fragment,e),u(De.$$.fragment,e),u(Ts.$$.fragment,e),u(js.$$.fragment,e),u(Us.$$.fragment,e),u(Pe.$$.fragment,e),u(vs.$$.fragment,e),u(ks.$$.fragment,e),u(_s.$$.fragment,e),u(xs.$$.fragment,e),u(Xs.$$.fragment,e),u(Ke.$$.fragment,e),u(Oe.$$.fragment,e),u(Vs.$$.fragment,e),u(Ve),u(Qs.$$.fragment,e),u(Ne),u(Hs.$$.fragment,e),u(Ys.$$.fragment,e),u(Ss.$$.fragment,e),u(Ls.$$.fragment,e),u(Ps.$$.fragment,e),u(Ks.$$.fragment,e),u(el.$$.fragment,e),u(sl.$$.fragment,e),u(qe),u(ll.$$.fragment,e),u(tl.$$.fragment,e),u(rl.$$.fragment,e),u(pl.$$.fragment,e),u(cl.$$.fragment,e),u(Ml.$$.fragment,e),u(dl.$$.fragment,e),u(yl.$$.fragment,e),u(Jl.$$.fragment,e),u(fl.$$.fragment,e),u(Ee),u(bl.$$.fragment,e),u(wl.$$.fragment,e),u(vl.$$.fragment,e),u(Ye),u(re),u($l.$$.fragment,e),u(Il.$$.fragment,e),u(kl.$$.fragment,e),u(_l.$$.fragment,e),u(xl.$$.fragment,e),u(es.$$.fragment,e),u(Bl.$$.fragment,e),zn=!0)},o(e){c(I.$$.fragment,e),c(Z.$$.fragment,e),c($),c(V.$$.fragment,e),c(Ie.$$.fragment,e),c(fe.$$.fragment,e),c(ke.$$.fragment,e),c(Ue.$$.fragment,e),c(ue.$$.fragment,e),c(Fe.$$.fragment,e),c(i.$$.fragment,e),c(ts.$$.fragment,e),c(as.$$.fragment,e),c(rs.$$.fragment,e),c(ps.$$.fragment,e),c(os.$$.fragment,e),c(cs.$$.fragment,e),c(Ms.$$.fragment,e),c(ds.$$.fragment,e),c(ys.$$.fragment,e),c(fs.$$.fragment,e),c(De.$$.fragment,e),c(Ts.$$.fragment,e),c(js.$$.fragment,e),c(Us.$$.fragment,e),c(Pe.$$.fragment,e),c(vs.$$.fragment,e),c(ks.$$.fragment,e),c(_s.$$.fragment,e),c(xs.$$.fragment,e),c(Xs.$$.fragment,e),c(Ke.$$.fragment,e),c(Oe.$$.fragment,e),c(Vs.$$.fragment,e),c(Ve),c(Qs.$$.fragment,e),c(Ne),c(Hs.$$.fragment,e),c(Ys.$$.fragment,e),c(Ss.$$.fragment,e),c(Ls.$$.fragment,e),c(Ps.$$.fragment,e),c(Ks.$$.fragment,e),c(el.$$.fragment,e),c(sl.$$.fragment,e),c(qe),c(ll.$$.fragment,e),c(tl.$$.fragment,e),c(rl.$$.fragment,e),c(pl.$$.fragment,e),c(cl.$$.fragment,e),c(Ml.$$.fragment,e),c(dl.$$.fragment,e),c(yl.$$.fragment,e),c(Jl.$$.fragment,e),c(fl.$$.fragment,e),c(Ee),c(bl.$$.fragment,e),c(wl.$$.fragment,e),c(vl.$$.fragment,e),c(Ye),c(re),c($l.$$.fragment,e),c(Il.$$.fragment,e),c(kl.$$.fragment,e),c(_l.$$.fragment,e),c(xl.$$.fragment,e),c(es.$$.fragment,e),c(Bl.$$.fragment,e),zn=!1},d(e){e&&(s(w),s(p),s(U),s(j),s(_),s(C),s(B),s(de),s(N),s(F),s(ye),s(Q),s(S),s(W),s(L),s(R),s(q),s(z),s(ee),s(X),s(G),s(D),s(ce),s(pe),s(se),s(he),s(H),s(le),s(Me),s(oe),s(te),s(Ce),s(Y),s(ne),s(ve),s(ae),s(Te),s(be),s(me),s($e),s(o),s(ze),s(Le),s(v),s(ls),s(Pl),s(Kl),s(ns),s(Ol),s(et),s(st),s(is),s(lt),s(tt),s(nt),s(us),s(at),s(rt),s(it),s(ms),s(pt),s(ot),s(ut),s(Js),s(ct),s(Mt),s(mt),s(dt),s(yt),s(bs),s(Jt),s(ft),s(ws),s(Tt),s(jt),s(hs),s(bt),s(Cs),s(Ut),s(wt),s($s),s(ht),s(gs),s(Ct),s(Is),s(vt),s($t),s(Zs),s(gt),s(It),s(kt),s(Gs),s(Zt),s(Bs),s(_t),s(xt),s(zs),s(Gt),s(Bt),s(Xt),s(Rs),s(zt),s(Rt),s(Ws),s(Vt),s(Al),s(Ns),s(Wt),s(Nt),s(qs),s(Qt),s(As),s(qt),s(El),s(Es),s(At),s(Et),s(Ht),s(Fs),s(Yt),s(Ft),s(St),s(Ds),s(Lt),s(Dt),s(Pt),s(Os),s(Kt),s(Ot),s(en),s(Hl),s(sn),s(ln),s(Yl),s(nl),s(tn),s(al),s(nn),s(an),s(il),s(rn),s(pn),s(ol),s(on),s(ul),s(un),s(cn),s(Mn),s(ml),s(mn),s(dn),s(yn),s(Jn),s(fn),s(Tl),s(Tn),s(Fl),s(jl),s(jn),s(bn),s(Ul),s(Un),s(wn),s(hl),s(hn),s(Cl),s(Cn),s(vn),s(Sl),s(Ll),s($n),s(gl),s(gn),s(In),s(kn),s(Zl),s(Zn),s(_n),s(xn),s(Gl),s(Gn),s(Bn),s(Xn),s(Dl)),s(r),f(I,e),f(Z,e),Xl[x].d(e),f(V,e),f(Ie,e),f(fe,e),f(ke,e),f(Ue,e),f(ue,e),f(Fe,e),f(i,e),f(ts,e),f(as,e),f(rs,e),f(ps,e),f(os,e),f(cs,e),f(Ms,e),f(ds,e),f(ys,e),f(fs,e),f(De,e),f(Ts,e),f(js,e),f(Us,e),f(Pe,e),f(vs,e),f(ks,e),f(_s,e),f(xs,e),f(Xs,e),f(Ke,e),f(Oe,e),f(Vs,e),zl[Re].d(e),f(Qs,e),Rl[We].d(e),f(Hs,e),f(Ys,e),f(Ss,e),f(Ls,e),f(Ps,e),f(Ks,e),f(el,e),f(sl,e),Vl[Qe].d(e),f(ll,e),f(tl,e),we&&we.d(e),f(rl,e),f(pl,e),f(cl,e),f(Ml,e),f(dl,e),f(yl,e),f(Jl,e),f(fl,e),Wl[Ae].d(e),f(bl,e),f(wl,e),f(vl,e),Nl[He].d(e),re&&re.d(e),f($l,e),f(Il,e),f(kl,e),f(_l,e),f(xl,e),f(es,e),f(Bl,e)}}}const Ir='{"title":"Traduction","local":"traduction","sections":[{"title":"Préparation des données","local":"préparation-des-données","sections":[{"title":"Le jeu de données KDE4","local":"le-jeu-de-données-kde4","sections":[],"depth":3},{"title":"Traitement des données","local":"traitement-des-données","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> du modèle avec Keras","local":"i-finetuner-i-du-modèle-avec-keras","sections":[{"title":"Assemblage des données","local":"assemblage-des-données","sections":[],"depth":3},{"title":"Métriques","local":"métriques","sections":[],"depth":3},{"title":"<i> Finetuner </i> le modèle","local":"i-finetuner-i-le-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 le tout pour l’entraînement","local":"préparer-le-tout-pour-lentraînement","sections":[],"depth":3},{"title":"Boucle d’entraînement","local":"boucle-dentraînement","sections":[],"depth":3},{"title":"Utilisation du modèle <i> finetuné </i>","local":"utilisation-du-modèle-i-finetuné-i","sections":[],"depth":3}],"depth":2}],"depth":1}';function kr(k,r,w){let p="pt";return er(()=>{const U=new URLSearchParams(window.location.search);w(0,p=U.get("fw")||"pt")}),[p]}class Vr extends sr{constructor(r){super(),lr(this,r,kr,gr,Oa,{})}}export{Vr as component};

Xet Storage Details

Size:
144 kB
·
Xet hash:
2194b472c2e537761f89c45177fd0b80d7297ece2ebd999aa4e1af7957798b53

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