import{s as hl,o as gl}from"../chunks/scheduler.37c15a92.js";import{S as vl,i as kl,g as f,s as c,r as M,A as Tl,h as b,f as o,c as m,j as _l,u as $,x as _,k as Ml,y as wl,a,v as y,t as p,b as je,d as u,w as h,p as Ce}from"../chunks/index.2bf4358c.js";import{Y as $l}from"../chunks/Youtube.1e50a667.js";import{C as k}from"../chunks/CodeBlock.4e987730.js";import{D as yl}from"../chunks/DocNotebookDropdown.efc1fb7c.js";import{F as Jl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Re,E as jl}from"../chunks/getInferenceSnippets.80a69898.js";function Cl(d){let l,n;return l=new yl({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/chapter2/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/chapter2/section3_tf.ipynb"}]}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function zl(d){let l,n;return l=new yl({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/chapter2/section3_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/chapter2/section3_pt.ipynb"}]}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function Ul(d){let l,n;return l=new $l({props:{id:"d3JVgghSOew"}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function Zl(d){let l,n;return l=new $l({props:{id:"AhChOFRegn4"}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function Bl(d){let l,n="In questa sezione vedremo da vicino come creare e usare un modello. Utilizzeremo la classe <code>TFAutoModel</code>, utile quando si vuole istanziare qualsiasi modello da un checkpoint.",t,s,g="La classe <code>TFAutoModel</code> e tutti i suoi derivati sono in realtà semplici involucri dell’ampia varietà di modelli disponibili nella libreria. Si tratta di un involucro intelligente, in quanto è in grado di indovinare automaticamente l’architettura del modello appropriata per il checkpoint e successivamente di istanziare un modello con questa architettura.";return{c(){l=f("p"),l.innerHTML=n,t=c(),s=f("p"),s.innerHTML=g},l(r){l=b(r,"P",{"data-svelte-h":!0}),_(l)!=="svelte-1nr4ju2"&&(l.innerHTML=n),t=m(r),s=b(r,"P",{"data-svelte-h":!0}),_(s)!=="svelte-1s4n6v8"&&(s.innerHTML=g)},m(r,v){a(r,l,v),a(r,t,v),a(r,s,v)},d(r){r&&(o(l),o(t),o(s))}}}function Il(d){let l,n="In questa sezione vedremo da vicino come creare e usare un modello. Utilizzeremo la classe <code>AutoModel</code>, utile quando si vuole istanziare qualsiasi modello da un checkpoint.",t,s,g="La classe <code>AutoModel</code> e tutti i suoi derivati sono in realtà semplici involucri dell’ampia varietà di modelli disponibili nella libreria. Si tratta di un involucro intelligente, in quanto è in grado di indovinare automaticamente l’architettura del modello appropriata per il checkpoint e successivamente di istanziare un modello con questa architettura.";return{c(){l=f("p"),l.innerHTML=n,t=c(),s=f("p"),s.innerHTML=g},l(r){l=b(r,"P",{"data-svelte-h":!0}),_(l)!=="svelte-ntfp38"&&(l.innerHTML=n),t=m(r),s=b(r,"P",{"data-svelte-h":!0}),_(s)!=="svelte-7jknq"&&(s.innerHTML=g)},m(r,v){a(r,l,v),a(r,t,v),a(r,s,v)},d(r){r&&(o(l),o(t),o(s))}}}function Wl(d){let l,n;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQSUyMyUyMENyZWF6aW9uZSUyMGRlbGxhJTIwY29uZmlndXJhemlvbmUlMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEElMEElMjMlMjBDcmVhcmUlMjBpbCUyMG1vZGVsbG8lMjBkYWxsYSUyMGNvbmZpZ3VyYXppb25lJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbChjb25maWcp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

<span class="hljs-comment"># Creazione della configurazione</span>
config = BertConfig()

<span class="hljs-comment"># Creare il modello dalla configurazione</span>
model = TFBertModel(config)`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function El(d){let l,n;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEElMjMlMjBDcmVhemlvbmUlMjBkZWxsYSUyMGNvbmZpZ3VyYXppb25lJTBBY29uZmlnJTIwJTNEJTIwQmVydENvbmZpZygpJTBBJTBBJTIzJTIwQ3JlYXJlJTIwaWwlMjBtb2RlbGxvJTIwZGFsbGElMjBjb25maWd1cmF6aW9uZSUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsKGNvbmZpZyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

<span class="hljs-comment"># Creazione della configurazione</span>
config = BertConfig()

<span class="hljs-comment"># Creare il modello dalla configurazione</span>
model = BertModel(config)`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function xl(d){let l,n;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKSUwQSUwQSUyMyUyMElsJTIwbW9kZWxsbyUyMCVDMyVBOCUyMGluaXppYWxpenphdG8lMjBpbiUyMG1vZG8lMjBjYXN1YWxlIQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

config = BertConfig()
model = TFBertModel(config)

<span class="hljs-comment"># Il modello è inizializzato in modo casuale!</span>`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function Vl(d){let l,n;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwSWwlMjBtb2RlbGxvJTIwJUMzJUE4JTIwaW5pemlhbGl6emF0byUyMGluJTIwbW9kbyUyMGNhc3VhbGUh",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

config = BertConfig()
model = BertModel(config)

<span class="hljs-comment"># Il modello è inizializzato in modo casuale!</span>`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function Rl(d){let l,n,t,s="Come abbiamo visto in precedenza, possiamo sostituire <code>TFBertModel</code> con la classe equivalente <code>TFAutoModel</code>. Lo faremo d’ora in poi, perché in questo modo si ottiene un codice cosiddetto “checkpoint-agnostic”; se il codice funziona per un checkpoint, dovrebbe funzionare senza problemi anche con un altro. Questo vale anche se l’architettura è diversa, purché il checkpoint sia stato addestrato per un compito simile (per esempio, un compito di sentiment analysis).",g;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQmVydE1vZGVsJTBBJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyYmVydC1iYXNlLWNhc2VkJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFBertModel

model = TFBertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){M(l.$$.fragment),n=c(),t=f("p"),t.innerHTML=s},l(r){$(l.$$.fragment,r),n=m(r),t=b(r,"P",{"data-svelte-h":!0}),_(t)!=="svelte-77r5pm"&&(t.innerHTML=s)},m(r,v){y(l,r,v),a(r,n,v),a(r,t,v),g=!0},i(r){g||(u(l.$$.fragment,r),g=!0)},o(r){p(l.$$.fragment,r),g=!1},d(r){r&&(o(n),o(t)),h(l,r)}}}function Gl(d){let l,n,t,s="Come abbiamo visto in precedenza, possiamo sostituire <code>BertModel</code> con la classe equivalente <code>AutoModel</code>. Lo faremo d’ora in poi, perché in questo modo si ottiene un codice cosiddetto “checkpoint-agnostic”; se il codice funziona per un checkpoint, dovrebbe funzionare senza problemi anche con un altro. Questo vale anche se l’architettura è diversa, purché il checkpoint sia stato addestrato per un compito simile (per esempio, un compito di sentiment analysis).",g;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUwQSUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel

model = BertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){M(l.$$.fragment),n=c(),t=f("p"),t.innerHTML=s},l(r){$(l.$$.fragment,r),n=m(r),t=b(r,"P",{"data-svelte-h":!0}),_(t)!=="svelte-39bzp6"&&(t.innerHTML=s)},m(r,v){y(l,r,v),a(r,n,v),a(r,t,v),g=!0},i(r){g||(u(l.$$.fragment,r),g=!0)},o(r){p(l.$$.fragment,r),g=!1},d(r){r&&(o(n),o(t)),h(l,r)}}}function ql(d){let l,n;return l=new k({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHRmX21vZGVsLmg1",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>tf_model.h5`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function Hl(d){let l,n;return l=new k({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMG1vZGVsLnNhZmV0ZW5zb3Jz",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>model.safetensors`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function Nl(d){let l,n="Il file <em>tf_model.h5</em> è noto come <em>state dictionary</em>; contiene tutti i pesi del modello. I due file vanno di pari passo: la configurazione è necessaria per conoscere l’architettura del modello, mentre i pesi del modello sono i suoi parametri.";return{c(){l=f("p"),l.innerHTML=n},l(t){l=b(t,"P",{"data-svelte-h":!0}),_(l)!=="svelte-7o1k9f"&&(l.innerHTML=n)},m(t,s){a(t,l,s)},d(t){t&&o(l)}}}function Ll(d){let l,n="Il file <em>model.safetensors</em> è noto come <em>state dictionary</em>; contiene tutti i pesi del modello. I due file vanno di pari passo: la configurazione è necessaria per conoscere l’architettura del modello, mentre i pesi del modello sono i suoi parametri.";return{c(){l=f("p"),l.innerHTML=n},l(t){l=b(t,"P",{"data-svelte-h":!0}),_(l)!=="svelte-13ve7mc"&&(l.innerHTML=n)},m(t,s){a(t,l,s)},d(t){t&&o(l)}}}function Ql(d){let l,n;return l=new k({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0Zi5jb25zdGFudChlbmNvZGVkX3NlcXVlbmNlcyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

model_inputs = tf.constant(encoded_sequences)`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function Al(d){let l,n;return l=new k({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW5jb2RlZF9zZXF1ZW5jZXMp",highlighted:`<span class="hljs-keyword">import</span> torch

model_inputs = torch.tensor(encoded_sequences)`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,s){y(l,t,s),n=!0},i(t){n||(u(l.$$.fragment,t),n=!0)},o(t){p(l.$$.fragment,t),n=!1},d(t){h(l,t)}}}function Sl(d){let l,n,t,s,g,r,v,qe,T,w,ze,J,j,Ue,Ze,q,Zt="Tuttavia, se si conosce il tipo di modello che si vuole utilizzare, si può usare direttamente la classe che ne definisce l’architettura. Vediamo come funziona con un modello BERT.",He,H,Ne,N,Bt="La prima cosa da fare per inizializzare un modello BERT è caricare un oggetto di configurazione:",Le,C,z,Be,L,It="La configurazione contiene molti attributi che vengono utilizzati per costruire il modello:",Qe,Q,Ae,A,Se,S,Wt="Anche se non si è ancora visto cosa fanno tutti questi attributi, se ne dovrebbero riconoscere alcuni: l’attributo <code>hidden_size</code> definisce la dimensione del vettore <code>hidden_states</code>, e l’attributo <code>num_hidden_layers</code> definisce il numero di livelli del modello Transformer.",Xe,X,Fe,F,Et="La creazione di un modello dalla configurazione predefinita lo inizializza con valori casuali:",Pe,U,Z,Ie,P,xt="Il modello può essere utilizzato in questo stato, ma produrrà risultati incomprensibili; è necessario addestrarlo prima.",Ye,Y,Vt='Potremmo addestrare il modello da zero sul compito da svolgere, ma come si è visto in <a href="/course/chapter1">Capitolo 1</a>, questo richiederebbe molto tempo e molti dati, oltre ad avere un impatto ambientale non trascurabile. Per evitare sforzi inutili, è indispensabile poter condividere e riutilizzare modelli già addestrati.',De,D,Rt="Caricare un modello Transformer già addestrato è semplice: lo si può fare usando il metodo <code>from_pretrained()</code>:",Oe,B,I,We,O,Gt='Nell’esempio di codice precedente non abbiamo usato <code>BertConfig</code> e abbiamo invece caricato un modello pre-addestrato tramite l’identificatore <code>bert-base-cased</code>. Si tratta di un checkpoint che è stato addestrato dagli stessi autori di BERT; si possono trovare maggiori dettagli su di esso nella sua <a href="https://huggingface.co/bert-base-cased" rel="nofollow">scheda modello</a>.',Ke,K,qt="Questo modello è ora inizializzato con tutti i pesi del checkpoint. Può essere utilizzato direttamente per effettuare inferenza sui compiti su cui è stato addestrato e può anche essere messo adattato ad un nuovo compito, tramite il fine tuning. Allenandosi con i pesi pre-addestrati piuttosto che partendo da zero, si possono ottenere rapidamente buoni risultati.",et,ee,Ht="I pesi sono stati scaricati e messi in cache (in modo che le future chiamate al metodo <code>from_pretrained()</code> non li scarichino di nuovo) nella cartella della cache, che per impostazione predefinita è <em>~/.cache/huggingface/transformers</em>. È possibile personalizzare la cartella della cache impostando la variabile d’ambiente <code>HF_HOME</code>.",tt,te,Nt='L’identificatore usato per caricare il modello può essere l’identificatore di qualsiasi modello presente nel Model Hub, purché sia compatibile con l’architettura del BERT. L’elenco completo dei checkpoint BERT disponibili è disponibile <a href="https://huggingface.co/models?filter=bert" rel="nofollow">qui</a>.',lt,le,it,ie,Lt="Saving a model is as easy as loading one — we use the <code>save_pretrained()</code> method, which is analogous to the <code>from_pretrained()</code> method:",nt,ne,ot,oe,Qt="In questo modo si salvano due file sul disco:",at,W,E,Ee,ae,At="Se si dà un’occhiata al file <em>config.json</em>, si riconoscono gli attributi necessari per costruire l’architettura del modello. Questo file contiene anche alcuni metadati, come l’origine del checkpoint e la versione di 🤗 Transformers utilizzata al momento dell’ultimo salvataggio del checkpoint.",st,xe,se,rt,re,St="Ora che si sa come caricare e salvare un modello, proviamo a usarlo per fare delle previsioni. I modelli di trasformatori possono elaborare solo numeri - numeri generati dal tokenizer. Ma prima di parlare dei tokenizer, analizziamo quali sono gli input accettati dal modello.",ct,ce,Xt="I tokenizer possono occuparsi di effettuare il casting degli input nei tensori del framework appropriato, ma per aiutarti a capire cosa sta succedendo, daremo una rapida occhiata a ciò che deve essere fatto prima di inviare gli input al modello.",mt,me,Ft="Supponiamo di avere un paio di sequenze:",pt,pe,ut,ue,Pt="The tokenizer converts these to vocabulary indices which are typically called <em>input IDs</em>. Each sequence is now a list of numbers! The resulting output is:",dt,de,ft,fe,Yt="Si tratta di una lista di sequenze codificate: una lista di liste. I tensori accettano solo forme rettangolari (si pensi alle matrici). Questo “array” è già di forma rettangolare, quindi convertirlo in un tensore è facile:",bt,x,V,Ve,be,_t,_e,Dt="Utilizzare i tensori con il modello è estremamente semplice: basta chiamare il modello con gli input:",Mt,Me,$t,$e,Ot="Il modello accetta molti argomenti diversi, ma solo gli ID degli ingressi sono necessari. Spiegheremo in seguito cosa fanno gli altri argomenti e quando sono necessari, ma prima dobbiamo dare un’occhiata più da vicino ai tokenizer che costruiscono gli input che un modello Transformer può comprendere.",yt,ye,ht,Ge,gt;g=new Jl({props:{fw:d[0]}}),v=new Re({props:{title:"Models",local:"models",headingTag:"h1"}});const Kt=[zl,Cl],he=[];function el(e,i){return e[0]==="pt"?0:1}T=el(d),w=he[T]=Kt[T](d);const tl=[Zl,Ul],ge=[];function ll(e,i){return e[0]==="pt"?0:1}J=ll(d),j=ge[J]=tl[J](d);function il(e,i){return e[0]==="pt"?Il:Bl}let vt=il(d),R=vt(d);H=new Re({props:{title:"Creare un trasformatore",local:"creare-un-trasformatore",headingTag:"h2"}});const nl=[El,Wl],ve=[];function ol(e,i){return e[0]==="pt"?0:1}C=ol(d),z=ve[C]=nl[C](d),Q=new k({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),A=new k({props:{code:"QmVydENvbmZpZyUyMCU3QiUwQSUyMCUyMCU1Qi4uLiU1RCUwQSUyMCUyMCUyMmhpZGRlbl9zaXplJTIyJTNBJTIwNzY4JTJDJTBBJTIwJTIwJTIyaW50ZXJtZWRpYXRlX3NpemUlMjIlM0ElMjAzMDcyJTJDJTBBJTIwJTIwJTIybWF4X3Bvc2l0aW9uX2VtYmVkZGluZ3MlMjIlM0ElMjA1MTIlMkMlMEElMjAlMjAlMjJudW1fYXR0ZW50aW9uX2hlYWRzJTIyJTNBJTIwMTIlMkMlMEElMjAlMjAlMjJudW1faGlkZGVuX2xheWVycyUyMiUzQSUyMDEyJTJDJTBBJTIwJTIwJTVCLi4uJTVEJTBBJTdE",highlighted:`BertConfig {
  [...]
  <span class="hljs-string">&quot;hidden_size&quot;</span>: <span class="hljs-number">768</span>,
  <span class="hljs-string">&quot;intermediate_size&quot;</span>: <span class="hljs-number">3072</span>,
  <span class="hljs-string">&quot;max_position_embeddings&quot;</span>: <span class="hljs-number">512</span>,
  <span class="hljs-string">&quot;num_attention_heads&quot;</span>: <span class="hljs-number">12</span>,
  <span class="hljs-string">&quot;num_hidden_layers&quot;</span>: <span class="hljs-number">12</span>,
  [...]
}`,wrap:!1}}),X=new Re({props:{title:"Diversi metodi di caricamento",local:"diversi-metodi-di-caricamento",headingTag:"h3"}});const al=[Vl,xl],ke=[];function sl(e,i){return e[0]==="pt"?0:1}U=sl(d),Z=ke[U]=al[U](d);const rl=[Gl,Rl],Te=[];function cl(e,i){return e[0]==="pt"?0:1}B=cl(d),I=Te[B]=rl[B](d),le=new Re({props:{title:"Metodi di salvataggio",local:"metodi-di-salvataggio",headingTag:"h3"}}),ne=new k({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const ml=[Hl,ql],we=[];function pl(e,i){return e[0]==="pt"?0:1}W=pl(d),E=we[W]=ml[W](d);function ul(e,i){return e[0]==="pt"?Ll:Nl}let kt=ul(d),G=kt(d);se=new Re({props:{title:"Using a Transformer model for inference",local:"using-a-transformer-model-for-inference",headingTag:"h2"}}),pe=new k({props:{code:"c2VxdWVuY2VzJTIwJTNEJTIwJTVCJTIySGVsbG8hJTIyJTJDJTIwJTIyQ29vbC4lMjIlMkMlMjAlMjJOaWNlISUyMiU1RA==",highlighted:'sequences = [<span class="hljs-string">&quot;Hello!&quot;</span>, <span class="hljs-string">&quot;Cool.&quot;</span>, <span class="hljs-string">&quot;Nice!&quot;</span>]',wrap:!1}}),de=new k({props:{code:"ZW5jb2RlZF9zZXF1ZW5jZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjA3NTkyJTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTVCMTAxJTJDJTIwNDY1OCUyQyUyMDEwMTIlMkMlMjAxMDIlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjAzODM1JTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTVE",highlighted:`encoded_sequences = [
    [<span class="hljs-number">101</span>, <span class="hljs-number">7592</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">4658</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">3835</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
]`,wrap:!1}});const dl=[Al,Ql],Je=[];function fl(e,i){return e[0]==="pt"?0:1}return x=fl(d),V=Je[x]=dl[x](d),be=new Re({props:{title:"Uso dei tensori come input del modello",local:"uso-dei-tensori-come-input-del-modello",headingTag:"h3"}}),Me=new k({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),ye=new jl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/it/chapter2/3.mdx"}}),{c(){l=f("meta"),n=c(),t=f("p"),s=c(),M(g.$$.fragment),r=c(),M(v.$$.fragment),qe=c(),w.c(),ze=c(),j.c(),Ue=c(),R.c(),Ze=c(),q=f("p"),q.textContent=Zt,He=c(),M(H.$$.fragment),Ne=c(),N=f("p"),N.textContent=Bt,Le=c(),z.c(),Be=c(),L=f("p"),L.textContent=It,Qe=c(),M(Q.$$.fragment),Ae=c(),M(A.$$.fragment),Se=c(),S=f("p"),S.innerHTML=Wt,Xe=c(),M(X.$$.fragment),Fe=c(),F=f("p"),F.textContent=Et,Pe=c(),Z.c(),Ie=c(),P=f("p"),P.textContent=xt,Ye=c(),Y=f("p"),Y.innerHTML=Vt,De=c(),D=f("p"),D.innerHTML=Rt,Oe=c(),I.c(),We=c(),O=f("p"),O.innerHTML=Gt,Ke=c(),K=f("p"),K.textContent=qt,et=c(),ee=f("p"),ee.innerHTML=Ht,tt=c(),te=f("p"),te.innerHTML=Nt,lt=c(),M(le.$$.fragment),it=c(),ie=f("p"),ie.innerHTML=Lt,nt=c(),M(ne.$$.fragment),ot=c(),oe=f("p"),oe.textContent=Qt,at=c(),E.c(),Ee=c(),ae=f("p"),ae.innerHTML=At,st=c(),G.c(),xe=c(),M(se.$$.fragment),rt=c(),re=f("p"),re.textContent=St,ct=c(),ce=f("p"),ce.textContent=Xt,mt=c(),me=f("p"),me.textContent=Ft,pt=c(),M(pe.$$.fragment),ut=c(),ue=f("p"),ue.innerHTML=Pt,dt=c(),M(de.$$.fragment),ft=c(),fe=f("p"),fe.textContent=Yt,bt=c(),V.c(),Ve=c(),M(be.$$.fragment),_t=c(),_e=f("p"),_e.textContent=Dt,Mt=c(),M(Me.$$.fragment),$t=c(),$e=f("p"),$e.textContent=Ot,yt=c(),M(ye.$$.fragment),ht=c(),Ge=f("p"),this.h()},l(e){const i=Tl("svelte-u9bgzb",document.head);l=b(i,"META",{name:!0,content:!0}),i.forEach(o),n=m(e),t=b(e,"P",{}),_l(t).forEach(o),s=m(e),$(g.$$.fragment,e),r=m(e),$(v.$$.fragment,e),qe=m(e),w.l(e),ze=m(e),j.l(e),Ue=m(e),R.l(e),Ze=m(e),q=b(e,"P",{"data-svelte-h":!0}),_(q)!=="svelte-19yjkd2"&&(q.textContent=Zt),He=m(e),$(H.$$.fragment,e),Ne=m(e),N=b(e,"P",{"data-svelte-h":!0}),_(N)!=="svelte-sep5xb"&&(N.textContent=Bt),Le=m(e),z.l(e),Be=m(e),L=b(e,"P",{"data-svelte-h":!0}),_(L)!=="svelte-mn48kp"&&(L.textContent=It),Qe=m(e),$(Q.$$.fragment,e),Ae=m(e),$(A.$$.fragment,e),Se=m(e),S=b(e,"P",{"data-svelte-h":!0}),_(S)!=="svelte-wxezk7"&&(S.innerHTML=Wt),Xe=m(e),$(X.$$.fragment,e),Fe=m(e),F=b(e,"P",{"data-svelte-h":!0}),_(F)!=="svelte-17l7gl5"&&(F.textContent=Et),Pe=m(e),Z.l(e),Ie=m(e),P=b(e,"P",{"data-svelte-h":!0}),_(P)!=="svelte-mgikte"&&(P.textContent=xt),Ye=m(e),Y=b(e,"P",{"data-svelte-h":!0}),_(Y)!=="svelte-r16bee"&&(Y.innerHTML=Vt),De=m(e),D=b(e,"P",{"data-svelte-h":!0}),_(D)!=="svelte-yusqd1"&&(D.innerHTML=Rt),Oe=m(e),I.l(e),We=m(e),O=b(e,"P",{"data-svelte-h":!0}),_(O)!=="svelte-19oiivu"&&(O.innerHTML=Gt),Ke=m(e),K=b(e,"P",{"data-svelte-h":!0}),_(K)!=="svelte-kymetl"&&(K.textContent=qt),et=m(e),ee=b(e,"P",{"data-svelte-h":!0}),_(ee)!=="svelte-1ra7or1"&&(ee.innerHTML=Ht),tt=m(e),te=b(e,"P",{"data-svelte-h":!0}),_(te)!=="svelte-1qx7292"&&(te.innerHTML=Nt),lt=m(e),$(le.$$.fragment,e),it=m(e),ie=b(e,"P",{"data-svelte-h":!0}),_(ie)!=="svelte-v1sy0v"&&(ie.innerHTML=Lt),nt=m(e),$(ne.$$.fragment,e),ot=m(e),oe=b(e,"P",{"data-svelte-h":!0}),_(oe)!=="svelte-1y6yq67"&&(oe.textContent=Qt),at=m(e),E.l(e),Ee=m(e),ae=b(e,"P",{"data-svelte-h":!0}),_(ae)!=="svelte-re0uw2"&&(ae.innerHTML=At),st=m(e),G.l(e),xe=m(e),$(se.$$.fragment,e),rt=m(e),re=b(e,"P",{"data-svelte-h":!0}),_(re)!=="svelte-78p3r8"&&(re.textContent=St),ct=m(e),ce=b(e,"P",{"data-svelte-h":!0}),_(ce)!=="svelte-4vle6d"&&(ce.textContent=Xt),mt=m(e),me=b(e,"P",{"data-svelte-h":!0}),_(me)!=="svelte-amlzbw"&&(me.textContent=Ft),pt=m(e),$(pe.$$.fragment,e),ut=m(e),ue=b(e,"P",{"data-svelte-h":!0}),_(ue)!=="svelte-1635jd"&&(ue.innerHTML=Pt),dt=m(e),$(de.$$.fragment,e),ft=m(e),fe=b(e,"P",{"data-svelte-h":!0}),_(fe)!=="svelte-1dycvgp"&&(fe.textContent=Yt),bt=m(e),V.l(e),Ve=m(e),$(be.$$.fragment,e),_t=m(e),_e=b(e,"P",{"data-svelte-h":!0}),_(_e)!=="svelte-1bsyn9"&&(_e.textContent=Dt),Mt=m(e),$(Me.$$.fragment,e),$t=m(e),$e=b(e,"P",{"data-svelte-h":!0}),_($e)!=="svelte-1u8wktc"&&($e.textContent=Ot),yt=m(e),$(ye.$$.fragment,e),ht=m(e),Ge=b(e,"P",{}),_l(Ge).forEach(o),this.h()},h(){Ml(l,"name","hf:doc:metadata"),Ml(l,"content",Xl)},m(e,i){wl(document.head,l),a(e,n,i),a(e,t,i),a(e,s,i),y(g,e,i),a(e,r,i),y(v,e,i),a(e,qe,i),he[T].m(e,i),a(e,ze,i),ge[J].m(e,i),a(e,Ue,i),R.m(e,i),a(e,Ze,i),a(e,q,i),a(e,He,i),y(H,e,i),a(e,Ne,i),a(e,N,i),a(e,Le,i),ve[C].m(e,i),a(e,Be,i),a(e,L,i),a(e,Qe,i),y(Q,e,i),a(e,Ae,i),y(A,e,i),a(e,Se,i),a(e,S,i),a(e,Xe,i),y(X,e,i),a(e,Fe,i),a(e,F,i),a(e,Pe,i),ke[U].m(e,i),a(e,Ie,i),a(e,P,i),a(e,Ye,i),a(e,Y,i),a(e,De,i),a(e,D,i),a(e,Oe,i),Te[B].m(e,i),a(e,We,i),a(e,O,i),a(e,Ke,i),a(e,K,i),a(e,et,i),a(e,ee,i),a(e,tt,i),a(e,te,i),a(e,lt,i),y(le,e,i),a(e,it,i),a(e,ie,i),a(e,nt,i),y(ne,e,i),a(e,ot,i),a(e,oe,i),a(e,at,i),we[W].m(e,i),a(e,Ee,i),a(e,ae,i),a(e,st,i),G.m(e,i),a(e,xe,i),y(se,e,i),a(e,rt,i),a(e,re,i),a(e,ct,i),a(e,ce,i),a(e,mt,i),a(e,me,i),a(e,pt,i),y(pe,e,i),a(e,ut,i),a(e,ue,i),a(e,dt,i),y(de,e,i),a(e,ft,i),a(e,fe,i),a(e,bt,i),Je[x].m(e,i),a(e,Ve,i),y(be,e,i),a(e,_t,i),a(e,_e,i),a(e,Mt,i),y(Me,e,i),a(e,$t,i),a(e,$e,i),a(e,yt,i),y(ye,e,i),a(e,ht,i),a(e,Ge,i),gt=!0},p(e,[i]){const bl={};i&1&&(bl.fw=e[0]),g.$set(bl);let Tt=T;T=el(e),T!==Tt&&(Ce(),p(he[Tt],1,1,()=>{he[Tt]=null}),je(),w=he[T],w||(w=he[T]=Kt[T](e),w.c()),u(w,1),w.m(ze.parentNode,ze));let wt=J;J=ll(e),J!==wt&&(Ce(),p(ge[wt],1,1,()=>{ge[wt]=null}),je(),j=ge[J],j||(j=ge[J]=tl[J](e),j.c()),u(j,1),j.m(Ue.parentNode,Ue)),vt!==(vt=il(e))&&(R.d(1),R=vt(e),R&&(R.c(),R.m(Ze.parentNode,Ze)));let Jt=C;C=ol(e),C!==Jt&&(Ce(),p(ve[Jt],1,1,()=>{ve[Jt]=null}),je(),z=ve[C],z||(z=ve[C]=nl[C](e),z.c()),u(z,1),z.m(Be.parentNode,Be));let jt=U;U=sl(e),U!==jt&&(Ce(),p(ke[jt],1,1,()=>{ke[jt]=null}),je(),Z=ke[U],Z||(Z=ke[U]=al[U](e),Z.c()),u(Z,1),Z.m(Ie.parentNode,Ie));let Ct=B;B=cl(e),B!==Ct&&(Ce(),p(Te[Ct],1,1,()=>{Te[Ct]=null}),je(),I=Te[B],I||(I=Te[B]=rl[B](e),I.c()),u(I,1),I.m(We.parentNode,We));let zt=W;W=pl(e),W!==zt&&(Ce(),p(we[zt],1,1,()=>{we[zt]=null}),je(),E=we[W],E||(E=we[W]=ml[W](e),E.c()),u(E,1),E.m(Ee.parentNode,Ee)),kt!==(kt=ul(e))&&(G.d(1),G=kt(e),G&&(G.c(),G.m(xe.parentNode,xe)));let Ut=x;x=fl(e),x!==Ut&&(Ce(),p(Je[Ut],1,1,()=>{Je[Ut]=null}),je(),V=Je[x],V||(V=Je[x]=dl[x](e),V.c()),u(V,1),V.m(Ve.parentNode,Ve))},i(e){gt||(u(g.$$.fragment,e),u(v.$$.fragment,e),u(w),u(j),u(H.$$.fragment,e),u(z),u(Q.$$.fragment,e),u(A.$$.fragment,e),u(X.$$.fragment,e),u(Z),u(I),u(le.$$.fragment,e),u(ne.$$.fragment,e),u(E),u(se.$$.fragment,e),u(pe.$$.fragment,e),u(de.$$.fragment,e),u(V),u(be.$$.fragment,e),u(Me.$$.fragment,e),u(ye.$$.fragment,e),gt=!0)},o(e){p(g.$$.fragment,e),p(v.$$.fragment,e),p(w),p(j),p(H.$$.fragment,e),p(z),p(Q.$$.fragment,e),p(A.$$.fragment,e),p(X.$$.fragment,e),p(Z),p(I),p(le.$$.fragment,e),p(ne.$$.fragment,e),p(E),p(se.$$.fragment,e),p(pe.$$.fragment,e),p(de.$$.fragment,e),p(V),p(be.$$.fragment,e),p(Me.$$.fragment,e),p(ye.$$.fragment,e),gt=!1},d(e){e&&(o(n),o(t),o(s),o(r),o(qe),o(ze),o(Ue),o(Ze),o(q),o(He),o(Ne),o(N),o(Le),o(Be),o(L),o(Qe),o(Ae),o(Se),o(S),o(Xe),o(Fe),o(F),o(Pe),o(Ie),o(P),o(Ye),o(Y),o(De),o(D),o(Oe),o(We),o(O),o(Ke),o(K),o(et),o(ee),o(tt),o(te),o(lt),o(it),o(ie),o(nt),o(ot),o(oe),o(at),o(Ee),o(ae),o(st),o(xe),o(rt),o(re),o(ct),o(ce),o(mt),o(me),o(pt),o(ut),o(ue),o(dt),o(ft),o(fe),o(bt),o(Ve),o(_t),o(_e),o(Mt),o($t),o($e),o(yt),o(ht),o(Ge)),o(l),h(g,e),h(v,e),he[T].d(e),ge[J].d(e),R.d(e),h(H,e),ve[C].d(e),h(Q,e),h(A,e),h(X,e),ke[U].d(e),Te[B].d(e),h(le,e),h(ne,e),we[W].d(e),G.d(e),h(se,e),h(pe,e),h(de,e),Je[x].d(e),h(be,e),h(Me,e),h(ye,e)}}}const Xl='{"title":"Models","local":"models","sections":[{"title":"Creare un trasformatore","local":"creare-un-trasformatore","sections":[{"title":"Diversi metodi di caricamento","local":"diversi-metodi-di-caricamento","sections":[],"depth":3},{"title":"Metodi di salvataggio","local":"metodi-di-salvataggio","sections":[],"depth":3}],"depth":2},{"title":"Using a Transformer model for inference","local":"using-a-transformer-model-for-inference","sections":[{"title":"Uso dei tensori come input del modello","local":"uso-dei-tensori-come-input-del-modello","sections":[],"depth":3}],"depth":2}],"depth":1}';function Fl(d,l,n){let t="pt";return gl(()=>{const s=new URLSearchParams(window.location.search);n(0,t=s.get("fw")||"pt")}),[t]}class li extends vl{constructor(l){super(),kl(this,l,Fl,Sl,hl,{})}}export{li as component};
