import{s as Qs,a as Xs,o as Es,n as Sl}from"../chunks/scheduler.893fe8c9.js";import{S as Hs,i as Ns,e as m,s as n,c as y,h as Fs,a as d,d as a,b as i,f as is,g as f,j as J,k as kl,l as Ss,m as t,n as T,o as M,D as ra,t as o,p as b,E as pa}from"../chunks/index.6ee278c6.js";import{T as ca}from"../chunks/Tip.eab0255c.js";import{C as Ds,H as ue,E as Ls}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.ea3ad860.js";import{Y as Vs}from"../chunks/Youtube.59d04f41.js";import{C}from"../chunks/CodeBlock.8bdd5f33.js";import{C as Ys}from"../chunks/CourseFloatingBanner.c25cfa5e.js";import{F as qs}from"../chunks/FrameworkSwitchCourse.77a18d50.js";function Ps(v){let r,j;return r=new Ys({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/section2_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section2_tf.ipynb"}]}}),{c(){y(r.$$.fragment)},l(p){f(r.$$.fragment,p)},m(p,U){T(r,p,U),j=!0},i(p){j||(o(r.$$.fragment,p),j=!0)},o(p){M(r.$$.fragment,p),j=!1},d(p){b(r,p)}}}function Os(v){let r,j;return r=new Ys({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/section2_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section2_pt.ipynb"}]}}),{c(){y(r.$$.fragment)},l(p){f(r.$$.fragment,p)},m(p,U){T(r,p,U),j=!0},i(p){j||(o(r.$$.fragment,p),j=!0)},o(p){M(r.$$.fragment,p),j=!1},d(p){b(r,p)}}}function Ks(v){let r,j='💡 Atât timp cât datasetul vostru constă în texte împărțite în cuvinte cu labelurile corespunzătoare, veți putea adapta procedurile de preprocesare a datelor descrise aici la propriul dataset. Consultați <a href="/course/chapter5">Capitolul 5</a> dacă aveți nevoie de o recapitulare a modului de încărcare a propriilor date personalizate într-un <code>Dataset</code>.';return{c(){r=m("p"),r.innerHTML=j},l(p){r=d(p,"P",{"data-svelte-h":!0}),J(r)!=="svelte-fi09xy"&&(r.innerHTML=j)},m(p,U){t(p,r,U)},p:Sl,d(p){p&&a(r)}}}function en(v){let r,j="✏️ <strong>E rândul tău!</strong> Afișați aceleași două propoziții cu labelurile POS sau chunking.";return{c(){r=m("p"),r.innerHTML=j},l(p){r=d(p,"P",{"data-svelte-h":!0}),J(r)!=="svelte-ujozkx"&&(r.innerHTML=j)},m(p,U){t(p,r,U)},p:Sl,d(p){p&&a(r)}}}function ln(v){let r,j="✏️ <strong>Rândul tău!</strong> Unii cercetători preferă să atribuie un singur label pe cuvânt și să atribuie <code>-100</code> celorlalți subtokeni dintr-un cuvânt dat. Aceasta are loc pentru a evita ca cuvintele lungi care se împart în mai mulți subtokeni să contribuie puternic la pierdere. Modificați funcția anterioară pentru a alinia labelurile cu ID-urile de input urmând această regulă.";return{c(){r=m("p"),r.innerHTML=j},l(p){r=d(p,"P",{"data-svelte-h":!0}),J(r)!=="svelte-12jf2kf"&&(r.innerHTML=j)},m(p,U){t(p,r,U)},p:Sl,d(p){p&&a(r)}}}function an(v){let r,j,p,U="Codul real care utilizează <code>Keras</code> va fi același ca înainte; singurele modificări sunt modul în care datele sunt collated într-un batch și metric computation function.",_;return r=new ue({props:{title:"Fine-tuningul modelului cu Keras",local:"fine-tuning-the-model-with-keras",headingTag:"h2"}}),{c(){y(r.$$.fragment),j=n(),p=m("p"),p.innerHTML=U},l(h){f(r.$$.fragment,h),j=i(h),p=d(h,"P",{"data-svelte-h":!0}),J(p)!=="svelte-1lfpmm2"&&(p.innerHTML=U)},m(h,k){T(r,h,k),t(h,j,k),t(h,p,k),_=!0},i(h){_||(o(r.$$.fragment,h),_=!0)},o(h){M(r.$$.fragment,h),_=!1},d(h){h&&(a(j),a(p)),b(r,h)}}}function tn(v){let r,j,p,U="Codul real care utilizează <code>Trainer</code> va fi același ca înainte; singurele modificări sunt modul în care datele sunt collated într-un batch și metric computation function.",_;return r=new ue({props:{title:"Fine-tuningul modelului cu Trainer API",local:"fine-tuning-the-model-with-the-trainer-api",headingTag:"h2"}}),{c(){y(r.$$.fragment),j=n(),p=m("p"),p.innerHTML=U},l(h){f(r.$$.fragment,h),j=i(h),p=d(h,"P",{"data-svelte-h":!0}),J(p)!=="svelte-1wqupxz"&&(p.innerHTML=U)},m(h,k){T(r,h,k),t(h,j,k),t(h,p,k),_=!0},i(h){_||(o(r.$$.fragment,h),_=!0)},o(h){M(r.$$.fragment,h),_=!1},d(h){h&&(a(j),a(p)),b(r,h)}}}function sn(v){let r,j;return r=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvckZvclRva2VuQ2xhc3NpZmljYXRpb24lMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGF0YUNvbGxhdG9yRm9yVG9rZW5DbGFzc2lmaWNhdGlvbiglMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorForTokenClassification

data_collator = DataCollatorForTokenClassification(
    tokenizer=tokenizer, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>
)`,wrap:!1}}),{c(){y(r.$$.fragment)},l(p){f(r.$$.fragment,p)},m(p,U){T(r,p,U),j=!0},i(p){j||(o(r.$$.fragment,p),j=!0)},o(p){M(r.$$.fragment,p),j=!1},d(p){b(r,p)}}}function nn(v){let r,j;return r=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvckZvclRva2VuQ2xhc3NpZmljYXRpb24lMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGF0YUNvbGxhdG9yRm9yVG9rZW5DbGFzc2lmaWNhdGlvbih0b2tlbml6ZXIlM0R0b2tlbml6ZXIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorForTokenClassification

data_collator = DataCollatorForTokenClassification(tokenizer=tokenizer)`,wrap:!1}}),{c(){y(r.$$.fragment)},l(p){f(r.$$.fragment,p)},m(p,U){T(r,p,U),j=!0},i(p){j||(o(r.$$.fragment,p),j=!0)},o(p){M(r.$$.fragment,p),j=!1},d(p){b(r,p)}}}function rn(v){let r,j="Data collatorul nostru de date este gata de utilizare! Acum să îl folosim pentru a crea un <code>tf.data.Dataset</code> cu metoda <code>to_tf_dataset()</code>. De asemenea, puteți utiliza <code>model.prepare_tf_dataset()</code> pentru a face acest lucru cu un pic mai puțin cod repetitiv - veți vedea acest lucru în unele dintre celelalte secțiuni ale acestui capitol.",p,U,_,h,k="Următoarea oprire: modelul în sine.",Z;return U=new C({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELnRvX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwY29sdW1ucyUzRCU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTJDJTIwJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIybGFiZWxzJTIyJTJDJTIwJTIydG9rZW5fdHlwZV9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMHNodWZmbGUlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDE2JTJDJTBBKSUwQSUwQXRmX2V2YWxfZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQudG9fdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBjb2x1bW5zJTNEJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJsYWJlbHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzREZhbHNlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDE2JTJDJTBBKQ==",highlighted:`tf_train_dataset = tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>].to_tf_dataset(
    columns=[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">True</span>,
    batch_size=<span class="hljs-number">16</span>,
)

tf_eval_dataset = tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>].to_tf_dataset(
    columns=[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">False</span>,
    batch_size=<span class="hljs-number">16</span>,
)`,wrap:!1}}),{c(){r=m("p"),r.innerHTML=j,p=n(),y(U.$$.fragment),_=n(),h=m("p"),h.textContent=k},l(w){r=d(w,"P",{"data-svelte-h":!0}),J(r)!=="svelte-11r12yz"&&(r.innerHTML=j),p=i(w),f(U.$$.fragment,w),_=i(w),h=d(w,"P",{"data-svelte-h":!0}),J(h)!=="svelte-4rk5yl"&&(h.textContent=k)},m(w,A){t(w,r,A),t(w,p,A),T(U,w,A),t(w,_,A),t(w,h,A),Z=!0},i(w){Z||(o(U.$$.fragment,w),Z=!0)},o(w){M(U.$$.fragment,w),Z=!1},d(w){w&&(a(r),a(p),a(_),a(h)),b(U,w)}}}function pn(v){let r,j="După cum se poate observa, al doilea set de labeluri a fost padded la lungimea primului folosind <code>-100</code>.";return{c(){r=m("p"),r.innerHTML=j},l(p){r=d(p,"P",{"data-svelte-h":!0}),J(r)!=="svelte-s657ic"&&(r.innerHTML=j)},m(p,U){t(p,r,U)},i:Sl,o:Sl,d(p){p&&a(r)}}}function zs(v){let r,j,p,U="Deoarece lucrăm la o problemă de clasificare a tokenilor, vom utiliza clasa <code>TFAutoModelForTokenClassification</code>. Principalul lucru de care trebuie să ne amintim atunci când definim acest model este să transmitem informații privind numărul de labeluri pe care le avem. Cel mai simplu mod de a face acest lucru este să transmiteți acest număr cu argumentul <code>num_labels</code>, dar dacă dorim un inference widget frumos care să funcționeze ca cel pe care l-am văzut la începutul acestei secțiuni, este mai bine să setați în schimb corespondențele corecte ale labelurilor.",_,h,k="Acestea ar trebui să fie stabilite de două dicționare, <code>id2label</code> și <code>label2id</code>, care conțin corespondența de la ID la label și viceversa:",Z,w,A,x,I="Acum putem să le transmitem metodei <code>TFAutoModelForTokenClassification.from_pretrained()</code>, iar acestea vor fi setate în configurația modelului, apoi salvate corespunzător și încărcate în Hub:",W,g,Q,X,ve='La fel ca atunci când am definit <code>TFAutoModelForSequenceClassification</code> în <a href="/course/chapter3">Capitolul 3</a>, crearea modelului emite un avertisment că unele weights nu au fost utilizate (cele din headul de preantrenare) și că alte weights sunt inițializate aleatoriu (cele din headul de clasificare a tokenilor noi) și că acest model ar trebui să fie antrenat. Vom face acest lucru într-un minut, dar mai întâi să verificăm de două ori că modelul nostru are numărul corect de labeluri:',Be,E,ne,H,ie,le,he,B,Ge,N,oe="Acum suntem gata să ne antrenăm modelul! Totuși, mai avem doar câteva lucruri de făcut mai întâi: ar trebui să ne conectăm la Hugging Face și să definim hiperparametrii noștri de antrenare. Dacă lucrați într-un notebook, există o funcție convenabilă pentru a vă ajuta cu acest lucru:",Ve,F,re,ae,vl="Aceasta va afișa un widget în care puteți introduce datele tale de autentificare Hugging Face.",pe,S,_e="Dacă nu lucrați într-un notebook, tastați următoarea linie în terminal:",ze,D,te,L,xe="După autentificare, putem pregăti tot ce avem nevoie pentru a compila modelul nostru. 🤗 Transformers oferă o funcție convenabilă <code>create_optimizer()</code> care vă va oferi un optimizator <code>AdamW</code> cu setări adecvate pentru weight decay și learning rate decay, ambele îmbunătățind performanța modelului vsotru în comparație cu optimizatorul <code>Adam</code> încorporat:",Ce,G,Re,q,Ze="Rețineți, de asemenea, că nu furnizăm un argument <code>loss</code> la <code>compile()</code>. Acest lucru se datorează faptului că modelele pot calcula de fapt pierderea intern - dacă compilați fără o pierdere și furnizați labelurile în dicționarul de intrare (așa cum facem în dataseturile noastre), atunci modelul se va antrena folosind acea pierdere internă, care va fi adecvată pentru sarcina și tipul de model pe care le-ați ales.",Ie,V,_l="În continuare, definim un <code>PushToHubCallback</code> pentru a încărca modelul nostru în Hub în timpul antrenării și pentru a potrivi modelul cu acel callback:",ce,se,$e,z,Ye='Puteți specifica numele complet al repositoriului către care doriți să efectuați push cu argumentul <code>hub_model_id</code> (în special, va trebui să utilizați acest argument pentru a efectua push către o organizație). De exemplu, atunci când am trimis modelul către organizația <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code></a>, am adăugat <code>hub_model_id=&quot;huggingface-course/bert-finetuned-ner&quot;</code>. În mod implicit, repositoriul utilizat va fi în namespace-ul denumit după directory output pe care l-ați stabilit, de exemplu <code>&quot;cool_huggingface_user/bert-finetuned-ner&quot;</code>.',P,Ae,ge,R,na="Rețineți că, în timpul antrenamentului, de fiecare dată când modelul este salvat (aici, la fiecare epocă), acesta este încărcat pe Hub în fundal. În acest fel, veți putea să reluați formarea pe o altă mașină, dacă este necesar.",ke,Y,Qe="În acest stadiu, puteți utiliza inference widget de pe Model Hub pentru a testa modelul vostru și pentru a-l partaja cu prietenii. Ați făcut fine-tune cu succes unui model pentru o sarcină de clasificare a tokenilor - felicitări! Dar cât de bun este modelul nostru, de fapt? Ar trebui să evaluăm anumiți parametri pentru a afla.",O;return r=new ue({props:{title:"Definirea modelului",local:"defining-the-model",headingTag:"h3"}}),w=new C({props:{code:"aWQybGFiZWwlMjAlM0QlMjAlN0JpJTNBJTIwbGFiZWwlMjBmb3IlMjBpJTJDJTIwbGFiZWwlMjBpbiUyMGVudW1lcmF0ZShsYWJlbF9uYW1lcyklN0QlMEFsYWJlbDJpZCUyMCUzRCUyMCU3QnYlM0ElMjBrJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGlkMmxhYmVsLml0ZW1zKCklN0Q=",highlighted:`id2label = {i: label <span class="hljs-keyword">for</span> i, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(label_names)}
label2id = {v: k <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> id2label.items()}`,wrap:!1}}),g=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsRm9yVG9rZW5DbGFzc2lmaWNhdGlvbiUwQSUwQW1vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JUb2tlbkNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjBtb2RlbF9jaGVja3BvaW50JTJDJTBBJTIwJTIwJTIwJTIwaWQybGFiZWwlM0RpZDJsYWJlbCUyQyUwQSUyMCUyMCUyMCUyMGxhYmVsMmlkJTNEbGFiZWwyaWQlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForTokenClassification

model = TFAutoModelForTokenClassification.from_pretrained(
    model_checkpoint,
    id2label=id2label,
    label2id=label2id,
)`,wrap:!1}}),E=new C({props:{code:"bW9kZWwuY29uZmlnLm51bV9sYWJlbHM=",highlighted:"model.config.num_labels",wrap:!1}}),H=new C({props:{code:"OQ==",highlighted:'<span class="hljs-number">9</span>',wrap:!1}}),le=new ca({props:{warning:!0,$$slots:{default:[cn]},$$scope:{ctx:v}}}),B=new ue({props:{title:"Fine-tuningul modelului",local:"fine-tuning-the-model",headingTag:"h3"}}),F=new C({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login

notebook_login()`,wrap:!1}}),D=new C({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}}),G=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFpbXBvcnQlMjB0ZW5zb3JmbG93JTIwYXMlMjB0ZiUwQSUwQSUyMyUyMEFudHJlbmFyZWElMjAlQzMlQUVuJTIwbWl4ZWQtcHJlY2lzaW9uJTIwZmxvYXQxNiUwQSUyMyUyMENvbWVudGElQzglOUJpJTIwYWNlYXN0JUM0JTgzJTIwbGluaWUlMjBkYWMlQzQlODMlMjB1dGlsaXphJUM4JTlCaSUyMHVuJTIwR1BVJTIwY2FyZSUyMG51JTIwdmElMjBiZW5lZmljaWElMjBkZSUyMGFjZXN0JTIwbHVjcnUlMEF0Zi5rZXJhcy5taXhlZF9wcmVjaXNpb24uc2V0X2dsb2JhbF9wb2xpY3koJTIybWl4ZWRfZmxvYXQxNiUyMiklMEElMEElMjMlMjBOdW0lQzQlODNydWwlMjBkZSUyMGV0YXBlJTIwZGUlMjBhbnRyZW5hcmUlMjBlc3RlJTIwbnVtJUM0JTgzcnVsJTIwZGUlMjBzYW1wbGV1cmklMjBkaW4lMjBkYXRhc2V0JTJDJTIwJUMzJUFFbXAlQzQlODNyJUM4JTlCaXQlMjBsYSUyMGRpbWVuc2l1bmVhJTIwYmF0Y2gtdWx1aSUyQyUyMGFwb2klMjBtdWx0aXBsaWNhdCUwQSUyMyUyMGN1JTIwbnVtJUM0JTgzcnVsJTIwdG90YWwlMjBkZSUyMGVwb2NpLiUyMFJlJUM4JTlCaW5lJUM4JTlCaSUyMGMlQzQlODMlMjB0Zl90cmFpbl9kYXRhc2V0JTIwZGUlMjBhaWNpJTIwZXN0ZSUyMHVuJTIwYmF0Y2hlZCUyMHRmLmRhdGEuRGF0YXNldCUyQyUwQSUyMyUyMG51JTIwZXN0ZSUyMG9yaWdpbmFsdWwlMjBIdWdnaW5nJTIwRmFjZSUyMERhdGFzZXQlMkMlMjBkZWNpJTIwbGVuKCklMjBlc3RlJTIwZGVqYSUyMG51bV9zYW1wbGVzJTIwJTJGJTJGJTIwYmF0Y2hfc2l6ZS4lMEFudW1fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV90cmFpbl9zdGVwcyUyMCUzRCUyMGxlbih0Zl90cmFpbl9kYXRhc2V0KSUyMColMjBudW1fZXBvY2hzJTBBJTBBb3B0aW1pemVyJTJDJTIwc2NoZWR1bGUlMjAlM0QlMjBjcmVhdGVfb3B0aW1pemVyKCUwQSUyMCUyMCUyMCUyMGluaXRfbHIlM0QyZS01JTJDJTBBJTIwJTIwJTIwJTIwbnVtX3dhcm11cF9zdGVwcyUzRDAlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5fc3RlcHMlM0RudW1fdHJhaW5fc3RlcHMlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfZGVjYXlfcmF0ZSUzRDAuMDElMkMlMEEpJTBBbW9kZWwuY29tcGlsZShvcHRpbWl6ZXIlM0RvcHRpbWl6ZXIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> create_optimizer
<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

<span class="hljs-comment"># Antrenarea în mixed-precision float16</span>
<span class="hljs-comment"># Comentați această linie dacă utilizați un GPU care nu va beneficia de acest lucru</span>
tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">&quot;mixed_float16&quot;</span>)

<span class="hljs-comment"># Numărul de etape de antrenare este numărul de sampleuri din dataset, împărțit la dimensiunea batch-ului, apoi multiplicat</span>
<span class="hljs-comment"># cu numărul total de epoci. Rețineți că tf_train_dataset de aici este un batched tf.data.Dataset,</span>
<span class="hljs-comment"># nu este originalul Hugging Face Dataset, deci len() este deja num_samples // batch_size.</span>
num_epochs = <span class="hljs-number">3</span>
num_train_steps = <span class="hljs-built_in">len</span>(tf_train_dataset) * num_epochs

optimizer, schedule = create_optimizer(
    init_lr=<span class="hljs-number">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)`,wrap:!1}}),se=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5rZXJhc19jYWxsYmFja3MlMjBpbXBvcnQlMjBQdXNoVG9IdWJDYWxsYmFjayUwQSUwQWNhbGxiYWNrJTIwJTNEJTIwUHVzaFRvSHViQ2FsbGJhY2sob3V0cHV0X2RpciUzRCUyMmJlcnQtZmluZXR1bmVkLW5lciUyMiUyQyUyMHRva2VuaXplciUzRHRva2VuaXplciklMEElMEFtb2RlbC5maXQoJTBBJTIwJTIwJTIwJTIwdGZfdHJhaW5fZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMHZhbGlkYXRpb25fZGF0YSUzRHRmX2V2YWxfZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMGNhbGxiYWNrcyUzRCU1QmNhbGxiYWNrJTVEJTJDJTBBJTIwJTIwJTIwJTIwZXBvY2hzJTNEbnVtX2Vwb2NocyUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers.keras_callbacks <span class="hljs-keyword">import</span> PushToHubCallback

callback = PushToHubCallback(output_dir=<span class="hljs-string">&quot;bert-finetuned-ner&quot;</span>, tokenizer=tokenizer)

