import{s as En,a as Xn,o as Yn,n as Se}from"../chunks/scheduler.893fe8c9.js";import{S as Hn,i as Fn,e as J,s,c as o,h as Sn,a as f,d as l,b as n,f as Ws,g as m,j as T,k as Ie,l as Dn,m as t,n as d,o as M,D as Rt,t as u,p as y,E as Vt}from"../chunks/index.6ee278c6.js";import{T as el}from"../chunks/Tip.eab0255c.js";import{C as qn,H as ve,E as Ln}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.ea3ad860.js";import{Y as Zs}from"../chunks/Youtube.59d04f41.js";import{C as h}from"../chunks/CodeBlock.8bdd5f33.js";import{C as Qn}from"../chunks/CourseFloatingBanner.c25cfa5e.js";import{F as Pn}from"../chunks/FrameworkSwitchCourse.77a18d50.js";function Kn(Z){let i,w;return i=new Qn({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section4_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section4_tf.ipynb"}]}}),{c(){o(i.$$.fragment)},l(p){m(i.$$.fragment,p)},m(p,j){d(i,p,j),w=!0},i(p){w||(u(i.$$.fragment,p),w=!0)},o(p){M(i.$$.fragment,p),w=!1},d(p){y(i,p)}}}function On(Z){let i,w;return i=new Qn({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section4_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section4_pt.ipynb"}]}}),{c(){o(i.$$.fragment)},l(p){m(i.$$.fragment,p)},m(p,j){d(i,p,j),w=!0},i(p){w||(u(i.$$.fragment,p),w=!0)},o(p){M(i.$$.fragment,p),w=!1},d(p){y(i,p)}}}function ei(Z){let i,w="✏️ <strong>Rândul tău!</strong> Un alt cuvânt englezesc care este adesea folosit în franceză este “email”. Găsiți primul sample din datasetul de antrenare care utilizează acest cuvânt. Cum este tradus? Cum traduce modelul preantrenat aceeași propoziție în limba engleză?";return{c(){i=J("p"),i.innerHTML=w},l(p){i=f(p,"P",{"data-svelte-h":!0}),T(i)!=="svelte-awe7ib"&&(i.innerHTML=w)},m(p,j){t(p,i,j)},p:Se,d(p){p&&l(i)}}}function li(Z){let i,w="💡 Dacă utilizați un tokenizer multilingv, cum ar fi mBART, mBART-50 sau M2M100, va trebui să setați codurile de limbă ale inputurilor și targeturilor în tokenizer prin setarea <code>tokenizer.src_lang</code> și <code>tokenizer.tgt_lang</code> la valorile corecte.";return{c(){i=J("p"),i.innerHTML=w},l(p){i=f(p,"P",{"data-svelte-h":!0}),T(i)!=="svelte-1dy9ygs"&&(i.innerHTML=w)},m(p,j){t(p,i,j)},p:Se,d(p){p&&l(i)}}}function ti(Z){let i,w="💡 Dacă utilizați un model T5 (mai precis, unul dintre checkpointurile <code>t5-xxx</code>), modelul se va aștepta ca inputurile text să aibă un prefix care să indice sarcina în cauză, cum ar fi <code>translate: din engleză în franceză:</code>.";return{c(){i=J("p"),i.innerHTML=w},l(p){i=f(p,"P",{"data-svelte-h":!0}),T(i)!=="svelte-dgc0kk"&&(i.innerHTML=w)},m(p,j){t(p,i,j)},p:Se,d(p){p&&l(i)}}}function ai(Z){let i,w="⚠️ Nu acordăm atenție attention maskului a targeturilor, deoarece modelul nu se va aștepta la aceasta. În schimb, labelurile corespunzătoare unui padding token trebuie setate la <code>-100</code>, astfel încât acestea să fie ignorate în calculul pierderilor. Acest lucru va fi făcut mai târziu de data collatorul nostru, deoarece aplicăm padding dinamic, dar dacă utilizați padding aici, ar trebui să adaptați funcția de preprocesare pentru a seta toate labelurile care corespund simbolului de padding la <code>-100</code>.";return{c(){i=J("p"),i.innerHTML=w},l(p){i=f(p,"P",{"data-svelte-h":!0}),T(i)!=="svelte-roa71m"&&(i.innerHTML=w)},m(p,j){t(p,i,j)},p:Se,d(p){p&&l(i)}}}function si(Z){let i,w,p,j="În primul rând, avem nevoie de un model pe care să îl aplicăm fine-tuningul. Vom folosi API-ul obișnuit <code>AutoModel</code>:",I,b,v,x,z;return i=new ve({props:{title:"Fine-tuningul modelului cu Keras",local:"fine-tuning-the-model-with-keras",headingTag:"h2"}}),b=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}}),x=new el({props:{warning:!1,$$slots:{default:[ii]},$$scope:{ctx:Z}}}),{c(){o(i.$$.fragment),w=s(),p=J("p"),p.innerHTML=j,I=s(),o(b.$$.fragment),v=s(),o(x.$$.fragment)},l(k){m(i.$$.fragment,k),w=n(k),p=f(k,"P",{"data-svelte-h":!0}),T(p)!=="svelte-1ajie7r"&&(p.innerHTML=j),I=n(k),m(b.$$.fragment,k),v=n(k),m(x.$$.fragment,k)},m(k,C){d(i,k,C),t(k,w,C),t(k,p,C),t(k,I,C),d(b,k,C),t(k,v,C),d(x,k,C),z=!0},i(k){z||(u(i.$$.fragment,k),u(b.$$.fragment,k),u(x.$$.fragment,k),z=!0)},o(k){M(i.$$.fragment,k),M(b.$$.fragment,k),M(x.$$.fragment,k),z=!1},d(k){k&&(l(w),l(p),l(I),l(v)),y(i,k),y(b,k),y(x,k)}}}function ni(Z){let i,w,p,j='Codul real care utilizează <code>Trainer</code> va fi același ca înainte, cu o singură mică schimbare: folosim aici un <a href="https://huggingface.co/transformers/main_classes/trainer.html#seq2seqtrainer" rel="nofollow"><code>Seq2SeqTrainer</code></a>, care este o subclasă a <code>Trainer</code> care ne va permite să ne ocupăm în mod corespunzător de evaluare, folosind metoda <code>generate()</code> pentru a prezice rezultatele din inputuri. Vom analiza acest aspect mai în detaliu atunci când vom vorbi despre calculul metricelor.',I,b,v="În primul rând, avem nevoie de un model pe care să îl aplicăm fine-tuningul. Vom utiliza API-ul obișnuit <code>AutoModel</code>:",x,z,k;return i=new ve({props:{title:"Fine-tuningul modelului cu API-ul Trainer",local:"fine-tuning-the-model-with-the-trainer-api",headingTag:"h2"}}),z=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(){o(i.$$.fragment),w=s(),p=J("p"),p.innerHTML=j,I=s(),b=J("p"),b.innerHTML=v,x=s(),o(z.$$.fragment)},l(C){m(i.$$.fragment,C),w=n(C),p=f(C,"P",{"data-svelte-h":!0}),T(p)!=="svelte-17s2rk0"&&(p.innerHTML=j),I=n(C),b=f(C,"P",{"data-svelte-h":!0}),T(b)!=="svelte-1ylkx0n"&&(b.innerHTML=v),x=n(C),m(z.$$.fragment,C)},m(C,G){d(i,C,G),t(C,w,G),t(C,p,G),t(C,I,G),t(C,b,G),t(C,x,G),d(z,C,G),k=!0},i(C){k||(u(i.$$.fragment,C),u(z.$$.fragment,C),k=!0)},o(C){M(i.$$.fragment,C),M(z.$$.fragment,C),k=!1},d(C){C&&(l(w),l(p),l(I),l(b),l(x)),y(i,C),y(z,C)}}}function ii(Z){let i,w=`💡 Checkpointul <code>Helsinki-NLP/opus-mt-en-fr</code> are doar weighturi PyTorch, deci
veți primi o eroare dacă încercați să încărcați modelul fără a utiliza argumentul
<code>from_pt=True</code> în metoda <code>from_pretrained()</code>. Atunci când specificați
<code>from_pt=True</code>, biblioteca va descărca și va converti automat
weighturile PyTorch pentru voi. După cum puteți vedea, este foarte simplu să vă schimbați între
frameworkuri în 🤗 Transformers!`;return{c(){i=J("p"),i.innerHTML=w},l(p){i=f(p,"P",{"data-svelte-h":!0}),T(i)!=="svelte-k0i6sv"&&(i.innerHTML=w)},m(p,j){t(p,i,j)},p:Se,d(p){p&&l(i)}}}function ri(Z){let i,w;return i=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(){o(i.$$.fragment)},l(p){m(i.$$.fragment,p)},m(p,j){d(i,p,j),w=!0},i(p){w||(u(i.$$.fragment,p),w=!0)},o(p){M(i.$$.fragment,p),w=!1},d(p){y(i,p)}}}function pi(Z){let i,w;return i=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(){o(i.$$.fragment)},l(p){m(i.$$.fragment,p)},m(p,j){d(i,p,j),w=!0},i(p){w||(u(i.$$.fragment,p),w=!0)},o(p){M(i.$$.fragment,p),w=!1},d(p){y(i,p)}}}function ci(Z){let i,w="Acum putem folosi acest <code>data_collator</code> pentru a converti fiecare dintre dataseturile într-un <code>tf.data.Dataset</code>, gata pentru antrenare:",p,j,I;return j=new h({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMG1vZGVsLnByZXBhcmVfdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEMzIlMkMlMEEpJTBBdGZfZXZhbF9kYXRhc2V0JTIwJTNEJTIwbW9kZWwucHJlcGFyZV90Zl9kYXRhc2V0KCUwQSUyMCUyMCUyMCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMHNodWZmbGUlM0RGYWxzZSUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0QxNiUyQyUwQSk=",highlighted:`tf_train_dataset = 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(){i=J("p"),i.innerHTML=w,p=s(),o(j.$$.fragment)},l(b){i=f(b,"P",{"data-svelte-h":!0}),T(i)!=="svelte-bjfts8"&&(i.innerHTML=w),p=n(b),m(j.$$.fragment,b)},m(b,v){t(b,i,v),t(b,p,v),d(j,b,v),I=!0},i(b){I||(u(j.$$.fragment,b),I=!0)},o(b){M(j.$$.fragment,b),I=!1},d(b){b&&(l(i),l(p)),y(j,b)}}}function ui(Z){let i,w="Vom transmite acest <code>data_collator</code> către <code>Seq2SeqTrainer</code>. În continuare, să aruncăm o privire la metrice.";return{c(){i=J("p"),i.innerHTML=w},l(p){i=f(p,"P",{"data-svelte-h":!0}),T(i)!=="svelte-svft99"&&(i.innerHTML=w)},m(p,j){t(p,i,j)},i:Se,o:Se,d(p){p&&l(i)}}}function Nn(Z){let i,w="Caracteristica pe care <code>Seq2SeqTrainer</code> o adaugă superclasei sale <code>Trainer</code> este capacitatea de a utiliza metoda <code>generate()</code> în timpul evaluării sau predicției. În timpul antrenării, modelul va utiliza <code>decoder_input_ids</code> cu un attention mask care asigură că nu utilizează tokenii de după tokenul pe care încearcă să îl prezică, pentru a accelera antrenarea. În timpul inferenței, nu le vom putea utiliza deoarece nu vom avea labeluri, deci este o idee bună să ne evaluăm modelul cu aceeași configurație.",p,j,I='După cum am văzut în <a href="/course/chapter1/6">Capitolul 1</a>, decoderul realizează inferența prin prezicerea tokenilor unul câte unul - lucru care este implementat behind the scenes în 🤗 Transformers prin metoda <code>generate()</code>. <code>Seq2SeqTrainer</code> ne va permite să folosim această metodă pentru evaluare dacă setăm <code>predict_with_generate=True</code>.';return{c(){i=J("p"),i.innerHTML=w,p=s(),j=J("p"),j.innerHTML=I},l(b){i=f(b,"P",{"data-svelte-h":!0}),T(i)!=="svelte-18ah4c8"&&(i.innerHTML=w),p=n(b),j=f(b,"P",{"data-svelte-h":!0}),T(j)!=="svelte-1lcvb72"&&(j.innerHTML=I)},m(b,v){t(b,i,v),t(b,p,v),t(b,j,v)},d(b){b&&(l(i),l(p),l(j))}}}function Mi(Z){let i,w="Pentru a trece de la rezultatele modelului la textele pe care metricele le pot utiliza, vom utiliza metoda <code>tokenizer.batch_decode()</code>. Trebuie doar să curățăm toate <code>-100</code> din labeluri(tokenizerul va face automat același lucru pentru padding token):",p,j,I;return j=new h({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBJTBBZGVmJTIwY29tcHV0ZV9tZXRyaWNzKGV2YWxfcHJlZHMpJTNBJTBBJTIwJTIwJTIwJTIwcHJlZHMlMkMlMjBsYWJlbHMlMjAlM0QlMjBldmFsX3ByZWRzJTBBJTIwJTIwJTIwJTIwJTIzJTIwSW4lMjBjYXNlJTIwdGhlJTIwbW9kZWwlMjByZXR1cm5zJTIwbW9yZSUyMHRoYW4lMjB0aGUlMjBwcmVkaWN0aW9uJTIwbG9naXRzJTBBJTIwJTIwJTIwJTIwaWYlMjBpc2luc3RhbmNlKHByZWRzJTJDJTIwdHVwbGUpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJlZHMlMjAlM0QlMjBwcmVkcyU1QjAlNUQlMEElMEElMjAlMjAlMjAlMjBkZWNvZGVkX3ByZWRzJTIwJTNEJTIwdG9rZW5pemVyLmJhdGNoX2RlY29kZShwcmVkcyUyQyUyMHNraXBfc3BlY2lhbF90b2tlbnMlM0RUcnVlKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFJlcGxhY2UlMjAtMTAwcyUyMGluJTIwdGhlJTIwbGFiZWxzJTIwYXMlMjB3ZSUyMGNhbid0JTIwZGVjb2RlJTIwdGhlbSUwQSUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMG5wLndoZXJlKGxhYmVscyUyMCElM0QlMjAtMTAwJTJDJTIwbGFiZWxzJTJDJTIwdG9rZW5pemVyLnBhZF90b2tlbl9pZCklMEElMjAlMjAlMjAlMjBkZWNvZGVkX2xhYmVscyUyMCUzRCUyMHRva2VuaXplci5iYXRjaF9kZWNvZGUobGFiZWxzJTJDJTIwc2tpcF9zcGVjaWFsX3Rva2VucyUzRFRydWUpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwU29tZSUyMHNpbXBsZSUyMHBvc3QtcHJvY2Vzc2luZyUwQSUyMCUyMCUyMCUyMGRlY29kZWRfcHJlZHMlMjAlM0QlMjAlNUJwcmVkLnN0cmlwKCklMjBmb3IlMjBwcmVkJTIwaW4lMjBkZWNvZGVkX3ByZWRzJTVEJTBBJTIwJTIwJTIwJTIwZGVjb2RlZF9sYWJlbHMlMjAlM0QlMjAlNUIlNUJsYWJlbC5zdHJpcCgpJTVEJTIwZm9yJTIwbGFiZWwlMjBpbiUyMGRlY29kZWRfbGFiZWxzJTVEJTBBJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwbWV0cmljLmNvbXB1dGUocHJlZGljdGlvbnMlM0RkZWNvZGVkX3ByZWRzJTJDJTIwcmVmZXJlbmNlcyUzRGRlY29kZWRfbGFiZWxzKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMCU3QiUyMmJsZXUlMjIlM0ElMjByZXN1bHQlNUIlMjJzY29yZSUyMiU1RCU3RA==",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"># In case the model returns more than the prediction logits</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"># Replace -100s in the labels as we can&#x27;t decode them</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"># Some simple post-processing</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(){i=J("p"),i.innerHTML=w,p=s(),o(j.$$.fragment)},l(b){i=f(b,"P",{"data-svelte-h":!0}),T(i)!=="svelte-156j7hj"&&(i.innerHTML=w),p=n(b),m(j.$$.fragment,b)},m(b,v){t(b,i,v),t(b,p,v),d(j,b,v),I=!0},i(b){I||(u(j.$$.fragment,b),I=!0)},o(b){M(j.$$.fragment,b),I=!1},d(b){b&&(l(i),l(p)),y(j,b)}}}function oi(Z){let i,w='Pentru a trece de la rezultatele modelului la texte pe care metricele le pot utiliza, vom utiliza metoda <code>tokenizer.batch_decode()</code>. Trebuie doar să curățăm toate <code>-100</code> din labeluri; tokenizerul va face automat același lucru pentru padding token. Să definim o funcție care să preia modelul nostru și un dataset și să calculeze metrici pe acesta. De asemenea, vom utiliza un truc care crește dramatic performanța - compilarea codului nostru de generare cu <a href="https://www.tensorflow.org/xla" rel="nofollow">XLA</a>, compilatorul accelerat de algebră liniară al TensorFlow. XLA aplică diverse optimizări graficului de calcul al modelului și are ca rezultat îmbunătățiri semnificative ale vitezei și utilizării memoriei. După cum se descrie în <a href="https://huggingface.co/blog/tf-xla-generate" rel="nofollow">blogul</a> Hugging Face, XLA funcționează cel mai bine atunci când shaperulire noastre de input nu variază prea mult. Pentru a face față acestui lucru, vom aplica padding inputurilor cu multipli ai 128 și vom crea un nou dataset cu padding collatorul, iar apoi vom aplica decoratorul <code>@tf.function(jit_compile=True)</code> funcției noastre de generare, care marchează întreaga funcție pentru compilare cu XLA.',p,j,I;return j=new h({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFmcm9tJTIwdHFkbSUyMGltcG9ydCUyMHRxZG0lMEElMEFnZW5lcmF0aW9uX2RhdGFfY29sbGF0b3IlMjAlM0QlMjBEYXRhQ29sbGF0b3JGb3JTZXEyU2VxKCUwQSUyMCUyMCUyMCUyMHRva2VuaXplciUyQyUyMG1vZGVsJTNEbW9kZWwlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyJTJDJTIwcGFkX3RvX211bHRpcGxlX29mJTNEMTI4JTBBKSUwQSUwQXRmX2dlbmVyYXRlX2RhdGFzZXQlMjAlM0QlMjBtb2RlbC5wcmVwYXJlX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RnZW5lcmF0aW9uX2RhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEOCUyQyUwQSklMEElMEElMEElNDB0Zi5mdW5jdGlvbihqaXRfY29tcGlsZSUzRFRydWUpJTBBZGVmJTIwZ2VuZXJhdGVfd2l0aF94bGEoYmF0Y2gpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwbW9kZWwuZ2VuZXJhdGUoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW5wdXRfaWRzJTNEYmF0Y2glNUIlMjJpbnB1dF9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhdHRlbnRpb25fbWFzayUzRGJhdGNoJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfbmV3X3Rva2VucyUzRDEyOCUyQyUwQSUyMCUyMCUyMCUyMCklMEElMEElMEFkZWYlMjBjb21wdXRlX21ldHJpY3MoKSUzQSUwQSUyMCUyMCUyMCUyMGFsbF9wcmVkcyUyMCUzRCUyMCU1QiU1RCUwQSUyMCUyMCUyMCUyMGFsbF9sYWJlbHMlMjAlM0QlMjAlNUIlNUQlMEElMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyQyUyMGxhYmVscyUyMGluJTIwdHFkbSh0Zl9nZW5lcmF0ZV9kYXRhc2V0KSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwZ2VuZXJhdGVfd2l0aF94bGEoYmF0Y2gpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVjb2RlZF9wcmVkcyUyMCUzRCUyMHRva2VuaXplci5iYXRjaF9kZWNvZGUocHJlZGljdGlvbnMlMkMlMjBza2lwX3NwZWNpYWxfdG9rZW5zJTNEVHJ1ZSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBsYWJlbHMubnVtcHkoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMG5wLndoZXJlKGxhYmVscyUyMCElM0QlMjAtMTAwJTJDJTIwbGFiZWxzJTJDJTIwdG9rZW5pemVyLnBhZF90b2tlbl9pZCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkZWNvZGVkX2xhYmVscyUyMCUzRCUyMHRva2VuaXplci5iYXRjaF9kZWNvZGUobGFiZWxzJTJDJTIwc2tpcF9zcGVjaWFsX3Rva2VucyUzRFRydWUpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVjb2RlZF9wcmVkcyUyMCUzRCUyMCU1QnByZWQuc3RyaXAoKSUyMGZvciUyMHByZWQlMjBpbiUyMGRlY29kZWRfcHJlZHMlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkZWNvZGVkX2xhYmVscyUyMCUzRCUyMCU1QiU1QmxhYmVsLnN0cmlwKCklNUQlMjBmb3IlMjBsYWJlbCUyMGluJTIwZGVjb2RlZF9sYWJlbHMlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhbGxfcHJlZHMuZXh0ZW5kKGRlY29kZWRfcHJlZHMpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWxsX2xhYmVscy5leHRlbmQoZGVjb2RlZF9sYWJlbHMpJTBBJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwbWV0cmljLmNvbXB1dGUocHJlZGljdGlvbnMlM0RhbGxfcHJlZHMlMkMlMjByZWZlcmVuY2VzJTNEYWxsX2xhYmVscyklMEElMjAlMjAlMjAlMjByZXR1cm4lMjAlN0IlMjJibGV1JTIyJTNBJTIwcmVzdWx0JTVCJTIyc2NvcmUlMjIlNUQlN0Q=",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(){i=J("p"),i.innerHTML=w,p=s(),o(j.$$.fragment)},l(b){i=f(b,"P",{"data-svelte-h":!0}),T(i)!=="svelte-1lqrjg4"&&(i.innerHTML=w),p=n(b),m(j.$$.fragment,b)},m(b,v){t(b,i,v),t(b,p,v),d(j,b,v),I=!0},i(b){I||(u(j.$$.fragment,b),I=!0)},o(b){M(j.$$.fragment,b),I=!1},d(b){b&&(l(i),l(p)),y(j,b)}}}function mi(Z){let i,w="Odată făcut acest lucru, putem defini <code>Seq2SeqTrainingArguments</code>. Ca și pentru <code>Trainer</code>, folosim o subclasă a <code>TrainingArguments</code> care conține câteva câmpuri suplimentare:",p,j,I,b,v="În afară de hiperparametrii obișnuiți (cum ar fi rata de învățare, numărul de epoci, dimensiunea batch-ului și o anumită scădere a weighturilor), aici sunt câteva schimbări în comparație cu ceea ce am văzut în secțiunile anterioare:",x,z,k="<li>Nu setăm nicio evaluare periodică, deoarece evaluarea durează; ne vom evalua modelul doar o dată înainte și după antrenare.</li> <li>Setăm <code>fp16=True</code>, care accelerează antrenarea pe GPU-urile moderne.</li> <li>Setăm <code>predict_with_generate=True</code>, așa cum am discutat mai sus.</li> <li>Utilizăm <code>push_to_hub=True</code> pentru a încărca modelul în Hub la sfârșitul fiecărei epoci.</li>",C,G,R='Rețineți că puteți specifica numele complet al repositoriului către care doriți să faceți push cu argumentul <code>hub_model_id</code> (în special, va trebui să utilizați acest argument pentru a face push către o organizație). De exemplu, atunci când am trimis modelul către organizația <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code></a>, am adăugat <code>hub_model_id=&quot;huggingface-course/marian-finetuned-kde4-en-to-fr&quot;</code> la <code>Seq2SeqTrainingArguments</code>. În mod implicit, repositoriul utilizat va fi în namespaceul vostru și denumit după output directory-ul pe care l-ați stabilit, deci în cazul nostru va fi <code>&quot;sgugger/marian-finetuned-kde4-en-to-fr&quot;</code> (care este modelul la care am făcut legătura la începutul acestei secțiuni).',ie,O,V,X,P="În final, transmitem totul către <code>Seq2SeqTrainer</code>:",Je,N,A,Q,K="Înainte de antrenare, ne vom uita mai întâi la scorul obținut de modelul nostru, pentru a verifica dacă nu înrăutățim lucrurile prin fine-tuning. Această comandă va dura ceva timp, așa că puteți lua o cafea sau două în timp ce se execută:",fe,E,H,L,W,re,ee="Un scor BLEU de 39 nu este prea rău, ceea ce reflectă faptul că modelul nostru este deja bun la traducerea propozițiilor din engleză în franceză.",B,le,U="Urmează antrenarea, care va necesita, de asemenea, puțin timp:",_,Te,Me,te,ke="Rețineți că, în timpul antrenamentului, de fiecare dată când modelul este salvat (aici, la fiecare epocă), acesta este încărcat în Hub în fundal. În acest fel, veți putea să reluați antrenarea pe o altă mașină, dacă este necesar.",we,F,Ye="Odată ce formarea este terminată, evaluăm din nou modelul nostru - sperăm că vom vedea o îmbunătățire a scorului BLEU!",oe,pe,he,S,_e,ae,Ze="Aceasta este o îmbunătățire de aproape 14 puncte, ceea ce este minunat.",Ce,D,He="În final, folosim metoda <code>push_to_hub()</code> pentru a ne asigura că încărcăm cea mai recentă versiune a modelului. De asemenea, <code>Trainer</code> redactează un model card cu toate rezultatele evaluării și o încarcă. Acest model card conține metadate care ajută Model Hub să aleagă widgetul pentru demonstrația de inferență. De obicei, nu este nevoie să se menționeze nimic, deoarece poate deduce widgetul potrivit din clasa modelului, dar în acest caz, aceeași clasă de model poate fi utilizată pentru toate tipurile de probleme de tip sequence-to-sequence, așa că specificăm că este un model de traducere:",me,ce,$e,Y,De="Această comandă returnează URL-ul comitului pe care tocmai l-am făcut, dacă doriți să îl inspectați:",ge,q,Fe,de,ue="În această etapă, puteți utiliza widget-ul de inferență de pe Model Hub pentru a vă testa modelul și pentru a-l partaja cu prietenii. Ați făcut fine-tune cu succes un model pentru o sarcină de traducere - felicitări!",xe,se,be="Dacă doriți să pătrundeți puțin mai adânc în bucla de antrenare, vă vom arăta acum să faceți același lucru folosind 🤗 Accelerate.",ye;return j=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}}),O=new el({props:{$$slots:{default:[yi]},$$scope:{ctx:Z}}}),N=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}}),E=new h({props:{code:"dHJhaW5lci5ldmFsdWF0ZShtYXhfbGVuZ3RoJTNEbWF4X2xlbmd0aCk=",highlighted:"trainer.evaluate(max_length=max_length)",wrap:!1}}),L=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}}),Te=new h({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),pe=new h({props:{code:"dHJhaW5lci5ldmFsdWF0ZShtYXhfbGVuZ3RoJTNEbWF4X2xlbmd0aCk=",highlighted:"trainer.evaluate(max_length=max_length)",wrap:!1}}),S=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}}),ce=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}}),q=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(){i=J("p"),i.innerHTML=w,p=s(),o(j.$$.fragment),I=s(),b=J("p"),b.textContent=v,x=s(),z=J("ul"),z.innerHTML=k,C=s(),G=J("p"),G.innerHTML=R,ie=s(),o(O.$$.fragment),V=s(),X=J("p"),X.innerHTML=P,Je=s(),o(N.$$.fragment),A=s(),Q=J("p"),Q.textContent=K,fe=s(),o(E.$$.fragment),H=s(),o(L.$$.fragment),W=s(),re=J("p"),re.textContent=ee,B=s(),le=J("p"),le.textContent=U,_=s(),o(Te.$$.fragment),Me=s(),te=J("p"),te.textContent=ke,we=s(),F=J("p"),F.textContent=Ye,oe=s(),o(pe.$$.fragment),he=s(),o(S.$$.fragment),_e=s(),ae=J("p"),ae.textContent=Ze,Ce=s(),D=J("p"),D.innerHTML=He,me=s(),o(ce.$$.fragment),$e=s(),Y=J("p"),Y.textContent=De,ge=s(),o(q.$$.fragment),Fe=s(),de=J("p"),de.textContent=ue,xe=s(),se=J("p"),se.textContent=be},l(c){i=f(c,"P",{"data-svelte-h":!0}),T(i)!=="svelte-16yi2s0"&&(i.innerHTML=w),p=n(c),m(j.$$.fragment,c),I=n(c),b=f(c,"P",{"data-svelte-h":!0}),T(b)!=="svelte-a82zrv"&&(b.textContent=v),x=n(c),z=f(c,"UL",{"data-svelte-h":!0}),T(z)!=="svelte-1w59ibf"&&(z.innerHTML=k),C=n(c),G=f(c,"P",{"data-svelte-h":!0}),T(G)!=="svelte-12xvf48"&&(G.innerHTML=R),ie=n(c),m(O.$$.fragment,c),V=n(c),X=f(c,"P",{"data-svelte-h":!0}),T(X)!=="svelte-wluz6j"&&(X.innerHTML=P),Je=n(c),m(N.$$.fragment,c),A=n(c),Q=f(c,"P",{"data-svelte-h":!0}),T(Q)!=="svelte-16iexd1"&&(Q.textContent=K),fe=n(c),m(E.$$.fragment,c),H=n(c),m(L.$$.fragment,c),W=n(c),re=f(c,"P",{"data-svelte-h":!0}),T(re)!=="svelte-pt4g6n"&&(re.textContent=ee),B=n(c),le=f(c,"P",{"data-svelte-h":!0}),T(le)!=="svelte-vvbi6l"&&(le.textContent=U),_=n(c),m(Te.$$.fragment,c),Me=n(c),te=f(c,"P",{"data-svelte-h":!0}),T(te)!=="svelte-vrcp43"&&(te.textContent=ke),we=n(c),F=f(c,"P",{"data-svelte-h":!0}),T(F)!=="svelte-1oiyvq9"&&(F.textContent=Ye),oe=n(c),m(pe.$$.fragment,c),he=n(c),m(S.$$.fragment,c),_e=n(c),ae=f(c,"P",{"data-svelte-h":!0}),T(ae)!=="svelte-1esp1qh"&&(ae.textContent=Ze),Ce=n(c),D=f(c,"P",{"data-svelte-h":!0}),T(D)!=="svelte-1o65jdf"&&(D.innerHTML=He),me=n(c),m(ce.$$.fragment,c),$e=n(c),Y=f(c,"P",{"data-svelte-h":!0}),T(Y)!=="svelte-b4qshb"&&(Y.textContent=De),ge=n(c),m(q.$$.fragment,c),Fe=n(c),de=f(c,"P",{"data-svelte-h":!0}),T(de)!=="svelte-cl6zrf"&&(de.textContent=ue),xe=n(c),se=f(c,"P",{"data-svelte-h":!0}),T(se)!=="svelte-7lb1ec"&&(se.textContent=be)},m(c,g){t(c,i,g),t(c,p,g),d(j,c,g),t(c,I,g),t(c,b,g),t(c,x,g),t(c,z,g),t(c,C,g),t(c,G,g),t(c,ie,g),d(O,c,g),t(c,V,g),t(c,X,g),t(c,Je,g),d(N,c,g),t(c,A,g),t(c,Q,g),t(c,fe,g),d(E,c,g),t(c,H,g),d(L,c,g),t(c,W,g),t(c,re,g),t(c,B,g),t(c,le,g),t(c,_,g),d(Te,c,g),t(c,Me,g),t(c,te,g),t(c,we,g),t(c,F,g),t(c,oe,g),d(pe,c,g),t(c,he,g),d(S,c,g),t(c,_e,g),t(c,ae,g),t(c,Ce,g),t(c,D,g),t(c,me,g),d(ce,c,g),t(c,$e,g),t(c,Y,g),t(c,ge,g),d(q,c,g),t(c,Fe,g),t(c,de,g),t(c,xe,g),t(c,se,g),ye=!0},i(c){ye||(u(j.$$.fragment,c),u(O.$$.fragment,c),u(N.$$.fragment,c),u(E.$$.fragment,c),u(L.$$.fragment,c),u(Te.$$.fragment,c),u(pe.$$.fragment,c),u(S.$$.fragment,c),u(ce.$$.fragment,c),u(q.$$.fragment,c),ye=!0)},o(c){M(j.$$.fragment,c),M(O.$$.fragment,c),M(N.$$.fragment,c),M(E.$$.fragment,c),M(L.$$.fragment,c),M(Te.$$.fragment,c),M(pe.$$.fragment,c),M(S.$$.fragment,c),M(ce.$$.fragment,c),M(q.$$.fragment,c),ye=!1},d(c){c&&(l(i),l(p),l(I),l(b),l(x),l(z),l(C),l(G),l(ie),l(V),l(X),l(Je),l(A),l(Q),l(fe),l(H),l(W),l(re),l(B),l(le),l(_),l(Me),l(te),l(we),l(F),l(oe),l(he),l(_e),l(ae),l(Ce),l(D),l(me),l($e),l(Y),l(ge),l(Fe),l(de),l(xe),l(se)),y(j,c),y(O,c),y(N,c),y(E,c),y(L,c),y(Te,c),y(pe,c),y(S,c),y(ce,c),y(q,c)}}}function di(Z){let i,w="Înainte de a începe, să vedem ce fel de rezultate obținem de la modelul nostru fără niciun antrenament:",p,j,I,b,v,x,z="Odată făcut acest lucru, putem pregăti tot ce avem nevoie pentru a compila și antrena modelul nostru. Observați utilizarea <code>tf.keras.mixed_precision.set_global_policy(&quot;mixed_float16&quot;)</code> — aceasta îi va spune lui Keras să se antreneze folosind float16, ceea ce poate oferi o creștere semnificativă a vitezei pe GPU-urile care o acceptă (Nvidia 20xx/V100 sau mai noi).",k,C,G,R,ie='În continuare, definim un <code>PushToHubCallback</code> pentru a încărca modelul nostru în Hub în timpul antrenamentului, așa cum am văzut în <a href="(/course/chapter7/2)">secțiunea 2</a>, iar apoi pur și simplu facem fit modelului cu acel callback:',O,V,X,P,Je='Rețineți că puteți specifica numele repositoriului către care doriți să faceți push cu argumentul <code>hub_model_id</code> (în special, va trebui să utilizați acest argument pentru a face push către o organizație). De exemplu, atunci când am trimis modelul către organizația <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code></a>, am adăugat <code>hub_model_id=&quot;huggingface-course/marian-finetuned-kde4-en-to-fr&quot;</code> la <code>Seq2SeqTrainingArguments</code>. În mod implicit, repositoriul utilizat va fi în namespaceul vostru și denumit după output directory-ul pe care l-ați stabilit, deci aici va fi <code>&quot;sgugger/marian-finetuned-kde4-en-to-fr&quot;</code> (care este modelul la care am făcut legătura la începutul acestei secțiuni).',N,A,Q,K,fe="În cele din urmă, hai să vedem cum arată metricele noastre acum că antrenarea s-a încheiat:",E,H,L,W,re,ee,B="În acest moment, puteți utiliza widgetul de inferență de pe Model Hub pentru a testa modelul și pentru a-l partaja cu prietenii voștrii. Ați făcut fine-tune cu succes unui model pentru o sarcină de traducere - felicitări!",le;return j=new h({props:{code:"cHJpbnQoY29tcHV0ZV9tZXRyaWNzKCkp",highlighted:'<span class="hljs-built_in">print</span>(compute_metrics())',wrap:!1}}),b=new h({props:{code:"JTdCJ2JsZXUnJTNBJTIwMzMuMjY5ODM3MDE0NTQ3MzMlN0Q=",highlighted:'{&#x27;bleu&#x27;: <span class="hljs-number">33.26983701454733</span>}',wrap:!1}}),C=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFmcm9tJTIwdHJhbnNmb3JtZXJzLmtlcmFzX2NhbGxiYWNrcyUyMGltcG9ydCUyMFB1c2hUb0h1YkNhbGxiYWNrJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEElMjMlMjBOdW0lQzQlODNydWwlMjBldGFwZWxvciUyMGRlJTIwYW50cmVuYXJlJTIwZXN0ZSUyMG51bSVDNCU4M3J1bCUyMGRlJTIwc2FtcGxldXJpJTIwZGluJTIwZGF0YXNldCUyQyUyMCVDMyVBRW1wJUM0JTgzciVDOCU5Qml0JTIwbGElMjBkaW1lbnNpdW5lYSUyMGJhdGNodWx1aSUyQyUyMGFwb2klMjAlQzMlQUVubXVsJUM4JTlCaXQlMEElMjMlMjBjdSUyMG51bSVDNCU4M3J1bCUyMHRvdGFsJTIwZGUlMjBlcG9jaS4lMjBSZSVDOCU5QmluZSVDOCU5QmklMjBjJUM0JTgzJTIwZGF0YXNldHVsJTIwdGZfdHJhaW5fZGF0YXNldCUyMGRlJTIwYWljaSUyMGVzdGUlMjB1biUyMGRhdGFzZXQlMjB0Zi5kYXRhLkRhdGFzZXQlMjAlQzMlQUVuJTIwYmF0Y2h1cmklMkMlMEElMjMlMjBudSUyMGRhdGFzZXR1bCUyMG9yaWdpbmFsJTIwSHVnZ2luZyUyMEZhY2UlMkMlMjBkZWNpJTIwbGVuKCklMjBlc3RlJTIwZGVqYSUyMG51bV9zYW1wbGVzJTIwJTJGJTJGJTIwYmF0Y2hfc2l6ZS4lMEFudW1fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV90cmFpbl9zdGVwcyUyMCUzRCUyMGxlbih0Zl90cmFpbl9kYXRhc2V0KSUyMColMjBudW1fZXBvY2hzJTBBJTBBb3B0aW1pemVyJTJDJTIwc2NoZWR1bGUlMjAlM0QlMjBjcmVhdGVfb3B0aW1pemVyKCUwQSUyMCUyMCUyMCUyMGluaXRfbHIlM0Q1ZS01JTJDJTBBJTIwJTIwJTIwJTIwbnVtX3dhcm11cF9zdGVwcyUzRDAlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5fc3RlcHMlM0RudW1fdHJhaW5fc3RlcHMlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfZGVjYXlfcmF0ZSUzRDAuMDElMkMlMEEpJTBBbW9kZWwuY29tcGlsZShvcHRpbWl6ZXIlM0RvcHRpbWl6ZXIpJTBBJTBBJTIzJTIwQW50cmVuYXJlYSUyMCVDMyVBRW4lMjBmbG9hdDE2JTIwY3UlMjBwcmVjaXppZSUyMG1peHQlQzQlODMlMEF0Zi5rZXJhcy5taXhlZF9wcmVjaXNpb24uc2V0X2dsb2JhbF9wb2xpY3koJTIybWl4ZWRfZmxvYXQxNiUyMik=",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"># Numărul etapelor de antrenare este numărul de sampleuri din dataset, împărțit la dimensiunea batchului, apoi înmulțit</span>
<span class="hljs-comment"># cu numărul total de epoci. Rețineți că datasetul tf_train_dataset de aici este un dataset tf.data.Dataset în batchuri,</span>
<span class="hljs-comment"># nu datasetul original Hugging Face, deci len() este deja 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"># Antrenarea în float16 cu precizie mixtă</span>
tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">&quot;mixed_float16&quot;</span>)`,wrap:!1}}),V=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}}),A=new el({props:{$$slots:{default:[Ji]},$$scope:{ctx:Z}}}),H=new h({props:{code:"cHJpbnQoY29tcHV0ZV9tZXRyaWNzKCkp",highlighted:'<span class="hljs-built_in">print</span>(compute_metrics())',wrap:!1}}),W=new h({props:{code:"JTdCJ2JsZXUnJTNBJTIwNTcuMzM0MDY2MjcxNTQ1ODY1JTdE",highlighted:'{&#x27;bleu&#x27;: <span class="hljs-number">57.334066271545865</span>}',wrap:!1}}),{c(){i=J("p"),i.textContent=w,p=s(),o(j.$$.fragment),I=s(),o(b.$$.fragment),v=s(),x=J("p"),x.innerHTML=z,k=s(),o(C.$$.fragment),G=s(),R=J("p"),R.innerHTML=ie,O=s(),o(V.$$.fragment),X=s(),P=J("p"),P.innerHTML=Je,N=s(),o(A.$$.fragment),Q=s(),K=J("p"),K.textContent=fe,E=s(),o(H.$$.fragment),L=s(),o(W.$$.fragment),re=s(),ee=J("p"),ee.textContent=B},l(U){i=f(U,"P",{"data-svelte-h":!0}),T(i)!=="svelte-1oe45ls"&&(i.textContent=w),p=n(U),m(j.$$.fragment,U),I=n(U),m(b.$$.fragment,U),v=n(U),x=f(U,"P",{"data-svelte-h":!0}),T(x)!=="svelte-wdyfmo"&&(x.innerHTML=z),k=n(U),m(C.$$.fragment,U),G=n(U),R=f(U,"P",{"data-svelte-h":!0}),T(R)!=="svelte-e9l8fi"&&(R.innerHTML=ie),O=n(U),m(V.$$.fragment,U),X=n(U),P=f(U,"P",{"data-svelte-h":!0}),T(P)!=="svelte-ggwrlt"&&(P.innerHTML=Je),N=n(U),m(A.$$.fragment,U),Q=n(U),K=f(U,"P",{"data-svelte-h":!0}),T(K)!=="svelte-1cdzvwo"&&(K.textContent=fe),E=n(U),m(H.$$.fragment,U),L=n(U),m(W.$$.fragment,U),re=n(U),ee=f(U,"P",{"data-svelte-h":!0}),T(ee)!=="svelte-tufs4s"&&(ee.textContent=B)},m(U,_){t(U,i,_),t(U,p,_),d(j,U,_),t(U,I,_),d(b,U,_),t(U,v,_),t(U,x,_),t(U,k,_),d(C,U,_),t(U,G,_),t(U,R,_),t(U,O,_),d(V,U,_),t(U,X,_),t(U,P,_),t(U,N,_),d(A,U,_),t(U,Q,_),t(U,K,_),t(U,E,_),d(H,U,_),t(U,L,_),d(W,U,_),t(U,re,_),t(U,ee,_),le=!0},i(U){le||(u(j.$$.fragment,U),u(b.$$.fragment,U),u(C.$$.fragment,U),u(V.$$.fragment,U),u(A.$$.fragment,U),u(H.$$.fragment,U),u(W.$$.fragment,U),le=!0)},o(U){M(j.$$.fragment,U),M(b.$$.fragment,U),M(C.$$.fragment,U),M(V.$$.fragment,U),M(A.$$.fragment,U),M(H.$$.fragment,U),M(W.$$.fragment,U),le=!1},d(U){U&&(l(i),l(p),l(I),l(v),l(x),l(k),l(G),l(R),l(O),l(X),l(P),l(N),l(Q),l(K),l(E),l(L),l(re),l(ee)),y(j,U),y(b,U),y(C,U),y(V,U),y(A,U),y(H,U),y(W,U)}}}function yi(Z){let i,w="💡 Dacă output directory-ul pe care îl utilizați există deja, acesta trebuie să fie o clonă locală a repositoriului către care doriți să faceți push. În caz contrar, veți primi o eroare atunci când vă definiți <code>Seq2SeqTrainer</code> și va trebui să stabiliți un nume nou.";return{c(){i=J("p"),i.innerHTML=w},l(p){i=f(p,"P",{"data-svelte-h":!0}),T(i)!=="svelte-idr2kq"&&(i.innerHTML=w)},m(p,j){t(p,i,j)},p:Se,d(p){p&&l(i)}}}function Ji(Z){let i,w="💡 Dacă output directory-ul pe care îl utilizați există deja, acesta trebuie să fie o clonă locală a repositoriului către care doriți să faceți push. Dacă nu este, veți primi o eroare atunci când apelați <code>model.fit()</code> și va trebui să setați un nume nou.";return{c(){i=J("p"),i.innerHTML=w},l(p){i=f(p,"P",{"data-svelte-h":!0}),T(i)!=="svelte-17cnng"&&(i.innerHTML=w)},m(p,j){t(p,i,j)},p:Se,d(p){p&&l(i)}}}function An(Z){let i,w,p,j='Să aruncăm acum o privire la bucla de antrenare completă, astfel încât să puteți personaliza cu ușurință părțile de care aveți nevoie. Va arăta foarte asemănător cu ceea ce am făcut în <a href="/course/chapter7/2">secțiunea 2</a> și <a href="/course/chapter7/4">capitolul 3</a>.',I,b,v,x,z="Ați văzut toate acestea de câteva ori până acum, așa că vom trece prin cod destul de repede. Mai întâi vom construi <code>DataLoader</code>s din dataseturile noastre, după ce vom seta dataseturile în formatul <code>&quot;torch&quot;</code> astfel încât să obținem tensori PyTorch:",k,C,G,R,ie="În continuare, reinițializăm modelul, pentru a ne asigura că nu continuăm fine-tuningul de dinainte, ci pornim din nou de la modelul preantrenat:",O,V,X,P,Je="Pe urmă vom avea nevoie de un optimizator:",N,A,Q,K,fe="Odată ce avem toate aceste obiecte, le putem trimite la metoda <code>accelerator.prepare()</code>. Amintiți-vă că, dacă doriți să vă antrenați pe un TPU într-un notebook Colab, va trebui să mutați tot acest cod într-o funcție de antrenare, care nu ar trebui să execute nicio celulă care inițializează un <code>Accelerator</code>.",E,H,L,W,re="Acum că am trimis <code>train_dataloader</code> la <code>accelerator.prepare()</code>, putem utiliza lungimea acestuia pentru a calcula numărul de pași de antrenare. Amintiți-vă că trebuie să facem acest lucru întotdeauna după pregătirea data loaderului, deoarece metoda respectivă va modifica lungimea <code>DataLoader</code>. Utilizăm un program liniar clasic de la rata de învățare la 0:",ee,B,le,U,_="În cele din urmă, pentru a trimite modelul nostru către Hub, va trebui să creăm un obiect <code>Repository</code> într-un folder de lucru. În primul rând, conectați-vă la Hugging Face Hub, dacă nu sunteți deja conectat. Vom determina numele repositoriului pornind de la ID-ul modelului pe care dorim să îl atribuim modelului nostru (nu ezitați să înlocuiți <code>repo_name</code> cu propria alegere; acesta trebuie doar să conțină numele vostru de utilizator, ceea ce face funcția <code>get_full_repo_name()</code>):",Te,Me,te,ke,we,F,Ye="Apoi putem clona acel repositoriu într-un folder local. Dacă există deja, acest folder local ar trebui să fie o clonă a repositoriului cu care lucrăm:",oe,pe,he,S,_e="Acum putem încărca orice salvăm în <code>output_dir</code> prin apelarea metodei <code>repo.push_to_hub()</code>. Acest lucru ne va ajuta să încărcăm modelele intermediare la sfârșitul fiecărei epoci.",ae,Ze,Ce,D,He="Acum suntem pregătiți să scriem bucla de antrenare completă. Pentru a simplifica partea de evaluare, definim această funcție <code>postprocess()</code> care preia predicțiile și labelurile și le convertește în liste de stringuri pe care obiectul nostru <code>metric</code> le va aștepta:",me,ce,$e,Y,De='Bucla de antrenare seamănă foarte mult cu cele din <a href="/course/chapter7/2">secțiunea 2</a> și <a href="/course/chapter3">capitolul 3</a>, cu câteva diferențe în partea de evaluare - așa că hai să ne concentrăm pe asta!',ge,q,Fe="Primul lucru pe care îl putem remarca este că folosim metoda <code>generate()</code> pentru a calcula predicțiile, dar aceasta este o metodă a modelul nostru de bază, nu pe modelul wrapped 🤗 Accelerate creat în metoda <code>prepare()</code>. De aceea, mai întâi facem unwrap modelului, apoi apelăm această metodă.",de,ue,xe='Al doilea lucru este că, la fel ca în cazul <a href="/course/chapter7/2">token classification</a>, este posibil ca două procese să fi făcut padding inputurilor și labelurilor cu forme diferite, așa că folosim <code>accelerator.pad_across_processes()</code> pentru a face predicțiile și labelurile de aceeași formă înainte de a apela metoda <code>gather()</code>. Dacă nu facem acest lucru, evaluarea va da o eroare sau se va bloca pentru totdeauna.',se,be,ye,c,g,Ue,ll='Odată făcut acest lucru, ar trebui să aveți un model care are rezultate destul de asemănătoare cu cel antrenat cu <code>Seq2SeqTrainer</code>. Îl puteți verifica pe cel pe care l-am antrenat folosind acest cod la [<em>huggingface-course/marian-finetuned-kde4-en-to-fr-accelerate</em>] (<a href="https://huggingface.co/huggingface-course/marian-finetuned-kde4-en-to-fr-accelerate" rel="nofollow">https://huggingface.co/huggingface-course/marian-finetuned-kde4-en-to-fr-accelerate</a>). Și dacă doriți să testați orice modificări ale buclei de antrenare, le puteți implementa direct prin editarea codului prezentat mai sus!',Ge;return i=new ve({props:{title:"O buclă de antrenare personalizată",local:"a-custom-training-loop",headingTag:"h2"}}),b=new ve({props:{title:"Pregătirea tuturor lucrulilor pentru antrenare",local:"preparing-everything-for-training",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}}),V=new h({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXEyU2VxTE0uZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2NoZWNrcG9pbnQp",highlighted:"model = AutoModelForSeq2SeqLM.from_pretrained(model_checkpoint)",wrap:!1}}),A=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEFkYW1XJTBBJTBBb3B0aW1pemVyJTIwJTNEJTIwQWRhbVcobW9kZWwucGFyYW1ldGVycygpJTJDJTIwbHIlM0QyZS01KQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AdamW

optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">2e-5</span>)`,wrap:!1}}),H=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}}),B=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}}),Me=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}}),ke=new h({props:{code:"J3NndWdnZXIlMkZtYXJpYW4tZmluZXR1bmVkLWtkZTQtZW4tdG8tZnItYWNjZWxlcmF0ZSc=",highlighted:'<span class="hljs-string">&#x27;sgugger/marian-finetuned-kde4-en-to-fr-accelerate&#x27;</span>',wrap:!1}}),pe=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}}),Ze=new ve({props:{title:"Bucla de antrenare",local:"training-loop",headingTag:"h3"}}),ce=new h({props:{code:"ZGVmJTIwcG9zdHByb2Nlc3MocHJlZGljdGlvbnMlMkMlMjBsYWJlbHMpJTNBJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlMjAlM0QlMjBwcmVkaWN0aW9ucy5jcHUoKS5udW1weSgpJTBBJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwbGFiZWxzLmNwdSgpLm51bXB5KCklMEElMEElMjAlMjAlMjAlMjBkZWNvZGVkX3ByZWRzJTIwJTNEJTIwdG9rZW5pemVyLmJhdGNoX2RlY29kZShwcmVkaWN0aW9ucyUyQyUyMHNraXBfc3BlY2lhbF90b2tlbnMlM0RUcnVlKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFJlcGxhY2UlMjAtMTAwJTIwaW4lMjB0aGUlMjBsYWJlbHMlMjBhcyUyMHdlJTIwY2FuJ3QlMjBkZWNvZGUlMjB0aGVtLiUwQSUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMG5wLndoZXJlKGxhYmVscyUyMCElM0QlMjAtMTAwJTJDJTIwbGFiZWxzJTJDJTIwdG9rZW5pemVyLnBhZF90b2tlbl9pZCklMEElMjAlMjAlMjAlMjBkZWNvZGVkX2xhYmVscyUyMCUzRCUyMHRva2VuaXplci5iYXRjaF9kZWNvZGUobGFiZWxzJTJDJTIwc2tpcF9zcGVjaWFsX3Rva2VucyUzRFRydWUpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwU29tZSUyMHNpbXBsZSUyMHBvc3QtcHJvY2Vzc2luZyUwQSUyMCUyMCUyMCUyMGRlY29kZWRfcHJlZHMlMjAlM0QlMjAlNUJwcmVkLnN0cmlwKCklMjBmb3IlMjBwcmVkJTIwaW4lMjBkZWNvZGVkX3ByZWRzJTVEJTBBJTIwJTIwJTIwJTIwZGVjb2RlZF9sYWJlbHMlMjAlM0QlMjAlNUIlNUJsYWJlbC5zdHJpcCgpJTVEJTIwZm9yJTIwbGFiZWwlMjBpbiUyMGRlY29kZWRfbGFiZWxzJTVEJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwZGVjb2RlZF9wcmVkcyUyQyUyMGRlY29kZWRfbGFiZWxz",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"># Replace -100 in the labels as we can&#x27;t decode them.</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"># Some simple post-processing</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}}),be=new h({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEFpbXBvcnQlMjB0b3JjaCUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFmb3IlMjBlcG9jaCUyMGluJTIwcmFuZ2UobnVtX3RyYWluX2Vwb2NocyklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBUcmFpbmluZyUwQSUyMCUyMCUyMCUyMG1vZGVsLnRyYWluKCklMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyMGluJTIwdHJhaW5fZGF0YWxvYWRlciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBvdXRwdXRzLmxvc3MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY2NlbGVyYXRvci5iYWNrd2FyZChsb3NzKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBscl9zY2hlZHVsZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnplcm9fZ3JhZCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvZ3Jlc3NfYmFyLnVwZGF0ZSgxKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEV2YWx1YXRpb24lMEElMjAlMjAlMjAlMjBtb2RlbC5ldmFsKCklMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyMGluJTIwdHFkbShldmFsX2RhdGFsb2FkZXIpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2l0aCUyMHRvcmNoLm5vX2dyYWQoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGdlbmVyYXRlZF90b2tlbnMlMjAlM0QlMjBhY2NlbGVyYXRvci51bndyYXBfbW9kZWwobW9kZWwpLmdlbmVyYXRlKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJhdGNoJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXR0ZW50aW9uX21hc2slM0RiYXRjaCU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWF4X2xlbmd0aCUzRDEyOCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBiYXRjaCU1QiUyMmxhYmVscyUyMiU1RCUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME5lY2Vzc2FyeSUyMHRvJTIwcGFkJTIwcHJlZGljdGlvbnMlMjBhbmQlMjBsYWJlbHMlMjBmb3IlMjBiZWluZyUyMGdhdGhlcmVkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZ2VuZXJhdGVkX3Rva2VucyUyMCUzRCUyMGFjY2VsZXJhdG9yLnBhZF9hY3Jvc3NfcHJvY2Vzc2VzKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGdlbmVyYXRlZF90b2tlbnMlMkMlMjBkaW0lM0QxJTJDJTIwcGFkX2luZGV4JTNEdG9rZW5pemVyLnBhZF90b2tlbl9pZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBhY2NlbGVyYXRvci5wYWRfYWNyb3NzX3Byb2Nlc3NlcyhsYWJlbHMlMkMlMjBkaW0lM0QxJTJDJTIwcGFkX2luZGV4JTNELTEwMCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVkaWN0aW9uc19nYXRoZXJlZCUyMCUzRCUyMGFjY2VsZXJhdG9yLmdhdGhlcihnZW5lcmF0ZWRfdG9rZW5zKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVsc19nYXRoZXJlZCUyMCUzRCUyMGFjY2VsZXJhdG9yLmdhdGhlcihsYWJlbHMpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGVjb2RlZF9wcmVkcyUyQyUyMGRlY29kZWRfbGFiZWxzJTIwJTNEJTIwcG9zdHByb2Nlc3MocHJlZGljdGlvbnNfZ2F0aGVyZWQlMkMlMjBsYWJlbHNfZ2F0aGVyZWQpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWV0cmljLmFkZF9iYXRjaChwcmVkaWN0aW9ucyUzRGRlY29kZWRfcHJlZHMlMkMlMjByZWZlcmVuY2VzJTNEZGVjb2RlZF9sYWJlbHMpJTBBJTBBJTIwJTIwJTIwJTIwcmVzdWx0cyUyMCUzRCUyMG1ldHJpYy5jb21wdXRlKCklMEElMjAlMjAlMjAlMjBwcmludChmJTIyZXBvY2glMjAlN0JlcG9jaCU3RCUyQyUyMEJMRVUlMjBzY29yZSUzQSUyMCU3QnJlc3VsdHMlNUInc2NvcmUnJTVEJTNBLjJmJTdEJTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMFNhdmUlMjBhbmQlMjB1cGxvYWQlMEElMjAlMjAlMjAlMjBhY2NlbGVyYXRvci53YWl0X2Zvcl9ldmVyeW9uZSgpJTBBJTIwJTIwJTIwJTIwdW53cmFwcGVkX21vZGVsJTIwJTNEJTIwYWNjZWxlcmF0b3IudW53cmFwX21vZGVsKG1vZGVsKSUwQSUyMCUyMCUyMCUyMHVud3JhcHBlZF9tb2RlbC5zYXZlX3ByZXRyYWluZWQob3V0cHV0X2RpciUyQyUyMHNhdmVfZnVuY3Rpb24lM0RhY2NlbGVyYXRvci5zYXZlKSUwQSUyMCUyMCUyMCUyMGlmJTIwYWNjZWxlcmF0b3IuaXNfbWFpbl9wcm9jZXNzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdG9rZW5pemVyLnNhdmVfcHJldHJhaW5lZChvdXRwdXRfZGlyKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJlcG8ucHVzaF90b19odWIoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29tbWl0X21lc3NhZ2UlM0RmJTIyVHJhaW5pbmclMjBpbiUyMHByb2dyZXNzJTIwZXBvY2glMjAlN0JlcG9jaCU3RCUyMiUyQyUyMGJsb2NraW5nJTNERmFsc2UlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAp",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"># Training</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"># Necessary to pad predictions and labels for being gathered</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"># Save and upload</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}}),c=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(){o(i.$$.fragment),w=s(),p=J("p"),p.innerHTML=j,I=s(),o(b.$$.fragment),v=s(),x=J("p"),x.innerHTML=z,k=s(),o(C.$$.fragment),G=s(),R=J("p"),R.textContent=ie,O=s(),o(V.$$.fragment),X=s(),P=J("p"),P.textContent=Je,N=s(),o(A.$$.fragment),Q=s(),K=J("p"),K.innerHTML=fe,E=s(),o(H.$$.fragment),L=s(),W=J("p"),W.innerHTML=re,ee=s(),o(B.$$.fragment),le=s(),U=J("p"),U.innerHTML=_,Te=s(),o(Me.$$.fragment),te=s(),o(ke.$$.fragment),we=s(),F=J("p"),F.textContent=Ye,oe=s(),o(pe.$$.fragment),he=s(),S=J("p"),S.innerHTML=_e,ae=s(),o(Ze.$$.fragment),Ce=s(),D=J("p"),D.innerHTML=He,me=s(),o(ce.$$.fragment),$e=s(),Y=J("p"),Y.innerHTML=De,ge=s(),q=J("p"),q.innerHTML=Fe,de=s(),ue=J("p"),ue.innerHTML=xe,se=s(),o(be.$$.fragment),ye=s(),o(c.$$.fragment),g=s(),Ue=J("p"),Ue.innerHTML=ll},l(r){m(i.$$.fragment,r),w=n(r),p=f(r,"P",{"data-svelte-h":!0}),T(p)!=="svelte-1c22dxk"&&(p.innerHTML=j),I=n(r),m(b.$$.fragment,r),v=n(r),x=f(r,"P",{"data-svelte-h":!0}),T(x)!=="svelte-fm484s"&&(x.innerHTML=z),k=n(r),m(C.$$.fragment,r),G=n(r),R=f(r,"P",{"data-svelte-h":!0}),T(R)!=="svelte-imm40q"&&(R.textContent=ie),O=n(r),m(V.$$.fragment,r),X=n(r),P=f(r,"P",{"data-svelte-h":!0}),T(P)!=="svelte-fk2ni7"&&(P.textContent=Je),N=n(r),m(A.$$.fragment,r),Q=n(r),K=f(r,"P",{"data-svelte-h":!0}),T(K)!=="svelte-7w4a2o"&&(K.innerHTML=fe),E=n(r),m(H.$$.fragment,r),L=n(r),W=f(r,"P",{"data-svelte-h":!0}),T(W)!=="svelte-1bfuxws"&&(W.innerHTML=re),ee=n(r),m(B.$$.fragment,r),le=n(r),U=f(r,"P",{"data-svelte-h":!0}),T(U)!=="svelte-1skur9m"&&(U.innerHTML=_),Te=n(r),m(Me.$$.fragment,r),te=n(r),m(ke.$$.fragment,r),we=n(r),F=f(r,"P",{"data-svelte-h":!0}),T(F)!=="svelte-1lpxctd"&&(F.textContent=Ye),oe=n(r),m(pe.$$.fragment,r),he=n(r),S=f(r,"P",{"data-svelte-h":!0}),T(S)!=="svelte-1wk5dqw"&&(S.innerHTML=_e),ae=n(r),m(Ze.$$.fragment,r),Ce=n(r),D=f(r,"P",{"data-svelte-h":!0}),T(D)!=="svelte-a9muny"&&(D.innerHTML=He),me=n(r),m(ce.$$.fragment,r),$e=n(r),Y=f(r,"P",{"data-svelte-h":!0}),T(Y)!=="svelte-tr9trv"&&(Y.innerHTML=De),ge=n(r),q=f(r,"P",{"data-svelte-h":!0}),T(q)!=="svelte-6o2415"&&(q.innerHTML=Fe),de=n(r),ue=f(r,"P",{"data-svelte-h":!0}),T(ue)!=="svelte-174zzk1"&&(ue.innerHTML=xe),se=n(r),m(be.$$.fragment,r),ye=n(r),m(c.$$.fragment,r),g=n(r),Ue=f(r,"P",{"data-svelte-h":!0}),T(Ue)!=="svelte-2bo8rw"&&(Ue.innerHTML=ll)},m(r,$){d(i,r,$),t(r,w,$),t(r,p,$),t(r,I,$),d(b,r,$),t(r,v,$),t(r,x,$),t(r,k,$),d(C,r,$),t(r,G,$),t(r,R,$),t(r,O,$),d(V,r,$),t(r,X,$),t(r,P,$),t(r,N,$),d(A,r,$),t(r,Q,$),t(r,K,$),t(r,E,$),d(H,r,$),t(r,L,$),t(r,W,$),t(r,ee,$),d(B,r,$),t(r,le,$),t(r,U,$),t(r,Te,$),d(Me,r,$),t(r,te,$),d(ke,r,$),t(r,we,$),t(r,F,$),t(r,oe,$),d(pe,r,$),t(r,he,$),t(r,S,$),t(r,ae,$),d(Ze,r,$),t(r,Ce,$),t(r,D,$),t(r,me,$),d(ce,r,$),t(r,$e,$),t(r,Y,$),t(r,ge,$),t(r,q,$),t(r,de,$),t(r,ue,$),t(r,se,$),d(be,r,$),t(r,ye,$),d(c,r,$),t(r,g,$),t(r,Ue,$),Ge=!0},i(r){Ge||(u(i.$$.fragment,r),u(b.$$.fragment,r),u(C.$$.fragment,r),u(V.$$.fragment,r),u(A.$$.fragment,r),u(H.$$.fragment,r),u(B.$$.fragment,r),u(Me.$$.fragment,r),u(ke.$$.fragment,r),u(pe.$$.fragment,r),u(Ze.$$.fragment,r),u(ce.$$.fragment,r),u(be.$$.fragment,r),u(c.$$.fragment,r),Ge=!0)},o(r){M(i.$$.fragment,r),M(b.$$.fragment,r),M(C.$$.fragment,r),M(V.$$.fragment,r),M(A.$$.fragment,r),M(H.$$.fragment,r),M(B.$$.fragment,r),M(Me.$$.fragment,r),M(ke.$$.fragment,r),M(pe.$$.fragment,r),M(Ze.$$.fragment,r),M(ce.$$.fragment,r),M(be.$$.fragment,r),M(c.$$.fragment,r),Ge=!1},d(r){r&&(l(w),l(p),l(I),l(v),l(x),l(k),l(G),l(R),l(O),l(X),l(P),l(N),l(Q),l(K),l(E),l(L),l(W),l(ee),l(le),l(U),l(Te),l(te),l(we),l(F),l(oe),l(he),l(S),l(ae),l(Ce),l(D),l(me),l($e),l(Y),l(ge),l(q),l(de),l(ue),l(se),l(ye),l(g),l(Ue)),y(i,r),y(b,r),y(C,r),y(V,r),y(A,r),y(H,r),y(B,r),y(Me,r),y(ke,r),y(pe,r),y(Ze,r),y(ce,r),y(be,r),y(c,r)}}}function fi(Z){let i,w="✏️ <strong>E rândul tău!</strong> Care este rezultatul modelului pentru sampleul cuvântul “email” pe care l-ai identificat mai devreme?";return{c(){i=J("p"),i.innerHTML=w},l(p){i=f(p,"P",{"data-svelte-h":!0}),T(i)!=="svelte-1vcidfc"&&(i.innerHTML=w)},m(p,j){t(p,i,j)},p:Se,d(p){p&&l(i)}}}function Ti(Z){let i,w,p,j,I,b,v,x,z,k,C,G,R,ie,O='Să trecem acum la traducere. Aceasta este o altă <a href="/course/chapter1/7">sarcină de sequence-to-sequence</a>, ceea ce înseamnă că este o problemă care poate fi formulată ca trecerea de la o secvență la alta. În acest sens, problema este destul de apropiată de <a href="/course/chapter7/6">sumarizare</a> și ați putea adapta ceea ce vom vedea aici la alte probleme de la sequence-to-sequence, cum ar fi:',V,X,P="<li><strong>Style transfer</strong>: Crearea unui model care <em>traduce</em> texte scrise într-un anumit stil în altul (de exemplu, din formal în casual sau din engleza Shakespeariană în engleza modernă)</li> <li><strong>Generative question answering</strong>: Crearea unui model care generează răspunsuri la întrebări, fiind dat un context</li>",Je,N,A,Q,K="Dacă aveți un corpus suficient de mare de texte în două (sau mai multe) limbi, puteți antrena un nou model de traducere de la zero, așa cum vom face în secțiunea despre [causal language modeling] (/course/chapter7/6). Cu toate acestea, va fi mai rapid să faceți fine-tune unui model de traducere existent, fie că este vorba de un model multilingv precum mT5 sau mBART, pe care doriți să îi faceți fine-tune pentru o anumită pereche de limbi, sau chiar un model specializat pentru traducerea dintr-o limbă în alta, pe care doriți să îl perfecționați pentru corpusul vostru specific.",fe,E,H='În această secțiune, vom pune face fine-tune unui model Marian preantrenat pentru a traduce din engleză în franceză (deoarece mulți dintre angajații Hugging Face vorbesc ambele limbi) pe <a href="https://huggingface.co/datasets/kde4" rel="nofollow">datasetul KDE4</a>, care este un set de fișiere localizate pentru <a href="https://apps.kde.org/" rel="nofollow">KDE apps</a>. Modelul pe care îl vom utiliza a fost preantrenat pe un corpus mare de texte în franceză și engleză preluate din <a href="https://opus.nlpl.eu/" rel="nofollow">datasetul Opus</a>, care conține de fapt datasetul KDE4. Dar chiar dacă modelul preantrenat pe care îl folosim a văzut aceste date în timpul preantrenării sale, vom vedea că putem obține o versiune mai bună a acestuia după fine-tuning.',L,W,re="Odată ce am terminat, vom avea un model capabil să facă predicții ca acesta:",ee,B,le,U,_,Te='<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 pentru răspunderea la întrebări."/> <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 răspunderea la întrebări."/>',Me,te,ke='Ca și în secțiunile anterioare, puteți găsi modelul pe care îl vom antrena și încărca în Hub utilizând codul de mai jos și puteți verifica predicțiile acestuia <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">aici</a>.',we,F,Ye,oe,pe='Pentru a face fine-tune sau a antrena un model de traducere de la zero, vom avea nevoie de un dataset adecvat pentru această sarcină. După cum am menționat anterior, vom utiliza <a href="https://huggingface.co/datasets/kde4" rel="nofollow">datasetul KDE4</a> în această secțiune, dar puteți adapta codul pentru a utiliza propriile date destul de ușor, atâta timp cât aveți perechi de propoziții în cele două limbi din și în care doriți să traduceți. Consultați <a href="/course/chapter5">Capitolul 5</a> dacă aveți nevoie de o reamintire a modului de încărcare a datelor personalizate într-un <code>Dataset</code>.',he,S,_e,ae,Ze="Ca de obicei, descărcăm datasetul nostru folosind funcția <code>load_dataset()</code>:",Ce,D,He,me,ce='Dacă doriți să lucrați cu o pereche de limbi diferită, le puteți specifica prin codurile lor. Un total de 92 de limbi sunt disponibile pentru acest dataset; le puteți vedea pe toate prin extinderea labelurilor de limbă pe <a href="https://huggingface.co/datasets/kde4" rel="nofollow">dataset cardul acesteia</a>.',$e,Y,De,ge,q,Fe="Să aruncăm o privire la dataset:",de,ue,xe,se,be,ye,c='Avem 210 173 de perechi de propoziții, dar într-o singură împărțire, deci va trebui să ne creăm propriul set de validare. Așa cum am văzut în <a href="/course/chapter5">Capitolul 5</a>, un <code>Dataset</code> are o metodă <code>train_test_split()</code> care ne poate ajuta. Vom furniza un seed pentru reproductibilitate:',g,Ue,ll,Ge,r,$,Rs="Putem redenumi cheia <code>&quot;test&quot;</code> în <code>&quot;validation&quot;</code> astfel:",St,tl,Dt,al,Vs="Acum să aruncăm o privire la un element al datasetului:",qt,sl,Lt,nl,Pt,il,Xs="Obținem un dicționar cu două propoziții în perechea de limbi solicitate. O particularitate a acestui dataset plin de termeni tehnici din domeniul informaticii este că toate sunt traduse integral în franceză. Cu toate acestea, inginerii francezi lasă majoritatea cuvintelor specifice informaticii în engleză atunci când vorbesc. Aici, de exemplu, cuvântul “threads” ar putea foarte bine să apară într-o propoziție în limba franceză, în special într-o conversație tehnică; dar în acest dataset a fost tradus în “fils de discussion”. Modelul preantrenat pe care îl folosim, care a fost preantrenat pe un corpus mai mare de propoziții în franceză și engleză, alege opțiunea mai ușoară de a lăsa cuvântul așa cum este:",Kt,rl,Ot,pl,ea,cl,Ns=`Un alt exemplu al acestui comportament poate fi văzut cu cuvântul “plugin”, care nu este oficial un cuvânt francez, dar pe care majoritatea vorbitorilor nativi îl vor înțelege și nu se vor obosi să îl traducă.
În datasetul KDE4, acest cuvânt a fost tradus în franceză în termenul puțin mai oficial “module d’extension”:`,la,ul,ta,Ml,aa,ol,As="Modelul nostru preantrenat, cu toate acestea, rămâne la cuvântul englez compact și familiar:",sa,ml,na,dl,ia,yl,Qs="Va fi interesant de văzut dacă modelul nostru fine-tuned reține aceste particularități ale datasetului(spoiler alert: va reține).",ra,Jl,pa,qe,ca,fl,ua,Tl,Ma,bl,Es='Ar trebui să știți deja cum stă treaba: toate textele trebuie convertite în seturi de ID-uri token, astfel încât modelul să le poată înțelege. Pentru această sarcină, va trebui să tokenizăm atât inputurile, cât și targeturile. Prima noastră sarcină este să creăm obiectul <code>tokenizer</code>. După cum am menționat mai devreme, vom utiliza un model Marian preantrenat din engleză în franceză. Dacă încercați acest cod cu o altă pereche de limbi, asigurați-vă că adaptați checkpointul modelului. Organizația <a href="https://huggingface.co/Helsinki-NLP" rel="nofollow">Helsinki-NLP</a> oferă mai mult de o mie de modele în mai multe limbi.',oa,Ul,ma,jl,Ys='De asemenea, puteți înlocui <code>model_checkpoint</code> cu orice alt model preferat din <a href="https://huggingface.co/models" rel="nofollow">Hub</a> sau cu un folder local în care ați salvat un model preantrenat și un tokenizer.',da,Le,ya,wl,Hs="Pregătirea datelor noastre este destul de simplă. Trebuie să rețineți un singur lucru; trebuie să vă asigurați că tokenizerul procesează targeturile în limba de ieșire (aici, franceză). Puteți face acest lucru trecând targeturile la argumentul <code>text_targets</code> al metodei <code>__call__</code> a tokenizerului.",Ja,hl,Fs="Pentru a vedea cum funcționează acest lucru, să procesăm un sample din fiecare limbă din setul de antrenare:",fa,Cl,Ta,$l,ba,gl,Ss="După cum putem vedea, rezultatul conține ID-urile de input asociate cu propoziția în limba engleză, în timp ce ID-urile asociate cu cea în limba franceză sunt stocate în câmpul <code>labels</code>. Dacă uitați să indicați că tokenizați labelurile, acestea vor fi tokenizate de către tokenizerul de input, ceea ce în cazul unui model Marian nu va merge deloc bine:",Ua,Il,ja,kl,wa,Zl,Ds="După cum se poate observa, utilizarea tokenizerului englez pentru preprocesarea unei propoziții franceze are ca rezultat mult mai mulți tokeni, deoarece tokenizerul nu cunoaște niciun cuvânt francez (cu excepția celor care apar și în limba engleză, precum “discussion”).",ha,vl,qs="Deoarece <code>inputs</code> este un dicționar cu cheile noastre obișnuite (ID-uri de input, attention mask etc.), ultimul pas este să definim funcția de preprocesare pe care o vom aplica dataseturilor:",Ca,_l,$a,xl,Ls="Rețineți că am stabilit aceeași lungime maximă pentru inputurile și outputurile noastre. Deoarece textele cu care avem de-a face par destul de scurte, vom folosi 128.",ga,Pe,Ia,Ke,ka,Gl,Ps="Acum putem aplica această preprocesare dintr-o singură dată pe toate diviziunile datasetului nostru:",Za,zl,va,Bl,Ks="Acum că datele au fost preprocesate, suntem pregătiți să facem fine-tune modelul nostru preantrenat!",_a,ze,Be,Xt,Wl,Os="Rețineți că de data aceasta folosim un model care a fost antrenat pe o sarcină de traducere și care poate fi utilizat deja, astfel încât nu există niciun avertisment cu privire la weighturile lipsă sau la cele nou inițializate.",xa,Rl,Ga,Vl,en='Vom avea nevoie de un data collator care să se ocupe de paddingul pentru batching-ul dinamic. Nu putem folosi un <code>DataCollatorWithPadding</code> ca în <a href="/course/chapter3">Capitolul 3</a> în acest caz, pentru că acesta doar face padding inputurilor (input Is, attention mask și token type IDs). Labelurile noastre ar trebui, de asemenea, să fie padded la lungimea maximă întâlnită în labeluri. Și, așa cum am menționat anterior, valoarea de padding utilizată pentru a face padding labelurilor ar trebui să fie <code>-100</code> și nu padding tokenul tokenizerului, pentru a ne asigura că aceste valori de padding sunt ignorate în calculul pierderilor.',za,Xl,ln='Toate acestea sunt realizate de un <a href="https://huggingface.co/transformers/main_classes/data_collator.html#datacollatorforseq2seq" rel="nofollow"><code>DataCollatorForSeq2Seq</code></a>. Ca și <code>DataCollatorWithPadding</code>, acesta preia <code>tokenizer</code> utilizat pentru preprocesarea inputurilor, dar preia și <code>modelul</code>. Acest lucru se datorează faptului că acest data collator va fi, de asemenea, responsabil de pregătirea ID-urilor de input ale decoderului, care sunt versiuni schimbate ale labelurilor cu un token special la început. Deoarece această schimbare se face ușor diferit pentru diferite arhitecturi, <code>DataCollatorForSeq2Seq</code> trebuie să cunoască obiectul <code>model</code>:',Ba,We,Re,Nt,Nl,tn="Pentru a testa acest lucru pe câteva sampleuri, îl apelăm doar pe o listă de sampleuri din setul nostru de antrenare tokenizat:",Wa,Al,Ra,Ql,Va,El,an="Putem verifica dacă labelurile noastre au fost padded la lungimea maximă a batchului, folosind <code>-100</code>:",Xa,Yl,Na,Hl,Aa,Fl,sn="De asemenea, putem arunca o privire la ID-urile de input ale decoderului, pentru a vedea că acestea sunt versiuni schimbate ale labelurilor:",Qa,Sl,Ea,Dl,Ya,ql,nn="Iată labelurile pentru primul și al doilea element din datasetul nostru:",Ha,Ll,Fa,Pl,Sa,Ve,Xe,At,Kl,Da,Ol,qa,Qt,et,rn='Metricele tradiționale utilizate pentru traducere sunt <a href="https://en.wikipedia.org/wiki/BLEU" rel="nofollow">scorul BLEU</a>, introdus în <a href="https://aclanthology.org/P02-1040.pdf" rel="nofollow">un articol din 2002</a> de Kishore Papineni et al. Scorul BLEU evaluează cât de apropiate sunt traducerile de labelurile lor. Acesta nu măsoară inteligibilitatea sau corectitudinea gramaticală a rezultatelor generate de model, ci utilizează reguli statistice pentru a se asigura că toate cuvintele din rezultatele generate apar și în targets. În plus, există reguli care penalizează repetițiile acelorași cuvinte dacă acestea nu sunt repetate și în targets(pentru a evita ca modelul să producă propoziții de tipul <code>&quot;the the the the the the&quot;</code>) și să producă propoziții care sunt mai scurte decât cele din targets(pentru a evita ca modelul să producă propoziții de tipul <code>&quot;the&quot;</code>).',La,lt,pn='Un punct slab al BLEU este că se așteaptă ca textul să fie deja tokenizat, ceea ce face dificilă compararea scorurilor între modele care utilizează tokenizere diferite. În schimb, cea mai frecvent utilizată măsură pentru evaluarea comparativă a modelelor de traducere este <a href="https://github.com/mjpost/sacrebleu" rel="nofollow">SacreBLEU</a>, care abordează acest punct slab (și altele) prin standardizarea etapei de tokenizare. Pentru a utiliza această metrică, trebuie mai întâi să instalăm biblioteca SacreBLEU:',Pa,tt,Ka,at,cn='Îl putem încărca apoi prin <code>evaluate.load()</code> așa cum am făcut în <a href="/course/chapter3">Capitolul 3</a>:',Oa,st,es,nt,un="Această metrică va lua texte ca inputuri și targeturi. Este conceput pentru a lua mai multe obiective acceptabile, deoarece există adesea mai multe traduceri acceptabile ale aceleiași propoziții - datasetul pe care îl folosim oferă doar una, dar nu este neobișnuit în NLP să găsim dataseturi care oferă mai multe propoziții ca labeluri. Deci, predicțiile ar trebui să fie o listă de propoziții, dar referințele ar trebui să fie o listă de liste de propoziții.",ls,it,Mn="Hai să încercăm acest exemplu:",ts,rt,as,pt,ss,ct,on='Se obține un scor BLEU de 46,75, ceea ce este destul de bine - ca referință, modelul original Transformer din lucrarea <a href="https://arxiv.org/pdf/1706.03762.pdf" rel="nofollow">“Attention Is All You Need”</a> a obținut un scor BLEU de 41,8 la o sarcină similară de traducere între engleză și franceză! (Pentru mai multe informații despre parametrii individuali, precum <code>counts</code> și <code>bp</code>, consultați <a href="https://github.com/mjpost/sacrebleu/blob/078c440168c6adc89ba75fe6d63f0d922d42bcfe/sacrebleu/metrics/bleu.py#L74" rel="nofollow">repositoriul SacreBLEU</a>.) Pe de altă parte, dacă încercăm cu cele două tipuri de predicții proaste (multe repetări sau prea scurte) care rezultă adesea din modelele de traducere, vom obține scoruri BLEU destul de proaste:',ns,ut,is,Mt,rs,ot,ps,mt,cs,dt,mn="Scorul poate varia de la 0 la 100, iar mai mare înseamnă un scor mai bun.",us,Ne,Ae,Et,yt,dn="Acum că am făcut acest lucru, suntem gata să facem fine-tune modelului!",Ms,Jt,os,ft,yn="Primul pas pe care trebuie să îl faceți este să vă conectați la Hugging Face, astfel încât să vă puteți încărca rezultatele în Model Hub. Există o funcție convenabilă care vă ajuta cu acest lucru într-un notebook:",ms,Tt,ds,bt,Jn="Aceasta va afișa un widget în care puteți introduce datele voastre de autentificare Hugging Face.",ys,Ut,fn="Dacă nu lucrați într-un notebook, tastați următoarea linie în terminal:",Js,jt,fs,Qe,Ee,Yt,Ht,wt,Ts,ht,Tn="V-am arătat deja cum puteți utiliza modelul pe căruia i-am aplicat fine-tune pe Model Hub cu widgetul de inferență. Pentru a-l utiliza la nivel local într-un <code>pipeline</code>, trebuie doar să specificăm identificatorul de model corespunzător:",bs,Ct,Us,$t,js,gt,bn="Așa cum era de așteptat, modelul nostru preantrenat și-a adaptat cunoștințele la corpusul pe care i-am făcut fine-tune și, în loc să lase cuvântul englezesc “threads”, acum îl traduce în versiunea oficială franceză. Același lucru este valabil și pentru “plugin”:",ws,It,hs,kt,Cs,Zt,Un="Un alt exemplu excelent de adaptare a domeniului!",$s,Oe,gs,vt,Is,Ft,ks;I=new Pn({props:{fw:Z[0]}}),v=new qn({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),z=new ve({props:{title:"Traducere",local:"translation",headingTag:"h1"}});const jn=[On,Kn],_t=[];function wn(e,a){return e[0]==="pt"?0:1}C=wn(Z),G=_t[C]=jn[C](Z),N=new Zs({props:{id:"1JvfrvZgi6c"}}),F=new ve({props:{title:"Pregătirea datelor",local:"preparing-the-data",headingTag:"h2"}}),S=new ve({props:{title:"Datasetul KDE4",local:"the-kde4-dataset",headingTag:"h3"}}),D=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}}),se=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}}),Ue=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}}),Ge=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}}),tl=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}}),sl=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}}),nl=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}}),rl=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}}),pl=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}}),ul=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}}),Ml=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}}),ml=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}}),dl=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}}),Jl=new Zs({props:{id:"0Oxphw4Q9fo"}}),qe=new el({props:{$$slots:{default:[ei]},$$scope:{ctx:Z}}}),fl=new ve({props:{title:"Procesarea datelor",local:"processing-the-data",headingTag:"h3"}}),Tl=new Zs({props:{id:"XAR8jnZZuUs"}}),Ul=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIySGVsc2lua2ktTkxQJTJGb3B1cy1tdC1lbi1mciUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2NoZWNrcG9pbnQlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKQ==",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;pt&quot;</span>)`,wrap:!1}}),Le=new el({props:{$$slots:{default:[li]},$$scope:{ctx:Z}}}),Cl=new h({props:{code:"ZW5fc2VudGVuY2UlMjAlM0QlMjBzcGxpdF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMSU1RCU1QiUyMnRyYW5zbGF0aW9uJTIyJTVEJTVCJTIyZW4lMjIlNUQlMEFmcl9zZW50ZW5jZSUyMCUzRCUyMHNwbGl0X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIxJTVEJTVCJTIydHJhbnNsYXRpb24lMjIlNUQlNUIlMjJmciUyMiU1RCUwQSUwQWlucHV0cyUyMCUzRCUyMHRva2VuaXplcihlbl9zZW50ZW5jZSUyQyUyMHRleHRfdGFyZ2V0JTNEZnJfc2VudGVuY2UpJTBBaW5wdXRz",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, text_target=fr_sentence)
inputs`,wrap:!1}}),$l=new h({props:{code:"JTdCJ2lucHV0X2lkcyclM0ElMjAlNUI0NzU5MSUyQyUyMDEyJTJDJTIwOTg0MiUyQyUyMDE5NjM0JTJDJTIwOSUyQyUyMDAlNUQlMkMlMjAnYXR0ZW50aW9uX21hc2snJTNBJTIwJTVCMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVEJTJDJTIwJ2xhYmVscyclM0ElMjAlNUI1NzclMkMlMjA1ODkxJTJDJTIwMiUyQyUyMDMxODQlMkMlMjAxNiUyQyUyMDI1NDIlMkMlMjA1JTJDJTIwMTcxMCUyQyUyMDAlNUQlN0Q=",highlighted:'{<span class="hljs-string">&#x27;input_ids&#x27;</span>: [<span class="hljs-number">47591</span>, <span class="hljs-number">12</span>, <span class="hljs-number">9842</span>, <span class="hljs-number">19634</span>, <span class="hljs-number">9</span>, <span class="hljs-number">0</span>], <span class="hljs-string">&#x27;attention_mask&#x27;</span>: [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>], <span class="hljs-string">&#x27;labels&#x27;</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>]}',wrap:!1}}),Il=new h({props:{code:"d3JvbmdfdGFyZ2V0cyUyMCUzRCUyMHRva2VuaXplcihmcl9zZW50ZW5jZSklMEFwcmludCh0b2tlbml6ZXIuY29udmVydF9pZHNfdG9fdG9rZW5zKHdyb25nX3RhcmdldHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQpKSUwQXByaW50KHRva2VuaXplci5jb252ZXJ0X2lkc190b190b2tlbnMoaW5wdXRzJTVCJTIybGFiZWxzJTIyJTVEKSk=",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(inputs[<span class="hljs-string">&quot;labels&quot;</span>]))`,wrap:!1}}),kl=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}}),_l=new h({props:{code:"bWF4X2xlbmd0aCUyMCUzRCUyMDEyOCUwQSUwQSUwQWRlZiUyMHByZXByb2Nlc3NfZnVuY3Rpb24oZXhhbXBsZXMpJTNBJTBBJTIwJTIwJTIwJTIwaW5wdXRzJTIwJTNEJTIwJTVCZXglNUIlMjJlbiUyMiU1RCUyMGZvciUyMGV4JTIwaW4lMjBleGFtcGxlcyU1QiUyMnRyYW5zbGF0aW9uJTIyJTVEJTVEJTBBJTIwJTIwJTIwJTIwdGFyZ2V0cyUyMCUzRCUyMCU1QmV4JTVCJTIyZnIlMjIlNUQlMjBmb3IlMjBleCUyMGluJTIwZXhhbXBsZXMlNUIlMjJ0cmFuc2xhdGlvbiUyMiU1RCU1RCUwQSUyMCUyMCUyMCUyMG1vZGVsX2lucHV0cyUyMCUzRCUyMHRva2VuaXplciglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbnB1dHMlMkMlMjB0ZXh0X3RhcmdldCUzRHRhcmdldHMlMkMlMjBtYXhfbGVuZ3RoJTNEbWF4X2xlbmd0aCUyQyUyMHRydW5jYXRpb24lM0RUcnVlJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMG1vZGVsX2lucHV0cw==",highlighted:`max_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, text_target=targets, max_length=max_length, truncation=<span class="hljs-literal">True</span>
    )
    <span class="hljs-keyword">return</span> model_inputs`,wrap:!1}}),Pe=new el({props:{$$slots:{default:[ti]},$$scope:{ctx:Z}}}),Ke=new el({props:{warning:!0,$$slots:{default:[ai]},$$scope:{ctx:Z}}}),zl=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 hn=[ni,si],xt=[];function Cn(e,a){return e[0]==="pt"?0:1}ze=Cn(Z),Be=xt[ze]=hn[ze](Z),Rl=new ve({props:{title:"Data collation",local:"data-collation",headingTag:"h3"}});const $n=[pi,ri],Gt=[];function gn(e,a){return e[0]==="pt"?0:1}We=gn(Z),Re=Gt[We]=$n[We](Z),Al=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}}),Ql=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}}),Yl=new h({props:{code:"YmF0Y2glNUIlMjJsYWJlbHMlMjIlNUQ=",highlighted:'batch[<span class="hljs-string">&quot;labels&quot;</span>]',wrap:!1}}),Hl=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}}),Sl=new h({props:{code:"YmF0Y2glNUIlMjJkZWNvZGVyX2lucHV0X2lkcyUyMiU1RA==",highlighted:'batch[<span class="hljs-string">&quot;decoder_input_ids&quot;</span>]',wrap:!1}}),Dl=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}}),Ll=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}}),Pl=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 In=[ui,ci],zt=[];function kn(e,a){return e[0]==="pt"?0:1}Ve=kn(Z),Xe=zt[Ve]=In[Ve](Z),Kl=new ve({props:{title:"Metrice",local:"metrics",headingTag:"h3"}}),Ol=new Zs({props:{id:"M05L1DhFqcw"}});let je=Z[0]==="pt"&&Nn();tt=new h({props:{code:"IXBpcCUyMGluc3RhbGwlMjBzYWNyZWJsZXU=",highlighted:"!pip install sacrebleu",wrap:!1}}),st=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}}),rt=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}}),pt=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}}),ut=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}}),Mt=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}}),ot=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}}),mt=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 Zn=[oi,Mi],Bt=[];function vn(e,a){return e[0]==="tf"?0:1}Ne=vn(Z),Ae=Bt[Ne]=Zn[Ne](Z),Jt=new ve({props:{title:"Fine-tuningul modelului",local:"fine-tuning-the-model",headingTag:"h3"}}),Tt=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}}),jt=new h({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}});const _n=[di,mi],Wt=[];function xn(e,a){return e[0]==="tf"?0:1}Qe=xn(Z),Ee=Wt[Qe]=_n[Qe](Z);let ne=Z[0]==="pt"&&An();return wt=new ve({props:{title:"Utilizarea modelului fine-tuned",local:"using-the-fine-tuned-model",headingTag:"h2"}}),Ct=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBJTIzJTIwUmVwbGFjZSUyMHRoaXMlMjB3aXRoJTIweW91ciUyMG93biUyMGNoZWNrcG9pbnQlMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIyaHVnZ2luZ2ZhY2UtY291cnNlJTJGbWFyaWFuLWZpbmV0dW5lZC1rZGU0LWVuLXRvLWZyJTIyJTBBdHJhbnNsYXRvciUyMCUzRCUyMHBpcGVsaW5lKCUyMnRyYW5zbGF0aW9uJTIyJTJDJTIwbW9kZWwlM0Rtb2RlbF9jaGVja3BvaW50KSUwQXRyYW5zbGF0b3IoJTIyRGVmYXVsdCUyMHRvJTIwZXhwYW5kZWQlMjB0aHJlYWRzJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

