Buckets:
| import{s as Xr,f as kr,o as Rr,n as Sn}from"../chunks/scheduler.37c15a92.js";import{S as $r,i as Qr,g as o,s,r as J,m as va,H as zr,A as Nr,h as d,f as l,c as n,j as En,u as U,x as m,n as Va,E as Yr,k as ze,y as Pe,a,v as w,t as u,b as Ne,d as c,w as T,p as Ye}from"../chunks/index.2bf4358c.js";import{T as Fn}from"../chunks/Tip.363c041f.js";import{Y as Hn}from"../chunks/Youtube.1e50a667.js";import{C as f}from"../chunks/CodeBlock.4e987730.js";import{C as Vr}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as Er}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as q,E as Fr}from"../chunks/getInferenceSnippets.ebf8be91.js";function Hr(_){let i,j;return i=new Vr({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/section7_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section7_tf.ipynb"}]}}),{c(){J(i.$$.fragment)},l(r){U(i.$$.fragment,r)},m(r,y){w(i,r,y),j=!0},i(r){j||(c(i.$$.fragment,r),j=!0)},o(r){u(i.$$.fragment,r),j=!1},d(r){T(i,r)}}}function Sr(_){let i,j;return i=new Vr({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/section7_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section7_pt.ipynb"}]}}),{c(){J(i.$$.fragment)},l(r){U(i.$$.fragment,r)},m(r,y){w(i,r,y),j=!0},i(r){j||(c(i.$$.fragment,r),j=!0)},o(r){u(i.$$.fragment,r),j=!1},d(r){T(i,r)}}}function qr(_){let i,j='💡 Modelele bazate doar pe encoding, cum ar fi BERT, tind să fie foarte bune la extragerea răspunsurilor la întrebări de tip factoid, cum ar fi “Cine a inventat arhitectura Transformer?”, dar nu se descurcă prea bine atunci când primesc întrebări deschise, cum ar fi “De ce este cerul albastru?” În aceste cazuri mai dificile, modelele encoder-decoder precum T5 și BART sunt utilizate de obicei pentru a sintetiza informațiile într-un mod destul de similar cu <a href="/course/chapter7/5">rezumarea textului</a>. Dacă sunteți interesat de acest tip de răspuns <em>generativ</em> la întrebări, vă recomandăm să consultați <a href="https://yjernite.github.io/lfqa.html" rel="nofollow">demo-ul</a> nostru bazat pe <a href="https://huggingface.co/datasets/eli5" rel="nofollow">datasetul ELI5</a>.';return{c(){i=o("p"),i.innerHTML=j},l(r){i=d(r,"P",{"data-svelte-h":!0}),m(i)!=="svelte-1o8pp8i"&&(i.innerHTML=j)},m(r,y){a(r,i,y)},p:Sn,d(r){r&&l(i)}}}function Dr(_){let i,j="✏️ <strong>E rândul tău!</strong> Atunci când se utilizează arhitectura XLNet, paddingul este aplicat la stânga, iar întrebarea și contextul sunt schimbate. Adaptați tot codul pe care tocmai l-am văzut la arhitectura XLNet (și adăugați <code>padding=True</code>). Fiți conștienți de faptul că tokenul <code>[CLS]</code> ar putea să nu se afle la poziția 0 în cazul aplicării paddingului.";return{c(){i=o("p"),i.innerHTML=j},l(r){i=d(r,"P",{"data-svelte-h":!0}),m(i)!=="svelte-1eshhqx"&&(i.innerHTML=j)},m(r,y){a(r,i,y)},p:Sn,d(r){r&&l(i)}}}function Lr(_){let i,j,r,y="Codul de antrenare pentru acest exemplu va semăna foarte mult cu codul din secțiunile anterioare, dar calcularea metricilor va fi o provocare unică. Din moment ce am făcut padding tuturor sampleurilor la lungimea maximă pe care am stabilit-o, nu există niciun data collator care să fie definit, astfel încât acest calcul al metricii este singurul lucru de care trebuie să ne facem griji. Partea dificilă va fi să postprocesăm predicțiile modelului în intervale de text în exemplele originale; odată ce am făcut acest lucru, metrica din biblioteca 🤗 Datasets va face cea mai mare parte a muncii pentru noi.",h;return i=new q({props:{title:"Fine-tuningul unui model cu Keras",local:"fine-tuning-the-model-with-keras",headingTag:"h2"}}),{c(){J(i.$$.fragment),j=s(),r=o("p"),r.textContent=y},l(p){U(i.$$.fragment,p),j=n(p),r=d(p,"P",{"data-svelte-h":!0}),m(r)!=="svelte-150lx78"&&(r.textContent=y)},m(p,I){w(i,p,I),a(p,j,I),a(p,r,I),h=!0},i(p){h||(c(i.$$.fragment,p),h=!0)},o(p){u(i.$$.fragment,p),h=!1},d(p){p&&(l(j),l(r)),T(i,p)}}}function Pr(_){let i,j,r,y="Codul de antrenare pentru acest exemplu va semăna foarte mult cu codul din secțiunile anterioare - cel mai greu lucru va fi să scriem funcția <code>compute_metrics()</code>. Deoarece am făcut padding tuturor sampleurilor la lungimea maximă pe care am stabilit-o, nu trebuie definit niciun data collator, astfel încât acest calcul al metricii este singurul lucru de care trebuie să ne facem griji. Partea dificilă va fi să postprocesăm predicțiile modelului în intervale de text în exemplele originale; odată ce am făcut acest lucru, metrica din biblioteca 🤗 Datasets va face cea mai mare parte a muncii pentru noi.",h;return i=new q({props:{title:"Fine-tuningul modelului cu API-ul Trainer",local:"fine-tuning-the-model-with-the-trainer-api",headingTag:"h2"}}),{c(){J(i.$$.fragment),j=s(),r=o("p"),r.innerHTML=y},l(p){U(i.$$.fragment,p),j=n(p),r=d(p,"P",{"data-svelte-h":!0}),m(r)!=="svelte-1wv8xzp"&&(r.innerHTML=y)},m(p,I){w(i,p,I),a(p,j,I),a(p,r,I),h=!0},i(p){h||(c(i.$$.fragment,p),h=!0)},o(p){u(i.$$.fragment,p),h=!1},d(p){p&&(l(j),l(r)),T(i,p)}}}function Kr(_){let i,j;return i=new Hn({props:{id:"VN67ZpN33Ss"}}),{c(){J(i.$$.fragment)},l(r){U(i.$$.fragment,r)},m(r,y){w(i,r,y),j=!0},i(r){j||(c(i.$$.fragment,r),j=!0)},o(r){u(i.$$.fragment,r),j=!1},d(r){T(i,r)}}}function Or(_){let i,j;return i=new Hn({props:{id:"BNy08iIWVJM"}}),{c(){J(i.$$.fragment)},l(r){U(i.$$.fragment,r)},m(r,y){w(i,r,y),j=!0},i(r){j||(c(i.$$.fragment,r),j=!0)},o(r){u(i.$$.fragment,r),j=!1},d(r){T(i,r)}}}function eM(_){let i,j,r,y="Pentru ușurința experimentelor, să convertim aceste rezultate în array-uri NumPy:",h,p,I;return i=new f({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwVEZBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZyUwQSUwQWV2YWxfc2V0X2Zvcl9tb2RlbCUyMCUzRCUyMGV2YWxfc2V0LnJlbW92ZV9jb2x1bW5zKCU1QiUyMmV4YW1wbGVfaWQlMjIlMkMlMjAlMjJvZmZzZXRfbWFwcGluZyUyMiU1RCklMEFldmFsX3NldF9mb3JfbW9kZWwuc2V0X2Zvcm1hdCglMjJudW1weSUyMiklMEElMEFiYXRjaCUyMCUzRCUyMCU3QmslM0ElMjBldmFsX3NldF9mb3JfbW9kZWwlNUJrJTVEJTIwZm9yJTIwayUyMGluJTIwZXZhbF9zZXRfZm9yX21vZGVsLmNvbHVtbl9uYW1lcyU3RCUwQXRyYWluZWRfbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclF1ZXN0aW9uQW5zd2VyaW5nLmZyb21fcHJldHJhaW5lZCh0cmFpbmVkX2NoZWNrcG9pbnQpJTBBJTBBb3V0cHV0cyUyMCUzRCUyMHRyYWluZWRfbW9kZWwoKipiYXRjaCk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForQuestionAnswering | |
| eval_set_for_model = eval_set.remove_columns([<span class="hljs-string">"example_id"</span>, <span class="hljs-string">"offset_mapping"</span>]) | |
| eval_set_for_model.set_format(<span class="hljs-string">"numpy"</span>) | |
| batch = {k: eval_set_for_model[k] <span class="hljs-keyword">for</span> k <span class="hljs-keyword">in</span> eval_set_for_model.column_names} | |
| trained_model = TFAutoModelForQuestionAnswering.from_pretrained(trained_checkpoint) | |
| outputs = trained_model(**batch)`,wrap:!1}}),p=new f({props:{code:"c3RhcnRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5zdGFydF9sb2dpdHMubnVtcHkoKSUwQWVuZF9sb2dpdHMlMjAlM0QlMjBvdXRwdXRzLmVuZF9sb2dpdHMubnVtcHkoKQ==",highlighted:`start_logits = outputs.start_logits.numpy() | |
| end_logits = outputs.end_logits.numpy()`,wrap:!1}}),{c(){J(i.$$.fragment),j=s(),r=o("p"),r.textContent=y,h=s(),J(p.$$.fragment)},l(b){U(i.$$.fragment,b),j=n(b),r=d(b,"P",{"data-svelte-h":!0}),m(r)!=="svelte-5sbqmo"&&(r.textContent=y),h=n(b),U(p.$$.fragment,b)},m(b,Z){w(i,b,Z),a(b,j,Z),a(b,r,Z),a(b,h,Z),w(p,b,Z),I=!0},i(b){I||(c(i.$$.fragment,b),c(p.$$.fragment,b),I=!0)},o(b){u(i.$$.fragment,b),u(p.$$.fragment,b),I=!1},d(b){b&&(l(j),l(r),l(h)),T(i,b),T(p,b)}}}function lM(_){let i,j,r,y="Deoarece <code>Trainer</code> ne va oferi predicții sub formă de matrici NumPy, preluăm logiturile de început și de sfârșit și le convertim în acest format:",h,p,I;return i=new f({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b01vZGVsRm9yUXVlc3Rpb25BbnN3ZXJpbmclMEElMEFldmFsX3NldF9mb3JfbW9kZWwlMjAlM0QlMjBldmFsX3NldC5yZW1vdmVfY29sdW1ucyglNUIlMjJleGFtcGxlX2lkJTIyJTJDJTIwJTIyb2Zmc2V0X21hcHBpbmclMjIlNUQpJTBBZXZhbF9zZXRfZm9yX21vZGVsLnNldF9mb3JtYXQoJTIydG9yY2glMjIpJTBBJTBBZGV2aWNlJTIwJTNEJTIwdG9yY2guZGV2aWNlKCUyMmN1ZGElMjIpJTIwaWYlMjB0b3JjaC5jdWRhLmlzX2F2YWlsYWJsZSgpJTIwZWxzZSUyMHRvcmNoLmRldmljZSglMjJjcHUlMjIpJTBBYmF0Y2glMjAlM0QlMjAlN0JrJTNBJTIwZXZhbF9zZXRfZm9yX21vZGVsJTVCayU1RC50byhkZXZpY2UpJTIwZm9yJTIwayUyMGluJTIwZXZhbF9zZXRfZm9yX21vZGVsLmNvbHVtbl9uYW1lcyU3RCUwQXRyYWluZWRfbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQodHJhaW5lZF9jaGVja3BvaW50KS50byglMEElMjAlMjAlMjAlMjBkZXZpY2UlMEEpJTBBJTBBd2l0aCUyMHRvcmNoLm5vX2dyYWQoKSUzQSUwQSUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjB0cmFpbmVkX21vZGVsKCoqYmF0Y2gp",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForQuestionAnswering | |
| eval_set_for_model = eval_set.remove_columns([<span class="hljs-string">"example_id"</span>, <span class="hljs-string">"offset_mapping"</span>]) | |
| eval_set_for_model.set_format(<span class="hljs-string">"torch"</span>) | |
| device = torch.device(<span class="hljs-string">"cuda"</span>) <span class="hljs-keyword">if</span> torch.cuda.is_available() <span class="hljs-keyword">else</span> torch.device(<span class="hljs-string">"cpu"</span>) | |
| batch = {k: eval_set_for_model[k].to(device) <span class="hljs-keyword">for</span> k <span class="hljs-keyword">in</span> eval_set_for_model.column_names} | |
| trained_model = AutoModelForQuestionAnswering.from_pretrained(trained_checkpoint).to( | |
| device | |
| ) | |
| <span class="hljs-keyword">with</span> torch.no_grad(): | |
| outputs = trained_model(**batch)`,wrap:!1}}),p=new f({props:{code:"c3RhcnRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5zdGFydF9sb2dpdHMuY3B1KCkubnVtcHkoKSUwQWVuZF9sb2dpdHMlMjAlM0QlMjBvdXRwdXRzLmVuZF9sb2dpdHMuY3B1KCkubnVtcHkoKQ==",highlighted:`start_logits = outputs.start_logits.cpu().numpy() | |
| end_logits = outputs.end_logits.cpu().numpy()`,wrap:!1}}),{c(){J(i.$$.fragment),j=s(),r=o("p"),r.innerHTML=y,h=s(),J(p.$$.fragment)},l(b){U(i.$$.fragment,b),j=n(b),r=d(b,"P",{"data-svelte-h":!0}),m(r)!=="svelte-1skssne"&&(r.innerHTML=y),h=n(b),U(p.$$.fragment,b)},m(b,Z){w(i,b,Z),a(b,j,Z),a(b,r,Z),a(b,h,Z),w(p,b,Z),I=!0},i(b){I||(c(i.$$.fragment,b),c(p.$$.fragment,b),I=!0)},o(b){u(i.$$.fragment,b),u(p.$$.fragment,b),I=!1},d(b){b&&(l(j),l(r),l(h)),T(i,b),T(p,b)}}}function tM(_){let i,j="Acum să punem tot ce tocmai am făcut într-o funcție <code>compute_metrics()</code> pe care o vom folosi după antrenarea modelului nostru. Va trebui să transmitem puțin mai mult decât output logits, deoarece trebuie să căutăm în datasetul de caracteristici pentru offset și în datasetul de exemple pentru contextele originale:";return{c(){i=o("p"),i.innerHTML=j},l(r){i=d(r,"P",{"data-svelte-h":!0}),m(i)!=="svelte-bc2a4l"&&(i.innerHTML=j)},m(r,y){a(r,i,y)},d(r){r&&l(i)}}}function aM(_){let i,j="Acum să punem tot ce am făcut într-o funcție <code>compute_metrics()</code> pe care o vom folosi în <code>Trainer</code>. În mod normal, această funcție <code>compute_metrics()</code> primește doar un tuple <code>eval_preds</code> cu logiți și labels. Aici vom avea nevoie de ceva mai mult, deoarece trebuie să căutăm în dataset de caracteristici pentru offset și în datasetul de exemple pentru contextele originale, astfel încât nu vom putea utiliza această funcție pentru a obține rezultate de evaluare regulate în timpul antrenării. O vom utiliza doar la sfârșitul antrenamentului pentru a verifica rezultatele.",r,y,h="Funcția <code>compute_metrics()</code> grupează aceiași pași ca înainte; adăugăm doar o mică verificare în cazul în care nu obținem niciun răspuns valid (caz în care prezicem un șir gol).";return{c(){i=o("p"),i.innerHTML=j,r=s(),y=o("p"),y.innerHTML=h},l(p){i=d(p,"P",{"data-svelte-h":!0}),m(i)!=="svelte-hdsggt"&&(i.innerHTML=j),r=n(p),y=d(p,"P",{"data-svelte-h":!0}),m(y)!=="svelte-gyvupc"&&(y.innerHTML=h)},m(p,I){a(p,i,I),a(p,r,I),a(p,y,I)},d(p){p&&(l(i),l(r),l(y))}}}function sM(_){let i,j="Acum suntem gata să antrenăm modelul. Să-l creăm mai întâi, folosind clasa <code>TFAutoModelForQuestionAnswering</code> ca mai înainte:",r,y,h;return y=new f({props:{code:"bW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclF1ZXN0aW9uQW5zd2VyaW5nLmZyb21fcHJldHJhaW5lZChtb2RlbF9jaGVja3BvaW50KQ==",highlighted:"model = TFAutoModelForQuestionAnswering.from_pretrained(model_checkpoint)",wrap:!1}}),{c(){i=o("p"),i.innerHTML=j,r=s(),J(y.$$.fragment)},l(p){i=d(p,"P",{"data-svelte-h":!0}),m(i)!=="svelte-5to3ka"&&(i.innerHTML=j),r=n(p),U(y.$$.fragment,p)},m(p,I){a(p,i,I),a(p,r,I),w(y,p,I),h=!0},i(p){h||(c(y.$$.fragment,p),h=!0)},o(p){u(y.$$.fragment,p),h=!1},d(p){p&&(l(i),l(r)),T(y,p)}}}function nM(_){let i,j="Acum suntem gata să antrenăm modelul. Să-l creăm mai întâi, folosind clasa <code>AutoModelForQuestionAnswering</code> ca și înainte:",r,y,h;return y=new f({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:"model = AutoModelForQuestionAnswering.from_pretrained(model_checkpoint)",wrap:!1}}),{c(){i=o("p"),i.innerHTML=j,r=s(),J(y.$$.fragment)},l(p){i=d(p,"P",{"data-svelte-h":!0}),m(i)!=="svelte-twb9q3"&&(i.innerHTML=j),r=n(p),U(y.$$.fragment,p)},m(p,I){a(p,i,I),a(p,r,I),w(y,p,I),h=!0},i(p){h||(c(y.$$.fragment,p),h=!0)},o(p){u(y.$$.fragment,p),h=!1},d(p){p&&(l(i),l(r)),T(y,p)}}}function iM(_){let i,j="Acum, putem crea dataseturile TF. De data aceasta, putem utiliza data collatorul de bază:",r,y,h,p,I="Și acum creăm dataseturile ca de obicei.",b,Z,A,x,W="În continuare, stabilim hiperparametrii de antrenament și compilăm modelul nostru:",X,G,g,V,H="În cele din urmă, suntem gata să ne antrenăm cu <code>model.fit()</code>. Folosim un <code>PushToHubCallback</code> pentru a încărca modelul în Hub după fiecare epocă.",D;return y=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERlZmF1bHREYXRhQ29sbGF0b3IlMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGVmYXVsdERhdGFDb2xsYXRvcihyZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DefaultDataCollator | |
| data_collator = DefaultDataCollator(return_tensors=<span class="hljs-string">"tf"</span>)`,wrap:!1}}),Z=new f({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMG1vZGVsLnByZXBhcmVfdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0QxNiUyQyUwQSklMEF0Zl9ldmFsX2RhdGFzZXQlMjAlM0QlMjBtb2RlbC5wcmVwYXJlX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwdmFsaWRhdGlvbl9kYXRhc2V0JTJDJTBBJTIwJTIwJTIwJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEMTYlMkMlMEEp",highlighted:`tf_train_dataset = model.prepare_tf_dataset( | |
| train_dataset, | |
| collate_fn=data_collator, | |
| shuffle=<span class="hljs-literal">True</span>, | |
| batch_size=<span class="hljs-number">16</span>, | |
| ) | |
| tf_eval_dataset = model.prepare_tf_dataset( | |
| validation_dataset, | |
| collate_fn=data_collator, | |
| shuffle=<span class="hljs-literal">False</span>, | |
| batch_size=<span class="hljs-number">16</span>, | |
| )`,wrap:!1}}),G=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFmcm9tJTIwdHJhbnNmb3JtZXJzLmtlcmFzX2NhbGxiYWNrcyUyMGltcG9ydCUyMFB1c2hUb0h1YkNhbGxiYWNrJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEElMjMlMjBOdW0lQzQlODNydWwlMjBldGFwZWxvciUyMGRlJTIwYW50cmVuYXJlJTIwZXN0ZSUyMG51bSVDNCU4M3J1bCUyMGRlJTIwc2FtcGxldXJpJTIwZGluJTIwZGF0YXNldCUyQyUyMCVDMyVBRW1wJUM0JTgzciVDOCU5Qml0JTIwbGElMjBkaW1lbnNpdW5lYSUyMGJhdGNoLXVsdWklMkMlMjBhcG9pJTIwJUMzJUFFbm11bCVDOCU5Qml0JTBBJTIzJTIwY3UlMjBudW0lQzQlODNydWwlMjB0b3RhbCUyMGRlJTIwZXBvY2kuJTIwUmUlQzglOUJpbmUlQzglOUJpJTIwYyVDNCU4MyUyMGRhdGFzZXR1bCUyMHRmX3RyYWluX2RhdGFzZXQlMjBkZSUyMGFpY2klMjBlc3RlJTIwdW4lMjBiYXRjaGVkJTIwdGYuZGF0YS5EYXRhc2V0JTJDJTBBJTIzJTIwbnUlMjBkYXRhc2V0dWwlMjBvcmlnaW5hbCUyMEh1Z2dpbmclMjBGYWNlJTJDJTIwZGVjaSUyMGxlbigpJTIwZXN0ZSUyMGRlamElMjBudW1fc2FtcGxlcyUyMCUyRiUyRiUyMGJhdGNoX3NpemUuJTBBbnVtX3RyYWluX2Vwb2NocyUyMCUzRCUyMDMlMEFudW1fdHJhaW5fc3RlcHMlMjAlM0QlMjBsZW4odGZfdHJhaW5fZGF0YXNldCklMjAqJTIwbnVtX3RyYWluX2Vwb2NocyUwQW9wdGltaXplciUyQyUyMHNjaGVkdWxlJTIwJTNEJTIwY3JlYXRlX29wdGltaXplciglMEElMjAlMjAlMjAlMjBpbml0X2xyJTNEMmUtNSUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluX3N0ZXBzJTNEbnVtX3RyYWluX3N0ZXBzJTJDJTBBJTIwJTIwJTIwJTIwd2VpZ2h0X2RlY2F5X3JhdGUlM0QwLjAxJTJDJTBBKSUwQW1vZGVsLmNvbXBpbGUob3B0aW1pemVyJTNEb3B0aW1pemVyKSUwQSUwQSUyMyUyMEFudHJlbmFyZWElMjAlQzMlQUVuJTIwbWl4ZWQtcHJlY2lzaW9uJTIwZmxvYXQxNiUwQXRmLmtlcmFzLm1peGVkX3ByZWNpc2lvbi5zZXRfZ2xvYmFsX3BvbGljeSglMjJtaXhlZF9mbG9hdDE2JTIyKQ==",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 batch-ului, 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 batched tf.data.Dataset,</span> | |
| <span class="hljs-comment"># nu datasetul original Hugging Face, deci len() este deja num_samples // batch_size.</span> | |
| num_train_epochs = <span class="hljs-number">3</span> | |
| num_train_steps = <span class="hljs-built_in">len</span>(tf_train_dataset) * num_train_epochs | |
| optimizer, schedule = create_optimizer( | |
| init_lr=<span class="hljs-number">2e-5</span>, | |
| num_warmup_steps=<span class="hljs-number">0</span>, | |
| num_train_steps=num_train_steps, | |
| weight_decay_rate=<span class="hljs-number">0.01</span>, | |
| ) | |
| model.<span class="hljs-built_in">compile</span>(optimizer=optimizer) | |
| <span class="hljs-comment"># Antrenarea în mixed-precision float16</span> | |
| tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">"mixed_float16"</span>)`,wrap:!1}}),{c(){i=o("p"),i.textContent=j,r=s(),J(y.$$.fragment),h=s(),p=o("p"),p.textContent=I,b=s(),J(Z.$$.fragment),A=s(),x=o("p"),x.textContent=W,X=s(),J(G.$$.fragment),g=s(),V=o("p"),V.innerHTML=H},l(B){i=d(B,"P",{"data-svelte-h":!0}),m(i)!=="svelte-ba9kr5"&&(i.textContent=j),r=n(B),U(y.$$.fragment,B),h=n(B),p=d(B,"P",{"data-svelte-h":!0}),m(p)!=="svelte-10ar93s"&&(p.textContent=I),b=n(B),U(Z.$$.fragment,B),A=n(B),x=d(B,"P",{"data-svelte-h":!0}),m(x)!=="svelte-12ca2lk"&&(x.textContent=W),X=n(B),U(G.$$.fragment,B),g=n(B),V=d(B,"P",{"data-svelte-h":!0}),m(V)!=="svelte-toc6qs"&&(V.innerHTML=H)},m(B,v){a(B,i,v),a(B,r,v),w(y,B,v),a(B,h,v),a(B,p,v),a(B,b,v),w(Z,B,v),a(B,A,v),a(B,x,v),a(B,X,v),w(G,B,v),a(B,g,v),a(B,V,v),D=!0},i(B){D||(c(y.$$.fragment,B),c(Z.$$.fragment,B),c(G.$$.fragment,B),D=!0)},o(B){u(y.$$.fragment,B),u(Z.$$.fragment,B),u(G.$$.fragment,B),D=!1},d(B){B&&(l(i),l(r),l(h),l(p),l(b),l(A),l(x),l(X),l(g),l(V)),T(y,B),T(Z,B),T(G,B)}}}function rM(_){let i,j='Odată făcut acest lucru, ne putem defini <code>TrainingArguments</code>. Așa cum am spus atunci când am definit funcția noastră pentru a calcula metrica, nu vom putea avea o buclă de evaluare obișnuită din cauza parametrilor funcției <code>compute_metrics()</code>. Am putea scrie propria noastră subclasă a <code>Trainer</code> pentru a face acest lucru (o abordare pe care o puteți găsi în <a href="https://github.com/huggingface/transformers/blob/master/examples/pytorch/question-answering/trainer_qa.py" rel="nofollow">scriptul exemplu pentru răspunderea la întrebări</a>), dar este un pic prea lung pentru această secțiune. În schimb, aici vom evalua modelul doar la sfârșitul antrenării și vă vom arăta cum să efectuați o evaluare obișnuită în secțiunea “O buclă de antrenare personalizată” de mai jos.',r,y,h="Acesta este într-adevăr locul în care API-ul <code>Trainer</code> își arată limitele și biblioteca 🤗 Accelerate strălucește: personalizarea clasei pentru un caz de utilizare specific poate fi greu de implementat, dar modificarea unei bucle de antrenare complet expuse este ușoară.",p,I,b="Să aruncăm o privire la <code>TrainingArguments</code>:",Z,A,x,W,X="Am mai văzut cele mai multe dintre acestea: stabilim niște hiperparametrii (cum ar fi learning rate, numărul de epoci pentru antrenament și o anumită scădere a weighturilor) și indicăm că dorim să salvăm modelul la sfârșitul fiecărei epoci, să sărim peste evaluare și să încărcăm rezultatele noastre în Model Hub. De asemenea, activăm antrenarea cu precizie mixtă cu <code>fp16=True</code>, deoarece aceasta poate accelera foarte mult antrenarea pe un GPU recent.",G;return A=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUwQSUyMCUyMCUyMCUyMCUyMmJlcnQtZmluZXR1bmVkLXNxdWFkJTIyJTJDJTBBJTIwJTIwJTIwJTIwZXZhbHVhdGlvbl9zdHJhdGVneSUzRCUyMm5vJTIyJTJDJTBBJTIwJTIwJTIwJTIwc2F2ZV9zdHJhdGVneSUzRCUyMmVwb2NoJTIyJTJDJTBBJTIwJTIwJTIwJTIwbGVhcm5pbmdfcmF0ZSUzRDJlLTUlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5fZXBvY2hzJTNEMyUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9kZWNheSUzRDAuMDElMkMlMEElMjAlMjAlMjAlMjBmcDE2JTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMHB1c2hfdG9faHViJTNEVHJ1ZSUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments | |
| args = TrainingArguments( | |
| <span class="hljs-string">"bert-finetuned-squad"</span>, | |
| evaluation_strategy=<span class="hljs-string">"no"</span>, | |
| save_strategy=<span class="hljs-string">"epoch"</span>, | |
| learning_rate=<span class="hljs-number">2e-5</span>, | |
| num_train_epochs=<span class="hljs-number">3</span>, | |
| weight_decay=<span class="hljs-number">0.01</span>, | |
| fp16=<span class="hljs-literal">True</span>, | |
| push_to_hub=<span class="hljs-literal">True</span>, | |
| )`,wrap:!1}}),{c(){i=o("p"),i.innerHTML=j,r=s(),y=o("p"),y.innerHTML=h,p=s(),I=o("p"),I.innerHTML=b,Z=s(),J(A.$$.fragment),x=s(),W=o("p"),W.innerHTML=X},l(g){i=d(g,"P",{"data-svelte-h":!0}),m(i)!=="svelte-nld63s"&&(i.innerHTML=j),r=n(g),y=d(g,"P",{"data-svelte-h":!0}),m(y)!=="svelte-qzhui5"&&(y.innerHTML=h),p=n(g),I=d(g,"P",{"data-svelte-h":!0}),m(I)!=="svelte-66qguj"&&(I.innerHTML=b),Z=n(g),U(A.$$.fragment,g),x=n(g),W=d(g,"P",{"data-svelte-h":!0}),m(W)!=="svelte-12xjp3r"&&(W.innerHTML=X)},m(g,V){a(g,i,V),a(g,r,V),a(g,y,V),a(g,p,V),a(g,I,V),a(g,Z,V),w(A,g,V),a(g,x,V),a(g,W,V),G=!0},i(g){G||(c(A.$$.fragment,g),G=!0)},o(g){u(A.$$.fragment,g),G=!1},d(g){g&&(l(i),l(r),l(y),l(p),l(I),l(Z),l(x),l(W)),T(A,g)}}}function MM(_){let i,j;return i=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5rZXJhc19jYWxsYmFja3MlMjBpbXBvcnQlMjBQdXNoVG9IdWJDYWxsYmFjayUwQSUwQWNhbGxiYWNrJTIwJTNEJTIwUHVzaFRvSHViQ2FsbGJhY2sob3V0cHV0X2RpciUzRCUyMmJlcnQtZmluZXR1bmVkLXNxdWFkJTIyJTJDJTIwdG9rZW5pemVyJTNEdG9rZW5pemVyKSUwQSUwQSUyMyUyMFZvbSUyMGZhY2UlMjB2YWxpZGFyZWElMjBkdXAlQzQlODMlMjBhY2VlYSUyQyUyMGRlY2klMjBudSUyMHZvbSUyMGZhY2UlMjBvJTIwdmFsaWRhcmUlMjAlQzMlQUVuJTIwdGltcHVsJTIwYW50cmVuJUM0JTgzcmlpJTBBbW9kZWwuZml0KHRmX3RyYWluX2RhdGFzZXQlMkMlMjBjYWxsYmFja3MlM0QlNUJjYWxsYmFjayU1RCUyQyUyMGVwb2NocyUzRG51bV90cmFpbl9lcG9jaHMp",highlighted:`<span class="hljs-keyword">from</span> transformers.keras_callbacks <span class="hljs-keyword">import</span> PushToHubCallback | |
| callback = PushToHubCallback(output_dir=<span class="hljs-string">"bert-finetuned-squad"</span>, tokenizer=tokenizer) | |
| <span class="hljs-comment"># Vom face validarea după aceea, deci nu vom face o validare în timpul antrenării</span> | |
| model.fit(tf_train_dataset, callbacks=[callback], epochs=num_train_epochs)`,wrap:!1}}),{c(){J(i.$$.fragment)},l(r){U(i.$$.fragment,r)},m(r,y){w(i,r,y),j=!0},i(r){j||(c(i.$$.fragment,r),j=!0)},o(r){u(i.$$.fragment,r),j=!1},d(r){T(i,r)}}}function pM(_){let i,j,r,y="În cele din urmă, trecem totul în clasa <code>Trainer</code> și lansăm antrenarea:",h,p,I;return i=new Fn({props:{$$slots:{default:[cM]},$$scope:{ctx:_}}}),p=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluZXIlMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUzRG1vZGVsJTJDJTBBJTIwJTIwJTIwJTIwYXJncyUzRGFyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdHJhaW5fZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMGV2YWxfZGF0YXNldCUzRHZhbGlkYXRpb25fZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMHRva2VuaXplciUzRHRva2VuaXplciUyQyUwQSklMEF0cmFpbmVyLnRyYWluKCk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer | |
| trainer = Trainer( | |
| model=model, | |
| args=args, | |
| train_dataset=train_dataset, | |
| eval_dataset=validation_dataset, | |
| tokenizer=tokenizer, | |
| ) | |
| trainer.train()`,wrap:!1}}),{c(){J(i.$$.fragment),j=s(),r=o("p"),r.innerHTML=y,h=s(),J(p.$$.fragment)},l(b){U(i.$$.fragment,b),j=n(b),r=d(b,"P",{"data-svelte-h":!0}),m(r)!=="svelte-i3yxyu"&&(r.innerHTML=y),h=n(b),U(p.$$.fragment,b)},m(b,Z){w(i,b,Z),a(b,j,Z),a(b,r,Z),a(b,h,Z),w(p,b,Z),I=!0},i(b){I||(c(i.$$.fragment,b),c(p.$$.fragment,b),I=!0)},o(b){u(i.$$.fragment,b),u(p.$$.fragment,b),I=!1},d(b){b&&(l(j),l(r),l(h)),T(i,b),T(p,b)}}}function cM(_){let i,j="💡 Dacă folderul de ieșire pe care îl utilizați există, acesta trebuie să fie o clonă locală a repositoriul în care doriți să faceți push (deci setați un nume nou dacă primiți o eroare la definirea <code>Trainer</code>).";return{c(){i=o("p"),i.innerHTML=j},l(r){i=d(r,"P",{"data-svelte-h":!0}),m(i)!=="svelte-1pogh1v"&&(i.innerHTML=j)},m(r,y){a(r,i,y)},p:Sn,d(r){r&&l(i)}}}function uM(_){let i,j="Odată ce antrenamentul este complet, putem în sfârșit să ne evaluăm modelul (și să ne rugăm să nu fi cheltuit tot timpul de calcul degeaba). Metoda <code>predict()</code> a modelului nostru <code>model</code> se va ocupa de obținerea predicțiilor și, deoarece am făcut toată munca grea de definire a unei funcții <code>compute_metrics()</code> mai devreme, putem obține rezultatele noastre într-o singură linie:",r,y,h;return y=new f({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjBtb2RlbC5wcmVkaWN0KHRmX2V2YWxfZGF0YXNldCklMEFjb21wdXRlX21ldHJpY3MoJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlNUIlMjJzdGFydF9sb2dpdHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBwcmVkaWN0aW9ucyU1QiUyMmVuZF9sb2dpdHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjB2YWxpZGF0aW9uX2RhdGFzZXQlMkMlMEElMjAlMjAlMjAlMjByYXdfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBKQ==",highlighted:`predictions = model.predict(tf_eval_dataset) | |
| compute_metrics( | |
| predictions[<span class="hljs-string">"start_logits"</span>], | |
| predictions[<span class="hljs-string">"end_logits"</span>], | |
| validation_dataset, | |
| raw_datasets[<span class="hljs-string">"validation"</span>], | |
| )`,wrap:!1}}),{c(){i=o("p"),i.innerHTML=j,r=s(),J(y.$$.fragment)},l(p){i=d(p,"P",{"data-svelte-h":!0}),m(i)!=="svelte-d7dbsn"&&(i.innerHTML=j),r=n(p),U(y.$$.fragment,p)},m(p,I){a(p,i,I),a(p,r,I),w(y,p,I),h=!0},i(p){h||(c(y.$$.fragment,p),h=!0)},o(p){u(y.$$.fragment,p),h=!1},d(p){p&&(l(i),l(r)),T(y,p)}}}function oM(_){let i,j="Odată ce antrenamentul este complet, putem în cele din urmă să evaluăm modelul (și să ne rugăm să nu fi petrecut tot timpul de calcul degeaba). Metoda <code>predict()</code> a <code>Trainer</code> va returna un tuple în care primele elemente vor fi predicțiile modelului (aici o pereche cu logiturile de început și de sfârșit). Trimitem acest rezultat funcției noastre <code>compute_metrics()</code>:",r,y,h;return y=new f({props:{code:"cHJlZGljdGlvbnMlMkMlMjBfJTJDJTIwXyUyMCUzRCUyMHRyYWluZXIucHJlZGljdCh2YWxpZGF0aW9uX2RhdGFzZXQpJTBBc3RhcnRfbG9naXRzJTJDJTIwZW5kX2xvZ2l0cyUyMCUzRCUyMHByZWRpY3Rpb25zJTBBY29tcHV0ZV9tZXRyaWNzKHN0YXJ0X2xvZ2l0cyUyQyUyMGVuZF9sb2dpdHMlMkMlMjB2YWxpZGF0aW9uX2RhdGFzZXQlMkMlMjByYXdfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEKQ==",highlighted:`predictions, _, _ = trainer.predict(validation_dataset) | |
| start_logits, end_logits = predictions | |
| compute_metrics(start_logits, end_logits, validation_dataset, raw_datasets[<span class="hljs-string">"validation"</span>])`,wrap:!1}}),{c(){i=o("p"),i.innerHTML=j,r=s(),J(y.$$.fragment)},l(p){i=d(p,"P",{"data-svelte-h":!0}),m(i)!=="svelte-18gezv4"&&(i.innerHTML=j),r=n(p),U(y.$$.fragment,p)},m(p,I){a(p,i,I),a(p,r,I),w(y,p,I),h=!0},i(p){h||(c(y.$$.fragment,p),h=!0)},o(p){u(y.$$.fragment,p),h=!1},d(p){p&&(l(i),l(r)),T(y,p)}}}function Ar(_){let i,j="În final, folosim metoda <code>push_to_hub()</code> pentru a ne asigura că încărcăm cea mai recentă versiune a modelului:",r,y,h,p,I="Aceasta returnează URL-ul commit-ului pe care tocmai l-a făcut, dacă doriți să îl inspectați:",b,Z,A,x,W="De asemenea, <code>Trainer</code> redactează un model card cu toate rezultatele evaluării și o încarcă.",X;return y=new f({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yihjb21taXRfbWVzc2FnZSUzRCUyMlRyYWluaW5nJTIwY29tcGxldGUlMjIp",highlighted:'trainer.push_to_hub(commit_message=<span class="hljs-string">"Training complete"</span>)',wrap:!1}}),Z=new f({props:{code:"J2h0dHBzJTNBJTJGJTJGaHVnZ2luZ2ZhY2UuY28lMkZzZ3VnZ2VyJTJGYmVydC1maW5ldHVuZWQtc3F1YWQlMkZjb21taXQlMkY5ZGNlZTFmYmMyNTk0NmE2ZWQ0YmIzMmVmYjFiZDcxZDVmYTkwYjY4Jw==",highlighted:'<span class="hljs-string">'https://huggingface.co/sgugger/bert-finetuned-squad/commit/9dcee1fbc25946a6ed4bb32efb1bd71d5fa90b68'</span>',wrap:!1}}),{c(){i=o("p"),i.innerHTML=j,r=s(),J(y.$$.fragment),h=s(),p=o("p"),p.textContent=I,b=s(),J(Z.$$.fragment),A=s(),x=o("p"),x.innerHTML=W},l(G){i=d(G,"P",{"data-svelte-h":!0}),m(i)!=="svelte-s703ve"&&(i.innerHTML=j),r=n(G),U(y.$$.fragment,G),h=n(G),p=d(G,"P",{"data-svelte-h":!0}),m(p)!=="svelte-minlnj"&&(p.textContent=I),b=n(G),U(Z.$$.fragment,G),A=n(G),x=d(G,"P",{"data-svelte-h":!0}),m(x)!=="svelte-ib1p1j"&&(x.innerHTML=W)},m(G,g){a(G,i,g),a(G,r,g),w(y,G,g),a(G,h,g),a(G,p,g),a(G,b,g),w(Z,G,g),a(G,A,g),a(G,x,g),X=!0},i(G){X||(c(y.$$.fragment,G),c(Z.$$.fragment,G),X=!0)},o(G){u(y.$$.fragment,G),u(Z.$$.fragment,G),X=!1},d(G){G&&(l(i),l(r),l(h),l(p),l(b),l(A),l(x)),T(y,G),T(Z,G)}}}function dM(_){let i,j="✏️ <strong>E rândul tău!</strong> Încearcă un alt model de arhitectură pentru a vedea dacă are performanțe mai bune la această sarcină!";return{c(){i=o("p"),i.innerHTML=j},l(r){i=d(r,"P",{"data-svelte-h":!0}),m(i)!=="svelte-pczt5o"&&(i.innerHTML=j)},m(r,y){a(r,i,y)},p:Sn,d(r){r&&l(i)}}}function vr(_){let i,j="Dacă doriți să pătrundeți puțin mai adânc în bucla de antrenare, vă vom arăta acum cum să faceți același lucru folosind 🤗 Accelerate.",r,y,h,p,I='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. Aceasta va semăna foarte mult cu bucla de antrenare din <a href="/course/chapter3/4">Capitolul 3</a>, cu excepția buclei de evaluare. Vom putea evalua modelul în mod regulat, deoarece nu mai suntem constrânși de clasa <code>Trainer</code>.',b,Z,A,x,W="Mai întâi trebuie să construim <code>DataLoader</code>s din dataseturile noastre. Am setat formatul acestor dataseturi la <code>"torch"</code> și am eliminat coloanele din setul de validare care nu sunt utilizate de model. Apoi, putem utiliza <code>default_data_collator</code> furnizat de Transformers ca un <code>collate_fn</code> și să amestecăm setul de antrenare, dar nu și setul de validare:",X,G,g,V,H="Î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 BERT:",D,B,v,xe,ll="Atunci vom avea nevoie de un optimizator. Ca de obicei, folosim clasicul <code>AdamW</code>, care este ca Adam, dar cu o corecție în modul în care se aplică scăderea weighturilor:",L,Ae,Ee,$,tl="Odată ce avem toate aceste obiecte, le putem trimite metodei <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 antrenament, care nu ar trebui să execute nicio celulă care inițializează un <code>Accelerator</code>. Putem forța antrenarea cu precizie mixtă trecând <code>fp16=True</code> la <code>Accelerator</code> (sau, dacă executați codul ca un script, asigurați-vă că completați <code>config</code> în 🤗 Accelerate în mod corespunzător).",P,K,O,ve,al="După cum ar trebui să știți din secțiunile anterioare, putem utiliza lungimea <code>train_dataloader</code> pentru a calcula numărul de pași de antrenare numai după ce a trecut prin metoda <code>accelerator.prepare()</code>. Utilizăm același program liniar ca în secțiunile anterioare:",ee,le,te,Ve,sl="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 repositoriul 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>):",ae,se,ne,We,Fe,Q,nl="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:",ie,re,Me,Xe,il="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.",pe,ce,ue,oe,ke="Acum suntem pregătiți să scriem bucla de antrenare completă. După definirea unei bare de progres pentru a urmări modul în care decurge antrenamentul, bucla are trei părți:",rl,de,Re="<li>Pregătirea în sine, care este iterația clasică peste <code>train_dataloader</code>, trecerea înainte prin model, apoi trecerea înapoi și pasul optimizatorului.</li> <li>Evaluarea, în care adunăm toate valorile pentru <code>start_logits</code> și <code>end_logits</code> înainte de a le converti în matrici NumPy. Odată ce bucla de evaluare este terminată, concatenăm toate rezultatele. Rețineți că trebuie să truncăm deoarece <code>Accelerator</code> ar fi putut adăuga câteva exemple la sfârșit pentru a ne asigura că avem același număr de exemple în fiecare proces.</li> <li>Salvarea și încărcarea, unde mai întâi salvăm modelul și tokenizatorul, apoi apelăm <code>repo.push_to_hub()</code>. Ca și înainte, folosim argumentul <code>blocking=False</code> pentru a spune bibliotecii 🤗 Hub să efectueze push-ul într-un proces asincron. În acest fel, antrenamentul continuă normal, iar această instrucțiune (lungă) este executată pe fundal.</li>",Ml,me,$e="Iată codul complet pentru bucla de antrenare:",He,z,Se,N,xa="În cazul în care este prima dată când vedeți un model salvat cu 🤗 Accelerate, să ne oprim puțin pentru a inspecta cele trei linii de cod care îl însoțesc:",qe,Y,De,E,pl="Prima linie se explică de la sine: aceasta spune tuturor proceselor să aștepte până când toată lumea se află în etapa respectivă înainte de a continua. Acest lucru are rolul de a ne asigura că avem același model în fiecare proces înainte de salvare. Apoi luăm <code>unwrapped_model</code>, care este modelul de bază pe care l-am definit. Metoda <code>accelerator.prepare()</code> modifică modelul pentru a funcționa în antrenarea distribuită, deci nu va mai avea metoda <code>save_pretrained()</code>; metoda <code>accelerator.unwrap_model()</code> anulează acest pas. În cele din urmă, apelăm metoda <code>save_pretrained()</code>, dar îi spunem să folosească metoda <code>accelerator.save()</code> în loc de <code>torch.save()</code>.",ye,Qe,cl='Odată făcut acest lucru, ar trebui să aveți un model care produce rezultate destul de asemănătoare cu cel antrenat cu <code>Trainer</code>. Puteți verifica modelul pe care l-am antrenat folosind acest cod pe [<em>huggingface-course/bert-finetuned-squad-accelerate</em>] (<a href="https://huggingface.co/huggingface-course/bert-finetuned-squad-accelerate" rel="nofollow">https://huggingface.co/huggingface-course/bert-finetuned-squad-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!',Je;return y=new q({props:{title:"O buclă de antrenare personalizată",local:"a-custom-training-loop",headingTag:"h2"}}),Z=new q({props:{title:"Pregătirea pentru antrenament",local:"preparing-everything-for-training",headingTag:"h3"}}),G=new f({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGRlZmF1bHRfZGF0YV9jb2xsYXRvciUwQSUwQXRyYWluX2RhdGFzZXQuc2V0X2Zvcm1hdCglMjJ0b3JjaCUyMiklMEF2YWxpZGF0aW9uX3NldCUyMCUzRCUyMHZhbGlkYXRpb25fZGF0YXNldC5yZW1vdmVfY29sdW1ucyglNUIlMjJleGFtcGxlX2lkJTIyJTJDJTIwJTIyb2Zmc2V0X21hcHBpbmclMjIlNUQpJTBBdmFsaWRhdGlvbl9zZXQuc2V0X2Zvcm1hdCglMjJ0b3JjaCUyMiklMEElMEF0cmFpbl9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGVmYXVsdF9kYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDglMkMlMEEpJTBBZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB2YWxpZGF0aW9uX3NldCUyQyUyMGNvbGxhdGVfZm4lM0RkZWZhdWx0X2RhdGFfY29sbGF0b3IlMkMlMjBiYXRjaF9zaXplJTNEOCUwQSk=",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> default_data_collator | |
| train_dataset.set_format(<span class="hljs-string">"torch"</span>) | |
| validation_set = validation_dataset.remove_columns([<span class="hljs-string">"example_id"</span>, <span class="hljs-string">"offset_mapping"</span>]) | |
| validation_set.set_format(<span class="hljs-string">"torch"</span>) | |
| train_dataloader = DataLoader( | |
| train_dataset, | |
| shuffle=<span class="hljs-literal">True</span>, | |
| collate_fn=default_data_collator, | |
| batch_size=<span class="hljs-number">8</span>, | |
| ) | |
| eval_dataloader = DataLoader( | |
| validation_set, collate_fn=default_data_collator, batch_size=<span class="hljs-number">8</span> | |
| )`,wrap:!1}}),B=new f({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:"model = AutoModelForQuestionAnswering.from_pretrained(model_checkpoint)",wrap:!1}}),Ae=new f({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDJlLTUp",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW | |
| optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">2e-5</span>)`,wrap:!1}}),K=new f({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQSUwQWFjY2VsZXJhdG9yJTIwJTNEJTIwQWNjZWxlcmF0b3IoZnAxNiUzRFRydWUpJTBBbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMkMlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwYWNjZWxlcmF0b3IucHJlcGFyZSglMEElMjAlMjAlMjAlMjBtb2RlbCUyQyUyMG9wdGltaXplciUyQyUyMHRyYWluX2RhdGFsb2FkZXIlMkMlMjBldmFsX2RhdGFsb2FkZXIlMEEp",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> Accelerator | |
| accelerator = Accelerator(fp16=<span class="hljs-literal">True</span>) | |
| model, optimizer, train_dataloader, eval_dataloader = accelerator.prepare( | |
| model, optimizer, train_dataloader, eval_dataloader | |
| )`,wrap:!1}}),le=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fdHJhaW5fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV91cGRhdGVfc3RlcHNfcGVyX2Vwb2NoJTIwJTNEJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX3RyYWluX2Vwb2NocyUyMColMjBudW1fdXBkYXRlX3N0ZXBzX3Blcl9lcG9jaCUwQSUwQWxyX3NjaGVkdWxlciUyMCUzRCUyMGdldF9zY2hlZHVsZXIoJTBBJTIwJTIwJTIwJTIwJTIybGluZWFyJTIyJTJDJTBBJTIwJTIwJTIwJTIwb3B0aW1pemVyJTNEb3B0aW1pemVyJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3dhcm11cF9zdGVwcyUzRDAlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5pbmdfc3RlcHMlM0RudW1fdHJhaW5pbmdfc3RlcHMlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler | |
| num_train_epochs = <span class="hljs-number">3</span> | |
| num_update_steps_per_epoch = <span class="hljs-built_in">len</span>(train_dataloader) | |
| num_training_steps = num_train_epochs * num_update_steps_per_epoch | |
| lr_scheduler = get_scheduler( | |
| <span class="hljs-string">"linear"</span>, | |
| optimizer=optimizer, | |
| num_warmup_steps=<span class="hljs-number">0</span>, | |
| num_training_steps=num_training_steps, | |
| )`,wrap:!1}}),se=new f({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMFJlcG9zaXRvcnklMkMlMjBnZXRfZnVsbF9yZXBvX25hbWUlMEElMEFtb2RlbF9uYW1lJTIwJTNEJTIwJTIyYmVydC1maW5ldHVuZWQtc3F1YWQtYWNjZWxlcmF0ZSUyMiUwQXJlcG9fbmFtZSUyMCUzRCUyMGdldF9mdWxsX3JlcG9fbmFtZShtb2RlbF9uYW1lKSUwQXJlcG9fbmFtZQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> Repository, get_full_repo_name | |
| model_name = <span class="hljs-string">"bert-finetuned-squad-accelerate"</span> | |
| repo_name = get_full_repo_name(model_name) | |
| repo_name`,wrap:!1}}),We=new f({props:{code:"J3NndWdnZXIlMkZiZXJ0LWZpbmV0dW5lZC1zcXVhZC1hY2NlbGVyYXRlJw==",highlighted:'<span class="hljs-string">'sgugger/bert-finetuned-squad-accelerate'</span>',wrap:!1}}),re=new f({props:{code:"b3V0cHV0X2RpciUyMCUzRCUyMCUyMmJlcnQtZmluZXR1bmVkLXNxdWFkLWFjY2VsZXJhdGUlMjIlMEFyZXBvJTIwJTNEJTIwUmVwb3NpdG9yeShvdXRwdXRfZGlyJTJDJTIwY2xvbmVfZnJvbSUzRHJlcG9fbmFtZSk=",highlighted:`output_dir = <span class="hljs-string">"bert-finetuned-squad-accelerate"</span> | |
| repo = Repository(output_dir, clone_from=repo_name)`,wrap:!1}}),ce=new q({props:{title:"Bucla de antrenare",local:"training-loop",headingTag:"h2"}}),z=new f({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEFpbXBvcnQlMjB0b3JjaCUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFmb3IlMjBlcG9jaCUyMGluJTIwcmFuZ2UobnVtX3RyYWluX2Vwb2NocyklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBUcmFpbmluZyUwQSUyMCUyMCUyMCUyMG1vZGVsLnRyYWluKCklMEElMjAlMjAlMjAlMjBmb3IlMjBzdGVwJTJDJTIwYmF0Y2glMjBpbiUyMGVudW1lcmF0ZSh0cmFpbl9kYXRhbG9hZGVyKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBvdXRwdXRzLmxvc3MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY2NlbGVyYXRvci5iYWNrd2FyZChsb3NzKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBscl9zY2hlZHVsZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnplcm9fZ3JhZCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvZ3Jlc3NfYmFyLnVwZGF0ZSgxKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEV2YWx1YXRpb24lMEElMjAlMjAlMjAlMjBtb2RlbC5ldmFsKCklMEElMjAlMjAlMjAlMjBzdGFydF9sb2dpdHMlMjAlM0QlMjAlNUIlNUQlMEElMjAlMjAlMjAlMjBlbmRfbG9naXRzJTIwJTNEJTIwJTVCJTVEJTBBJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IucHJpbnQoJTIyRXZhbHVhdGlvbiElMjIpJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRxZG0oZXZhbF9kYXRhbG9hZGVyKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdpdGglMjB0b3JjaC5ub19ncmFkKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9sb2dpdHMuYXBwZW5kKGFjY2VsZXJhdG9yLmdhdGhlcihvdXRwdXRzLnN0YXJ0X2xvZ2l0cykuY3B1KCkubnVtcHkoKSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfbG9naXRzLmFwcGVuZChhY2NlbGVyYXRvci5nYXRoZXIob3V0cHV0cy5lbmRfbG9naXRzKS5jcHUoKS5udW1weSgpKSUwQSUwQSUyMCUyMCUyMCUyMHN0YXJ0X2xvZ2l0cyUyMCUzRCUyMG5wLmNvbmNhdGVuYXRlKHN0YXJ0X2xvZ2l0cyklMEElMjAlMjAlMjAlMjBlbmRfbG9naXRzJTIwJTNEJTIwbnAuY29uY2F0ZW5hdGUoZW5kX2xvZ2l0cyklMEElMjAlMjAlMjAlMjBzdGFydF9sb2dpdHMlMjAlM0QlMjBzdGFydF9sb2dpdHMlNUIlM0ElMjBsZW4odmFsaWRhdGlvbl9kYXRhc2V0KSU1RCUwQSUyMCUyMCUyMCUyMGVuZF9sb2dpdHMlMjAlM0QlMjBlbmRfbG9naXRzJTVCJTNBJTIwbGVuKHZhbGlkYXRpb25fZGF0YXNldCklNUQlMEElMEElMjAlMjAlMjAlMjBtZXRyaWNzJTIwJTNEJTIwY29tcHV0ZV9tZXRyaWNzKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0YXJ0X2xvZ2l0cyUyQyUyMGVuZF9sb2dpdHMlMkMlMjB2YWxpZGF0aW9uX2RhdGFzZXQlMkMlMjByYXdfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJlcG9jaCUyMCU3QmVwb2NoJTdEJTNBJTIyJTJDJTIwbWV0cmljcyklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTYXZlJTIwYW5kJTIwdXBsb2FkJTBBJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQSUyMCUyMCUyMCUyMHVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEElMjAlMjAlMjAlMjB1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSklMEElMjAlMjAlMjAlMjBpZiUyMGFjY2VsZXJhdG9yLmlzX21haW5fcHJvY2VzcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplci5zYXZlX3ByZXRyYWluZWQob3V0cHV0X2RpciklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvLnB1c2hfdG9faHViKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbW1pdF9tZXNzYWdlJTNEZiUyMlRyYWluaW5nJTIwaW4lMjBwcm9ncmVzcyUyMGVwb2NoJTIwJTdCZXBvY2glN0QlMjIlMkMlMjBibG9ja2luZyUzREZhbHNlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKQ==",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> step, batch <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(train_dataloader): | |
| outputs = model(**batch) | |
| loss = outputs.loss | |
| accelerator.backward(loss) | |
| optimizer.step() | |
| lr_scheduler.step() | |
| optimizer.zero_grad() | |
| progress_bar.update(<span class="hljs-number">1</span>) | |
| <span class="hljs-comment"># Evaluation</span> | |
| model.<span class="hljs-built_in">eval</span>() | |
| start_logits = [] | |
| end_logits = [] | |
| accelerator.<span class="hljs-built_in">print</span>(<span class="hljs-string">"Evaluation!"</span>) | |
| <span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> tqdm(eval_dataloader): | |
| <span class="hljs-keyword">with</span> torch.no_grad(): | |
| outputs = model(**batch) | |
| start_logits.append(accelerator.gather(outputs.start_logits).cpu().numpy()) | |
| end_logits.append(accelerator.gather(outputs.end_logits).cpu().numpy()) | |
| start_logits = np.concatenate(start_logits) | |
| end_logits = np.concatenate(end_logits) | |
| start_logits = start_logits[: <span class="hljs-built_in">len</span>(validation_dataset)] | |
| end_logits = end_logits[: <span class="hljs-built_in">len</span>(validation_dataset)] | |
| metrics = compute_metrics( | |
| start_logits, end_logits, validation_dataset, raw_datasets[<span class="hljs-string">"validation"</span>] | |
| ) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"epoch <span class="hljs-subst">{epoch}</span>:"</span>, metrics) | |
| <span class="hljs-comment"># 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"Training in progress epoch <span class="hljs-subst">{epoch}</span>"</span>, blocking=<span class="hljs-literal">False</span> | |
| )`,wrap:!1}}),Y=new f({props:{code:"YWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQXVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEF1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSk=",highlighted:`accelerator.wait_for_everyone() | |
| unwrapped_model = accelerator.unwrap_model(model) | |
| unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save)`,wrap:!1}}),{c(){i=o("p"),i.textContent=j,r=s(),J(y.$$.fragment),h=s(),p=o("p"),p.innerHTML=I,b=s(),J(Z.$$.fragment),A=s(),x=o("p"),x.innerHTML=W,X=s(),J(G.$$.fragment),g=s(),V=o("p"),V.textContent=H,D=s(),J(B.$$.fragment),v=s(),xe=o("p"),xe.innerHTML=ll,L=s(),J(Ae.$$.fragment),Ee=s(),$=o("p"),$.innerHTML=tl,P=s(),J(K.$$.fragment),O=s(),ve=o("p"),ve.innerHTML=al,ee=s(),J(le.$$.fragment),te=s(),Ve=o("p"),Ve.innerHTML=sl,ae=s(),J(se.$$.fragment),ne=s(),J(We.$$.fragment),Fe=s(),Q=o("p"),Q.textContent=nl,ie=s(),J(re.$$.fragment),Me=s(),Xe=o("p"),Xe.innerHTML=il,pe=s(),J(ce.$$.fragment),ue=s(),oe=o("p"),oe.textContent=ke,rl=s(),de=o("ul"),de.innerHTML=Re,Ml=s(),me=o("p"),me.textContent=$e,He=s(),J(z.$$.fragment),Se=s(),N=o("p"),N.textContent=xa,qe=s(),J(Y.$$.fragment),De=s(),E=o("p"),E.innerHTML=pl,ye=s(),Qe=o("p"),Qe.innerHTML=cl},l(M){i=d(M,"P",{"data-svelte-h":!0}),m(i)!=="svelte-3xgxxh"&&(i.textContent=j),r=n(M),U(y.$$.fragment,M),h=n(M),p=d(M,"P",{"data-svelte-h":!0}),m(p)!=="svelte-1wstw51"&&(p.innerHTML=I),b=n(M),U(Z.$$.fragment,M),A=n(M),x=d(M,"P",{"data-svelte-h":!0}),m(x)!=="svelte-bqhyi9"&&(x.innerHTML=W),X=n(M),U(G.$$.fragment,M),g=n(M),V=d(M,"P",{"data-svelte-h":!0}),m(V)!=="svelte-i17zah"&&(V.textContent=H),D=n(M),U(B.$$.fragment,M),v=n(M),xe=d(M,"P",{"data-svelte-h":!0}),m(xe)!=="svelte-1pya1ya"&&(xe.innerHTML=ll),L=n(M),U(Ae.$$.fragment,M),Ee=n(M),$=d(M,"P",{"data-svelte-h":!0}),m($)!=="svelte-1a091ew"&&($.innerHTML=tl),P=n(M),U(K.$$.fragment,M),O=n(M),ve=d(M,"P",{"data-svelte-h":!0}),m(ve)!=="svelte-1uaoy24"&&(ve.innerHTML=al),ee=n(M),U(le.$$.fragment,M),te=n(M),Ve=d(M,"P",{"data-svelte-h":!0}),m(Ve)!=="svelte-1m9qv0l"&&(Ve.innerHTML=sl),ae=n(M),U(se.$$.fragment,M),ne=n(M),U(We.$$.fragment,M),Fe=n(M),Q=d(M,"P",{"data-svelte-h":!0}),m(Q)!=="svelte-1lpxctd"&&(Q.textContent=nl),ie=n(M),U(re.$$.fragment,M),Me=n(M),Xe=d(M,"P",{"data-svelte-h":!0}),m(Xe)!=="svelte-1wk5dqw"&&(Xe.innerHTML=il),pe=n(M),U(ce.$$.fragment,M),ue=n(M),oe=d(M,"P",{"data-svelte-h":!0}),m(oe)!=="svelte-czuj7z"&&(oe.textContent=ke),rl=n(M),de=d(M,"UL",{"data-svelte-h":!0}),m(de)!=="svelte-tgva2t"&&(de.innerHTML=Re),Ml=n(M),me=d(M,"P",{"data-svelte-h":!0}),m(me)!=="svelte-1halqwm"&&(me.textContent=$e),He=n(M),U(z.$$.fragment,M),Se=n(M),N=d(M,"P",{"data-svelte-h":!0}),m(N)!=="svelte-155hsmd"&&(N.textContent=xa),qe=n(M),U(Y.$$.fragment,M),De=n(M),E=d(M,"P",{"data-svelte-h":!0}),m(E)!=="svelte-5hs3mu"&&(E.innerHTML=pl),ye=n(M),Qe=d(M,"P",{"data-svelte-h":!0}),m(Qe)!=="svelte-6fw6pb"&&(Qe.innerHTML=cl)},m(M,C){a(M,i,C),a(M,r,C),w(y,M,C),a(M,h,C),a(M,p,C),a(M,b,C),w(Z,M,C),a(M,A,C),a(M,x,C),a(M,X,C),w(G,M,C),a(M,g,C),a(M,V,C),a(M,D,C),w(B,M,C),a(M,v,C),a(M,xe,C),a(M,L,C),w(Ae,M,C),a(M,Ee,C),a(M,$,C),a(M,P,C),w(K,M,C),a(M,O,C),a(M,ve,C),a(M,ee,C),w(le,M,C),a(M,te,C),a(M,Ve,C),a(M,ae,C),w(se,M,C),a(M,ne,C),w(We,M,C),a(M,Fe,C),a(M,Q,C),a(M,ie,C),w(re,M,C),a(M,Me,C),a(M,Xe,C),a(M,pe,C),w(ce,M,C),a(M,ue,C),a(M,oe,C),a(M,rl,C),a(M,de,C),a(M,Ml,C),a(M,me,C),a(M,He,C),w(z,M,C),a(M,Se,C),a(M,N,C),a(M,qe,C),w(Y,M,C),a(M,De,C),a(M,E,C),a(M,ye,C),a(M,Qe,C),Je=!0},i(M){Je||(c(y.$$.fragment,M),c(Z.$$.fragment,M),c(G.$$.fragment,M),c(B.$$.fragment,M),c(Ae.$$.fragment,M),c(K.$$.fragment,M),c(le.$$.fragment,M),c(se.$$.fragment,M),c(We.$$.fragment,M),c(re.$$.fragment,M),c(ce.$$.fragment,M),c(z.$$.fragment,M),c(Y.$$.fragment,M),Je=!0)},o(M){u(y.$$.fragment,M),u(Z.$$.fragment,M),u(G.$$.fragment,M),u(B.$$.fragment,M),u(Ae.$$.fragment,M),u(K.$$.fragment,M),u(le.$$.fragment,M),u(se.$$.fragment,M),u(We.$$.fragment,M),u(re.$$.fragment,M),u(ce.$$.fragment,M),u(z.$$.fragment,M),u(Y.$$.fragment,M),Je=!1},d(M){M&&(l(i),l(r),l(h),l(p),l(b),l(A),l(x),l(X),l(g),l(V),l(D),l(v),l(xe),l(L),l(Ee),l($),l(P),l(O),l(ve),l(ee),l(te),l(Ve),l(ae),l(ne),l(Fe),l(Q),l(ie),l(Me),l(Xe),l(pe),l(ue),l(oe),l(rl),l(de),l(Ml),l(me),l(He),l(Se),l(N),l(qe),l(De),l(E),l(ye),l(Qe)),T(y,M),T(Z,M),T(G,M),T(B,M),T(Ae,M),T(K,M),T(le,M),T(se,M),T(We,M),T(re,M),T(ce,M),T(z,M),T(Y,M)}}}function mM(_){let i,j,r,y,h,p,I,b,Z,A,x,W,X="Este timpul să analizăm răspunsul la întrebări! Această sarcină are mai multe variante, dar cea pe care ne vom concentra în această secțiune se numește răspuns <em>extractiv</em> la întrebări. Aceasta presupune formularea de întrebări cu privire la un document și identificarea răspunsurilor ca <em>intervale de text</em> în documentul în sine.",G,g,V,H,D='Vom face fine-tuning unui-model BERT pe [datasetul SQuAD] (<a href="https://rajpurkar.github.io/SQuAD-explorer/" rel="nofollow">https://rajpurkar.github.io/SQuAD-explorer/</a>), care constă din întrebări adresate de mulțimea de lucrători pe un set de articole Wikipedia. Acest lucru ne va oferi un model capabil să calculeze predicții precum aceasta:',B,v,xe,ll,L,Ae='Aceasta este de fapt o prezentare a modelului care a fost antrenat și încărcat în Hub folosind codul prezentat în această secțiune. Puteți să-l găsiți și să verificați predicțiile <a href="https://huggingface.co/huggingface-course/bert-finetuned-squad?context=%F0%9F%A4%97+Transformers+is+backed+by+the+three+most+popular+deep+learning+libraries+%E2%80%94+Jax%2C+PyTorch+and+TensorFlow+%E2%80%94+with+a+seamless+integration+between+them.+It%27s+straightforward+to+train+your+models+with+one+before+loading+them+for+inference+with+the+other.&question=Which+deep+learning+libraries+back+%F0%9F%A4%97+Transformers%3F" rel="nofollow">aici</a>.',Ee,$,tl,P,K,O,ve='Datasetul care este cel mai utilizat ca referință academică pentru răspunderea extractivă la întrebări este <a href="https://rajpurkar.github.io/SQuAD-explorer/" rel="nofollow">SQuAD</a>, deci acesta este cel pe care îl vom utiliza aici. Există, de asemenea, un benchmark mai dificil <a href="https://huggingface.co/datasets/squad_v2" rel="nofollow">SQuAD v2</a>, care include întrebări care nu au un răspuns. Atât timp cât propriul dataset conține o coloană pentru contexte, o coloană pentru întrebări și o coloană pentru răspunsuri, ar trebui să puteți adapta pașii de mai jos.',al,ee,le,te,Ve="Ca de obicei, putem descărca și stoca în cache datasetul într-un singur pas datorită funcției <code>load_dataset()</code>:",sl,ae,se,ne,We="Ne putem uita apoi la acest obiect pentru a afla mai multe despre datasetul SQuAD:",Fe,Q,nl,ie,re,Me,Xe="Se pare că avem tot ce ne trebuie cu câmpurile <code>context</code>, <code>question</code> și <code>answers</code>, așa că să le afișăm pentru primul element al datasetului nostru de antrenare:",il,pe,ce,ue,oe,ke,rl="Câmpurile <code>context</code> și <code>question</code> sunt foarte simplu de utilizat. Câmpul <code>answers</code> este un pic mai complicat, deoarece conține un dicționar cu două câmpuri care sunt ambele liste. Acesta este formatul care va fi așteptat de metrica <code>squad</code> în timpul evaluării; dacă utilizați propriile date, nu trebuie neapărat să vă faceți griji cu privire la plasarea răspunsurilor în același format. Câmpul <code>text</code> este destul de evident, iar câmpul <code>answer_start</code> conține indicele caracterului de început al fiecărui răspuns din context.",de,Re,Ml="În timpul antrenamentului, există un singur răspuns posibil. Putem verifica acest lucru folosind metoda <code>Dataset.filter()</code>:",me,$e,He,z,Se,N,xa="Cu toate acestea, pentru evaluare, există mai multe răspunsuri posibile pentru fiecare sample, care pot fi identice sau diferite:",qe,Y,De,E,pl,ye,Qe="Nu ne vom aprofunda în scriptul de evaluare, deoarece totul va fi încorporat de o metrică 🤗 Datasets pentru noi, dar versiunea scurtă este că unele dintre întrebări au mai multe răspunsuri posibile, iar acest script va compara un răspuns prezis cu toate răspunsurile acceptabile și va lua cel mai bun scor. Dacă ne uităm la sampleul de la indexul 2, de exemplu:",cl,Je,M,C,Wa,ul,ii="putem vedea că răspunsul poate fi într-adevăr una dintre cele trei posibilități pe care le-am văzut anterior.",Xa,ol,ka,dl,Ra,ml,ri="Să începem cu preprocesarea datelor de antrenare. Partea dificilă va fi generarea labelurilor pentru răspunsul la întrebare, care vor fi pozițiile de început și de sfârșit ale tokenilor corespunzătoare răspunsului în context.",$a,yl,Mi="Dar să nu ne grăbim. În primul rând, trebuie să convertim textul din datele de intrare în ID-uri pe care modelul să le poată înțelege, utilizând un tokenizer:",Qa,Jl,za,Ul,pi='După cum am menționat anterior, vom face fine-tune unui model BERT, dar puteți utiliza orice alt tip de model, atâta timp cât are implementat un tokenizer rapid. Puteți vedea toate arhitecturile care vin cu o versiune rapidă în [acest tabel mare] (<a href="https://huggingface.co/transformers/#supported-frameworks" rel="nofollow">https://huggingface.co/transformers/#supported-frameworks</a>), iar pentru a verifica dacă obiectul <code>tokenizer</code> pe care îl utilizați este într-adevăr susținut de 🤗 Tokenizers, vă puteți uita la atributul său <code>is_fast</code>:',Na,wl,Ya,Tl,Ea,jl,ci="Putem transmite împreună întrebarea și contextul către tokenizerul nostru, iar acesta va introduce în mod corespunzător tokenii speciali pentru a forma o propoziție ca aceasta:",Fa,bl,Ha,fl,ui="Hai să verificăm de două ori:",Sa,hl,qa,Il,Da,Cl,oi="Labelurile vor fi apoi indexul tokenilor care încep și termină răspunsul, iar modelul va fi însărcinat să prezică un logit de început și de sfârșit pentru fiecare token din intrare, labelurile teoretice fiind următoarele:",La,Ke,di='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/qa_labels.svg" alt="One-hot encoded label pentru răspunderea la întrebări."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/qa_labels-dark.svg" alt="One-hot encoded label pentru răspunderea la întrebări."/>',Pa,Zl,mi='În acest caz, contextul nu este prea lung, dar unele dintre exemplele din dataset au contexte foarte lungi care vor depăși lungimea maximă pe care am stabilit-o (care este de 384 în acest caz). După cum am văzut în <a href="/course/chapter6/4">Capitolul 6</a> când am explorat elementele interne ale pipelineului <code>question-answering</code>, vom trata contextele lungi prin crearea mai multor caracteristici de antrenare dintr-un sample din datasetul nostru, cu un sliding window între ele.',Ka,Gl,yi="Pentru a vedea cum funcționează acest lucru folosind exemplul curent, putem limita lungimea la 100 și putem utiliza un sliding window de 50 de tokeni. Vă reamintim că folosim:",Oa,gl,Ji="<li><code>max_length</code> pentru a stabili lungimea maximă (aici 100)</li> <li><code>truncation="only_second"</code> pentru a trunchia contextul (care este în poziția a doua) atunci când întrebarea cu contextul său este prea lungă</li> <li><code>stride</code> pentru a seta numărul de tokeni care se suprapun între două bucăți succesive (aici 50)</li> <li><code>return_overflowing_tokens=True</code> pentru ca tokenizerul să știe că dorim tokenii care se suprapun</li>",es,Bl,ls,_l,ts,xl,Ui="După cum se poate observa, exemplul nostru a fost împărțit în patru inputuri, fiecare dintre acestea conținând întrebarea și o parte din context. Rețineți că răspunsul la întrebare (“Bernadette Soubirous”) apare doar în al treilea și ultimul input, astfel încât, prin tratarea contextelor lungi în acest mod, vom crea câteva exemple de antrenament în care răspunsul nu este inclus în context. Pentru aceste exemple, labelurile vor fi <code>start_position = end_position = 0</code> (deci vom prezice tokenul <code>[CLS]</code>). Vom seta aceste labeluri și în cazul nefericit în care răspunsul a fost trunchiat, astfel încât avem doar începutul (sau sfârșitul) acestuia. Pentru exemplele în care răspunsul este complet în context, labelurile vor fi indicele tokenului în care începe răspunsul și indicele tokenului în care se termină răspunsul.",as,Al,wi='Datasetul ne oferă caracterul de început al răspunsului în context, iar prin adăugarea lungimii răspunsului, putem găsi caracterul de sfârșit în context. Pentru a le corela cu indicii tokenilor, va trebui să folosim offset mapping pe care le-am studiat în <a href="/course/chapter6/4">Capitolul 6</a>. Putem face ca tokenizatorul nostru să le returneze trecând <code>return_offsets_mapping=True</code>:',ss,vl,ns,Vl,is,Wl,Ti="După cum putem vedea, primim înapoi ID-urile obișnuite de intrare, ID-urile tipului de token și attention maskul, precum și offset mapping necesar și o cheie suplimentară, <code>overflow_to_sample_mapping</code>. Valoarea corespunzătoare ne va fi de folos atunci când vom tokeniza mai multe texte în același timp (ceea ce ar trebui să facem pentru a beneficia de faptul că tokenizerul nostru este susținut de Rust). Deoarece un sample poate oferi mai multe caracteristici, aceasta mapează fiecare caracteristică la exemplul din care provine. Deoarece aici am tokenizat un singur exemplu, obținem o listă de <code>0</code>:",rs,Xl,Ms,kl,ps,Rl,ji="Dar dacă vom tokeniza mai multe exemple, acest lucru va deveni mai util:",cs,$l,us,Ql,os,zl,bi="După cum se poate observa, primele trei exemple (la indicii 2, 3 și 4 din setul de antrenare) au dat fiecare câte patru caracteristici, iar ultimul exemplu (la indicele 5 din setul de antrenare) a dat 7 caracteristici.",ds,Nl,fi="Aceste informații vor fi utile pentru a corela fiecare caracteristică obținută cu labeul corespunzător. După cum am menționat anterior, aceste labelurile sunt:",ms,Yl,hi="<li><code>(0, 0)</code> dacă răspunsul nu se află în intervalul corespunzător al contextului</li> <li><code>(start_position, end_position)</code> dacă răspunsul se află în intervalul corespunzător al contextului, cu <code>start_position</code> fiind indicele tokenului (în ID-urile de intrare) la începutul răspunsului și <code>end_position</code> fiind indicele tokenului (în ID-urile de intrare) unde se termină răspunsul</li>",ys,El,Ii="Pentru a determina care dintre acestea este cazul și, dacă este relevant, pozițiile tokenilor, vom găsi mai întâi indicii care încep și termină contextul în ID-urile de intrare. Am putea folosi ID-urile tipului de token pentru a face acest lucru, dar deoarece acestea nu există neapărat pentru toate modelele (DistilBERT nu le solicită, de exemplu), vom folosi în schimb metoda <code>sequence_ids()</code> a <code>BatchEncoding</code> pe care tokenizerul nostru o returnează.",Js,Fl,Ci="Odată ce avem indicii tokenilor, ne uităm la offseturile corespunzătoare, care sunt tupeluri de două numere întregi reprezentând intervalul de caractere din contextul original. Astfel, putem detecta dacă bucățica de context din această caracteristică începe după răspuns sau se termină înainte de începerea răspunsului (caz în care eticheta este <code>(0, 0)</code>). Dacă nu este cazul, facem o buclă pentru a găsi primul și ultimul token al răspunsului:",Us,Hl,ws,Sl,Ts,ql,Zi="Să aruncăm o privire la câteva rezultate pentru a verifica dacă abordarea noastră este corectă. Pentru prima caracteristică găsim <code>(83, 85)</code> ca labeluri, așa că comparăm răspunsul teoretic cu intervalul decodat de tokeni de la 83 la 85 (inclusiv):",js,Dl,bs,Ll,fs,Pl,Gi="Deci, asta e o potrivire! Acum să verificăm indexul 4, unde am setat labelurile la <code>(0, 0)</code>, ceea ce înseamnă că răspunsul nu se află în chunkul de context al acelei caracteristici:",hs,Kl,Is,Ol,Cs,et,gi="Într-adevăr, nu vedem răspunsul în interiorul contextului.",Zs,Oe,Gs,lt,Bi="Acum că am văzut pas cu pas cum să preprocesăm datele de antrenare, le putem grupa într-o funcție pe care o vom aplica întregului dataset de antrenare. Vom umple fiecare caracteristică la lungimea maximă pe care am stabilit-o, deoarece majoritatea contextelor vor fi lungi (iar sampleurile corespunzătoare vor fi împărțite în mai multe caracteristici), astfel încât nu există niciun beneficiu real pentru aplicarea paddingului dinamic aici:",gs,tt,Bs,at,_i="Rețineți că am definit două constante pentru a determina lungimea maximă utilizată, precum și lungimea al sliding window, și că am adăugat o mică curățare înainte de tokenizare: unele dintre întrebările din datasetul SQuAD au spații suplimentare la început și la sfârșit care nu adaugă nimic (și ocupă spațiu atunci când sunt tokenizate dacă utilizați un model precum RoBERTa), așa că am eliminat aceste spații suplimentare.",_s,st,xi="Pentru a aplica această funcție întregului set de antrenare, folosim metoda <code>Dataset.map()</code> cu flagul <code>batched=True</code>. Acesta este necesar aici, deoarece modificăm lungimea datasetului (deoarece un exemplu poate oferi mai multe caracteristici de antrenare):",xs,nt,As,it,vs,rt,Ai="După cum putem vedea, preprocesarea a adăugat aproximativ 1.000 de caracteristici. Setul nostru de antrenare este acum gata de utilizare - să trecem la preprocesarea setului de validare!",Vs,Mt,Ws,pt,vi="Preprocesarea datelor de validare va fi puțin mai ușoară, deoarece nu trebuie să generăm labeluri (cu excepția cazului în care dorim să calculăm o pierdere de validare, dar acest număr nu ne va ajuta să înțelegem cât de bun este modelul). Adevărata bucurie va fi să interpretăm predicțiile modelului în intervale ale contextului original. Pentru aceasta, va trebui doar să stocăm atât offset mappings, cât și o modalitate de a corela fiecare caracteristică creată cu exemplul original din care provine. Deoarece există o coloană ID în datasetul original, vom utiliza acel ID.",Xs,ct,Vi="Singurul lucru pe care îl vom adăuga aici este o mică curățare a offset mappings. Acestea vor conține offseturi pentru întrebare și context, dar odată ajunși în etapa de postprocesare nu vom avea nicio modalitate de a ști care parte a ID-urilor de intrare corespunde contextului și care parte este întrebarea (metoda <code>sequence_ids()</code> pe care am folosit-o este disponibilă doar pentru ieșirea tokenizerului). Prin urmare, vom seta offseturile corespunzătoare întrebării la <code>None</code>:",ks,ut,Rs,ot,Wi="Putem aplica această funcție pe întregul dataset de validare, ca și înainte:",$s,dt,Qs,mt,zs,yt,Xi="În acest caz, am adăugat doar câteva sute de sampleuri, astfel încât se pare că contextele din datasetul de validare sunt un pic mai scurte.",Ns,Jt,ki="Acum că am preprocesat toate datele, putem trece la antrenare.",Ys,Ue,we,wa,Ut,Es,Te,je,Ta,wt,Ri='Modelul va produce logits pentru pozițiile de început și de sfârșit ale răspunsului în ID-urile de intrare, așa cum am văzut în timpul explorării <a href="/course/chapter6/3b"><code>question-answering</code> pipeline</a>. Etapa de post-procesare va fi similară cu ceea ce am făcut acolo, așa că iată vă reamintim ce acțiuni am luat:',Fs,Tt,$i="<li>Am mascat logiturile de început și de sfârșit corespunzătoare tokenilor din afara contextului.</li> <li>Am convertit apoi logiturile de început și de sfârșit în probabilități utilizând un softmax.</li> <li>Am atribuit un scor fiecărei perechi <code>(start_token, end_token)</code> prin calcularea produsului celor două probabilități corespunzătoare.</li> <li>Am căutat perechea cu scorul maxim care a dat un răspuns valid (de exemplu, <code>start_token</code> mai mic decât <code>end_token</code>).</li>",Hs,F,qn,ja,Qi="(start_token, end_token)",Dn,ba,zi="n_best",Ln,fa,Ni="n_best=20",Pn,Ss,Wr='<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi>log</mi><mo></mo><mo stretchy="false">(</mo><mi>a</mi><mi>b</mi><mo stretchy="false">)</mo><mo>=</mo><mi>log</mi><mo></mo><mo stretchy="false">(</mo><mi>a</mi><mo stretchy="false">)</mo><mo>+</mo><mi>log</mi><mo></mo><mo stretchy="false">(</mo><mi>b</mi><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\\log(ab) = \\log(a) + \\log(b)</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mopen">(</span><span class="mord mathnormal">ab</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mopen">(</span><span class="mord mathnormal">a</span><span class="mclose">)</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">+</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1em;vertical-align:-0.25em;"></span><span class="mop">lo<span style="margin-right:0.01389em;">g</span></span><span class="mopen">(</span><span class="mord mathnormal">b</span><span class="mclose">)</span></span></span></span>',qs,Ds,jt,Yi="Pentru a demonstra toate acestea, vom avea nevoie de un fel de predicții. Deoarece nu ne-am antrenat încă modelul, vom utiliza modelul implicit pentru pipelineuri QA pentru a genera unele predicții pe o mică parte a setului de validare. Putem utiliza aceeași funcție de procesare ca înainte; deoarece se bazează pe constanta globală <code>tokenizer</code>, trebuie doar să schimbăm acest obiect cu tokenizerul modelului pe care dorim să îl utilizăm temporar:",Ls,bt,Ps,ft,Ei="Acum că preprocesarea este terminată, schimbăm tokenizerul înapoi la cel pe care l-am ales inițial:",Ks,ht,Os,It,Fi="Apoi eliminăm coloanele din <code>eval_set</code> care nu sunt așteptate de model, construim un batch cu întregul set de validare și îl trecem prin model. Dacă este disponibil un GPU, îl folosim pentru a merge mai repede:",en,be,fe,ha,Ct,Hi="Acum, trebuie să găsim răspunsul prezis pentru fiecare exemplu din <code>small_eval_set</code>. Este posibil ca un exemplu să fi fost împărțit în mai multe caracteristici în <code>eval_set</code>, astfel încât primul pas constă în maparea fiecărui exemplu din <code>small_eval_set</code> la caracteristicile corespunzătoare din <code>eval_set</code>:",ln,Zt,tn,Gt,Si="Cu acest lucru în mână, ne putem apuca de treabă trecând prin toate exemplele și, pentru fiecare exemplu, prin toate caracteristicile asociate. Așa cum am spus mai devreme, ne vom uita la scorurile logit pentru <code>n_cele mai bune</code> logits de început și de sfârșit, excluzând pozițiile care dau:",an,gt,qi="<li>Un răspuns care nu ar fi în interiorul contextului</li> <li>Un răspuns cu lungime negativă</li> <li>Un răspuns care este prea lung (limităm posibilitățile la <code>max_answer_length=30</code>)</li>",sn,Bt,Di="Odată ce avem toate răspunsurile posibile scored pentru un exemplu, îl alegem pe cel cu cel mai bun scor logit:",nn,_t,rn,xt,Li="Formatul final al răspunsurilor prezise este cel care va fi așteptat de metrica pe care o vom utiliza. Ca de obicei, o putem încărca cu ajutorul bibliotecii 🤗 Evaluate:",Mn,At,pn,vt,Pi="Această metrică așteaptă răspunsurile prezise în formatul pe care l-am văzut mai sus (o listă de dicționare cu o cheie pentru ID-ul exemplului și o cheie pentru textul prezis) și răspunsurile teoretice în formatul de mai jos (o listă de dicționare cu o cheie pentru ID-ul exemplului și o cheie pentru răspunsurile posibile):",cn,Vt,un,Wt,Ki="Acum putem verifica dacă obținem rezultate rezonabile analizând primul element din ambele liste:",on,Xt,dn,kt,mn,Rt,Oi="Nu-i deloc rău! Acum putem arunca o privire la scorul pe care ni-l oferă metrica:",yn,$t,Jn,Qt,Un,zt,er='Din nou, acest lucru este destul de bun, având în vedere că, în conformitate cu [documentul acestuia] (<a href="https://arxiv.org/abs/1910.01108v2" rel="nofollow">https://arxiv.org/abs/1910.01108v2</a>), DistilBERT fine-tuned pe SQuAD obține 79,1 și 86,9 pentru aceste scoruri pe întregul dataset.',wn,Ia,Nt,Tn,Yt,lr="Putem verifica dacă funcționează pe baza predicțiilor noastre:",jn,Et,bn,Ft,fn,Ht,tr="Arată bine! Acum să folosim acest lucru pentru a face fine-tune modelului nostru.",hn,St,In,he,Ie,Ca,qt,ar="Ca de obicei, primim un avertisment că unele weighturi nu sunt utilizate (cele din headul de preantrenare), iar altele sunt inițializate aleatoriu (cele pentru headul pentru răspuns la întrebări). Ar trebui să fiți obișnuiți cu acest lucru până acum, dar înseamnă că acest model nu este încă pregătit pentru a fi utilizat și trebuie să fie fine-tuned - bine că suntem pe cale să facem asta!",Cn,Dt,sr="Pentru a putea trimite modelul nostru către Hub, va trebui să ne conectăm la Hugging Face. Dacă executați acest cod într-un notebook, puteți face acest lucru cu următoarea funcție utilitară, care afișează un widget în care puteți introduce datele voastre de autentificare:",Zn,Lt,Gn,Pt,nr="Dacă nu lucrați într-un notebook, tastați următoarea linie în terminal:",gn,Kt,Bn,Ce,Ze,Za,Ot,ir="În mod implicit, repositoriul utilizat va fi în namespaceul vostru și numit după foldrul de ieșire pe care l-ați stabilit, deci în cazul nostru va fi în <code>"sgugger/bert-finetuned-squad"</code>. Putem trece peste acest lucru prin trecerea unui <code>hub_model_id</code>; de exemplu, pentru a încărca modelul în organizația <code>huggingface_course</code>, am folosit <code>hub_model_id="huggingface_course/bert-finetuned-squad"</code> (care este modelul la care am făcut legătura la începutul acestei secțiuni).",_n,Ge,ge,Ga,ea,rr="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 pe fundal. În acest fel, veți putea să reluați antrenarea pe un alt device, dacă este necesar. Întreaga pregătire durează ceva timp (puțin peste o oră pe un Titan RTX), așa că puteți să vă luați o cafea sau să recitiți unele dintre părțile cursului care vi s-au părut mai dificile în timp ce se desfășoară. De asemenea, rețineți că, de îndată ce se termină prima epocă, veți vedea câteva weighturu încărcate în Hub și puteți începe să vă jucați cu modelul vostru pe pagina acestuia.",xn,Be,_e,ga,la,An,ta,Mr="Super! Ca o comparație, scorurile de bază raportate în articolul BERT pentru acest model sunt 80,8 și 88,5, deci suntem exact unde ar trebui să fim.",vn,Ba,aa,pr="În această etapă, puteți utiliza widgetul de inferență de pe Model Hub pentru a testa modelul și pentru a-l oferi prietenilor, familia și animalele de companie preferate. Ați făcut fine-tune cu succes unui model pentru o sarcină de răspundere a unei întrebari - felicitări!",Vn,el,Wn,_a,sa,Xn,na,cr="V-am arătat deja cum puteți utiliza modelul căruia i-am făcut fine-tune pe Model Hub cu widgetul de inferență. Pentru a-l utiliza local într-un <code>pipeline</code>, trebuie doar să specificați identificatorul modelului:",kn,ia,Rn,ra,$n,Ma,ur="Grozav! Modelul nostru funcționează la fel de bine ca cel implicit pentru aceast pipeline!",Qn,pa,zn,Aa,Nn;h=new Er({props:{fw:_[0]}}),I=new q({props:{title:"Răspuns la întrebări",local:"question-answering",headingTag:"h1"}});const or=[Sr,Hr],ca=[];function dr(e,t){return e[0]==="pt"?0:1}Z=dr(_),A=ca[Z]=or[Z](_),g=new Hn({props:{id:"ajPx5LwJD-I"}}),$=new Fn({props:{$$slots:{default:[qr]},$$scope:{ctx:_}}}),P=new q({props:{title:"Pregătirea datelor",local:"preparing-the-data",headingTag:"h2"}}),ee=new q({props:{title:"Datasetul SQuD",local:"the-squad-dataset",headingTag:"h3"}}),ae=new f({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBcmF3X2RhdGFzZXRzJTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMnNxdWFkJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| raw_datasets = load_dataset(<span class="hljs-string">"squad"</span>)`,wrap:!1}}),Q=new f({props:{code:"cmF3X2RhdGFzZXRz",highlighted:"raw_datasets",wrap:!1}}),ie=new f({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2lkJyUyQyUyMCd0aXRsZSclMkMlMjAnY29udGV4dCclMkMlMjAncXVlc3Rpb24nJTJDJTIwJ2Fuc3dlcnMnJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjA4NzU5OSUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB2YWxpZGF0aW9uJTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidpZCclMkMlMjAndGl0bGUnJTJDJTIwJ2NvbnRleHQnJTJDJTIwJ3F1ZXN0aW9uJyUyQyUyMCdhbnN3ZXJzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMTA1NzAlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({ | |
| train: Dataset({ | |
| features: [<span class="hljs-string">'id'</span>, <span class="hljs-string">'title'</span>, <span class="hljs-string">'context'</span>, <span class="hljs-string">'question'</span>, <span class="hljs-string">'answers'</span>], | |
| num_rows: <span class="hljs-number">87599</span> | |
| }) | |
| validation: Dataset({ | |
| features: [<span class="hljs-string">'id'</span>, <span class="hljs-string">'title'</span>, <span class="hljs-string">'context'</span>, <span class="hljs-string">'question'</span>, <span class="hljs-string">'answers'</span>], | |
| num_rows: <span class="hljs-number">10570</span> | |
| }) | |
| })`,wrap:!1}}),pe=new f({props:{code:"cHJpbnQoJTIyQ29udGV4dCUzQSUyMCUyMiUyQyUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMCU1RCU1QiUyMmNvbnRleHQlMjIlNUQpJTBBcHJpbnQoJTIyUXVlc3Rpb24lM0ElMjAlMjIlMkMlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjAlNUQlNUIlMjJxdWVzdGlvbiUyMiU1RCklMEFwcmludCglMjJBbnN3ZXIlM0ElMjAlMjIlMkMlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjAlNUQlNUIlMjJhbnN3ZXJzJTIyJTVEKQ==",highlighted:`<span class="hljs-built_in">print</span>(<span class="hljs-string">"Context: "</span>, raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"context"</span>]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Question: "</span>, raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"question"</span>]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Answer: "</span>, raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"answers"</span>])`,wrap:!1}}),ue=new f({props:{code:"Q29udGV4dCUzQSUyMCdBcmNoaXRlY3R1cmFsbHklMkMlMjB0aGUlMjBzY2hvb2wlMjBoYXMlMjBhJTIwQ2F0aG9saWMlMjBjaGFyYWN0ZXIuJTIwQXRvcCUyMHRoZSUyME1haW4lMjBCdWlsZGluZyU1QydzJTIwZ29sZCUyMGRvbWUlMjBpcyUyMGElMjBnb2xkZW4lMjBzdGF0dWUlMjBvZiUyMHRoZSUyMFZpcmdpbiUyME1hcnkuJTIwSW1tZWRpYXRlbHklMjBpbiUyMGZyb250JTIwb2YlMjB0aGUlMjBNYWluJTIwQnVpbGRpbmclMjBhbmQlMjBmYWNpbmclMjBpdCUyQyUyMGlzJTIwYSUyMGNvcHBlciUyMHN0YXR1ZSUyMG9mJTIwQ2hyaXN0JTIwd2l0aCUyMGFybXMlMjB1cHJhaXNlZCUyMHdpdGglMjB0aGUlMjBsZWdlbmQlMjAlMjJWZW5pdGUlMjBBZCUyME1lJTIwT21uZXMlMjIuJTIwTmV4dCUyMHRvJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwaXMlMjB0aGUlMjBCYXNpbGljYSUyMG9mJTIwdGhlJTIwU2FjcmVkJTIwSGVhcnQuJTIwSW1tZWRpYXRlbHklMjBiZWhpbmQlMjB0aGUlMjBiYXNpbGljYSUyMGlzJTIwdGhlJTIwR3JvdHRvJTJDJTIwYSUyME1hcmlhbiUyMHBsYWNlJTIwb2YlMjBwcmF5ZXIlMjBhbmQlMjByZWZsZWN0aW9uLiUyMEl0JTIwaXMlMjBhJTIwcmVwbGljYSUyMG9mJTIwdGhlJTIwZ3JvdHRvJTIwYXQlMjBMb3VyZGVzJTJDJTIwRnJhbmNlJTIwd2hlcmUlMjB0aGUlMjBWaXJnaW4lMjBNYXJ5JTIwcmVwdXRlZGx5JTIwYXBwZWFyZWQlMjB0byUyMFNhaW50JTIwQmVybmFkZXR0ZSUyMFNvdWJpcm91cyUyMGluJTIwMTg1OC4lMjBBdCUyMHRoZSUyMGVuZCUyMG9mJTIwdGhlJTIwbWFpbiUyMGRyaXZlJTIwKGFuZCUyMGluJTIwYSUyMGRpcmVjdCUyMGxpbmUlMjB0aGF0JTIwY29ubmVjdHMlMjB0aHJvdWdoJTIwMyUyMHN0YXR1ZXMlMjBhbmQlMjB0aGUlMjBHb2xkJTIwRG9tZSklMkMlMjBpcyUyMGElMjBzaW1wbGUlMkMlMjBtb2Rlcm4lMjBzdG9uZSUyMHN0YXR1ZSUyMG9mJTIwTWFyeS4nJTBBUXVlc3Rpb24lM0ElMjAnVG8lMjB3aG9tJTIwZGlkJTIwdGhlJTIwVmlyZ2luJTIwTWFyeSUyMGFsbGVnZWRseSUyMGFwcGVhciUyMGluJTIwMTg1OCUyMGluJTIwTG91cmRlcyUyMEZyYW5jZSUzRiclMEFBbnN3ZXIlM0ElMjAlN0IndGV4dCclM0ElMjAlNUInU2FpbnQlMjBCZXJuYWRldHRlJTIwU291Ymlyb3VzJyU1RCUyQyUyMCdhbnN3ZXJfc3RhcnQnJTNBJTIwJTVCNTE1JTVEJTdE",highlighted:`Context: <span class="hljs-string">'Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend "Venite Ad Me Omnes". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive (and in a direct line that connects through 3 statues and the Gold Dome), is a simple, modern stone statue of Mary.'</span> | |
| Question: <span class="hljs-string">'To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France?'</span> | |
| Answer: {<span class="hljs-string">'text'</span>: [<span class="hljs-string">'Saint Bernadette Soubirous'</span>], <span class="hljs-string">'answer_start'</span>: [<span class="hljs-number">515</span>]}`,wrap:!1}}),$e=new f({props:{code:"cmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQuZmlsdGVyKGxhbWJkYSUyMHglM0ElMjBsZW4oeCU1QiUyMmFuc3dlcnMlMjIlNUQlNUIlMjJ0ZXh0JTIyJTVEKSUyMCElM0QlMjAxKQ==",highlighted:'raw_datasets[<span class="hljs-string">"train"</span>].<span class="hljs-built_in">filter</span>(<span class="hljs-keyword">lambda</span> x: <span class="hljs-built_in">len</span>(x[<span class="hljs-string">"answers"</span>][<span class="hljs-string">"text"</span>]) != <span class="hljs-number">1</span>)',wrap:!1}}),z=new f({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidpZCclMkMlMjAndGl0bGUnJTJDJTIwJ2NvbnRleHQnJTJDJTIwJ3F1ZXN0aW9uJyUyQyUyMCdhbnN3ZXJzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMCUwQSU3RCk=",highlighted:`Dataset({ | |
| features: [<span class="hljs-string">'id'</span>, <span class="hljs-string">'title'</span>, <span class="hljs-string">'context'</span>, <span class="hljs-string">'question'</span>, <span class="hljs-string">'answers'</span>], | |
| num_rows: <span class="hljs-number">0</span> | |
| })`,wrap:!1}}),Y=new f({props:{code:"cHJpbnQocmF3X2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCU1QjAlNUQlNUIlMjJhbnN3ZXJzJTIyJTVEKSUwQXByaW50KHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQlNUIyJTVEJTVCJTIyYW5zd2VycyUyMiU1RCk=",highlighted:`<span class="hljs-built_in">print</span>(raw_datasets[<span class="hljs-string">"validation"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"answers"</span>]) | |
| <span class="hljs-built_in">print</span>(raw_datasets[<span class="hljs-string">"validation"</span>][<span class="hljs-number">2</span>][<span class="hljs-string">"answers"</span>])`,wrap:!1}}),E=new f({props:{code:"JTdCJ3RleHQnJTNBJTIwJTVCJ0RlbnZlciUyMEJyb25jb3MnJTJDJTIwJ0RlbnZlciUyMEJyb25jb3MnJTJDJTIwJ0RlbnZlciUyMEJyb25jb3MnJTVEJTJDJTIwJ2Fuc3dlcl9zdGFydCclM0ElMjAlNUIxNzclMkMlMjAxNzclMkMlMjAxNzclNUQlN0QlMEElN0IndGV4dCclM0ElMjAlNUInU2FudGElMjBDbGFyYSUyQyUyMENhbGlmb3JuaWEnJTJDJTIwJTIyTGV2aSdzJTIwU3RhZGl1bSUyMiUyQyUyMCUyMkxldmkncyUyMFN0YWRpdW0lMjBpbiUyMHRoZSUyMFNhbiUyMEZyYW5jaXNjbyUyMEJheSUyMEFyZWElMjBhdCUyMFNhbnRhJTIwQ2xhcmElMkMlMjBDYWxpZm9ybmlhLiUyMiU1RCUyQyUyMCdhbnN3ZXJfc3RhcnQnJTNBJTIwJTVCNDAzJTJDJTIwMzU1JTJDJTIwMzU1JTVEJTdE",highlighted:`{<span class="hljs-string">'text'</span>: [<span class="hljs-string">'Denver Broncos'</span>, <span class="hljs-string">'Denver Broncos'</span>, <span class="hljs-string">'Denver Broncos'</span>], <span class="hljs-string">'answer_start'</span>: [<span class="hljs-number">177</span>, <span class="hljs-number">177</span>, <span class="hljs-number">177</span>]} | |
| {<span class="hljs-string">'text'</span>: [<span class="hljs-string">'Santa Clara, California'</span>, <span class="hljs-string">"Levi's Stadium"</span>, <span class="hljs-string">"Levi's Stadium in the San Francisco Bay Area at Santa Clara, California."</span>], <span class="hljs-string">'answer_start'</span>: [<span class="hljs-number">403</span>, <span class="hljs-number">355</span>, <span class="hljs-number">355</span>]}`,wrap:!1}}),Je=new f({props:{code:"cHJpbnQocmF3X2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RCU1QjIlNUQlNUIlMjJjb250ZXh0JTIyJTVEKSUwQXByaW50KHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQlNUIyJTVEJTVCJTIycXVlc3Rpb24lMjIlNUQp",highlighted:`<span class="hljs-built_in">print</span>(raw_datasets[<span class="hljs-string">"validation"</span>][<span class="hljs-number">2</span>][<span class="hljs-string">"context"</span>]) | |
| <span class="hljs-built_in">print</span>(raw_datasets[<span class="hljs-string">"validation"</span>][<span class="hljs-number">2</span>][<span class="hljs-string">"question"</span>])`,wrap:!1}}),C=new f({props:{code:"J1N1cGVyJTIwQm93bCUyMDUwJTIwd2FzJTIwYW4lMjBBbWVyaWNhbiUyMGZvb3RiYWxsJTIwZ2FtZSUyMHRvJTIwZGV0ZXJtaW5lJTIwdGhlJTIwY2hhbXBpb24lMjBvZiUyMHRoZSUyME5hdGlvbmFsJTIwRm9vdGJhbGwlMjBMZWFndWUlMjAoTkZMKSUyMGZvciUyMHRoZSUyMDIwMTUlMjBzZWFzb24uJTIwVGhlJTIwQW1lcmljYW4lMjBGb290YmFsbCUyMENvbmZlcmVuY2UlMjAoQUZDKSUyMGNoYW1waW9uJTIwRGVudmVyJTIwQnJvbmNvcyUyMGRlZmVhdGVkJTIwdGhlJTIwTmF0aW9uYWwlMjBGb290YmFsbCUyMENvbmZlcmVuY2UlMjAoTkZDKSUyMGNoYW1waW9uJTIwQ2Fyb2xpbmElMjBQYW50aGVycyUyMDI0JUUyJTgwJTkzMTAlMjB0byUyMGVhcm4lMjB0aGVpciUyMHRoaXJkJTIwU3VwZXIlMjBCb3dsJTIwdGl0bGUuJTIwVGhlJTIwZ2FtZSUyMHdhcyUyMHBsYXllZCUyMG9uJTIwRmVicnVhcnklMjA3JTJDJTIwMjAxNiUyQyUyMGF0JTIwTGV2aSU1QydzJTIwU3RhZGl1bSUyMGluJTIwdGhlJTIwU2FuJTIwRnJhbmNpc2NvJTIwQmF5JTIwQXJlYSUyMGF0JTIwU2FudGElMjBDbGFyYSUyQyUyMENhbGlmb3JuaWEuJTIwQXMlMjB0aGlzJTIwd2FzJTIwdGhlJTIwNTB0aCUyMFN1cGVyJTIwQm93bCUyQyUyMHRoZSUyMGxlYWd1ZSUyMGVtcGhhc2l6ZWQlMjB0aGUlMjAlMjJnb2xkZW4lMjBhbm5pdmVyc2FyeSUyMiUyMHdpdGglMjB2YXJpb3VzJTIwZ29sZC10aGVtZWQlMjBpbml0aWF0aXZlcyUyQyUyMGFzJTIwd2VsbCUyMGFzJTIwdGVtcG9yYXJpbHklMjBzdXNwZW5kaW5nJTIwdGhlJTIwdHJhZGl0aW9uJTIwb2YlMjBuYW1pbmclMjBlYWNoJTIwU3VwZXIlMjBCb3dsJTIwZ2FtZSUyMHdpdGglMjBSb21hbiUyMG51bWVyYWxzJTIwKHVuZGVyJTIwd2hpY2glMjB0aGUlMjBnYW1lJTIwd291bGQlMjBoYXZlJTIwYmVlbiUyMGtub3duJTIwYXMlMjAlMjJTdXBlciUyMEJvd2wlMjBMJTIyKSUyQyUyMHNvJTIwdGhhdCUyMHRoZSUyMGxvZ28lMjBjb3VsZCUyMHByb21pbmVudGx5JTIwZmVhdHVyZSUyMHRoZSUyMEFyYWJpYyUyMG51bWVyYWxzJTIwNTAuJyUwQSdXaGVyZSUyMGRpZCUyMFN1cGVyJTIwQm93bCUyMDUwJTIwdGFrZSUyMHBsYWNlJTNGJw==",highlighted:`<span class="hljs-string">'Super Bowl 50 was an American football game to determine the champion of the National Football League (NFL) for the 2015 season. The American Football Conference (AFC) champion Denver Broncos defeated the National Football Conference (NFC) champion Carolina Panthers 24–10 to earn their third Super Bowl title. The game was played on February 7, 2016, at Levi\\'s Stadium in the San Francisco Bay Area at Santa Clara, California. As this was the 50th Super Bowl, the league emphasized the "golden anniversary" with various gold-themed initiatives, as well as temporarily suspending the tradition of naming each Super Bowl game with Roman numerals (under which the game would have been known as "Super Bowl L"), so that the logo could prominently feature the Arabic numerals 50.'</span> | |
| <span class="hljs-string">'Where did Super Bowl 50 take place?'</span>`,wrap:!1}}),ol=new q({props:{title:"Procesarea datelor de antrenare",local:"processing-the-training-data",headingTag:"h3"}}),dl=new Hn({props:{id:"qgaM0weJHpA"}}),Jl=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLWNhc2VkJTIyJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| model_checkpoint = <span class="hljs-string">"bert-base-cased"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)`,wrap:!1}}),wl=new f({props:{code:"dG9rZW5pemVyLmlzX2Zhc3Q=",highlighted:"tokenizer.is_fast",wrap:!1}}),Tl=new f({props:{code:"VHJ1ZQ==",highlighted:'<span class="hljs-literal">True</span>',wrap:!1}}),bl=new f({props:{code:"JTVCQ0xTJTVEJTIwcXVlc3Rpb24lMjAlNUJTRVAlNUQlMjBjb250ZXh0JTIwJTVCU0VQJTVE",highlighted:'<span class="hljs-selector-attr">[CLS]</span> question <span class="hljs-selector-attr">[SEP]</span> context <span class="hljs-selector-attr">[SEP]</span>',wrap:!1}}),hl=new f({props:{code:"Y29udGV4dCUyMCUzRCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMCU1RCU1QiUyMmNvbnRleHQlMjIlNUQlMEFxdWVzdGlvbiUyMCUzRCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMCU1RCU1QiUyMnF1ZXN0aW9uJTIyJTVEJTBBJTBBaW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHF1ZXN0aW9uJTJDJTIwY29udGV4dCklMEF0b2tlbml6ZXIuZGVjb2RlKGlucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCk=",highlighted:`context = raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"context"</span>] | |
| question = raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">0</span>][<span class="hljs-string">"question"</span>] | |
| inputs = tokenizer(question, context) | |
| tokenizer.decode(inputs[<span class="hljs-string">"input_ids"</span>])`,wrap:!1}}),Il=new f({props:{code:"JyU1QkNMUyU1RCUyMFRvJTIwd2hvbSUyMGRpZCUyMHRoZSUyMFZpcmdpbiUyME1hcnklMjBhbGxlZ2VkbHklMjBhcHBlYXIlMjBpbiUyMDE4NTglMjBpbiUyMExvdXJkZXMlMjBGcmFuY2UlM0YlMjAlNUJTRVAlNUQlMjBBcmNoaXRlY3R1cmFsbHklMkMlMjAnJTBBJ3RoZSUyMHNjaG9vbCUyMGhhcyUyMGElMjBDYXRob2xpYyUyMGNoYXJhY3Rlci4lMjBBdG9wJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTVDJ3MlMjBnb2xkJTIwZG9tZSUyMGlzJTIwYSUyMGdvbGRlbiUyMHN0YXR1ZSUyMG9mJTIwdGhlJTIwVmlyZ2luJTIwJyUwQSdNYXJ5LiUyMEltbWVkaWF0ZWx5JTIwaW4lMjBmcm9udCUyMG9mJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwYW5kJTIwZmFjaW5nJTIwaXQlMkMlMjBpcyUyMGElMjBjb3BwZXIlMjBzdGF0dWUlMjBvZiUyMENocmlzdCUyMHdpdGglMjBhcm1zJTIwJyUwQSd1cHJhaXNlZCUyMHdpdGglMjB0aGUlMjBsZWdlbmQlMjAlMjIlMjBWZW5pdGUlMjBBZCUyME1lJTIwT21uZXMlMjAlMjIuJTIwTmV4dCUyMHRvJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwaXMlMjB0aGUlMjBCYXNpbGljYSUyMG9mJTIwdGhlJTIwU2FjcmVkJTIwJyUwQSdIZWFydC4lMjBJbW1lZGlhdGVseSUyMGJlaGluZCUyMHRoZSUyMGJhc2lsaWNhJTIwaXMlMjB0aGUlMjBHcm90dG8lMkMlMjBhJTIwTWFyaWFuJTIwcGxhY2UlMjBvZiUyMHByYXllciUyMGFuZCUyMHJlZmxlY3Rpb24uJTIwSXQlMjBpcyUyMGElMjAnJTBBJ3JlcGxpY2ElMjBvZiUyMHRoZSUyMGdyb3R0byUyMGF0JTIwTG91cmRlcyUyQyUyMEZyYW5jZSUyMHdoZXJlJTIwdGhlJTIwVmlyZ2luJTIwTWFyeSUyMHJlcHV0ZWRseSUyMGFwcGVhcmVkJTIwdG8lMjBTYWludCUyMEJlcm5hZGV0dGUlMjAnJTBBJ1NvdWJpcm91cyUyMGluJTIwMTg1OC4lMjBBdCUyMHRoZSUyMGVuZCUyMG9mJTIwdGhlJTIwbWFpbiUyMGRyaXZlJTIwKCUyMGFuZCUyMGluJTIwYSUyMGRpcmVjdCUyMGxpbmUlMjB0aGF0JTIwY29ubmVjdHMlMjB0aHJvdWdoJTIwMyUyMHN0YXR1ZXMlMjAnJTBBJ2FuZCUyMHRoZSUyMEdvbGQlMjBEb21lJTIwKSUyQyUyMGlzJTIwYSUyMHNpbXBsZSUyQyUyMG1vZGVybiUyMHN0b25lJTIwc3RhdHVlJTIwb2YlMjBNYXJ5LiUyMCU1QlNFUCU1RCc=",highlighted:`<span class="hljs-string">'[CLS] To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France? [SEP] Architecturally, '</span> | |
| <span class="hljs-string">'the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin '</span> | |
| <span class="hljs-string">'Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms '</span> | |
| <span class="hljs-string">'upraised with the legend " Venite Ad Me Omnes ". Next to the Main Building is the Basilica of the Sacred '</span> | |
| <span class="hljs-string">'Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a '</span> | |
| <span class="hljs-string">'replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette '</span> | |
| <span class="hljs-string">'Soubirous in 1858. At the end of the main drive ( and in a direct line that connects through 3 statues '</span> | |
| <span class="hljs-string">'and the Gold Dome ), is a simple, modern stone statue of Mary. [SEP]'</span>`,wrap:!1}}),Bl=new f({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMHF1ZXN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwY29udGV4dCUyQyUwQSUyMCUyMCUyMCUyMG1heF9sZW5ndGglM0QxMDAlMkMlMEElMjAlMjAlMjAlMjB0cnVuY2F0aW9uJTNEJTIyb25seV9zZWNvbmQlMjIlMkMlMEElMjAlMjAlMjAlMjBzdHJpZGUlM0Q1MCUyQyUwQSUyMCUyMCUyMCUyMHJldHVybl9vdmVyZmxvd2luZ190b2tlbnMlM0RUcnVlJTJDJTBBKSUwQSUwQWZvciUyMGlkcyUyMGluJTIwaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQodG9rZW5pemVyLmRlY29kZShpZHMpKQ==",highlighted:`inputs = tokenizer( | |
| question, | |
| context, | |
| max_length=<span class="hljs-number">100</span>, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=<span class="hljs-number">50</span>, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| ) | |
| <span class="hljs-keyword">for</span> ids <span class="hljs-keyword">in</span> inputs[<span class="hljs-string">"input_ids"</span>]: | |
| <span class="hljs-built_in">print</span>(tokenizer.decode(ids))`,wrap:!1}}),_l=new f({props:{code:"JyU1QkNMUyU1RCUyMFRvJTIwd2hvbSUyMGRpZCUyMHRoZSUyMFZpcmdpbiUyME1hcnklMjBhbGxlZ2VkbHklMjBhcHBlYXIlMjBpbiUyMDE4NTglMjBpbiUyMExvdXJkZXMlMjBGcmFuY2UlM0YlMjAlNUJTRVAlNUQlMjBBcmNoaXRlY3R1cmFsbHklMkMlMjB0aGUlMjBzY2hvb2wlMjBoYXMlMjBhJTIwQ2F0aG9saWMlMjBjaGFyYWN0ZXIuJTIwQXRvcCUyMHRoZSUyME1haW4lMjBCdWlsZGluZyU1QydzJTIwZ29sZCUyMGRvbWUlMjBpcyUyMGElMjBnb2xkZW4lMjBzdGF0dWUlMjBvZiUyMHRoZSUyMFZpcmdpbiUyME1hcnkuJTIwSW1tZWRpYXRlbHklMjBpbiUyMGZyb250JTIwb2YlMjB0aGUlMjBNYWluJTIwQnVpbGRpbmclMjBhbmQlMjBmYWNpbmclMjBpdCUyQyUyMGlzJTIwYSUyMGNvcHBlciUyMHN0YXR1ZSUyMG9mJTIwQ2hyaXN0JTIwd2l0aCUyMGFybXMlMjB1cHJhaXNlZCUyMHdpdGglMjB0aGUlMjBsZWdlbmQlMjAlMjIlMjBWZW5pdGUlMjBBZCUyME1lJTIwT21uZXMlMjAlMjIuJTIwTmV4dCUyMHRvJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwaXMlMjB0aGUlMjBCYXNpbGljYSUyMG9mJTIwdGhlJTIwU2FjcmVkJTIwSGVhcnQuJTIwSW1tZWRpYXRlbHklMjBiZWhpbmQlMjB0aGUlMjBiYXNpJTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjBUbyUyMHdob20lMjBkaWQlMjB0aGUlMjBWaXJnaW4lMjBNYXJ5JTIwYWxsZWdlZGx5JTIwYXBwZWFyJTIwaW4lMjAxODU4JTIwaW4lMjBMb3VyZGVzJTIwRnJhbmNlJTNGJTIwJTVCU0VQJTVEJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwYW5kJTIwZmFjaW5nJTIwaXQlMkMlMjBpcyUyMGElMjBjb3BwZXIlMjBzdGF0dWUlMjBvZiUyMENocmlzdCUyMHdpdGglMjBhcm1zJTIwdXByYWlzZWQlMjB3aXRoJTIwdGhlJTIwbGVnZW5kJTIwJTIyJTIwVmVuaXRlJTIwQWQlMjBNZSUyME9tbmVzJTIwJTIyLiUyME5leHQlMjB0byUyMHRoZSUyME1haW4lMjBCdWlsZGluZyUyMGlzJTIwdGhlJTIwQmFzaWxpY2ElMjBvZiUyMHRoZSUyMFNhY3JlZCUyMEhlYXJ0LiUyMEltbWVkaWF0ZWx5JTIwYmVoaW5kJTIwdGhlJTIwYmFzaWxpY2ElMjBpcyUyMHRoZSUyMEdyb3R0byUyQyUyMGElMjBNYXJpYW4lMjBwbGFjZSUyMG9mJTIwcHJheWVyJTIwYW5kJTIwcmVmbGVjdGlvbi4lMjBJdCUyMGlzJTIwYSUyMHJlcGxpY2ElMjBvZiUyMHRoZSUyMGdyb3R0byUyMGF0JTIwTG91cmRlcyUyQyUyMEZyYW5jZSUyMHdoZXJlJTIwdGhlJTIwVmlyZ2luJTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjBUbyUyMHdob20lMjBkaWQlMjB0aGUlMjBWaXJnaW4lMjBNYXJ5JTIwYWxsZWdlZGx5JTIwYXBwZWFyJTIwaW4lMjAxODU4JTIwaW4lMjBMb3VyZGVzJTIwRnJhbmNlJTNGJTIwJTVCU0VQJTVEJTIwTmV4dCUyMHRvJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTIwaXMlMjB0aGUlMjBCYXNpbGljYSUyMG9mJTIwdGhlJTIwU2FjcmVkJTIwSGVhcnQuJTIwSW1tZWRpYXRlbHklMjBiZWhpbmQlMjB0aGUlMjBiYXNpbGljYSUyMGlzJTIwdGhlJTIwR3JvdHRvJTJDJTIwYSUyME1hcmlhbiUyMHBsYWNlJTIwb2YlMjBwcmF5ZXIlMjBhbmQlMjByZWZsZWN0aW9uLiUyMEl0JTIwaXMlMjBhJTIwcmVwbGljYSUyMG9mJTIwdGhlJTIwZ3JvdHRvJTIwYXQlMjBMb3VyZGVzJTJDJTIwRnJhbmNlJTIwd2hlcmUlMjB0aGUlMjBWaXJnaW4lMjBNYXJ5JTIwcmVwdXRlZGx5JTIwYXBwZWFyZWQlMjB0byUyMFNhaW50JTIwQmVybmFkZXR0ZSUyMFNvdWJpcm91cyUyMGluJTIwMTg1OC4lMjBBdCUyMHRoZSUyMGVuZCUyMG9mJTIwdGhlJTIwbWFpbiUyMGRyaXZlJTIwKCUyMGFuZCUyMGluJTIwYSUyMGRpcmVjdCUyMGxpbmUlMjB0aGF0JTIwY29ubmVjdHMlMjB0aHJvdWdoJTIwMyUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwVG8lMjB3aG9tJTIwZGlkJTIwdGhlJTIwVmlyZ2luJTIwTWFyeSUyMGFsbGVnZWRseSUyMGFwcGVhciUyMGluJTIwMTg1OCUyMGluJTIwTG91cmRlcyUyMEZyYW5jZSUzRiUyMCU1QlNFUCU1RC4lMjBJdCUyMGlzJTIwYSUyMHJlcGxpY2ElMjBvZiUyMHRoZSUyMGdyb3R0byUyMGF0JTIwTG91cmRlcyUyQyUyMEZyYW5jZSUyMHdoZXJlJTIwdGhlJTIwVmlyZ2luJTIwTWFyeSUyMHJlcHV0ZWRseSUyMGFwcGVhcmVkJTIwdG8lMjBTYWludCUyMEJlcm5hZGV0dGUlMjBTb3ViaXJvdXMlMjBpbiUyMDE4NTguJTIwQXQlMjB0aGUlMjBlbmQlMjBvZiUyMHRoZSUyMG1haW4lMjBkcml2ZSUyMCglMjBhbmQlMjBpbiUyMGElMjBkaXJlY3QlMjBsaW5lJTIwdGhhdCUyMGNvbm5lY3RzJTIwdGhyb3VnaCUyMDMlMjBzdGF0dWVzJTIwYW5kJTIwdGhlJTIwR29sZCUyMERvbWUlMjApJTJDJTIwaXMlMjBhJTIwc2ltcGxlJTJDJTIwbW9kZXJuJTIwc3RvbmUlMjBzdGF0dWUlMjBvZiUyME1hcnkuJTIwJTVCU0VQJTVEJw==",highlighted:`<span class="hljs-string">'[CLS] To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France? [SEP] Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend " Venite Ad Me Omnes ". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basi [SEP]'</span> | |
| <span class="hljs-string">'[CLS] To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France? [SEP] the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend " Venite Ad Me Omnes ". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin [SEP]'</span> | |
| <span class="hljs-string">'[CLS] To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France? [SEP] Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grotto, a Marian place of prayer and reflection. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive ( and in a direct line that connects through 3 [SEP]'</span> | |
| <span class="hljs-string">'[CLS] To whom did the Virgin Mary allegedly appear in 1858 in Lourdes France? [SEP]. It is a replica of the grotto at Lourdes, France where the Virgin Mary reputedly appeared to Saint Bernadette Soubirous in 1858. At the end of the main drive ( and in a direct line that connects through 3 statues and the Gold Dome ), is a simple, modern stone statue of Mary. [SEP]'</span>`,wrap:!1}}),vl=new f({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMHF1ZXN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwY29udGV4dCUyQyUwQSUyMCUyMCUyMCUyMG1heF9sZW5ndGglM0QxMDAlMkMlMEElMjAlMjAlMjAlMjB0cnVuY2F0aW9uJTNEJTIyb25seV9zZWNvbmQlMjIlMkMlMEElMjAlMjAlMjAlMjBzdHJpZGUlM0Q1MCUyQyUwQSUyMCUyMCUyMCUyMHJldHVybl9vdmVyZmxvd2luZ190b2tlbnMlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwcmV0dXJuX29mZnNldHNfbWFwcGluZyUzRFRydWUlMkMlMEEpJTBBaW5wdXRzLmtleXMoKQ==",highlighted:`inputs = tokenizer( | |
| question, | |
| context, | |
| max_length=<span class="hljs-number">100</span>, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=<span class="hljs-number">50</span>, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| return_offsets_mapping=<span class="hljs-literal">True</span>, | |
| ) | |
| inputs.keys()`,wrap:!1}}),Vl=new f({props:{code:"ZGljdF9rZXlzKCU1QidpbnB1dF9pZHMnJTJDJTIwJ3Rva2VuX3R5cGVfaWRzJyUyQyUyMCdhdHRlbnRpb25fbWFzayclMkMlMjAnb2Zmc2V0X21hcHBpbmcnJTJDJTIwJ292ZXJmbG93X3RvX3NhbXBsZV9tYXBwaW5nJyU1RCk=",highlighted:'dict_keys([<span class="hljs-string">'input_ids'</span>, <span class="hljs-string">'token_type_ids'</span>, <span class="hljs-string">'attention_mask'</span>, <span class="hljs-string">'offset_mapping'</span>, <span class="hljs-string">'overflow_to_sample_mapping'</span>])',wrap:!1}}),Xl=new f({props:{code:"aW5wdXRzJTVCJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIlNUQ=",highlighted:'inputs[<span class="hljs-string">"overflow_to_sample_mapping"</span>]',wrap:!1}}),kl=new f({props:{code:"JTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RA==",highlighted:'[<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]',wrap:!1}}),$l=new f({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMiUzQTYlNUQlNUIlMjJxdWVzdGlvbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMiUzQTYlNUQlNUIlMjJjb250ZXh0JTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwbWF4X2xlbmd0aCUzRDEwMCUyQyUwQSUyMCUyMCUyMCUyMHRydW5jYXRpb24lM0QlMjJvbmx5X3NlY29uZCUyMiUyQyUwQSUyMCUyMCUyMCUyMHN0cmlkZSUzRDUwJTJDJTBBJTIwJTIwJTIwJTIwcmV0dXJuX292ZXJmbG93aW5nX3Rva2VucyUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZXR1cm5fb2Zmc2V0c19tYXBwaW5nJTNEVHJ1ZSUyQyUwQSklMEElMEFwcmludChmJTIyVGhlJTIwNCUyMGV4YW1wbGVzJTIwZ2F2ZSUyMCU3QmxlbihpbnB1dHMlNUInaW5wdXRfaWRzJyU1RCklN0QlMjBmZWF0dXJlcy4lMjIpJTBBcHJpbnQoZiUyMkhlcmUlMjBpcyUyMHdoZXJlJTIwZWFjaCUyMGNvbWVzJTIwZnJvbSUzQSUyMCU3QmlucHV0cyU1QidvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyclNUQlN0QuJTIyKQ==",highlighted:`inputs = tokenizer( | |
| raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">2</span>:<span class="hljs-number">6</span>][<span class="hljs-string">"question"</span>], | |
| raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">2</span>:<span class="hljs-number">6</span>][<span class="hljs-string">"context"</span>], | |
| max_length=<span class="hljs-number">100</span>, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=<span class="hljs-number">50</span>, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| return_offsets_mapping=<span class="hljs-literal">True</span>, | |
| ) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"The 4 examples gave <span class="hljs-subst">{<span class="hljs-built_in">len</span>(inputs[<span class="hljs-string">'input_ids'</span>])}</span> features."</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Here is where each comes from: <span class="hljs-subst">{inputs[<span class="hljs-string">'overflow_to_sample_mapping'</span>]}</span>."</span>)`,wrap:!1}}),Ql=new f({props:{code:"J1RoZSUyMDQlMjBleGFtcGxlcyUyMGdhdmUlMjAxOSUyMGZlYXR1cmVzLiclMEEnSGVyZSUyMGlzJTIwd2hlcmUlMjBlYWNoJTIwY29tZXMlMjBmcm9tJTNBJTIwJTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAyJTJDJTIwMiUyQyUyMDIlMkMlMjAyJTJDJTIwMyUyQyUyMDMlMkMlMjAzJTJDJTIwMyUyQyUyMDMlMkMlMjAzJTJDJTIwMyU1RC4n",highlighted:`<span class="hljs-string">'The 4 examples gave 19 features.'</span> | |
| <span class="hljs-string">'Here is where each comes from: [0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 3].'</span>`,wrap:!1}}),Hl=new f({props:{code:"YW5zd2VycyUyMCUzRCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMiUzQTYlNUQlNUIlMjJhbnN3ZXJzJTIyJTVEJTBBc3RhcnRfcG9zaXRpb25zJTIwJTNEJTIwJTVCJTVEJTBBZW5kX3Bvc2l0aW9ucyUyMCUzRCUyMCU1QiU1RCUwQSUwQWZvciUyMGklMkMlMjBvZmZzZXQlMjBpbiUyMGVudW1lcmF0ZShpbnB1dHMlNUIlMjJvZmZzZXRfbWFwcGluZyUyMiU1RCklM0ElMEElMjAlMjAlMjAlMjBzYW1wbGVfaWR4JTIwJTNEJTIwaW5wdXRzJTVCJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIlNUQlNUJpJTVEJTBBJTIwJTIwJTIwJTIwYW5zd2VyJTIwJTNEJTIwYW5zd2VycyU1QnNhbXBsZV9pZHglNUQlMEElMjAlMjAlMjAlMjBzdGFydF9jaGFyJTIwJTNEJTIwYW5zd2VyJTVCJTIyYW5zd2VyX3N0YXJ0JTIyJTVEJTVCMCU1RCUwQSUyMCUyMCUyMCUyMGVuZF9jaGFyJTIwJTNEJTIwYW5zd2VyJTVCJTIyYW5zd2VyX3N0YXJ0JTIyJTVEJTVCMCU1RCUyMCUyQiUyMGxlbihhbnN3ZXIlNUIlMjJ0ZXh0JTIyJTVEJTVCMCU1RCklMEElMjAlMjAlMjAlMjBzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKGkpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwRmluZCUyMHRoZSUyMHN0YXJ0JTIwYW5kJTIwZW5kJTIwb2YlMjB0aGUlMjBjb250ZXh0JTBBJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwMCUwQSUyMCUyMCUyMCUyMHdoaWxlJTIwc2VxdWVuY2VfaWRzJTVCaWR4JTVEJTIwISUzRCUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZHglMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwY29udGV4dF9zdGFydCUyMCUzRCUyMGlkeCUwQSUyMCUyMCUyMCUyMHdoaWxlJTIwc2VxdWVuY2VfaWRzJTVCaWR4JTVEJTIwJTNEJTNEJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUyQiUzRCUyMDElMEElMjAlMjAlMjAlMjBjb250ZXh0X2VuZCUyMCUzRCUyMGlkeCUyMC0lMjAxJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwSWYlMjB0aGUlMjBhbnN3ZXIlMjBpcyUyMG5vdCUyMGZ1bGx5JTIwaW5zaWRlJTIwdGhlJTIwY29udGV4dCUyQyUyMGxhYmVsJTIwaXMlMjAoMCUyQyUyMDApJTBBJTIwJTIwJTIwJTIwaWYlMjBvZmZzZXQlNUJjb250ZXh0X3N0YXJ0JTVEJTVCMCU1RCUyMCUzRSUyMHN0YXJ0X2NoYXIlMjBvciUyMG9mZnNldCU1QmNvbnRleHRfZW5kJTVEJTVCMSU1RCUyMCUzQyUyMGVuZF9jaGFyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3RhcnRfcG9zaXRpb25zLmFwcGVuZCgwKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZF9wb3NpdGlvbnMuYXBwZW5kKDApJTBBJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME90aGVyd2lzZSUyMGl0J3MlMjB0aGUlMjBzdGFydCUyMGFuZCUyMGVuZCUyMHRva2VuJTIwcG9zaXRpb25zJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwY29udGV4dF9zdGFydCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwaWR4JTIwJTNDJTNEJTIwY29udGV4dF9lbmQlMjBhbmQlMjBvZmZzZXQlNUJpZHglNUQlNUIwJTVEJTIwJTNDJTNEJTIwc3RhcnRfY2hhciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUyQiUzRCUyMDElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9wb3NpdGlvbnMuYXBwZW5kKGlkeCUyMC0lMjAxKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUzRCUyMGNvbnRleHRfZW5kJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2hpbGUlMjBpZHglMjAlM0UlM0QlMjBjb250ZXh0X3N0YXJ0JTIwYW5kJTIwb2Zmc2V0JTVCaWR4JTVEJTVCMSU1RCUyMCUzRSUzRCUyMGVuZF9jaGFyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWR4JTIwLSUzRCUyMDElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfcG9zaXRpb25zLmFwcGVuZChpZHglMjAlMkIlMjAxKSUwQSUwQXN0YXJ0X3Bvc2l0aW9ucyUyQyUyMGVuZF9wb3NpdGlvbnM=",highlighted:`answers = raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">2</span>:<span class="hljs-number">6</span>][<span class="hljs-string">"answers"</span>] | |
| start_positions = [] | |
| end_positions = [] | |
| <span class="hljs-keyword">for</span> i, offset <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(inputs[<span class="hljs-string">"offset_mapping"</span>]): | |
| sample_idx = inputs[<span class="hljs-string">"overflow_to_sample_mapping"</span>][i] | |
| answer = answers[sample_idx] | |
| start_char = answer[<span class="hljs-string">"answer_start"</span>][<span class="hljs-number">0</span>] | |
| end_char = answer[<span class="hljs-string">"answer_start"</span>][<span class="hljs-number">0</span>] + <span class="hljs-built_in">len</span>(answer[<span class="hljs-string">"text"</span>][<span class="hljs-number">0</span>]) | |
| sequence_ids = inputs.sequence_ids(i) | |
| <span class="hljs-comment"># Find the start and end of the context</span> | |
| idx = <span class="hljs-number">0</span> | |
| <span class="hljs-keyword">while</span> sequence_ids[idx] != <span class="hljs-number">1</span>: | |
| idx += <span class="hljs-number">1</span> | |
| context_start = idx | |
| <span class="hljs-keyword">while</span> sequence_ids[idx] == <span class="hljs-number">1</span>: | |
| idx += <span class="hljs-number">1</span> | |
| context_end = idx - <span class="hljs-number">1</span> | |
| <span class="hljs-comment"># If the answer is not fully inside the context, label is (0, 0)</span> | |
| <span class="hljs-keyword">if</span> offset[context_start][<span class="hljs-number">0</span>] > start_char <span class="hljs-keyword">or</span> offset[context_end][<span class="hljs-number">1</span>] < end_char: | |
| start_positions.append(<span class="hljs-number">0</span>) | |
| end_positions.append(<span class="hljs-number">0</span>) | |
| <span class="hljs-keyword">else</span>: | |
| <span class="hljs-comment"># Otherwise it's the start and end token positions</span> | |
| idx = context_start | |
| <span class="hljs-keyword">while</span> idx <= context_end <span class="hljs-keyword">and</span> offset[idx][<span class="hljs-number">0</span>] <= start_char: | |
| idx += <span class="hljs-number">1</span> | |
| start_positions.append(idx - <span class="hljs-number">1</span>) | |
| idx = context_end | |
| <span class="hljs-keyword">while</span> idx >= context_start <span class="hljs-keyword">and</span> offset[idx][<span class="hljs-number">1</span>] >= end_char: | |
| idx -= <span class="hljs-number">1</span> | |
| end_positions.append(idx + <span class="hljs-number">1</span>) | |
| start_positions, end_positions`,wrap:!1}}),Sl=new f({props:{code:"KCU1QjgzJTJDJTIwNTElMkMlMjAxOSUyQyUyMDAlMkMlMjAwJTJDJTIwNjQlMkMlMjAyNyUyQyUyMDAlMkMlMjAzNCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDY3JTJDJTIwMzQlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RCUyQyUwQSUyMCU1Qjg1JTJDJTIwNTMlMkMlMjAyMSUyQyUyMDAlMkMlMjAwJTJDJTIwNzAlMkMlMjAzMyUyQyUyMDAlMkMlMjA0MCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDY4JTJDJTIwMzUlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RCk=",highlighted:`([<span class="hljs-number">83</span>, <span class="hljs-number">51</span>, <span class="hljs-number">19</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">64</span>, <span class="hljs-number">27</span>, <span class="hljs-number">0</span>, <span class="hljs-number">34</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">67</span>, <span class="hljs-number">34</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>], | |
| [<span class="hljs-number">85</span>, <span class="hljs-number">53</span>, <span class="hljs-number">21</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">70</span>, <span class="hljs-number">33</span>, <span class="hljs-number">0</span>, <span class="hljs-number">40</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">68</span>, <span class="hljs-number">35</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>])`,wrap:!1}}),Dl=new f({props:{code:"aWR4JTIwJTNEJTIwMCUwQXNhbXBsZV9pZHglMjAlM0QlMjBpbnB1dHMlNUIlMjJvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyUyMiU1RCU1QmlkeCU1RCUwQWFuc3dlciUyMCUzRCUyMGFuc3dlcnMlNUJzYW1wbGVfaWR4JTVEJTVCJTIydGV4dCUyMiU1RCU1QjAlNUQlMEElMEFzdGFydCUyMCUzRCUyMHN0YXJ0X3Bvc2l0aW9ucyU1QmlkeCU1RCUwQWVuZCUyMCUzRCUyMGVuZF9wb3NpdGlvbnMlNUJpZHglNUQlMEFsYWJlbGVkX2Fuc3dlciUyMCUzRCUyMHRva2VuaXplci5kZWNvZGUoaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTVCaWR4JTVEJTVCc3RhcnQlMjAlM0ElMjBlbmQlMjAlMkIlMjAxJTVEKSUwQSUwQXByaW50KGYlMjJUaGVvcmV0aWNhbCUyMGFuc3dlciUzQSUyMCU3QmFuc3dlciU3RCUyQyUyMGxhYmVscyUyMGdpdmUlM0ElMjAlN0JsYWJlbGVkX2Fuc3dlciU3RCUyMik=",highlighted:`idx = <span class="hljs-number">0</span> | |
| sample_idx = inputs[<span class="hljs-string">"overflow_to_sample_mapping"</span>][idx] | |
| answer = answers[sample_idx][<span class="hljs-string">"text"</span>][<span class="hljs-number">0</span>] | |
| start = start_positions[idx] | |
| end = end_positions[idx] | |
| labeled_answer = tokenizer.decode(inputs[<span class="hljs-string">"input_ids"</span>][idx][start : end + <span class="hljs-number">1</span>]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Theoretical answer: <span class="hljs-subst">{answer}</span>, labels give: <span class="hljs-subst">{labeled_answer}</span>"</span>)`,wrap:!1}}),Ll=new f({props:{code:"J1RoZW9yZXRpY2FsJTIwYW5zd2VyJTNBJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTJDJTIwbGFiZWxzJTIwZ2l2ZSUzQSUyMHRoZSUyME1haW4lMjBCdWlsZGluZyc=",highlighted:'<span class="hljs-string">'Theoretical answer: the Main Building, labels give: the Main Building'</span>',wrap:!1}}),Kl=new f({props:{code:"aWR4JTIwJTNEJTIwNCUwQXNhbXBsZV9pZHglMjAlM0QlMjBpbnB1dHMlNUIlMjJvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyUyMiU1RCU1QmlkeCU1RCUwQWFuc3dlciUyMCUzRCUyMGFuc3dlcnMlNUJzYW1wbGVfaWR4JTVEJTVCJTIydGV4dCUyMiU1RCU1QjAlNUQlMEElMEFkZWNvZGVkX2V4YW1wbGUlMjAlM0QlMjB0b2tlbml6ZXIuZGVjb2RlKGlucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCU1QmlkeCU1RCklMEFwcmludChmJTIyVGhlb3JldGljYWwlMjBhbnN3ZXIlM0ElMjAlN0JhbnN3ZXIlN0QlMkMlMjBkZWNvZGVkJTIwZXhhbXBsZSUzQSUyMCU3QmRlY29kZWRfZXhhbXBsZSU3RCUyMik=",highlighted:`idx = <span class="hljs-number">4</span> | |
| sample_idx = inputs[<span class="hljs-string">"overflow_to_sample_mapping"</span>][idx] | |
| answer = answers[sample_idx][<span class="hljs-string">"text"</span>][<span class="hljs-number">0</span>] | |
| decoded_example = tokenizer.decode(inputs[<span class="hljs-string">"input_ids"</span>][idx]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"Theoretical answer: <span class="hljs-subst">{answer}</span>, decoded example: <span class="hljs-subst">{decoded_example}</span>"</span>)`,wrap:!1}}),Ol=new f({props:{code:"J1RoZW9yZXRpY2FsJTIwYW5zd2VyJTNBJTIwYSUyME1hcmlhbiUyMHBsYWNlJTIwb2YlMjBwcmF5ZXIlMjBhbmQlMjByZWZsZWN0aW9uJTJDJTIwZGVjb2RlZCUyMGV4YW1wbGUlM0ElMjAlNUJDTFMlNUQlMjBXaGF0JTIwaXMlMjB0aGUlMjBHcm90dG8lMjBhdCUyME5vdHJlJTIwRGFtZSUzRiUyMCU1QlNFUCU1RCUyMEFyY2hpdGVjdHVyYWxseSUyQyUyMHRoZSUyMHNjaG9vbCUyMGhhcyUyMGElMjBDYXRob2xpYyUyMGNoYXJhY3Rlci4lMjBBdG9wJTIwdGhlJTIwTWFpbiUyMEJ1aWxkaW5nJTVDJ3MlMjBnb2xkJTIwZG9tZSUyMGlzJTIwYSUyMGdvbGRlbiUyMHN0YXR1ZSUyMG9mJTIwdGhlJTIwVmlyZ2luJTIwTWFyeS4lMjBJbW1lZGlhdGVseSUyMGluJTIwZnJvbnQlMjBvZiUyMHRoZSUyME1haW4lMjBCdWlsZGluZyUyMGFuZCUyMGZhY2luZyUyMGl0JTJDJTIwaXMlMjBhJTIwY29wcGVyJTIwc3RhdHVlJTIwb2YlMjBDaHJpc3QlMjB3aXRoJTIwYXJtcyUyMHVwcmFpc2VkJTIwd2l0aCUyMHRoZSUyMGxlZ2VuZCUyMCUyMiUyMFZlbml0ZSUyMEFkJTIwTWUlMjBPbW5lcyUyMCUyMi4lMjBOZXh0JTIwdG8lMjB0aGUlMjBNYWluJTIwQnVpbGRpbmclMjBpcyUyMHRoZSUyMEJhc2lsaWNhJTIwb2YlMjB0aGUlMjBTYWNyZWQlMjBIZWFydC4lMjBJbW1lZGlhdGVseSUyMGJlaGluZCUyMHRoZSUyMGJhc2lsaWNhJTIwaXMlMjB0aGUlMjBHcm90JTIwJTVCU0VQJTVEJw==",highlighted:'<span class="hljs-string">'Theoretical answer: a Marian place of prayer and reflection, decoded example: [CLS] What is the Grotto at Notre Dame? [SEP] Architecturally, the school has a Catholic character. Atop the Main Building\\'s gold dome is a golden statue of the Virgin Mary. Immediately in front of the Main Building and facing it, is a copper statue of Christ with arms upraised with the legend " Venite Ad Me Omnes ". Next to the Main Building is the Basilica of the Sacred Heart. Immediately behind the basilica is the Grot [SEP]'</span>',wrap:!1}}),Oe=new Fn({props:{$$slots:{default:[Dr]},$$scope:{ctx:_}}}),tt=new f({props:{code:"bWF4X2xlbmd0aCUyMCUzRCUyMDM4NCUwQXN0cmlkZSUyMCUzRCUyMDEyOCUwQSUwQSUwQWRlZiUyMHByZXByb2Nlc3NfdHJhaW5pbmdfZXhhbXBsZXMoZXhhbXBsZXMpJTNBJTBBJTIwJTIwJTIwJTIwcXVlc3Rpb25zJTIwJTNEJTIwJTVCcS5zdHJpcCgpJTIwZm9yJTIwcSUyMGluJTIwZXhhbXBsZXMlNUIlMjJxdWVzdGlvbiUyMiU1RCU1RCUwQSUyMCUyMCUyMCUyMGlucHV0cyUyMCUzRCUyMHRva2VuaXplciglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBxdWVzdGlvbnMlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGFtcGxlcyU1QiUyMmNvbnRleHQlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfbGVuZ3RoJTNEbWF4X2xlbmd0aCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRydW5jYXRpb24lM0QlMjJvbmx5X3NlY29uZCUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0cmlkZSUzRHN0cmlkZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybl9vdmVyZmxvd2luZ190b2tlbnMlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuX29mZnNldHNfbWFwcGluZyUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwYWRkaW5nJTNEJTIybWF4X2xlbmd0aCUyMiUyQyUwQSUyMCUyMCUyMCUyMCklMEElMEElMjAlMjAlMjAlMjBvZmZzZXRfbWFwcGluZyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb2Zmc2V0X21hcHBpbmclMjIpJTBBJTIwJTIwJTIwJTIwc2FtcGxlX21hcCUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIpJTBBJTIwJTIwJTIwJTIwYW5zd2VycyUyMCUzRCUyMGV4YW1wbGVzJTVCJTIyYW5zd2VycyUyMiU1RCUwQSUyMCUyMCUyMCUyMHN0YXJ0X3Bvc2l0aW9ucyUyMCUzRCUyMCU1QiU1RCUwQSUyMCUyMCUyMCUyMGVuZF9wb3NpdGlvbnMlMjAlM0QlMjAlNUIlNUQlMEElMEElMjAlMjAlMjAlMjBmb3IlMjBpJTJDJTIwb2Zmc2V0JTIwaW4lMjBlbnVtZXJhdGUob2Zmc2V0X21hcHBpbmcpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2FtcGxlX2lkeCUyMCUzRCUyMHNhbXBsZV9tYXAlNUJpJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYW5zd2VyJTIwJTNEJTIwYW5zd2VycyU1QnNhbXBsZV9pZHglNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9jaGFyJTIwJTNEJTIwYW5zd2VyJTVCJTIyYW5zd2VyX3N0YXJ0JTIyJTVEJTVCMCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZF9jaGFyJTIwJTNEJTIwYW5zd2VyJTVCJTIyYW5zd2VyX3N0YXJ0JTIyJTVEJTVCMCU1RCUyMCUyQiUyMGxlbihhbnN3ZXIlNUIlMjJ0ZXh0JTIyJTVEJTVCMCU1RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKGkpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwRmluZCUyMHRoZSUyMHN0YXJ0JTIwYW5kJTIwZW5kJTIwb2YlMjB0aGUlMjBjb250ZXh0JTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwc2VxdWVuY2VfaWRzJTVCaWR4JTVEJTIwISUzRCUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZHglMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGV4dF9zdGFydCUyMCUzRCUyMGlkeCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwc2VxdWVuY2VfaWRzJTVCaWR4JTVEJTIwJTNEJTNEJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUyQiUzRCUyMDElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb250ZXh0X2VuZCUyMCUzRCUyMGlkeCUyMC0lMjAxJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwSWYlMjB0aGUlMjBhbnN3ZXIlMjBpcyUyMG5vdCUyMGZ1bGx5JTIwaW5zaWRlJTIwdGhlJTIwY29udGV4dCUyQyUyMGxhYmVsJTIwaXMlMjAoMCUyQyUyMDApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBvZmZzZXQlNUJjb250ZXh0X3N0YXJ0JTVEJTVCMCU1RCUyMCUzRSUyMHN0YXJ0X2NoYXIlMjBvciUyMG9mZnNldCU1QmNvbnRleHRfZW5kJTVEJTVCMSU1RCUyMCUzQyUyMGVuZF9jaGFyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3RhcnRfcG9zaXRpb25zLmFwcGVuZCgwKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVuZF9wb3NpdGlvbnMuYXBwZW5kKDApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME90aGVyd2lzZSUyMGl0J3MlMjB0aGUlMjBzdGFydCUyMGFuZCUyMGVuZCUyMHRva2VuJTIwcG9zaXRpb25zJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwY29udGV4dF9zdGFydCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwaWR4JTIwJTNDJTNEJTIwY29udGV4dF9lbmQlMjBhbmQlMjBvZmZzZXQlNUJpZHglNUQlNUIwJTVEJTIwJTNDJTNEJTIwc3RhcnRfY2hhciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUyQiUzRCUyMDElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9wb3NpdGlvbnMuYXBwZW5kKGlkeCUyMC0lMjAxKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlkeCUyMCUzRCUyMGNvbnRleHRfZW5kJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2hpbGUlMjBpZHglMjAlM0UlM0QlMjBjb250ZXh0X3N0YXJ0JTIwYW5kJTIwb2Zmc2V0JTVCaWR4JTVEJTVCMSU1RCUyMCUzRSUzRCUyMGVuZF9jaGFyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWR4JTIwLSUzRCUyMDElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfcG9zaXRpb25zLmFwcGVuZChpZHglMjAlMkIlMjAxKSUwQSUwQSUyMCUyMCUyMCUyMGlucHV0cyU1QiUyMnN0YXJ0X3Bvc2l0aW9ucyUyMiU1RCUyMCUzRCUyMHN0YXJ0X3Bvc2l0aW9ucyUwQSUyMCUyMCUyMCUyMGlucHV0cyU1QiUyMmVuZF9wb3NpdGlvbnMlMjIlNUQlMjAlM0QlMjBlbmRfcG9zaXRpb25zJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwaW5wdXRz",highlighted:`max_length = <span class="hljs-number">384</span> | |
| stride = <span class="hljs-number">128</span> | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">preprocess_training_examples</span>(<span class="hljs-params">examples</span>): | |
| questions = [q.strip() <span class="hljs-keyword">for</span> q <span class="hljs-keyword">in</span> examples[<span class="hljs-string">"question"</span>]] | |
| inputs = tokenizer( | |
| questions, | |
| examples[<span class="hljs-string">"context"</span>], | |
| max_length=max_length, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=stride, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| return_offsets_mapping=<span class="hljs-literal">True</span>, | |
| padding=<span class="hljs-string">"max_length"</span>, | |
| ) | |
| offset_mapping = inputs.pop(<span class="hljs-string">"offset_mapping"</span>) | |
| sample_map = inputs.pop(<span class="hljs-string">"overflow_to_sample_mapping"</span>) | |
| answers = examples[<span class="hljs-string">"answers"</span>] | |
| start_positions = [] | |
| end_positions = [] | |
| <span class="hljs-keyword">for</span> i, offset <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(offset_mapping): | |
| sample_idx = sample_map[i] | |
| answer = answers[sample_idx] | |
| start_char = answer[<span class="hljs-string">"answer_start"</span>][<span class="hljs-number">0</span>] | |
| end_char = answer[<span class="hljs-string">"answer_start"</span>][<span class="hljs-number">0</span>] + <span class="hljs-built_in">len</span>(answer[<span class="hljs-string">"text"</span>][<span class="hljs-number">0</span>]) | |
| sequence_ids = inputs.sequence_ids(i) | |
| <span class="hljs-comment"># Find the start and end of the context</span> | |
| idx = <span class="hljs-number">0</span> | |
| <span class="hljs-keyword">while</span> sequence_ids[idx] != <span class="hljs-number">1</span>: | |
| idx += <span class="hljs-number">1</span> | |
| context_start = idx | |
| <span class="hljs-keyword">while</span> sequence_ids[idx] == <span class="hljs-number">1</span>: | |
| idx += <span class="hljs-number">1</span> | |
| context_end = idx - <span class="hljs-number">1</span> | |
| <span class="hljs-comment"># If the answer is not fully inside the context, label is (0, 0)</span> | |
| <span class="hljs-keyword">if</span> offset[context_start][<span class="hljs-number">0</span>] > start_char <span class="hljs-keyword">or</span> offset[context_end][<span class="hljs-number">1</span>] < end_char: | |
| start_positions.append(<span class="hljs-number">0</span>) | |
| end_positions.append(<span class="hljs-number">0</span>) | |
| <span class="hljs-keyword">else</span>: | |
| <span class="hljs-comment"># Otherwise it's the start and end token positions</span> | |
| idx = context_start | |
| <span class="hljs-keyword">while</span> idx <= context_end <span class="hljs-keyword">and</span> offset[idx][<span class="hljs-number">0</span>] <= start_char: | |
| idx += <span class="hljs-number">1</span> | |
| start_positions.append(idx - <span class="hljs-number">1</span>) | |
| idx = context_end | |
| <span class="hljs-keyword">while</span> idx >= context_start <span class="hljs-keyword">and</span> offset[idx][<span class="hljs-number">1</span>] >= end_char: | |
| idx -= <span class="hljs-number">1</span> | |
| end_positions.append(idx + <span class="hljs-number">1</span>) | |
| inputs[<span class="hljs-string">"start_positions"</span>] = start_positions | |
| inputs[<span class="hljs-string">"end_positions"</span>] = end_positions | |
| <span class="hljs-keyword">return</span> inputs`,wrap:!1}}),nt=new f({props:{code:"dHJhaW5fZGF0YXNldCUyMCUzRCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELm1hcCglMEElMjAlMjAlMjAlMjBwcmVwcm9jZXNzX3RyYWluaW5nX2V4YW1wbGVzJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hlZCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZW1vdmVfY29sdW1ucyUzRHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELmNvbHVtbl9uYW1lcyUyQyUwQSklMEFsZW4ocmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQpJTJDJTIwbGVuKHRyYWluX2RhdGFzZXQp",highlighted:`train_dataset = raw_datasets[<span class="hljs-string">"train"</span>].<span class="hljs-built_in">map</span>( | |
| preprocess_training_examples, | |
| batched=<span class="hljs-literal">True</span>, | |
| remove_columns=raw_datasets[<span class="hljs-string">"train"</span>].column_names, | |
| ) | |
| <span class="hljs-built_in">len</span>(raw_datasets[<span class="hljs-string">"train"</span>]), <span class="hljs-built_in">len</span>(train_dataset)`,wrap:!1}}),it=new f({props:{code:"KDg3NTk5JTJDJTIwODg3Mjkp",highlighted:'(<span class="hljs-number">87599</span>, <span class="hljs-number">88729</span>)',wrap:!1}}),Mt=new q({props:{title:"Procesarea datelor de validare",local:"processing-the-validation-data",headingTag:"h3"}}),ut=new f({props:{code:"ZGVmJTIwcHJlcHJvY2Vzc192YWxpZGF0aW9uX2V4YW1wbGVzKGV4YW1wbGVzKSUzQSUwQSUyMCUyMCUyMCUyMHF1ZXN0aW9ucyUyMCUzRCUyMCU1QnEuc3RyaXAoKSUyMGZvciUyMHElMjBpbiUyMGV4YW1wbGVzJTVCJTIycXVlc3Rpb24lMjIlNUQlNUQlMEElMjAlMjAlMjAlMjBpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcXVlc3Rpb25zJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZXhhbXBsZXMlNUIlMjJjb250ZXh0JTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWF4X2xlbmd0aCUzRG1heF9sZW5ndGglMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0cnVuY2F0aW9uJTNEJTIyb25seV9zZWNvbmQlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdHJpZGUlM0RzdHJpZGUlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm5fb3ZlcmZsb3dpbmdfdG9rZW5zJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJldHVybl9vZmZzZXRzX21hcHBpbmclM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcGFkZGluZyUzRCUyMm1heF9sZW5ndGglMjIlMkMlMEElMjAlMjAlMjAlMjApJTBBJTBBJTIwJTIwJTIwJTIwc2FtcGxlX21hcCUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIpJTBBJTIwJTIwJTIwJTIwZXhhbXBsZV9pZHMlMjAlM0QlMjAlNUIlNUQlMEElMEElMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4oaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEKSklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzYW1wbGVfaWR4JTIwJTNEJTIwc2FtcGxlX21hcCU1QmklNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGFtcGxlX2lkcy5hcHBlbmQoZXhhbXBsZXMlNUIlMjJpZCUyMiU1RCU1QnNhbXBsZV9pZHglNUQpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcyhpKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9mZnNldCUyMCUzRCUyMGlucHV0cyU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTVCaSU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlucHV0cyU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTVCaSU1RCUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG8lMjBpZiUyMHNlcXVlbmNlX2lkcyU1QmslNUQlMjAlM0QlM0QlMjAxJTIwZWxzZSUyME5vbmUlMjBmb3IlMjBrJTJDJTIwbyUyMGluJTIwZW51bWVyYXRlKG9mZnNldCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMEElMEElMjAlMjAlMjAlMjBpbnB1dHMlNUIlMjJleGFtcGxlX2lkJTIyJTVEJTIwJTNEJTIwZXhhbXBsZV9pZHMlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBpbnB1dHM=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">preprocess_validation_examples</span>(<span class="hljs-params">examples</span>): | |
| questions = [q.strip() <span class="hljs-keyword">for</span> q <span class="hljs-keyword">in</span> examples[<span class="hljs-string">"question"</span>]] | |
| inputs = tokenizer( | |
| questions, | |
| examples[<span class="hljs-string">"context"</span>], | |
| max_length=max_length, | |
| truncation=<span class="hljs-string">"only_second"</span>, | |
| stride=stride, | |
| return_overflowing_tokens=<span class="hljs-literal">True</span>, | |
| return_offsets_mapping=<span class="hljs-literal">True</span>, | |
| padding=<span class="hljs-string">"max_length"</span>, | |
| ) | |
| sample_map = inputs.pop(<span class="hljs-string">"overflow_to_sample_mapping"</span>) | |
| example_ids = [] | |
| <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(inputs[<span class="hljs-string">"input_ids"</span>])): | |
| sample_idx = sample_map[i] | |
| example_ids.append(examples[<span class="hljs-string">"id"</span>][sample_idx]) | |
| sequence_ids = inputs.sequence_ids(i) | |
| offset = inputs[<span class="hljs-string">"offset_mapping"</span>][i] | |
| inputs[<span class="hljs-string">"offset_mapping"</span>][i] = [ | |
| o <span class="hljs-keyword">if</span> sequence_ids[k] == <span class="hljs-number">1</span> <span class="hljs-keyword">else</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">for</span> k, o <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(offset) | |
| ] | |
| inputs[<span class="hljs-string">"example_id"</span>] = example_ids | |
| <span class="hljs-keyword">return</span> inputs`,wrap:!1}}),dt=new f({props:{code:"dmFsaWRhdGlvbl9kYXRhc2V0JTIwJTNEJTIwcmF3X2RhdGFzZXRzJTVCJTIydmFsaWRhdGlvbiUyMiU1RC5tYXAoJTBBJTIwJTIwJTIwJTIwcHJlcHJvY2Vzc192YWxpZGF0aW9uX2V4YW1wbGVzJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hlZCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZW1vdmVfY29sdW1ucyUzRHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQuY29sdW1uX25hbWVzJTJDJTBBKSUwQWxlbihyYXdfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEKSUyQyUyMGxlbih2YWxpZGF0aW9uX2RhdGFzZXQp",highlighted:`validation_dataset = raw_datasets[<span class="hljs-string">"validation"</span>].<span class="hljs-built_in">map</span>( | |
| preprocess_validation_examples, | |
| batched=<span class="hljs-literal">True</span>, | |
| remove_columns=raw_datasets[<span class="hljs-string">"validation"</span>].column_names, | |
| ) | |
| <span class="hljs-built_in">len</span>(raw_datasets[<span class="hljs-string">"validation"</span>]), <span class="hljs-built_in">len</span>(validation_dataset)`,wrap:!1}}),mt=new f({props:{code:"KDEwNTcwJTJDJTIwMTA4MjIp",highlighted:'(<span class="hljs-number">10570</span>, <span class="hljs-number">10822</span>)',wrap:!1}});const mr=[Pr,Lr],ua=[];function yr(e,t){return e[0]==="pt"?0:1}Ue=yr(_),we=ua[Ue]=mr[Ue](_),Ut=new q({props:{title:"Post-procesare",local:"post-processing",headingTag:"h3"}});const Jr=[Or,Kr],oa=[];function Ur(e,t){return e[0]==="pt"?0:1}Te=Ur(_),je=oa[Te]=Jr[Te](_),bt=new f({props:{code:"c21hbGxfZXZhbF9zZXQlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVELnNlbGVjdChyYW5nZSgxMDApKSUwQXRyYWluZWRfY2hlY2twb2ludCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQtYmFzZS1jYXNlZC1kaXN0aWxsZWQtc3F1YWQlMjIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCh0cmFpbmVkX2NoZWNrcG9pbnQpJTBBZXZhbF9zZXQlMjAlM0QlMjBzbWFsbF9ldmFsX3NldC5tYXAoJTBBJTIwJTIwJTIwJTIwcHJlcHJvY2Vzc192YWxpZGF0aW9uX2V4YW1wbGVzJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hlZCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZW1vdmVfY29sdW1ucyUzRHJhd19kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQuY29sdW1uX25hbWVzJTJDJTBBKQ==",highlighted:`small_eval_set = raw_datasets[<span class="hljs-string">"validation"</span>].select(<span class="hljs-built_in">range</span>(<span class="hljs-number">100</span>)) | |
| trained_checkpoint = <span class="hljs-string">"distilbert-base-cased-distilled-squad"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(trained_checkpoint) | |
| eval_set = small_eval_set.<span class="hljs-built_in">map</span>( | |
| preprocess_validation_examples, | |
| batched=<span class="hljs-literal">True</span>, | |
| remove_columns=raw_datasets[<span class="hljs-string">"validation"</span>].column_names, | |
| )`,wrap:!1}}),ht=new f({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:"tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)",wrap:!1}});const wr=[lM,eM],da=[];function Tr(e,t){return e[0]==="pt"?0:1}be=Tr(_),fe=da[be]=wr[be](_),Zt=new f({props:{code:"aW1wb3J0JTIwY29sbGVjdGlvbnMlMEElMEFleGFtcGxlX3RvX2ZlYXR1cmVzJTIwJTNEJTIwY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCklMEFmb3IlMjBpZHglMkMlMjBmZWF0dXJlJTIwaW4lMjBlbnVtZXJhdGUoZXZhbF9zZXQpJTNBJTBBJTIwJTIwJTIwJTIwZXhhbXBsZV90b19mZWF0dXJlcyU1QmZlYXR1cmUlNUIlMjJleGFtcGxlX2lkJTIyJTVEJTVELmFwcGVuZChpZHgp",highlighted:`<span class="hljs-keyword">import</span> collections | |
| example_to_features = collections.defaultdict(<span class="hljs-built_in">list</span>) | |
| <span class="hljs-keyword">for</span> idx, feature <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(eval_set): | |
| example_to_features[feature[<span class="hljs-string">"example_id"</span>]].append(idx)`,wrap:!1}}),_t=new f({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBbl9iZXN0JTIwJTNEJTIwMjAlMEFtYXhfYW5zd2VyX2xlbmd0aCUyMCUzRCUyMDMwJTBBcHJlZGljdGVkX2Fuc3dlcnMlMjAlM0QlMjAlNUIlNUQlMEElMEFmb3IlMjBleGFtcGxlJTIwaW4lMjBzbWFsbF9ldmFsX3NldCUzQSUwQSUyMCUyMCUyMCUyMGV4YW1wbGVfaWQlMjAlM0QlMjBleGFtcGxlJTVCJTIyaWQlMjIlNUQlMEElMjAlMjAlMjAlMjBjb250ZXh0JTIwJTNEJTIwZXhhbXBsZSU1QiUyMmNvbnRleHQlMjIlNUQlMEElMjAlMjAlMjAlMjBhbnN3ZXJzJTIwJTNEJTIwJTVCJTVEJTBBJTBBJTIwJTIwJTIwJTIwZm9yJTIwZmVhdHVyZV9pbmRleCUyMGluJTIwZXhhbXBsZV90b19mZWF0dXJlcyU1QmV4YW1wbGVfaWQlNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9sb2dpdCUyMCUzRCUyMHN0YXJ0X2xvZ2l0cyU1QmZlYXR1cmVfaW5kZXglNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfbG9naXQlMjAlM0QlMjBlbmRfbG9naXRzJTVCZmVhdHVyZV9pbmRleCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9mZnNldHMlMjAlM0QlMjBldmFsX3NldCU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTVCZmVhdHVyZV9pbmRleCU1RCUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0YXJ0X2luZGV4ZXMlMjAlM0QlMjBucC5hcmdzb3J0KHN0YXJ0X2xvZ2l0KSU1Qi0xJTIwJTNBJTIwLW5fYmVzdCUyMC0lMjAxJTIwJTNBJTIwLTElNUQudG9saXN0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfaW5kZXhlcyUyMCUzRCUyMG5wLmFyZ3NvcnQoZW5kX2xvZ2l0KSU1Qi0xJTIwJTNBJTIwLW5fYmVzdCUyMC0lMjAxJTIwJTNBJTIwLTElNUQudG9saXN0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBzdGFydF9pbmRleCUyMGluJTIwc3RhcnRfaW5kZXhlcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGVuZF9pbmRleCUyMGluJTIwZW5kX2luZGV4ZXMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBTa2lwJTIwYW5zd2VycyUyMHRoYXQlMjBhcmUlMjBub3QlMjBmdWxseSUyMGluJTIwdGhlJTIwY29udGV4dCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwb2Zmc2V0cyU1QnN0YXJ0X2luZGV4JTVEJTIwaXMlMjBOb25lJTIwb3IlMjBvZmZzZXRzJTVCZW5kX2luZGV4JTVEJTIwaXMlMjBOb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBTa2lwJTIwYW5zd2VycyUyMHdpdGglMjBhJTIwbGVuZ3RoJTIwdGhhdCUyMGlzJTIwZWl0aGVyJTIwJTNDJTIwMCUyMG9yJTIwJTNFJTIwbWF4X2Fuc3dlcl9sZW5ndGguJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjAoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZW5kX2luZGV4JTIwJTNDJTIwc3RhcnRfaW5kZXglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvciUyMGVuZF9pbmRleCUyMC0lMjBzdGFydF9pbmRleCUyMCUyQiUyMDElMjAlM0UlMjBtYXhfYW5zd2VyX2xlbmd0aCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb250aW51ZSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFuc3dlcnMuYXBwZW5kKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMnRleHQlMjIlM0ElMjBjb250ZXh0JTVCb2Zmc2V0cyU1QnN0YXJ0X2luZGV4JTVEJTVCMCU1RCUyMCUzQSUyMG9mZnNldHMlNUJlbmRfaW5kZXglNUQlNUIxJTVEJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIybG9naXRfc2NvcmUlMjIlM0ElMjBzdGFydF9sb2dpdCU1QnN0YXJ0X2luZGV4JTVEJTIwJTJCJTIwZW5kX2xvZ2l0JTVCZW5kX2luZGV4JTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUwQSUwQSUyMCUyMCUyMCUyMGJlc3RfYW5zd2VyJTIwJTNEJTIwbWF4KGFuc3dlcnMlMkMlMjBrZXklM0RsYW1iZGElMjB4JTNBJTIweCU1QiUyMmxvZ2l0X3Njb3JlJTIyJTVEKSUwQSUyMCUyMCUyMCUyMHByZWRpY3RlZF9hbnN3ZXJzLmFwcGVuZCglN0IlMjJpZCUyMiUzQSUyMGV4YW1wbGVfaWQlMkMlMjAlMjJwcmVkaWN0aW9uX3RleHQlMjIlM0ElMjBiZXN0X2Fuc3dlciU1QiUyMnRleHQlMjIlNUQlN0Qp",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| n_best = <span class="hljs-number">20</span> | |
| max_answer_length = <span class="hljs-number">30</span> | |
| predicted_answers = [] | |
| <span class="hljs-keyword">for</span> example <span class="hljs-keyword">in</span> small_eval_set: | |
| example_id = example[<span class="hljs-string">"id"</span>] | |
| context = example[<span class="hljs-string">"context"</span>] | |
| answers = [] | |
| <span class="hljs-keyword">for</span> feature_index <span class="hljs-keyword">in</span> example_to_features[example_id]: | |
| start_logit = start_logits[feature_index] | |
| end_logit = end_logits[feature_index] | |
| offsets = eval_set[<span class="hljs-string">"offset_mapping"</span>][feature_index] | |
| start_indexes = np.argsort(start_logit)[-<span class="hljs-number">1</span> : -n_best - <span class="hljs-number">1</span> : -<span class="hljs-number">1</span>].tolist() | |
| end_indexes = np.argsort(end_logit)[-<span class="hljs-number">1</span> : -n_best - <span class="hljs-number">1</span> : -<span class="hljs-number">1</span>].tolist() | |
| <span class="hljs-keyword">for</span> start_index <span class="hljs-keyword">in</span> start_indexes: | |
| <span class="hljs-keyword">for</span> end_index <span class="hljs-keyword">in</span> end_indexes: | |
| <span class="hljs-comment"># Skip answers that are not fully in the context</span> | |
| <span class="hljs-keyword">if</span> offsets[start_index] <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> offsets[end_index] <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>: | |
| <span class="hljs-keyword">continue</span> | |
| <span class="hljs-comment"># Skip answers with a length that is either < 0 or > max_answer_length.</span> | |
| <span class="hljs-keyword">if</span> ( | |
| end_index < start_index | |
| <span class="hljs-keyword">or</span> end_index - start_index + <span class="hljs-number">1</span> > max_answer_length | |
| ): | |
| <span class="hljs-keyword">continue</span> | |
| answers.append( | |
| { | |
| <span class="hljs-string">"text"</span>: context[offsets[start_index][<span class="hljs-number">0</span>] : offsets[end_index][<span class="hljs-number">1</span>]], | |
| <span class="hljs-string">"logit_score"</span>: start_logit[start_index] + end_logit[end_index], | |
| } | |
| ) | |
| best_answer = <span class="hljs-built_in">max</span>(answers, key=<span class="hljs-keyword">lambda</span> x: x[<span class="hljs-string">"logit_score"</span>]) | |
| predicted_answers.append({<span class="hljs-string">"id"</span>: example_id, <span class="hljs-string">"prediction_text"</span>: best_answer[<span class="hljs-string">"text"</span>]})`,wrap:!1}}),At=new f({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMnNxdWFkJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> evaluate | |
| metric = evaluate.load(<span class="hljs-string">"squad"</span>)`,wrap:!1}}),Vt=new f({props:{code:"dGhlb3JldGljYWxfYW5zd2VycyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCU3QiUyMmlkJTIyJTNBJTIwZXglNUIlMjJpZCUyMiU1RCUyQyUyMCUyMmFuc3dlcnMlMjIlM0ElMjBleCU1QiUyMmFuc3dlcnMlMjIlNUQlN0QlMjBmb3IlMjBleCUyMGluJTIwc21hbGxfZXZhbF9zZXQlMEElNUQ=",highlighted:`theoretical_answers = [ | |
| {<span class="hljs-string">"id"</span>: ex[<span class="hljs-string">"id"</span>], <span class="hljs-string">"answers"</span>: ex[<span class="hljs-string">"answers"</span>]} <span class="hljs-keyword">for</span> ex <span class="hljs-keyword">in</span> small_eval_set | |
| ]`,wrap:!1}}),Xt=new f({props:{code:"cHJpbnQocHJlZGljdGVkX2Fuc3dlcnMlNUIwJTVEKSUwQXByaW50KHRoZW9yZXRpY2FsX2Fuc3dlcnMlNUIwJTVEKQ==",highlighted:`<span class="hljs-built_in">print</span>(predicted_answers[<span class="hljs-number">0</span>]) | |
| <span class="hljs-built_in">print</span>(theoretical_answers[<span class="hljs-number">0</span>])`,wrap:!1}}),kt=new f({props:{code:"JTdCJ2lkJyUzQSUyMCc1NmJlNGRiMGFjYjgwMDE0MDBhNTAyZWMnJTJDJTIwJ3ByZWRpY3Rpb25fdGV4dCclM0ElMjAnRGVudmVyJTIwQnJvbmNvcyclN0QlMEElN0InaWQnJTNBJTIwJzU2YmU0ZGIwYWNiODAwMTQwMGE1MDJlYyclMkMlMjAnYW5zd2VycyclM0ElMjAlN0IndGV4dCclM0ElMjAlNUInRGVudmVyJTIwQnJvbmNvcyclMkMlMjAnRGVudmVyJTIwQnJvbmNvcyclMkMlMjAnRGVudmVyJTIwQnJvbmNvcyclNUQlMkMlMjAnYW5zd2VyX3N0YXJ0JyUzQSUyMCU1QjE3NyUyQyUyMDE3NyUyQyUyMDE3NyU1RCU3RCU3RA==",highlighted:`{<span class="hljs-string">'id'</span>: <span class="hljs-string">'56be4db0acb8001400a502ec'</span>, <span class="hljs-string">'prediction_text'</span>: <span class="hljs-string">'Denver Broncos'</span>} | |
| {<span class="hljs-string">'id'</span>: <span class="hljs-string">'56be4db0acb8001400a502ec'</span>, <span class="hljs-string">'answers'</span>: {<span class="hljs-string">'text'</span>: [<span class="hljs-string">'Denver Broncos'</span>, <span class="hljs-string">'Denver Broncos'</span>, <span class="hljs-string">'Denver Broncos'</span>], <span class="hljs-string">'answer_start'</span>: [<span class="hljs-number">177</span>, <span class="hljs-number">177</span>, <span class="hljs-number">177</span>]}}`,wrap:!1}}),$t=new f({props:{code:"bWV0cmljLmNvbXB1dGUocHJlZGljdGlvbnMlM0RwcmVkaWN0ZWRfYW5zd2VycyUyQyUyMHJlZmVyZW5jZXMlM0R0aGVvcmV0aWNhbF9hbnN3ZXJzKQ==",highlighted:"metric.compute(predictions=predicted_answers, references=theoretical_answers)",wrap:!1}}),Qt=new f({props:{code:"JTdCJ2V4YWN0X21hdGNoJyUzQSUyMDgzLjAlMkMlMjAnZjEnJTNBJTIwODguMjUlN0Q=",highlighted:'{<span class="hljs-string">'exact_match'</span>: <span class="hljs-number">83.0</span>, <span class="hljs-string">'f1'</span>: <span class="hljs-number">88.25</span>}',wrap:!1}});function jr(e,t){return e[0]==="pt"?aM:tM}let Yn=jr(_),Le=Yn(_);Nt=new f({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEElMEElMEFkZWYlMjBjb21wdXRlX21ldHJpY3Moc3RhcnRfbG9naXRzJTJDJTIwZW5kX2xvZ2l0cyUyQyUyMGZlYXR1cmVzJTJDJTIwZXhhbXBsZXMpJTNBJTBBJTIwJTIwJTIwJTIwZXhhbXBsZV90b19mZWF0dXJlcyUyMCUzRCUyMGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpJTBBJTIwJTIwJTIwJTIwZm9yJTIwaWR4JTJDJTIwZmVhdHVyZSUyMGluJTIwZW51bWVyYXRlKGZlYXR1cmVzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4YW1wbGVfdG9fZmVhdHVyZXMlNUJmZWF0dXJlJTVCJTIyZXhhbXBsZV9pZCUyMiU1RCU1RC5hcHBlbmQoaWR4KSUwQSUwQSUyMCUyMCUyMCUyMHByZWRpY3RlZF9hbnN3ZXJzJTIwJTNEJTIwJTVCJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwZXhhbXBsZSUyMGluJTIwdHFkbShleGFtcGxlcyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBleGFtcGxlX2lkJTIwJTNEJTIwZXhhbXBsZSU1QiUyMmlkJTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGV4dCUyMCUzRCUyMGV4YW1wbGUlNUIlMjJjb250ZXh0JTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYW5zd2VycyUyMCUzRCUyMCU1QiU1RCUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMExvb3AlMjB0aHJvdWdoJTIwYWxsJTIwZmVhdHVyZXMlMjBhc3NvY2lhdGVkJTIwd2l0aCUyMHRoYXQlMjBleGFtcGxlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwZmVhdHVyZV9pbmRleCUyMGluJTIwZXhhbXBsZV90b19mZWF0dXJlcyU1QmV4YW1wbGVfaWQlNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzdGFydF9sb2dpdCUyMCUzRCUyMHN0YXJ0X2xvZ2l0cyU1QmZlYXR1cmVfaW5kZXglNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfbG9naXQlMjAlM0QlMjBlbmRfbG9naXRzJTVCZmVhdHVyZV9pbmRleCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9mZnNldHMlMjAlM0QlMjBmZWF0dXJlcyU1QmZlYXR1cmVfaW5kZXglNUQlNUIlMjJvZmZzZXRfbWFwcGluZyUyMiU1RCUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHN0YXJ0X2luZGV4ZXMlMjAlM0QlMjBucC5hcmdzb3J0KHN0YXJ0X2xvZ2l0KSU1Qi0xJTIwJTNBJTIwLW5fYmVzdCUyMC0lMjAxJTIwJTNBJTIwLTElNUQudG9saXN0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfaW5kZXhlcyUyMCUzRCUyMG5wLmFyZ3NvcnQoZW5kX2xvZ2l0KSU1Qi0xJTIwJTNBJTIwLW5fYmVzdCUyMC0lMjAxJTIwJTNBJTIwLTElNUQudG9saXN0KCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBzdGFydF9pbmRleCUyMGluJTIwc3RhcnRfaW5kZXhlcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGVuZF9pbmRleCUyMGluJTIwZW5kX2luZGV4ZXMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBTa2lwJTIwYW5zd2VycyUyMHRoYXQlMjBhcmUlMjBub3QlMjBmdWxseSUyMGluJTIwdGhlJTIwY29udGV4dCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwb2Zmc2V0cyU1QnN0YXJ0X2luZGV4JTVEJTIwaXMlMjBOb25lJTIwb3IlMjBvZmZzZXRzJTVCZW5kX2luZGV4JTVEJTIwaXMlMjBOb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBTa2lwJTIwYW5zd2VycyUyMHdpdGglMjBhJTIwbGVuZ3RoJTIwdGhhdCUyMGlzJTIwZWl0aGVyJTIwJTNDJTIwMCUyMG9yJTIwJTNFJTIwbWF4X2Fuc3dlcl9sZW5ndGglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbmRfaW5kZXglMjAlM0MlMjBzdGFydF9pbmRleCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9yJTIwZW5kX2luZGV4JTIwLSUyMHN0YXJ0X2luZGV4JTIwJTJCJTIwMSUyMCUzRSUyMG1heF9hbnN3ZXJfbGVuZ3RoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRpbnVlJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYW5zd2VyJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIydGV4dCUyMiUzQSUyMGNvbnRleHQlNUJvZmZzZXRzJTVCc3RhcnRfaW5kZXglNUQlNUIwJTVEJTIwJTNBJTIwb2Zmc2V0cyU1QmVuZF9pbmRleCU1RCU1QjElNUQlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJsb2dpdF9zY29yZSUyMiUzQSUyMHN0YXJ0X2xvZ2l0JTVCc3RhcnRfaW5kZXglNUQlMjAlMkIlMjBlbmRfbG9naXQlNUJlbmRfaW5kZXglNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhbnN3ZXJzLmFwcGVuZChhbnN3ZXIpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU2VsZWN0JTIwdGhlJTIwYW5zd2VyJTIwd2l0aCUyMHRoZSUyMGJlc3QlMjBzY29yZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGVuKGFuc3dlcnMpJTIwJTNFJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlc3RfYW5zd2VyJTIwJTNEJTIwbWF4KGFuc3dlcnMlMkMlMjBrZXklM0RsYW1iZGElMjB4JTNBJTIweCU1QiUyMmxvZ2l0X3Njb3JlJTIyJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZWRpY3RlZF9hbnN3ZXJzLmFwcGVuZCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlN0IlMjJpZCUyMiUzQSUyMGV4YW1wbGVfaWQlMkMlMjAlMjJwcmVkaWN0aW9uX3RleHQlMjIlM0ElMjBiZXN0X2Fuc3dlciU1QiUyMnRleHQlMjIlNUQlN0QlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZWRpY3RlZF9hbnN3ZXJzLmFwcGVuZCglN0IlMjJpZCUyMiUzQSUyMGV4YW1wbGVfaWQlMkMlMjAlMjJwcmVkaWN0aW9uX3RleHQlMjIlM0ElMjAlMjIlMjIlN0QpJTBBJTBBJTIwJTIwJTIwJTIwdGhlb3JldGljYWxfYW5zd2VycyUyMCUzRCUyMCU1QiU3QiUyMmlkJTIyJTNBJTIwZXglNUIlMjJpZCUyMiU1RCUyQyUyMCUyMmFuc3dlcnMlMjIlM0ElMjBleCU1QiUyMmFuc3dlcnMlMjIlNUQlN0QlMjBmb3IlMjBleCUyMGluJTIwZXhhbXBsZXMlNUQlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBtZXRyaWMuY29tcHV0ZShwcmVkaWN0aW9ucyUzRHByZWRpY3RlZF9hbnN3ZXJzJTJDJTIwcmVmZXJlbmNlcyUzRHRoZW9yZXRpY2FsX2Fuc3dlcnMp",highlighted:`<span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm | |
| <span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">start_logits, end_logits, features, examples</span>): | |
| example_to_features = collections.defaultdict(<span class="hljs-built_in">list</span>) | |
| <span class="hljs-keyword">for</span> idx, feature <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(features): | |
| example_to_features[feature[<span class="hljs-string">"example_id"</span>]].append(idx) | |
| predicted_answers = [] | |
| <span class="hljs-keyword">for</span> example <span class="hljs-keyword">in</span> tqdm(examples): | |
| example_id = example[<span class="hljs-string">"id"</span>] | |
| context = example[<span class="hljs-string">"context"</span>] | |
| answers = [] | |
| <span class="hljs-comment"># Loop through all features associated with that example</span> | |
| <span class="hljs-keyword">for</span> feature_index <span class="hljs-keyword">in</span> example_to_features[example_id]: | |
| start_logit = start_logits[feature_index] | |
| end_logit = end_logits[feature_index] | |
| offsets = features[feature_index][<span class="hljs-string">"offset_mapping"</span>] | |
| start_indexes = np.argsort(start_logit)[-<span class="hljs-number">1</span> : -n_best - <span class="hljs-number">1</span> : -<span class="hljs-number">1</span>].tolist() | |
| end_indexes = np.argsort(end_logit)[-<span class="hljs-number">1</span> : -n_best - <span class="hljs-number">1</span> : -<span class="hljs-number">1</span>].tolist() | |
| <span class="hljs-keyword">for</span> start_index <span class="hljs-keyword">in</span> start_indexes: | |
| <span class="hljs-keyword">for</span> end_index <span class="hljs-keyword">in</span> end_indexes: | |
| <span class="hljs-comment"># Skip answers that are not fully in the context</span> | |
| <span class="hljs-keyword">if</span> offsets[start_index] <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> offsets[end_index] <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>: | |
| <span class="hljs-keyword">continue</span> | |
| <span class="hljs-comment"># Skip answers with a length that is either < 0 or > max_answer_length</span> | |
| <span class="hljs-keyword">if</span> ( | |
| end_index < start_index | |
| <span class="hljs-keyword">or</span> end_index - start_index + <span class="hljs-number">1</span> > max_answer_length | |
| ): | |
| <span class="hljs-keyword">continue</span> | |
| answer = { | |
| <span class="hljs-string">"text"</span>: context[offsets[start_index][<span class="hljs-number">0</span>] : offsets[end_index][<span class="hljs-number">1</span>]], | |
| <span class="hljs-string">"logit_score"</span>: start_logit[start_index] + end_logit[end_index], | |
| } | |
| answers.append(answer) | |
| <span class="hljs-comment"># Select the answer with the best score</span> | |
| <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(answers) > <span class="hljs-number">0</span>: | |
| best_answer = <span class="hljs-built_in">max</span>(answers, key=<span class="hljs-keyword">lambda</span> x: x[<span class="hljs-string">"logit_score"</span>]) | |
| predicted_answers.append( | |
| {<span class="hljs-string">"id"</span>: example_id, <span class="hljs-string">"prediction_text"</span>: best_answer[<span class="hljs-string">"text"</span>]} | |
| ) | |
| <span class="hljs-keyword">else</span>: | |
| predicted_answers.append({<span class="hljs-string">"id"</span>: example_id, <span class="hljs-string">"prediction_text"</span>: <span class="hljs-string">""</span>}) | |
| theoretical_answers = [{<span class="hljs-string">"id"</span>: ex[<span class="hljs-string">"id"</span>], <span class="hljs-string">"answers"</span>: ex[<span class="hljs-string">"answers"</span>]} <span class="hljs-keyword">for</span> ex <span class="hljs-keyword">in</span> examples] | |
| <span class="hljs-keyword">return</span> metric.compute(predictions=predicted_answers, references=theoretical_answers)`,wrap:!1}}),Et=new f({props:{code:"Y29tcHV0ZV9tZXRyaWNzKHN0YXJ0X2xvZ2l0cyUyQyUyMGVuZF9sb2dpdHMlMkMlMjBldmFsX3NldCUyQyUyMHNtYWxsX2V2YWxfc2V0KQ==",highlighted:"compute_metrics(start_logits, end_logits, eval_set, small_eval_set)",wrap:!1}}),Ft=new f({props:{code:"JTdCJ2V4YWN0X21hdGNoJyUzQSUyMDgzLjAlMkMlMjAnZjEnJTNBJTIwODguMjUlN0Q=",highlighted:'{<span class="hljs-string">'exact_match'</span>: <span class="hljs-number">83.0</span>, <span class="hljs-string">'f1'</span>: <span class="hljs-number">88.25</span>}',wrap:!1}}),St=new q({props:{title:"Fine-tuningul modelului",local:"fine-tuning-the-model",headingTag:"h3"}});const br=[nM,sM],ma=[];function fr(e,t){return e[0]==="pt"?0:1}he=fr(_),Ie=ma[he]=br[he](_),Lt=new f({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login | |
| notebook_login()`,wrap:!1}}),Kt=new f({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}});const hr=[rM,iM],ya=[];function Ir(e,t){return e[0]==="pt"?0:1}Ce=Ir(_),Ze=ya[Ce]=hr[Ce](_);const Cr=[pM,MM],Ja=[];function Zr(e,t){return e[0]==="pt"?0:1}Ge=Zr(_),ge=Ja[Ge]=Cr[Ge](_);const Gr=[oM,uM],Ua=[];function gr(e,t){return e[0]==="pt"?0:1}Be=gr(_),_e=Ua[Be]=Gr[Be](_),la=new f({props:{code:"JTdCJ2V4YWN0X21hdGNoJyUzQSUyMDgxLjE4MjU5MjI0MjE5NDg5JTJDJTIwJ2YxJyUzQSUyMDg4LjY3MzgxMzIxOTA1NTE2JTdE",highlighted:'{<span class="hljs-string">'exact_match'</span>: <span class="hljs-number">81.18259224219489</span>, <span class="hljs-string">'f1'</span>: <span class="hljs-number">88.67381321905516</span>}',wrap:!1}});let k=_[0]==="pt"&&Ar();el=new Fn({props:{$$slots:{default:[dM]},$$scope:{ctx:_}}});let R=_[0]==="pt"&&vr();return sa=new q({props:{title:"Utilizarea modelului fine-tuned",local:"using-the-fine-tuned-model",headingTag:"h2"}}),ia=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBJTIzJTIwJUMzJThFbmxvY3VpJUM4JTlCaSUyMGFjZXN0JTIwY2hlY2twb2ludCUyMGN1JTIwcHJvcHJpdWwlMjBjaGVja3BvaW50JTBBbW9kZWxfY2hlY2twb2ludCUyMCUzRCUyMCUyMmh1Z2dpbmdmYWNlLWNvdXJzZSUyRmJlcnQtZmluZXR1bmVkLXNxdWFkJTIyJTBBcXVlc3Rpb25fYW5zd2VyZXIlMjAlM0QlMjBwaXBlbGluZSglMjJxdWVzdGlvbi1hbnN3ZXJpbmclMjIlMkMlMjBtb2RlbCUzRG1vZGVsX2NoZWNrcG9pbnQpJTBBJTBBY29udGV4dCUyMCUzRCUyMCUyMiUyMiUyMiUwQSVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUyMGlzJTIwYmFja2VkJTIwYnklMjB0aGUlMjB0aHJlZSUyMG1vc3QlMjBwb3B1bGFyJTIwZGVlcCUyMGxlYXJuaW5nJTIwbGlicmFyaWVzJTIwJUUyJTgwJTk0JTIwSmF4JTJDJTIwUHlUb3JjaCUyMGFuZCUyMFRlbnNvckZsb3clMjAlRTIlODAlOTQlMjB3aXRoJTIwYSUyMHNlYW1sZXNzJTIwaW50ZWdyYXRpb24lMEFiZXR3ZWVuJTIwdGhlbS4lMjBJdCdzJTIwc3RyYWlnaHRmb3J3YXJkJTIwdG8lMjB0cmFpbiUyMHlvdXIlMjBtb2RlbHMlMjB3aXRoJTIwb25lJTIwYmVmb3JlJTIwbG9hZGluZyUyMHRoZW0lMjBmb3IlMjBpbmZlcmVuY2UlMjB3aXRoJTIwdGhlJTIwb3RoZXIuJTBBJTIyJTIyJTIyJTBBcXVlc3Rpb24lMjAlM0QlMjAlMjJXaGljaCUyMGRlZXAlMjBsZWFybmluZyUyMGxpYnJhcmllcyUyMGJhY2slMjAlRjAlOUYlQTQlOTclMjBUcmFuc2Zvcm1lcnMlM0YlMjIlMEFxdWVzdGlvbl9hbnN3ZXJlcihxdWVzdGlvbiUzRHF1ZXN0aW9uJTJDJTIwY29udGV4dCUzRGNvbnRleHQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline | |
| <span class="hljs-comment"># Înlocuiți acest checkpoint cu propriul checkpoint</span> | |
| model_checkpoint = <span class="hljs-string">"huggingface-course/bert-finetuned-squad"</span> | |
| question_answerer = pipeline(<span class="hljs-string">"question-answering"</span>, model=model_checkpoint) | |
| context = <span class="hljs-string">""" | |
| 🤗 Transformers is backed by the three most popular deep learning libraries — Jax, PyTorch and TensorFlow — with a seamless integration | |
| between them. It's straightforward to train your models with one before loading them for inference with the other. | |
| """</span> | |
| question = <span class="hljs-string">"Which deep learning libraries back 🤗 Transformers?"</span> | |
| question_answerer(question=question, context=context)`,wrap:!1}}),ra=new f({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTk3OTAwMzA3MTc4NDk3MyUyQyUwQSUyMCdzdGFydCclM0ElMjA3OCUyQyUwQSUyMCdlbmQnJTNBJTIwMTA1JTJDJTBBJTIwJ2Fuc3dlciclM0ElMjAnSmF4JTJDJTIwUHlUb3JjaCUyMGFuZCUyMFRlbnNvckZsb3cnJTdE",highlighted:`{<span class="hljs-string">'score'</span>: <span class="hljs-number">0.9979003071784973</span>, | |
| <span class="hljs-string">'start'</span>: <span class="hljs-number">78</span>, | |
| <span class="hljs-string">'end'</span>: <span class="hljs-number">105</span>, | |
| <span class="hljs-string">'answer'</span>: <span class="hljs-string">'Jax, PyTorch and TensorFlow'</span>}`,wrap:!1}}),pa=new Fr({props:{source:"https://github.com/huggingface/course/blob/main/chapters/rum/chapter7/7.mdx"}}),{c(){i=o("meta"),j=s(),r=o("p"),y=s(),J(h.$$.fragment),p=s(),J(I.$$.fragment),b=s(),A.c(),x=s(),W=o("p"),W.innerHTML=X,G=s(),J(g.$$.fragment),V=s(),H=o("p"),H.innerHTML=D,B=s(),v=o("iframe"),ll=s(),L=o("p"),L.innerHTML=Ae,Ee=s(),J($.$$.fragment),tl=s(),J(P.$$.fragment),K=s(),O=o("p"),O.innerHTML=ve,al=s(),J(ee.$$.fragment),le=s(),te=o("p"),te.innerHTML=Ve,sl=s(),J(ae.$$.fragment),se=s(),ne=o("p"),ne.textContent=We,Fe=s(),J(Q.$$.fragment),nl=s(),J(ie.$$.fragment),re=s(),Me=o("p"),Me.innerHTML=Xe,il=s(),J(pe.$$.fragment),ce=s(),J(ue.$$.fragment),oe=s(),ke=o("p"),ke.innerHTML=rl,de=s(),Re=o("p"),Re.innerHTML=Ml,me=s(),J($e.$$.fragment),He=s(),J(z.$$.fragment),Se=s(),N=o("p"),N.textContent=xa,qe=s(),J(Y.$$.fragment),De=s(),J(E.$$.fragment),pl=s(),ye=o("p"),ye.textContent=Qe,cl=s(),J(Je.$$.fragment),M=s(),J(C.$$.fragment),Wa=s(),ul=o("p"),ul.textContent=ii,Xa=s(),J(ol.$$.fragment),ka=s(),J(dl.$$.fragment),Ra=s(),ml=o("p"),ml.textContent=ri,$a=s(),yl=o("p"),yl.textContent=Mi,Qa=s(),J(Jl.$$.fragment),za=s(),Ul=o("p"),Ul.innerHTML=pi,Na=s(),J(wl.$$.fragment),Ya=s(),J(Tl.$$.fragment),Ea=s(),jl=o("p"),jl.textContent=ci,Fa=s(),J(bl.$$.fragment),Ha=s(),fl=o("p"),fl.textContent=ui,Sa=s(),J(hl.$$.fragment),qa=s(),J(Il.$$.fragment),Da=s(),Cl=o("p"),Cl.textContent=oi,La=s(),Ke=o("div"),Ke.innerHTML=di,Pa=s(),Zl=o("p"),Zl.innerHTML=mi,Ka=s(),Gl=o("p"),Gl.textContent=yi,Oa=s(),gl=o("ul"),gl.innerHTML=Ji,es=s(),J(Bl.$$.fragment),ls=s(),J(_l.$$.fragment),ts=s(),xl=o("p"),xl.innerHTML=Ui,as=s(),Al=o("p"),Al.innerHTML=wi,ss=s(),J(vl.$$.fragment),ns=s(),J(Vl.$$.fragment),is=s(),Wl=o("p"),Wl.innerHTML=Ti,rs=s(),J(Xl.$$.fragment),Ms=s(),J(kl.$$.fragment),ps=s(),Rl=o("p"),Rl.textContent=ji,cs=s(),J($l.$$.fragment),us=s(),J(Ql.$$.fragment),os=s(),zl=o("p"),zl.textContent=bi,ds=s(),Nl=o("p"),Nl.textContent=fi,ms=s(),Yl=o("ul"),Yl.innerHTML=hi,ys=s(),El=o("p"),El.innerHTML=Ii,Js=s(),Fl=o("p"),Fl.innerHTML=Ci,Us=s(),J(Hl.$$.fragment),ws=s(),J(Sl.$$.fragment),Ts=s(),ql=o("p"),ql.innerHTML=Zi,js=s(),J(Dl.$$.fragment),bs=s(),J(Ll.$$.fragment),fs=s(),Pl=o("p"),Pl.innerHTML=Gi,hs=s(),J(Kl.$$.fragment),Is=s(),J(Ol.$$.fragment),Cs=s(),et=o("p"),et.textContent=gi,Zs=s(),J(Oe.$$.fragment),Gs=s(),lt=o("p"),lt.textContent=Bi,gs=s(),J(tt.$$.fragment),Bs=s(),at=o("p"),at.textContent=_i,_s=s(),st=o("p"),st.innerHTML=xi,xs=s(),J(nt.$$.fragment),As=s(),J(it.$$.fragment),vs=s(),rt=o("p"),rt.textContent=Ai,Vs=s(),J(Mt.$$.fragment),Ws=s(),pt=o("p"),pt.textContent=vi,Xs=s(),ct=o("p"),ct.innerHTML=Vi,ks=s(),J(ut.$$.fragment),Rs=s(),ot=o("p"),ot.textContent=Wi,$s=s(),J(dt.$$.fragment),Qs=s(),J(mt.$$.fragment),zs=s(),yt=o("p"),yt.textContent=Xi,Ns=s(),Jt=o("p"),Jt.textContent=ki,Ys=s(),we.c(),wa=s(),J(Ut.$$.fragment),Es=s(),je.c(),Ta=s(),wt=o("p"),wt.innerHTML=Ri,Fs=s(),Tt=o("ul"),Tt.innerHTML=$i,Hs=s(),F=o("p"),qn=va("Aici vom schimba ușor acest proces, deoarece nu trebuie să calculăm scorurile reale (doar răspunsul prezis). Aceasta înseamnă că putem sări peste etapa softmax. De asemenea, pentru a merge mai repede, nu vom puncta toate perechile posibile "),ja=o("code"),ja.textContent=Qi,Dn=va(", ci doar pe cele care corespund celor mai mari "),ba=o("code"),ba.textContent=zi,Ln=va(" logits (cu "),fa=o("code"),fa.textContent=Ni,Pn=va("). Deoarece vom trece peste softmax, aceste scoruri vor fi scoruri logit și vor fi obținute prin însumarea logiturilor de început și de sfârșit (în loc de produs, datorită regulii"),Ss=new zr(!1),qs=va(")."),Ds=s(),jt=o("p"),jt.innerHTML=Yi,Ls=s(),J(bt.$$.fragment),Ps=s(),ft=o("p"),ft.textContent=Ei,Ks=s(),J(ht.$$.fragment),Os=s(),It=o("p"),It.innerHTML=Fi,en=s(),fe.c(),ha=s(),Ct=o("p"),Ct.innerHTML=Hi,ln=s(),J(Zt.$$.fragment),tn=s(),Gt=o("p"),Gt.innerHTML=Si,an=s(),gt=o("ul"),gt.innerHTML=qi,sn=s(),Bt=o("p"),Bt.textContent=Di,nn=s(),J(_t.$$.fragment),rn=s(),xt=o("p"),xt.textContent=Li,Mn=s(),J(At.$$.fragment),pn=s(),vt=o("p"),vt.textContent=Pi,cn=s(),J(Vt.$$.fragment),un=s(),Wt=o("p"),Wt.textContent=Ki,on=s(),J(Xt.$$.fragment),dn=s(),J(kt.$$.fragment),mn=s(),Rt=o("p"),Rt.textContent=Oi,yn=s(),J($t.$$.fragment),Jn=s(),J(Qt.$$.fragment),Un=s(),zt=o("p"),zt.innerHTML=er,wn=s(),Le.c(),Ia=s(),J(Nt.$$.fragment),Tn=s(),Yt=o("p"),Yt.textContent=lr,jn=s(),J(Et.$$.fragment),bn=s(),J(Ft.$$.fragment),fn=s(),Ht=o("p"),Ht.textContent=tr,hn=s(),J(St.$$.fragment),In=s(),Ie.c(),Ca=s(),qt=o("p"),qt.textContent=ar,Cn=s(),Dt=o("p"),Dt.textContent=sr,Zn=s(),J(Lt.$$.fragment),Gn=s(),Pt=o("p"),Pt.textContent=nr,gn=s(),J(Kt.$$.fragment),Bn=s(),Ze.c(),Za=s(),Ot=o("p"),Ot.innerHTML=ir,_n=s(),ge.c(),Ga=s(),ea=o("p"),ea.textContent=rr,xn=s(),_e.c(),ga=s(),J(la.$$.fragment),An=s(),ta=o("p"),ta.textContent=Mr,vn=s(),k&&k.c(),Ba=s(),aa=o("p"),aa.textContent=pr,Vn=s(),J(el.$$.fragment),Wn=s(),R&&R.c(),_a=s(),J(sa.$$.fragment),Xn=s(),na=o("p"),na.innerHTML=cr,kn=s(),J(ia.$$.fragment),Rn=s(),J(ra.$$.fragment),$n=s(),Ma=o("p"),Ma.textContent=ur,Qn=s(),J(pa.$$.fragment),zn=s(),Aa=o("p"),this.h()},l(e){const t=Nr("svelte-u9bgzb",document.head);i=d(t,"META",{name:!0,content:!0}),t.forEach(l),j=n(e),r=d(e,"P",{}),En(r).forEach(l),y=n(e),U(h.$$.fragment,e),p=n(e),U(I.$$.fragment,e),b=n(e),A.l(e),x=n(e),W=d(e,"P",{"data-svelte-h":!0}),m(W)!=="svelte-xg7v3j"&&(W.innerHTML=X),G=n(e),U(g.$$.fragment,e),V=n(e),H=d(e,"P",{"data-svelte-h":!0}),m(H)!=="svelte-l7m1ae"&&(H.innerHTML=D),B=n(e),v=d(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),En(v).forEach(l),ll=n(e),L=d(e,"P",{"data-svelte-h":!0}),m(L)!=="svelte-layuu4"&&(L.innerHTML=Ae),Ee=n(e),U($.$$.fragment,e),tl=n(e),U(P.$$.fragment,e),K=n(e),O=d(e,"P",{"data-svelte-h":!0}),m(O)!=="svelte-3ficz1"&&(O.innerHTML=ve),al=n(e),U(ee.$$.fragment,e),le=n(e),te=d(e,"P",{"data-svelte-h":!0}),m(te)!=="svelte-v9ieb5"&&(te.innerHTML=Ve),sl=n(e),U(ae.$$.fragment,e),se=n(e),ne=d(e,"P",{"data-svelte-h":!0}),m(ne)!=="svelte-wdt5sk"&&(ne.textContent=We),Fe=n(e),U(Q.$$.fragment,e),nl=n(e),U(ie.$$.fragment,e),re=n(e),Me=d(e,"P",{"data-svelte-h":!0}),m(Me)!=="svelte-79xjdz"&&(Me.innerHTML=Xe),il=n(e),U(pe.$$.fragment,e),ce=n(e),U(ue.$$.fragment,e),oe=n(e),ke=d(e,"P",{"data-svelte-h":!0}),m(ke)!=="svelte-1yoxsd6"&&(ke.innerHTML=rl),de=n(e),Re=d(e,"P",{"data-svelte-h":!0}),m(Re)!=="svelte-1iu2d6t"&&(Re.innerHTML=Ml),me=n(e),U($e.$$.fragment,e),He=n(e),U(z.$$.fragment,e),Se=n(e),N=d(e,"P",{"data-svelte-h":!0}),m(N)!=="svelte-164icef"&&(N.textContent=xa),qe=n(e),U(Y.$$.fragment,e),De=n(e),U(E.$$.fragment,e),pl=n(e),ye=d(e,"P",{"data-svelte-h":!0}),m(ye)!=="svelte-d52r86"&&(ye.textContent=Qe),cl=n(e),U(Je.$$.fragment,e),M=n(e),U(C.$$.fragment,e),Wa=n(e),ul=d(e,"P",{"data-svelte-h":!0}),m(ul)!=="svelte-o0htp2"&&(ul.textContent=ii),Xa=n(e),U(ol.$$.fragment,e),ka=n(e),U(dl.$$.fragment,e),Ra=n(e),ml=d(e,"P",{"data-svelte-h":!0}),m(ml)!=="svelte-k23zal"&&(ml.textContent=ri),$a=n(e),yl=d(e,"P",{"data-svelte-h":!0}),m(yl)!=="svelte-dlw58z"&&(yl.textContent=Mi),Qa=n(e),U(Jl.$$.fragment,e),za=n(e),Ul=d(e,"P",{"data-svelte-h":!0}),m(Ul)!=="svelte-1fwtr3a"&&(Ul.innerHTML=pi),Na=n(e),U(wl.$$.fragment,e),Ya=n(e),U(Tl.$$.fragment,e),Ea=n(e),jl=d(e,"P",{"data-svelte-h":!0}),m(jl)!=="svelte-44c1oi"&&(jl.textContent=ci),Fa=n(e),U(bl.$$.fragment,e),Ha=n(e),fl=d(e,"P",{"data-svelte-h":!0}),m(fl)!=="svelte-36hn5k"&&(fl.textContent=ui),Sa=n(e),U(hl.$$.fragment,e),qa=n(e),U(Il.$$.fragment,e),Da=n(e),Cl=d(e,"P",{"data-svelte-h":!0}),m(Cl)!=="svelte-1o7pxpt"&&(Cl.textContent=oi),La=n(e),Ke=d(e,"DIV",{class:!0,"data-svelte-h":!0}),m(Ke)!=="svelte-jjzrij"&&(Ke.innerHTML=di),Pa=n(e),Zl=d(e,"P",{"data-svelte-h":!0}),m(Zl)!=="svelte-p6i5y7"&&(Zl.innerHTML=mi),Ka=n(e),Gl=d(e,"P",{"data-svelte-h":!0}),m(Gl)!=="svelte-sz9fbv"&&(Gl.textContent=yi),Oa=n(e),gl=d(e,"UL",{"data-svelte-h":!0}),m(gl)!=="svelte-1ts90es"&&(gl.innerHTML=Ji),es=n(e),U(Bl.$$.fragment,e),ls=n(e),U(_l.$$.fragment,e),ts=n(e),xl=d(e,"P",{"data-svelte-h":!0}),m(xl)!=="svelte-1d80nin"&&(xl.innerHTML=Ui),as=n(e),Al=d(e,"P",{"data-svelte-h":!0}),m(Al)!=="svelte-1d8n5w7"&&(Al.innerHTML=wi),ss=n(e),U(vl.$$.fragment,e),ns=n(e),U(Vl.$$.fragment,e),is=n(e),Wl=d(e,"P",{"data-svelte-h":!0}),m(Wl)!=="svelte-1aekh47"&&(Wl.innerHTML=Ti),rs=n(e),U(Xl.$$.fragment,e),Ms=n(e),U(kl.$$.fragment,e),ps=n(e),Rl=d(e,"P",{"data-svelte-h":!0}),m(Rl)!=="svelte-1aw2q8f"&&(Rl.textContent=ji),cs=n(e),U($l.$$.fragment,e),us=n(e),U(Ql.$$.fragment,e),os=n(e),zl=d(e,"P",{"data-svelte-h":!0}),m(zl)!=="svelte-1ak1af3"&&(zl.textContent=bi),ds=n(e),Nl=d(e,"P",{"data-svelte-h":!0}),m(Nl)!=="svelte-15isb5n"&&(Nl.textContent=fi),ms=n(e),Yl=d(e,"UL",{"data-svelte-h":!0}),m(Yl)!=="svelte-evy9pc"&&(Yl.innerHTML=hi),ys=n(e),El=d(e,"P",{"data-svelte-h":!0}),m(El)!=="svelte-2xofvt"&&(El.innerHTML=Ii),Js=n(e),Fl=d(e,"P",{"data-svelte-h":!0}),m(Fl)!=="svelte-5flyn7"&&(Fl.innerHTML=Ci),Us=n(e),U(Hl.$$.fragment,e),ws=n(e),U(Sl.$$.fragment,e),Ts=n(e),ql=d(e,"P",{"data-svelte-h":!0}),m(ql)!=="svelte-16anm6k"&&(ql.innerHTML=Zi),js=n(e),U(Dl.$$.fragment,e),bs=n(e),U(Ll.$$.fragment,e),fs=n(e),Pl=d(e,"P",{"data-svelte-h":!0}),m(Pl)!=="svelte-ew0nx8"&&(Pl.innerHTML=Gi),hs=n(e),U(Kl.$$.fragment,e),Is=n(e),U(Ol.$$.fragment,e),Cs=n(e),et=d(e,"P",{"data-svelte-h":!0}),m(et)!=="svelte-1h54dws"&&(et.textContent=gi),Zs=n(e),U(Oe.$$.fragment,e),Gs=n(e),lt=d(e,"P",{"data-svelte-h":!0}),m(lt)!=="svelte-1a8y92a"&&(lt.textContent=Bi),gs=n(e),U(tt.$$.fragment,e),Bs=n(e),at=d(e,"P",{"data-svelte-h":!0}),m(at)!=="svelte-1r2haga"&&(at.textContent=_i),_s=n(e),st=d(e,"P",{"data-svelte-h":!0}),m(st)!=="svelte-46dkr5"&&(st.innerHTML=xi),xs=n(e),U(nt.$$.fragment,e),As=n(e),U(it.$$.fragment,e),vs=n(e),rt=d(e,"P",{"data-svelte-h":!0}),m(rt)!=="svelte-1avsqap"&&(rt.textContent=Ai),Vs=n(e),U(Mt.$$.fragment,e),Ws=n(e),pt=d(e,"P",{"data-svelte-h":!0}),m(pt)!=="svelte-1yl05m"&&(pt.textContent=vi),Xs=n(e),ct=d(e,"P",{"data-svelte-h":!0}),m(ct)!=="svelte-7g6l8d"&&(ct.innerHTML=Vi),ks=n(e),U(ut.$$.fragment,e),Rs=n(e),ot=d(e,"P",{"data-svelte-h":!0}),m(ot)!=="svelte-296u2q"&&(ot.textContent=Wi),$s=n(e),U(dt.$$.fragment,e),Qs=n(e),U(mt.$$.fragment,e),zs=n(e),yt=d(e,"P",{"data-svelte-h":!0}),m(yt)!=="svelte-55caai"&&(yt.textContent=Xi),Ns=n(e),Jt=d(e,"P",{"data-svelte-h":!0}),m(Jt)!=="svelte-nbh0t7"&&(Jt.textContent=ki),Ys=n(e),we.l(e),wa=n(e),U(Ut.$$.fragment,e),Es=n(e),je.l(e),Ta=n(e),wt=d(e,"P",{"data-svelte-h":!0}),m(wt)!=="svelte-nbgvrt"&&(wt.innerHTML=Ri),Fs=n(e),Tt=d(e,"UL",{"data-svelte-h":!0}),m(Tt)!=="svelte-lenl6y"&&(Tt.innerHTML=$i),Hs=n(e),F=d(e,"P",{});var S=En(F);qn=Va(S,"Aici vom schimba ușor acest proces, deoarece nu trebuie să calculăm scorurile reale (doar răspunsul prezis). Aceasta înseamnă că putem sări peste etapa softmax. De asemenea, pentru a merge mai repede, nu vom puncta toate perechile posibile "),ja=d(S,"CODE",{"data-svelte-h":!0}),m(ja)!=="svelte-h5rtds"&&(ja.textContent=Qi),Dn=Va(S,", ci doar pe cele care corespund celor mai mari "),ba=d(S,"CODE",{"data-svelte-h":!0}),m(ba)!=="svelte-4nlbo1"&&(ba.textContent=zi),Ln=Va(S," logits (cu "),fa=d(S,"CODE",{"data-svelte-h":!0}),m(fa)!=="svelte-jugzo8"&&(fa.textContent=Ni),Pn=Va(S,"). Deoarece vom trece peste softmax, aceste scoruri vor fi scoruri logit și vor fi obținute prin însumarea logiturilor de început și de sfârșit (în loc de produs, datorită regulii"),Ss=Yr(S,!1),qs=Va(S,")."),S.forEach(l),Ds=n(e),jt=d(e,"P",{"data-svelte-h":!0}),m(jt)!=="svelte-tlye48"&&(jt.innerHTML=Yi),Ls=n(e),U(bt.$$.fragment,e),Ps=n(e),ft=d(e,"P",{"data-svelte-h":!0}),m(ft)!=="svelte-1fhly69"&&(ft.textContent=Ei),Ks=n(e),U(ht.$$.fragment,e),Os=n(e),It=d(e,"P",{"data-svelte-h":!0}),m(It)!=="svelte-mgxb6k"&&(It.innerHTML=Fi),en=n(e),fe.l(e),ha=n(e),Ct=d(e,"P",{"data-svelte-h":!0}),m(Ct)!=="svelte-j1g96v"&&(Ct.innerHTML=Hi),ln=n(e),U(Zt.$$.fragment,e),tn=n(e),Gt=d(e,"P",{"data-svelte-h":!0}),m(Gt)!=="svelte-1pw79zv"&&(Gt.innerHTML=Si),an=n(e),gt=d(e,"UL",{"data-svelte-h":!0}),m(gt)!=="svelte-tyl6g"&&(gt.innerHTML=qi),sn=n(e),Bt=d(e,"P",{"data-svelte-h":!0}),m(Bt)!=="svelte-spioyq"&&(Bt.textContent=Di),nn=n(e),U(_t.$$.fragment,e),rn=n(e),xt=d(e,"P",{"data-svelte-h":!0}),m(xt)!=="svelte-cwegj6"&&(xt.textContent=Li),Mn=n(e),U(At.$$.fragment,e),pn=n(e),vt=d(e,"P",{"data-svelte-h":!0}),m(vt)!=="svelte-mprhjo"&&(vt.textContent=Pi),cn=n(e),U(Vt.$$.fragment,e),un=n(e),Wt=d(e,"P",{"data-svelte-h":!0}),m(Wt)!=="svelte-arzhnd"&&(Wt.textContent=Ki),on=n(e),U(Xt.$$.fragment,e),dn=n(e),U(kt.$$.fragment,e),mn=n(e),Rt=d(e,"P",{"data-svelte-h":!0}),m(Rt)!=="svelte-fey5w3"&&(Rt.textContent=Oi),yn=n(e),U($t.$$.fragment,e),Jn=n(e),U(Qt.$$.fragment,e),Un=n(e),zt=d(e,"P",{"data-svelte-h":!0}),m(zt)!=="svelte-w3pkce"&&(zt.innerHTML=er),wn=n(e),Le.l(e),Ia=n(e),U(Nt.$$.fragment,e),Tn=n(e),Yt=d(e,"P",{"data-svelte-h":!0}),m(Yt)!=="svelte-re3grp"&&(Yt.textContent=lr),jn=n(e),U(Et.$$.fragment,e),bn=n(e),U(Ft.$$.fragment,e),fn=n(e),Ht=d(e,"P",{"data-svelte-h":!0}),m(Ht)!=="svelte-1jrsxci"&&(Ht.textContent=tr),hn=n(e),U(St.$$.fragment,e),In=n(e),Ie.l(e),Ca=n(e),qt=d(e,"P",{"data-svelte-h":!0}),m(qt)!=="svelte-1cs7jr1"&&(qt.textContent=ar),Cn=n(e),Dt=d(e,"P",{"data-svelte-h":!0}),m(Dt)!=="svelte-1l2yb9"&&(Dt.textContent=sr),Zn=n(e),U(Lt.$$.fragment,e),Gn=n(e),Pt=d(e,"P",{"data-svelte-h":!0}),m(Pt)!=="svelte-fhjhmt"&&(Pt.textContent=nr),gn=n(e),U(Kt.$$.fragment,e),Bn=n(e),Ze.l(e),Za=n(e),Ot=d(e,"P",{"data-svelte-h":!0}),m(Ot)!=="svelte-q4rhod"&&(Ot.innerHTML=ir),_n=n(e),ge.l(e),Ga=n(e),ea=d(e,"P",{"data-svelte-h":!0}),m(ea)!=="svelte-1ao8hkz"&&(ea.textContent=rr),xn=n(e),_e.l(e),ga=n(e),U(la.$$.fragment,e),An=n(e),ta=d(e,"P",{"data-svelte-h":!0}),m(ta)!=="svelte-1dpbkig"&&(ta.textContent=Mr),vn=n(e),k&&k.l(e),Ba=n(e),aa=d(e,"P",{"data-svelte-h":!0}),m(aa)!=="svelte-id5kqi"&&(aa.textContent=pr),Vn=n(e),U(el.$$.fragment,e),Wn=n(e),R&&R.l(e),_a=n(e),U(sa.$$.fragment,e),Xn=n(e),na=d(e,"P",{"data-svelte-h":!0}),m(na)!=="svelte-vlajfn"&&(na.innerHTML=cr),kn=n(e),U(ia.$$.fragment,e),Rn=n(e),U(ra.$$.fragment,e),$n=n(e),Ma=d(e,"P",{"data-svelte-h":!0}),m(Ma)!=="svelte-1da8ckl"&&(Ma.textContent=ur),Qn=n(e),U(pa.$$.fragment,e),zn=n(e),Aa=d(e,"P",{}),En(Aa).forEach(l),this.h()},h(){ze(i,"name","hf:doc:metadata"),ze(i,"content",yM),kr(v.src,xe="https://course-demos-bert-finetuned-squad.hf.space")||ze(v,"src",xe),ze(v,"frameborder","0"),ze(v,"height","450"),ze(v,"title","Gradio app"),ze(v,"class","block dark:hidden container p-0 flex-grow space-iframe"),ze(v,"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"),ze(v,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),ze(Ke,"class","flex justify-center"),Ss.a=qs},m(e,t){Pe(document.head,i),a(e,j,t),a(e,r,t),a(e,y,t),w(h,e,t),a(e,p,t),w(I,e,t),a(e,b,t),ca[Z].m(e,t),a(e,x,t),a(e,W,t),a(e,G,t),w(g,e,t),a(e,V,t),a(e,H,t),a(e,B,t),a(e,v,t),a(e,ll,t),a(e,L,t),a(e,Ee,t),w($,e,t),a(e,tl,t),w(P,e,t),a(e,K,t),a(e,O,t),a(e,al,t),w(ee,e,t),a(e,le,t),a(e,te,t),a(e,sl,t),w(ae,e,t),a(e,se,t),a(e,ne,t),a(e,Fe,t),w(Q,e,t),a(e,nl,t),w(ie,e,t),a(e,re,t),a(e,Me,t),a(e,il,t),w(pe,e,t),a(e,ce,t),w(ue,e,t),a(e,oe,t),a(e,ke,t),a(e,de,t),a(e,Re,t),a(e,me,t),w($e,e,t),a(e,He,t),w(z,e,t),a(e,Se,t),a(e,N,t),a(e,qe,t),w(Y,e,t),a(e,De,t),w(E,e,t),a(e,pl,t),a(e,ye,t),a(e,cl,t),w(Je,e,t),a(e,M,t),w(C,e,t),a(e,Wa,t),a(e,ul,t),a(e,Xa,t),w(ol,e,t),a(e,ka,t),w(dl,e,t),a(e,Ra,t),a(e,ml,t),a(e,$a,t),a(e,yl,t),a(e,Qa,t),w(Jl,e,t),a(e,za,t),a(e,Ul,t),a(e,Na,t),w(wl,e,t),a(e,Ya,t),w(Tl,e,t),a(e,Ea,t),a(e,jl,t),a(e,Fa,t),w(bl,e,t),a(e,Ha,t),a(e,fl,t),a(e,Sa,t),w(hl,e,t),a(e,qa,t),w(Il,e,t),a(e,Da,t),a(e,Cl,t),a(e,La,t),a(e,Ke,t),a(e,Pa,t),a(e,Zl,t),a(e,Ka,t),a(e,Gl,t),a(e,Oa,t),a(e,gl,t),a(e,es,t),w(Bl,e,t),a(e,ls,t),w(_l,e,t),a(e,ts,t),a(e,xl,t),a(e,as,t),a(e,Al,t),a(e,ss,t),w(vl,e,t),a(e,ns,t),w(Vl,e,t),a(e,is,t),a(e,Wl,t),a(e,rs,t),w(Xl,e,t),a(e,Ms,t),w(kl,e,t),a(e,ps,t),a(e,Rl,t),a(e,cs,t),w($l,e,t),a(e,us,t),w(Ql,e,t),a(e,os,t),a(e,zl,t),a(e,ds,t),a(e,Nl,t),a(e,ms,t),a(e,Yl,t),a(e,ys,t),a(e,El,t),a(e,Js,t),a(e,Fl,t),a(e,Us,t),w(Hl,e,t),a(e,ws,t),w(Sl,e,t),a(e,Ts,t),a(e,ql,t),a(e,js,t),w(Dl,e,t),a(e,bs,t),w(Ll,e,t),a(e,fs,t),a(e,Pl,t),a(e,hs,t),w(Kl,e,t),a(e,Is,t),w(Ol,e,t),a(e,Cs,t),a(e,et,t),a(e,Zs,t),w(Oe,e,t),a(e,Gs,t),a(e,lt,t),a(e,gs,t),w(tt,e,t),a(e,Bs,t),a(e,at,t),a(e,_s,t),a(e,st,t),a(e,xs,t),w(nt,e,t),a(e,As,t),w(it,e,t),a(e,vs,t),a(e,rt,t),a(e,Vs,t),w(Mt,e,t),a(e,Ws,t),a(e,pt,t),a(e,Xs,t),a(e,ct,t),a(e,ks,t),w(ut,e,t),a(e,Rs,t),a(e,ot,t),a(e,$s,t),w(dt,e,t),a(e,Qs,t),w(mt,e,t),a(e,zs,t),a(e,yt,t),a(e,Ns,t),a(e,Jt,t),a(e,Ys,t),ua[Ue].m(e,t),a(e,wa,t),w(Ut,e,t),a(e,Es,t),oa[Te].m(e,t),a(e,Ta,t),a(e,wt,t),a(e,Fs,t),a(e,Tt,t),a(e,Hs,t),a(e,F,t),Pe(F,qn),Pe(F,ja),Pe(F,Dn),Pe(F,ba),Pe(F,Ln),Pe(F,fa),Pe(F,Pn),Ss.m(Wr,F),Pe(F,qs),a(e,Ds,t),a(e,jt,t),a(e,Ls,t),w(bt,e,t),a(e,Ps,t),a(e,ft,t),a(e,Ks,t),w(ht,e,t),a(e,Os,t),a(e,It,t),a(e,en,t),da[be].m(e,t),a(e,ha,t),a(e,Ct,t),a(e,ln,t),w(Zt,e,t),a(e,tn,t),a(e,Gt,t),a(e,an,t),a(e,gt,t),a(e,sn,t),a(e,Bt,t),a(e,nn,t),w(_t,e,t),a(e,rn,t),a(e,xt,t),a(e,Mn,t),w(At,e,t),a(e,pn,t),a(e,vt,t),a(e,cn,t),w(Vt,e,t),a(e,un,t),a(e,Wt,t),a(e,on,t),w(Xt,e,t),a(e,dn,t),w(kt,e,t),a(e,mn,t),a(e,Rt,t),a(e,yn,t),w($t,e,t),a(e,Jn,t),w(Qt,e,t),a(e,Un,t),a(e,zt,t),a(e,wn,t),Le.m(e,t),a(e,Ia,t),w(Nt,e,t),a(e,Tn,t),a(e,Yt,t),a(e,jn,t),w(Et,e,t),a(e,bn,t),w(Ft,e,t),a(e,fn,t),a(e,Ht,t),a(e,hn,t),w(St,e,t),a(e,In,t),ma[he].m(e,t),a(e,Ca,t),a(e,qt,t),a(e,Cn,t),a(e,Dt,t),a(e,Zn,t),w(Lt,e,t),a(e,Gn,t),a(e,Pt,t),a(e,gn,t),w(Kt,e,t),a(e,Bn,t),ya[Ce].m(e,t),a(e,Za,t),a(e,Ot,t),a(e,_n,t),Ja[Ge].m(e,t),a(e,Ga,t),a(e,ea,t),a(e,xn,t),Ua[Be].m(e,t),a(e,ga,t),w(la,e,t),a(e,An,t),a(e,ta,t),a(e,vn,t),k&&k.m(e,t),a(e,Ba,t),a(e,aa,t),a(e,Vn,t),w(el,e,t),a(e,Wn,t),R&&R.m(e,t),a(e,_a,t),w(sa,e,t),a(e,Xn,t),a(e,na,t),a(e,kn,t),w(ia,e,t),a(e,Rn,t),w(ra,e,t),a(e,$n,t),a(e,Ma,t),a(e,Qn,t),w(pa,e,t),a(e,zn,t),a(e,Aa,t),Nn=!0},p(e,[t]){const S={};t&1&&(S.fw=e[0]),h.$set(S);let Kn=Z;Z=dr(e),Z!==Kn&&(Ye(),u(ca[Kn],1,1,()=>{ca[Kn]=null}),Ne(),A=ca[Z],A||(A=ca[Z]=or[Z](e),A.c()),c(A,1),A.m(x.parentNode,x));const Br={};t&2&&(Br.$$scope={dirty:t,ctx:e}),$.$set(Br);const _r={};t&2&&(_r.$$scope={dirty:t,ctx:e}),Oe.$set(_r);let On=Ue;Ue=yr(e),Ue!==On&&(Ye(),u(ua[On],1,1,()=>{ua[On]=null}),Ne(),we=ua[Ue],we||(we=ua[Ue]=mr[Ue](e),we.c()),c(we,1),we.m(wa.parentNode,wa));let ei=Te;Te=Ur(e),Te!==ei&&(Ye(),u(oa[ei],1,1,()=>{oa[ei]=null}),Ne(),je=oa[Te],je||(je=oa[Te]=Jr[Te](e),je.c()),c(je,1),je.m(Ta.parentNode,Ta));let li=be;be=Tr(e),be!==li&&(Ye(),u(da[li],1,1,()=>{da[li]=null}),Ne(),fe=da[be],fe||(fe=da[be]=wr[be](e),fe.c()),c(fe,1),fe.m(ha.parentNode,ha)),Yn!==(Yn=jr(e))&&(Le.d(1),Le=Yn(e),Le&&(Le.c(),Le.m(Ia.parentNode,Ia)));let ti=he;he=fr(e),he!==ti&&(Ye(),u(ma[ti],1,1,()=>{ma[ti]=null}),Ne(),Ie=ma[he],Ie||(Ie=ma[he]=br[he](e),Ie.c()),c(Ie,1),Ie.m(Ca.parentNode,Ca));let ai=Ce;Ce=Ir(e),Ce!==ai&&(Ye(),u(ya[ai],1,1,()=>{ya[ai]=null}),Ne(),Ze=ya[Ce],Ze||(Ze=ya[Ce]=hr[Ce](e),Ze.c()),c(Ze,1),Ze.m(Za.parentNode,Za));let si=Ge;Ge=Zr(e),Ge!==si&&(Ye(),u(Ja[si],1,1,()=>{Ja[si]=null}),Ne(),ge=Ja[Ge],ge||(ge=Ja[Ge]=Cr[Ge](e),ge.c()),c(ge,1),ge.m(Ga.parentNode,Ga));let ni=Be;Be=gr(e),Be!==ni&&(Ye(),u(Ua[ni],1,1,()=>{Ua[ni]=null}),Ne(),_e=Ua[Be],_e||(_e=Ua[Be]=Gr[Be](e),_e.c()),c(_e,1),_e.m(ga.parentNode,ga)),e[0]==="pt"?k?t&1&&c(k,1):(k=Ar(),k.c(),c(k,1),k.m(Ba.parentNode,Ba)):k&&(Ye(),u(k,1,1,()=>{k=null}),Ne());const xr={};t&2&&(xr.$$scope={dirty:t,ctx:e}),el.$set(xr),e[0]==="pt"?R?t&1&&c(R,1):(R=vr(),R.c(),c(R,1),R.m(_a.parentNode,_a)):R&&(Ye(),u(R,1,1,()=>{R=null}),Ne())},i(e){Nn||(c(h.$$.fragment,e),c(I.$$.fragment,e),c(A),c(g.$$.fragment,e),c($.$$.fragment,e),c(P.$$.fragment,e),c(ee.$$.fragment,e),c(ae.$$.fragment,e),c(Q.$$.fragment,e),c(ie.$$.fragment,e),c(pe.$$.fragment,e),c(ue.$$.fragment,e),c($e.$$.fragment,e),c(z.$$.fragment,e),c(Y.$$.fragment,e),c(E.$$.fragment,e),c(Je.$$.fragment,e),c(C.$$.fragment,e),c(ol.$$.fragment,e),c(dl.$$.fragment,e),c(Jl.$$.fragment,e),c(wl.$$.fragment,e),c(Tl.$$.fragment,e),c(bl.$$.fragment,e),c(hl.$$.fragment,e),c(Il.$$.fragment,e),c(Bl.$$.fragment,e),c(_l.$$.fragment,e),c(vl.$$.fragment,e),c(Vl.$$.fragment,e),c(Xl.$$.fragment,e),c(kl.$$.fragment,e),c($l.$$.fragment,e),c(Ql.$$.fragment,e),c(Hl.$$.fragment,e),c(Sl.$$.fragment,e),c(Dl.$$.fragment,e),c(Ll.$$.fragment,e),c(Kl.$$.fragment,e),c(Ol.$$.fragment,e),c(Oe.$$.fragment,e),c(tt.$$.fragment,e),c(nt.$$.fragment,e),c(it.$$.fragment,e),c(Mt.$$.fragment,e),c(ut.$$.fragment,e),c(dt.$$.fragment,e),c(mt.$$.fragment,e),c(we),c(Ut.$$.fragment,e),c(je),c(bt.$$.fragment,e),c(ht.$$.fragment,e),c(fe),c(Zt.$$.fragment,e),c(_t.$$.fragment,e),c(At.$$.fragment,e),c(Vt.$$.fragment,e),c(Xt.$$.fragment,e),c(kt.$$.fragment,e),c($t.$$.fragment,e),c(Qt.$$.fragment,e),c(Nt.$$.fragment,e),c(Et.$$.fragment,e),c(Ft.$$.fragment,e),c(St.$$.fragment,e),c(Ie),c(Lt.$$.fragment,e),c(Kt.$$.fragment,e),c(Ze),c(ge),c(_e),c(la.$$.fragment,e),c(k),c(el.$$.fragment,e),c(R),c(sa.$$.fragment,e),c(ia.$$.fragment,e),c(ra.$$.fragment,e),c(pa.$$.fragment,e),Nn=!0)},o(e){u(h.$$.fragment,e),u(I.$$.fragment,e),u(A),u(g.$$.fragment,e),u($.$$.fragment,e),u(P.$$.fragment,e),u(ee.$$.fragment,e),u(ae.$$.fragment,e),u(Q.$$.fragment,e),u(ie.$$.fragment,e),u(pe.$$.fragment,e),u(ue.$$.fragment,e),u($e.$$.fragment,e),u(z.$$.fragment,e),u(Y.$$.fragment,e),u(E.$$.fragment,e),u(Je.$$.fragment,e),u(C.$$.fragment,e),u(ol.$$.fragment,e),u(dl.$$.fragment,e),u(Jl.$$.fragment,e),u(wl.$$.fragment,e),u(Tl.$$.fragment,e),u(bl.$$.fragment,e),u(hl.$$.fragment,e),u(Il.$$.fragment,e),u(Bl.$$.fragment,e),u(_l.$$.fragment,e),u(vl.$$.fragment,e),u(Vl.$$.fragment,e),u(Xl.$$.fragment,e),u(kl.$$.fragment,e),u($l.$$.fragment,e),u(Ql.$$.fragment,e),u(Hl.$$.fragment,e),u(Sl.$$.fragment,e),u(Dl.$$.fragment,e),u(Ll.$$.fragment,e),u(Kl.$$.fragment,e),u(Ol.$$.fragment,e),u(Oe.$$.fragment,e),u(tt.$$.fragment,e),u(nt.$$.fragment,e),u(it.$$.fragment,e),u(Mt.$$.fragment,e),u(ut.$$.fragment,e),u(dt.$$.fragment,e),u(mt.$$.fragment,e),u(we),u(Ut.$$.fragment,e),u(je),u(bt.$$.fragment,e),u(ht.$$.fragment,e),u(fe),u(Zt.$$.fragment,e),u(_t.$$.fragment,e),u(At.$$.fragment,e),u(Vt.$$.fragment,e),u(Xt.$$.fragment,e),u(kt.$$.fragment,e),u($t.$$.fragment,e),u(Qt.$$.fragment,e),u(Nt.$$.fragment,e),u(Et.$$.fragment,e),u(Ft.$$.fragment,e),u(St.$$.fragment,e),u(Ie),u(Lt.$$.fragment,e),u(Kt.$$.fragment,e),u(Ze),u(ge),u(_e),u(la.$$.fragment,e),u(k),u(el.$$.fragment,e),u(R),u(sa.$$.fragment,e),u(ia.$$.fragment,e),u(ra.$$.fragment,e),u(pa.$$.fragment,e),Nn=!1},d(e){e&&(l(j),l(r),l(y),l(p),l(b),l(x),l(W),l(G),l(V),l(H),l(B),l(v),l(ll),l(L),l(Ee),l(tl),l(K),l(O),l(al),l(le),l(te),l(sl),l(se),l(ne),l(Fe),l(nl),l(re),l(Me),l(il),l(ce),l(oe),l(ke),l(de),l(Re),l(me),l(He),l(Se),l(N),l(qe),l(De),l(pl),l(ye),l(cl),l(M),l(Wa),l(ul),l(Xa),l(ka),l(Ra),l(ml),l($a),l(yl),l(Qa),l(za),l(Ul),l(Na),l(Ya),l(Ea),l(jl),l(Fa),l(Ha),l(fl),l(Sa),l(qa),l(Da),l(Cl),l(La),l(Ke),l(Pa),l(Zl),l(Ka),l(Gl),l(Oa),l(gl),l(es),l(ls),l(ts),l(xl),l(as),l(Al),l(ss),l(ns),l(is),l(Wl),l(rs),l(Ms),l(ps),l(Rl),l(cs),l(us),l(os),l(zl),l(ds),l(Nl),l(ms),l(Yl),l(ys),l(El),l(Js),l(Fl),l(Us),l(ws),l(Ts),l(ql),l(js),l(bs),l(fs),l(Pl),l(hs),l(Is),l(Cs),l(et),l(Zs),l(Gs),l(lt),l(gs),l(Bs),l(at),l(_s),l(st),l(xs),l(As),l(vs),l(rt),l(Vs),l(Ws),l(pt),l(Xs),l(ct),l(ks),l(Rs),l(ot),l($s),l(Qs),l(zs),l(yt),l(Ns),l(Jt),l(Ys),l(wa),l(Es),l(Ta),l(wt),l(Fs),l(Tt),l(Hs),l(F),l(Ds),l(jt),l(Ls),l(Ps),l(ft),l(Ks),l(Os),l(It),l(en),l(ha),l(Ct),l(ln),l(tn),l(Gt),l(an),l(gt),l(sn),l(Bt),l(nn),l(rn),l(xt),l(Mn),l(pn),l(vt),l(cn),l(un),l(Wt),l(on),l(dn),l(mn),l(Rt),l(yn),l(Jn),l(Un),l(zt),l(wn),l(Ia),l(Tn),l(Yt),l(jn),l(bn),l(fn),l(Ht),l(hn),l(In),l(Ca),l(qt),l(Cn),l(Dt),l(Zn),l(Gn),l(Pt),l(gn),l(Bn),l(Za),l(Ot),l(_n),l(Ga),l(ea),l(xn),l(ga),l(An),l(ta),l(vn),l(Ba),l(aa),l(Vn),l(Wn),l(_a),l(Xn),l(na),l(kn),l(Rn),l($n),l(Ma),l(Qn),l(zn),l(Aa)),l(i),T(h,e),T(I,e),ca[Z].d(e),T(g,e),T($,e),T(P,e),T(ee,e),T(ae,e),T(Q,e),T(ie,e),T(pe,e),T(ue,e),T($e,e),T(z,e),T(Y,e),T(E,e),T(Je,e),T(C,e),T(ol,e),T(dl,e),T(Jl,e),T(wl,e),T(Tl,e),T(bl,e),T(hl,e),T(Il,e),T(Bl,e),T(_l,e),T(vl,e),T(Vl,e),T(Xl,e),T(kl,e),T($l,e),T(Ql,e),T(Hl,e),T(Sl,e),T(Dl,e),T(Ll,e),T(Kl,e),T(Ol,e),T(Oe,e),T(tt,e),T(nt,e),T(it,e),T(Mt,e),T(ut,e),T(dt,e),T(mt,e),ua[Ue].d(e),T(Ut,e),oa[Te].d(e),T(bt,e),T(ht,e),da[be].d(e),T(Zt,e),T(_t,e),T(At,e),T(Vt,e),T(Xt,e),T(kt,e),T($t,e),T(Qt,e),Le.d(e),T(Nt,e),T(Et,e),T(Ft,e),T(St,e),ma[he].d(e),T(Lt,e),T(Kt,e),ya[Ce].d(e),Ja[Ge].d(e),Ua[Be].d(e),T(la,e),k&&k.d(e),T(el,e),R&&R.d(e),T(sa,e),T(ia,e),T(ra,e),T(pa,e)}}}const yM='{"title":"Răspuns la întrebări","local":"question-answering","sections":[{"title":"Pregătirea datelor","local":"preparing-the-data","sections":[{"title":"Datasetul SQuD","local":"the-squad-dataset","sections":[],"depth":3},{"title":"Procesarea datelor de antrenare","local":"processing-the-training-data","sections":[],"depth":3},{"title":"Procesarea datelor de validare","local":"processing-the-validation-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 unui model cu Keras","local":"fine-tuning-the-model-with-keras","sections":[{"title":"Post-procesare","local":"post-processing","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 pentru antrenament","local":"preparing-everything-for-training","sections":[],"depth":3}],"depth":2},{"title":"Bucla de antrenare","local":"training-loop","sections":[],"depth":2},{"title":"Utilizarea modelului fine-tuned","local":"using-the-fine-tuned-model","sections":[],"depth":2}],"depth":1}';function JM(_,i,j){let r="pt";return Rr(()=>{const y=new URLSearchParams(window.location.search);j(0,r=y.get("fw")||"pt")}),[r]}class CM extends $r{constructor(i){super(),Qr(this,i,JM,mM,Xr,{})}}export{CM as component}; | |
Xet Storage Details
- Size:
- 185 kB
- Xet hash:
- f8dfcc8b43f8655e0fb03c9b1463e6c884650a451dfd5b3dc1759f397a4f1a35
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.