model.fit(
    tf_train_dataset,
    validation_data=tf_eval_dataset,
    callbacks=[callback],
    epochs=num_epochs,
)`,wrap:!1}}),Ae=new ca({props:{$$slots:{default:[un]},$$scope:{ctx:v}}}),{c(){y(r.$$.fragment),j=n(),p=m("p"),p.innerHTML=U,_=n(),h=m("p"),h.innerHTML=k,Z=n(),y(w.$$.fragment),A=n(),x=m("p"),x.innerHTML=I,W=n(),y(g.$$.fragment),Q=n(),X=m("p"),X.innerHTML=ve,Be=n(),y(E.$$.fragment),ne=n(),y(H.$$.fragment),ie=n(),y(le.$$.fragment),he=n(),y(B.$$.fragment),Ge=n(),N=m("p"),N.textContent=oe,Ve=n(),y(F.$$.fragment),re=n(),ae=m("p"),ae.textContent=vl,pe=n(),S=m("p"),S.textContent=_e,ze=n(),y(D.$$.fragment),te=n(),L=m("p"),L.innerHTML=xe,Ce=n(),y(G.$$.fragment),Re=n(),q=m("p"),q.innerHTML=Ze,Ie=n(),V=m("p"),V.innerHTML=_l,ce=n(),y(se.$$.fragment),$e=n(),z=m("p"),z.innerHTML=Ye,P=n(),y(Ae.$$.fragment),ge=n(),R=m("p"),R.textContent=na,ke=n(),Y=m("p"),Y.textContent=Qe},l(c){f(r.$$.fragment,c),j=i(c),p=d(c,"P",{"data-svelte-h":!0}),J(p)!=="svelte-10btnai"&&(p.innerHTML=U),_=i(c),h=d(c,"P",{"data-svelte-h":!0}),J(h)!=="svelte-1shoa11"&&(h.innerHTML=k),Z=i(c),f(w.$$.fragment,c),A=i(c),x=d(c,"P",{"data-svelte-h":!0}),J(x)!=="svelte-6232fd"&&(x.innerHTML=I),W=i(c),f(g.$$.fragment,c),Q=i(c),X=d(c,"P",{"data-svelte-h":!0}),J(X)!=="svelte-tfzk5p"&&(X.innerHTML=ve),Be=i(c),f(E.$$.fragment,c),ne=i(c),f(H.$$.fragment,c),ie=i(c),f(le.$$.fragment,c),he=i(c),f(B.$$.fragment,c),Ge=i(c),N=d(c,"P",{"data-svelte-h":!0}),J(N)!=="svelte-e4pzct"&&(N.textContent=oe),Ve=i(c),f(F.$$.fragment,c),re=i(c),ae=d(c,"P",{"data-svelte-h":!0}),J(ae)!=="svelte-i33qye"&&(ae.textContent=vl),pe=i(c),S=d(c,"P",{"data-svelte-h":!0}),J(S)!=="svelte-fhjhmt"&&(S.textContent=_e),ze=i(c),f(D.$$.fragment,c),te=i(c),L=d(c,"P",{"data-svelte-h":!0}),J(L)!=="svelte-1ats0y9"&&(L.innerHTML=xe),Ce=i(c),f(G.$$.fragment,c),Re=i(c),q=d(c,"P",{"data-svelte-h":!0}),J(q)!=="svelte-126h93s"&&(q.innerHTML=Ze),Ie=i(c),V=d(c,"P",{"data-svelte-h":!0}),J(V)!=="svelte-ff9zv0"&&(V.innerHTML=_l),ce=i(c),f(se.$$.fragment,c),$e=i(c),z=d(c,"P",{"data-svelte-h":!0}),J(z)!=="svelte-4u43dh"&&(z.innerHTML=Ye),P=i(c),f(Ae.$$.fragment,c),ge=i(c),R=d(c,"P",{"data-svelte-h":!0}),J(R)!=="svelte-16y56ge"&&(R.textContent=na),ke=i(c),Y=d(c,"P",{"data-svelte-h":!0}),J(Y)!=="svelte-13kz9ey"&&(Y.textContent=Qe)},m(c,$){T(r,c,$),t(c,j,$),t(c,p,$),t(c,_,$),t(c,h,$),t(c,Z,$),T(w,c,$),t(c,A,$),t(c,x,$),t(c,W,$),T(g,c,$),t(c,Q,$),t(c,X,$),t(c,Be,$),T(E,c,$),t(c,ne,$),T(H,c,$),t(c,ie,$),T(le,c,$),t(c,he,$),T(B,c,$),t(c,Ge,$),t(c,N,$),t(c,Ve,$),T(F,c,$),t(c,re,$),t(c,ae,$),t(c,pe,$),t(c,S,$),t(c,ze,$),T(D,c,$),t(c,te,$),t(c,L,$),t(c,Ce,$),T(G,c,$),t(c,Re,$),t(c,q,$),t(c,Ie,$),t(c,V,$),t(c,ce,$),T(se,c,$),t(c,$e,$),t(c,z,$),t(c,P,$),T(Ae,c,$),t(c,ge,$),t(c,R,$),t(c,ke,$),t(c,Y,$),O=!0},i(c){O||(o(r.$$.fragment,c),o(w.$$.fragment,c),o(g.$$.fragment,c),o(E.$$.fragment,c),o(H.$$.fragment,c),o(le.$$.fragment,c),o(B.$$.fragment,c),o(F.$$.fragment,c),o(D.$$.fragment,c),o(G.$$.fragment,c),o(se.$$.fragment,c),o(Ae.$$.fragment,c),O=!0)},o(c){M(r.$$.fragment,c),M(w.$$.fragment,c),M(g.$$.fragment,c),M(E.$$.fragment,c),M(H.$$.fragment,c),M(le.$$.fragment,c),M(B.$$.fragment,c),M(F.$$.fragment,c),M(D.$$.fragment,c),M(G.$$.fragment,c),M(se.$$.fragment,c),M(Ae.$$.fragment,c),O=!1},d(c){c&&(a(j),a(p),a(_),a(h),a(Z),a(A),a(x),a(W),a(Q),a(X),a(Be),a(ne),a(ie),a(he),a(Ge),a(N),a(Ve),a(re),a(ae),a(pe),a(S),a(ze),a(te),a(L),a(Ce),a(Re),a(q),a(Ie),a(V),a(ce),a($e),a(z),a(P),a(ge),a(R),a(ke),a(Y)),b(r,c),b(w,c),b(g,c),b(E,c),b(H,c),b(le,c),b(B,c),b(F,c),b(D,c),b(G,c),b(se,c),b(Ae,c)}}}function cn(v){let r,j="⚠️ Dacă aveți un model cu un număr greșit de labeluri, veți primi o eroare obscură atunci când apelați <code>model.fit()</code> mai târziu. Acest lucru poate fi enervant pentru debbuging, așa că asigurați-vă că faceți această verificare pentru a confirma că aveți numărul așteptat de labeluri.";return{c(){r=m("p"),r.innerHTML=j},l(p){r=d(p,"P",{"data-svelte-h":!0}),J(r)!=="svelte-1u33uus"&&(r.innerHTML=j)},m(p,U){t(p,r,U)},p:Sl,d(p){p&&a(r)}}}function un(v){let r,j="💡 Dacă directory output pe care îl utilizați există deja, acesta trebuie să fie o clonă locală a repositoriului către care doriți să faceți push. Dacă nu este, veți primi o eroare atunci când apelați <code>model.fit()</code> și va trebui să setați un nume nou.";return{c(){r=m("p"),r.innerHTML=j},l(p){r=d(p,"P",{"data-svelte-h":!0}),J(r)!=="svelte-1bctnmq"&&(r.innerHTML=j)},m(p,U){t(p,r,U)},p:Sl,d(p){p&&a(r)}}}function on(v){let r,j='Frameworkul tradițional utilizat pentru a evalua predicția clasificării tokenilor este <a href="https://github.com/chakki-works/seqeval" rel="nofollow"><em>seqeval</em></a>. Pentru a utiliza această metrică, trebuie mai întâi să instalăm biblioteca <em>seqeval</em>:',p,U,_,h,k='Apoi îl putem încărca prin intermediul funcției <code>evaluate.load()</code> așa cum am făcut în <a href="/course/chapter3">Capitolul 3</a>:',Z;return U=new C({props:{code:"IXBpcCUyMGluc3RhbGwlMjBzZXFldmFs",highlighted:"!pip install seqeval",wrap:!1}}),{c(){r=m("p"),r.innerHTML=j,p=n(),y(U.$$.fragment),_=n(),h=m("p"),h.innerHTML=k},l(w){r=d(w,"P",{"data-svelte-h":!0}),J(r)!=="svelte-r3mgbh"&&(r.innerHTML=j),p=i(w),f(U.$$.fragment,w),_=i(w),h=d(w,"P",{"data-svelte-h":!0}),J(h)!=="svelte-rgwenp"&&(h.innerHTML=k)},m(w,A){t(w,r,A),t(w,p,A),T(U,w,A),t(w,_,A),t(w,h,A),Z=!0},i(w){Z||(o(U.$$.fragment,w),Z=!0)},o(w){M(U.$$.fragment,w),Z=!1},d(w){w&&(a(r),a(p),a(_),a(h)),b(U,w)}}}function Mn(v){let r,j="Pentru ca <code>Trainer</code> să calculeze o metrică în fiecare epocă, va trebui să definim o funcție <code>compute_metrics()</code> care primește matricele de predicții și labelurile și returnează un dicționar cu numele și valorile metricilor.",p,U,_='Frameworkul tradițional utilizat pentru a evalua predicția clasificării a tokenilor este <a href="https://github.com/chakki-works/seqeval" rel="nofollow"><em>seqeval</em></a>. Pentru a utiliza această metrică, trebuie mai întâi să instalăm biblioteca <em>seqeval</em>:',h,k,Z,w,A='Apoi îl putem încărca prin intermediul funcției <code>evaluate.load()</code> așa cum am făcut în <a href="/course/chapter3">Capitolul 3</a>:',x;return k=new C({props:{code:"IXBpcCUyMGluc3RhbGwlMjBzZXFldmFs",highlighted:"!pip install seqeval",wrap:!1}}),{c(){r=m("p"),r.innerHTML=j,p=n(),U=m("p"),U.innerHTML=_,h=n(),y(k.$$.fragment),Z=n(),w=m("p"),w.innerHTML=A},l(I){r=d(I,"P",{"data-svelte-h":!0}),J(r)!=="svelte-vnj596"&&(r.innerHTML=j),p=i(I),U=d(I,"P",{"data-svelte-h":!0}),J(U)!=="svelte-150027e"&&(U.innerHTML=_),h=i(I),f(k.$$.fragment,I),Z=i(I),w=d(I,"P",{"data-svelte-h":!0}),J(w)!=="svelte-rgwenp"&&(w.innerHTML=A)},m(I,W){t(I,r,W),t(I,p,W),t(I,U,W),t(I,h,W),T(k,I,W),t(I,Z,W),t(I,w,W),x=!0},i(I){x||(o(k.$$.fragment,I),x=!0)},o(I){M(k.$$.fragment,I),x=!1},d(I){I&&(a(r),a(p),a(U),a(h),a(Z),a(w)),b(k,I)}}}function mn(v){let r,j="Aceasta trimite înapoi o mulțime de informații! Obținem precizia, recallul și scorul F1 pentru fiecare entitate în parte, precum și în ansamblu. Acum să vedem ce se întâmplă dacă încercăm să folosim predicțiile modelului nostru real pentru a calcula niște scoruri reale.",p,U,_="TensorFlow nu apreciază concatenarea predicțiilor noastre, deoarece acestea au lungimi de secvențe variabile. Aceasta înseamnă că nu putem folosi pur și simplu <code>model.predict()</code> - dar asta nu ne va opri. Vom obține unele predicții pe rând și le vom concatena într-o singură listă mare și lungă, eliminând simbolurile <code>-100</code> care indică mascarea/paddingul, apoi vom calcula metrici pe lista de la sfârșit:",h,k,Z,w,A,x,I="Cum s-a descurcat modelul tău, comparativ cu al nostru? Dacă ați obținut cifre similare, antrenarea a fost un succes!",W;return k=new C({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBYWxsX3ByZWRpY3Rpb25zJTIwJTNEJTIwJTVCJTVEJTBBYWxsX2xhYmVscyUyMCUzRCUyMCU1QiU1RCUwQWZvciUyMGJhdGNoJTIwaW4lMjB0Zl9ldmFsX2RhdGFzZXQlM0ElMEElMjAlMjAlMjAlMjBsb2dpdHMlMjAlM0QlMjBtb2RlbC5wcmVkaWN0X29uX2JhdGNoKGJhdGNoKSU1QiUyMmxvZ2l0cyUyMiU1RCUwQSUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMGJhdGNoJTVCJTIybGFiZWxzJTIyJTVEJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlMjAlM0QlMjBucC5hcmdtYXgobG9naXRzJTJDJTIwYXhpcyUzRC0xKSUwQSUyMCUyMCUyMCUyMGZvciUyMHByZWRpY3Rpb24lMkMlMjBsYWJlbCUyMGluJTIwemlwKHByZWRpY3Rpb25zJTJDJTIwbGFiZWxzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMHByZWRpY3RlZF9pZHglMkMlMjBsYWJlbF9pZHglMjBpbiUyMHppcChwcmVkaWN0aW9uJTJDJTIwbGFiZWwpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsYWJlbF9pZHglMjAlM0QlM0QlMjAtMTAwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhbGxfcHJlZGljdGlvbnMuYXBwZW5kKGxhYmVsX25hbWVzJTVCcHJlZGljdGVkX2lkeCU1RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhbGxfbGFiZWxzLmFwcGVuZChsYWJlbF9uYW1lcyU1QmxhYmVsX2lkeCU1RCklMEFtZXRyaWMuY29tcHV0ZShwcmVkaWN0aW9ucyUzRCU1QmFsbF9wcmVkaWN0aW9ucyU1RCUyQyUyMHJlZmVyZW5jZXMlM0QlNUJhbGxfbGFiZWxzJTVEKQ==",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

all_predictions = []
all_labels = []
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> tf_eval_dataset:
    logits = model.predict_on_batch(batch)[<span class="hljs-string">&quot;logits&quot;</span>]
    labels = batch[<span class="hljs-string">&quot;labels&quot;</span>]
    predictions = np.argmax(logits, axis=-<span class="hljs-number">1</span>)
    <span class="hljs-keyword">for</span> prediction, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(predictions, labels):
        <span class="hljs-keyword">for</span> predicted_idx, label_idx <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(prediction, label):
            <span class="hljs-keyword">if</span> label_idx == -<span class="hljs-number">100</span>:
                <span class="hljs-keyword">continue</span>
            all_predictions.append(label_names[predicted_idx])
            all_labels.append(label_names[label_idx])
metric.compute(predictions=[all_predictions], references=[all_labels])`,wrap:!1}}),w=new C({props:{code:"JTdCJ0xPQyclM0ElMjAlN0IncHJlY2lzaW9uJyUzQSUyMDAuOTElMkMlMjAncmVjYWxsJyUzQSUyMDAuOTIlMkMlMjAnZjEnJTNBJTIwMC45MSUyQyUyMCdudW1iZXInJTNBJTIwMTY2OCU3RCUyQyUwQSUyMCdNSVNDJyUzQSUyMCU3QidwcmVjaXNpb24nJTNBJTIwMC43MCUyQyUyMCdyZWNhbGwnJTNBJTIwMC43OSUyQyUyMCdmMSclM0ElMjAwLjc0JTJDJTIwJ251bWJlciclM0ElMjA3MDIlN0QlMkMlMEElMjAnT1JHJyUzQSUyMCU3QidwcmVjaXNpb24nJTNBJTIwMC44NSUyQyUyMCdyZWNhbGwnJTNBJTIwMC45MCUyQyUyMCdmMSclM0ElMjAwLjg4JTJDJTIwJ251bWJlciclM0ElMjAxNjYxJTdEJTJDJTBBJTIwJ1BFUiclM0ElMjAlN0IncHJlY2lzaW9uJyUzQSUyMDAuOTUlMkMlMjAncmVjYWxsJyUzQSUyMDAuOTUlMkMlMjAnZjEnJTNBJTIwMC45NSUyQyUyMCdudW1iZXInJTNBJTIwMTYxNyU3RCUyQyUwQSUyMCdvdmVyYWxsX3ByZWNpc2lvbiclM0ElMjAwLjg3JTJDJTBBJTIwJ292ZXJhbGxfcmVjYWxsJyUzQSUyMDAuOTElMkMlMEElMjAnb3ZlcmFsbF9mMSclM0ElMjAwLjg5JTJDJTBBJTIwJ292ZXJhbGxfYWNjdXJhY3knJTNBJTIwMC45NyU3RA==",highlighted:`{<span class="hljs-string">&#x27;LOC&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">0.91</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.92</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.91</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">1668</span>},
 <span class="hljs-string">&#x27;MISC&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">0.70</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.79</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.74</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">702</span>},
 <span class="hljs-string">&#x27;ORG&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">0.85</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.90</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.88</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">1661</span>},
 <span class="hljs-string">&#x27;PER&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">0.95</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.95</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.95</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">1617</span>},
 <span class="hljs-string">&#x27;overall_precision&#x27;</span>: <span class="hljs-number">0.87</span>,
 <span class="hljs-string">&#x27;overall_recall&#x27;</span>: <span class="hljs-number">0.91</span>,
 <span class="hljs-string">&#x27;overall_f1&#x27;</span>: <span class="hljs-number">0.89</span>,
 <span class="hljs-string">&#x27;overall_accuracy&#x27;</span>: <span class="hljs-number">0.97</span>}`,wrap:!1}}),{c(){r=m("p"),r.textContent=j,p=n(),U=m("p"),U.innerHTML=_,h=n(),y(k.$$.fragment),Z=n(),y(w.$$.fragment),A=n(),x=m("p"),x.textContent=I},l(g){r=d(g,"P",{"data-svelte-h":!0}),J(r)!=="svelte-1tc66cf"&&(r.textContent=j),p=i(g),U=d(g,"P",{"data-svelte-h":!0}),J(U)!=="svelte-ued7o4"&&(U.innerHTML=_),h=i(g),f(k.$$.fragment,g),Z=i(g),f(w.$$.fragment,g),A=i(g),x=d(g,"P",{"data-svelte-h":!0}),J(x)!=="svelte-685072"&&(x.textContent=I)},m(g,Q){t(g,r,Q),t(g,p,Q),t(g,U,Q),t(g,h,Q),T(k,g,Q),t(g,Z,Q),T(w,g,Q),t(g,A,Q),t(g,x,Q),W=!0},i(g){W||(o(k.$$.fragment,g),o(w.$$.fragment,g),W=!0)},o(g){M(k.$$.fragment,g),M(w.$$.fragment,g),W=!1},d(g){g&&(a(r),a(p),a(U),a(h),a(Z),a(A),a(x)),b(k,g),b(w,g)}}}function dn(v){let r,j="Acesta trimite înapoi o mulțime de informații! Noi obținem precizia, recallul și scorul F1 pentru fiecare entitate în parte, precum și scorul general. Pentru calculul nostru metric, vom păstra doar scorul global, dar nu ezitați să modificați funcția <code>compute_metrics()</code> pentru a returna toate metricile pe care doriți să le raportați.",p,U,_="Această funcție <code>compute_metrics()</code> ia mai întâi argmaxul logiturilor pentru a le converti în predicții (ca de obicei, logiturile și probabilitățile sunt în aceeași ordine, deci nu trebuie să aplicăm softmaxul). Apoi trebuie să convertim atât labelurile, cât și predicțiile din numere întregi în șiruri de caractere. Eliminăm toate valorile în care labelul este <code>-100</code>, apoi transmitem rezultatele metodei <code>metric.compute()</code>:",h,k,Z,w,A="Acum că acest lucru este făcut, suntem aproape gata să definim <code>Trainer</code>-ul nostru. Avem nevoie doar de un <code>model</code> pentru a face fine-tune!",x;return k=new C({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBJTBBZGVmJTIwY29tcHV0ZV9tZXRyaWNzKGV2YWxfcHJlZHMpJTNBJTBBJTIwJTIwJTIwJTIwbG9naXRzJTJDJTIwbGFiZWxzJTIwJTNEJTIwZXZhbF9wcmVkcyUwQSUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwbnAuYXJnbWF4KGxvZ2l0cyUyQyUyMGF4aXMlM0QtMSklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBSZW1vdmUlMjBpZ25vcmVkJTIwaW5kZXglMjAoc3BlY2lhbCUyMHRva2VucyklMjBhbmQlMjBjb252ZXJ0JTIwdG8lMjBsYWJlbHMlMEElMjAlMjAlMjAlMjB0cnVlX2xhYmVscyUyMCUzRCUyMCU1QiU1QmxhYmVsX25hbWVzJTVCbCU1RCUyMGZvciUyMGwlMjBpbiUyMGxhYmVsJTIwaWYlMjBsJTIwISUzRCUyMC0xMDAlNUQlMjBmb3IlMjBsYWJlbCUyMGluJTIwbGFiZWxzJTVEJTBBJTIwJTIwJTIwJTIwdHJ1ZV9wcmVkaWN0aW9ucyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QmxhYmVsX25hbWVzJTVCcCU1RCUyMGZvciUyMChwJTJDJTIwbCklMjBpbiUyMHppcChwcmVkaWN0aW9uJTJDJTIwbGFiZWwpJTIwaWYlMjBsJTIwISUzRCUyMC0xMDAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBwcmVkaWN0aW9uJTJDJTIwbGFiZWwlMjBpbiUyMHppcChwcmVkaWN0aW9ucyUyQyUyMGxhYmVscyklMEElMjAlMjAlMjAlMjAlNUQlMEElMjAlMjAlMjAlMjBhbGxfbWV0cmljcyUyMCUzRCUyMG1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEdHJ1ZV9wcmVkaWN0aW9ucyUyQyUyMHJlZmVyZW5jZXMlM0R0cnVlX2xhYmVscyklMEElMjAlMjAlMjAlMjByZXR1cm4lMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJwcmVjaXNpb24lMjIlM0ElMjBhbGxfbWV0cmljcyU1QiUyMm92ZXJhbGxfcHJlY2lzaW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIycmVjYWxsJTIyJTNBJTIwYWxsX21ldHJpY3MlNUIlMjJvdmVyYWxsX3JlY2FsbCUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMmYxJTIyJTNBJTIwYWxsX21ldHJpY3MlNUIlMjJvdmVyYWxsX2YxJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyYWNjdXJhY3klMjIlM0ElMjBhbGxfbWV0cmljcyU1QiUyMm92ZXJhbGxfYWNjdXJhY3klMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlN0Q=",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np


<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">eval_preds</span>):
    logits, labels = eval_preds
    predictions = np.argmax(logits, axis=-<span class="hljs-number">1</span>)

    <span class="hljs-comment"># Remove ignored index (special tokens) and convert to labels</span>
    true_labels = [[label_names[l] <span class="hljs-keyword">for</span> l <span class="hljs-keyword">in</span> label <span class="hljs-keyword">if</span> l != -<span class="hljs-number">100</span>] <span class="hljs-keyword">for</span> label <span class="hljs-keyword">in</span> labels]
    true_predictions = [
        [label_names[p] <span class="hljs-keyword">for</span> (p, l) <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(prediction, label) <span class="hljs-keyword">if</span> l != -<span class="hljs-number">100</span>]
        <span class="hljs-keyword">for</span> prediction, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(predictions, labels)
    ]
    all_metrics = metric.compute(predictions=true_predictions, references=true_labels)
    <span class="hljs-keyword">return</span> {
        <span class="hljs-string">&quot;precision&quot;</span>: all_metrics[<span class="hljs-string">&quot;overall_precision&quot;</span>],
        <span class="hljs-string">&quot;recall&quot;</span>: all_metrics[<span class="hljs-string">&quot;overall_recall&quot;</span>],
        <span class="hljs-string">&quot;f1&quot;</span>: all_metrics[<span class="hljs-string">&quot;overall_f1&quot;</span>],
        <span class="hljs-string">&quot;accuracy&quot;</span>: all_metrics[<span class="hljs-string">&quot;overall_accuracy&quot;</span>],
    }`,wrap:!1}}),{c(){r=m("p"),r.innerHTML=j,p=n(),U=m("p"),U.innerHTML=_,h=n(),y(k.$$.fragment),Z=n(),w=m("p"),w.innerHTML=A},l(I){r=d(I,"P",{"data-svelte-h":!0}),J(r)!=="svelte-aj08nq"&&(r.innerHTML=j),p=i(I),U=d(I,"P",{"data-svelte-h":!0}),J(U)!=="svelte-dv8y0a"&&(U.innerHTML=_),h=i(I),f(k.$$.fragment,I),Z=i(I),w=d(I,"P",{"data-svelte-h":!0}),J(w)!=="svelte-zlewbm"&&(w.innerHTML=A)},m(I,W){t(I,r,W),t(I,p,W),t(I,U,W),t(I,h,W),T(k,I,W),t(I,Z,W),t(I,w,W),x=!0},i(I){x||(o(k.$$.fragment,I),x=!0)},o(I){M(k.$$.fragment,I),x=!1},d(I){I&&(a(r),a(p),a(U),a(h),a(Z),a(w)),b(k,I)}}}function Rs(v){let r,j,p,U="Deoarece lucrăm la o problemă de clasificare a tokenilor, vom utiliza clasa <code>AutoModelForTokenClassification</code>. Principalul lucru de care trebuie să ne amintim atunci când definim acest model este să transmitem informații privind numărul de labeluri pe care le avem. Cel mai simplu mod de a face acest lucru este să transmiteți acest număr cu argumentul <code>num_labels</code>, dar dacă dorim un inferencea widget frumos care să funcționeze ca cel pe care l-am văzut la începutul acestei secțiuni, este mai bine să setați în schimb corespondențele corecte ale labelurilor.",_,h,k="Acestea ar trebui să fie stabilite de două dicționare, <code>id2label</code> și <code>label2id</code>, care conțin corespondențele de la ID la labeluri și viceversa:",Z,w,A,x,I="Acum putem doar să le transmitem metodei <code>AutoModelForTokenClassification.from_pretrained()</code>, iar acestea vor fi setate în configurația modelului și apoi salvate și încărcate corespunzător în Hub:",W,g,Q,X,ve='La fel ca atunci când am definit <code>AutoModelForSequenceClassification</code> în <a href="/course/chapter3">Capitolul 3</a>, crearea modelului emite un avertisment că unele weights nu au fost utilizate (cele din headul de antrenare) și alte weights sunt inițializate aleatoriu (cele din headul de clasificare a tokenilor noi) și că acest model ar trebui să fie format. Vom face acest lucru într-un minut, dar mai întâi să verificăm de două ori că modelul nostru are numărul corect de labeluri:',Be,E,ne,H,ie,le,he,B,Ge,N,oe="Acum suntem gata să ne antrenăm modelul! Trebuie doar să facem ultimele două lucruri înainte de a defini modelul nostru <code>Trainer</code>: să ne conectăm la Hugging Face și să definim argumentele de antrenare. Dacă lucrați într-un notebook, există o funcție convenabilă pentru a vă ajuta cu acest lucru:",Ve,F,re,ae,vl="Aceasta va afișa un widget în care puteți introduce datele tale de autentificare Hugging Face.",pe,S,_e="Dacă nu lucrați într-un notebook, tastați următoarea linie în terminal:",ze,D,te,L,xe="Odată făcut acest lucru, putem defini<code>TrainingArguments</code>:",Ce,G,Re,q,Ze='Ați mai văzut cele mai multe dintre acestea: stabilim niște hiperparametri (cum ar fi learning rate, numărul de epoci pentru care să ne antrenăm și weights decay) și specificăm <code>push_to_hub=True</code> pentru a indica faptul că dorim să salvăm modelul și să îl evaluăm la sfârșitul fiecărei epoci și că dorim să încărcăm rezultatele noastre în Model Hub. Rețineți că puteți specifica numele repositoriului către care doriți să faceți push cu argumentul <code>hub_model_id</code> (în special, va trebui să utilizați acest argument pentru a face push către o organizație). De exemplu, atunci când am trimis modelul către organizația <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code></a>, am adăugat <code>hub_model_id=&quot;huggingface-course/bert-finetuned-ner&quot;</code> la <code>TrainingArguments</code>. În mod implicit, repositoriul utilizat va fi în namespaceul tău și denumit după output directory-ul pe care l-ați setat, deci în cazul nostru va fi <code>&quot;sgugger/bert-finetuned-ner&quot;</code>.',Ie,V,_l,ce,se="În final, transmitem totul către <code>Trainer</code> și lansăm antrenarea:",$e,z,Ye,P,Ae="Rețineți că, în timpul antrenării, de fiecare dată când modelul este salvat (aici, la fiecare epocă), acesta este încărcat pe Hub în fundal. În acest fel, veți putea să reluați antrenareape o altă mașină, dacă este necesar.",ge,R,na="Odată ce antrenamentul este complet, folosim metoda <code>push_to_hub()</code> pentru a ne asigura că încărcăm cea mai recentă versiune a modelului:",ke,Y,Qe,O,c="Această comandă returnează URL-ul comitului pe care tocmai l-ai făcut, dacă doriți să o inspectați:",$,xl,Dl,Me,ua="De asemenea, <code>Trainer</code> redactează un model card cu toate rezultatele evaluării și o încarcă. În acest stadiu, puteți utiliza inference widgetul de pe Model Hub pentru a testa modelul și a-l partaja cu prietenii. Ați făcut fine-tune cu succes un model pentru o sarcină de clasificare a tokenilor - felicitări!",Xe,Ee,Zl="Dacă doriți să vă scufundați puțin mai profund în bucla de antrenare, vă vom arăta acum cum să faceți același lucru utilizând 🤗 Accelerate.",oa,He,Ne,Fe,Al='Să aruncăm acum o privire la training loopul complet, astfel încât să puteți personaliza cu ușurință părțile de care aveți nevoie. Va semăna foarte mult cu ceea ce am făcut în <a href="/course/chapter3/4">Capitolul 3</a>, cu câteva modificări pentru evaluare.',Ll,me,Ma,Se,Wl="Mai întâi trebuie să construim <code>DataLoader</code>s din dataseturile noastre. Vom reutiliza <code>data_collator</code> ca un <code>collate_fn</code> și vom amesteca setul de antrenare, dar nu și setul de validare:",ql,de,Pl,Je,ft="În continuare, reinstanțiem modelul, pentru a ne asigura că nu continuăm fine-tuningul de dinainte, ci pornim din nou de la modelul preantrenat BERT:",Ol,ye,ma,De,Bl="Atunci vom avea nevoie de un optimizator. Vom folosi clasicul <code>AdamW</code>, care este ca <code>Adam</code>, dar cu o corecție în modul în care se aplică weight decay-ul:",da,Le,qe,Pe,Gl="Odată ce avem toate aceste obiecte, le putem trimite la metoda <code>accelerator.prepare()</code>:",Kl,fe,Ja,Oe,Ke,el,Vl="Acum că am trimis <code>train_dataloader</code> la <code>accelerator.prepare()</code>, putem utiliza lungimea acestuia pentru a calcula numărul de pași de antrenare. Rețineți că ar trebui să facem întotdeauna acest lucru după ce pregătim dataloaderul, deoarece această metodă îi va modifica lungimea. Utilizăm un classic liner schedule de la rata de învățare la 0:",ya,ll,We,al,zl="În cele din urmă, pentru a trimite modelul nostru către Hub, va trebui să creăm un obiect <code>Repository</code> într-un folder de lucru. În primul rând, conectați-vă la Hugging Face, dacă nu sunteți deja conectat. Vom determina numele repositoriului pornind de la ID-ul modelului pe care dorim să îl dăm modelului nostru (nu ezitați să înlocuiți <code>repo_name</code> cu propriul nume; trebuie doar să conțină numele vostru de utilizator, ceea ce face funcția <code>get_full_repo_name()</code>):",ea,Te,la,be,fa,tl,Rl="Apoi putem clona acel repositoriu într-un folder local. Dacă există deja, acest folder local ar trebui să fie o clonă existentă a repositoriului cu care lucrăm:",Ta,sl,nl,il,Yl="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.",ba,rl,pl,cl,Ql="Acum suntem pregătiți să scriem bucla de antrenare completă. Pentru a simplifica partea sa de evaluare, definim funcția <code>postprocess()</code> care preia predicțiile și labelurile și le convertește în liste de șiruri de caractere, așa cum se așteaptă obiectul nostru <code>metric</code>:",aa,je,ja,ul,Xl="Apoi putem scrie bucla de antrenare. După definirea unei bare de progres pentru a urmări modul în care decurge antrenarea, bucla are trei părți:",ta,we,wa="<li>Antrenarea î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 există o noutate după obținerea outputurilor modelului nostru pe un batch: din moment ce două procese pot ar fi putut face padding inputurilor și labelurile la forme diferite, trebuie să folosim <code>accelerator.pad_across_processes()</code> pentru a face predicțiile și labelurile să aibă aceeași formă înainte de a apela metoda <code>gather()</code>. Dacă nu facem acest lucru, evaluarea va da eroare sau se va bloca pentru totdeauna. Apoi trimitem rezultatele la <code>metric.add_batch()</code> și apelăm <code>metric.compute()</code> odată ce bucla de evaluare s-a încheiat.</li> <li>Salvarea și încărcarea, unde mai întâi salvăm modelul și tokenizerul, apoi apelăm <code>repo.push_to_hub()</code>. Observați că 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ă în fundal.</li>",ol,El,Ua="Iată codul complet pentru bucla de antrenare:",Ml,Hl,sa,Ue,ha="Î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:",ml,dl,Jl,Nl,Ca="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 a salva. 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>.",yl,fl,Fl='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 la [<em>huggingface-course/bert-finetuned-ner-accelerate</em>] (<a href="https://huggingface.co/huggingface-course/bert-finetuned-ner-accelerate" rel="nofollow">https://huggingface.co/huggingface-course/bert-finetuned-ner-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!',Ia;return r=new ue({props:{title:"Definirea modelului",local:"defining-the-model",headingTag:"h3"}}),w=new C({props:{code:"aWQybGFiZWwlMjAlM0QlMjAlN0JpJTNBJTIwbGFiZWwlMjBmb3IlMjBpJTJDJTIwbGFiZWwlMjBpbiUyMGVudW1lcmF0ZShsYWJlbF9uYW1lcyklN0QlMEFsYWJlbDJpZCUyMCUzRCUyMCU3QnYlM0ElMjBrJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGlkMmxhYmVsLml0ZW1zKCklN0Q=",highlighted:`id2label = {i: label <span class="hljs-keyword">for</span> i, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(label_names)}
label2id = {v: k <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> id2label.items()}`,wrap:!1}}),g=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclRva2VuQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclRva2VuQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMG1vZGVsX2NoZWNrcG9pbnQlMkMlMEElMjAlMjAlMjAlMjBpZDJsYWJlbCUzRGlkMmxhYmVsJTJDJTBBJTIwJTIwJTIwJTIwbGFiZWwyaWQlM0RsYWJlbDJpZCUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForTokenClassification

model = AutoModelForTokenClassification.from_pretrained(
    model_checkpoint,
    id2label=id2label,
    label2id=label2id,
)`,wrap:!1}}),E=new C({props:{code:"bW9kZWwuY29uZmlnLm51bV9sYWJlbHM=",highlighted:"model.config.num_labels",wrap:!1}}),H=new C({props:{code:"OQ==",highlighted:'<span class="hljs-number">9</span>',wrap:!1}}),le=new ca({props:{warning:!0,$$slots:{default:[Jn]},$$scope:{ctx:v}}}),B=new ue({props:{title:"Fine-tuningul modelului",local:"fine-tuning-the-model",headingTag:"h3"}}),F=new C({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login

notebook_login()`,wrap:!1}}),D=new C({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}}),G=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUwQSUyMCUyMCUyMCUyMCUyMmJlcnQtZmluZXR1bmVkLW5lciUyMiUyQyUwQSUyMCUyMCUyMCUyMGV2YWx1YXRpb25fc3RyYXRlZ3klM0QlMjJlcG9jaCUyMiUyQyUwQSUyMCUyMCUyMCUyMHNhdmVfc3RyYXRlZ3klM0QlMjJlcG9jaCUyMiUyQyUwQSUyMCUyMCUyMCUyMGxlYXJuaW5nX3JhdGUlM0QyZS01JTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluX2Vwb2NocyUzRDMlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfZGVjYXklM0QwLjAxJTJDJTBBJTIwJTIwJTIwJTIwcHVzaF90b19odWIlM0RUcnVlJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments

args = TrainingArguments(
    <span class="hljs-string">&quot;bert-finetuned-ner&quot;</span>,
    evaluation_strategy=<span class="hljs-string">&quot;epoch&quot;</span>,
    save_strategy=<span class="hljs-string">&quot;epoch&quot;</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>,
    push_to_hub=<span class="hljs-literal">True</span>,
)`,wrap:!1}}),V=new ca({props:{$$slots:{default:[yn]},$$scope:{ctx:v}}}),z=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluZXIlMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUzRG1vZGVsJTJDJTBBJTIwJTIwJTIwJTIwYXJncyUzRGFyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0R0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZGF0YV9jb2xsYXRvciUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBjb21wdXRlX21ldHJpY3MlM0Rjb21wdXRlX21ldHJpY3MlMkMlMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMEEpJTBBdHJhaW5lci50cmFpbigp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer

