import{s as za,o as xa,n as _l}from"../chunks/scheduler.37c15a92.js";import{S as va,i as Ia,g as M,s as o,r as f,A as Ra,h as m,f as n,c as r,j as ka,u as h,x as y,k as $a,y as Za,a as t,v as j,t as d,b as Ke,d as c,w as b,m as Aa,n as Qa,p as Oe}from"../chunks/index.2bf4358c.js";import{T as bl}from"../chunks/Tip.363c041f.js";import{Y as ps}from"../chunks/Youtube.1e50a667.js";import{C as g}from"../chunks/CodeBlock.4e987730.js";import{D as Ca}from"../chunks/DocNotebookDropdown.efc1fb7c.js";import{F as Na}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Jl,E as Ga}from"../chunks/getInferenceSnippets.24b50994.js";function Ba(J){let l,i;return l=new Ca({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/it/chapter3/section2_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/it/chapter3/section2_tf.ipynb"}]}}),{c(){f(l.$$.fragment)},l(a){h(l.$$.fragment,a)},m(a,p){j(l,a,p),i=!0},i(a){i||(c(l.$$.fragment,a),i=!0)},o(a){d(l.$$.fragment,a),i=!1},d(a){b(l,a)}}}function Xa(J){let l,i;return l=new Ca({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/it/chapter3/section2_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/it/chapter3/section2_pt.ipynb"}]}}),{c(){f(l.$$.fragment)},l(a){h(l.$$.fragment,a)},m(a,p){j(l,a,p),i=!0},i(a){i||(c(l.$$.fragment,a),i=!0)},o(a){d(l.$$.fragment,a),i=!1},d(a){b(l,a)}}}function Va(J){let l,i='Continuando l’esempio del <a href="/course/chapter2">capitolo precedente</a>, ecco come addestrare un classificatore di sequenze su un’unica batch in TensorFlow:',a,p,T;return p=new g({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyMFNhbWUlMjBhcyUyMGJlZm9yZSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJiZXJ0LWJhc2UtdW5jYXNlZCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBc2VxdWVuY2VzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIySSd2ZSUyMGJlZW4lMjB3YWl0aW5nJTIwZm9yJTIwYSUyMEh1Z2dpbmdGYWNlJTIwY291cnNlJTIwbXklMjB3aG9sZSUyMGxpZmUuJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGNvdXJzZSUyMGlzJTIwYW1hemluZyElMjIlMkMlMEElNUQlMEFiYXRjaCUyMCUzRCUyMGRpY3QodG9rZW5pemVyKHNlcXVlbmNlcyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKSklMEElMEElMjMlMjBUaGlzJTIwaXMlMjBuZXclMEFtb2RlbC5jb21waWxlKG9wdGltaXplciUzRCUyMmFkYW0lMjIlMkMlMjBsb3NzJTNEJTIyc3BhcnNlX2NhdGVnb3JpY2FsX2Nyb3NzZW50cm9weSUyMiklMEFsYWJlbHMlMjAlM0QlMjB0Zi5jb252ZXJ0X3RvX3RlbnNvciglNUIxJTJDJTIwMSU1RCklMEFtb2RlbC50cmFpbl9vbl9iYXRjaChiYXRjaCUyQyUyMGxhYmVscyk=",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"># Same as before</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"># This is new</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(){l=M("p"),l.innerHTML=i,a=o(),f(p.$$.fragment)},l(u){l=m(u,"P",{"data-svelte-h":!0}),y(l)!=="svelte-1gvsw6g"&&(l.innerHTML=i),a=r(u),h(p.$$.fragment,u)},m(u,w){t(u,l,w),t(u,a,w),j(p,u,w),T=!0},i(u){T||(c(p.$$.fragment,u),T=!0)},o(u){d(p.$$.fragment,u),T=!1},d(u){u&&(n(l),n(a)),b(p,u)}}}function Wa(J){let l,i='Continuando l’esempio del <a href="/course/chapter2">capitolo precedente</a>, ecco come addestrare un classificatore di sequenze su un’unica batch in PyTorch:',a,p,T;return p=new g({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdG9yY2gub3B0aW0lMjBpbXBvcnQlMjBBZGFtVyUwQWZyb20lMjB0cmFuc2Zvcm1lcnMlMjBpbXBvcnQlMjBBdXRvVG9rZW5pemVyJTJDJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyMFNhbWUlMjBhcyUyMGJlZm9yZSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJiZXJ0LWJhc2UtdW5jYXNlZCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQXNlcXVlbmNlcyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMlRoaXMlMjBjb3Vyc2UlMjBpcyUyMGFtYXppbmchJTIyJTJDJTBBJTVEJTBBYmF0Y2glMjAlM0QlMjB0b2tlbml6ZXIoc2VxdWVuY2VzJTJDJTIwcGFkZGluZyUzRFRydWUlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBJTBBJTIzJTIwVGhpcyUyMGlzJTIwbmV3JTBBYmF0Y2glNUIlMjJsYWJlbHMlMjIlNUQlMjAlM0QlMjB0b3JjaC50ZW5zb3IoJTVCMSUyQyUyMDElNUQpJTBBJTBBb3B0aW1pemVyJTIwJTNEJTIwQWRhbVcobW9kZWwucGFyYW1ldGVycygpKSUwQWxvc3MlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKS5sb3NzJTBBbG9zcy5iYWNrd2FyZCgpJTBBb3B0aW1pemVyLnN0ZXAoKQ==",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModelForSequenceClassification

<span class="hljs-comment"># Same as before</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"># This is new</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(){l=M("p"),l.innerHTML=i,a=o(),f(p.$$.fragment)},l(u){l=m(u,"P",{"data-svelte-h":!0}),y(l)!=="svelte-n6yj40"&&(l.innerHTML=i),a=r(u),h(p.$$.fragment,u)},m(u,w){t(u,l,w),t(u,a,w),j(p,u,w),T=!0},i(u){T||(c(p.$$.fragment,u),T=!0)},o(u){d(p.$$.fragment,u),T=!1},d(u){u&&(n(l),n(a)),b(p,u)}}}function Ea(J){let l,i;return l=new ps({props:{id:"W_gMJF0xomE"}}),{c(){f(l.$$.fragment)},l(a){h(l.$$.fragment,a)},m(a,p){j(l,a,p),i=!0},i(a){i||(c(l.$$.fragment,a),i=!0)},o(a){d(l.$$.fragment,a),i=!1},d(a){b(l,a)}}}function qa(J){let l,i;return l=new ps({props:{id:"_BZearw7f0w"}}),{c(){f(l.$$.fragment)},l(a){h(l.$$.fragment,a)},m(a,p){j(l,a,p),i=!0},i(a){i||(c(l.$$.fragment,a),i=!0)},o(a){d(l.$$.fragment,a),i=!1},d(a){b(l,a)}}}function Ha(J){let l;return{c(){l=Aa("⚠️ **Attenzione** Assicurati che `datasets` sia installato eseguendo `pip install datasets`. Poi, carica il dataset MRPC e stampalo per vedere cosa contiene.")},l(i){l=Qa(i,"⚠️ **Attenzione** Assicurati che `datasets` sia installato eseguendo `pip install datasets`. Poi, carica il dataset MRPC e stampalo per vedere cosa contiene.")},m(i,a){t(i,l,a)},d(i){i&&n(l)}}}function Sa(J){let l,i="✏️ <strong>Prova tu!</strong> Quali sono le label dell’elemento 15 del training set, e 87 del validation set?";return{c(){l=M("p"),l.innerHTML=i},l(a){l=m(a,"P",{"data-svelte-h":!0}),y(l)!=="svelte-14bdeeg"&&(l.innerHTML=i)},m(a,p){t(a,l,p)},p:_l,d(a){a&&n(l)}}}function Ya(J){let l,i;return l=new ps({props:{id:"P-rZWqcB6CE"}}),{c(){f(l.$$.fragment)},l(a){h(l.$$.fragment,a)},m(a,p){j(l,a,p),i=!0},i(a){i||(c(l.$$.fragment,a),i=!0)},o(a){d(l.$$.fragment,a),i=!1},d(a){b(l,a)}}}function Da(J){let l,i;return l=new ps({props:{id:"0u3ioSwev3s"}}),{c(){f(l.$$.fragment)},l(a){h(l.$$.fragment,a)},m(a,p){j(l,a,p),i=!0},i(a){i||(c(l.$$.fragment,a),i=!0)},o(a){d(l.$$.fragment,a),i=!1},d(a){b(l,a)}}}function Fa(J){let l,i="✏️ <strong>Prova tu!</strong> Prendere l’element 15 del training set e tokenizzare le due frasi sia separatamente, sia come coppia. Qual è la differenza tra i due risultati?";return{c(){l=M("p"),l.innerHTML=i},l(a){l=m(a,"P",{"data-svelte-h":!0}),y(l)!=="svelte-1e1ww5r"&&(l.innerHTML=i)},m(a,p){t(a,l,p)},p:_l,d(a){a&&n(l)}}}function La(J){let l,i="La funzione responsabile dell’assembramento dei campioni in una batch si chiama <em>collate function</em> (<em>funzione di raccolta</em>). Il collator (raccoglitore) di default è la funzione che converte semplicemente i campioni in tf.Tensor e li concatena (ricorsivamente nel caso in cui gli elementi siano liste, tuple o dizionari). Ciò non sarà possibile nel nostro caso poiché gli input non hanno tutti la stessa lunghezza. Abbiamo rimandato il padding apposta, per poterlo applicare secondo necessità ad ogni batch, evitando quindi input troppo lunghi con molto padding. Ciò accelererà l’addestramento di un bel po’, ma può causare problemi se l’addestramento avviene su TPU — le TPU preferiscono dimensioni fisse, anche se ciò richiede del padding in più.";return{c(){l=M("p"),l.innerHTML=i},l(a){l=m(a,"P",{"data-svelte-h":!0}),y(l)!=="svelte-1apxuyl"&&(l.innerHTML=i)},m(a,p){t(a,l,p)},d(a){a&&n(l)}}}function Pa(J){let l,i="La funzione responsabile dell’assembramento dei campioni in una batch si chiama <em>collate function</em> (<em>funzione di raccolta</em>). È uno dei parametri che si possono passare quando si costruisce un <code>DataLoader</code>, e il default è la funzione che converte semplicemente i campioni in tensori PyTorch e li concatena (ricorsivamente nel caso in cui gli elementi siano liste, tuple o dizionari). Ciò non sarà possibile nel nostro caso poiché gli input non hanno tutti la stessa lunghezza. Abbiamo rimandato il padding apposta, per poterlo applicare secondo necessità ad ogni batch, evitando quindi input troppo lunghi con molto padding. Ciò accelererà l’addestramento di un bel po’, ma può causare problemi se l’addestramento avviene su TPU — le TPU preferiscono dimensioni fisse, anche se ciò richiede del padding in più.";return{c(){l=M("p"),l.innerHTML=i},l(a){l=m(a,"P",{"data-svelte-h":!0}),y(l)!=="svelte-hhf36y"&&(l.innerHTML=i)},m(a,p){t(a,l,p)},d(a){a&&n(l)}}}function Ka(J){let l,i;return l=new g({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(l.$$.fragment)},l(a){h(l.$$.fragment,a)},m(a,p){j(l,a,p),i=!0},i(a){i||(c(l.$$.fragment,a),i=!0)},o(a){d(l.$$.fragment,a),i=!1},d(a){b(l,a)}}}function Oa(J){let l,i;return l=new g({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(l.$$.fragment)},l(a){h(l.$$.fragment,a)},m(a,p){j(l,a,p),i=!0},i(a){i||(c(l.$$.fragment,a),i=!0)},o(a){d(l.$$.fragment,a),i=!1},d(a){b(l,a)}}}function en(J){let l,i,a,p="Ottimo! Adesso che siamo passati dal testo grezzo a dei batch che il modello è in grado di trattare, siamo pronti per affinarlo!",T;return l=new g({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(l.$$.fragment),i=o(),a=M("p"),a.textContent=p},l(u){h(l.$$.fragment,u),i=r(u),a=m(u,"P",{"data-svelte-h":!0}),y(a)!=="svelte-1oo6tmy"&&(a.textContent=p)},m(u,w){j(l,u,w),t(u,i,w),t(u,a,w),T=!0},i(u){T||(c(l.$$.fragment,u),T=!0)},o(u){d(l.$$.fragment,u),T=!1},d(u){u&&(n(i),n(a)),b(l,u)}}}function sn(J){let l,i;return l=new g({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(l.$$.fragment)},l(a){h(l.$$.fragment,a)},m(a,p){j(l,a,p),i=!0},i(a){i||(c(l.$$.fragment,a),i=!0)},o(a){d(l.$$.fragment,a),i=!1},d(a){b(l,a)}}}function ln(J){let l,i="✏️ <strong>Prova tu!</strong> Replicare il preprocessing sul dataset GLUE SST-2. È leggermente diverso poiche è composto da frasi singole e non da coppie di frasi, ma il resto della procedura dovrebbe essere simile. Per una sfida più complessa, provare a scrivere una funzione di preprocessing che funzioni per qualsiasi dei compiti in GLUE.";return{c(){l=M("p"),l.innerHTML=i},l(a){l=m(a,"P",{"data-svelte-h":!0}),y(l)!=="svelte-9vabyn"&&(l.innerHTML=i)},m(a,p){t(a,l,p)},p:_l,d(a){a&&n(l)}}}function _a(J){let l,i=`Ora che sono stati definiti un dataset e un collator di dati, dobbiamo metterli insieme. Si potrebbero caricare e raccogliere i batch manualmente, ma significherebbe molto lavoro e probabilmente una bassa performance. Invece, vi è un metodo semplice che offre una soluzione con buona performance a questo problema: <code>to_tf_dataset()</code>. Questo impacchetterà il dataset con <code>tf.data.Dataset</code>, con una collate function opzionale.
<code>tf.data.Dataset</code> è un formato nativo di TensorFlow che Keras può utilizzare durante <code>model.fit()</code>, cosicché questo metodo converte immediatamente un 🤗 Dataset in un formato pronto per l’addestramento. Vediamolo in azione col nostro dataset!`,a,p,T,u,w="Fine! Questi dataset verranno utilizzati nelle prossime lezioni, dove l’addestramento sarà reso piacevolmente immediato dopo tutto questo duro lavoro di preprocessing.",N;return p=new g({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(){l=M("p"),l.innerHTML=i,a=o(),f(p.$$.fragment),T=o(),u=M("p"),u.textContent=w},l(U){l=m(U,"P",{"data-svelte-h":!0}),y(l)!=="svelte-18ansf7"&&(l.innerHTML=i),a=r(U),h(p.$$.fragment,U),T=r(U),u=m(U,"P",{"data-svelte-h":!0}),y(u)!=="svelte-18c3ffn"&&(u.textContent=w)},m(U,$){t(U,l,$),t(U,a,$),j(p,U,$),t(U,T,$),t(U,u,$),N=!0},i(U){N||(c(p.$$.fragment,U),N=!0)},o(U){d(p.$$.fragment,U),N=!1},d(U){U&&(n(l),n(a),n(T),n(u)),b(p,U)}}}function an(J){let l,i,a,p,T,u,w,N,U,$,es,_,C,ss,E,Cl="Ovviamente, addestrare il modello su due frasi non porterà a dei risultati molto buoni. Per ottenere risultati migliori, si deve preparare un dataset più grande.",cs,q,zl='In questa sezione verrà usato come esempio il dataset MRPC (Microsoft Research Paraphrase Corpus), presentato nell’<a href="https://www.aclweb.org/anthology/I05-5002.pdf" rel="nofollow">articolo</a> di William B. Dolan e Chris Brockett. Il dataset contiene 5801 coppie di frasi, con una label che indica se l’una è una parafrasi dell’altra (i.e. se hanno lo stesso significato). È stato selezionato per questo capitolo perché è un dataset piccolo, con cui è facile sperimentare durante l’addestramento.',us,H,ds,z,x,ls,S,xl='L’Hub non contiene solo modelli; contiene anche molti dataset in tante lingue diverse. I dataset possono essere esplorati <a href="https://huggingface.co/datasets" rel="nofollow">qui</a>, ed è consigliato tentare di caricare e processare un nuovo dataset dopo aver completato questa sezione (cfr. la <a href="https://huggingface.co/docs/datasets/loading" rel="nofollow">documentazione</a>. Per ora, focalizziamoci sul dataset MRPC! Questo è uno dei 10 dataset che fanno parte del <a href="https://gluebenchmark.com/" rel="nofollow">GLUE benchmark</a>, che è un benchmark accademico usato per misurare la performance di modelli ML su 10 compiti di classificazione del testo.',Ms,Y,vl="La libreria 🤗 Datasets fornisce un comando molto semplice per scaricare e mettere nella cache un dataset sull’Hub. Il dataset MRPC può essere scaricato così:",ms,B,ys,D,fs,F,hs,L,Il="Il risultato è un oggetto di tipo <code>DatasetDict</code> che contiene il training set, il validation set, e il test set. Ciascuno di questi contiene svariate colonne, (<code>sentence1</code>, <code>sentence2</code>, <code>label</code>, e <code>idx</code>) a un numero variabile di righe, corrispondenti al numero di elementi in ogni set (quindi, vi sono 3668 coppie di frasi nel training set, 408 nel validation set, e 1725 nel test set).",js,P,Rl="Questo comando scarica il dataset e lo mette in cache, in <em>~/.cache/huggingface/dataset</em> secondo l’impostazione predefinita. Nel Capitolo 2 è stato spiegato come personalizzare la cartella di cache impostando la variabile d’ambiente <code>HF_HOME</code>.",bs,K,Zl="Ogni coppia di frasi nell’oggetto <code>raw_datasets</code> può essere ottenuta tramite il suo indice, come in un dizionario:",Js,O,Us,ee,Ts,se,Al="Le label sono già numeri interi, quindi non è necessario alcun preprocessing. Per sapere a quale numero corrisponde quale tipo di label, si possono analizzare le <code>features</code> del <code>raw_train_dataset</code>. Ciò permette di capire la tipologia di ogni colonna:",gs,le,ws,ae,ks,ne,Ql="Dietro le quinte, <code>label</code> è del tipo  <code>ClassLabel</code>, e la corrispondenza tra i numeri e i nomi delle label è contenuta nella cartella <em>names</em>. <code>0</code> corrisponde a <code>not_equivalent</code> (significato diverso), e <code>1</code> corrisponde a <code>equivalent</code> (stesso significato).",$s,X,_s,te,Cs,v,I,as,ie,Nl='Per preprocessare il dataset, è necessario convertire il testo in numeri comprensibili al modello. Come dimostrato nel <a href="/course/chapter2">capitolo precedente</a>, ciò viene fatto con un tokenizer (tokenizzatore). Il tokenizer prende come input sia una frase sia una lista di frasi, quindi è possibile effettuare la tokenizzazione di tutte le prime e seconde frasi di ogni coppia in questo modo:',zs,oe,xs,re,Gl="Tuttavia, non si possono semplicemente passare al modello due frasi e sperare di predire se l’una è una parafrasi dell’altra o no. Bisogna gestire le due frasi come una coppia, e applicare il preprocessing necessario. Fortunatamente, il tokenizer può anche prendere come input una coppia di frasi e prepararla nel formato atteso dal modello BERT:",vs,pe,Is,ce,Rs,ue,Bl='Sono state già discusse nel <a href="/course/chapter2">Capitolo 2</a> le chiavi <code>input_ids</code> e <code>attention_mask</code>, ma il discorso su <code>token_type_ids</code> era stato rimandato. In questo esempio, ciò può essere usato per indicare al modello quale parte dell’input è la prima frase, e quale la seconda.',Zs,V,As,de,Xl="Decodificando gli ID in <code>input_ids</code> per ritrasformarli in parole:",Qs,Me,Ns,me,Vl="si ottiene:",Gs,ye,Bs,fe,Wl="Perciò è chiaro che il modello si aspetta gli input nella forma <code>[CLS] frase1 [SEP] frase2 [SEP]</code> quando vi sono due frasi. Allineando con <code>token_type_ids</code> si ottiene:",Xs,he,Vs,je,El="Le parti dell’input corrispondenti a <code>[CLS] frase1 [SEP]</code> hanno tutte un token type ID di <code>0</code>, mentre le altre parti, corrispondenti quindi a <code>frase2 [SEP]</code>, hanno tutte un token type ID di <code>1</code>.",Ws,be,ql="Da notare che se viene selezionato un altro checkpoint, gli input tokenizzati non conterranno necessariamente i <code>token_type_ids</code> (ad esempio, non si ottengono usando un modello DistilBERT). I <code>token_type_ids</code> si ottengono solo quando il modello saprebbe che farne, avendole già viste in fase di pre-addestramento.",Es,Je,Hl='In questo caso, BERT è stato pre-addestrato con i token type IDs, e in aggiunta all’obiettivo di <em>masked language modeling</em> di cui si era parlato nel <a href="/course/chapter1">Capitolo 1</a>, vi è un altro obiettivo che si chiama <em>next sentence prediction</em> (<em>predire la prossima frase</em>). Lo scopo di questo task è modellizzare la relazione tra coppie di frasi.',qs,Ue,Sl="Durante un task di next sentence prediction, il modello riceve una coppia di frasi (con token mascherati in maniera aleatoria) e deve predire se la seconda segue la prima. Per rendere il task meno banale, la metà delle volte le frasi si susseguono nel documento da cui erano state estratte originariamente, l’altra metà delle volte le frasi provengono da due documenti diversi.",Hs,Te,Yl="In generale, non bisogna preoccuparsi se i <code>token_type_ids</code> sono presenti o no negli input tokenizzati: finché viene usato lo stesso checkpoint per il tokenizer e il modello, tutto andrà bene poiché il tokenizer sa cosa fornire al modello.",Ss,ge,Dl='Ora che abbiamo visto come il tokenizer può gestire una coppia di frasi, possiamo usarlo per tokenizzare l’intero dataset: come nel <a href="/course/chapter2">capitolo precedente</a>, si può fornire al tokenizer una lista di coppie di frasi dando prima la lista delle prime frasi, e poi la lista delle seconde frasi. Questo approcchio è anche compatibile le opzioni di padding e truncation già viste nel <a href="/course/chapter2">Capitolo 2</a>. Perciò, un modo per preprocessare il dataset di addestramento è:',Ys,we,Ds,ke,Fl='Questo metodo funziona, ma ha lo svantaggio di restituire un dizionario (avente <code>input_ids</code>, <code>attention_mask</code>, e <code>token_type_ids</code> come chiavi, e delle liste di liste come valori). Oltretutto, questo metodo funziona solo se si ha a disposizione RAM sufficiente per contenere l’intero dataset durante la tokenizzazione (mentre i dataset dalla libreria 🤗 Datasets sono file <a href="https://arrow.apache.org/" rel="nofollow">Apache Arrow</a> archiviati su disco, perciò in memoria vengono caricati solo i campioni richiesti).',Fs,$e,Ll='Per tenere i dati come dataset, utilizzare il metodo <a href="https://huggingface.co/docs/datasets/package_reference/main_classes#datasets.Dataset.map" rel="nofollow"><code>Dataset.map()</code></a>. Ciò permette anche della flessibilità extra, qualora fosse necessario del preprocessing aggiuntivo oltre alla tokenizzazione. Il metodo <code>map()</code> applica una funziona ad ogni elemento del dataset, perciò bisogna definire una funzione che tokenizzi gli input:',Ls,_e,Ps,Ce,Pl='Questa funzione riceve un dizionario (come gli elementi del nostro dataset) e restituisce un nuovo dizionario con input_ids<code>, </code>attention_mask<code>, e </code>token_type_ids<code>come chiavi. Funziona anche se il dizionario</code>example<code>contiene svariati campioni (ad una chiave corrisponde una lista di frasi) poiché il</code>tokenizer<code>funziona con liste di coppie di frasi, come già visto. Ciò permette di usare l&#39;opzione</code>batched=True<code>nella chiamata a</code>map()<code>, che accelererà di molto la tokenizzazione. Il </code>tokenizer` si appoggia ad un tokenizer scritto in Rust della libreria <a href="https://github.com/huggingface/tokenizers" rel="nofollow">🤗 Tokenizers</a>. Questo tokenizer può essere molto veloce, ma solo se gli vengono forniti molti input insieme.',Ks,ze,Kl="Per ora non ci siamo preoccupati del parametro <code>padding</code> nella nostra funzione di tokenizzazione. Questo perché il padding di tutti i campioni fino a lunghezza massima non è efficiente: è meglio fare il padding dei campioni quando stiamo assemblando una batch, poiché in quel momento è necessario il padding solo fino alla lunghezza massima nel batch, non la lunghezza massima nell’intero dataset. Ciò permette di risparmiare molto tempo e potenza di calcolo nel caso in cui gli input abbiano lunghezze molto varie!",Os,xe,Ol="Ecco come si applica la funzione di tokenizzazione sull’intero dataset. Bisogna usare <code>batched=True</code> nella chiamata a <code>map</code> in modo tale che la funzione venga applicata a vari elementi del dataset insieme, e non ad ogni elemento separatamente. Ciò permette un preprocessing più rapido.",el,ve,sl,Ie,ea="La libreria 🤗 Datasets aggiunge nuovi campi ai dataset, uno per ogni chiave nel dizionario restituito dalla funzione di preprocessing:",ll,Re,al,Ze,sa="Si può anche applicare il multiprocessing durante il preprocessing con la funzione <code>map()</code> utilizzando il parametro <code>num_proc</code>. Ciò non è stato dimostrato qui perché la libreria 🤗 Tokenizers già utilizza vari thread per tokenizzare i campioni più rapidamente, ma nel caso in cui non venga usato un tokenizer rapido di questa libreria, ciò potrebbe velocizzare il preprocessing.",nl,Ae,la="La funzione <code>tokenize_function</code> restituisce un dizionario con <code>input_ids</code>, <code>attention_mask</code>, e <code>token_type_ids</code> come chiavi, quindi quei tre campi vengono aggiunti a tutti gli split (le parti) del dataset. Si possono anche cambiare i campi esistenti nel caso in cui la funzione di preprocessing restituisca un nuovo valore per una chiave già esistente nel dataset a cui viene applicato <code>map()</code>.",tl,Qe,aa="L’ultima cosa da fare è il padding di tutti i campioni alla lunghezza dell’elemento più lungo quando sono inseriti in una batch — una tecnica che si chiama <em>dynamic padding</em>.",il,Ne,ol,Ge,rl,ns,Be,na="In pratica, bisogna definire una collate function che applichi la giusta quantità di padding agli elementi del dataset in una stessa batch. Fortunatamente, la libreria 🤗 Transformers fornisce questa funziona tramite <code>DataCollatorWithPadding</code>. Essa prende in input un tokenizer quando viene istanziata (per individuare quale token da usare per il padding, e se il modello si aspetta padding a sinistra o a destra dell’input) e farà tutto il necessario:",pl,R,Z,ts,Xe,ta="Per testare questo nuovo gioco, analizziamo alcuni campioni dal set di addestramento da raggruppare in un batch. Adesso togliamo le colonne  <code>idx</code>, <code>sentence1</code>, e <code>sentence2</code> poiché non saranno necessarie e contengono stringhe (e non si possono creare tensori con stringhe), e controlliamo le lunghezze di ogni elemento nel batch:",cl,Ve,ul,We,dl,Ee,ia="Nulla di sorprendente, i campioni hanno lunghezza variabile da 32 a 67. Il padding dinamico significa che i campioni in questo batch dovrebbero tutti ricevere un padding fino alla lunghezza di 67, il massimo nel batch. Senza padding dinamico, tutti i campioni dovrebbero ricevere un padding fino alla lunghezza massima nell’intero dataset, o la lunghezza massima processabile dal modello. Bisogna controllare che il <code>data_collator</code> stia applicando un padding dinamico al batch in maniera corretta:",Ml,qe,ml,A,Q,is,W,yl,os,He,fl,rs,hl;T=new Na({props:{fw:J[0]}}),w=new Jl({props:{title:"Processare i dati",local:"processare-i-dati",headingTag:"h1"}});const oa=[Xa,Ba],Se=[];function ra(e,s){return e[0]==="pt"?0:1}U=ra(J),$=Se[U]=oa[U](J);const pa=[Wa,Va],Ye=[];function ca(e,s){return e[0]==="pt"?0:1}_=ca(J),C=Ye[_]=pa[_](J),H=new Jl({props:{title:"Caricare un dataset dall’Hub",local:"caricare-un-dataset-dallhub",headingTag:"h3"}});const ua=[qa,Ea],De=[];function da(e,s){return e[0]==="pt"?0:1}z=da(J),x=De[z]=ua[z](J),B=new bl({props:{$$slots:{default:[Ha]},$$scope:{ctx:J}}}),D=new g({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}}),F=new g({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}}),O=new g({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}}),ee=new g({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 g({props:{code:"cmF3X3RyYWluX2RhdGFzZXQuZmVhdHVyZXM=",highlighted:"raw_train_dataset.features",wrap:!1}}),ae=new g({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}}),X=new bl({props:{$$slots:{default:[Sa]},$$scope:{ctx:J}}}),te=new Jl({props:{title:"Preprocessing del dataset",local:"preprocessing-del-dataset",headingTag:"h3"}});const Ma=[Da,Ya],Fe=[];function ma(e,s){return e[0]==="pt"?0:1}v=ma(J),I=Fe[v]=Ma[v](J),oe=new g({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}}),pe=new g({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}}),ce=new g({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}}),V=new bl({props:{$$slots:{default:[Fa]},$$scope:{ctx:J}}}),Me=new g({props:{code:"dG9rZW5pemVyLmNvbnZlcnRfaWRzX3RvX3Rva2VucyhpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQp",highlighted:'tokenizer.convert_ids_to_tokens(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>])',wrap:!1}}),ye=new g({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}}),he=new g({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}}),we=new g({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}}),_e=new g({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}}),ve=new g({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}}),Re=new g({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}}),Ne=new Jl({props:{title:"Dynamic padding",local:"dynamic-padding",headingTag:"h3"}}),Ge=new ps({props:{id:"7q5NyFT8REg"}});function ya(e,s){return e[0]==="pt"?Pa:La}let jl=ya(J),G=jl(J);const fa=[Oa,Ka],Le=[];function ha(e,s){return e[0]==="pt"?0:1}R=ha(J),Z=Le[R]=fa[R](J),Ve=new g({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}}),We=new g({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}}),qe=new g({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 ja=[sn,en],Pe=[];function ba(e,s){return e[0]==="tf"?0:1}A=ba(J),Q=Pe[A]=ja[A](J),W=new bl({props:{$$slots:{default:[ln]},$$scope:{ctx:J}}});let k=J[0]==="tf"&&_a();return He=new Ga({props:{source:"https://github.com/huggingface/course/blob/main/chapters/it/chapter3/2.mdx"}}),{c(){l=M("meta"),i=o(),a=M("p"),p=o(),f(T.$$.fragment),u=o(),f(w.$$.fragment),N=o(),$.c(),es=o(),C.c(),ss=o(),E=M("p"),E.textContent=Cl,cs=o(),q=M("p"),q.innerHTML=zl,us=o(),f(H.$$.fragment),ds=o(),x.c(),ls=o(),S=M("p"),S.innerHTML=xl,Ms=o(),Y=M("p"),Y.textContent=vl,ms=o(),f(B.$$.fragment),ys=o(),f(D.$$.fragment),fs=o(),f(F.$$.fragment),hs=o(),L=M("p"),L.innerHTML=Il,js=o(),P=M("p"),P.innerHTML=Rl,bs=o(),K=M("p"),K.innerHTML=Zl,Js=o(),f(O.$$.fragment),Us=o(),f(ee.$$.fragment),Ts=o(),se=M("p"),se.innerHTML=Al,gs=o(),f(le.$$.fragment),ws=o(),f(ae.$$.fragment),ks=o(),ne=M("p"),ne.innerHTML=Ql,$s=o(),f(X.$$.fragment),_s=o(),f(te.$$.fragment),Cs=o(),I.c(),as=o(),ie=M("p"),ie.innerHTML=Nl,zs=o(),f(oe.$$.fragment),xs=o(),re=M("p"),re.textContent=Gl,vs=o(),f(pe.$$.fragment),Is=o(),f(ce.$$.fragment),Rs=o(),ue=M("p"),ue.innerHTML=Bl,Zs=o(),f(V.$$.fragment),As=o(),de=M("p"),de.innerHTML=Xl,Qs=o(),f(Me.$$.fragment),Ns=o(),me=M("p"),me.textContent=Vl,Gs=o(),f(ye.$$.fragment),Bs=o(),fe=M("p"),fe.innerHTML=Wl,Xs=o(),f(he.$$.fragment),Vs=o(),je=M("p"),je.innerHTML=El,Ws=o(),be=M("p"),be.innerHTML=ql,Es=o(),Je=M("p"),Je.innerHTML=Hl,qs=o(),Ue=M("p"),Ue.textContent=Sl,Hs=o(),Te=M("p"),Te.innerHTML=Yl,Ss=o(),ge=M("p"),ge.innerHTML=Dl,Ys=o(),f(we.$$.fragment),Ds=o(),ke=M("p"),ke.innerHTML=Fl,Fs=o(),$e=M("p"),$e.innerHTML=Ll,Ls=o(),f(_e.$$.fragment),Ps=o(),Ce=M("p"),Ce.innerHTML=Pl,Ks=o(),ze=M("p"),ze.innerHTML=Kl,Os=o(),xe=M("p"),xe.innerHTML=Ol,el=o(),f(ve.$$.fragment),sl=o(),Ie=M("p"),Ie.textContent=ea,ll=o(),f(Re.$$.fragment),al=o(),Ze=M("p"),Ze.innerHTML=sa,nl=o(),Ae=M("p"),Ae.innerHTML=la,tl=o(),Qe=M("p"),Qe.innerHTML=aa,il=o(),f(Ne.$$.fragment),ol=o(),f(Ge.$$.fragment),rl=o(),G.c(),ns=o(),Be=M("p"),Be.innerHTML=na,pl=o(),Z.c(),ts=o(),Xe=M("p"),Xe.innerHTML=ta,cl=o(),f(Ve.$$.fragment),ul=o(),f(We.$$.fragment),dl=o(),Ee=M("p"),Ee.innerHTML=ia,Ml=o(),f(qe.$$.fragment),ml=o(),Q.c(),is=o(),f(W.$$.fragment),yl=o(),k&&k.c(),os=o(),f(He.$$.fragment),fl=o(),rs=M("p"),this.h()},l(e){const s=Ra("svelte-u9bgzb",document.head);l=m(s,"META",{name:!0,content:!0}),s.forEach(n),i=r(e),a=m(e,"P",{}),ka(a).forEach(n),p=r(e),h(T.$$.fragment,e),u=r(e),h(w.$$.fragment,e),N=r(e),$.l(e),es=r(e),C.l(e),ss=r(e),E=m(e,"P",{"data-svelte-h":!0}),y(E)!=="svelte-172227u"&&(E.textContent=Cl),cs=r(e),q=m(e,"P",{"data-svelte-h":!0}),y(q)!=="svelte-9x4l76"&&(q.innerHTML=zl),us=r(e),h(H.$$.fragment,e),ds=r(e),x.l(e),ls=r(e),S=m(e,"P",{"data-svelte-h":!0}),y(S)!=="svelte-v33idy"&&(S.innerHTML=xl),Ms=r(e),Y=m(e,"P",{"data-svelte-h":!0}),y(Y)!=="svelte-6jckbe"&&(Y.textContent=vl),ms=r(e),h(B.$$.fragment,e),ys=r(e),h(D.$$.fragment,e),fs=r(e),h(F.$$.fragment,e),hs=r(e),L=m(e,"P",{"data-svelte-h":!0}),y(L)!=="svelte-1a12nki"&&(L.innerHTML=Il),js=r(e),P=m(e,"P",{"data-svelte-h":!0}),y(P)!=="svelte-wxnfos"&&(P.innerHTML=Rl),bs=r(e),K=m(e,"P",{"data-svelte-h":!0}),y(K)!=="svelte-3763xn"&&(K.innerHTML=Zl),Js=r(e),h(O.$$.fragment,e),Us=r(e),h(ee.$$.fragment,e),Ts=r(e),se=m(e,"P",{"data-svelte-h":!0}),y(se)!=="svelte-2gub41"&&(se.innerHTML=Al),gs=r(e),h(le.$$.fragment,e),ws=r(e),h(ae.$$.fragment,e),ks=r(e),ne=m(e,"P",{"data-svelte-h":!0}),y(ne)!=="svelte-12m9dhc"&&(ne.innerHTML=Ql),$s=r(e),h(X.$$.fragment,e),_s=r(e),h(te.$$.fragment,e),Cs=r(e),I.l(e),as=r(e),ie=m(e,"P",{"data-svelte-h":!0}),y(ie)!=="svelte-6u8u9f"&&(ie.innerHTML=Nl),zs=r(e),h(oe.$$.fragment,e),xs=r(e),re=m(e,"P",{"data-svelte-h":!0}),y(re)!=="svelte-jwk6hk"&&(re.textContent=Gl),vs=r(e),h(pe.$$.fragment,e),Is=r(e),h(ce.$$.fragment,e),Rs=r(e),ue=m(e,"P",{"data-svelte-h":!0}),y(ue)!=="svelte-1bqkx3o"&&(ue.innerHTML=Bl),Zs=r(e),h(V.$$.fragment,e),As=r(e),de=m(e,"P",{"data-svelte-h":!0}),y(de)!=="svelte-1jqh914"&&(de.innerHTML=Xl),Qs=r(e),h(Me.$$.fragment,e),Ns=r(e),me=m(e,"P",{"data-svelte-h":!0}),y(me)!=="svelte-v5t1us"&&(me.textContent=Vl),Gs=r(e),h(ye.$$.fragment,e),Bs=r(e),fe=m(e,"P",{"data-svelte-h":!0}),y(fe)!=="svelte-7feo3t"&&(fe.innerHTML=Wl),Xs=r(e),h(he.$$.fragment,e),Vs=r(e),je=m(e,"P",{"data-svelte-h":!0}),y(je)!=="svelte-1drypkp"&&(je.innerHTML=El),Ws=r(e),be=m(e,"P",{"data-svelte-h":!0}),y(be)!=="svelte-1x012qj"&&(be.innerHTML=ql),Es=r(e),Je=m(e,"P",{"data-svelte-h":!0}),y(Je)!=="svelte-1kah50k"&&(Je.innerHTML=Hl),qs=r(e),Ue=m(e,"P",{"data-svelte-h":!0}),y(Ue)!=="svelte-9sn3j4"&&(Ue.textContent=Sl),Hs=r(e),Te=m(e,"P",{"data-svelte-h":!0}),y(Te)!=="svelte-13gngjh"&&(Te.innerHTML=Yl),Ss=r(e),ge=m(e,"P",{"data-svelte-h":!0}),y(ge)!=="svelte-1hj8021"&&(ge.innerHTML=Dl),Ys=r(e),h(we.$$.fragment,e),Ds=r(e),ke=m(e,"P",{"data-svelte-h":!0}),y(ke)!=="svelte-104sv1c"&&(ke.innerHTML=Fl),Fs=r(e),$e=m(e,"P",{"data-svelte-h":!0}),y($e)!=="svelte-mhiq2h"&&($e.innerHTML=Ll),Ls=r(e),h(_e.$$.fragment,e),Ps=r(e),Ce=m(e,"P",{"data-svelte-h":!0}),y(Ce)!=="svelte-gqi65o"&&(Ce.innerHTML=Pl),Ks=r(e),ze=m(e,"P",{"data-svelte-h":!0}),y(ze)!=="svelte-c7bsii"&&(ze.innerHTML=Kl),Os=r(e),xe=m(e,"P",{"data-svelte-h":!0}),y(xe)!=="svelte-vgm8bz"&&(xe.innerHTML=Ol),el=r(e),h(ve.$$.fragment,e),sl=r(e),Ie=m(e,"P",{"data-svelte-h":!0}),y(Ie)!=="svelte-1b0nvgd"&&(Ie.textContent=ea),ll=r(e),h(Re.$$.fragment,e),al=r(e),Ze=m(e,"P",{"data-svelte-h":!0}),y(Ze)!=="svelte-1qtyw58"&&(Ze.innerHTML=sa),nl=r(e),Ae=m(e,"P",{"data-svelte-h":!0}),y(Ae)!=="svelte-mt0ou0"&&(Ae.innerHTML=la),tl=r(e),Qe=m(e,"P",{"data-svelte-h":!0}),y(Qe)!=="svelte-lh7mge"&&(Qe.innerHTML=aa),il=r(e),h(Ne.$$.fragment,e),ol=r(e),h(Ge.$$.fragment,e),rl=r(e),G.l(e),ns=r(e),Be=m(e,"P",{"data-svelte-h":!0}),y(Be)!=="svelte-13028mi"&&(Be.innerHTML=na),pl=r(e),Z.l(e),ts=r(e),Xe=m(e,"P",{"data-svelte-h":!0}),y(Xe)!=="svelte-nuaal6"&&(Xe.innerHTML=ta),cl=r(e),h(Ve.$$.fragment,e),ul=r(e),h(We.$$.fragment,e),dl=r(e),Ee=m(e,"P",{"data-svelte-h":!0}),y(Ee)!=="svelte-1rn8de4"&&(Ee.innerHTML=ia),Ml=r(e),h(qe.$$.fragment,e),ml=r(e),Q.l(e),is=r(e),h(W.$$.fragment,e),yl=r(e),k&&k.l(e),os=r(e),h(He.$$.fragment,e),fl=r(e),rs=m(e,"P",{}),ka(rs).forEach(n),this.h()},h(){$a(l,"name","hf:doc:metadata"),$a(l,"content",nn)},m(e,s){Za(document.head,l),t(e,i,s),t(e,a,s),t(e,p,s),j(T,e,s),t(e,u,s),j(w,e,s),t(e,N,s),Se[U].m(e,s),t(e,es,s),Ye[_].m(e,s),t(e,ss,s),t(e,E,s),t(e,cs,s),t(e,q,s),t(e,us,s),j(H,e,s),t(e,ds,s),De[z].m(e,s),t(e,ls,s),t(e,S,s),t(e,Ms,s),t(e,Y,s),t(e,ms,s),j(B,e,s),t(e,ys,s),j(D,e,s),t(e,fs,s),j(F,e,s),t(e,hs,s),t(e,L,s),t(e,js,s),t(e,P,s),t(e,bs,s),t(e,K,s),t(e,Js,s),j(O,e,s),t(e,Us,s),j(ee,e,s),t(e,Ts,s),t(e,se,s),t(e,gs,s),j(le,e,s),t(e,ws,s),j(ae,e,s),t(e,ks,s),t(e,ne,s),t(e,$s,s),j(X,e,s),t(e,_s,s),j(te,e,s),t(e,Cs,s),Fe[v].m(e,s),t(e,as,s),t(e,ie,s),t(e,zs,s),j(oe,e,s),t(e,xs,s),t(e,re,s),t(e,vs,s),j(pe,e,s),t(e,Is,s),j(ce,e,s),t(e,Rs,s),t(e,ue,s),t(e,Zs,s),j(V,e,s),t(e,As,s),t(e,de,s),t(e,Qs,s),j(Me,e,s),t(e,Ns,s),t(e,me,s),t(e,Gs,s),j(ye,e,s),t(e,Bs,s),t(e,fe,s),t(e,Xs,s),j(he,e,s),t(e,Vs,s),t(e,je,s),t(e,Ws,s),t(e,be,s),t(e,Es,s),t(e,Je,s),t(e,qs,s),t(e,Ue,s),t(e,Hs,s),t(e,Te,s),t(e,Ss,s),t(e,ge,s),t(e,Ys,s),j(we,e,s),t(e,Ds,s),t(e,ke,s),t(e,Fs,s),t(e,$e,s),t(e,Ls,s),j(_e,e,s),t(e,Ps,s),t(e,Ce,s),t(e,Ks,s),t(e,ze,s),t(e,Os,s),t(e,xe,s),t(e,el,s),j(ve,e,s),t(e,sl,s),t(e,Ie,s),t(e,ll,s),j(Re,e,s),t(e,al,s),t(e,Ze,s),t(e,nl,s),t(e,Ae,s),t(e,tl,s),t(e,Qe,s),t(e,il,s),j(Ne,e,s),t(e,ol,s),j(Ge,e,s),t(e,rl,s),G.m(e,s),t(e,ns,s),t(e,Be,s),t(e,pl,s),Le[R].m(e,s),t(e,ts,s),t(e,Xe,s),t(e,cl,s),j(Ve,e,s),t(e,ul,s),j(We,e,s),t(e,dl,s),t(e,Ee,s),t(e,Ml,s),j(qe,e,s),t(e,ml,s),Pe[A].m(e,s),t(e,is,s),j(W,e,s),t(e,yl,s),k&&k.m(e,s),t(e,os,s),j(He,e,s),t(e,fl,s),t(e,rs,s),hl=!0},p(e,[s]){const Ja={};s&1&&(Ja.fw=e[0]),T.$set(Ja);let Ul=U;U=ra(e),U!==Ul&&(Oe(),d(Se[Ul],1,1,()=>{Se[Ul]=null}),Ke(),$=Se[U],$||($=Se[U]=oa[U](e),$.c()),c($,1),$.m(es.parentNode,es));let Tl=_;_=ca(e),_!==Tl&&(Oe(),d(Ye[Tl],1,1,()=>{Ye[Tl]=null}),Ke(),C=Ye[_],C||(C=Ye[_]=pa[_](e),C.c()),c(C,1),C.m(ss.parentNode,ss));let gl=z;z=da(e),z!==gl&&(Oe(),d(De[gl],1,1,()=>{De[gl]=null}),Ke(),x=De[z],x||(x=De[z]=ua[z](e),x.c()),c(x,1),x.m(ls.parentNode,ls));const Ua={};s&2&&(Ua.$$scope={dirty:s,ctx:e}),B.$set(Ua);const Ta={};s&2&&(Ta.$$scope={dirty:s,ctx:e}),X.$set(Ta);let wl=v;v=ma(e),v!==wl&&(Oe(),d(Fe[wl],1,1,()=>{Fe[wl]=null}),Ke(),I=Fe[v],I||(I=Fe[v]=Ma[v](e),I.c()),c(I,1),I.m(as.parentNode,as));const ga={};s&2&&(ga.$$scope={dirty:s,ctx:e}),V.$set(ga),jl!==(jl=ya(e))&&(G.d(1),G=jl(e),G&&(G.c(),G.m(ns.parentNode,ns)));let kl=R;R=ha(e),R!==kl&&(Oe(),d(Le[kl],1,1,()=>{Le[kl]=null}),Ke(),Z=Le[R],Z||(Z=Le[R]=fa[R](e),Z.c()),c(Z,1),Z.m(ts.parentNode,ts));let $l=A;A=ba(e),A!==$l&&(Oe(),d(Pe[$l],1,1,()=>{Pe[$l]=null}),Ke(),Q=Pe[A],Q||(Q=Pe[A]=ja[A](e),Q.c()),c(Q,1),Q.m(is.parentNode,is));const wa={};s&2&&(wa.$$scope={dirty:s,ctx:e}),W.$set(wa),e[0]==="tf"?k?s&1&&c(k,1):(k=_a(),k.c(),c(k,1),k.m(os.parentNode,os)):k&&(Oe(),d(k,1,1,()=>{k=null}),Ke())},i(e){hl||(c(T.$$.fragment,e),c(w.$$.fragment,e),c($),c(C),c(H.$$.fragment,e),c(x),c(B.$$.fragment,e),c(D.$$.fragment,e),c(F.$$.fragment,e),c(O.$$.fragment,e),c(ee.$$.fragment,e),c(le.$$.fragment,e),c(ae.$$.fragment,e),c(X.$$.fragment,e),c(te.$$.fragment,e),c(I),c(oe.$$.fragment,e),c(pe.$$.fragment,e),c(ce.$$.fragment,e),c(V.$$.fragment,e),c(Me.$$.fragment,e),c(ye.$$.fragment,e),c(he.$$.fragment,e),c(we.$$.fragment,e),c(_e.$$.fragment,e),c(ve.$$.fragment,e),c(Re.$$.fragment,e),c(Ne.$$.fragment,e),c(Ge.$$.fragment,e),c(Z),c(Ve.$$.fragment,e),c(We.$$.fragment,e),c(qe.$$.fragment,e),c(Q),c(W.$$.fragment,e),c(k),c(He.$$.fragment,e),hl=!0)},o(e){d(T.$$.fragment,e),d(w.$$.fragment,e),d($),d(C),d(H.$$.fragment,e),d(x),d(B.$$.fragment,e),d(D.$$.fragment,e),d(F.$$.fragment,e),d(O.$$.fragment,e),d(ee.$$.fragment,e),d(le.$$.fragment,e),d(ae.$$.fragment,e),d(X.$$.fragment,e),d(te.$$.fragment,e),d(I),d(oe.$$.fragment,e),d(pe.$$.fragment,e),d(ce.$$.fragment,e),d(V.$$.fragment,e),d(Me.$$.fragment,e),d(ye.$$.fragment,e),d(he.$$.fragment,e),d(we.$$.fragment,e),d(_e.$$.fragment,e),d(ve.$$.fragment,e),d(Re.$$.fragment,e),d(Ne.$$.fragment,e),d(Ge.$$.fragment,e),d(Z),d(Ve.$$.fragment,e),d(We.$$.fragment,e),d(qe.$$.fragment,e),d(Q),d(W.$$.fragment,e),d(k),d(He.$$.fragment,e),hl=!1},d(e){e&&(n(i),n(a),n(p),n(u),n(N),n(es),n(ss),n(E),n(cs),n(q),n(us),n(ds),n(ls),n(S),n(Ms),n(Y),n(ms),n(ys),n(fs),n(hs),n(L),n(js),n(P),n(bs),n(K),n(Js),n(Us),n(Ts),n(se),n(gs),n(ws),n(ks),n(ne),n($s),n(_s),n(Cs),n(as),n(ie),n(zs),n(xs),n(re),n(vs),n(Is),n(Rs),n(ue),n(Zs),n(As),n(de),n(Qs),n(Ns),n(me),n(Gs),n(Bs),n(fe),n(Xs),n(Vs),n(je),n(Ws),n(be),n(Es),n(Je),n(qs),n(Ue),n(Hs),n(Te),n(Ss),n(ge),n(Ys),n(Ds),n(ke),n(Fs),n($e),n(Ls),n(Ps),n(Ce),n(Ks),n(ze),n(Os),n(xe),n(el),n(sl),n(Ie),n(ll),n(al),n(Ze),n(nl),n(Ae),n(tl),n(Qe),n(il),n(ol),n(rl),n(ns),n(Be),n(pl),n(ts),n(Xe),n(cl),n(ul),n(dl),n(Ee),n(Ml),n(ml),n(is),n(yl),n(os),n(fl),n(rs)),n(l),b(T,e),b(w,e),Se[U].d(e),Ye[_].d(e),b(H,e),De[z].d(e),b(B,e),b(D,e),b(F,e),b(O,e),b(ee,e),b(le,e),b(ae,e),b(X,e),b(te,e),Fe[v].d(e),b(oe,e),b(pe,e),b(ce,e),b(V,e),b(Me,e),b(ye,e),b(he,e),b(we,e),b(_e,e),b(ve,e),b(Re,e),b(Ne,e),b(Ge,e),G.d(e),Le[R].d(e),b(Ve,e),b(We,e),b(qe,e),Pe[A].d(e),b(W,e),k&&k.d(e),b(He,e)}}}const nn='{"title":"Processare i dati","local":"processare-i-dati","sections":[{"title":"Caricare un dataset dall’Hub","local":"caricare-un-dataset-dallhub","sections":[],"depth":3},{"title":"Preprocessing del dataset","local":"preprocessing-del-dataset","sections":[],"depth":3},{"title":"Dynamic padding","local":"dynamic-padding","sections":[],"depth":3}],"depth":1}';function tn(J,l,i){let a="pt";return xa(()=>{const p=new URLSearchParams(window.location.search);i(0,a=p.get("fw")||"pt")}),[a]}class yn extends va{constructor(l){super(),Ia(this,l,tn,an,za,{})}}export{yn as component};
