import{s as za,o as Ia,n as xt}from"../chunks/scheduler.893fe8c9.js";import{S as Aa,i as Ra,e as m,s as r,c as f,h as Za,a as M,d as l,b as c,f as Ca,g as y,j as b,k as ga,l as Qa,m as n,n as j,o,D as es,t as u,p as J,q as Na,r as Ga,E as ss}from"../chunks/index.6ee278c6.js";import{T as Ut}from"../chunks/Tip.eab0255c.js";import{C as Va,H as Tt,E as Xa}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.ea3ad860.js";import{Y as os}from"../chunks/Youtube.59d04f41.js";import{C as w}from"../chunks/CodeBlock.8bdd5f33.js";import{C as va}from"../chunks/CourseFloatingBanner.c25cfa5e.js";import{F as Ba}from"../chunks/FrameworkSwitchCourse.77a18d50.js";function Wa(h){let t,i;return t=new va({props:{chapter:3,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/chapter3/section2_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter3/section2_tf.ipynb"}]}}),{c(){f(t.$$.fragment)},l(a){y(t.$$.fragment,a)},m(a,p){j(t,a,p),i=!0},i(a){i||(u(t.$$.fragment,a),i=!0)},o(a){o(t.$$.fragment,a),i=!1},d(a){J(t,a)}}}function Ea(h){let t,i;return t=new va({props:{chapter:3,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/chapter3/section2_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter3/section2_pt.ipynb"}]}}),{c(){f(t.$$.fragment)},l(a){y(t.$$.fragment,a)},m(a,p){j(t,a,p),i=!0},i(a){i||(u(t.$$.fragment,a),i=!0)},o(a){o(t.$$.fragment,a),i=!1},d(a){J(t,a)}}}function Ha(h){let t,i='Continuând cu exemplul din <a href="/course/chapter2">capitolul anterior</a>, iată cum am antrena un clasificator de secvențe pe un batch în TensorFlow:',a,p,U;return p=new w({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyMExhJTIwZmVsJTIwY2ElMjAlQzMlQUVuYWludGUlMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQW1vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQXNlcXVlbmNlcyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMlRoaXMlMjBjb3Vyc2UlMjBpcyUyMGFtYXppbmchJTIyJTJDJTBBJTVEJTBBYmF0Y2glMjAlM0QlMjBkaWN0KHRva2VuaXplcihzZXF1ZW5jZXMlMkMlMjBwYWRkaW5nJTNEVHJ1ZSUyQyUyMHRydW5jYXRpb24lM0RUcnVlJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJ0ZiUyMikpJTBBJTBBJTIzJTIwQ2V2YSUyMG5vdSUwQW1vZGVsLmNvbXBpbGUob3B0aW1pemVyJTNEJTIyYWRhbSUyMiUyQyUyMGxvc3MlM0QlMjJzcGFyc2VfY2F0ZWdvcmljYWxfY3Jvc3NlbnRyb3B5JTIyKSUwQWxhYmVscyUyMCUzRCUyMHRmLmNvbnZlcnRfdG9fdGVuc29yKCU1QjElMkMlMjAxJTVEKSUwQW1vZGVsLnRyYWluX29uX2JhdGNoKGJhdGNoJTJDJTIwbGFiZWxzKQ==",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf
<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForSequenceClassification

<span class="hljs-comment"># La fel ca înainte</span>
checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint)
sequences = [
    <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
    <span class="hljs-string">&quot;This course is amazing!&quot;</span>,
]
batch = <span class="hljs-built_in">dict</span>(tokenizer(sequences, padding=<span class="hljs-literal">True</span>, truncation=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>))

<span class="hljs-comment"># Ceva nou</span>
model.<span class="hljs-built_in">compile</span>(optimizer=<span class="hljs-string">&quot;adam&quot;</span>, loss=<span class="hljs-string">&quot;sparse_categorical_crossentropy&quot;</span>)
labels = tf.convert_to_tensor([<span class="hljs-number">1</span>, <span class="hljs-number">1</span>])
model.train_on_batch(batch, labels)`,wrap:!1}}),{c(){t=m("p"),t.innerHTML=i,a=r(),f(p.$$.fragment)},l(d){t=M(d,"P",{"data-svelte-h":!0}),b(t)!=="svelte-e72e25"&&(t.innerHTML=i),a=c(d),y(p.$$.fragment,d)},m(d,$){n(d,t,$),n(d,a,$),j(p,d,$),U=!0},i(d){U||(u(p.$$.fragment,d),U=!0)},o(d){o(p.$$.fragment,d),U=!1},d(d){d&&(l(t),l(a)),J(p,d)}}}function Ya(h){let t,i='Continuând cu exemplul din <a href="/course/chapter2">capitolul anterior</a>, iată cum am antrena un clasificator de secvențe pe un batch în PyTorch:',a,p,U;return p=new w({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQWRhbVclMkMlMjBBdXRvVG9rZW5pemVyJTJDJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyMExhJTIwZmVsJTIwY2ElMjAlQzMlQUVuYWludGUlMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCklMEFzZXF1ZW5jZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjJJJ3ZlJTIwYmVlbiUyMHdhaXRpbmclMjBmb3IlMjBhJTIwSHVnZ2luZ0ZhY2UlMjBjb3Vyc2UlMjBteSUyMHdob2xlJTIwbGlmZS4lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJUaGlzJTIwY291cnNlJTIwaXMlMjBhbWF6aW5nISUyMiUyQyUwQSU1RCUwQWJhdGNoJTIwJTNEJTIwdG9rZW5pemVyKHNlcXVlbmNlcyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKSUwQSUwQSUyMyUyMENldmElMjBub3UlMEFiYXRjaCU1QiUyMmxhYmVscyUyMiU1RCUyMCUzRCUyMHRvcmNoLnRlbnNvciglNUIxJTJDJTIwMSU1RCklMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCkpJTBBbG9zcyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpLmxvc3MlMEFsb3NzLmJhY2t3YXJkKCklMEFvcHRpbWl6ZXIuc3RlcCgp",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AdamW, AutoTokenizer, AutoModelForSequenceClassification

<span class="hljs-comment"># La fel ca înainte</span>
checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
sequences = [
    <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
    <span class="hljs-string">&quot;This course is amazing!&quot;</span>,
]
batch = tokenizer(sequences, padding=<span class="hljs-literal">True</span>, truncation=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)

<span class="hljs-comment"># Ceva nou</span>
batch[<span class="hljs-string">&quot;labels&quot;</span>] = torch.tensor([<span class="hljs-number">1</span>, <span class="hljs-number">1</span>])

optimizer = AdamW(model.parameters())
loss = model(**batch).loss
loss.backward()
optimizer.step()`,wrap:!1}}),{c(){t=m("p"),t.innerHTML=i,a=r(),f(p.$$.fragment)},l(d){t=M(d,"P",{"data-svelte-h":!0}),b(t)!=="svelte-81slh"&&(t.innerHTML=i),a=c(d),y(p.$$.fragment,d)},m(d,$){n(d,t,$),n(d,a,$),j(p,d,$),U=!0},i(d){U||(u(p.$$.fragment,d),U=!0)},o(d){o(p.$$.fragment,d),U=!1},d(d){d&&(l(t),l(a)),J(p,d)}}}function Sa(h){let t,i;return t=new os({props:{id:"W_gMJF0xomE"}}),{c(){f(t.$$.fragment)},l(a){y(t.$$.fragment,a)},m(a,p){j(t,a,p),i=!0},i(a){i||(u(t.$$.fragment,a),i=!0)},o(a){o(t.$$.fragment,a),i=!1},d(a){J(t,a)}}}function Da(h){let t,i;return t=new os({props:{id:"_BZearw7f0w"}}),{c(){f(t.$$.fragment)},l(a){y(t.$$.fragment,a)},m(a,p){j(t,a,p),i=!0},i(a){i||(u(t.$$.fragment,a),i=!0)},o(a){o(t.$$.fragment,a),i=!1},d(a){J(t,a)}}}function Fa(h){let t;return{c(){t=Na("⚠️ **Atenție** Asigurați-vă că `datasets` este instalat prin rularea `pip install datasets`. Apoi, încărcați setul de date MRPC și tipăriți-l pentru a vedea ce conține.")},l(i){t=Ga(i,"⚠️ **Atenție** Asigurați-vă că `datasets` este instalat prin rularea `pip install datasets`. Apoi, încărcați setul de date MRPC și tipăriți-l pentru a vedea ce conține.")},m(i,a){n(i,t,a)},d(i){i&&l(t)}}}function qa(h){let t,i="✏️ <strong>Încercați!</strong> Uitați-vă la elementul 15 din setul de antrenament și la elementul 87 din setul de validare. Care sunt etichetele lor?";return{c(){t=m("p"),t.innerHTML=i},l(a){t=M(a,"P",{"data-svelte-h":!0}),b(t)!=="svelte-1xmnmj4"&&(t.innerHTML=i)},m(a,p){n(a,t,p)},p:xt,d(a){a&&l(t)}}}function La(h){let t,i;return t=new os({props:{id:"P-rZWqcB6CE"}}),{c(){f(t.$$.fragment)},l(a){y(t.$$.fragment,a)},m(a,p){j(t,a,p),i=!0},i(a){i||(u(t.$$.fragment,a),i=!0)},o(a){o(t.$$.fragment,a),i=!1},d(a){J(t,a)}}}function Pa(h){let t,i;return t=new os({props:{id:"0u3ioSwev3s"}}),{c(){f(t.$$.fragment)},l(a){y(t.$$.fragment,a)},m(a,p){j(t,a,p),i=!0},i(a){i||(u(t.$$.fragment,a),i=!0)},o(a){o(t.$$.fragment,a),i=!1},d(a){J(t,a)}}}function Ka(h){let t,i="✏️ <strong>Încercați!</strong> Luați elementul 15 din setul de antrenament și tokenizați cele două propoziții separat apoi ca pe o pereche. Care este diferența dintre cele două rezultate?";return{c(){t=m("p"),t.innerHTML=i},l(a){t=M(a,"P",{"data-svelte-h":!0}),b(t)!=="svelte-136pr0n"&&(t.innerHTML=i)},m(a,p){n(a,t,p)},p:xt,d(a){a&&l(t)}}}function Oa(h){let t,i="Funcția care este responsabilă de reunirea eșantioanelor în cadrul unui batch se numește <em>funcție de colaționare</em>. Funcția de colaționare implicită este o funcție care va converti eșantioanele în tf.Tensor și le va concatena (recursiv dacă elementele dvs. sunt liste, tuples sau dicționare). În cazul nostru, va fi de asemenea să aplicați umplutură pentru a avea toate intrările de aceeași lungime. Clasa <code>DataCollatorWithPadding</code> face exact acest lucru (și un pic mai mult, după cum am văzut anterior). Ia un tokenizer atunci când este instanțiat (pentru a știi ce token de completare să folosească și dacă modelul se așteaptă la padding în stânga sau în dreapta) și va face tot ce aveți nevoie. Umplerea dinamică poate fi aplicată în funcție de necesități la fiecare batch și pentru a evita să avem intrări prea lungi cu o mulțime de umpluturi. Acest lucru va accelera antrenamentul destul de mult, dar rețineți că, dacă vă antrenați pe o TPU, acest lucru poate cauza probleme - TPU-urile preferă forme fixe, chiar și atunci când ar putea necesita padding suplimentar.";return{c(){t=m("p"),t.innerHTML=i},l(a){t=M(a,"P",{"data-svelte-h":!0}),b(t)!=="svelte-10ew9aj"&&(t.innerHTML=i)},m(a,p){n(a,t,p)},d(a){a&&l(t)}}}function el(h){let t,i="Funcția care este responsabilă de combinarea eșantioanelor în cadrul unui batch se numește <em>funcție de colaționare</em>. Este un argument pe care îl puteți trece atunci când construiți un <code>DataLoader</code>, implicit fiind o funcție care va converti eșantioanele în tensori PyTorch și le va concatena (recursiv dacă elementele dvs. sunt liste, tupluri sau dicționare). În cazul nostru, va fi de asemenea să aplicați umplutură pentru a avea toate intrările de aceeași lungime. Clasa <code>DataCollatorWithPadding</code> face exact acest lucru (și un pic mai mult, după cum am văzut anterior). Ia un tokenizer atunci când este instanțiat (pentru a știi ce token de completare să folosească și dacă modelul se așteaptă la padding în stânga sau în dreapta) și va face tot ce aveți nevoie. Umplerea dinamică poate fi aplicată în funcție de necesități la fiecare batch și pentru a evita să avem intrări prea lungi cu o mulțime de umpluturi. Acest lucru va accelera antrenamentul destul de mult, dar rețineți că, dacă vă antrenați pe o TPU, acest lucru poate cauza probleme - TPU-urile preferă forme fixe, chiar și atunci când ar putea necesita padding suplimentar.";return{c(){t=m("p"),t.innerHTML=i},l(a){t=M(a,"P",{"data-svelte-h":!0}),b(t)!=="svelte-i2h2jc"&&(t.innerHTML=i)},m(a,p){n(a,t,p)},d(a){a&&l(t)}}}function sl(h){let t,i;return t=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nJTBBJTBBZGF0YV9jb2xsYXRvciUyMCUzRCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nKHRva2VuaXplciUzRHRva2VuaXplciUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIydGYlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorWithPadding

data_collator = DataCollatorWithPadding(tokenizer=tokenizer, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>)`,wrap:!1}}),{c(){f(t.$$.fragment)},l(a){y(t.$$.fragment,a)},m(a,p){j(t,a,p),i=!0},i(a){i||(u(t.$$.fragment,a),i=!0)},o(a){o(t.$$.fragment,a),i=!1},d(a){J(t,a)}}}function tl(h){let t,i;return t=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nJTBBJTBBZGF0YV9jb2xsYXRvciUyMCUzRCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nKHRva2VuaXplciUzRHRva2VuaXplcik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorWithPadding

data_collator = DataCollatorWithPadding(tokenizer=tokenizer)`,wrap:!1}}),{c(){f(t.$$.fragment)},l(a){y(t.$$.fragment,a)},m(a,p){j(t,a,p),i=!0},i(a){i||(u(t.$$.fragment,a),i=!0)},o(a){o(t.$$.fragment,a),i=!1},d(a){J(t,a)}}}function al(h){let t,i,a,p="Perfect! Acum că am trecut de la text brut la batch-uri cu care modelul nostru se poate descurca, suntem gata să îl ajustăm!",U;return t=new w({props:{code:"JTdCJ2F0dGVudGlvbl9tYXNrJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY3JTVEKSUyQyUwQSUyMCdpbnB1dF9pZHMnJTNBJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwNjclNUQpJTJDJTBBJTIwJ3Rva2VuX3R5cGVfaWRzJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY3JTVEKSUyQyUwQSUyMCdsYWJlbHMnJTNBJTIwdG9yY2guU2l6ZSglNUI4JTVEKSU3RA==",highlighted:`{<span class="hljs-string">&#x27;attention_mask&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;input_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;token_type_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;labels&#x27;</span>: torch.Size([<span class="hljs-number">8</span>])}`,wrap:!1}}),{c(){f(t.$$.fragment),i=r(),a=m("p"),a.textContent=p},l(d){y(t.$$.fragment,d),i=c(d),a=M(d,"P",{"data-svelte-h":!0}),b(a)!=="svelte-rhvz9d"&&(a.textContent=p)},m(d,$){j(t,d,$),n(d,i,$),n(d,a,$),U=!0},i(d){U||(u(t.$$.fragment,d),U=!0)},o(d){o(t.$$.fragment,d),U=!1},d(d){d&&(l(i),l(a)),J(t,d)}}}function ll(h){let t,i;return t=new w({props:{code:"JTdCJ2F0dGVudGlvbl9tYXNrJyUzQSUyMFRlbnNvclNoYXBlKCU1QjglMkMlMjA2NyU1RCklMkMlMEElMjAnaW5wdXRfaWRzJyUzQSUyMFRlbnNvclNoYXBlKCU1QjglMkMlMjA2NyU1RCklMkMlMEElMjAndG9rZW5fdHlwZV9pZHMnJTNBJTIwVGVuc29yU2hhcGUoJTVCOCUyQyUyMDY3JTVEKSUyQyUwQSUyMCdsYWJlbHMnJTNBJTIwVGVuc29yU2hhcGUoJTVCOCU1RCklN0Q=",highlighted:`{<span class="hljs-string">&#x27;attention_mask&#x27;</span>: TensorShape([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;input_ids&#x27;</span>: TensorShape([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;token_type_ids&#x27;</span>: TensorShape([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;labels&#x27;</span>: TensorShape([<span class="hljs-number">8</span>])}`,wrap:!1}}),{c(){f(t.$$.fragment)},l(a){y(t.$$.fragment,a)},m(a,p){j(t,a,p),i=!0},i(a){i||(u(t.$$.fragment,a),i=!0)},o(a){o(t.$$.fragment,a),i=!1},d(a){J(t,a)}}}function nl(h){let t,i="✏️ <strong>Încearcați!</strong> Replicați preprocesarea pe setul de date GLUE SST-2. Acesta este puțin diferit, deoarece este compus din propoziții simple în loc de perechi, dar restul lucrurilor pe care le-am făcut ar trebui să fie la fel. Pentru o provocare mai dificilă, încercați să scrieți o funcție de preprocesare care să funcționeze pe oricare dintre sarcinile GLUE.";return{c(){t=m("p"),t.innerHTML=i},l(a){t=M(a,"P",{"data-svelte-h":!0}),b(t)!=="svelte-1tovb0b"&&(t.innerHTML=i)},m(a,p){n(a,t,p)},p:xt,d(a){a&&l(t)}}}function xa(h){let t,i="Acum că avem setul nostru de date și un compilator de date, trebuie să le punem împreună. Am putea încărca manual batch-uri și să le asamblăm, dar este mult de lucru și probabil nici nu este foarte eficient. În schimb, există o metodă simplă care oferă o soluție performantă la această problemă: <code>to_tf_dataset()</code>. Aceasta va împacheta un <code>tf.data.Dataset</code> cu funcția de colaționare încorporată. Dacă utilizați <code>DataCollatorWithPadding</code>, acest lucru nu va fi o problemă deoarece ea funcționează cu dicționare, liste și tensori NumPy, precum și cu tensori TensorFlow!",a,p,U,d,$="Și asta este tot! Putem folosi aceste seturi de date în cursul următor, unde instruirea va fi extrem de simplă după toată munca grea de preprocesare a datelor.",V;return p=new w({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELnRvX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwY29sdW1ucyUzRCU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTJDJTIwJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIydG9rZW5fdHlwZV9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBsYWJlbF9jb2xzJTNEJTVCJTIybGFiZWxzJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0Q4JTJDJTBBKSUwQSUwQXRmX3ZhbGlkYXRpb25fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQudG9fdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBjb2x1bW5zJTNEJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGxhYmVsX2NvbHMlM0QlNUIlMjJsYWJlbHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0Q4JTJDJTBBKQ==",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;token_type_ids&quot;</span>],
    label_cols=[<span class="hljs-string">&quot;labels&quot;</span>],
    shuffle=<span class="hljs-literal">True</span>,
    collate_fn=data_collator,
    batch_size=<span class="hljs-number">8</span>,
)

tf_validation_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;token_type_ids&quot;</span>],
    label_cols=[<span class="hljs-string">&quot;labels&quot;</span>],
    shuffle=<span class="hljs-literal">False</span>,
    collate_fn=data_collator,
    batch_size=<span class="hljs-number">8</span>,
)`,wrap:!1}}),{c(){t=m("p"),t.innerHTML=i,a=r(),f(p.$$.fragment),U=r(),d=m("p"),d.textContent=$},l(T){t=M(T,"P",{"data-svelte-h":!0}),b(t)!=="svelte-r692c"&&(t.innerHTML=i),a=c(T),y(p.$$.fragment,T),U=c(T),d=M(T,"P",{"data-svelte-h":!0}),b(d)!=="svelte-1t337ck"&&(d.textContent=$)},m(T,G){n(T,t,G),n(T,a,G),j(p,T,G),n(T,U,G),n(T,d,G),V=!0},i(T){V||(u(p.$$.fragment,T),V=!0)},o(T){o(p.$$.fragment,T),V=!1},d(T){T&&(l(t),l(a),l(U),l(d)),J(p,T)}}}function il(h){let t,i,a,p,U,d,$,V,T,G,_,C,ts,g,x,as,Y,vt="Desigur, doar antrenarea modelului pe două propoziții nu va da rezultate foarte bune. Pentru a obține rezultate mai bune, va trebui să pregătiți un set de date mai mare.",ds,S,zt='În această secțiune vom folosi ca exemplu setul de date MRPC (Microsoft Research Paraphrase Corpus), introdus într-o <a href="https://www.aclweb.org/anthology/I05-5002.pdf" rel="nofollow">lucrare</a> de William B. Dolan și Chris Brockett. Setul de date este format din 5 801 perechi de propoziții, cu o etichetă care indică dacă acestea sunt parafrazări sau nu (adică, dacă ambele propoziții înseamnă același lucru). L-am selectat pentru acest capitol deoarece este un set de date mic, astfel încât este ușor de experimentat cu formarea pe acesta.',ms,D,Ms,v,z,ls,F,It='Hub-ul nu conține doar modele, ci și multe seturi de date în limbi diferite. Puteți naviga printre seturile de date <a href="https://huggingface.co/datasets" rel="nofollow">aici</a> și vă recomandăm să încercați să încărcați și să procesați un nou set de date după ce ați parcurs această secțiune (consultați documentația generală <a href="https://huggingface.co/docs/datasets/loading" rel="nofollow">aici</a>). Dar, pentru moment, să ne concentrăm asupra setului de date MRPC! Acesta este unul dintre cele 10 seturi de date care compun <a href="https://gluebenchmark.com/" rel="nofollow">GLUE benchmark</a>, care este un benchmark academic utilizat pentru a măsura performanța modelelor ML în 10 sarcini diferite de clasificare a textului.',fs,q,At="Biblioteca 🤗 Datasets oferă o comandă foarte simplă pentru a descărca și stoca în cache un set de date pe Hub. Putem descărca setul de date MRPC astfel:",ys,B,js,L,Js,P,bs,K,Rt="După cum puteți vedea, obținem un obiect <code>DatasetDict</code> care conține setul de instruire, setul de validare și setul de testare. Fiecare dintre acestea conține mai multe coloane (<code>sentence1</code>, <code>sentence2</code>, <code>label</code> și <code>idx</code>) și un număr de rânduri variabil, care reprezintă numărul de elemente din fiecare set (astfel, există 3.668 de perechi de propoziții în setul de instruire, 408 în setul de validare și 1.725 în setul de testare).",hs,O,Zt="Această comandă descarcă și pune în cache setul de date, implicit în <em>~/.cache/huggingface/datasets</em>. Reamintim din capitolul 2 că puteți personaliza folderul cache prin setarea variabilei de mediu <code>HF_HOME</code>.",Us,ee,Qt="Putem accesa fiecare pereche de propoziții din obiectul nostru <code>raw_datasets</code> prin indexare, ca într-un dicționar:",Ts,se,ws,te,$s,ae,Nt="Putem vedea că etichetele sunt deja numere întregi, deci nu va trebui să efectuăm nicio prelucrare prealabilă. Pentru a ști ce număr întreg corespunde fiecărei etichete, putem inspecta <code>features</code> din <code>raw_train_dataset</code>. Acest lucru ne va indica tipul fiecărei coloane:",ks,le,_s,ne,Cs,ie,Gt="În culise, <code>label</code> este de tipul <code>ClassLabel</code>, iar maparea numerelor întregi și numele etichetei este stocată în folderul <em>names</em>. <code>0</code> corespunde la <code>not_equivalent</code>, iar <code>1</code> corespunde la <code>equivalent</code>.",gs,W,xs,re,vs,I,A,ns,ce,Vt='Pentru a preprocesa setul de date, trebuie să convertim textul în numere pe care modelul le înțelege. După cum ați văzut în <a href="/course/chapter2">capitolul anterior</a>, acest lucru se face cu ajutorul unui tokenizer. Putem furniza tokenizatorului o propoziție sau o listă de propoziții, astfel încât putem tokeniza direct primele propoziții și toate propozițiile secundare din fiecare pereche, astfel:',zs,pe,Is,ue,Xt="Cu toate acestea, nu putem pur și simplu să transmitem două secvențe modelului și să obținem o predicție care să indice dacă cele două propoziții sunt parafraze sau nu. Trebuie să tratăm cele două secvențe ca pe o pereche și să aplicăm preprocesarea corespunzătoare. Din fericire, tokenizatorul poate, de asemenea, să ia o pereche de secvențe și să le pregătească în modul în care se așteaptă modelul nostru BERT:",As,oe,Rs,de,Zs,me,Bt='Am discutat despre cheile <code>input_ids</code> și <code>attention_mask</code> în <a href="/course/chapter2">Capitolul 2</a>, dar am amânat discuția despre <code>token_type_ids</code>. În acest exemplu, aceasta este ceea ce îi spune modelului care parte a intrării este prima propoziție și care este a doua propoziție.',Qs,E,Ns,Me,Wt="Dacă decodificăm ID-urile din <code>input_ids</code> înapoi în cuvinte:",Gs,fe,Vs,ye,Et="Vom obține:",Xs,je,Bs,Je,Ht="Astfel, modelul se așteaptă ca intrările să fie de forma <code>[CLS] sentence1 [SEP] sentence2 [SEP]</code> atunci când există două propoziții. Alinierea acestui lucru cu <code>token_type_ids</code> ne dă:",Ws,be,Es,he,Yt="După cum puteți vedea, părțile de intrare corespunzătoare <code>[CLS] sentence1 [SEP]</code> au toate un ID de tip token de <code>0</code>, în timp ce celelalte părți, corespunzătoare <code>sentence2 [SEP]</code>, au toate un ID de tip token de <code>1</code>.",Hs,Ue,St="Rețineți că, dacă selectați un checkpoint diferit, nu veți avea neapărat <code>token_type_ids</code> în intrările dvs. tokenizate (de exemplu, acestea nu sunt returnate dacă utilizați un model DistilBERT). Acestea sunt returnate numai atunci când modelul va ști ce să facă cu ele, deoarece le-a văzut în timpul preinstruirii sale.",Ys,Te,Dt='Aici, BERT este preinstruit cu ID-uri de tip token și, pe lângă obiectivul de modelare a limbajului mascat despre care am vorbit în <a href="/course/chapter1">[Chapter 1]</a>, are un obiectiv suplimentar numit <em>next sentence prediction</em>. Obiectivul acestei sarcini este de a modela relația dintre perechile de propoziții.',Ss,we,Ft="În cazul predicției propoziției următoare, modelul primește perechi de propoziții (cu token-uri mascate aleatoriu) și i se cere să prezică dacă a doua propoziție o urmează pe prima. Pentru ca sarcina să nu fie complicată, jumătate din timp propozițiile se succed reciproc în documentul original din care au fost extrase, iar cealaltă jumătate din timp cele două propoziții provin din două documente diferite.",Ds,$e,qt="În general, nu trebuie să vă faceți griji dacă există sau nu <code>token_type_ids</code> în intrările dvs. tokenizate: atâta timp cât utilizați același checkpoint pentru tokenizator și model, totul va fi bine, deoarece tokenizatorul știe ce să furnizeze modelului său.",Fs,ke,Lt='Acum că am văzut cum tokenizatorul nostru poate trata o pereche de propoziții, îl putem folosi pentru a tokeniza întregul nostru set de date: la fel ca în <a href="/course/chapter2">previous chapter</a>, putem furniza tokenizatorului o listă de perechi de propoziții oferindu-i lista primelor propoziții, apoi lista celor de-a doua propoziții. Acest lucru este, de asemenea, compatibil cu opțiunile de padding și trunchiere pe care le-am văzut în <a href="/course/chapter2">Chapter 2</a>. Așadar, o modalitate de preprocesare a setului de date de instruire este:',qs,_e,Ls,Ce,Pt='Această metodă funcționează corespunzător, dar are dezavantajul de a returna un dicționar (cu cheile noastre, <code>input_ids</code>, <code>attention_mask</code> și <code>token_type_ids</code>, și valori care sunt liste ale listelor). De asemenea, va funcționa numai dacă aveți suficientă memorie RAM pentru a stoca întregul set de date în timpul tokenizării (în timp ce seturile de date din biblioteca 🤗 Datasets sunt fișiere <a href="https://arrow.apache.org/" rel="nofollow">Apache Arrow</a> stocate pe disc, deci păstrați încărcate în memorie numai eșantioanele pe care le solicitați).',Ps,ge,Kt='Pentru a păstra informațiile sub forma unui set de date, vom utiliza metoda <a href="https://huggingface.co/docs/datasets/package_reference/main_classes#datasets.Dataset.map" rel="nofollow"><code>Dataset.map()</code></a>. Acest lucru ne permite, de asemenea, o flexibilitate sporită, în cazul în care avem nevoie de mai multe preprocesări decât simpla tokenizare. Metoda <code>map()</code> funcționează prin aplicarea unei funcții pe fiecare element al setului de date, deci să definim o funcție care să tokenizeze intrările noastre:',Ks,xe,Os,ve,Ot='Această funcție acceptă un dicționar (precum elementele din setul nostru de date) și returnează un nou dicționar cu cheile <code>input_ids</code>, <code>attention_mask</code> și <code>token_type_ids</code>. Rețineți că funcționează și în cazul în care dicționarul <code>example</code> conține mai multe eșantioane (fiecare cheie fiind o listă de propoziții), deoarece <code>tokenizer</code> funcționează pe liste de perechi de propoziții, așa cum am văzut anterior. Acest lucru ne va permite să folosim opțiunea <code>batched=True</code> în apelul nostru la <code>map</code>, ceea ce va accelera foarte mult tokenizarea. <code>tokenizer</code> este susținut de un tokenizer scris în Rust din biblioteca <a href="https://github.com/huggingface/tokenizers" rel="nofollow">🤗 Tokenizers</a>. Acest tokenizator poate fi foarte rapid, dar numai dacă îi oferim o mulțime de intrări deodată.',et,ze,ea="Rețineți că am omis deocamdată argumentul <code>padding</code> în funcția noastră de tokenizare. Acest lucru se datorează faptului că umplerea tuturor eșantioanelor la lungimea maximă nu este eficientă: este mai bine să umplem eșantioanele atunci când construim un batch, deoarece atunci trebuie să umplem doar la lungimea maximă din acel batch, și nu la lungimea maximă din întregul set de date. Acest lucru poate economisi mult timp și putere de procesare atunci când intrările au lungimi variate!",st,Ie,sa="Iată cum aplicăm funcția de tokenizare la toate seturile noastre de date simultan. Utilizăm <code>batched=True</code> în apelul către <code>map</code>, astfel încât funcția să fie aplicată la mai multe elemente ale setului nostru de date simultan, și nu la fiecare element în parte. Acest lucru permite o preprocesare mai rapidă.",tt,Ae,at,Re,ta="Modul în care biblioteca 🤗 Datasets aplică această procesare este prin adăugarea de noi câmpuri la seturile de date, câte unul pentru fiecare cheie din dicționarul returnat de funcția de preprocesare:",lt,Ze,nt,Qe,aa="Puteți utiliza chiar și multiprocesarea atunci când aplicați funcția de preprocesare cu <code>map()</code> prin transmiterea unui argument <code>num_proc</code>. Nu am făcut acest lucru aici deoarece biblioteca 🤗 Tokenizers utilizează deja mai multe fire pentru a tokeniza mai rapid eșantioanele noastre, dar dacă nu utilizați un tokenizator rapid susținut de această bibliotecă, acest lucru v-ar putea accelera preprocesarea.",it,Ne,la="Funcția noastră <code>tokenize_function</code> returnează un dicționar cu cheile <code>input_ids</code>, <code>attention_mask</code> și <code>token_type_ids</code>, astfel încât aceste trei câmpuri sunt adăugate la toate diviziunile setului nostru de date. Rețineți că am fi putut, de asemenea, să modificăm câmpurile existente dacă funcția noastră de preprocesare a returnat o nouă valoare pentru o cheie existentă în setul de date căruia i-am aplicat funcția <code>map()</code>.",rt,Ge,na="Ultimul lucru pe care va trebui să îl facem este să umplem toate exemplele la lungimea celui mai lung element atunci când grupăm elementele împreună - o tehnică la care ne referim ca <em>umplere dinamică</em>.",ct,Ve,pt,Xe,ut,is,Be,ia="Pentru a face acest lucru în practică, trebuie să definim o funcție de colaționare care va aplica cantitatea corectă de umplutură elementelor din setul de date pe care dorim să le grupăm. Din fericire, biblioteca 🤗 Transformers ne oferă o astfel de funcție prin <code>DataCollatorWithPadding</code>. Aceasta preia un tokenizer atunci când o instanțiați (pentru a știi ce token de umplutură să utilizați și dacă modelul se așteaptă ca umplutura să fie la stânga sau la dreapta intrărilor) și va face tot ceea ce aveți nevoie:",ot,R,Z,rs,We,ra="Pentru a testa această nouă opțiune, să luăm câteva eșantioane din setul nostru de formare pe care dorim să le grupăm. Aici, eliminăm coloanele <code>idx</code>, <code>sentence1</code> și <code>sentence2</code> deoarece nu vor fi necesare și conțin șiruri de caractere (și nu putem crea tensori cu șiruri de caractere) și aruncăm o privire la lungimile fiecărei intrări din batch:",dt,Ee,mt,He,Mt,Ye,ca="Nici o surpriză, obținem eșantioane de diferite lungimi, de la 32 la 67. Umplerea dinamică înseamnă că toate eșantioanele din acest batch ar trebui să fie umplute la o lungime de 67, lungimea maximă din cadrul batch-ului. Fără umplutură dinamică, toate eșantioanele ar trebui să fie umplute la lungimea maximă din întregul set de date sau la lungimea maximă pe care modelul o poate accepta. Să verificăm de două ori dacă <code>data_collator</code> completează dinamic batch-ul în mod corespunzător:",ft,Se,yt,Q,N,cs,H,jt,ps,De,Jt,us,bt;U=new Ba({props:{fw:h[0]}}),$=new Va({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),T=new Tt({props:{title:"Prelucrarea datelor",local:"prelucrarea-datelor",headingTag:"h1"}});const pa=[Ea,Wa],Fe=[];function ua(e,s){return e[0]==="pt"?0:1}_=ua(h),C=Fe[_]=pa[_](h);const oa=[Ya,Ha],qe=[];function da(e,s){return e[0]==="pt"?0:1}g=da(h),x=qe[g]=oa[g](h),D=new Tt({props:{title:"Încărcarea unui set de date din Hub",local:"încărcarea-unui-set-de-date-din-Hub",headingTag:"h3"}});const ma=[Da,Sa],Le=[];function Ma(e,s){return e[0]==="pt"?0:1}v=Ma(h),z=Le[v]=ma[v](h),B=new Ut({props:{$$slots:{default:[Fa]},$$scope:{ctx:h}}}),L=new w({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBcmF3X2RhdGFzZXRzJTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMmdsdWUlMjIlMkMlMjAlMjJtcnBjJTIyKSUwQXJhd19kYXRhc2V0cw==",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;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
raw_datasets`,wrap:!1}}),P=new w({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ3NlbnRlbmNlMSclMkMlMjAnc2VudGVuY2UyJyUyQyUyMCdsYWJlbCclMkMlMjAnaWR4JyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMzY2OCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB2YWxpZGF0aW9uJTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidzZW50ZW5jZTEnJTJDJTIwJ3NlbnRlbmNlMiclMkMlMjAnbGFiZWwnJTJDJTIwJ2lkeCclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDQwOCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB0ZXN0JTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidzZW50ZW5jZTEnJTJDJTIwJ3NlbnRlbmNlMiclMkMlMjAnbGFiZWwnJTJDJTIwJ2lkeCclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE3MjUlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>],
        num_rows: <span class="hljs-number">3668</span>
    })
    validation: Dataset({
        features: [<span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>],
        num_rows: <span class="hljs-number">408</span>
    })
    test: Dataset({
        features: [<span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>],
        num_rows: <span class="hljs-number">1725</span>
    })
})`,wrap:!1}}),se=new w({props:{code:"cmF3X3RyYWluX2RhdGFzZXQlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCUwQXJhd190cmFpbl9kYXRhc2V0JTVCMCU1RA==",highlighted:`raw_train_dataset = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>]
raw_train_dataset[<span class="hljs-number">0</span>]`,wrap:!1}}),te=new w({props:{code:"JTdCJ2lkeCclM0ElMjAwJTJDJTBBJTIwJ2xhYmVsJyUzQSUyMDElMkMlMEElMjAnc2VudGVuY2UxJyUzQSUyMCdBbXJvemklMjBhY2N1c2VkJTIwaGlzJTIwYnJvdGhlciUyMCUyQyUyMHdob20lMjBoZSUyMGNhbGxlZCUyMCUyMiUyMHRoZSUyMHdpdG5lc3MlMjAlMjIlMjAlMkMlMjBvZiUyMGRlbGliZXJhdGVseSUyMGRpc3RvcnRpbmclMjBoaXMlMjBldmlkZW5jZSUyMC4nJTJDJTBBJTIwJ3NlbnRlbmNlMiclM0ElMjAnUmVmZXJyaW5nJTIwdG8lMjBoaW0lMjBhcyUyMG9ubHklMjAlMjIlMjB0aGUlMjB3aXRuZXNzJTIwJTIyJTIwJTJDJTIwQW1yb3ppJTIwYWNjdXNlZCUyMGhpcyUyMGJyb3RoZXIlMjBvZiUyMGRlbGliZXJhdGVseSUyMGRpc3RvcnRpbmclMjBoaXMlMjBldmlkZW5jZSUyMC4nJTdE",highlighted:`{<span class="hljs-string">&#x27;idx&#x27;</span>: <span class="hljs-number">0</span>,
 <span class="hljs-string">&#x27;label&#x27;</span>: <span class="hljs-number">1</span>,
 <span class="hljs-string">&#x27;sentence1&#x27;</span>: <span class="hljs-string">&#x27;Amrozi accused his brother , whom he called &quot; the witness &quot; , of deliberately distorting his evidence .&#x27;</span>,
 <span class="hljs-string">&#x27;sentence2&#x27;</span>: <span class="hljs-string">&#x27;Referring to him as only &quot; the witness &quot; , Amrozi accused his brother of deliberately distorting his evidence .&#x27;</span>}`,wrap:!1}}),le=new w({props:{code:"cmF3X3RyYWluX2RhdGFzZXQuZmVhdHVyZXM=",highlighted:"raw_train_dataset.features",wrap:!1}}),ne=new w({props:{code:"JTdCJ3NlbnRlbmNlMSclM0ElMjBWYWx1ZShkdHlwZSUzRCdzdHJpbmcnJTJDJTIwaWQlM0ROb25lKSUyQyUwQSUyMCdzZW50ZW5jZTInJTNBJTIwVmFsdWUoZHR5cGUlM0Qnc3RyaW5nJyUyQyUyMGlkJTNETm9uZSklMkMlMEElMjAnbGFiZWwnJTNBJTIwQ2xhc3NMYWJlbChudW1fY2xhc3NlcyUzRDIlMkMlMjBuYW1lcyUzRCU1Qidub3RfZXF1aXZhbGVudCclMkMlMjAnZXF1aXZhbGVudCclNUQlMkMlMjBuYW1lc19maWxlJTNETm9uZSUyQyUyMGlkJTNETm9uZSklMkMlMEElMjAnaWR4JyUzQSUyMFZhbHVlKGR0eXBlJTNEJ2ludDMyJyUyQyUyMGlkJTNETm9uZSklN0Q=",highlighted:`{<span class="hljs-string">&#x27;sentence1&#x27;</span>: Value(dtype=<span class="hljs-string">&#x27;string&#x27;</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>),
 <span class="hljs-string">&#x27;sentence2&#x27;</span>: Value(dtype=<span class="hljs-string">&#x27;string&#x27;</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>),
 <span class="hljs-string">&#x27;label&#x27;</span>: ClassLabel(num_classes=<span class="hljs-number">2</span>, names=[<span class="hljs-string">&#x27;not_equivalent&#x27;</span>, <span class="hljs-string">&#x27;equivalent&#x27;</span>], names_file=<span class="hljs-literal">None</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>),
 <span class="hljs-string">&#x27;idx&#x27;</span>: Value(dtype=<span class="hljs-string">&#x27;int32&#x27;</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>)}`,wrap:!1}}),W=new Ut({props:{$$slots:{default:[qa]},$$scope:{ctx:h}}}),re=new Tt({props:{title:"Preprocesarea unui set de date",local:"preprocesarea-unui-set-de-date",headingTag:"h3"}});const fa=[Pa,La],Pe=[];function ya(e,s){return e[0]==="pt"?0:1}I=ya(h),A=Pe[I]=fa[I](h),pe=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQXRva2VuaXplZF9zZW50ZW5jZXNfMSUyMCUzRCUyMHRva2VuaXplcihyYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QiUyMnNlbnRlbmNlMSUyMiU1RCklMEF0b2tlbml6ZWRfc2VudGVuY2VzXzIlMjAlM0QlMjB0b2tlbml6ZXIocmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIlMjJzZW50ZW5jZTIlMjIlNUQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
tokenized_sentences_1 = tokenizer(raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-string">&quot;sentence1&quot;</span>])
tokenized_sentences_2 = tokenizer(raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-string">&quot;sentence2&quot;</span>])`,wrap:!1}}),oe=new w({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUyMlRoaXMlMjBpcyUyMHRoZSUyMGZpcnN0JTIwc2VudGVuY2UuJTIyJTJDJTIwJTIyVGhpcyUyMGlzJTIwdGhlJTIwc2Vjb25kJTIwb25lLiUyMiklMEFpbnB1dHM=",highlighted:`inputs = tokenizer(<span class="hljs-string">&quot;This is the first sentence.&quot;</span>, <span class="hljs-string">&quot;This is the second one.&quot;</span>)
inputs`,wrap:!1}}),de=new w({props:{code:"JTdCJTIwJTBBJTIwJTIwJ2lucHV0X2lkcyclM0ElMjAlNUIxMDElMkMlMjAyMDIzJTJDJTIwMjAwMyUyQyUyMDE5OTYlMkMlMjAyMDM0JTJDJTIwNjI1MSUyQyUyMDEwMTIlMkMlMjAxMDIlMkMlMjAyMDIzJTJDJTIwMjAwMyUyQyUyMDE5OTYlMkMlMjAyMTE3JTJDJTIwMjAyOCUyQyUyMDEwMTIlMkMlMjAxMDIlNUQlMkMlMEElMjAlMjAndG9rZW5fdHlwZV9pZHMnJTNBJTIwJTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVEJTJDJTBBJTIwJTIwJ2F0dGVudGlvbl9tYXNrJyUzQSUyMCU1QjElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSU1RCUwQSU3RA==",highlighted:`{ 
  <span class="hljs-string">&#x27;input_ids&#x27;</span>: [<span class="hljs-number">101</span>, <span class="hljs-number">2023</span>, <span class="hljs-number">2003</span>, <span class="hljs-number">1996</span>, <span class="hljs-number">2034</span>, <span class="hljs-number">6251</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>, <span class="hljs-number">2023</span>, <span class="hljs-number">2003</span>, <span class="hljs-number">1996</span>, <span class="hljs-number">2117</span>, <span class="hljs-number">2028</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>],
  <span class="hljs-string">&#x27;token_type_ids&#x27;</span>: [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>],
  <span class="hljs-string">&#x27;attention_mask&#x27;</span>: [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>]
}`,wrap:!1}}),E=new Ut({props:{$$slots:{default:[Ka]},$$scope:{ctx:h}}}),fe=new w({props:{code:"dG9rZW5pemVyLmNvbnZlcnRfaWRzX3RvX3Rva2VucyhpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQp",highlighted:'tokenizer.convert_ids_to_tokens(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>])',wrap:!1}}),je=new w({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAndGhpcyclMkMlMjAnaXMnJTJDJTIwJ3RoZSclMkMlMjAnZmlyc3QnJTJDJTIwJ3NlbnRlbmNlJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTJDJTIwJ3RoaXMnJTJDJTIwJ2lzJyUyQyUyMCd0aGUnJTJDJTIwJ3NlY29uZCclMkMlMjAnb25lJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTVE",highlighted:'[<span class="hljs-string">&#x27;[CLS]&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;the&#x27;</span>, <span class="hljs-string">&#x27;first&#x27;</span>, <span class="hljs-string">&#x27;sentence&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;the&#x27;</span>, <span class="hljs-string">&#x27;second&#x27;</span>, <span class="hljs-string">&#x27;one&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>]',wrap:!1}}),be=new w({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAndGhpcyclMkMlMjAnaXMnJTJDJTIwJ3RoZSclMkMlMjAnZmlyc3QnJTJDJTIwJ3NlbnRlbmNlJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTJDJTIwJ3RoaXMnJTJDJTIwJ2lzJyUyQyUyMCd0aGUnJTJDJTIwJ3NlY29uZCclMkMlMjAnb25lJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTVEJTBBJTVCJTIwJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAlMjAxJTJDJTIwJTIwJTIwJTIwMSUyQyUyMCUyMCUyMCUyMCUyMDElMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAxJTJDJTIwJTIwJTIwJTIwJTIwMSUyQyUyMCUyMCUyMDElMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAxJTVE",highlighted:`[<span class="hljs-string">&#x27;[CLS]&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;the&#x27;</span>, <span class="hljs-string">&#x27;first&#x27;</span>, <span class="hljs-string">&#x27;sentence&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;the&#x27;</span>, <span class="hljs-string">&#x27;second&#x27;</span>, <span class="hljs-string">&#x27;one&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>]
[      <span class="hljs-number">0</span>,      <span class="hljs-number">0</span>,    <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,       <span class="hljs-number">0</span>,          <span class="hljs-number">0</span>,   <span class="hljs-number">0</span>,       <span class="hljs-number">0</span>,      <span class="hljs-number">1</span>,    <span class="hljs-number">1</span>,     <span class="hljs-number">1</span>,        <span class="hljs-number">1</span>,     <span class="hljs-number">1</span>,   <span class="hljs-number">1</span>,       <span class="hljs-number">1</span>]`,wrap:!1}}),_e=new w({props:{code:"dG9rZW5pemVkX2RhdGFzZXQlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwcmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMEElMjAlMjAlMjAlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QiUyMnNlbnRlbmNlMiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMHBhZGRpbmclM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMEEp",highlighted:`tokenized_dataset = tokenizer(
    raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-string">&quot;sentence1&quot;</span>],
    raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-string">&quot;sentence2&quot;</span>],
    padding=<span class="hljs-literal">True</span>,
    truncation=<span class="hljs-literal">True</span>,
)`,wrap:!1}}),xe=new w({props:{code:"ZGVmJTIwdG9rZW5pemVfZnVuY3Rpb24oZXhhbXBsZSklM0ElMEElMjAlMjAlMjAlMjByZXR1cm4lMjB0b2tlbml6ZXIoZXhhbXBsZSU1QiUyMnNlbnRlbmNlMSUyMiU1RCUyQyUyMGV4YW1wbGUlNUIlMjJzZW50ZW5jZTIlMjIlNUQlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">example</span>):
    <span class="hljs-keyword">return</span> tokenizer(example[<span class="hljs-string">&quot;sentence1&quot;</span>], example[<span class="hljs-string">&quot;sentence2&quot;</span>], truncation=<span class="hljs-literal">True</span>)`,wrap:!1}}),Ae=new w({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQXRva2VuaXplZF9kYXRhc2V0cw==",highlighted:`tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>)
tokenized_datasets`,wrap:!1}}),Ze=new w({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpZHgnJTJDJTIwJ2lucHV0X2lkcyclMkMlMjAnbGFiZWwnJTJDJTIwJ3NlbnRlbmNlMSclMkMlMjAnc2VudGVuY2UyJyUyQyUyMCd0b2tlbl90eXBlX2lkcyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDM2NjglMEElMjAlMjAlMjAlMjAlN0QpJTBBJTIwJTIwJTIwJTIwdmFsaWRhdGlvbiUzQSUyMERhdGFzZXQoJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmVhdHVyZXMlM0ElMjAlNUInYXR0ZW50aW9uX21hc2snJTJDJTIwJ2lkeCclMkMlMjAnaW5wdXRfaWRzJyUyQyUyMCdsYWJlbCclMkMlMjAnc2VudGVuY2UxJyUyQyUyMCdzZW50ZW5jZTInJTJDJTIwJ3Rva2VuX3R5cGVfaWRzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNDA4JTBBJTIwJTIwJTIwJTIwJTdEKSUwQSUyMCUyMCUyMCUyMHRlc3QlM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpZHgnJTJDJTIwJ2lucHV0X2lkcyclMkMlMjAnbGFiZWwnJTJDJTIwJ3NlbnRlbmNlMSclMkMlMjAnc2VudGVuY2UyJyUyQyUyMCd0b2tlbl90eXBlX2lkcyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE3MjUlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;token_type_ids&#x27;</span>],
        num_rows: <span class="hljs-number">3668</span>
    })
    validation: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;token_type_ids&#x27;</span>],
        num_rows: <span class="hljs-number">408</span>
    })
    test: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;token_type_ids&#x27;</span>],
        num_rows: <span class="hljs-number">1725</span>
    })
})`,wrap:!1}}),Ve=new Tt({props:{title:"Umplere dinamică",local:"umplere-dinamică",headingTag:"h3"}}),Xe=new os({props:{id:"7q5NyFT8REg"}});function ja(e,s){return e[0]==="pt"?el:Oa}let ht=ja(h),X=ht(h);const Ja=[tl,sl],Ke=[];function ba(e,s){return e[0]==="pt"?0:1}R=ba(h),Z=Ke[R]=Ja[R](h),Ee=new w({props:{code:"c2FtcGxlcyUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCJTNBOCU1RCUwQXNhbXBsZXMlMjAlM0QlMjAlN0JrJTNBJTIwdiUyMGZvciUyMGslMkMlMjB2JTIwaW4lMjBzYW1wbGVzLml0ZW1zKCklMjBpZiUyMGslMjBub3QlMjBpbiUyMCU1QiUyMmlkeCUyMiUyQyUyMCUyMnNlbnRlbmNlMSUyMiUyQyUyMCUyMnNlbnRlbmNlMiUyMiU1RCU3RCUwQSU1Qmxlbih4KSUyMGZvciUyMHglMjBpbiUyMHNhbXBsZXMlNUIlMjJpbnB1dF9pZHMlMjIlNUQlNUQ=",highlighted:`samples = tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][:<span class="hljs-number">8</span>]
samples = {k: v <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> samples.items() <span class="hljs-keyword">if</span> k <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> [<span class="hljs-string">&quot;idx&quot;</span>, <span class="hljs-string">&quot;sentence1&quot;</span>, <span class="hljs-string">&quot;sentence2&quot;</span>]}
[<span class="hljs-built_in">len</span>(x) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> samples[<span class="hljs-string">&quot;input_ids&quot;</span>]]`,wrap:!1}}),He=new w({props:{code:"JTVCNTAlMkMlMjA1OSUyQyUyMDQ3JTJDJTIwNjclMkMlMjA1OSUyQyUyMDUwJTJDJTIwNjIlMkMlMjAzMiU1RA==",highlighted:'[<span class="hljs-number">50</span>, <span class="hljs-number">59</span>, <span class="hljs-number">47</span>, <span class="hljs-number">67</span>, <span class="hljs-number">59</span>, <span class="hljs-number">50</span>, <span class="hljs-number">62</span>, <span class="hljs-number">32</span>]',wrap:!1}}),Se=new w({props:{code:"YmF0Y2glMjAlM0QlMjBkYXRhX2NvbGxhdG9yKHNhbXBsZXMpJTBBJTdCayUzQSUyMHYuc2hhcGUlMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwYmF0Y2guaXRlbXMoKSU3RA==",highlighted:`batch = data_collator(samples)
{k: v.shape <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}`,wrap:!1}});const ha=[ll,al],Oe=[];function Ua(e,s){return e[0]==="tf"?0:1}Q=Ua(h),N=Oe[Q]=ha[Q](h),H=new Ut({props:{$$slots:{default:[nl]},$$scope:{ctx:h}}});let k=h[0]==="tf"&&xa();return De=new Xa({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ro/chapter3/2.mdx"}}),{c(){t=m("meta"),i=r(),a=m("p"),p=r(),f(U.$$.fragment),d=r(),f($.$$.fragment),V=r(),f(T.$$.fragment),G=r(),C.c(),ts=r(),x.c(),as=r(),Y=m("p"),Y.textContent=vt,ds=r(),S=m("p"),S.innerHTML=zt,ms=r(),f(D.$$.fragment),Ms=r(),z.c(),ls=r(),F=m("p"),F.innerHTML=It,fs=r(),q=m("p"),q.textContent=At,ys=r(),f(B.$$.fragment),js=r(),f(L.$$.fragment),Js=r(),f(P.$$.fragment),bs=r(),K=m("p"),K.innerHTML=Rt,hs=r(),O=m("p"),O.innerHTML=Zt,Us=r(),ee=m("p"),ee.innerHTML=Qt,Ts=r(),f(se.$$.fragment),ws=r(),f(te.$$.fragment),$s=r(),ae=m("p"),ae.innerHTML=Nt,ks=r(),f(le.$$.fragment),_s=r(),f(ne.$$.fragment),Cs=r(),ie=m("p"),ie.innerHTML=Gt,gs=r(),f(W.$$.fragment),xs=r(),f(re.$$.fragment),vs=r(),A.c(),ns=r(),ce=m("p"),ce.innerHTML=Vt,zs=r(),f(pe.$$.fragment),Is=r(),ue=m("p"),ue.textContent=Xt,As=r(),f(oe.$$.fragment),Rs=r(),f(de.$$.fragment),Zs=r(),me=m("p"),me.innerHTML=Bt,Qs=r(),f(E.$$.fragment),Ns=r(),Me=m("p"),Me.innerHTML=Wt,Gs=r(),f(fe.$$.fragment),Vs=r(),ye=m("p"),ye.textContent=Et,Xs=r(),f(je.$$.fragment),Bs=r(),Je=m("p"),Je.innerHTML=Ht,Ws=r(),f(be.$$.fragment),Es=r(),he=m("p"),he.innerHTML=Yt,Hs=r(),Ue=m("p"),Ue.innerHTML=St,Ys=r(),Te=m("p"),Te.innerHTML=Dt,Ss=r(),we=m("p"),we.textContent=Ft,Ds=r(),$e=m("p"),$e.innerHTML=qt,Fs=r(),ke=m("p"),ke.innerHTML=Lt,qs=r(),f(_e.$$.fragment),Ls=r(),Ce=m("p"),Ce.innerHTML=Pt,Ps=r(),ge=m("p"),ge.innerHTML=Kt,Ks=r(),f(xe.$$.fragment),Os=r(),ve=m("p"),ve.innerHTML=Ot,et=r(),ze=m("p"),ze.innerHTML=ea,st=r(),Ie=m("p"),Ie.innerHTML=sa,tt=r(),f(Ae.$$.fragment),at=r(),Re=m("p"),Re.textContent=ta,lt=r(),f(Ze.$$.fragment),nt=r(),Qe=m("p"),Qe.innerHTML=aa,it=r(),Ne=m("p"),Ne.innerHTML=la,rt=r(),Ge=m("p"),Ge.innerHTML=na,ct=r(),f(Ve.$$.fragment),pt=r(),f(Xe.$$.fragment),ut=r(),X.c(),is=r(),Be=m("p"),Be.innerHTML=ia,ot=r(),Z.c(),rs=r(),We=m("p"),We.innerHTML=ra,dt=r(),f(Ee.$$.fragment),mt=r(),f(He.$$.fragment),Mt=r(),Ye=m("p"),Ye.innerHTML=ca,ft=r(),f(Se.$$.fragment),yt=r(),N.c(),cs=r(),f(H.$$.fragment),jt=r(),k&&k.c(),ps=r(),f(De.$$.fragment),Jt=r(),us=m("p"),this.h()},l(e){const s=Za("svelte-u9bgzb",document.head);t=M(s,"META",{name:!0,content:!0}),s.forEach(l),i=c(e),a=M(e,"P",{}),Ca(a).forEach(l),p=c(e),y(U.$$.fragment,e),d=c(e),y($.$$.fragment,e),V=c(e),y(T.$$.fragment,e),G=c(e),C.l(e),ts=c(e),x.l(e),as=c(e),Y=M(e,"P",{"data-svelte-h":!0}),b(Y)!=="svelte-1h1n6eo"&&(Y.textContent=vt),ds=c(e),S=M(e,"P",{"data-svelte-h":!0}),b(S)!=="svelte-er7oyk"&&(S.innerHTML=zt),ms=c(e),y(D.$$.fragment,e),Ms=c(e),z.l(e),ls=c(e),F=M(e,"P",{"data-svelte-h":!0}),b(F)!=="svelte-9p75fe"&&(F.innerHTML=It),fs=c(e),q=M(e,"P",{"data-svelte-h":!0}),b(q)!=="svelte-p2wsyd"&&(q.textContent=At),ys=c(e),y(B.$$.fragment,e),js=c(e),y(L.$$.fragment,e),Js=c(e),y(P.$$.fragment,e),bs=c(e),K=M(e,"P",{"data-svelte-h":!0}),b(K)!=="svelte-7fidqn"&&(K.innerHTML=Rt),hs=c(e),O=M(e,"P",{"data-svelte-h":!0}),b(O)!=="svelte-bdivss"&&(O.innerHTML=Zt),Us=c(e),ee=M(e,"P",{"data-svelte-h":!0}),b(ee)!=="svelte-9q0kmq"&&(ee.innerHTML=Qt),Ts=c(e),y(se.$$.fragment,e),ws=c(e),y(te.$$.fragment,e),$s=c(e),ae=M(e,"P",{"data-svelte-h":!0}),b(ae)!=="svelte-obhnau"&&(ae.innerHTML=Nt),ks=c(e),y(le.$$.fragment,e),_s=c(e),y(ne.$$.fragment,e),Cs=c(e),ie=M(e,"P",{"data-svelte-h":!0}),b(ie)!=="svelte-srlw61"&&(ie.innerHTML=Gt),gs=c(e),y(W.$$.fragment,e),xs=c(e),y(re.$$.fragment,e),vs=c(e),A.l(e),ns=c(e),ce=M(e,"P",{"data-svelte-h":!0}),b(ce)!=="svelte-dhezjq"&&(ce.innerHTML=Vt),zs=c(e),y(pe.$$.fragment,e),Is=c(e),ue=M(e,"P",{"data-svelte-h":!0}),b(ue)!=="svelte-crqhbi"&&(ue.textContent=Xt),As=c(e),y(oe.$$.fragment,e),Rs=c(e),y(de.$$.fragment,e),Zs=c(e),me=M(e,"P",{"data-svelte-h":!0}),b(me)!=="svelte-1ajdmb1"&&(me.innerHTML=Bt),Qs=c(e),y(E.$$.fragment,e),Ns=c(e),Me=M(e,"P",{"data-svelte-h":!0}),b(Me)!=="svelte-41t2gc"&&(Me.innerHTML=Wt),Gs=c(e),y(fe.$$.fragment,e),Vs=c(e),ye=M(e,"P",{"data-svelte-h":!0}),b(ye)!=="svelte-1ef2ow8"&&(ye.textContent=Et),Xs=c(e),y(je.$$.fragment,e),Bs=c(e),Je=M(e,"P",{"data-svelte-h":!0}),b(Je)!=="svelte-jj6335"&&(Je.innerHTML=Ht),Ws=c(e),y(be.$$.fragment,e),Es=c(e),he=M(e,"P",{"data-svelte-h":!0}),b(he)!=="svelte-shtene"&&(he.innerHTML=Yt),Hs=c(e),Ue=M(e,"P",{"data-svelte-h":!0}),b(Ue)!=="svelte-m0tnwd"&&(Ue.innerHTML=St),Ys=c(e),Te=M(e,"P",{"data-svelte-h":!0}),b(Te)!=="svelte-t0he6h"&&(Te.innerHTML=Dt),Ss=c(e),we=M(e,"P",{"data-svelte-h":!0}),b(we)!=="svelte-1booql3"&&(we.textContent=Ft),Ds=c(e),$e=M(e,"P",{"data-svelte-h":!0}),b($e)!=="svelte-1iepd6h"&&($e.innerHTML=qt),Fs=c(e),ke=M(e,"P",{"data-svelte-h":!0}),b(ke)!=="svelte-6vdjci"&&(ke.innerHTML=Lt),qs=c(e),y(_e.$$.fragment,e),Ls=c(e),Ce=M(e,"P",{"data-svelte-h":!0}),b(Ce)!=="svelte-eogop2"&&(Ce.innerHTML=Pt),Ps=c(e),ge=M(e,"P",{"data-svelte-h":!0}),b(ge)!=="svelte-q26wyf"&&(ge.innerHTML=Kt),Ks=c(e),y(xe.$$.fragment,e),Os=c(e),ve=M(e,"P",{"data-svelte-h":!0}),b(ve)!=="svelte-1snx46m"&&(ve.innerHTML=Ot),et=c(e),ze=M(e,"P",{"data-svelte-h":!0}),b(ze)!=="svelte-1qa3syi"&&(ze.innerHTML=ea),st=c(e),Ie=M(e,"P",{"data-svelte-h":!0}),b(Ie)!=="svelte-12c0o4j"&&(Ie.innerHTML=sa),tt=c(e),y(Ae.$$.fragment,e),at=c(e),Re=M(e,"P",{"data-svelte-h":!0}),b(Re)!=="svelte-qbc1th"&&(Re.textContent=ta),lt=c(e),y(Ze.$$.fragment,e),nt=c(e),Qe=M(e,"P",{"data-svelte-h":!0}),b(Qe)!=="svelte-1t4o8ez"&&(Qe.innerHTML=aa),it=c(e),Ne=M(e,"P",{"data-svelte-h":!0}),b(Ne)!=="svelte-3cb5wm"&&(Ne.innerHTML=la),rt=c(e),Ge=M(e,"P",{"data-svelte-h":!0}),b(Ge)!=="svelte-npadkx"&&(Ge.innerHTML=na),ct=c(e),y(Ve.$$.fragment,e),pt=c(e),y(Xe.$$.fragment,e),ut=c(e),X.l(e),is=c(e),Be=M(e,"P",{"data-svelte-h":!0}),b(Be)!=="svelte-1xr5zdt"&&(Be.innerHTML=ia),ot=c(e),Z.l(e),rs=c(e),We=M(e,"P",{"data-svelte-h":!0}),b(We)!=="svelte-qln37x"&&(We.innerHTML=ra),dt=c(e),y(Ee.$$.fragment,e),mt=c(e),y(He.$$.fragment,e),Mt=c(e),Ye=M(e,"P",{"data-svelte-h":!0}),b(Ye)!=="svelte-1p27hdg"&&(Ye.innerHTML=ca),ft=c(e),y(Se.$$.fragment,e),yt=c(e),N.l(e),cs=c(e),y(H.$$.fragment,e),jt=c(e),k&&k.l(e),ps=c(e),y(De.$$.fragment,e),Jt=c(e),us=M(e,"P",{}),Ca(us).forEach(l),this.h()},h(){ga(t,"name","hf:doc:metadata"),ga(t,"content",rl)},m(e,s){Qa(document.head,t),n(e,i,s),n(e,a,s),n(e,p,s),j(U,e,s),n(e,d,s),j($,e,s),n(e,V,s),j(T,e,s),n(e,G,s),Fe[_].m(e,s),n(e,ts,s),qe[g].m(e,s),n(e,as,s),n(e,Y,s),n(e,ds,s),n(e,S,s),n(e,ms,s),j(D,e,s),n(e,Ms,s),Le[v].m(e,s),n(e,ls,s),n(e,F,s),n(e,fs,s),n(e,q,s),n(e,ys,s),j(B,e,s),n(e,js,s),j(L,e,s),n(e,Js,s),j(P,e,s),n(e,bs,s),n(e,K,s),n(e,hs,s),n(e,O,s),n(e,Us,s),n(e,ee,s),n(e,Ts,s),j(se,e,s),n(e,ws,s),j(te,e,s),n(e,$s,s),n(e,ae,s),n(e,ks,s),j(le,e,s),n(e,_s,s),j(ne,e,s),n(e,Cs,s),n(e,ie,s),n(e,gs,s),j(W,e,s),n(e,xs,s),j(re,e,s),n(e,vs,s),Pe[I].m(e,s),n(e,ns,s),n(e,ce,s),n(e,zs,s),j(pe,e,s),n(e,Is,s),n(e,ue,s),n(e,As,s),j(oe,e,s),n(e,Rs,s),j(de,e,s),n(e,Zs,s),n(e,me,s),n(e,Qs,s),j(E,e,s),n(e,Ns,s),n(e,Me,s),n(e,Gs,s),j(fe,e,s),n(e,Vs,s),n(e,ye,s),n(e,Xs,s),j(je,e,s),n(e,Bs,s),n(e,Je,s),n(e,Ws,s),j(be,e,s),n(e,Es,s),n(e,he,s),n(e,Hs,s),n(e,Ue,s),n(e,Ys,s),n(e,Te,s),n(e,Ss,s),n(e,we,s),n(e,Ds,s),n(e,$e,s),n(e,Fs,s),n(e,ke,s),n(e,qs,s),j(_e,e,s),n(e,Ls,s),n(e,Ce,s),n(e,Ps,s),n(e,ge,s),n(e,Ks,s),j(xe,e,s),n(e,Os,s),n(e,ve,s),n(e,et,s),n(e,ze,s),n(e,st,s),n(e,Ie,s),n(e,tt,s),j(Ae,e,s),n(e,at,s),n(e,Re,s),n(e,lt,s),j(Ze,e,s),n(e,nt,s),n(e,Qe,s),n(e,it,s),n(e,Ne,s),n(e,rt,s),n(e,Ge,s),n(e,ct,s),j(Ve,e,s),n(e,pt,s),j(Xe,e,s),n(e,ut,s),X.m(e,s),n(e,is,s),n(e,Be,s),n(e,ot,s),Ke[R].m(e,s),n(e,rs,s),n(e,We,s),n(e,dt,s),j(Ee,e,s),n(e,mt,s),j(He,e,s),n(e,Mt,s),n(e,Ye,s),n(e,ft,s),j(Se,e,s),n(e,yt,s),Oe[Q].m(e,s),n(e,cs,s),j(H,e,s),n(e,jt,s),k&&k.m(e,s),n(e,ps,s),j(De,e,s),n(e,Jt,s),n(e,us,s),bt=!0},p(e,[s]){const Ta={};s&1&&(Ta.fw=e[0]),U.$set(Ta);let wt=_;_=ua(e),_!==wt&&(ss(),o(Fe[wt],1,1,()=>{Fe[wt]=null}),es(),C=Fe[_],C||(C=Fe[_]=pa[_](e),C.c()),u(C,1),C.m(ts.parentNode,ts));let $t=g;g=da(e),g!==$t&&(ss(),o(qe[$t],1,1,()=>{qe[$t]=null}),es(),x=qe[g],x||(x=qe[g]=oa[g](e),x.c()),u(x,1),x.m(as.parentNode,as));let kt=v;v=Ma(e),v!==kt&&(ss(),o(Le[kt],1,1,()=>{Le[kt]=null}),es(),z=Le[v],z||(z=Le[v]=ma[v](e),z.c()),u(z,1),z.m(ls.parentNode,ls));const wa={};s&2&&(wa.$$scope={dirty:s,ctx:e}),B.$set(wa);const $a={};s&2&&($a.$$scope={dirty:s,ctx:e}),W.$set($a);let _t=I;I=ya(e),I!==_t&&(ss(),o(Pe[_t],1,1,()=>{Pe[_t]=null}),es(),A=Pe[I],A||(A=Pe[I]=fa[I](e),A.c()),u(A,1),A.m(ns.parentNode,ns));const ka={};s&2&&(ka.$$scope={dirty:s,ctx:e}),E.$set(ka),ht!==(ht=ja(e))&&(X.d(1),X=ht(e),X&&(X.c(),X.m(is.parentNode,is)));let Ct=R;R=ba(e),R!==Ct&&(ss(),o(Ke[Ct],1,1,()=>{Ke[Ct]=null}),es(),Z=Ke[R],Z||(Z=Ke[R]=Ja[R](e),Z.c()),u(Z,1),Z.m(rs.parentNode,rs));let gt=Q;Q=Ua(e),Q!==gt&&(ss(),o(Oe[gt],1,1,()=>{Oe[gt]=null}),es(),N=Oe[Q],N||(N=Oe[Q]=ha[Q](e),N.c()),u(N,1),N.m(cs.parentNode,cs));const _a={};s&2&&(_a.$$scope={dirty:s,ctx:e}),H.$set(_a),e[0]==="tf"?k?s&1&&u(k,1):(k=xa(),k.c(),u(k,1),k.m(ps.parentNode,ps)):k&&(ss(),o(k,1,1,()=>{k=null}),es())},i(e){bt||(u(U.$$.fragment,e),u($.$$.fragment,e),u(T.$$.fragment,e),u(C),u(x),u(D.$$.fragment,e),u(z),u(B.$$.fragment,e),u(L.$$.fragment,e),u(P.$$.fragment,e),u(se.$$.fragment,e),u(te.$$.fragment,e),u(le.$$.fragment,e),u(ne.$$.fragment,e),u(W.$$.fragment,e),u(re.$$.fragment,e),u(A),u(pe.$$.fragment,e),u(oe.$$.fragment,e),u(de.$$.fragment,e),u(E.$$.fragment,e),u(fe.$$.fragment,e),u(je.$$.fragment,e),u(be.$$.fragment,e),u(_e.$$.fragment,e),u(xe.$$.fragment,e),u(Ae.$$.fragment,e),u(Ze.$$.fragment,e),u(Ve.$$.fragment,e),u(Xe.$$.fragment,e),u(Z),u(Ee.$$.fragment,e),u(He.$$.fragment,e),u(Se.$$.fragment,e),u(N),u(H.$$.fragment,e),u(k),u(De.$$.fragment,e),bt=!0)},o(e){o(U.$$.fragment,e),o($.$$.fragment,e),o(T.$$.fragment,e),o(C),o(x),o(D.$$.fragment,e),o(z),o(B.$$.fragment,e),o(L.$$.fragment,e),o(P.$$.fragment,e),o(se.$$.fragment,e),o(te.$$.fragment,e),o(le.$$.fragment,e),o(ne.$$.fragment,e),o(W.$$.fragment,e),o(re.$$.fragment,e),o(A),o(pe.$$.fragment,e),o(oe.$$.fragment,e),o(de.$$.fragment,e),o(E.$$.fragment,e),o(fe.$$.fragment,e),o(je.$$.fragment,e),o(be.$$.fragment,e),o(_e.$$.fragment,e),o(xe.$$.fragment,e),o(Ae.$$.fragment,e),o(Ze.$$.fragment,e),o(Ve.$$.fragment,e),o(Xe.$$.fragment,e),o(Z),o(Ee.$$.fragment,e),o(He.$$.fragment,e),o(Se.$$.fragment,e),o(N),o(H.$$.fragment,e),o(k),o(De.$$.fragment,e),bt=!1},d(e){e&&(l(i),l(a),l(p),l(d),l(V),l(G),l(ts),l(as),l(Y),l(ds),l(S),l(ms),l(Ms),l(ls),l(F),l(fs),l(q),l(ys),l(js),l(Js),l(bs),l(K),l(hs),l(O),l(Us),l(ee),l(Ts),l(ws),l($s),l(ae),l(ks),l(_s),l(Cs),l(ie),l(gs),l(xs),l(vs),l(ns),l(ce),l(zs),l(Is),l(ue),l(As),l(Rs),l(Zs),l(me),l(Qs),l(Ns),l(Me),l(Gs),l(Vs),l(ye),l(Xs),l(Bs),l(Je),l(Ws),l(Es),l(he),l(Hs),l(Ue),l(Ys),l(Te),l(Ss),l(we),l(Ds),l($e),l(Fs),l(ke),l(qs),l(Ls),l(Ce),l(Ps),l(ge),l(Ks),l(Os),l(ve),l(et),l(ze),l(st),l(Ie),l(tt),l(at),l(Re),l(lt),l(nt),l(Qe),l(it),l(Ne),l(rt),l(Ge),l(ct),l(pt),l(ut),l(is),l(Be),l(ot),l(rs),l(We),l(dt),l(mt),l(Mt),l(Ye),l(ft),l(yt),l(cs),l(jt),l(ps),l(Jt),l(us)),l(t),J(U,e),J($,e),J(T,e),Fe[_].d(e),qe[g].d(e),J(D,e),Le[v].d(e),J(B,e),J(L,e),J(P,e),J(se,e),J(te,e),J(le,e),J(ne,e),J(W,e),J(re,e),Pe[I].d(e),J(pe,e),J(oe,e),J(de,e),J(E,e),J(fe,e),J(je,e),J(be,e),J(_e,e),J(xe,e),J(Ae,e),J(Ze,e),J(Ve,e),J(Xe,e),X.d(e),Ke[R].d(e),J(Ee,e),J(He,e),J(Se,e),Oe[Q].d(e),J(H,e),k&&k.d(e),J(De,e)}}}const rl='{"title":"Prelucrarea datelor","local":"prelucrarea-datelor","sections":[{"title":"Încărcarea unui set de date din Hub","local":"încărcarea-unui-set-de-date-din-Hub","sections":[],"depth":3},{"title":"Preprocesarea unui set de date","local":"preprocesarea-unui-set-de-date","sections":[],"depth":3},{"title":"Umplere dinamică","local":"umplere-dinamică","sections":[],"depth":3}],"depth":1}';function cl(h,t,i){let a="pt";return Ia(()=>{const p=new URLSearchParams(window.location.search);i(0,a=p.get("fw")||"pt")}),[a]}class jl extends Aa{constructor(t){super(),Ra(this,t,cl,il,za,{})}}export{jl as component};