trainer = Trainer(
    model=model,
    args=args,
    train_dataset=tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
    eval_dataset=tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>],
    data_collator=data_collator,
    compute_metrics=compute_metrics,
    tokenizer=tokenizer,
)
trainer.train()`,wrap:!1}}),Y=new C({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yihjb21taXRfbWVzc2FnZSUzRCUyMlRyYWluaW5nJTIwY29tcGxldGUlMjIp",highlighted:'trainer.push_to_hub(commit_message=<span class="hljs-string">&quot;Training complete&quot;</span>)',wrap:!1}}),xl=new C({props:{code:"J2h0dHBzJTNBJTJGJTJGaHVnZ2luZ2ZhY2UuY28lMkZzZ3VnZ2VyJTJGYmVydC1maW5ldHVuZWQtbmVyJTJGY29tbWl0JTJGMjZhYjIxZTViMTU2OGY5YWZlY2NkYWVkMmQ4NzE1ZjU3MWQ3ODZlZCc=",highlighted:'<span class="hljs-string">&#x27;https://huggingface.co/sgugger/bert-finetuned-ner/commit/26ab21e5b1568f9afeccdaed2d8715f571d786ed&#x27;</span>',wrap:!1}}),He=new ue({props:{title:"Un training loop personalizat",local:"a-custom-training-loop",headingTag:"h2"}}),me=new ue({props:{title:"Pregătiți totul pentru antrenare",local:"preparing-everything-for-training",headingTag:"h3"}}),de=new C({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBJTBBdHJhaW5fZGF0YWxvYWRlciUyMCUzRCUyMERhdGFMb2FkZXIoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDglMkMlMEEpJTBBZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMjBiYXRjaF9zaXplJTNEOCUwQSk=",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader

train_dataloader = DataLoader(
    tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
    shuffle=<span class="hljs-literal">True</span>,
    collate_fn=data_collator,
    batch_size=<span class="hljs-number">8</span>,
)
eval_dataloader = DataLoader(
    tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>], collate_fn=data_collator, batch_size=<span class="hljs-number">8</span>
)`,wrap:!1}}),ye=new C({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JUb2tlbkNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjBtb2RlbF9jaGVja3BvaW50JTJDJTBBJTIwJTIwJTIwJTIwaWQybGFiZWwlM0RpZDJsYWJlbCUyQyUwQSUyMCUyMCUyMCUyMGxhYmVsMmlkJTNEbGFiZWwyaWQlMkMlMEEp",highlighted:`model = AutoModelForTokenClassification.from_pretrained(
    model_checkpoint,
    id2label=id2label,
    label2id=label2id,
)`,wrap:!1}}),Le=new C({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}}),fe=new C({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQSUwQWFjY2VsZXJhdG9yJTIwJTNEJTIwQWNjZWxlcmF0b3IoKSUwQW1vZGVsJTJDJTIwb3B0aW1pemVyJTJDJTIwdHJhaW5fZGF0YWxvYWRlciUyQyUyMGV2YWxfZGF0YWxvYWRlciUyMCUzRCUyMGFjY2VsZXJhdG9yLnByZXBhcmUoJTBBJTIwJTIwJTIwJTIwbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMkMlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> Accelerator

accelerator = Accelerator()
model, optimizer, train_dataloader, eval_dataloader = accelerator.prepare(
    model, optimizer, train_dataloader, eval_dataloader
)`,wrap:!1}}),Oe=new ca({props:{$$slots:{default:[fn]},$$scope:{ctx:v}}}),ll=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fdHJhaW5fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV91cGRhdGVfc3RlcHNfcGVyX2Vwb2NoJTIwJTNEJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX3RyYWluX2Vwb2NocyUyMColMjBudW1fdXBkYXRlX3N0ZXBzX3Blcl9lcG9jaCUwQSUwQWxyX3NjaGVkdWxlciUyMCUzRCUyMGdldF9zY2hlZHVsZXIoJTBBJTIwJTIwJTIwJTIwJTIybGluZWFyJTIyJTJDJTBBJTIwJTIwJTIwJTIwb3B0aW1pemVyJTNEb3B0aW1pemVyJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3dhcm11cF9zdGVwcyUzRDAlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5pbmdfc3RlcHMlM0RudW1fdHJhaW5pbmdfc3RlcHMlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler

num_train_epochs = <span class="hljs-number">3</span>
num_update_steps_per_epoch = <span class="hljs-built_in">len</span>(train_dataloader)
num_training_steps = num_train_epochs * num_update_steps_per_epoch

