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