<span class="hljs-comment"># Replace this with your own 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}}),$t=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}}),It=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}}),kt=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}}),Oe=new el({props:{$$slots:{default:[fi]},$$scope:{ctx:Z}}}),vt=new Ln({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ro/chapter7/4.mdx"}}),{c(){i=J("meta"),w=s(),p=J("p"),j=s(),o(I.$$.fragment),b=s(),o(v.$$.fragment),x=s(),o(z.$$.fragment),k=s(),G.c(),R=s(),ie=J("p"),ie.innerHTML=O,V=s(),X=J("ul"),X.innerHTML=P,Je=s(),o(N.$$.fragment),A=s(),Q=J("p"),Q.textContent=K,fe=s(),E=J("p"),E.innerHTML=H,L=s(),W=J("p"),W.textContent=re,ee=s(),B=J("iframe"),U=s(),_=J("a"),_.innerHTML=Te,Me=s(),te=J("p"),te.innerHTML=ke,we=s(),o(F.$$.fragment),Ye=s(),oe=J("p"),oe.innerHTML=pe,he=s(),o(S.$$.fragment),_e=s(),ae=J("p"),ae.innerHTML=Ze,Ce=s(),o(D.$$.fragment),He=s(),me=J("p"),me.innerHTML=ce,$e=s(),Y=J("img"),ge=s(),q=J("p"),q.textContent=Fe,de=s(),o(ue.$$.fragment),xe=s(),o(se.$$.fragment),be=s(),ye=J("p"),ye.innerHTML=c,g=s(),o(Ue.$$.fragment),ll=s(),o(Ge.$$.fragment),r=s(),$=J("p"),$.innerHTML=Rs,St=s(),o(tl.$$.fragment),Dt=s(),al=J("p"),al.textContent=Vs,qt=s(),o(sl.$$.fragment),Lt=s(),o(nl.$$.fragment),Pt=s(),il=J("p"),il.textContent=Xs,Kt=s(),o(rl.$$.fragment),Ot=s(),o(pl.$$.fragment),ea=s(),cl=J("p"),cl.textContent=Ns,la=s(),o(ul.$$.fragment),ta=s(),o(Ml.$$.fragment),aa=s(),ol=J("p"),ol.textContent=As,sa=s(),o(ml.$$.fragment),na=s(),o(dl.$$.fragment),ia=s(),yl=J("p"),yl.textContent=Qs,ra=s(),o(Jl.$$.fragment),pa=s(),o(qe.$$.fragment),ca=s(),o(fl.$$.fragment),ua=s(),o(Tl.$$.fragment),Ma=s(),bl=J("p"),bl.innerHTML=Es,oa=s(),o(Ul.$$.fragment),ma=s(),jl=J("p"),jl.innerHTML=Ys,da=s(),o(Le.$$.fragment),ya=s(),wl=J("p"),wl.innerHTML=Hs,Ja=s(),hl=J("p"),hl.textContent=Fs,fa=s(),o(Cl.$$.fragment),Ta=s(),o($l.$$.fragment),ba=s(),gl=J("p"),gl.innerHTML=Ss,Ua=s(),o(Il.$$.fragment),ja=s(),o(kl.$$.fragment),wa=s(),Zl=J("p"),Zl.textContent=Ds,ha=s(),vl=J("p"),vl.innerHTML=qs,Ca=s(),o(_l.$$.fragment),$a=s(),xl=J("p"),xl.textContent=Ls,ga=s(),o(Pe.$$.fragment),Ia=s(),o(Ke.$$.fragment),ka=s(),Gl=J("p"),Gl.textContent=Ps,Za=s(),o(zl.$$.fragment),va=s(),Bl=J("p"),Bl.textContent=Ks,_a=s(),Be.c(),Xt=s(),Wl=J("p"),Wl.textContent=Os,xa=s(),o(Rl.$$.fragment),Ga=s(),Vl=J("p"),Vl.innerHTML=en,za=s(),Xl=J("p"),Xl.innerHTML=ln,Ba=s(),Re.c(),Nt=s(),Nl=J("p"),Nl.textContent=tn,Wa=s(),o(Al.$$.fragment),Ra=s(),o(Ql.$$.fragment),Va=s(),El=J("p"),El.innerHTML=an,Xa=s(),o(Yl.$$.fragment),Na=s(),o(Hl.$$.fragment),Aa=s(),Fl=J("p"),Fl.textContent=sn,Qa=s(),o(Sl.$$.fragment),Ea=s(),o(Dl.$$.fragment),Ya=s(),ql=J("p"),ql.textContent=nn,Ha=s(),o(Ll.$$.fragment),Fa=s(),o(Pl.$$.fragment),Sa=s(),Xe.c(),At=s(),o(Kl.$$.fragment),Da=s(),o(Ol.$$.fragment),qa=s(),je&&je.c(),Qt=s(),et=J("p"),et.innerHTML=rn,La=s(),lt=J("p"),lt.innerHTML=pn,Pa=s(),o(tt.$$.fragment),Ka=s(),at=J("p"),at.innerHTML=cn,Oa=s(),o(st.$$.fragment),es=s(),nt=J("p"),nt.textContent=un,ls=s(),it=J("p"),it.textContent=Mn,ts=s(),o(rt.$$.fragment),as=s(),o(pt.$$.fragment),ss=s(),ct=J("p"),ct.innerHTML=on,ns=s(),o(ut.$$.fragment),is=s(),o(Mt.$$.fragment),rs=s(),o(ot.$$.fragment),ps=s(),o(mt.$$.fragment),cs=s(),dt=J("p"),dt.textContent=mn,us=s(),Ae.c(),Et=s(),yt=J("p"),yt.textContent=dn,Ms=s(),o(Jt.$$.fragment),os=s(),ft=J("p"),ft.textContent=yn,ms=s(),o(Tt.$$.fragment),ds=s(),bt=J("p"),bt.textContent=Jn,ys=s(),Ut=J("p"),Ut.textContent=fn,Js=s(),o(jt.$$.fragment),fs=s(),Ee.c(),Yt=s(),ne&&ne.c(),Ht=s(),o(wt.$$.fragment),Ts=s(),ht=J("p"),ht.innerHTML=Tn,bs=s(),o(Ct.$$.fragment),Us=s(),o($t.$$.fragment),js=s(),gt=J("p"),gt.textContent=bn,ws=s(),o(It.$$.fragment),hs=s(),o(kt.$$.fragment),Cs=s(),Zt=J("p"),Zt.textContent=Un,$s=s(),o(Oe.$$.fragment),gs=s(),o(vt.$$.fragment),Is=s(),Ft=J("p"),this.h()},l(e){const a=Sn("svelte-u9bgzb",document.head);i=f(a,"META",{name:!0,content:!0}),a.forEach(l),w=n(e),p=f(e,"P",{}),Ws(p).forEach(l),j=n(e),m(I.$$.fragment,e),b=n(e),m(v.$$.fragment,e),x=n(e),m(z.$$.fragment,e),k=n(e),G.l(e),R=n(e),ie=f(e,"P",{"data-svelte-h":!0}),T(ie)!=="svelte-1hjku1u"&&(ie.innerHTML=O),V=n(e),X=f(e,"UL",{"data-svelte-h":!0}),T(X)!=="svelte-8l55us"&&(X.innerHTML=P),Je=n(e),m(N.$$.fragment,e),A=n(e),Q=f(e,"P",{"data-svelte-h":!0}),T(Q)!=="svelte-v9f9pg"&&(Q.textContent=K),fe=n(e),E=f(e,"P",{"data-svelte-h":!0}),T(E)!=="svelte-1kswmd5"&&(E.innerHTML=H),L=n(e),W=f(e,"P",{"data-svelte-h":!0}),T(W)!=="svelte-ji5awa"&&(W.textContent=re),ee=n(e),B=f(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Ws(B).forEach(l),U=n(e),_=f(e,"A",{class:!0,href:!0,"data-svelte-h":!0}),T(_)!=="svelte-zcb7r2"&&(_.innerHTML=Te),Me=n(e),te=f(e,"P",{"data-svelte-h":!0}),T(te)!=="svelte-16exn7t"&&(te.innerHTML=ke),we=n(e),m(F.$$.fragment,e),Ye=n(e),oe=f(e,"P",{"data-svelte-h":!0}),T(oe)!=="svelte-iwk6bm"&&(oe.innerHTML=pe),he=n(e),m(S.$$.fragment,e),_e=n(e),ae=f(e,"P",{"data-svelte-h":!0}),T(ae)!=="svelte-jfj5az"&&(ae.innerHTML=Ze),Ce=n(e),m(D.$$.fragment,e),He=n(e),me=f(e,"P",{"data-svelte-h":!0}),T(me)!=="svelte-1d8cyc1"&&(me.innerHTML=ce),$e=n(e),Y=f(e,"IMG",{src:!0,alt:!0,width:!0}),ge=n(e),q=f(e,"P",{"data-svelte-h":!0}),T(q)!=="svelte-8622t0"&&(q.textContent=Fe),de=n(e),m(ue.$$.fragment,e),xe=n(e),m(se.$$.fragment,e),be=n(e),ye=f(e,"P",{"data-svelte-h":!0}),T(ye)!=="svelte-1xqsrc7"&&(ye.innerHTML=c),g=n(e),m(Ue.$$.fragment,e),ll=n(e),m(Ge.$$.fragment,e),r=n(e),$=f(e,"P",{"data-svelte-h":!0}),T($)!=="svelte-of8q36"&&($.innerHTML=Rs),St=n(e),m(tl.$$.fragment,e),Dt=n(e),al=f(e,"P",{"data-svelte-h":!0}),T(al)!=="svelte-q05c0b"&&(al.textContent=Vs),qt=n(e),m(sl.$$.fragment,e),Lt=n(e),m(nl.$$.fragment,e),Pt=n(e),il=f(e,"P",{"data-svelte-h":!0}),T(il)!=="svelte-10rxn9c"&&(il.textContent=Xs),Kt=n(e),m(rl.$$.fragment,e),Ot=n(e),m(pl.$$.fragment,e),ea=n(e),cl=f(e,"P",{"data-svelte-h":!0}),T(cl)!=="svelte-u69820"&&(cl.textContent=Ns),la=n(e),m(ul.$$.fragment,e),ta=n(e),m(Ml.$$.fragment,e),aa=n(e),ol=f(e,"P",{"data-svelte-h":!0}),T(ol)!=="svelte-yoh8q2"&&(ol.textContent=As),sa=n(e),m(ml.$$.fragment,e),na=n(e),m(dl.$$.fragment,e),ia=n(e),yl=f(e,"P",{"data-svelte-h":!0}),T(yl)!=="svelte-dxbciu"&&(yl.textContent=Qs),ra=n(e),m(Jl.$$.fragment,e),pa=n(e),m(qe.$$.fragment,e),ca=n(e),m(fl.$$.fragment,e),ua=n(e),m(Tl.$$.fragment,e),Ma=n(e),bl=f(e,"P",{"data-svelte-h":!0}),T(bl)!=="svelte-tyroul"&&(bl.innerHTML=Es),oa=n(e),m(Ul.$$.fragment,e),ma=n(e),jl=f(e,"P",{"data-svelte-h":!0}),T(jl)!=="svelte-d1kfjn"&&(jl.innerHTML=Ys),da=n(e),m(Le.$$.fragment,e),ya=n(e),wl=f(e,"P",{"data-svelte-h":!0}),T(wl)!=="svelte-c67b0n"&&(wl.innerHTML=Hs),Ja=n(e),hl=f(e,"P",{"data-svelte-h":!0}),T(hl)!=="svelte-1r20999"&&(hl.textContent=Fs),fa=n(e),m(Cl.$$.fragment,e),Ta=n(e),m($l.$$.fragment,e),ba=n(e),gl=f(e,"P",{"data-svelte-h":!0}),T(gl)!=="svelte-1p05x7f"&&(gl.innerHTML=Ss),Ua=n(e),m(Il.$$.fragment,e),ja=n(e),m(kl.$$.fragment,e),wa=n(e),Zl=f(e,"P",{"data-svelte-h":!0}),T(Zl)!=="svelte-1x3kx1d"&&(Zl.textContent=Ds),ha=n(e),vl=f(e,"P",{"data-svelte-h":!0}),T(vl)!=="svelte-7ykwre"&&(vl.innerHTML=qs),Ca=n(e),m(_l.$$.fragment,e),$a=n(e),xl=f(e,"P",{"data-svelte-h":!0}),T(xl)!=="svelte-3zt2jz"&&(xl.textContent=Ls),ga=n(e),m(Pe.$$.fragment,e),Ia=n(e),m(Ke.$$.fragment,e),ka=n(e),Gl=f(e,"P",{"data-svelte-h":!0}),T(Gl)!=="svelte-13hywto"&&(Gl.textContent=Ps),Za=n(e),m(zl.$$.fragment,e),va=n(e),Bl=f(e,"P",{"data-svelte-h":!0}),T(Bl)!=="svelte-7eeim7"&&(Bl.textContent=Ks),_a=n(e),Be.l(e),Xt=n(e),Wl=f(e,"P",{"data-svelte-h":!0}),T(Wl)!=="svelte-1rfglo3"&&(Wl.textContent=Os),xa=n(e),m(Rl.$$.fragment,e),Ga=n(e),Vl=f(e,"P",{"data-svelte-h":!0}),T(Vl)!=="svelte-53at63"&&(Vl.innerHTML=en),za=n(e),Xl=f(e,"P",{"data-svelte-h":!0}),T(Xl)!=="svelte-1hawjio"&&(Xl.innerHTML=ln),Ba=n(e),Re.l(e),Nt=n(e),Nl=f(e,"P",{"data-svelte-h":!0}),T(Nl)!=="svelte-1ge6n0a"&&(Nl.textContent=tn),Wa=n(e),m(Al.$$.fragment,e),Ra=n(e),m(Ql.$$.fragment,e),Va=n(e),El=f(e,"P",{"data-svelte-h":!0}),T(El)!=="svelte-1pkadsh"&&(El.innerHTML=an),Xa=n(e),m(Yl.$$.fragment,e),Na=n(e),m(Hl.$$.fragment,e),Aa=n(e),Fl=f(e,"P",{"data-svelte-h":!0}),T(Fl)!=="svelte-10cyfdj"&&(Fl.textContent=sn),Qa=n(e),m(Sl.$$.fragment,e),Ea=n(e),m(Dl.$$.fragment,e),Ya=n(e),ql=f(e,"P",{"data-svelte-h":!0}),T(ql)!=="svelte-1chpkqz"&&(ql.textContent=nn),Ha=n(e),m(Ll.$$.fragment,e),Fa=n(e),m(Pl.$$.fragment,e),Sa=n(e),Xe.l(e),At=n(e),m(Kl.$$.fragment,e),Da=n(e),m(Ol.$$.fragment,e),qa=n(e),je&&je.l(e),Qt=n(e),et=f(e,"P",{"data-svelte-h":!0}),T(et)!=="svelte-cmat2n"&&(et.innerHTML=rn),La=n(e),lt=f(e,"P",{"data-svelte-h":!0}),T(lt)!=="svelte-j0xioy"&&(lt.innerHTML=pn),Pa=n(e),m(tt.$$.fragment,e),Ka=n(e),at=f(e,"P",{"data-svelte-h":!0}),T(at)!=="svelte-1986xyv"&&(at.innerHTML=cn),Oa=n(e),m(st.$$.fragment,e),es=n(e),nt=f(e,"P",{"data-svelte-h":!0}),T(nt)!=="svelte-dhufzv"&&(nt.textContent=un),ls=n(e),it=f(e,"P",{"data-svelte-h":!0}),T(it)!=="svelte-19tacb7"&&(it.textContent=Mn),ts=n(e),m(rt.$$.fragment,e),as=n(e),m(pt.$$.fragment,e),ss=n(e),ct=f(e,"P",{"data-svelte-h":!0}),T(ct)!=="svelte-sfpyo9"&&(ct.innerHTML=on),ns=n(e),m(ut.$$.fragment,e),is=n(e),m(Mt.$$.fragment,e),rs=n(e),m(ot.$$.fragment,e),ps=n(e),m(mt.$$.fragment,e),cs=n(e),dt=f(e,"P",{"data-svelte-h":!0}),T(dt)!=="svelte-upk1hj"&&(dt.textContent=mn),us=n(e),Ae.l(e),Et=n(e),yt=f(e,"P",{"data-svelte-h":!0}),T(yt)!=="svelte-17x8esl"&&(yt.textContent=dn),Ms=n(e),m(Jt.$$.fragment,e),os=n(e),ft=f(e,"P",{"data-svelte-h":!0}),T(ft)!=="svelte-3kiz89"&&(ft.textContent=yn),ms=n(e),m(Tt.$$.fragment,e),ds=n(e),bt=f(e,"P",{"data-svelte-h":!0}),T(bt)!=="svelte-1dujvgk"&&(bt.textContent=Jn),ys=n(e),Ut=f(e,"P",{"data-svelte-h":!0}),T(Ut)!=="svelte-fhjhmt"&&(Ut.textContent=fn),Js=n(e),m(jt.$$.fragment,e),fs=n(e),Ee.l(e),Yt=n(e),ne&&ne.l(e),Ht=n(e),m(wt.$$.fragment,e),Ts=n(e),ht=f(e,"P",{"data-svelte-h":!0}),T(ht)!=="svelte-5jp0tw"&&(ht.innerHTML=Tn),bs=n(e),m(Ct.$$.fragment,e),Us=n(e),m($t.$$.fragment,e),js=n(e),gt=f(e,"P",{"data-svelte-h":!0}),T(gt)!=="svelte-mezc6q"&&(gt.textContent=bn),ws=n(e),m(It.$$.fragment,e),hs=n(e),m(kt.$$.fragment,e),Cs=n(e),Zt=f(e,"P",{"data-svelte-h":!0}),T(Zt)!=="svelte-126egem"&&(Zt.textContent=Un),$s=n(e),m(Oe.$$.fragment,e),gs=n(e),m(vt.$$.fragment,e),Is=n(e),Ft=f(e,"P",{}),Ws(Ft).forEach(l),this.h()},h(){Ie(i,"name","hf:doc:metadata"),Ie(i,"content",bi),Xn(B.src,le="https://course-demos-marian-finetuned-kde4-en-to-fr.hf.space")||Ie(B,"src",le),Ie(B,"frameborder","0"),Ie(B,"height","350"),Ie(B,"title","Gradio app"),Ie(B,"class","block dark:hidden container p-0 flex-grow space-iframe"),Ie(B,"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"),Ie(B,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),Ie(_,"class","flex justify-center"),Ie(_,"href","/huggingface-course/marian-finetuned-kde4-en-to-fr"),Xn(Y.src,De="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/language_tags.png")||Ie(Y,"src",De),Ie(Y,"alt","Limba disponibilă pentru datasetul KDE4."),Ie(Y,"width","100%")},m(e,a){Dn(document.head,i),t(e,w,a),t(e,p,a),t(e,j,a),d(I,e,a),t(e,b,a),d(v,e,a),t(e,x,a),d(z,e,a),t(e,k,a),_t[C].m(e,a),t(e,R,a),t(e,ie,a),t(e,V,a),t(e,X,a),t(e,Je,a),d(N,e,a),t(e,A,a),t(e,Q,a),t(e,fe,a),t(e,E,a),t(e,L,a),t(e,W,a),t(e,ee,a),t(e,B,a),t(e,U,a),t(e,_,a),t(e,Me,a),t(e,te,a),t(e,we,a),d(F,e,a),t(e,Ye,a),t(e,oe,a),t(e,he,a),d(S,e,a),t(e,_e,a),t(e,ae,a),t(e,Ce,a),d(D,e,a),t(e,He,a),t(e,me,a),t(e,$e,a),t(e,Y,a),t(e,ge,a),t(e,q,a),t(e,de,a),d(ue,e,a),t(e,xe,a),d(se,e,a),t(e,be,a),t(e,ye,a),t(e,g,a),d(Ue,e,a),t(e,ll,a),d(Ge,e,a),t(e,r,a),t(e,$,a),t(e,St,a),d(tl,e,a),t(e,Dt,a),t(e,al,a),t(e,qt,a),d(sl,e,a),t(e,Lt,a),d(nl,e,a),t(e,Pt,a),t(e,il,a),t(e,Kt,a),d(rl,e,a),t(e,Ot,a),d(pl,e,a),t(e,ea,a),t(e,cl,a),t(e,la,a),d(ul,e,a),t(e,ta,a),d(Ml,e,a),t(e,aa,a),t(e,ol,a),t(e,sa,a),d(ml,e,a),t(e,na,a),d(dl,e,a),t(e,ia,a),t(e,yl,a),t(e,ra,a),d(Jl,e,a),t(e,pa,a),d(qe,e,a),t(e,ca,a),d(fl,e,a),t(e,ua,a),d(Tl,e,a),t(e,Ma,a),t(e,bl,a),t(e,oa,a),d(Ul,e,a),t(e,ma,a),t(e,jl,a),t(e,da,a),d(Le,e,a),t(e,ya,a),t(e,wl,a),t(e,Ja,a),t(e,hl,a),t(e,fa,a),d(Cl,e,a),t(e,Ta,a),d($l,e,a),t(e,ba,a),t(e,gl,a),t(e,Ua,a),d(Il,e,a),t(e,ja,a),d(kl,e,a),t(e,wa,a),t(e,Zl,a),t(e,ha,a),t(e,vl,a),t(e,Ca,a),d(_l,e,a),t(e,$a,a),t(e,xl,a),t(e,ga,a),d(Pe,e,a),t(e,Ia,a),d(Ke,e,a),t(e,ka,a),t(e,Gl,a),t(e,Za,a),d(zl,e,a),t(e,va,a),t(e,Bl,a),t(e,_a,a),xt[ze].m(e,a),t(e,Xt,a),t(e,Wl,a),t(e,xa,a),d(Rl,e,a),t(e,Ga,a),t(e,Vl,a),t(e,za,a),t(e,Xl,a),t(e,Ba,a),Gt[We].m(e,a),t(e,Nt,a),t(e,Nl,a),t(e,Wa,a),d(Al,e,a),t(e,Ra,a),d(Ql,e,a),t(e,Va,a),t(e,El,a),t(e,Xa,a),d(Yl,e,a),t(e,Na,a),d(Hl,e,a),t(e,Aa,a),t(e,Fl,a),t(e,Qa,a),d(Sl,e,a),t(e,Ea,a),d(Dl,e,a),t(e,Ya,a),t(e,ql,a),t(e,Ha,a),d(Ll,e,a),t(e,Fa,a),d(Pl,e,a),t(e,Sa,a),zt[Ve].m(e,a),t(e,At,a),d(Kl,e,a),t(e,Da,a),d(Ol,e,a),t(e,qa,a),je&&je.m(e,a),t(e,Qt,a),t(e,et,a),t(e,La,a),t(e,lt,a),t(e,Pa,a),d(tt,e,a),t(e,Ka,a),t(e,at,a),t(e,Oa,a),d(st,e,a),t(e,es,a),t(e,nt,a),t(e,ls,a),t(e,it,a),t(e,ts,a),d(rt,e,a),t(e,as,a),d(pt,e,a),t(e,ss,a),t(e,ct,a),t(e,ns,a),d(ut,e,a),t(e,is,a),d(Mt,e,a),t(e,rs,a),d(ot,e,a),t(e,ps,a),d(mt,e,a),t(e,cs,a),t(e,dt,a),t(e,us,a),Bt[Ne].m(e,a),t(e,Et,a),t(e,yt,a),t(e,Ms,a),d(Jt,e,a),t(e,os,a),t(e,ft,a),t(e,ms,a),d(Tt,e,a),t(e,ds,a),t(e,bt,a),t(e,ys,a),t(e,Ut,a),t(e,Js,a),d(jt,e,a),t(e,fs,a),Wt[Qe].m(e,a),t(e,Yt,a),ne&&ne.m(e,a),t(e,Ht,a),d(wt,e,a),t(e,Ts,a),t(e,ht,a),t(e,bs,a),d(Ct,e,a),t(e,Us,a),d($t,e,a),t(e,js,a),t(e,gt,a),t(e,ws,a),d(It,e,a),t(e,hs,a),d(kt,e,a),t(e,Cs,a),t(e,Zt,a),t(e,$s,a),d(Oe,e,a),t(e,gs,a),d(vt,e,a),t(e,Is,a),t(e,Ft,a),ks=!0},p(e,[a]){const Gn={};a&1&&(Gn.fw=e[0]),I.$set(Gn);let vs=C;C=wn(e),C!==vs&&(Vt(),M(_t[vs],1,1,()=>{_t[vs]=null}),Rt(),G=_t[C],G||(G=_t[C]=jn[C](e),G.c()),u(G,1),G.m(R.parentNode,R));const zn={};a&2&&(zn.$$scope={dirty:a,ctx:e}),qe.$set(zn);const Bn={};a&2&&(Bn.$$scope={dirty:a,ctx:e}),Le.$set(Bn);const Wn={};a&2&&(Wn.$$scope={dirty:a,ctx:e}),Pe.$set(Wn);const Rn={};a&2&&(Rn.$$scope={dirty:a,ctx:e}),Ke.$set(Rn);let _s=ze;ze=Cn(e),ze!==_s&&(Vt(),M(xt[_s],1,1,()=>{xt[_s]=null}),Rt(),Be=xt[ze],Be||(Be=xt[ze]=hn[ze](e),Be.c()),u(Be,1),Be.m(Xt.parentNode,Xt));let xs=We;We=gn(e),We!==xs&&(Vt(),M(Gt[xs],1,1,()=>{Gt[xs]=null}),Rt(),Re=Gt[We],Re||(Re=Gt[We]=$n[We](e),Re.c()),u(Re,1),Re.m(Nt.parentNode,Nt));let Gs=Ve;Ve=kn(e),Ve!==Gs&&(Vt(),M(zt[Gs],1,1,()=>{zt[Gs]=null}),Rt(),Xe=zt[Ve],Xe||(Xe=zt[Ve]=In[Ve](e),Xe.c()),u(Xe,1),Xe.m(At.parentNode,At)),e[0]==="pt"?je||(je=Nn(),je.c(),je.m(Qt.parentNode,Qt)):je&&(je.d(1),je=null);let zs=Ne;Ne=vn(e),Ne!==zs&&(Vt(),M(Bt[zs],1,1,()=>{Bt[zs]=null}),Rt(),Ae=Bt[Ne],Ae||(Ae=Bt[Ne]=Zn[Ne](e),Ae.c()),u(Ae,1),Ae.m(Et.parentNode,Et));let Bs=Qe;Qe=xn(e),Qe!==Bs&&(Vt(),M(Wt[Bs],1,1,()=>{Wt[Bs]=null}),Rt(),Ee=Wt[Qe],Ee||(Ee=Wt[Qe]=_n[Qe](e),Ee.c()),u(Ee,1),Ee.m(Yt.parentNode,Yt)),e[0]==="pt"?ne?a&1&&u(ne,1):(ne=An(),ne.c(),u(ne,1),ne.m(Ht.parentNode,Ht)):ne&&(Vt(),M(ne,1,1,()=>{ne=null}),Rt());const Vn={};a&2&&(Vn.$$scope={dirty:a,ctx:e}),Oe.$set(Vn)},i(e){ks||(u(I.$$.fragment,e),u(v.$$.fragment,e),u(z.$$.fragment,e),u(G),u(N.$$.fragment,e),u(F.$$.fragment,e),u(S.$$.fragment,e),u(D.$$.fragment,e),u(ue.$$.fragment,e),u(se.$$.fragment,e),u(Ue.$$.fragment,e),u(Ge.$$.fragment,e),u(tl.$$.fragment,e),u(sl.$$.fragment,e),u(nl.$$.fragment,e),u(rl.$$.fragment,e),u(pl.$$.fragment,e),u(ul.$$.fragment,e),u(Ml.$$.fragment,e),u(ml.$$.fragment,e),u(dl.$$.fragment,e),u(Jl.$$.fragment,e),u(qe.$$.fragment,e),u(fl.$$.fragment,e),u(Tl.$$.fragment,e),u(Ul.$$.fragment,e),u(Le.$$.fragment,e),u(Cl.$$.fragment,e),u($l.$$.fragment,e),u(Il.$$.fragment,e),u(kl.$$.fragment,e),u(_l.$$.fragment,e),u(Pe.$$.fragment,e),u(Ke.$$.fragment,e),u(zl.$$.fragment,e),u(Be),u(Rl.$$.fragment,e),u(Re),u(Al.$$.fragment,e),u(Ql.$$.fragment,e),u(Yl.$$.fragment,e),u(Hl.$$.fragment,e),u(Sl.$$.fragment,e),u(Dl.$$.fragment,e),u(Ll.$$.fragment,e),u(Pl.$$.fragment,e),u(Xe),u(Kl.$$.fragment,e),u(Ol.$$.fragment,e),u(tt.$$.fragment,e),u(st.$$.fragment,e),u(rt.$$.fragment,e),u(pt.$$.fragment,e),u(ut.$$.fragment,e),u(Mt.$$.fragment,e),u(ot.$$.fragment,e),u(mt.$$.fragment,e),u(Ae),u(Jt.$$.fragment,e),u(Tt.$$.fragment,e),u(jt.$$.fragment,e),u(Ee),u(ne),u(wt.$$.fragment,e),u(Ct.$$.fragment,e),u($t.$$.fragment,e),u(It.$$.fragment,e),u(kt.$$.fragment,e),u(Oe.$$.fragment,e),u(vt.$$.fragment,e),ks=!0)},o(e){M(I.$$.fragment,e),M(v.$$.fragment,e),M(z.$$.fragment,e),M(G),M(N.$$.fragment,e),M(F.$$.fragment,e),M(S.$$.fragment,e),M(D.$$.fragment,e),M(ue.$$.fragment,e),M(se.$$.fragment,e),M(Ue.$$.fragment,e),M(Ge.$$.fragment,e),M(tl.$$.fragment,e),M(sl.$$.fragment,e),M(nl.$$.fragment,e),M(rl.$$.fragment,e),M(pl.$$.fragment,e),M(ul.$$.fragment,e),M(Ml.$$.fragment,e),M(ml.$$.fragment,e),M(dl.$$.fragment,e),M(Jl.$$.fragment,e),M(qe.$$.fragment,e),M(fl.$$.fragment,e),M(Tl.$$.fragment,e),M(Ul.$$.fragment,e),M(Le.$$.fragment,e),M(Cl.$$.fragment,e),M($l.$$.fragment,e),M(Il.$$.fragment,e),M(kl.$$.fragment,e),M(_l.$$.fragment,e),M(Pe.$$.fragment,e),M(Ke.$$.fragment,e),M(zl.$$.fragment,e),M(Be),M(Rl.$$.fragment,e),M(Re),M(Al.$$.fragment,e),M(Ql.$$.fragment,e),M(Yl.$$.fragment,e),M(Hl.$$.fragment,e),M(Sl.$$.fragment,e),M(Dl.$$.fragment,e),M(Ll.$$.fragment,e),M(Pl.$$.fragment,e),M(Xe),M(Kl.$$.fragment,e),M(Ol.$$.fragment,e),M(tt.$$.fragment,e),M(st.$$.fragment,e),M(rt.$$.fragment,e),M(pt.$$.fragment,e),M(ut.$$.fragment,e),M(Mt.$$.fragment,e),M(ot.$$.fragment,e),M(mt.$$.fragment,e),M(Ae),M(Jt.$$.fragment,e),M(Tt.$$.fragment,e),M(jt.$$.fragment,e),M(Ee),M(ne),M(wt.$$.fragment,e),M(Ct.$$.fragment,e),M($t.$$.fragment,e),M(It.$$.fragment,e),M(kt.$$.fragment,e),M(Oe.$$.fragment,e),M(vt.$$.fragment,e),ks=!1},d(e){e&&(l(w),l(p),l(j),l(b),l(x),l(k),l(R),l(ie),l(V),l(X),l(Je),l(A),l(Q),l(fe),l(E),l(L),l(W),l(ee),l(B),l(U),l(_),l(Me),l(te),l(we),l(Ye),l(oe),l(he),l(_e),l(ae),l(Ce),l(He),l(me),l($e),l(Y),l(ge),l(q),l(de),l(xe),l(be),l(ye),l(g),l(ll),l(r),l($),l(St),l(Dt),l(al),l(qt),l(Lt),l(Pt),l(il),l(Kt),l(Ot),l(ea),l(cl),l(la),l(ta),l(aa),l(ol),l(sa),l(na),l(ia),l(yl),l(ra),l(pa),l(ca),l(ua),l(Ma),l(bl),l(oa),l(ma),l(jl),l(da),l(ya),l(wl),l(Ja),l(hl),l(fa),l(Ta),l(ba),l(gl),l(Ua),l(ja),l(wa),l(Zl),l(ha),l(vl),l(Ca),l($a),l(xl),l(ga),l(Ia),l(ka),l(Gl),l(Za),l(va),l(Bl),l(_a),l(Xt),l(Wl),l(xa),l(Ga),l(Vl),l(za),l(Xl),l(Ba),l(Nt),l(Nl),l(Wa),l(Ra),l(Va),l(El),l(Xa),l(Na),l(Aa),l(Fl),l(Qa),l(Ea),l(Ya),l(ql),l(Ha),l(Fa),l(Sa),l(At),l(Da),l(qa),l(Qt),l(et),l(La),l(lt),l(Pa),l(Ka),l(at),l(Oa),l(es),l(nt),l(ls),l(it),l(ts),l(as),l(ss),l(ct),l(ns),l(is),l(rs),l(ps),l(cs),l(dt),l(us),l(Et),l(yt),l(Ms),l(os),l(ft),l(ms),l(ds),l(bt),l(ys),l(Ut),l(Js),l(fs),l(Yt),l(Ht),l(Ts),l(ht),l(bs),l(Us),l(js),l(gt),l(ws),l(hs),l(Cs),l(Zt),l($s),l(gs),l(Is),l(Ft)),l(i),y(I,e),y(v,e),y(z,e),_t[C].d(e),y(N,e),y(F,e),y(S,e),y(D,e),y(ue,e),y(se,e),y(Ue,e),y(Ge,e),y(tl,e),y(sl,e),y(nl,e),y(rl,e),y(pl,e),y(ul,e),y(Ml,e),y(ml,e),y(dl,e),y(Jl,e),y(qe,e),y(fl,e),y(Tl,e),y(Ul,e),y(Le,e),y(Cl,e),y($l,e),y(Il,e),y(kl,e),y(_l,e),y(Pe,e),y(Ke,e),y(zl,e),xt[ze].d(e),y(Rl,e),Gt[We].d(e),y(Al,e),y(Ql,e),y(Yl,e),y(Hl,e),y(Sl,e),y(Dl,e),y(Ll,e),y(Pl,e),zt[Ve].d(e),y(Kl,e),y(Ol,e),je&&je.d(e),y(tt,e),y(st,e),y(rt,e),y(pt,e),y(ut,e),y(Mt,e),y(ot,e),y(mt,e),Bt[Ne].d(e),y(Jt,e),y(Tt,e),y(jt,e),Wt[Qe].d(e),ne&&ne.d(e),y(wt,e),y(Ct,e),y($t,e),y(It,e),y(kt,e),y(Oe,e),y(vt,e)}}}const bi='{"title":"Traducere","local":"translation","sections":[{"title":"Pregătirea datelor","local":"preparing-the-data","sections":[{"title":"Datasetul KDE4","local":"the-kde4-dataset","sections":[],"depth":3},{"title":"Procesarea datelor","local":"processing-the-data","sections":[],"depth":3}],"depth":2},{"title":"Fine-tuningul modelului cu API-ul Trainer","local":"fine-tuning-the-model-with-the-trainer-api","sections":[],"depth":2},{"title":"Fine-tuningul modelului cu Keras","local":"fine-tuning-the-model-with-keras","sections":[{"title":"Data collation","local":"data-collation","sections":[],"depth":3},{"title":"Metrice","local":"metrics","sections":[],"depth":3},{"title":"Fine-tuningul modelului","local":"fine-tuning-the-model","sections":[],"depth":3}],"depth":2},{"title":"O buclă de antrenare personalizată","local":"a-custom-training-loop","sections":[{"title":"Pregătirea tuturor lucrulilor pentru antrenare","local":"preparing-everything-for-training","sections":[],"depth":3},{"title":"Bucla de antrenare","local":"training-loop","sections":[],"depth":3}],"depth":2},{"title":"Utilizarea modelului fine-tuned","local":"using-the-fine-tuned-model","sections":[],"depth":2}],"depth":1}';function Ui(Z,i,w){let p="pt";return Yn(()=>{const j=new URLSearchParams(window.location.search);w(0,p=j.get("fw")||"pt")}),[p]}class Zi extends Hn{constructor(i){super(),Fn(this,i,Ui,Ti,En,{})}}export{Zi as component};