lr_scheduler = get_scheduler(
    <span class="hljs-string">&quot;linear&quot;</span>,
    optimizer=optimizer,
    num_warmup_steps=<span class="hljs-number">0</span>,
    num_training_steps=num_training_steps,
)`,wrap:!1}}),Te=new C({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMFJlcG9zaXRvcnklMkMlMjBnZXRfZnVsbF9yZXBvX25hbWUlMEElMEFtb2RlbF9uYW1lJTIwJTNEJTIwJTIyYmVydC1maW5ldHVuZWQtbmVyLWFjY2VsZXJhdGUlMjIlMEFyZXBvX25hbWUlMjAlM0QlMjBnZXRfZnVsbF9yZXBvX25hbWUobW9kZWxfbmFtZSklMEFyZXBvX25hbWU=",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> Repository, get_full_repo_name

model_name = <span class="hljs-string">&quot;bert-finetuned-ner-accelerate&quot;</span>
repo_name = get_full_repo_name(model_name)
repo_name`,wrap:!1}}),be=new C({props:{code:"J3NndWdnZXIlMkZiZXJ0LWZpbmV0dW5lZC1uZXItYWNjZWxlcmF0ZSc=",highlighted:'<span class="hljs-string">&#x27;sgugger/bert-finetuned-ner-accelerate&#x27;</span>',wrap:!1}}),sl=new C({props:{code:"b3V0cHV0X2RpciUyMCUzRCUyMCUyMmJlcnQtZmluZXR1bmVkLW5lci1hY2NlbGVyYXRlJTIyJTBBcmVwbyUyMCUzRCUyMFJlcG9zaXRvcnkob3V0cHV0X2RpciUyQyUyMGNsb25lX2Zyb20lM0RyZXBvX25hbWUp",highlighted:`output_dir = <span class="hljs-string">&quot;bert-finetuned-ner-accelerate&quot;</span>
repo = Repository(output_dir, clone_from=repo_name)`,wrap:!1}}),rl=new ue({props:{title:"Loopul de antrenare",local:"training-loop",headingTag:"h3"}}),je=new C({props:{code:"ZGVmJTIwcG9zdHByb2Nlc3MocHJlZGljdGlvbnMlMkMlMjBsYWJlbHMpJTNBJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlMjAlM0QlMjBwcmVkaWN0aW9ucy5kZXRhY2goKS5jcHUoKS5jbG9uZSgpLm51bXB5KCklMEElMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBsYWJlbHMuZGV0YWNoKCkuY3B1KCkuY2xvbmUoKS5udW1weSgpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwUmVtb3ZlJTIwaWdub3JlZCUyMGluZGV4JTIwKHNwZWNpYWwlMjB0b2tlbnMpJTIwYW5kJTIwY29udmVydCUyMHRvJTIwbGFiZWxzJTBBJTIwJTIwJTIwJTIwdHJ1ZV9sYWJlbHMlMjAlM0QlMjAlNUIlNUJsYWJlbF9uYW1lcyU1QmwlNUQlMjBmb3IlMjBsJTIwaW4lMjBsYWJlbCUyMGlmJTIwbCUyMCElM0QlMjAtMTAwJTVEJTIwZm9yJTIwbGFiZWwlMjBpbiUyMGxhYmVscyU1RCUwQSUyMCUyMCUyMCUyMHRydWVfcHJlZGljdGlvbnMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUJsYWJlbF9uYW1lcyU1QnAlNUQlMjBmb3IlMjAocCUyQyUyMGwpJTIwaW4lMjB6aXAocHJlZGljdGlvbiUyQyUyMGxhYmVsKSUyMGlmJTIwbCUyMCElM0QlMjAtMTAwJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwcHJlZGljdGlvbiUyQyUyMGxhYmVsJTIwaW4lMjB6aXAocHJlZGljdGlvbnMlMkMlMjBsYWJlbHMpJTBBJTIwJTIwJTIwJTIwJTVEJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdHJ1ZV9sYWJlbHMlMkMlMjB0cnVlX3ByZWRpY3Rpb25z",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">postprocess</span>(<span class="hljs-params">predictions, labels</span>):
    predictions = predictions.detach().cpu().clone().numpy()
    labels = labels.detach().cpu().clone().numpy()

    <span class="hljs-comment"># Remove ignored index (special tokens) and convert to labels</span>
    true_labels = [[label_names[l] <span class="hljs-keyword">for</span> l <span class="hljs-keyword">in</span> label <span class="hljs-keyword">if</span> l != -<span class="hljs-number">100</span>] <span class="hljs-keyword">for</span> label <span class="hljs-keyword">in</span> labels]
    true_predictions = [
        [label_names[p] <span class="hljs-keyword">for</span> (p, l) <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(prediction, label) <span class="hljs-keyword">if</span> l != -<span class="hljs-number">100</span>]
        <span class="hljs-keyword">for</span> prediction, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(predictions, labels)
    ]
    <span class="hljs-keyword">return</span> true_labels, true_predictions`,wrap:!1}}),Hl=new C({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEFpbXBvcnQlMjB0b3JjaCUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFmb3IlMjBlcG9jaCUyMGluJTIwcmFuZ2UobnVtX3RyYWluX2Vwb2NocyklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBUcmFpbmluZyUwQSUyMCUyMCUyMCUyMG1vZGVsLnRyYWluKCklMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyMGluJTIwdHJhaW5fZGF0YWxvYWRlciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBvdXRwdXRzLmxvc3MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY2NlbGVyYXRvci5iYWNrd2FyZChsb3NzKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBscl9zY2hlZHVsZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnplcm9fZ3JhZCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvZ3Jlc3NfYmFyLnVwZGF0ZSgxKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEV2YWx1YXRpb24lMEElMjAlMjAlMjAlMjBtb2RlbC5ldmFsKCklMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyMGluJTIwZXZhbF9kYXRhbG9hZGVyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2l0aCUyMHRvcmNoLm5vX2dyYWQoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwb3V0cHV0cy5sb2dpdHMuYXJnbWF4KGRpbSUzRC0xKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMGJhdGNoJTVCJTIybGFiZWxzJTIyJTVEJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwTmVjZXNzYXJ5JTIwdG8lMjBwYWQlMjBwcmVkaWN0aW9ucyUyMGFuZCUyMGxhYmVscyUyMGZvciUyMGJlaW5nJTIwZ2F0aGVyZWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVkaWN0aW9ucyUyMCUzRCUyMGFjY2VsZXJhdG9yLnBhZF9hY3Jvc3NfcHJvY2Vzc2VzKHByZWRpY3Rpb25zJTJDJTIwZGltJTNEMSUyQyUyMHBhZF9pbmRleCUzRC0xMDApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwYWNjZWxlcmF0b3IucGFkX2Fjcm9zc19wcm9jZXNzZXMobGFiZWxzJTJDJTIwZGltJTNEMSUyQyUyMHBhZF9pbmRleCUzRC0xMDApJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJlZGljdGlvbnNfZ2F0aGVyZWQlMjAlM0QlMjBhY2NlbGVyYXRvci5nYXRoZXIocHJlZGljdGlvbnMpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzX2dhdGhlcmVkJTIwJTNEJTIwYWNjZWxlcmF0b3IuZ2F0aGVyKGxhYmVscyklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0cnVlX3ByZWRpY3Rpb25zJTJDJTIwdHJ1ZV9sYWJlbHMlMjAlM0QlMjBwb3N0cHJvY2VzcyhwcmVkaWN0aW9uc19nYXRoZXJlZCUyQyUyMGxhYmVsc19nYXRoZXJlZCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtZXRyaWMuYWRkX2JhdGNoKHByZWRpY3Rpb25zJTNEdHJ1ZV9wcmVkaWN0aW9ucyUyQyUyMHJlZmVyZW5jZXMlM0R0cnVlX2xhYmVscyklMEElMEElMjAlMjAlMjAlMjByZXN1bHRzJTIwJTNEJTIwbWV0cmljLmNvbXB1dGUoKSUwQSUyMCUyMCUyMCUyMHByaW50KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGYlMjJlcG9jaCUyMCU3QmVwb2NoJTdEJTNBJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwa2V5JTNBJTIwcmVzdWx0cyU1QmYlMjJvdmVyYWxsXyU3QmtleSU3RCUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGtleSUyMGluJTIwJTVCJTIycHJlY2lzaW9uJTIyJTJDJTIwJTIycmVjYWxsJTIyJTJDJTIwJTIyZjElMjIlMkMlMjAlMjJhY2N1cmFjeSUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUyQyUwQSUyMCUyMCUyMCUyMCklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTYXZlJTIwYW5kJTIwdXBsb2FkJTBBJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQSUyMCUyMCUyMCUyMHVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEElMjAlMjAlMjAlMjB1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSklMEElMjAlMjAlMjAlMjBpZiUyMGFjY2VsZXJhdG9yLmlzX21haW5fcHJvY2VzcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplci5zYXZlX3ByZXRyYWluZWQob3V0cHV0X2RpciklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvLnB1c2hfdG9faHViKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbW1pdF9tZXNzYWdlJTNEZiUyMlRyYWluaW5nJTIwaW4lMjBwcm9ncmVzcyUyMGVwb2NoJTIwJTdCZXBvY2glN0QlMjIlMkMlMjBibG9ja2luZyUzREZhbHNlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKQ==",highlighted:`<span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm
<span class="hljs-keyword">import</span> torch

progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))

<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_train_epochs):
    <span class="hljs-comment"># Training</span>
    model.train()
    <span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
        outputs = model(**batch)
        loss = outputs.loss
        accelerator.backward(loss)

        optimizer.step()
        lr_scheduler.step()
        optimizer.zero_grad()
        progress_bar.update(<span class="hljs-number">1</span>)

    <span class="hljs-comment"># Evaluation</span>
    model.<span class="hljs-built_in">eval</span>()
    <span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> eval_dataloader:
        <span class="hljs-keyword">with</span> torch.no_grad():
            outputs = model(**batch)

        predictions = outputs.logits.argmax(dim=-<span class="hljs-number">1</span>)
        labels = batch[<span class="hljs-string">&quot;labels&quot;</span>]

        <span class="hljs-comment"># Necessary to pad predictions and labels for being gathered</span>
        predictions = accelerator.pad_across_processes(predictions, dim=<span class="hljs-number">1</span>, pad_index=-<span class="hljs-number">100</span>)
        labels = accelerator.pad_across_processes(labels, dim=<span class="hljs-number">1</span>, pad_index=-<span class="hljs-number">100</span>)

        predictions_gathered = accelerator.gather(predictions)
        labels_gathered = accelerator.gather(labels)

        true_predictions, true_labels = postprocess(predictions_gathered, labels_gathered)
        metric.add_batch(predictions=true_predictions, references=true_labels)

    results = metric.compute()
    <span class="hljs-built_in">print</span>(
        <span class="hljs-string">f&quot;epoch <span class="hljs-subst">{epoch}</span>:&quot;</span>,
        {
            key: results[<span class="hljs-string">f&quot;overall_<span class="hljs-subst">{key}</span>&quot;</span>]
            <span class="hljs-keyword">for</span> key <span class="hljs-keyword">in</span> [<span class="hljs-string">&quot;precision&quot;</span>, <span class="hljs-string">&quot;recall&quot;</span>, <span class="hljs-string">&quot;f1&quot;</span>, <span class="hljs-string">&quot;accuracy&quot;</span>]
        },
    )

    <span class="hljs-comment"># Save and upload</span>
    accelerator.wait_for_everyone()
    unwrapped_model = accelerator.unwrap_model(model)
    unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save)
    <span class="hljs-keyword">if</span> accelerator.is_main_process:
        tokenizer.save_pretrained(output_dir)
        repo.push_to_hub(
            commit_message=<span class="hljs-string">f&quot;Training in progress epoch <span class="hljs-subst">{epoch}</span>&quot;</span>, blocking=<span class="hljs-literal">False</span>
        )`,wrap:!1}}),dl=new C({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(){y(r.$$.fragment),j=n(),p=m("p"),p.innerHTML=U,_=n(),h=m("p"),h.innerHTML=k,Z=n(),y(w.$$.fragment),A=n(),x=m("p"),x.innerHTML=I,W=n(),y(g.$$.fragment),Q=n(),X=m("p"),X.innerHTML=ve,Be=n(),y(E.$$.fragment),ne=n(),y(H.$$.fragment),ie=n(),y(le.$$.fragment),he=n(),y(B.$$.fragment),Ge=n(),N=m("p"),N.innerHTML=oe,Ve=n(),y(F.$$.fragment),re=n(),ae=m("p"),ae.textContent=vl,pe=n(),S=m("p"),S.textContent=_e,ze=n(),y(D.$$.fragment),te=n(),L=m("p"),L.innerHTML=xe,Ce=n(),y(G.$$.fragment),Re=n(),q=m("p"),q.innerHTML=Ze,Ie=n(),y(V.$$.fragment),_l=n(),ce=m("p"),ce.innerHTML=se,$e=n(),y(z.$$.fragment),Ye=n(),P=m("p"),P.textContent=Ae,ge=n(),R=m("p"),R.innerHTML=na,ke=n(),y(Y.$$.fragment),Qe=n(),O=m("p"),O.textContent=c,$=n(),y(xl.$$.fragment),Dl=n(),Me=m("p"),Me.innerHTML=ua,Xe=n(),Ee=m("p"),Ee.textContent=Zl,oa=n(),y(He.$$.fragment),Ne=n(),Fe=m("p"),Fe.innerHTML=Al,Ll=n(),y(me.$$.fragment),Ma=n(),Se=m("p"),Se.innerHTML=Wl,ql=n(),y(de.$$.fragment),Pl=n(),Je=m("p"),Je.textContent=ft,Ol=n(),y(ye.$$.fragment),ma=n(),De=m("p"),De.innerHTML=Bl,da=n(),y(Le.$$.fragment),qe=n(),Pe=m("p"),Pe.innerHTML=Gl,Kl=n(),y(fe.$$.fragment),Ja=n(),y(Oe.$$.fragment),Ke=n(),el=m("p"),el.innerHTML=Vl,ya=n(),y(ll.$$.fragment),We=n(),al=m("p"),al.innerHTML=zl,ea=n(),y(Te.$$.fragment),la=n(),y(be.$$.fragment),fa=n(),tl=m("p"),tl.textContent=Rl,Ta=n(),y(sl.$$.fragment),nl=n(),il=m("p"),il.innerHTML=Yl,ba=n(),y(rl.$$.fragment),pl=n(),cl=m("p"),cl.innerHTML=Ql,aa=n(),y(je.$$.fragment),ja=n(),ul=m("p"),ul.textContent=Xl,ta=n(),we=m("ul"),we.innerHTML=wa,ol=n(),El=m("p"),El.textContent=Ua,Ml=n(),y(Hl.$$.fragment),sa=n(),Ue=m("p"),Ue.textContent=ha,ml=n(),y(dl.$$.fragment),Jl=n(),Nl=m("p"),Nl.innerHTML=Ca,yl=n(),fl=m("p"),fl.innerHTML=Fl},l(l){f(r.$$.fragment,l),j=i(l),p=d(l,"P",{"data-svelte-h":!0}),J(p)!=="svelte-12gm8a1"&&(p.innerHTML=U),_=i(l),h=d(l,"P",{"data-svelte-h":!0}),J(h)!=="svelte-m6e466"&&(h.innerHTML=k),Z=i(l),f(w.$$.fragment,l),A=i(l),x=d(l,"P",{"data-svelte-h":!0}),J(x)!=="svelte-18nvctp"&&(x.innerHTML=I),W=i(l),f(g.$$.fragment,l),Q=i(l),X=d(l,"P",{"data-svelte-h":!0}),J(X)!=="svelte-1cswnjk"&&(X.innerHTML=ve),Be=i(l),f(E.$$.fragment,l),ne=i(l),f(H.$$.fragment,l),ie=i(l),f(le.$$.fragment,l),he=i(l),f(B.$$.fragment,l),Ge=i(l),N=d(l,"P",{"data-svelte-h":!0}),J(N)!=="svelte-8b4w8n"&&(N.innerHTML=oe),Ve=i(l),f(F.$$.fragment,l),re=i(l),ae=d(l,"P",{"data-svelte-h":!0}),J(ae)!=="svelte-i33qye"&&(ae.textContent=vl),pe=i(l),S=d(l,"P",{"data-svelte-h":!0}),J(S)!=="svelte-fhjhmt"&&(S.textContent=_e),ze=i(l),f(D.$$.fragment,l),te=i(l),L=d(l,"P",{"data-svelte-h":!0}),J(L)!=="svelte-1hweile"&&(L.innerHTML=xe),Ce=i(l),f(G.$$.fragment,l),Re=i(l),q=d(l,"P",{"data-svelte-h":!0}),J(q)!=="svelte-ac20qp"&&(q.innerHTML=Ze),Ie=i(l),f(V.$$.fragment,l),_l=i(l),ce=d(l,"P",{"data-svelte-h":!0}),J(ce)!=="svelte-nhfggc"&&(ce.innerHTML=se),$e=i(l),f(z.$$.fragment,l),Ye=i(l),P=d(l,"P",{"data-svelte-h":!0}),J(P)!=="svelte-z5wfqv"&&(P.textContent=Ae),ge=i(l),R=d(l,"P",{"data-svelte-h":!0}),J(R)!=="svelte-zshepi"&&(R.innerHTML=na),ke=i(l),f(Y.$$.fragment,l),Qe=i(l),O=d(l,"P",{"data-svelte-h":!0}),J(O)!=="svelte-1s03p2"&&(O.textContent=c),$=i(l),f(xl.$$.fragment,l),Dl=i(l),Me=d(l,"P",{"data-svelte-h":!0}),J(Me)!=="svelte-1cltpa1"&&(Me.innerHTML=ua),Xe=i(l),Ee=d(l,"P",{"data-svelte-h":!0}),J(Ee)!=="svelte-dqqlvn"&&(Ee.textContent=Zl),oa=i(l),f(He.$$.fragment,l),Ne=i(l),Fe=d(l,"P",{"data-svelte-h":!0}),J(Fe)!=="svelte-lbvpyf"&&(Fe.innerHTML=Al),Ll=i(l),f(me.$$.fragment,l),Ma=i(l),Se=d(l,"P",{"data-svelte-h":!0}),J(Se)!=="svelte-aut5so"&&(Se.innerHTML=Wl),ql=i(l),f(de.$$.fragment,l),Pl=i(l),Je=d(l,"P",{"data-svelte-h":!0}),J(Je)!=="svelte-1i49gnc"&&(Je.textContent=ft),Ol=i(l),f(ye.$$.fragment,l),ma=i(l),De=d(l,"P",{"data-svelte-h":!0}),J(De)!=="svelte-18tkmnf"&&(De.innerHTML=Bl),da=i(l),f(Le.$$.fragment,l),qe=i(l),Pe=d(l,"P",{"data-svelte-h":!0}),J(Pe)!=="svelte-6dkqxg"&&(Pe.innerHTML=Gl),Kl=i(l),f(fe.$$.fragment,l),Ja=i(l),f(Oe.$$.fragment,l),Ke=i(l),el=d(l,"P",{"data-svelte-h":!0}),J(el)!=="svelte-mhrm85"&&(el.innerHTML=Vl),ya=i(l),f(ll.$$.fragment,l),We=i(l),al=d(l,"P",{"data-svelte-h":!0}),J(al)!=="svelte-1ke12il"&&(al.innerHTML=zl),ea=i(l),f(Te.$$.fragment,l),la=i(l),f(be.$$.fragment,l),fa=i(l),tl=d(l,"P",{"data-svelte-h":!0}),J(tl)!=="svelte-1pms8dw"&&(tl.textContent=Rl),Ta=i(l),f(sl.$$.fragment,l),nl=i(l),il=d(l,"P",{"data-svelte-h":!0}),J(il)!=="svelte-1wk5dqw"&&(il.innerHTML=Yl),ba=i(l),f(rl.$$.fragment,l),pl=i(l),cl=d(l,"P",{"data-svelte-h":!0}),J(cl)!=="svelte-1xihqkl"&&(cl.innerHTML=Ql),aa=i(l),f(je.$$.fragment,l),ja=i(l),ul=d(l,"P",{"data-svelte-h":!0}),J(ul)!=="svelte-8gz10g"&&(ul.textContent=Xl),ta=i(l),we=d(l,"UL",{"data-svelte-h":!0}),J(we)!=="svelte-1lrrgek"&&(we.innerHTML=wa),ol=i(l),El=d(l,"P",{"data-svelte-h":!0}),J(El)!=="svelte-1halqwm"&&(El.textContent=Ua),Ml=i(l),f(Hl.$$.fragment,l),sa=i(l),Ue=d(l,"P",{"data-svelte-h":!0}),J(Ue)!=="svelte-155hsmd"&&(Ue.textContent=ha),ml=i(l),f(dl.$$.fragment,l),Jl=i(l),Nl=d(l,"P",{"data-svelte-h":!0}),J(Nl)!=="svelte-spfwoc"&&(Nl.innerHTML=Ca),yl=i(l),fl=d(l,"P",{"data-svelte-h":!0}),J(fl)!=="svelte-ofl4kk"&&(fl.innerHTML=Fl)},m(l,u){T(r,l,u),t(l,j,u),t(l,p,u),t(l,_,u),t(l,h,u),t(l,Z,u),T(w,l,u),t(l,A,u),t(l,x,u),t(l,W,u),T(g,l,u),t(l,Q,u),t(l,X,u),t(l,Be,u),T(E,l,u),t(l,ne,u),T(H,l,u),t(l,ie,u),T(le,l,u),t(l,he,u),T(B,l,u),t(l,Ge,u),t(l,N,u),t(l,Ve,u),T(F,l,u),t(l,re,u),t(l,ae,u),t(l,pe,u),t(l,S,u),t(l,ze,u),T(D,l,u),t(l,te,u),t(l,L,u),t(l,Ce,u),T(G,l,u),t(l,Re,u),t(l,q,u),t(l,Ie,u),T(V,l,u),t(l,_l,u),t(l,ce,u),t(l,$e,u),T(z,l,u),t(l,Ye,u),t(l,P,u),t(l,ge,u),t(l,R,u),t(l,ke,u),T(Y,l,u),t(l,Qe,u),t(l,O,u),t(l,$,u),T(xl,l,u),t(l,Dl,u),t(l,Me,u),t(l,Xe,u),t(l,Ee,u),t(l,oa,u),T(He,l,u),t(l,Ne,u),t(l,Fe,u),t(l,Ll,u),T(me,l,u),t(l,Ma,u),t(l,Se,u),t(l,ql,u),T(de,l,u),t(l,Pl,u),t(l,Je,u),t(l,Ol,u),T(ye,l,u),t(l,ma,u),t(l,De,u),t(l,da,u),T(Le,l,u),t(l,qe,u),t(l,Pe,u),t(l,Kl,u),T(fe,l,u),t(l,Ja,u),T(Oe,l,u),t(l,Ke,u),t(l,el,u),t(l,ya,u),T(ll,l,u),t(l,We,u),t(l,al,u),t(l,ea,u),T(Te,l,u),t(l,la,u),T(be,l,u),t(l,fa,u),t(l,tl,u),t(l,Ta,u),T(sl,l,u),t(l,nl,u),t(l,il,u),t(l,ba,u),T(rl,l,u),t(l,pl,u),t(l,cl,u),t(l,aa,u),T(je,l,u),t(l,ja,u),t(l,ul,u),t(l,ta,u),t(l,we,u),t(l,ol,u),t(l,El,u),t(l,Ml,u),T(Hl,l,u),t(l,sa,u),t(l,Ue,u),t(l,ml,u),T(dl,l,u),t(l,Jl,u),t(l,Nl,u),t(l,yl,u),t(l,fl,u),Ia=!0},i(l){Ia||(o(r.$$.fragment,l),o(w.$$.fragment,l),o(g.$$.fragment,l),o(E.$$.fragment,l),o(H.$$.fragment,l),o(le.$$.fragment,l),o(B.$$.fragment,l),o(F.$$.fragment,l),o(D.$$.fragment,l),o(G.$$.fragment,l),o(V.$$.fragment,l),o(z.$$.fragment,l),o(Y.$$.fragment,l),o(xl.$$.fragment,l),o(He.$$.fragment,l),o(me.$$.fragment,l),o(de.$$.fragment,l),o(ye.$$.fragment,l),o(Le.$$.fragment,l),o(fe.$$.fragment,l),o(Oe.$$.fragment,l),o(ll.$$.fragment,l),o(Te.$$.fragment,l),o(be.$$.fragment,l),o(sl.$$.fragment,l),o(rl.$$.fragment,l),o(je.$$.fragment,l),o(Hl.$$.fragment,l),o(dl.$$.fragment,l),Ia=!0)},o(l){M(r.$$.fragment,l),M(w.$$.fragment,l),M(g.$$.fragment,l),M(E.$$.fragment,l),M(H.$$.fragment,l),M(le.$$.fragment,l),M(B.$$.fragment,l),M(F.$$.fragment,l),M(D.$$.fragment,l),M(G.$$.fragment,l),M(V.$$.fragment,l),M(z.$$.fragment,l),M(Y.$$.fragment,l),M(xl.$$.fragment,l),M(He.$$.fragment,l),M(me.$$.fragment,l),M(de.$$.fragment,l),M(ye.$$.fragment,l),M(Le.$$.fragment,l),M(fe.$$.fragment,l),M(Oe.$$.fragment,l),M(ll.$$.fragment,l),M(Te.$$.fragment,l),M(be.$$.fragment,l),M(sl.$$.fragment,l),M(rl.$$.fragment,l),M(je.$$.fragment,l),M(Hl.$$.fragment,l),M(dl.$$.fragment,l),Ia=!1},d(l){l&&(a(j),a(p),a(_),a(h),a(Z),a(A),a(x),a(W),a(Q),a(X),a(Be),a(ne),a(ie),a(he),a(Ge),a(N),a(Ve),a(re),a(ae),a(pe),a(S),a(ze),a(te),a(L),a(Ce),a(Re),a(q),a(Ie),a(_l),a(ce),a($e),a(Ye),a(P),a(ge),a(R),a(ke),a(Qe),a(O),a($),a(Dl),a(Me),a(Xe),a(Ee),a(oa),a(Ne),a(Fe),a(Ll),a(Ma),a(Se),a(ql),a(Pl),a(Je),a(Ol),a(ma),a(De),a(da),a(qe),a(Pe),a(Kl),a(Ja),a(Ke),a(el),a(ya),a(We),a(al),a(ea),a(la),a(fa),a(tl),a(Ta),a(nl),a(il),a(ba),a(pl),a(cl),a(aa),a(ja),a(ul),a(ta),a(we),a(ol),a(El),a(Ml),a(sa),a(Ue),a(ml),a(Jl),a(Nl),a(yl),a(fl)),b(r,l),b(w,l),b(g,l),b(E,l),b(H,l),b(le,l),b(B,l),b(F,l),b(D,l),b(G,l),b(V,l),b(z,l),b(Y,l),b(xl,l),b(He,l),b(me,l),b(de,l),b(ye,l),b(Le,l),b(fe,l),b(Oe,l),b(ll,l),b(Te,l),b(be,l),b(sl,l),b(rl,l),b(je,l),b(Hl,l),b(dl,l)}}}function Jn(v){let r,j="⚠️ Dacă aveți un model cu un număr greșit de labeluri, veți primi o eroare obscură atunci când apelați metoda <code>Trainer.train()</code> mai târziu (ceva de genul “CUDA error: device-side assert triggered”). Aceasta este cauza numărul unu a erorilor raportate de utilizatori pentru astfel de erori, așa că asigurați-vă că faceți această verificare pentru a confirma că aveți numărul de labeluri așteptat.";return{c(){r=m("p"),r.innerHTML=j},l(p){r=d(p,"P",{"data-svelte-h":!0}),J(r)!=="svelte-19nswjr"&&(r.innerHTML=j)},m(p,U){t(p,r,U)},p:Sl,d(p){p&&a(r)}}}function yn(v){let r,j="💡 Dacă output directory-ul pe care îl utilizați există deja, acesta trebuie să fie o clonă locală a repositoriul către care doriți să faceți push. Dacă nu este așa, veți primi o eroare la definirea <code>Trainer</code> și va trebui să setați un nume nou.";return{c(){r=m("p"),r.innerHTML=j},l(p){r=d(p,"P",{"data-svelte-h":!0}),J(r)!=="svelte-c0raz5"&&(r.innerHTML=j)},m(p,U){t(p,r,U)},p:Sl,d(p){p&&a(r)}}}function fn(v){let r,j='🚨 Dacă vă antrenați pe un TPU, va trebui să mutați tot codul începând de la celula de mai sus într-o funcție de antrenament dedicată. Consultați <a href="/course/chapter3">Capitolul 3</a> pentru mai multe detalii.';return{c(){r=m("p"),r.innerHTML=j},l(p){r=d(p,"P",{"data-svelte-h":!0}),J(r)!=="svelte-m0im9q"&&(r.innerHTML=j)},m(p,U){t(p,r,U)},p:Sl,d(p){p&&a(r)}}}function Tn(v){let r,j,p,U,_,h,k,Z,w,A,x,I,W,g,Q="Prima aplicație pe care o vom explora este clasificarea tokenilor. Această sarcină generică cuprinde orice problemă care poate fi formulată ca “atribuirea unui label fiecărui token dintr-o propoziție”, cum ar fi:",X,ve,Be="<li><strong>Named entity recognition(NER)</strong>: Găsirea entităților (cum ar fi persoane, locații sau organizații) într-o propoziție. Acest lucru poate fi formulat ca atribuirea unui label fiecărui token, având o clasă pentru fiecare entitate și o clasă pentru “nicio entitate”.</li> <li><strong>Part-of-speech tagging (POS)</strong>: Marchează fiecare cuvânt dintr-o propoziție ca corespunzând unei anumite părți de vorbire (cum ar fi substantiv, verb, adjectiv etc.).</li> <li><strong>Chunking</strong>: Găsirea tokenilor care aparțin aceleiași entități. Această sarcină (care poate fi combinată cu POS sau NER) poate fi formulată ca atribuirea unui label (de obicei <code>B-</code>) tuturor tokenilor care se află la începutul unui chunk, a unui alt label (de obicei <code>I-</code>) la tokeni care se află în interiorul unui chunk și a unui al treilea label (de obicei <code>O</code>) la tokeni care nu aparțin niciunui chunk.</li>",E,ne,H,ie,le="Desigur, există multe alte tipuri de probleme de clasificare a tokenilor; acestea sunt doar câteva exemple reprezentative. În această secțiune, vom pune la punct un model (BERT) pe o sarcină NER, care va fi apoi capabil să calculeze predicții precum aceasta:",he,B,Ge,N,oe,Ve='<img class="block dark:hidden lg:w-3/5" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/model-eval-bert-finetuned-ner.png" alt="One-hot encoding labels pentru răspunderea la întrebări."/> <img class="hidden dark:block lg:w-3/5" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/model-eval-bert-finetuned-ner-dark.png" alt="One-hot encoded labels pentru răspunderea la întrebări."/>',F,re,ae='Puteți găsi modelul pe care îl vom antrena și încărca în Hub și puteți verifica de două ori predicțiile sale <a href="https://huggingface.co/huggingface-course/bert-finetuned-ner?text=My+name+is+Sylvain+and+I+work+at+Hugging+Face+in+Brooklyn" rel="nofollow">aici</a>.',vl,pe,S,_e,ze='În primul rând, avem nevoie de un dataset adecvat pentru clasificarea simbolurilor. În această secțiune vom utiliza [datasetul CoNLL-2003] (<a href="https://huggingface.co/datasets/conll2003" rel="nofollow">https://huggingface.co/datasets/conll2003</a>), care conține știri de la Reuters.',D,te,L,xe,Ce,G,Re="Pentru a încărca datasetul CoNLL-2003, folosim metoda <code>load_dataset()</code> din biblioteca 🤗 Datasets:",q,Ze,Ie,V,_l='Acest lucru va descărca și va stoca în cache datasetul, așa cum am văzut în <a href="/course/chapter3">Capitolul 3</a> pentru setul de date GLUE MRPC. Inspectarea acestui obiect ne arată coloanele prezente și împărțirea între seturile de antrenare, validare și testare:',ce,se,$e,z,Ye,P,Ae="În special, putem vedea că datasetul conține labeluri pentru cele trei sarcini pe care le-am menționat mai devreme: NER, POS și Chunking. O mare diferență față de alte datseturi este că textele de intrare nu sunt prezentate ca propoziții sau documente, ci ca liste de cuvinte (ultima coloană se numește <code>tokens</code>, dar conține cuvinte în sensul că acestea sunt inputuri pre-tokenizate care mai trebuie să treacă prin tokenizer pentru tokenizarea subcuvintelor).",ge,R,na="Să aruncăm o privire la primul element al setului de formare:",ke,Y,Qe,O,c,$,xl="Deoarece dorim să efectuăm named entity recognition, ne vom uita la etichetele NER:",Dl,Me,ua,Xe,Ee,Zl,oa="Acestea sunt labelurile ca numere întregi pregătite pentru antrenare, dar nu sunt neapărat utile atunci când dorim să inspectăm datele. La fel ca în cazul clasificării textului, putem accesa corespondența dintre aceste numere întregi și numele labelurilor consultând atributul <code>features</code> al datasetului nostru:",He,Ne,Fe,Al,Ll,me,Ma="Deci, această coloană conține elemente care sunt secvențe a <code>ClassLabel</code>. Tipul elementelor din secvență se află în atributul <code>feature</code> al acestei <code>ner_feature</code>, iar noi putem accesa lista de nume consultând atributul <code>names</code> al acelei <code>feature</code>:",Se,Wl,ql,de,Pl,Je,ft='Am văzut deja aceste labeluri atunci când am cercetat pipelineul <code>token-classification</code> în <a href="/course/chapter6/3">Capitolul 6</a>, dar pentru o reîmprospătare rapidă:',Ol,ye,ma="<li><code>O</code> înseamnă că cuvântul nu corespunde niciunei entități.</li> <li><code>B-PER</code>/<code>I-PER</code> înseamnă că cuvântul corespunde începutului/este în interiorul unei entități de tip <em>persoană</em>.</li> <li><code>B-ORG</code>/<code>I-ORG</code> înseamnă că cuvântul corespunde începutului/este în interiorul unei entități de tip <em>organizaționale</em>.</li> <li><code>B-LOC</code>/<code>I-LOC</code> înseamnă că cuvântul corespunde începutului/este în interiorul unei entități de tip  <em>locație</em>.</li> <li><code>B-MISC</code>/<code>I-MISC</code> înseamnă că cuvântul corespunde începutului/este în interiorul unei entități de tip *miscellaneous.</li>",De,Bl,da="Acum, decodificarea labelurilor pe care le-am văzut mai devreme ne dă următorul rezultat:",Le,qe,Pe,Gl,Kl,fe,Ja="Și pentru un exemplu de amestecare a labelurilor <code>B-</code> și <code>I-</code>, iată ce ne oferă același cod pentru elementul din setul de antrenare de la indexul 4:",Oe,Ke,el,Vl,ya="După cum putem vedea, entităților care cuprind două cuvinte, precum “Uniunea Europeană” și “Werner Zwingmann”, li se atribuie un label <code>B-</code> pentru primul cuvânt și un label <code>I-</code> pentru al doilea.",ll,We,al,zl,ea,Te,la,be,fa='Ca de obicei, textele noastre trebuie să fie convertite în ID-uri token înainte ca modelul să le poată înțelege. După cum am văzut în <a href="/course/chapter6/">Capitolul 6</a>, o mare diferență în cazul sarcinilor de clasificare a tokenilor este că avem inputuri pre-tokenizate. Din fericire, API-ul tokenizerului poate face față acestei situații destul de ușor; trebuie doar să avertizăm <code>tokenizerul</code> cu un indicator special.',tl,Rl,Ta="Pentru început, hai să creăm obiectul <code>tokenizer</code>. După cum am mai spus, vom utiliza un model BERT preantrenat, deci vom începe prin a descărca și a stoca în cache tokenizerul asociat:",sl,nl,il,Yl,ba='Puteți înlocui <code>model_checkpoint</code> cu orice alt model preferat din <a href="https://huggingface.co/models" rel="nofollow">Hub</a> sau cu un folder local în care ați salvat un model preantreant și un tokenizer. Singura constrângere este că tokenizerul trebuie să fie susținut de biblioteca 🤗 Tokenizers, pentru ca să existe o versiune “rapidă” disponibilă. 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>:',rl,pl,cl,Ql,aa,je,ja="Pentru a tokeniza un input pre-tokenizat, putem utiliza <code>tokenizer</code> ca de obicei și să adăugăm <code>is_split_into_words=True</code>:",ul,Xl,ta,we,wa,ol,El="După cum putem vedea, tokenizerul a adăugat tokenii speciali utilizați de model (<code>[CLS]</code> la început și <code>[SEP]</code> la sfârșit) și a lăsat majoritatea cuvintelor neatinse. Cu toate acestea, cuvântul <code>lamb</code> a fost tokenizat în două subcuvinte, <code>la</code> și <code>##mb</code>. Acest lucru introduce o neconcordanță între inputurile noastre și labeluri: lista de labeluri are doar 9 elemente, în timp ce inputurile noastre au acum 12 tokeni. Să luăm în considerare tokenii speciali este ușor (știm că sunt la început și la sfârșit), dar trebuie să ne asigurăm că aliniem toate labelurile cu cuvintele corespunzătoare.",Ua,Ml,Hl='Din fericire, pentru că folosim un tokenizer rapid, avem acces la superputerile 🤗 Tokenizers, ceea ce înseamnă că putem mapa cu ușurință fiecare token la cuvântul corespunzător (după cum se vede în <a href="/course/chapter6/3">Capitolul 6</a>):',sa,Ue,ha,ml,dl,Jl,Nl="Cu puțină muncă, putem apoi extinde lista de labeluri pentru a se potrivi cu tokenii. Prima regulă pe care o vom aplica este că tokenii special primesc un label <code>-100</code>. Acest lucru se datorează faptului că în mod implicit <code>-100</code> este un indice care este ignorat în funcția de pierdere pe care o vom utiliza (cross-entropy). Apoi, fiecare token primește același label ca și tokenul care a inițiat cuvântul în care se află, deoarece fac parte din aceeași entitate. Pentru tokenii din interiorul unui cuvânt, dar care nu se află la început, înlocuim <code>B-</code> cu <code>I-</code> (deoarece tokenul nu începe entitatea):",Ca,yl,fl,Fl,Ia="Hai să îl încercăm cu prima noastră propoziție:",l,u,bt,$a,jt,ga,rs="După cum putem vedea, funcția noastră a adăugat <code>-100</code> pentru cei doi tokeni speciali de la început și de la sfârșit, și un nou <code>0</code> pentru cuvântul nostru care a fost împărțit în doi tokeni.",wt,ia,Ut,ka,ps="Pentru a preprocesa întregul nostru dataset, trebuie să tokenizăm toate inputurile și să aplicăm <code>align_labels_with_tokens()</code> pe toate labelurile. Pentru a profita de viteza tokenizerului nostru rapid, este mai bine să tokenizăm multe texte în același timp, așa că vom scrie o funcție care procesează o listă de exemple și vom folosi metoda <code>Dataset.map()</code> cu opțiunea <code>batched=True</code>. Singurul lucru diferit față de exemplul nostru anterior este că funcția <code>word_ids()</code> trebuie să obțină indexul exemplului din care dorim ID-urile cuvintelor atunci când inputurile către tokenizer sunt liste de texte (sau, în cazul nostru, liste de liste de cuvinte), așa că adăugăm și acest lucru:",ht,va,Ct,_a,cs="Rețineți că nu am completat încă inputurile; vom face acest lucru mai târziu, atunci când vom crea batchurile cu un data collator.",It,xa,us="Acum putem aplica toate aceste preprocesări dintr-o dată celorlalte fracțiuni ale datasetului nostru:",$t,Za,gt,Aa,os='Am făcut partea cea mai grea! Acum, că datele au fost preprocesate, antrenarea efectivă va semăna mult cu ceea ce am făcut în <a href="/course/chapter3">Capitolul 3</a>.',kt,Tl,bl,ut,Wa,vt,Ba,Ms='Nu putem folosi doar un <code>DataCollatorWithPadding</code> ca în <a href="/course/chapter3">Capitolul 3</a> deoarece acesta doar adaugă padding inputurilor(input IDs, attention mask, and token type IDs). Aici labelurile noastre ar trebui să fie padded exact în același mod ca și inputurile, astfel încât să rămână de aceeași dimensiune, folosind <code>-100</code> ca valoare, astfel încât predicțiile corespunzătoare să fie ignorate în calculul pierderilor.',_t,Ga,ms='Toate acestea sunt realizate de un <a href="https://huggingface.co/transformers/main_classes/data_collator.html#datacollatorfortokenclassification" rel="nofollow"><code>DataCollatorForTokenClassification</code></a>. La fel ca <code>DataCollatorWithPadding</code>, acesta ia <code>tokenizer</code>-ul folosit pentru preprocesarea inputurilor:',xt,jl,wl,ot,Va,ds="Pentru a testa acest lucru pe câteva sampleuri, îl putem apela doar pe o listă de exemple din setul nostru de antrenat tokenizat:",Zt,za,At,Ra,Wt,Ya,Js="Hai să comparăm acest lucru cu labelurile pentru primul și al doilea element din datasetul nostru:",Bt,Qa,Gt,Xa,Vt,Ul,hl,Mt,mt,Ea,zt,Cl,Il,dt,Ha,Rt,Na,ys="Această metrică nu se comportă ca precizia standard: de fapt, va lua listele de labeluri ca șiruri de caractere, nu ca numere întregi, deci va trebui să decodificăm complet predicțiile și labelurile înainte de a le trece în metrice. Să vedem cum funcționează. În primul rând, vom obține labelurile pentru primul nostru exemplu de antrenare:",Yt,Fa,Qt,Sa,Xt,Da,fs="Putem apoi crea predicții false pentru acestea prin simpla schimbare a valorii la indexul 2:",Et,La,Ht,qa,Ts="Rețineți că metrica ia o listă de predicții (nu doar una) și o listă de labels. Iată rezultatul:",Nt,Pa,Ft,$l,gl,Jt,yt,Oa,St,Ka,bs="V-am arătat deja cum puteți utiliza modelul pe care l-am ajustat pe Model Hub cu inference widget. Pentru a-l utiliza la nivel local într-un <code>pipeline</code>, trebuie doar să specificați identificatorul de model corespunzător:",Dt,et,Lt,lt,qt,at,js="Grozav! Modelul nostru funcționează la fel de bine ca cel implicit pentru aceast pipeline!",Pt,tt,Ot,Tt,Kt;_=new qs({props:{fw:v[0]}}),k=new Ds({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),w=new ue({props:{title:"Clasificarea tokenilor",local:"token-classification",headingTag:"h1"}});const ws=[Os,Ps],st=[];function Us(e,s){return e[0]==="pt"?0:1}x=Us(v),I=st[x]=ws[x](v),ne=new Vs({props:{id:"wVHdVlPScxA"}}),pe=new ue({props:{title:"Pregătirea datelor",local:"preparing-the-data",headingTag:"h2"}}),te=new ca({props:{$$slots:{default:[Ks]},$$scope:{ctx:v}}}),xe=new ue({props:{title:"Datasetul CoNLL-2003",local:"the-conll-2003-dataset",headingTag:"h3"}}),Ze=new C({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBcmF3X2RhdGFzZXRzJTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMmNvbmxsMjAwMyUyMik=",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

raw_datasets = load_dataset(<span class="hljs-string">&quot;conll2003&quot;</span>)`,wrap:!1}}),se=new C({props:{code:"cmF3X2RhdGFzZXRz",highlighted:"raw_datasets",wrap:!1}}),z=new C({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2NodW5rX3RhZ3MnJTJDJTIwJ2lkJyUyQyUyMCduZXJfdGFncyclMkMlMjAncG9zX3RhZ3MnJTJDJTIwJ3Rva2VucyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE0MDQxJTBBJTIwJTIwJTIwJTIwJTdEKSUwQSUyMCUyMCUyMCUyMHZhbGlkYXRpb24lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2NodW5rX3RhZ3MnJTJDJTIwJ2lkJyUyQyUyMCduZXJfdGFncyclMkMlMjAncG9zX3RhZ3MnJTJDJTIwJ3Rva2VucyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDMyNTAlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTIwJTIwJTIwJTIwdGVzdCUzQSUyMERhdGFzZXQoJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmVhdHVyZXMlM0ElMjAlNUInY2h1bmtfdGFncyclMkMlMjAnaWQnJTJDJTIwJ25lcl90YWdzJyUyQyUyMCdwb3NfdGFncyclMkMlMjAndG9rZW5zJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMzQ1MyUwQSUyMCUyMCUyMCUyMCU3RCklMEElN0Qp",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;chunk_tags&#x27;</span>, <span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;ner_tags&#x27;</span>, <span class="hljs-string">&#x27;pos_tags&#x27;</span>, <span class="hljs-string">&#x27;tokens&#x27;</span>],
        num_rows: <span class="hljs-number">14041</span>
    })
    validation: Dataset({
        features: [<span class="hljs-string">&#x27;chunk_tags&#x27;</span>, <span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;ner_tags&#x27;</span>, <span class="hljs-string">&#x27;pos_tags&#x27;</span>, <span class="hljs-string">&#x27;tokens&#x27;</span>],
        num_rows: <span class="hljs-number">3250</span>
    })
    test: Dataset({
        features: [<span class="hljs-string">&#x27;chunk_tags&#x27;</span>, <span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;ner_tags&#x27;</span>, <span class="hljs-string">&#x27;pos_tags&#x27;</span>, <span class="hljs-string">&#x27;tokens&#x27;</span>],
        num_rows: <span class="hljs-number">3453</span>
    })
})`,wrap:!1}}),Y=new C({props:{code:"cmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIwJTVEJTVCJTIydG9rZW5zJTIyJTVE",highlighted:'raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;tokens&quot;</span>]',wrap:!1}}),O=new C({props:{code:"JTVCJ0VVJyUyQyUyMCdyZWplY3RzJyUyQyUyMCdHZXJtYW4nJTJDJTIwJ2NhbGwnJTJDJTIwJ3RvJyUyQyUyMCdib3ljb3R0JyUyQyUyMCdCcml0aXNoJyUyQyUyMCdsYW1iJyUyQyUyMCcuJyU1RA==",highlighted:'[<span class="hljs-string">&#x27;EU&#x27;</span>, <span class="hljs-string">&#x27;rejects&#x27;</span>, <span class="hljs-string">&#x27;German&#x27;</span>, <span class="hljs-string">&#x27;call&#x27;</span>, <span class="hljs-string">&#x27;to&#x27;</span>, <span class="hljs-string">&#x27;boycott&#x27;</span>, <span class="hljs-string">&#x27;British&#x27;</span>, <span class="hljs-string">&#x27;lamb&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>]',wrap:!1}}),Me=new C({props:{code:"cmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIwJTVEJTVCJTIybmVyX3RhZ3MlMjIlNUQ=",highlighted:'raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;ner_tags&quot;</span>]',wrap:!1}}),Xe=new C({props:{code:"JTVCMyUyQyUyMDAlMkMlMjA3JTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwNyUyQyUyMDAlMkMlMjAwJTVE",highlighted:'[<span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]',wrap:!1}}),Ne=new C({props:{code:"bmVyX2ZlYXR1cmUlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC5mZWF0dXJlcyU1QiUyMm5lcl90YWdzJTIyJTVEJTBBbmVyX2ZlYXR1cmU=",highlighted:`ner_feature = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>].features[<span class="hljs-string">&quot;ner_tags&quot;</span>]
ner_feature`,wrap:!1}}),Al=new C({props:{code:"U2VxdWVuY2UoZmVhdHVyZSUzRENsYXNzTGFiZWwobnVtX2NsYXNzZXMlM0Q5JTJDJTIwbmFtZXMlM0QlNUInTyclMkMlMjAnQi1QRVInJTJDJTIwJ0ktUEVSJyUyQyUyMCdCLU9SRyclMkMlMjAnSS1PUkcnJTJDJTIwJ0ItTE9DJyUyQyUyMCdJLUxPQyclMkMlMjAnQi1NSVNDJyUyQyUyMCdJLU1JU0MnJTVEJTJDJTIwbmFtZXNfZmlsZSUzRE5vbmUlMkMlMjBpZCUzRE5vbmUpJTJDJTIwbGVuZ3RoJTNELTElMkMlMjBpZCUzRE5vbmUp",highlighted:'<span class="hljs-type">Sequence</span>(feature=ClassLabel(num_classes=<span class="hljs-number">9</span>, names=[<span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;B-PER&#x27;</span>, <span class="hljs-string">&#x27;I-PER&#x27;</span>, <span class="hljs-string">&#x27;B-ORG&#x27;</span>, <span class="hljs-string">&#x27;I-ORG&#x27;</span>, <span class="hljs-string">&#x27;B-LOC&#x27;</span>, <span class="hljs-string">&#x27;I-LOC&#x27;</span>, <span class="hljs-string">&#x27;B-MISC&#x27;</span>, <span class="hljs-string">&#x27;I-MISC&#x27;</span>], names_file=<span class="hljs-literal">None</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>), length=-<span class="hljs-number">1</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>)',wrap:!1}}),Wl=new C({props:{code:"bGFiZWxfbmFtZXMlMjAlM0QlMjBuZXJfZmVhdHVyZS5mZWF0dXJlLm5hbWVzJTBBbGFiZWxfbmFtZXM=",highlighted:`label_names = ner_feature.feature.names
label_names`,wrap:!1}}),de=new C({props:{code:"JTVCJ08nJTJDJTIwJ0ItUEVSJyUyQyUyMCdJLVBFUiclMkMlMjAnQi1PUkcnJTJDJTIwJ0ktT1JHJyUyQyUyMCdCLUxPQyclMkMlMjAnSS1MT0MnJTJDJTIwJ0ItTUlTQyclMkMlMjAnSS1NSVNDJyU1RA==",highlighted:'[<span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;B-PER&#x27;</span>, <span class="hljs-string">&#x27;I-PER&#x27;</span>, <span class="hljs-string">&#x27;B-ORG&#x27;</span>, <span class="hljs-string">&#x27;I-ORG&#x27;</span>, <span class="hljs-string">&#x27;B-LOC&#x27;</span>, <span class="hljs-string">&#x27;I-LOC&#x27;</span>, <span class="hljs-string">&#x27;B-MISC&#x27;</span>, <span class="hljs-string">&#x27;I-MISC&#x27;</span>]',wrap:!1}}),qe=new C({props:{code:"d29yZHMlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjAlNUQlNUIlMjJ0b2tlbnMlMjIlNUQlMEFsYWJlbHMlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjAlNUQlNUIlMjJuZXJfdGFncyUyMiU1RCUwQWxpbmUxJTIwJTNEJTIwJTIyJTIyJTBBbGluZTIlMjAlM0QlMjAlMjIlMjIlMEFmb3IlMjB3b3JkJTJDJTIwbGFiZWwlMjBpbiUyMHppcCh3b3JkcyUyQyUyMGxhYmVscyklM0ElMEElMjAlMjAlMjAlMjBmdWxsX2xhYmVsJTIwJTNEJTIwbGFiZWxfbmFtZXMlNUJsYWJlbCU1RCUwQSUyMCUyMCUyMCUyMG1heF9sZW5ndGglMjAlM0QlMjBtYXgobGVuKHdvcmQpJTJDJTIwbGVuKGZ1bGxfbGFiZWwpKSUwQSUyMCUyMCUyMCUyMGxpbmUxJTIwJTJCJTNEJTIwd29yZCUyMCUyQiUyMCUyMiUyMCUyMiUyMColMjAobWF4X2xlbmd0aCUyMC0lMjBsZW4od29yZCklMjAlMkIlMjAxKSUwQSUyMCUyMCUyMCUyMGxpbmUyJTIwJTJCJTNEJTIwZnVsbF9sYWJlbCUyMCUyQiUyMCUyMiUyMCUyMiUyMColMjAobWF4X2xlbmd0aCUyMC0lMjBsZW4oZnVsbF9sYWJlbCklMjAlMkIlMjAxKSUwQSUwQXByaW50KGxpbmUxKSUwQXByaW50KGxpbmUyKQ==",highlighted:`words = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;tokens&quot;</span>]
labels = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;ner_tags&quot;</span>]
line1 = <span class="hljs-string">&quot;&quot;</span>
line2 = <span class="hljs-string">&quot;&quot;</span>
<span class="hljs-keyword">for</span> word, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(words, labels):
    full_label = label_names[label]
    max_length = <span class="hljs-built_in">max</span>(<span class="hljs-built_in">len</span>(word), <span class="hljs-built_in">len</span>(full_label))
    line1 += word + <span class="hljs-string">&quot; &quot;</span> * (max_length - <span class="hljs-built_in">len</span>(word) + <span class="hljs-number">1</span>)
    line2 += full_label + <span class="hljs-string">&quot; &quot;</span> * (max_length - <span class="hljs-built_in">len</span>(full_label) + <span class="hljs-number">1</span>)

