import{s as $l,o as yl}from"../chunks/scheduler.37c15a92.js";import{S as hl,i as kl,g as f,s as c,r as M,A as vl,h as b,f as o,c as m,j as fl,u as $,x as _,k as bl,y as gl,a,v as y,t as p,b as Je,d as u,w as h,p as je}from"../chunks/index.2bf4358c.js";import{Y as _l}from"../chunks/Youtube.1e50a667.js";import{C as g}from"../chunks/CodeBlock.4f5fc1ad.js";import{D as Ml}from"../chunks/DocNotebookDropdown.d9dfeb24.js";import{F as Tl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Re}from"../chunks/Heading.8ada512a.js";function wl(d){let l,n;return l=new Ml({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 Jl(d){let l,n;return l=new Ml({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 jl(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 Cl(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 zl(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,k="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=k},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=k)},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 Ul(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,k="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=k},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=k)},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 Zl(d){let l,n;return l=new g({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 Bl(d){let l,n;return l=new g({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 Il(d){let l,n;return l=new g({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 Wl(d){let l,n;return l=new g({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 El(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).",k;return l=new g({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),k=!0},i(r){k||(u(l.$$.fragment,r),k=!0)},o(r){p(l.$$.fragment,r),k=!1},d(r){r&&(o(n),o(t)),h(l,r)}}}function xl(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).",k;return l=new g({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),k=!0},i(r){k||(u(l.$$.fragment,r),k=!0)},o(r){p(l.$$.fragment,r),k=!1},d(r){r&&(o(n),o(t)),h(l,r)}}}function Rl(d){let l,n;return l=new g({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 Vl(d){let l,n;return l=new g({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHB5dG9yY2hfbW9kZWwuYmlu",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>pytorch_model.<span class="hljs-keyword">bin</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 Hl(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 ql(d){let l,n="Il file <em>pytorch_model.bin</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-13dj294"&&(l.innerHTML=n)},m(t,s){a(t,l,s)},d(t){t&&o(l)}}}function Gl(d){let l,n;return l=new g({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 Nl(d){let l,n;return l=new g({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 Ll(d){let l,n,t,s,k,r,v,He,T,w,Ce,J,j,ze,Ue,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.",qe,G,Ge,N,Ut="La prima cosa da fare per inizializzare un modello BERT è caricare un oggetto di configurazione:",Ne,C,z,Ze,L,Zt="La configurazione contiene molti attributi che vengono utilizzati per costruire il modello:",Le,Q,Qe,A,Ae,Y,Bt="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.",Ye,S,Se,X,It="La creazione di un modello dalla configurazione predefinita lo inizializza con valori casuali:",Xe,U,Z,Be,F,Wt="Il modello può essere utilizzato in questo stato, ma produrrà risultati incomprensibili; è necessario addestrarlo prima.",Fe,P,Et='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.',Pe,D,xt="Caricare un modello Transformer già addestrato è semplice: lo si può fare usando il metodo <code>from_pretrained()</code>:",De,B,I,Ie,O,Rt='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>.',Oe,K,Vt="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.",Ke,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>.",et,te,qt='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>.',tt,le,lt,ie,Gt="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:",it,ne,nt,oe,Nt="In questo modo si salvano due file sul disco:",ot,W,E,We,ae,Lt="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.",at,Ee,se,st,re,Qt="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.",rt,ce,At="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.",ct,me,Yt="Supponiamo di avere un paio di sequenze:",mt,pe,pt,ue,St="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:",ut,de,dt,fe,Xt="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:",ft,x,R,xe,be,bt,_e,Ft="Utilizzare i tensori con il modello è estremamente semplice: basta chiamare il modello con gli input:",_t,Me,Mt,$e,Pt="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.",$t,Ve,yt;k=new Tl({props:{fw:d[0]}}),v=new Re({props:{title:"Models",local:"models",headingTag:"h1"}});const Dt=[Jl,wl],ye=[];function Ot(e,i){return e[0]==="pt"?0:1}T=Ot(d),w=ye[T]=Dt[T](d);const Kt=[Cl,jl],he=[];function el(e,i){return e[0]==="pt"?0:1}J=el(d),j=he[J]=Kt[J](d);function tl(e,i){return e[0]==="pt"?Ul:zl}let ht=tl(d),V=ht(d);G=new Re({props:{title:"Creare un trasformatore",local:"creare-un-trasformatore",headingTag:"h2"}});const ll=[Bl,Zl],ke=[];function il(e,i){return e[0]==="pt"?0:1}C=il(d),z=ke[C]=ll[C](d),Q=new g({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),A=new g({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}}),S=new Re({props:{title:"Diversi metodi di caricamento",local:"diversi-metodi-di-caricamento",headingTag:"h3"}});const nl=[Wl,Il],ve=[];function ol(e,i){return e[0]==="pt"?0:1}U=ol(d),Z=ve[U]=nl[U](d);const al=[xl,El],ge=[];function sl(e,i){return e[0]==="pt"?0:1}B=sl(d),I=ge[B]=al[B](d),le=new Re({props:{title:"Metodi di salvataggio",local:"metodi-di-salvataggio",headingTag:"h3"}}),ne=new g({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const rl=[Vl,Rl],Te=[];function cl(e,i){return e[0]==="pt"?0:1}W=cl(d),E=Te[W]=rl[W](d);function ml(e,i){return e[0]==="pt"?ql:Hl}let kt=ml(d),H=kt(d);se=new Re({props:{title:"Using a Transformer model for inference",local:"using-a-transformer-model-for-inference",headingTag:"h2"}}),pe=new g({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 g({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 pl=[Nl,Gl],we=[];function ul(e,i){return e[0]==="pt"?0:1}return x=ul(d),R=we[x]=pl[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 g({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),{c(){l=f("meta"),n=c(),t=f("p"),s=c(),M(k.$$.fragment),r=c(),M(v.$$.fragment),He=c(),w.c(),Ce=c(),j.c(),ze=c(),V.c(),Ue=c(),q=f("p"),q.textContent=zt,qe=c(),M(G.$$.fragment),Ge=c(),N=f("p"),N.textContent=Ut,Ne=c(),z.c(),Ze=c(),L=f("p"),L.textContent=Zt,Le=c(),M(Q.$$.fragment),Qe=c(),M(A.$$.fragment),Ae=c(),Y=f("p"),Y.innerHTML=Bt,Ye=c(),M(S.$$.fragment),Se=c(),X=f("p"),X.textContent=It,Xe=c(),Z.c(),Be=c(),F=f("p"),F.textContent=Wt,Fe=c(),P=f("p"),P.innerHTML=Et,Pe=c(),D=f("p"),D.innerHTML=xt,De=c(),I.c(),Ie=c(),O=f("p"),O.innerHTML=Rt,Oe=c(),K=f("p"),K.textContent=Vt,Ke=c(),ee=f("p"),ee.innerHTML=Ht,et=c(),te=f("p"),te.innerHTML=qt,tt=c(),M(le.$$.fragment),lt=c(),ie=f("p"),ie.innerHTML=Gt,it=c(),M(ne.$$.fragment),nt=c(),oe=f("p"),oe.textContent=Nt,ot=c(),E.c(),We=c(),ae=f("p"),ae.innerHTML=Lt,at=c(),H.c(),Ee=c(),M(se.$$.fragment),st=c(),re=f("p"),re.textContent=Qt,rt=c(),ce=f("p"),ce.textContent=At,ct=c(),me=f("p"),me.textContent=Yt,mt=c(),M(pe.$$.fragment),pt=c(),ue=f("p"),ue.innerHTML=St,ut=c(),M(de.$$.fragment),dt=c(),fe=f("p"),fe.textContent=Xt,ft=c(),R.c(),xe=c(),M(be.$$.fragment),bt=c(),_e=f("p"),_e.textContent=Ft,_t=c(),M(Me.$$.fragment),Mt=c(),$e=f("p"),$e.textContent=Pt,$t=c(),Ve=f("p"),this.h()},l(e){const i=vl("svelte-u9bgzb",document.head);l=b(i,"META",{name:!0,content:!0}),i.forEach(o),n=m(e),t=b(e,"P",{}),fl(t).forEach(o),s=m(e),$(k.$$.fragment,e),r=m(e),$(v.$$.fragment,e),He=m(e),w.l(e),Ce=m(e),j.l(e),ze=m(e),V.l(e),Ue=m(e),q=b(e,"P",{"data-svelte-h":!0}),_(q)!=="svelte-19yjkd2"&&(q.textContent=zt),qe=m(e),$(G.$$.fragment,e),Ge=m(e),N=b(e,"P",{"data-svelte-h":!0}),_(N)!=="svelte-sep5xb"&&(N.textContent=Ut),Ne=m(e),z.l(e),Ze=m(e),L=b(e,"P",{"data-svelte-h":!0}),_(L)!=="svelte-mn48kp"&&(L.textContent=Zt),Le=m(e),$(Q.$$.fragment,e),Qe=m(e),$(A.$$.fragment,e),Ae=m(e),Y=b(e,"P",{"data-svelte-h":!0}),_(Y)!=="svelte-wxezk7"&&(Y.innerHTML=Bt),Ye=m(e),$(S.$$.fragment,e),Se=m(e),X=b(e,"P",{"data-svelte-h":!0}),_(X)!=="svelte-17l7gl5"&&(X.textContent=It),Xe=m(e),Z.l(e),Be=m(e),F=b(e,"P",{"data-svelte-h":!0}),_(F)!=="svelte-mgikte"&&(F.textContent=Wt),Fe=m(e),P=b(e,"P",{"data-svelte-h":!0}),_(P)!=="svelte-r16bee"&&(P.innerHTML=Et),Pe=m(e),D=b(e,"P",{"data-svelte-h":!0}),_(D)!=="svelte-yusqd1"&&(D.innerHTML=xt),De=m(e),I.l(e),Ie=m(e),O=b(e,"P",{"data-svelte-h":!0}),_(O)!=="svelte-19oiivu"&&(O.innerHTML=Rt),Oe=m(e),K=b(e,"P",{"data-svelte-h":!0}),_(K)!=="svelte-kymetl"&&(K.textContent=Vt),Ke=m(e),ee=b(e,"P",{"data-svelte-h":!0}),_(ee)!=="svelte-1ra7or1"&&(ee.innerHTML=Ht),et=m(e),te=b(e,"P",{"data-svelte-h":!0}),_(te)!=="svelte-1qx7292"&&(te.innerHTML=qt),tt=m(e),$(le.$$.fragment,e),lt=m(e),ie=b(e,"P",{"data-svelte-h":!0}),_(ie)!=="svelte-v1sy0v"&&(ie.innerHTML=Gt),it=m(e),$(ne.$$.fragment,e),nt=m(e),oe=b(e,"P",{"data-svelte-h":!0}),_(oe)!=="svelte-1y6yq67"&&(oe.textContent=Nt),ot=m(e),E.l(e),We=m(e),ae=b(e,"P",{"data-svelte-h":!0}),_(ae)!=="svelte-re0uw2"&&(ae.innerHTML=Lt),at=m(e),H.l(e),Ee=m(e),$(se.$$.fragment,e),st=m(e),re=b(e,"P",{"data-svelte-h":!0}),_(re)!=="svelte-78p3r8"&&(re.textContent=Qt),rt=m(e),ce=b(e,"P",{"data-svelte-h":!0}),_(ce)!=="svelte-4vle6d"&&(ce.textContent=At),ct=m(e),me=b(e,"P",{"data-svelte-h":!0}),_(me)!=="svelte-amlzbw"&&(me.textContent=Yt),mt=m(e),$(pe.$$.fragment,e),pt=m(e),ue=b(e,"P",{"data-svelte-h":!0}),_(ue)!=="svelte-1635jd"&&(ue.innerHTML=St),ut=m(e),$(de.$$.fragment,e),dt=m(e),fe=b(e,"P",{"data-svelte-h":!0}),_(fe)!=="svelte-1dycvgp"&&(fe.textContent=Xt),ft=m(e),R.l(e),xe=m(e),$(be.$$.fragment,e),bt=m(e),_e=b(e,"P",{"data-svelte-h":!0}),_(_e)!=="svelte-1bsyn9"&&(_e.textContent=Ft),_t=m(e),$(Me.$$.fragment,e),Mt=m(e),$e=b(e,"P",{"data-svelte-h":!0}),_($e)!=="svelte-1u8wktc"&&($e.textContent=Pt),$t=m(e),Ve=b(e,"P",{}),fl(Ve).forEach(o),this.h()},h(){bl(l,"name","hf:doc:metadata"),bl(l,"content",Ql)},m(e,i){gl(document.head,l),a(e,n,i),a(e,t,i),a(e,s,i),y(k,e,i),a(e,r,i),y(v,e,i),a(e,He,i),ye[T].m(e,i),a(e,Ce,i),he[J].m(e,i),a(e,ze,i),V.m(e,i),a(e,Ue,i),a(e,q,i),a(e,qe,i),y(G,e,i),a(e,Ge,i),a(e,N,i),a(e,Ne,i),ke[C].m(e,i),a(e,Ze,i),a(e,L,i),a(e,Le,i),y(Q,e,i),a(e,Qe,i),y(A,e,i),a(e,Ae,i),a(e,Y,i),a(e,Ye,i),y(S,e,i),a(e,Se,i),a(e,X,i),a(e,Xe,i),ve[U].m(e,i),a(e,Be,i),a(e,F,i),a(e,Fe,i),a(e,P,i),a(e,Pe,i),a(e,D,i),a(e,De,i),ge[B].m(e,i),a(e,Ie,i),a(e,O,i),a(e,Oe,i),a(e,K,i),a(e,Ke,i),a(e,ee,i),a(e,et,i),a(e,te,i),a(e,tt,i),y(le,e,i),a(e,lt,i),a(e,ie,i),a(e,it,i),y(ne,e,i),a(e,nt,i),a(e,oe,i),a(e,ot,i),Te[W].m(e,i),a(e,We,i),a(e,ae,i),a(e,at,i),H.m(e,i),a(e,Ee,i),y(se,e,i),a(e,st,i),a(e,re,i),a(e,rt,i),a(e,ce,i),a(e,ct,i),a(e,me,i),a(e,mt,i),y(pe,e,i),a(e,pt,i),a(e,ue,i),a(e,ut,i),y(de,e,i),a(e,dt,i),a(e,fe,i),a(e,ft,i),we[x].m(e,i),a(e,xe,i),y(be,e,i),a(e,bt,i),a(e,_e,i),a(e,_t,i),y(Me,e,i),a(e,Mt,i),a(e,$e,i),a(e,$t,i),a(e,Ve,i),yt=!0},p(e,[i]){const dl={};i&1&&(dl.fw=e[0]),k.$set(dl);let vt=T;T=Ot(e),T!==vt&&(je(),p(ye[vt],1,1,()=>{ye[vt]=null}),Je(),w=ye[T],w||(w=ye[T]=Dt[T](e),w.c()),u(w,1),w.m(Ce.parentNode,Ce));let gt=J;J=el(e),J!==gt&&(je(),p(he[gt],1,1,()=>{he[gt]=null}),Je(),j=he[J],j||(j=he[J]=Kt[J](e),j.c()),u(j,1),j.m(ze.parentNode,ze)),ht!==(ht=tl(e))&&(V.d(1),V=ht(e),V&&(V.c(),V.m(Ue.parentNode,Ue)));let Tt=C;C=il(e),C!==Tt&&(je(),p(ke[Tt],1,1,()=>{ke[Tt]=null}),Je(),z=ke[C],z||(z=ke[C]=ll[C](e),z.c()),u(z,1),z.m(Ze.parentNode,Ze));let wt=U;U=ol(e),U!==wt&&(je(),p(ve[wt],1,1,()=>{ve[wt]=null}),Je(),Z=ve[U],Z||(Z=ve[U]=nl[U](e),Z.c()),u(Z,1),Z.m(Be.parentNode,Be));let Jt=B;B=sl(e),B!==Jt&&(je(),p(ge[Jt],1,1,()=>{ge[Jt]=null}),Je(),I=ge[B],I||(I=ge[B]=al[B](e),I.c()),u(I,1),I.m(Ie.parentNode,Ie));let jt=W;W=cl(e),W!==jt&&(je(),p(Te[jt],1,1,()=>{Te[jt]=null}),Je(),E=Te[W],E||(E=Te[W]=rl[W](e),E.c()),u(E,1),E.m(We.parentNode,We)),kt!==(kt=ml(e))&&(H.d(1),H=kt(e),H&&(H.c(),H.m(Ee.parentNode,Ee)));let Ct=x;x=ul(e),x!==Ct&&(je(),p(we[Ct],1,1,()=>{we[Ct]=null}),Je(),R=we[x],R||(R=we[x]=pl[x](e),R.c()),u(R,1),R.m(xe.parentNode,xe))},i(e){yt||(u(k.$$.fragment,e),u(v.$$.fragment,e),u(w),u(j),u(G.$$.fragment,e),u(z),u(Q.$$.fragment,e),u(A.$$.fragment,e),u(S.$$.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(R),u(be.$$.fragment,e),u(Me.$$.fragment,e),yt=!0)},o(e){p(k.$$.fragment,e),p(v.$$.fragment,e),p(w),p(j),p(G.$$.fragment,e),p(z),p(Q.$$.fragment,e),p(A.$$.fragment,e),p(S.$$.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(R),p(be.$$.fragment,e),p(Me.$$.fragment,e),yt=!1},d(e){e&&(o(n),o(t),o(s),o(r),o(He),o(Ce),o(ze),o(Ue),o(q),o(qe),o(Ge),o(N),o(Ne),o(Ze),o(L),o(Le),o(Qe),o(Ae),o(Y),o(Ye),o(Se),o(X),o(Xe),o(Be),o(F),o(Fe),o(P),o(Pe),o(D),o(De),o(Ie),o(O),o(Oe),o(K),o(Ke),o(ee),o(et),o(te),o(tt),o(lt),o(ie),o(it),o(nt),o(oe),o(ot),o(We),o(ae),o(at),o(Ee),o(st),o(re),o(rt),o(ce),o(ct),o(me),o(mt),o(pt),o(ue),o(ut),o(dt),o(fe),o(ft),o(xe),o(bt),o(_e),o(_t),o(Mt),o($e),o($t),o(Ve)),o(l),h(k,e),h(v,e),ye[T].d(e),he[J].d(e),V.d(e),h(G,e),ke[C].d(e),h(Q,e),h(A,e),h(S,e),ve[U].d(e),ge[B].d(e),h(le,e),h(ne,e),Te[W].d(e),H.d(e),h(se,e),h(pe,e),h(de,e),we[x].d(e),h(be,e),h(Me,e)}}}const Ql='{"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 Al(d,l,n){let t="pt";return yl(()=>{const s=new URLSearchParams(window.location.search);n(0,t=s.get("fw")||"pt")}),[t]}class Kl extends hl{constructor(l){super(),kl(this,l,Al,Ll,$l,{})}}export{Kl as component};