<span class="hljs-built_in">print</span>(line1)
<span class="hljs-built_in">print</span>(line2)`,wrap:!1}}),Gl=new C({props:{code:"J0VVJTIwJTIwJTIwJTIwcmVqZWN0cyUyMEdlcm1hbiUyMGNhbGwlMjB0byUyMGJveWNvdHQlMjBCcml0aXNoJTIwbGFtYiUyMC4nJTBBJ0ItT1JHJTIwTyUyMCUyMCUyMCUyMCUyMCUyMCUyMEItTUlTQyUyME8lMjAlMjAlMjAlMjBPJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyMCUyMEItTUlTQyUyMCUyME8lMjAlMjAlMjAlMjBPJw==",highlighted:`<span class="hljs-string">&#x27;EU    rejects German call to boycott British lamb .&#x27;</span>
<span class="hljs-string">&#x27;B-ORG O       B-MISC O    O  O       B-MISC  O    O&#x27;</span>`,wrap:!1}}),Ke=new C({props:{code:"J0dlcm1hbnklMjAlNUMncyUyMHJlcHJlc2VudGF0aXZlJTIwdG8lMjB0aGUlMjBFdXJvcGVhbiUyMFVuaW9uJTIwJTVDJ3MlMjB2ZXRlcmluYXJ5JTIwY29tbWl0dGVlJTIwV2VybmVyJTIwWndpbmdtYW5uJTIwc2FpZCUyMG9uJTIwV2VkbmVzZGF5JTIwY29uc3VtZXJzJTIwc2hvdWxkJTIwYnV5JTIwc2hlZXBtZWF0JTIwZnJvbSUyMGNvdW50cmllcyUyMG90aGVyJTIwdGhhbiUyMEJyaXRhaW4lMjB1bnRpbCUyMHRoZSUyMHNjaWVudGlmaWMlMjBhZHZpY2UlMjB3YXMlMjBjbGVhcmVyJTIwLiclMEEnQi1MT0MlMjAlMjAlMjBPJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME8lMjAlMjBPJTIwJTIwJTIwQi1PUkclMjAlMjAlMjAlMjBJLU9SRyUyME8lMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEItUEVSJTIwJTIwSS1QRVIlMjAlMjAlMjAlMjAlMjBPJTIwJTIwJTIwJTIwTyUyMCUyME8lMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyME8lMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyME8lMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyMEItTE9DJTIwJTIwJTIwTyUyMCUyMCUyMCUyMCUyME8lMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyME8lMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyc=",highlighted:`<span class="hljs-string">&#x27;Germany \\&#x27;s representative to the European Union \\&#x27;s veterinary committee Werner Zwingmann said on Wednesday consumers should buy sheepmeat from countries other than Britain until the scientific advice was clearer .&#x27;</span>
<span class="hljs-string">&#x27;B-LOC   O  O              O  O   B-ORG    I-ORG O  O          O         B-PER  I-PER     O    O  O         O         O      O   O         O    O         O     O    B-LOC   O     O   O          O      O   O       O&#x27;</span>`,wrap:!1}}),We=new ca({props:{$$slots:{default:[en]},$$scope:{ctx:v}}}),zl=new ue({props:{title:"Procesarea datelor",local:"processing-the-data",headingTag:"h3"}}),Te=new Vs({props:{id:"iY2AZYdZAr0"}}),nl=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLWNhc2VkJTIyJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

model_checkpoint = <span class="hljs-string">&quot;bert-base-cased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)`,wrap:!1}}),pl=new C({props:{code:"dG9rZW5pemVyLmlzX2Zhc3Q=",highlighted:"tokenizer.is_fast",wrap:!1}}),Ql=new C({props:{code:"VHJ1ZQ==",highlighted:'<span class="hljs-literal">True</span>',wrap:!1}}),Xl=new C({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMCU1RCU1QiUyMnRva2VucyUyMiU1RCUyQyUyMGlzX3NwbGl0X2ludG9fd29yZHMlM0RUcnVlKSUwQWlucHV0cy50b2tlbnMoKQ==",highlighted:`inputs = tokenizer(raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;tokens&quot;</span>], is_split_into_words=<span class="hljs-literal">True</span>)
inputs.tokens()`,wrap:!1}}),we=new C({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAnRVUnJTJDJTIwJ3JlamVjdHMnJTJDJTIwJ0dlcm1hbiclMkMlMjAnY2FsbCclMkMlMjAndG8nJTJDJTIwJ2JveWNvdHQnJTJDJTIwJ0JyaXRpc2gnJTJDJTIwJ2xhJyUyQyUyMCclMjMlMjNtYiclMkMlMjAnLiclMkMlMjAnJTVCU0VQJTVEJyU1RA==",highlighted:'[<span class="hljs-string">&#x27;[CLS]&#x27;</span>, <span class="hljs-string">&#x27;EU&#x27;</span>, <span class="hljs-string">&#x27;rejects&#x27;</span>, <span class="hljs-string">&#x27;German&#x27;</span>, <span class="hljs-string">&#x27;call&#x27;</span>, <span class="hljs-string">&#x27;to&#x27;</span>, <span class="hljs-string">&#x27;boycott&#x27;</span>, <span class="hljs-string">&#x27;British&#x27;</span>, <span class="hljs-string">&#x27;la&#x27;</span>, <span class="hljs-string">&#x27;##mb&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>]',wrap:!1}}),Ue=new C({props:{code:"aW5wdXRzLndvcmRfaWRzKCk=",highlighted:"inputs.word_ids()",wrap:!1}}),ml=new C({props:{code:"JTVCTm9uZSUyQyUyMDAlMkMlMjAxJTJDJTIwMiUyQyUyMDMlMkMlMjA0JTJDJTIwNSUyQyUyMDYlMkMlMjA3JTJDJTIwNyUyQyUyMDglMkMlMjBOb25lJTVE",highlighted:'[<span class="hljs-literal">None</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">7</span>, <span class="hljs-number">8</span>, <span class="hljs-literal">None</span>]',wrap:!1}}),yl=new C({props:{code:"ZGVmJTIwYWxpZ25fbGFiZWxzX3dpdGhfdG9rZW5zKGxhYmVscyUyQyUyMHdvcmRfaWRzKSUzQSUwQSUyMCUyMCUyMCUyMG5ld19sYWJlbHMlMjAlM0QlMjAlNUIlNUQlMEElMjAlMjAlMjAlMjBjdXJyZW50X3dvcmQlMjAlM0QlMjBOb25lJTBBJTIwJTIwJTIwJTIwZm9yJTIwd29yZF9pZCUyMGluJTIwd29yZF9pZHMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHdvcmRfaWQlMjAhJTNEJTIwY3VycmVudF93b3JkJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU3RhcnQlMjBvZiUyMGElMjBuZXclMjB3b3JkISUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGN1cnJlbnRfd29yZCUyMCUzRCUyMHdvcmRfaWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbCUyMCUzRCUyMC0xMDAlMjBpZiUyMHdvcmRfaWQlMjBpcyUyME5vbmUlMjBlbHNlJTIwbGFiZWxzJTVCd29yZF9pZCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG5ld19sYWJlbHMuYXBwZW5kKGxhYmVsKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVsaWYlMjB3b3JkX2lkJTIwaXMlMjBOb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU3BlY2lhbCUyMHRva2VuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmV3X2xhYmVscy5hcHBlbmQoLTEwMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU2FtZSUyMHdvcmQlMjBhcyUyMHByZXZpb3VzJTIwdG9rZW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbCUyMCUzRCUyMGxhYmVscyU1QndvcmRfaWQlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBJZiUyMHRoZSUyMGxhYmVsJTIwaXMlMjBCLVhYWCUyMHdlJTIwY2hhbmdlJTIwaXQlMjB0byUyMEktWFhYJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsYWJlbCUyMCUyNSUyMDIlMjAlM0QlM0QlMjAxJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWwlMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmV3X2xhYmVscy5hcHBlbmQobGFiZWwpJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwbmV3X2xhYmVscw==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">align_labels_with_tokens</span>(<span class="hljs-params">labels, word_ids</span>):
    new_labels = []
    current_word = <span class="hljs-literal">None</span>
    <span class="hljs-keyword">for</span> word_id <span class="hljs-keyword">in</span> word_ids:
        <span class="hljs-keyword">if</span> word_id != current_word:
            <span class="hljs-comment"># Start of a new word!</span>
            current_word = word_id
            label = -<span class="hljs-number">100</span> <span class="hljs-keyword">if</span> word_id <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">else</span> labels[word_id]
            new_labels.append(label)
        <span class="hljs-keyword">elif</span> word_id <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
            <span class="hljs-comment"># Special token</span>
            new_labels.append(-<span class="hljs-number">100</span>)
        <span class="hljs-keyword">else</span>:
            <span class="hljs-comment"># Same word as previous token</span>
            label = labels[word_id]
            <span class="hljs-comment"># If the label is B-XXX we change it to I-XXX</span>
            <span class="hljs-keyword">if</span> label % <span class="hljs-number">2</span> == <span class="hljs-number">1</span>:
                label += <span class="hljs-number">1</span>
            new_labels.append(label)

    <span class="hljs-keyword">return</span> new_labels`,wrap:!1}}),u=new C({props:{code:"bGFiZWxzJTIwJTNEJTIwcmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIwJTVEJTVCJTIybmVyX3RhZ3MlMjIlNUQlMEF3b3JkX2lkcyUyMCUzRCUyMGlucHV0cy53b3JkX2lkcygpJTBBcHJpbnQobGFiZWxzKSUwQXByaW50KGFsaWduX2xhYmVsc193aXRoX3Rva2VucyhsYWJlbHMlMkMlMjB3b3JkX2lkcykp",highlighted:`labels = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;ner_tags&quot;</span>]
word_ids = inputs.word_ids()
<span class="hljs-built_in">print</span>(labels)
<span class="hljs-built_in">print</span>(align_labels_with_tokens(labels, word_ids))`,wrap:!1}}),$a=new C({props:{code:"JTVCMyUyQyUyMDAlMkMlMjA3JTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwNyUyQyUyMDAlMkMlMjAwJTVEJTBBJTVCLTEwMCUyQyUyMDMlMkMlMjAwJTJDJTIwNyUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDclMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAtMTAwJTVE",highlighted:`[<span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]
[-<span class="hljs-number">100</span>, <span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">100</span>]`,wrap:!1}}),ia=new ca({props:{$$slots:{default:[ln]},$$scope:{ctx:v}}}),va=new C({props:{code:"ZGVmJTIwdG9rZW5pemVfYW5kX2FsaWduX2xhYmVscyhleGFtcGxlcyklM0ElMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfaW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4YW1wbGVzJTVCJTIydG9rZW5zJTIyJTVEJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjBpc19zcGxpdF9pbnRvX3dvcmRzJTNEVHJ1ZSUwQSUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjBhbGxfbGFiZWxzJTIwJTNEJTIwZXhhbXBsZXMlNUIlMjJuZXJfdGFncyUyMiU1RCUwQSUyMCUyMCUyMCUyMG5ld19sYWJlbHMlMjAlM0QlMjAlNUIlNUQlMEElMjAlMjAlMjAlMjBmb3IlMjBpJTJDJTIwbGFiZWxzJTIwaW4lMjBlbnVtZXJhdGUoYWxsX2xhYmVscyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3b3JkX2lkcyUyMCUzRCUyMHRva2VuaXplZF9pbnB1dHMud29yZF9pZHMoaSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBuZXdfbGFiZWxzLmFwcGVuZChhbGlnbl9sYWJlbHNfd2l0aF90b2tlbnMobGFiZWxzJTJDJTIwd29yZF9pZHMpKSUwQSUwQSUyMCUyMCUyMCUyMHRva2VuaXplZF9pbnB1dHMlNUIlMjJsYWJlbHMlMjIlNUQlMjAlM0QlMjBuZXdfbGFiZWxzJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9rZW5pemVkX2lucHV0cw==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_and_align_labels</span>(<span class="hljs-params">examples</span>):
    tokenized_inputs = tokenizer(
        examples[<span class="hljs-string">&quot;tokens&quot;</span>], truncation=<span class="hljs-literal">True</span>, is_split_into_words=<span class="hljs-literal">True</span>
    )
    all_labels = examples[<span class="hljs-string">&quot;ner_tags&quot;</span>]
    new_labels = []
    <span class="hljs-keyword">for</span> i, labels <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(all_labels):
        word_ids = tokenized_inputs.word_ids(i)
        new_labels.append(align_labels_with_tokens(labels, word_ids))

    tokenized_inputs[<span class="hljs-string">&quot;labels&quot;</span>] = new_labels
    <span class="hljs-keyword">return</span> tokenized_inputs`,wrap:!1}}),Za=new C({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZV9hbmRfYWxpZ25fbGFiZWxzJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hlZCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZW1vdmVfY29sdW1ucyUzRHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELmNvbHVtbl9uYW1lcyUyQyUwQSk=",highlighted:`tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(
    tokenize_and_align_labels,
    batched=<span class="hljs-literal">True</span>,
    remove_columns=raw_datasets[<span class="hljs-string">&quot;train&quot;</span>].column_names,
)`,wrap:!1}});const hs=[tn,an],nt=[];function Cs(e,s){return e[0]==="pt"?0:1}Tl=Cs(v),bl=nt[Tl]=hs[Tl](v),Wa=new ue({props:{title:"Data collation",local:"data-collation",headingTag:"h3"}});const Is=[nn,sn],it=[];function $s(e,s){return e[0]==="pt"?0:1}jl=$s(v),wl=it[jl]=Is[jl](v),za=new C({props:{code:"YmF0Y2glMjAlM0QlMjBkYXRhX2NvbGxhdG9yKCU1QnRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCaSU1RCUyMGZvciUyMGklMjBpbiUyMHJhbmdlKDIpJTVEKSUwQWJhdGNoJTVCJTIybGFiZWxzJTIyJTVE",highlighted:`batch = data_collator([tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">2</span>)])
batch[<span class="hljs-string">&quot;labels&quot;</span>]`,wrap:!1}}),Ra=new C({props:{code:"dGVuc29yKCU1QiU1Qi0xMDAlMkMlMjAlMjAlMjAlMjAzJTJDJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMDclMkMlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjA3JTJDJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAwJTJDJTIwLTEwMCU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1Qi0xMDAlMkMlMjAlMjAlMjAlMjAxJTJDJTIwJTIwJTIwJTIwMiUyQyUyMC0xMDAlMkMlMjAtMTAwJTJDJTIwLTEwMCUyQyUyMC0xMDAlMkMlMjAtMTAwJTJDJTIwLTEwMCUyQyUyMC0xMDAlMkMlMjAtMTAwJTJDJTIwLTEwMCU1RCU1RCk=",highlighted:`tensor([[-<span class="hljs-number">100</span>,    <span class="hljs-number">3</span>,    <span class="hljs-number">0</span>,    <span class="hljs-number">7</span>,    <span class="hljs-number">0</span>,    <span class="hljs-number">0</span>,    <span class="hljs-number">0</span>,    <span class="hljs-number">7</span>,    <span class="hljs-number">0</span>,    <span class="hljs-number">0</span>,    <span class="hljs-number">0</span>, -<span class="hljs-number">100</span>],
        [-<span class="hljs-number">100</span>,    <span class="hljs-number">1</span>,    <span class="hljs-number">2</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>]])`,wrap:!1}}),Qa=new C({props:{code:"Zm9yJTIwaSUyMGluJTIwcmFuZ2UoMiklM0ElMEElMjAlMjAlMjAlMjBwcmludCh0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QmklNUQlNUIlMjJsYWJlbHMlMjIlNUQp",highlighted:`<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">2</span>):
    <span class="hljs-built_in">print</span>(tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][i][<span class="hljs-string">&quot;labels&quot;</span>])`,wrap:!1}}),Xa=new C({props:{code:"JTVCLTEwMCUyQyUyMDMlMkMlMjAwJTJDJTIwNyUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDclMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAtMTAwJTVEJTBBJTVCLTEwMCUyQyUyMDElMkMlMjAyJTJDJTIwLTEwMCU1RA==",highlighted:`[-<span class="hljs-number">100</span>, <span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">100</span>]
[-<span class="hljs-number">100</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, -<span class="hljs-number">100</span>]`,wrap:!1}});const gs=[pn,rn],rt=[];function ks(e,s){return e[0]==="pt"?0:1}Ul=ks(v),hl=rt[Ul]=gs[Ul](v);let K=v[0]==="tf"&&zs(v);Ea=new ue({props:{title:"Metrici",local:"metrics",headingTag:"h3"}});const vs=[Mn,on],pt=[];function _s(e,s){return e[0]==="pt"?0:1}Cl=_s(v),Il=pt[Cl]=vs[Cl](v),Ha=new C({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMnNlcWV2YWwlMjIp",highlighted:`<span class="hljs-keyword">import</span> evaluate

metric = evaluate.load(<span class="hljs-string">&quot;seqeval&quot;</span>)`,wrap:!1}}),Fa=new C({props:{code:"bGFiZWxzJTIwJTNEJTIwcmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIwJTVEJTVCJTIybmVyX3RhZ3MlMjIlNUQlMEFsYWJlbHMlMjAlM0QlMjAlNUJsYWJlbF9uYW1lcyU1QmklNUQlMjBmb3IlMjBpJTIwaW4lMjBsYWJlbHMlNUQlMEFsYWJlbHM=",highlighted:`labels = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;ner_tags&quot;</span>]
labels = [label_names[i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> labels]
labels`,wrap:!1}}),Sa=new C({props:{code:"JTVCJ0ItT1JHJyUyQyUyMCdPJyUyQyUyMCdCLU1JU0MnJTJDJTIwJ08nJTJDJTIwJ08nJTJDJTIwJ08nJTJDJTIwJ0ItTUlTQyclMkMlMjAnTyclMkMlMjAnTyclNUQ=",highlighted:'[<span class="hljs-string">&#x27;B-ORG&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;B-MISC&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;B-MISC&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>]',wrap:!1}}),La=new C({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjBsYWJlbHMuY29weSgpJTBBcHJlZGljdGlvbnMlNUIyJTVEJTIwJTNEJTIwJTIyTyUyMiUwQW1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEJTVCcHJlZGljdGlvbnMlNUQlMkMlMjByZWZlcmVuY2VzJTNEJTVCbGFiZWxzJTVEKQ==",highlighted:`predictions = labels.copy()
predictions[<span class="hljs-number">2</span>] = <span class="hljs-string">&quot;O&quot;</span>
metric.compute(predictions=[predictions], references=[labels])`,wrap:!1}}),Pa=new C({props:{code:"JTdCJ01JU0MnJTNBJTIwJTdCJ3ByZWNpc2lvbiclM0ElMjAxLjAlMkMlMjAncmVjYWxsJyUzQSUyMDAuNSUyQyUyMCdmMSclM0ElMjAwLjY3JTJDJTIwJ251bWJlciclM0ElMjAyJTdEJTJDJTBBJTIwJ09SRyclM0ElMjAlN0IncHJlY2lzaW9uJyUzQSUyMDEuMCUyQyUyMCdyZWNhbGwnJTNBJTIwMS4wJTJDJTIwJ2YxJyUzQSUyMDEuMCUyQyUyMCdudW1iZXInJTNBJTIwMSU3RCUyQyUwQSUyMCdvdmVyYWxsX3ByZWNpc2lvbiclM0ElMjAxLjAlMkMlMEElMjAnb3ZlcmFsbF9yZWNhbGwnJTNBJTIwMC42NyUyQyUwQSUyMCdvdmVyYWxsX2YxJyUzQSUyMDAuOCUyQyUwQSUyMCdvdmVyYWxsX2FjY3VyYWN5JyUzQSUyMDAuODklN0Q=",highlighted:`{<span class="hljs-string">&#x27;MISC&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">1.0</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.5</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.67</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">2</span>},
 <span class="hljs-string">&#x27;ORG&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">1.0</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">1.0</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">1.0</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">1</span>},
 <span class="hljs-string">&#x27;overall_precision&#x27;</span>: <span class="hljs-number">1.0</span>,
 <span class="hljs-string">&#x27;overall_recall&#x27;</span>: <span class="hljs-number">0.67</span>,
 <span class="hljs-string">&#x27;overall_f1&#x27;</span>: <span class="hljs-number">0.8</span>,
 <span class="hljs-string">&#x27;overall_accuracy&#x27;</span>: <span class="hljs-number">0.89</span>}`,wrap:!1}});const xs=[dn,mn],ct=[];function Zs(e,s){return e[0]==="pt"?0:1}$l=Zs(v),gl=ct[$l]=xs[$l](v);let ee=v[0]==="pt"&&Rs(v);return Oa=new ue({props:{title:"Utilizarea model fine-tuned",local:"using-the-fine-tuned-model",headingTag:"h2"}}),et=new C({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBJTIzJTIwUmVwbGFjZSUyMHRoaXMlMjB3aXRoJTIweW91ciUyMG93biUyMGNoZWNrcG9pbnQlMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIyaHVnZ2luZ2ZhY2UtY291cnNlJTJGYmVydC1maW5ldHVuZWQtbmVyJTIyJTBBdG9rZW5fY2xhc3NpZmllciUyMCUzRCUyMHBpcGVsaW5lKCUwQSUyMCUyMCUyMCUyMCUyMnRva2VuLWNsYXNzaWZpY2F0aW9uJTIyJTJDJTIwbW9kZWwlM0Rtb2RlbF9jaGVja3BvaW50JTJDJTIwYWdncmVnYXRpb25fc3RyYXRlZ3klM0QlMjJzaW1wbGUlMjIlMEEpJTBBdG9rZW5fY2xhc3NpZmllciglMjJNeSUyMG5hbWUlMjBpcyUyMFN5bHZhaW4lMjBhbmQlMjBJJTIwd29yayUyMGF0JTIwSHVnZ2luZyUyMEZhY2UlMjBpbiUyMEJyb29rbHluLiUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

<span class="hljs-comment"># Replace this with your own checkpoint</span>
model_checkpoint = <span class="hljs-string">&quot;huggingface-course/bert-finetuned-ner&quot;</span>
token_classifier = pipeline(
    <span class="hljs-string">&quot;token-classification&quot;</span>, model=model_checkpoint, aggregation_strategy=<span class="hljs-string">&quot;simple&quot;</span>
)
token_classifier(<span class="hljs-string">&quot;My name is Sylvain and I work at Hugging Face in Brooklyn.&quot;</span>)`,wrap:!1}}),lt=new C({props:{code:"JTVCJTdCJ2VudGl0eV9ncm91cCclM0ElMjAnUEVSJyUyQyUyMCdzY29yZSclM0ElMjAwLjk5ODg1MDYlMkMlMjAnd29yZCclM0ElMjAnU3lsdmFpbiclMkMlMjAnc3RhcnQnJTNBJTIwMTElMkMlMjAnZW5kJyUzQSUyMDE4JTdEJTJDJTBBJTIwJTdCJ2VudGl0eV9ncm91cCclM0ElMjAnT1JHJyUyQyUyMCdzY29yZSclM0ElMjAwLjk2NDc2MjUlMkMlMjAnd29yZCclM0ElMjAnSHVnZ2luZyUyMEZhY2UnJTJDJTIwJ3N0YXJ0JyUzQSUyMDMzJTJDJTIwJ2VuZCclM0ElMjA0NSU3RCUyQyUwQSUyMCU3QidlbnRpdHlfZ3JvdXAnJTNBJTIwJ0xPQyclMkMlMjAnc2NvcmUnJTNBJTIwMC45OTg2MTE4JTJDJTIwJ3dvcmQnJTNBJTIwJ0Jyb29rbHluJyUyQyUyMCdzdGFydCclM0ElMjA0OSUyQyUyMCdlbmQnJTNBJTIwNTclN0QlNUQ=",highlighted:`[{<span class="hljs-string">&#x27;entity_group&#x27;</span>: <span class="hljs-string">&#x27;PER&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9988506</span>, <span class="hljs-string">&#x27;word&#x27;</span>: <span class="hljs-string">&#x27;Sylvain&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">11</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">18</span>},
 {<span class="hljs-string">&#x27;entity_group&#x27;</span>: <span class="hljs-string">&#x27;ORG&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9647625</span>, <span class="hljs-string">&#x27;word&#x27;</span>: <span class="hljs-string">&#x27;Hugging Face&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">33</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">45</span>},
 {<span class="hljs-string">&#x27;entity_group&#x27;</span>: <span class="hljs-string">&#x27;LOC&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9986118</span>, <span class="hljs-string">&#x27;word&#x27;</span>: <span class="hljs-string">&#x27;Brooklyn&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">49</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">57</span>}]`,wrap:!1}}),tt=new Ls({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ro/chapter7/2.mdx"}}),{c(){r=m("meta"),j=n(),p=m("p"),U=n(),y(_.$$.fragment),h=n(),y(k.$$.fragment),Z=n(),y(w.$$.fragment),A=n(),I.c(),W=n(),g=m("p"),g.textContent=Q,X=n(),ve=m("ul"),ve.innerHTML=Be,E=n(),y(ne.$$.fragment),H=n(),ie=m("p"),ie.textContent=le,he=n(),B=m("iframe"),N=n(),oe=m("a"),oe.innerHTML=Ve,F=n(),re=m("p"),re.innerHTML=ae,vl=n(),y(pe.$$.fragment),S=n(),_e=m("p"),_e.innerHTML=ze,D=n(),y(te.$$.fragment),L=n(),y(xe.$$.fragment),Ce=n(),G=m("p"),G.innerHTML=Re,q=n(),y(Ze.$$.fragment),Ie=n(),V=m("p"),V.innerHTML=_l,ce=n(),y(se.$$.fragment),$e=n(),y(z.$$.fragment),Ye=n(),P=m("p"),P.innerHTML=Ae,ge=n(),R=m("p"),R.textContent=na,ke=n(),y(Y.$$.fragment),Qe=n(),y(O.$$.fragment),c=n(),$=m("p"),$.textContent=xl,Dl=n(),y(Me.$$.fragment),ua=n(),y(Xe.$$.fragment),Ee=n(),Zl=m("p"),Zl.innerHTML=oa,He=n(),y(Ne.$$.fragment),Fe=n(),y(Al.$$.fragment),Ll=n(),me=m("p"),me.innerHTML=Ma,Se=n(),y(Wl.$$.fragment),ql=n(),y(de.$$.fragment),Pl=n(),Je=m("p"),Je.innerHTML=ft,Ol=n(),ye=m("ul"),ye.innerHTML=ma,De=n(),Bl=m("p"),Bl.textContent=da,Le=n(),y(qe.$$.fragment),Pe=n(),y(Gl.$$.fragment),Kl=n(),fe=m("p"),fe.innerHTML=Ja,Oe=n(),y(Ke.$$.fragment),el=n(),Vl=m("p"),Vl.innerHTML=ya,ll=n(),y(We.$$.fragment),al=n(),y(zl.$$.fragment),ea=n(),y(Te.$$.fragment),la=n(),be=m("p"),be.innerHTML=fa,tl=n(),Rl=m("p"),Rl.innerHTML=Ta,sl=n(),y(nl.$$.fragment),il=n(),Yl=m("p"),Yl.innerHTML=ba,rl=n(),y(pl.$$.fragment),cl=n(),y(Ql.$$.fragment),aa=n(),je=m("p"),je.innerHTML=ja,ul=n(),y(Xl.$$.fragment),ta=n(),y(we.$$.fragment),wa=n(),ol=m("p"),ol.innerHTML=El,Ua=n(),Ml=m("p"),Ml.innerHTML=Hl,sa=n(),y(Ue.$$.fragment),ha=n(),y(ml.$$.fragment),dl=n(),Jl=m("p"),Jl.innerHTML=Nl,Ca=n(),y(yl.$$.fragment),fl=n(),Fl=m("p"),Fl.textContent=Ia,l=n(),y(u.$$.fragment),bt=n(),y($a.$$.fragment),jt=n(),ga=m("p"),ga.innerHTML=rs,wt=n(),y(ia.$$.fragment),Ut=n(),ka=m("p"),ka.innerHTML=ps,ht=n(),y(va.$$.fragment),Ct=n(),_a=m("p"),_a.textContent=cs,It=n(),xa=m("p"),xa.textContent=us,$t=n(),y(Za.$$.fragment),gt=n(),Aa=m("p"),Aa.innerHTML=os,kt=n(),bl.c(),ut=n(),y(Wa.$$.fragment),vt=n(),Ba=m("p"),Ba.innerHTML=Ms,_t=n(),Ga=m("p"),Ga.innerHTML=ms,xt=n(),wl.c(),ot=n(),Va=m("p"),Va.textContent=ds,Zt=n(),y(za.$$.fragment),At=n(),y(Ra.$$.fragment),Wt=n(),Ya=m("p"),Ya.textContent=Js,Bt=n(),y(Qa.$$.fragment),Gt=n(),y(Xa.$$.fragment),Vt=n(),hl.c(),Mt=n(),K&&K.c(),mt=n(),y(Ea.$$.fragment),zt=n(),Il.c(),dt=n(),y(Ha.$$.fragment),Rt=n(),Na=m("p"),Na.textContent=ys,Yt=n(),y(Fa.$$.fragment),Qt=n(),y(Sa.$$.fragment),Xt=n(),Da=m("p"),Da.textContent=fs,Et=n(),y(La.$$.fragment),Ht=n(),qa=m("p"),qa.textContent=Ts,Nt=n(),y(Pa.$$.fragment),Ft=n(),gl.c(),Jt=n(),ee&&ee.c(),yt=n(),y(Oa.$$.fragment),St=n(),Ka=m("p"),Ka.innerHTML=bs,Dt=n(),y(et.$$.fragment),Lt=n(),y(lt.$$.fragment),qt=n(),at=m("p"),at.textContent=js,Pt=n(),y(tt.$$.fragment),Ot=n(),Tt=m("p"),this.h()},l(e){const s=Fs("svelte-u9bgzb",document.head);r=d(s,"META",{name:!0,content:!0}),s.forEach(a),j=i(e),p=d(e,"P",{}),is(p).forEach(a),U=i(e),f(_.$$.fragment,e),h=i(e),f(k.$$.fragment,e),Z=i(e),f(w.$$.fragment,e),A=i(e),I.l(e),W=i(e),g=d(e,"P",{"data-svelte-h":!0}),J(g)!=="svelte-e3t8pz"&&(g.textContent=Q),X=i(e),ve=d(e,"UL",{"data-svelte-h":!0}),J(ve)!=="svelte-1bj813b"&&(ve.innerHTML=Be),E=i(e),f(ne.$$.fragment,e),H=i(e),ie=d(e,"P",{"data-svelte-h":!0}),J(ie)!=="svelte-os5tmx"&&(ie.textContent=le),he=i(e),B=d(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),is(B).forEach(a),N=i(e),oe=d(e,"A",{class:!0,href:!0,"data-svelte-h":!0}),J(oe)!=="svelte-axdp0m"&&(oe.innerHTML=Ve),F=i(e),re=d(e,"P",{"data-svelte-h":!0}),J(re)!=="svelte-1cx3ce1"&&(re.innerHTML=ae),vl=i(e),f(pe.$$.fragment,e),S=i(e),_e=d(e,"P",{"data-svelte-h":!0}),J(_e)!=="svelte-f7bnx7"&&(_e.innerHTML=ze),D=i(e),f(te.$$.fragment,e),L=i(e),f(xe.$$.fragment,e),Ce=i(e),G=d(e,"P",{"data-svelte-h":!0}),J(G)!=="svelte-14m336l"&&(G.innerHTML=Re),q=i(e),f(Ze.$$.fragment,e),Ie=i(e),V=d(e,"P",{"data-svelte-h":!0}),J(V)!=="svelte-fc76rg"&&(V.innerHTML=_l),ce=i(e),f(se.$$.fragment,e),$e=i(e),f(z.$$.fragment,e),Ye=i(e),P=d(e,"P",{"data-svelte-h":!0}),J(P)!=="svelte-t95m6i"&&(P.innerHTML=Ae),ge=i(e),R=d(e,"P",{"data-svelte-h":!0}),J(R)!=="svelte-12rlajc"&&(R.textContent=na),ke=i(e),f(Y.$$.fragment,e),Qe=i(e),f(O.$$.fragment,e),c=i(e),$=d(e,"P",{"data-svelte-h":!0}),J($)!=="svelte-gzer0i"&&($.textContent=xl),Dl=i(e),f(Me.$$.fragment,e),ua=i(e),f(Xe.$$.fragment,e),Ee=i(e),Zl=d(e,"P",{"data-svelte-h":!0}),J(Zl)!=="svelte-aog8ay"&&(Zl.innerHTML=oa),He=i(e),f(Ne.$$.fragment,e),Fe=i(e),f(Al.$$.fragment,e),Ll=i(e),me=d(e,"P",{"data-svelte-h":!0}),J(me)!=="svelte-b4ilrp"&&(me.innerHTML=Ma),Se=i(e),f(Wl.$$.fragment,e),ql=i(e),f(de.$$.fragment,e),Pl=i(e),Je=d(e,"P",{"data-svelte-h":!0}),J(Je)!=="svelte-12pubyt"&&(Je.innerHTML=ft),Ol=i(e),ye=d(e,"UL",{"data-svelte-h":!0}),J(ye)!=="svelte-1mbtne9"&&(ye.innerHTML=ma),De=i(e),Bl=d(e,"P",{"data-svelte-h":!0}),J(Bl)!=="svelte-1sfxr"&&(Bl.textContent=da),Le=i(e),f(qe.$$.fragment,e),Pe=i(e),f(Gl.$$.fragment,e),Kl=i(e),fe=d(e,"P",{"data-svelte-h":!0}),J(fe)!=="svelte-1l1cgyu"&&(fe.innerHTML=Ja),Oe=i(e),f(Ke.$$.fragment,e),el=i(e),Vl=d(e,"P",{"data-svelte-h":!0}),J(Vl)!=="svelte-46vgei"&&(Vl.innerHTML=ya),ll=i(e),f(We.$$.fragment,e),al=i(e),f(zl.$$.fragment,e),ea=i(e),f(Te.$$.fragment,e),la=i(e),be=d(e,"P",{"data-svelte-h":!0}),J(be)!=="svelte-vzve4l"&&(be.innerHTML=fa),tl=i(e),Rl=d(e,"P",{"data-svelte-h":!0}),J(Rl)!=="svelte-1gf0ux1"&&(Rl.innerHTML=Ta),sl=i(e),f(nl.$$.fragment,e),il=i(e),Yl=d(e,"P",{"data-svelte-h":!0}),J(Yl)!=="svelte-88obr"&&(Yl.innerHTML=ba),rl=i(e),f(pl.$$.fragment,e),cl=i(e),f(Ql.$$.fragment,e),aa=i(e),je=d(e,"P",{"data-svelte-h":!0}),J(je)!=="svelte-1gik6df"&&(je.innerHTML=ja),ul=i(e),f(Xl.$$.fragment,e),ta=i(e),f(we.$$.fragment,e),wa=i(e),ol=d(e,"P",{"data-svelte-h":!0}),J(ol)!=="svelte-ccno60"&&(ol.innerHTML=El),Ua=i(e),Ml=d(e,"P",{"data-svelte-h":!0}),J(Ml)!=="svelte-14bogks"&&(Ml.innerHTML=Hl),sa=i(e),f(Ue.$$.fragment,e),ha=i(e),f(ml.$$.fragment,e),dl=i(e),Jl=d(e,"P",{"data-svelte-h":!0}),J(Jl)!=="svelte-c279tm"&&(Jl.innerHTML=Nl),Ca=i(e),f(yl.$$.fragment,e),fl=i(e),Fl=d(e,"P",{"data-svelte-h":!0}),J(Fl)!=="svelte-1d0989m"&&(Fl.textContent=Ia),l=i(e),f(u.$$.fragment,e),bt=i(e),f($a.$$.fragment,e),jt=i(e),ga=d(e,"P",{"data-svelte-h":!0}),J(ga)!=="svelte-1l9wpjm"&&(ga.innerHTML=rs),wt=i(e),f(ia.$$.fragment,e),Ut=i(e),ka=d(e,"P",{"data-svelte-h":!0}),J(ka)!=="svelte-1rbx9dc"&&(ka.innerHTML=ps),ht=i(e),f(va.$$.fragment,e),Ct=i(e),_a=d(e,"P",{"data-svelte-h":!0}),J(_a)!=="svelte-fn5vfl"&&(_a.textContent=cs),It=i(e),xa=d(e,"P",{"data-svelte-h":!0}),J(xa)!=="svelte-6h3yam"&&(xa.textContent=us),$t=i(e),f(Za.$$.fragment,e),gt=i(e),Aa=d(e,"P",{"data-svelte-h":!0}),J(Aa)!=="svelte-cuzj35"&&(Aa.innerHTML=os),kt=i(e),bl.l(e),ut=i(e),f(Wa.$$.fragment,e),vt=i(e),Ba=d(e,"P",{"data-svelte-h":!0}),J(Ba)!=="svelte-j66ch7"&&(Ba.innerHTML=Ms),_t=i(e),Ga=d(e,"P",{"data-svelte-h":!0}),J(Ga)!=="svelte-d3lg7x"&&(Ga.innerHTML=ms),xt=i(e),wl.l(e),ot=i(e),Va=d(e,"P",{"data-svelte-h":!0}),J(Va)!=="svelte-1rla9yt"&&(Va.textContent=ds),Zt=i(e),f(za.$$.fragment,e),At=i(e),f(Ra.$$.fragment,e),Wt=i(e),Ya=d(e,"P",{"data-svelte-h":!0}),J(Ya)!=="svelte-9q6tb7"&&(Ya.textContent=Js),Bt=i(e),f(Qa.$$.fragment,e),Gt=i(e),f(Xa.$$.fragment,e),Vt=i(e),hl.l(e),Mt=i(e),K&&K.l(e),mt=i(e),f(Ea.$$.fragment,e),zt=i(e),Il.l(e),dt=i(e),f(Ha.$$.fragment,e),Rt=i(e),Na=d(e,"P",{"data-svelte-h":!0}),J(Na)!=="svelte-318yqu"&&(Na.textContent=ys),Yt=i(e),f(Fa.$$.fragment,e),Qt=i(e),f(Sa.$$.fragment,e),Xt=i(e),Da=d(e,"P",{"data-svelte-h":!0}),J(Da)!=="svelte-1nxi4jg"&&(Da.textContent=fs),Et=i(e),f(La.$$.fragment,e),Ht=i(e),qa=d(e,"P",{"data-svelte-h":!0}),J(qa)!=="svelte-o0ltnx"&&(qa.textContent=Ts),Nt=i(e),f(Pa.$$.fragment,e),Ft=i(e),gl.l(e),Jt=i(e),ee&&ee.l(e),yt=i(e),f(Oa.$$.fragment,e),St=i(e),Ka=d(e,"P",{"data-svelte-h":!0}),J(Ka)!=="svelte-1ly6cn5"&&(Ka.innerHTML=bs),Dt=i(e),f(et.$$.fragment,e),Lt=i(e),f(lt.$$.fragment,e),qt=i(e),at=d(e,"P",{"data-svelte-h":!0}),J(at)!=="svelte-1da8ckl"&&(at.textContent=js),Pt=i(e),f(tt.$$.fragment,e),Ot=i(e),Tt=d(e,"P",{}),is(Tt).forEach(a),this.h()},h(){kl(r,"name","hf:doc:metadata"),kl(r,"content",bn),Xs(B.src,Ge="https://course-demos-bert-finetuned-ner.hf.space")||kl(B,"src",Ge),kl(B,"frameborder","0"),kl(B,"height","350"),kl(B,"title","Gradio app"),kl(B,"class","block dark:hidden container p-0 flex-grow space-iframe"),kl(B,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),kl(B,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),kl(oe,"class","flex justify-center"),kl(oe,"href","/huggingface-course/bert-finetuned-ner")},m(e,s){Ss(document.head,r),t(e,j,s),t(e,p,s),t(e,U,s),T(_,e,s),t(e,h,s),T(k,e,s),t(e,Z,s),T(w,e,s),t(e,A,s),st[x].m(e,s),t(e,W,s),t(e,g,s),t(e,X,s),t(e,ve,s),t(e,E,s),T(ne,e,s),t(e,H,s),t(e,ie,s),t(e,he,s),t(e,B,s),t(e,N,s),t(e,oe,s),t(e,F,s),t(e,re,s),t(e,vl,s),T(pe,e,s),t(e,S,s),t(e,_e,s),t(e,D,s),T(te,e,s),t(e,L,s),T(xe,e,s),t(e,Ce,s),t(e,G,s),t(e,q,s),T(Ze,e,s),t(e,Ie,s),t(e,V,s),t(e,ce,s),T(se,e,s),t(e,$e,s),T(z,e,s),t(e,Ye,s),t(e,P,s),t(e,ge,s),t(e,R,s),t(e,ke,s),T(Y,e,s),t(e,Qe,s),T(O,e,s),t(e,c,s),t(e,$,s),t(e,Dl,s),T(Me,e,s),t(e,ua,s),T(Xe,e,s),t(e,Ee,s),t(e,Zl,s),t(e,He,s),T(Ne,e,s),t(e,Fe,s),T(Al,e,s),t(e,Ll,s),t(e,me,s),t(e,Se,s),T(Wl,e,s),t(e,ql,s),T(de,e,s),t(e,Pl,s),t(e,Je,s),t(e,Ol,s),t(e,ye,s),t(e,De,s),t(e,Bl,s),t(e,Le,s),T(qe,e,s),t(e,Pe,s),T(Gl,e,s),t(e,Kl,s),t(e,fe,s),t(e,Oe,s),T(Ke,e,s),t(e,el,s),t(e,Vl,s),t(e,ll,s),T(We,e,s),t(e,al,s),T(zl,e,s),t(e,ea,s),T(Te,e,s),t(e,la,s),t(e,be,s),t(e,tl,s),t(e,Rl,s),t(e,sl,s),T(nl,e,s),t(e,il,s),t(e,Yl,s),t(e,rl,s),T(pl,e,s),t(e,cl,s),T(Ql,e,s),t(e,aa,s),t(e,je,s),t(e,ul,s),T(Xl,e,s),t(e,ta,s),T(we,e,s),t(e,wa,s),t(e,ol,s),t(e,Ua,s),t(e,Ml,s),t(e,sa,s),T(Ue,e,s),t(e,ha,s),T(ml,e,s),t(e,dl,s),t(e,Jl,s),t(e,Ca,s),T(yl,e,s),t(e,fl,s),t(e,Fl,s),t(e,l,s),T(u,e,s),t(e,bt,s),T($a,e,s),t(e,jt,s),t(e,ga,s),t(e,wt,s),T(ia,e,s),t(e,Ut,s),t(e,ka,s),t(e,ht,s),T(va,e,s),t(e,Ct,s),t(e,_a,s),t(e,It,s),t(e,xa,s),t(e,$t,s),T(Za,e,s),t(e,gt,s),t(e,Aa,s),t(e,kt,s),nt[Tl].m(e,s),t(e,ut,s),T(Wa,e,s),t(e,vt,s),t(e,Ba,s),t(e,_t,s),t(e,Ga,s),t(e,xt,s),it[jl].m(e,s),t(e,ot,s),t(e,Va,s),t(e,Zt,s),T(za,e,s),t(e,At,s),T(Ra,e,s),t(e,Wt,s),t(e,Ya,s),t(e,Bt,s),T(Qa,e,s),t(e,Gt,s),T(Xa,e,s),t(e,Vt,s),rt[Ul].m(e,s),t(e,Mt,s),K&&K.m(e,s),t(e,mt,s),T(Ea,e,s),t(e,zt,s),pt[Cl].m(e,s),t(e,dt,s),T(Ha,e,s),t(e,Rt,s),t(e,Na,s),t(e,Yt,s),T(Fa,e,s),t(e,Qt,s),T(Sa,e,s),t(e,Xt,s),t(e,Da,s),t(e,Et,s),T(La,e,s),t(e,Ht,s),t(e,qa,s),t(e,Nt,s),T(Pa,e,s),t(e,Ft,s),ct[$l].m(e,s),t(e,Jt,s),ee&&ee.m(e,s),t(e,yt,s),T(Oa,e,s),t(e,St,s),t(e,Ka,s),t(e,Dt,s),T(et,e,s),t(e,Lt,s),T(lt,e,s),t(e,qt,s),t(e,at,s),t(e,Pt,s),T(tt,e,s),t(e,Ot,s),t(e,Tt,s),Kt=!0},p(e,[s]){const As={};s&1&&(As.fw=e[0]),_.$set(As);let es=x;x=Us(e),x!==es&&(pa(),M(st[es],1,1,()=>{st[es]=null}),ra(),I=st[x],I||(I=st[x]=ws[x](e),I.c()),o(I,1),I.m(W.parentNode,W));const Ws={};s&2&&(Ws.$$scope={dirty:s,ctx:e}),te.$set(Ws);const Bs={};s&2&&(Bs.$$scope={dirty:s,ctx:e}),We.$set(Bs);const Gs={};s&2&&(Gs.$$scope={dirty:s,ctx:e}),ia.$set(Gs);let ls=Tl;Tl=Cs(e),Tl!==ls&&(pa(),M(nt[ls],1,1,()=>{nt[ls]=null}),ra(),bl=nt[Tl],bl||(bl=nt[Tl]=hs[Tl](e),bl.c()),o(bl,1),bl.m(ut.parentNode,ut));let as=jl;jl=$s(e),jl!==as&&(pa(),M(it[as],1,1,()=>{it[as]=null}),ra(),wl=it[jl],wl||(wl=it[jl]=Is[jl](e),wl.c()),o(wl,1),wl.m(ot.parentNode,ot));let ts=Ul;Ul=ks(e),Ul!==ts&&(pa(),M(rt[ts],1,1,()=>{rt[ts]=null}),ra(),hl=rt[Ul],hl||(hl=rt[Ul]=gs[Ul](e),hl.c()),o(hl,1),hl.m(Mt.parentNode,Mt)),e[0]==="tf"?K?s&1&&o(K,1):(K=zs(e),K.c(),o(K,1),K.m(mt.parentNode,mt)):K&&(pa(),M(K,1,1,()=>{K=null}),ra());let ss=Cl;Cl=_s(e),Cl!==ss&&(pa(),M(pt[ss],1,1,()=>{pt[ss]=null}),ra(),Il=pt[Cl],Il||(Il=pt[Cl]=vs[Cl](e),Il.c()),o(Il,1),Il.m(dt.parentNode,dt));let ns=$l;$l=Zs(e),$l!==ns&&(pa(),M(ct[ns],1,1,()=>{ct[ns]=null}),ra(),gl=ct[$l],gl||(gl=ct[$l]=xs[$l](e),gl.c()),o(gl,1),gl.m(Jt.parentNode,Jt)),e[0]==="pt"?ee?s&1&&o(ee,1):(ee=Rs(e),ee.c(),o(ee,1),ee.m(yt.parentNode,yt)):ee&&(pa(),M(ee,1,1,()=>{ee=null}),ra())},i(e){Kt||(o(_.$$.fragment,e),o(k.$$.fragment,e),o(w.$$.fragment,e),o(I),o(ne.$$.fragment,e),o(pe.$$.fragment,e),o(te.$$.fragment,e),o(xe.$$.fragment,e),o(Ze.$$.fragment,e),o(se.$$.fragment,e),o(z.$$.fragment,e),o(Y.$$.fragment,e),o(O.$$.fragment,e),o(Me.$$.fragment,e),o(Xe.$$.fragment,e),o(Ne.$$.fragment,e),o(Al.$$.fragment,e),o(Wl.$$.fragment,e),o(de.$$.fragment,e),o(qe.$$.fragment,e),o(Gl.$$.fragment,e),o(Ke.$$.fragment,e),o(We.$$.fragment,e),o(zl.$$.fragment,e),o(Te.$$.fragment,e),o(nl.$$.fragment,e),o(pl.$$.fragment,e),o(Ql.$$.fragment,e),o(Xl.$$.fragment,e),o(we.$$.fragment,e),o(Ue.$$.fragment,e),o(ml.$$.fragment,e),o(yl.$$.fragment,e),o(u.$$.fragment,e),o($a.$$.fragment,e),o(ia.$$.fragment,e),o(va.$$.fragment,e),o(Za.$$.fragment,e),o(bl),o(Wa.$$.fragment,e),o(wl),o(za.$$.fragment,e),o(Ra.$$.fragment,e),o(Qa.$$.fragment,e),o(Xa.$$.fragment,e),o(hl),o(K),o(Ea.$$.fragment,e),o(Il),o(Ha.$$.fragment,e),o(Fa.$$.fragment,e),o(Sa.$$.fragment,e),o(La.$$.fragment,e),o(Pa.$$.fragment,e),o(gl),o(ee),o(Oa.$$.fragment,e),o(et.$$.fragment,e),o(lt.$$.fragment,e),o(tt.$$.fragment,e),Kt=!0)},o(e){M(_.$$.fragment,e),M(k.$$.fragment,e),M(w.$$.fragment,e),M(I),M(ne.$$.fragment,e),M(pe.$$.fragment,e),M(te.$$.fragment,e),M(xe.$$.fragment,e),M(Ze.$$.fragment,e),M(se.$$.fragment,e),M(z.$$.fragment,e),M(Y.$$.fragment,e),M(O.$$.fragment,e),M(Me.$$.fragment,e),M(Xe.$$.fragment,e),M(Ne.$$.fragment,e),M(Al.$$.fragment,e),M(Wl.$$.fragment,e),M(de.$$.fragment,e),M(qe.$$.fragment,e),M(Gl.$$.fragment,e),M(Ke.$$.fragment,e),M(We.$$.fragment,e),M(zl.$$.fragment,e),M(Te.$$.fragment,e),M(nl.$$.fragment,e),M(pl.$$.fragment,e),M(Ql.$$.fragment,e),M(Xl.$$.fragment,e),M(we.$$.fragment,e),M(Ue.$$.fragment,e),M(ml.$$.fragment,e),M(yl.$$.fragment,e),M(u.$$.fragment,e),M($a.$$.fragment,e),M(ia.$$.fragment,e),M(va.$$.fragment,e),M(Za.$$.fragment,e),M(bl),M(Wa.$$.fragment,e),M(wl),M(za.$$.fragment,e),M(Ra.$$.fragment,e),M(Qa.$$.fragment,e),M(Xa.$$.fragment,e),M(hl),M(K),M(Ea.$$.fragment,e),M(Il),M(Ha.$$.fragment,e),M(Fa.$$.fragment,e),M(Sa.$$.fragment,e),M(La.$$.fragment,e),M(Pa.$$.fragment,e),M(gl),M(ee),M(Oa.$$.fragment,e),M(et.$$.fragment,e),M(lt.$$.fragment,e),M(tt.$$.fragment,e),Kt=!1},d(e){e&&(a(j),a(p),a(U),a(h),a(Z),a(A),a(W),a(g),a(X),a(ve),a(E),a(H),a(ie),a(he),a(B),a(N),a(oe),a(F),a(re),a(vl),a(S),a(_e),a(D),a(L),a(Ce),a(G),a(q),a(Ie),a(V),a(ce),a($e),a(Ye),a(P),a(ge),a(R),a(ke),a(Qe),a(c),a($),a(Dl),a(ua),a(Ee),a(Zl),a(He),a(Fe),a(Ll),a(me),a(Se),a(ql),a(Pl),a(Je),a(Ol),a(ye),a(De),a(Bl),a(Le),a(Pe),a(Kl),a(fe),a(Oe),a(el),a(Vl),a(ll),a(al),a(ea),a(la),a(be),a(tl),a(Rl),a(sl),a(il),a(Yl),a(rl),a(cl),a(aa),a(je),a(ul),a(ta),a(wa),a(ol),a(Ua),a(Ml),a(sa),a(ha),a(dl),a(Jl),a(Ca),a(fl),a(Fl),a(l),a(bt),a(jt),a(ga),a(wt),a(Ut),a(ka),a(ht),a(Ct),a(_a),a(It),a(xa),a($t),a(gt),a(Aa),a(kt),a(ut),a(vt),a(Ba),a(_t),a(Ga),a(xt),a(ot),a(Va),a(Zt),a(At),a(Wt),a(Ya),a(Bt),a(Gt),a(Vt),a(Mt),a(mt),a(zt),a(dt),a(Rt),a(Na),a(Yt),a(Qt),a(Xt),a(Da),a(Et),a(Ht),a(qa),a(Nt),a(Ft),a(Jt),a(yt),a(St),a(Ka),a(Dt),a(Lt),a(qt),a(at),a(Pt),a(Ot),a(Tt)),a(r),b(_,e),b(k,e),b(w,e),st[x].d(e),b(ne,e),b(pe,e),b(te,e),b(xe,e),b(Ze,e),b(se,e),b(z,e),b(Y,e),b(O,e),b(Me,e),b(Xe,e),b(Ne,e),b(Al,e),b(Wl,e),b(de,e),b(qe,e),b(Gl,e),b(Ke,e),b(We,e),b(zl,e),b(Te,e),b(nl,e),b(pl,e),b(Ql,e),b(Xl,e),b(we,e),b(Ue,e),b(ml,e),b(yl,e),b(u,e),b($a,e),b(ia,e),b(va,e),b(Za,e),nt[Tl].d(e),b(Wa,e),it[jl].d(e),b(za,e),b(Ra,e),b(Qa,e),b(Xa,e),rt[Ul].d(e),K&&K.d(e),b(Ea,e),pt[Cl].d(e),b(Ha,e),b(Fa,e),b(Sa,e),b(La,e),b(Pa,e),ct[$l].d(e),ee&&ee.d(e),b(Oa,e),b(et,e),b(lt,e),b(tt,e)}}}const bn='{"title":"Clasificarea tokenilor","local":"token-classification","sections":[{"title":"Pregătirea datelor","local":"preparing-the-data","sections":[{"title":"Datasetul CoNLL-2003","local":"the-conll-2003-dataset","sections":[],"depth":3},{"title":"Procesarea datelor","local":"processing-the-data","sections":[],"depth":3}],"depth":2},{"title":"Fine-tuningul modelului cu Trainer API","local":"fine-tuning-the-model-with-the-trainer-api","sections":[],"depth":2},{"title":"Fine-tuningul modelului cu Keras","local":"fine-tuning-the-model-with-keras","sections":[{"title":"Data collation","local":"data-collation","sections":[],"depth":3},{"title":"Definirea modelului","local":"defining-the-model","sections":[],"depth":3},{"title":"Fine-tuningul modelului","local":"fine-tuning-the-model","sections":[],"depth":3},{"title":"Metrici","local":"metrics","sections":[],"depth":3},{"title":"Definirea modelului","local":"defining-the-model","sections":[],"depth":3},{"title":"Fine-tuningul modelului","local":"fine-tuning-the-model","sections":[],"depth":3}],"depth":2},{"title":"Un training loop personalizat","local":"a-custom-training-loop","sections":[{"title":"Pregătiți totul pentru antrenare","local":"preparing-everything-for-training","sections":[],"depth":3},{"title":"Loopul de antrenare","local":"training-loop","sections":[],"depth":3}],"depth":2},{"title":"Utilizarea model fine-tuned","local":"using-the-fine-tuned-model","sections":[],"depth":2}],"depth":1}';function jn(v,r,j){let p="pt";return Es(()=>{const U=new URLSearchParams(window.location.search);j(0,p=U.get("fw")||"pt")}),[p]}class vn extends Hs{constructor(r){super(),Ns(this,r,jn,Tn,Qs,{})}}export{vn as component};
