import{s as $o,o as yo}from"../chunks/scheduler.37c15a92.js";import{S as ho,i as go,g as f,s as m,r as M,A as vo,h as b,f as l,c,j as fo,u as $,x as _,k as bo,y as To,a as r,v as y,t as d,b as Je,d as p,w as h,p as je}from"../chunks/index.2bf4358c.js";import{Y as _o}from"../chunks/Youtube.1e50a667.js";import{C as T}from"../chunks/CodeBlock.4e987730.js";import{C as Mo}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as ko}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Ie,E as wo}from"../chunks/index.b8688d36.js";function Jo(u){let o,s;return o=new Mo({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/pt/chapter2/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/pt/chapter2/section3_tf.ipynb"}]}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function jo(u){let o,s;return o=new Mo({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/pt/chapter2/section3_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/pt/chapter2/section3_pt.ipynb"}]}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function Co(u){let o,s;return o=new _o({props:{id:"d3JVgghSOew"}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function Bo(u){let o,s;return o=new _o({props:{id:"AhChOFRegn4"}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function qo(u){let o,s="Nesta seção, vamos analisar mais de perto a criação e a utilização de um modelo. Vamos utilizar a classe <code>TFAutoModel</code>, que é útil quando você quer instanciar qualquer modelo a partir de um checkpoint.",t,n,g="A classe <code>TFAutoModel</code> e todas as classes filhas são na verdade simples  wrapper sobre a grande variedade de modelos disponíveis na biblioteca. É um wrapper inteligente, pois pode automaticamente “adivinhar” a arquitetura apropriada do modelo para seu checkpoint, e então instancia um modelo com esta arquitetura.";return{c(){o=f("p"),o.innerHTML=s,t=m(),n=f("p"),n.innerHTML=g},l(i){o=b(i,"P",{"data-svelte-h":!0}),_(o)!=="svelte-1ffc8gc"&&(o.innerHTML=s),t=c(i),n=b(i,"P",{"data-svelte-h":!0}),_(n)!=="svelte-1apd2go"&&(n.innerHTML=g)},m(i,v){r(i,o,v),r(i,t,v),r(i,n,v)},d(i){i&&(l(o),l(t),l(n))}}}function zo(u){let o,s="Nesta seção, vamos analisar mais de perto a criação e a utilização de um modelo. Vamos utilizar a classe <code>AutoModel</code>, que é útil quando você quer instanciar qualquer modelo a partir de um checkpoint.",t,n,g="A classe <code>AutoModel</code> e todas as classes filhas são na verdade simples wrapper sobre a grande variedade de modelos disponíveis na biblioteca. É um wrapper inteligente, pois pode automaticamente “adivinhar” a arquitetura apropriada do modelo para seu checkpoint, e então instancia um modelo com esta arquitetura.";return{c(){o=f("p"),o.innerHTML=s,t=m(),n=f("p"),n.innerHTML=g},l(i){o=b(i,"P",{"data-svelte-h":!0}),_(o)!=="svelte-3onz4q"&&(o.innerHTML=s),t=c(i),n=b(i,"P",{"data-svelte-h":!0}),_(n)!=="svelte-q7loqi"&&(n.innerHTML=g)},m(i,v){r(i,o,v),r(i,t,v),r(i,n,v)},d(i){i&&(l(o),l(t),l(n))}}}function Zo(u){let o,s;return o=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQSUyMyUyMENvbnN0cnVpbmRvJTIwYSUyMGNvbmZpZ3VyYSVDMyVBNyVDMyVBM28lMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEElMEElMjMlMjBDb25zdHJ1aW5kbyUyMG8lMjBtb2RlbG8lMjBhJTIwcGFydGlyJTIwZGElMjBjb25maWd1cmElQzMlQTclQzMlQTNvJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbChjb25maWcp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

<span class="hljs-comment"># Construindo a configuração</span>
config = BertConfig()

<span class="hljs-comment"># Construindo o modelo a partir da configuração</span>
model = TFBertModel(config)`,wrap:!1}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function Eo(u){let o,s;return o=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEElMjMlMjBDb25zdHJ1aW5kbyUyMGElMjBjb25maWd1cmElQzMlQTclQzMlQTNvJTBBY29uZmlnJTIwJTNEJTIwQmVydENvbmZpZygpJTBBJTBBJTIzJTIwQ29uc3RydWluZG8lMjBvJTIwbW9kZWxvJTIwYSUyMHBhcnRpciUyMGRhJTIwY29uZmlndXJhJUMzJUE3JUMzJUEzbyUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsKGNvbmZpZyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

<span class="hljs-comment"># Construindo a configuração</span>
config = BertConfig()

<span class="hljs-comment"># Construindo o modelo a partir da configuração</span>
model = BertModel(config)`,wrap:!1}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function Uo(u){let o,s;return o=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKSUwQSUwQSUyMyUyME8lMjBtb2RlbG8lMjAlQzMlQTklMjBpbmljaWFsaXphZG8lMjBhbGVhdG9yaWFtZW50ZSE=",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"># O modelo é inicializado aleatoriamente!</span>`,wrap:!1}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function Wo(u){let o,s;return o=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwTyUyMG1vZGVsbyUyMCVDMyVBOSUyMGluaWNpYWxpemFkbyUyMGFsZWF0b3JpYW1lbnRlIQ==",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"># O modelo é inicializado aleatoriamente!</span>`,wrap:!1}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function xo(u){let o,s,t,n="Como você viu anteriormente, poderíamos substituir o <code>TFBertModel</code> pela classe equivalente ao <code>TFAutoModel</code>. Faremos isto de agora em diante, pois isto produz um código generalista a partir de um checkpoint; se seu código funciona para checkpoint, ele deve funcionar perfeitamente com outro. Isto se aplica mesmo que a arquitetura seja diferente, desde que o checkpoint tenha sido treinado para uma tarefa semelhante (por exemplo, uma tarefa de análise de sentimento).",g;return o=new T({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(o.$$.fragment),s=m(),t=f("p"),t.innerHTML=n},l(i){$(o.$$.fragment,i),s=c(i),t=b(i,"P",{"data-svelte-h":!0}),_(t)!=="svelte-1wy2i14"&&(t.innerHTML=n)},m(i,v){y(o,i,v),r(i,s,v),r(i,t,v),g=!0},i(i){g||(p(o.$$.fragment,i),g=!0)},o(i){d(o.$$.fragment,i),g=!1},d(i){i&&(l(s),l(t)),h(o,i)}}}function Io(u){let o,s,t,n="Como você viu anteriormente, poderíamos substituir o <code>BertModel</code> pela classe equivalente ao <code>AutoModel</code>. Faremos isto de agora em diante, pois isto produz um código generalista a partir de um checkpoint; se seu código funciona para checkpoint, ele deve funcionar perfeitamente com outro. Isto se aplica mesmo que a arquitetura seja diferente, desde que o checkpoint tenha sido treinado para uma tarefa semelhante (por exemplo, uma tarefa de análise de sentimento).",g;return o=new T({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(o.$$.fragment),s=m(),t=f("p"),t.innerHTML=n},l(i){$(o.$$.fragment,i),s=c(i),t=b(i,"P",{"data-svelte-h":!0}),_(t)!=="svelte-10634d4"&&(t.innerHTML=n)},m(i,v){y(o,i,v),r(i,s,v),r(i,t,v),g=!0},i(i){g||(p(o.$$.fragment,i),g=!0)},o(i){d(o.$$.fragment,i),g=!1},d(i){i&&(l(s),l(t)),h(o,i)}}}function Ro(u){let o,s;return o=new T({props:{code:"bHMlMjBwYXRoX25vX3NldV9jb21wdXRhZG9yJTBBJTBBY29uZmlnLmpzb24lMjB0Zl9tb2RlbC5oNQ==",highlighted:`ls path_no_seu_computador

<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>tf_model.h5`,wrap:!1}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function Vo(u){let o,s;return o=new T({props:{code:"bHMlMjBwYXRoX25vX3NldV9jb21wdXRhZG9yJTBBJTBBY29uZmlnLmpzb24lMjBweXRvcmNoX21vZGVsLmJpbg==",highlighted:`ls path_no_seu_computador

<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(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function Ho(u){let o,s="O arquivo <em>tf_model.h5</em> é conhecido como o <em>dicionário de estado</em>; ele contém todos os pesos do seu modelo. Os dois arquivos andam de mãos dadas; a configuração é necessária para conhecer a arquitetura de seu modelo, enquanto os pesos do modelo são os parâmetros de seu modelo.";return{c(){o=f("p"),o.innerHTML=s},l(t){o=b(t,"P",{"data-svelte-h":!0}),_(o)!=="svelte-1vjjwvw"&&(o.innerHTML=s)},m(t,n){r(t,o,n)},d(t){t&&l(o)}}}function No(u){let o,s="O arquivo <em>pytorch_model.bin</em> é conhecido como o <em>dicionário de estado</em>; ele contém todos os pesos do seu modelo. Os dois arquivos andam de mãos dadas; a configuração é necessária para conhecer a arquitetura de seu modelo, enquanto os pesos do modelo são os parâmetros de seu modelo.";return{c(){o=f("p"),o.innerHTML=s},l(t){o=b(t,"P",{"data-svelte-h":!0}),_(o)!=="svelte-ht2p1j"&&(o.innerHTML=s)},m(t,n){r(t,o,n)},d(t){t&&l(o)}}}function Go(u){let o,s;return o=new T({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(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function Qo(u){let o,s;return o=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW5jb2RlZF9zZXF1ZW5jZXMp",highlighted:`<span class="hljs-keyword">import</span> torch

model_inputs = torch.tensor(encoded_sequences)`,wrap:!1}}),{c(){M(o.$$.fragment)},l(t){$(o.$$.fragment,t)},m(t,n){y(o,t,n),s=!0},i(t){s||(p(o.$$.fragment,t),s=!0)},o(t){d(o.$$.fragment,t),s=!1},d(t){h(o,t)}}}function Ao(u){let o,s,t,n,g,i,v,Ve,k,w,Ce,J,j,Be,qe,H,Bt="Entretanto, se você conhece o tipo de modelo que deseja usar, pode usar diretamente a classe que define sua arquitetura. Vamos dar uma olhada em como isto funciona com um modelo BERT.",He,N,Ne,G,qt="A primeira coisa que precisamos fazer para inicializar um modelo BERT é carregar um objeto de configuração:",Ge,C,B,ze,Q,zt="A configuração contém muitos atributos que são usados para construir o modelo:",Qe,A,Ae,L,Le,F,Zt="Embora você ainda não tenha visto o que todos esses atributos fazem, você deve reconhecer alguns deles: o atributo <code>hidden_size</code> define o tamanho do vetor <code>hidden_states</code>, e o <code>num_hidden_layers</code>  define o número de camadas que o Transformer possui.",Fe,X,Xe,P,Et="A criação de um modelo a partir da configuração padrão o inicializa com valores aleatórios:",Pe,q,z,Ze,D,Ut='O modelo pode ser utilizado neste estado, mas produzirá saídas errôneas; ele precisa ser treinado primeiro. Poderíamos treinar o modelo a partir do zero na tarefa em mãos, mas como você viu em <a href="/course/pt/chapter1">Capítulo 1</a>, isto exigiria muito tempo e muitos dados, e teria um impacto ambiental não negligenciável. Para evitar esforços desnecessários e duplicados, normalmente é possível compartilhar e reutilizar modelos que já foram treinados.',De,Y,Wt="Carregar um Transformer já treinado é simples - podemos fazer isso utilizando o método <code>from_pretrained()</code>:",Ye,Z,E,Ee,S,xt='No exemplo de código acima não utilizamos <code>BertConfig</code>, e em vez disso carregamos um modelo pré-treinado através do identificador <code>bert-base-cased</code>. Este é um checkpoint do modelo que foi treinado pelos próprios autores do BERT; você pode encontrar mais detalhes sobre ele em seu <a href="https://huggingface.co/bert-base-cased" rel="nofollow">model card</a>.',Se,O,It="Este modelo agora é inicializado com todos os pesos do checkpoint. Ele pode ser usado diretamente para inferência sobre as tarefas nas quais foi treinado, e também pode ser <em>fine-tuned</em> (aperfeiçoado) em uma nova tarefa. Treinando com pesos pré-treinados e não do zero, podemos rapidamente alcançar bons resultados.",Oe,K,Rt="Os pesos foram baixados e armazenados em cache (logo, para as futuras chamadas do método <code>from_pretrained()</code> não será realizado o download novamente) em sua respectiva pasta, que tem como padrão o path <em>~/.cache/huggingface/transformers</em>. Você pode personalizar sua pasta de cache definindo a variável de ambiente <code>HF_HOME</code>.",Ke,ee,Vt='O identificador usado para carregar o modelo pode ser o identificador de qualquer modelo no Model Hub, desde que seja compatível com a arquitetura BERT. A lista completa dos checkpoints BERT disponíveis podem ser encontrada [aqui].<a href="https://huggingface.co/models?filter=bert" rel="nofollow">https://huggingface.co/models?filter=bert</a>).',et,te,tt,oe,Ht="Salvar um modelo é tão fácil quanto carregar um - utilizamos o método <code>save_pretrained()</code>, que é análogo ao método <code>from_pretrained()</code>:",ot,ae,at,se,Nt="Isto salva dois arquivos em seu disco:",st,U,W,Ue,le,Gt="Se você der uma olhada no arquivo <em>config.json</em>, você reconhecerá os atributos necessários para construir a arquitetura modelo. Este arquivo também contém alguns metadados, como a origem do checkpoint e a versão 🤗 Transformers que você estava usando quando salvou o checkpoint pela última vez.",lt,We,re,rt,ne,Qt="Agora que você sabe como carregar e salvar um modelo, vamos tentar usá-lo para fazer algumas predições. Os Transformers só podem processar números - números que o tokenizer gera. Mas antes de discutirmos os tokenizers, vamos explorar quais entradas o modelo aceita.",nt,ie,At="Os Tokenizers podem se encarregar de lançar as entradas nos tensores da estrutura apropriada, mas para ajudá-lo a entender o que está acontecendo, vamos dar uma rápida olhada no que deve ser feito antes de enviar as entradas para o modelo.",it,me,Lt="Digamos que temos um par de sequências:",mt,ce,ct,de,Ft="O tokenizer os converte em índices de vocabulário que são normalmente chamados de <em>IDs de entrada</em>. Cada sequência é agora uma lista de números! A saída resultante é:",dt,pe,pt,ue,Xt="Esta é uma lista de sequências codificadas: uma lista de listas. Os tensores só aceitam shapes (tamanhos) retangulares (pense em matrizes). Esta “matriz” já é de forma retangular, portanto, convertê-la em um tensor é fácil:",ut,x,I,xe,fe,ft,be,Pt="Fazer uso dos tensores com o modelo é extremamente simples - chamamos apenas o modelo com os inputs:",bt,_e,_t,Me,Dt="Embora o modelo aceite muitos argumentos diferentes, apenas os IDs de entrada são necessários. Explicaremos o que os outros argumentos fazem e quando eles são necessários mais tarde, mas primeiro precisamos olhar mais de perto os tokenizers que constroem as entradas que um Transformer pode compreender.",Mt,$e,$t,Re,yt;g=new ko({props:{fw:u[0]}}),v=new Ie({props:{title:"Modelos",local:"modelos",headingTag:"h1"}});const Yt=[jo,Jo],ye=[];function St(e,a){return e[0]==="pt"?0:1}k=St(u),w=ye[k]=Yt[k](u);const Ot=[Bo,Co],he=[];function Kt(e,a){return e[0]==="pt"?0:1}J=Kt(u),j=he[J]=Ot[J](u);function eo(e,a){return e[0]==="pt"?zo:qo}let ht=eo(u),R=ht(u);N=new Ie({props:{title:"Criando um Transformer",local:"criando-um-transformer",headingTag:"h2"}});const to=[Eo,Zo],ge=[];function oo(e,a){return e[0]==="pt"?0:1}C=oo(u),B=ge[C]=to[C](u),A=new T({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),L=new T({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 Ie({props:{title:"Diferentes métodos de inicializar o modelo",local:"diferentes-métodos-de-inicializar-o-modelo",headingTag:"h3"}});const ao=[Wo,Uo],ve=[];function so(e,a){return e[0]==="pt"?0:1}q=so(u),z=ve[q]=ao[q](u);const lo=[Io,xo],Te=[];function ro(e,a){return e[0]==="pt"?0:1}Z=ro(u),E=Te[Z]=lo[Z](u),te=new Ie({props:{title:"Métodos para salvar/armazenar o modelo",local:"métodos-para-salvararmazenar-o-modelo",headingTag:"h3"}}),ae=new T({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMnBhdGhfbm9fc2V1X2NvbXB1dGFkb3IlMjIp",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;path_no_seu_computador&quot;</span>)',wrap:!1}});const no=[Vo,Ro],ke=[];function io(e,a){return e[0]==="pt"?0:1}U=io(u),W=ke[U]=no[U](u);function mo(e,a){return e[0]==="pt"?No:Ho}let gt=mo(u),V=gt(u);re=new Ie({props:{title:"Usando um modelo de Transformer para inferência",local:"usando-um-modelo-de-transformer-para-inferência",headingTag:"h2"}}),ce=new T({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}}),pe=new T({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 co=[Qo,Go],we=[];function po(e,a){return e[0]==="pt"?0:1}return x=po(u),I=we[x]=co[x](u),fe=new Ie({props:{title:"Usando os tensores como entradas para o modelo",local:"usando-os-tensores-como-entradas-para-o-modelo",headingTag:"h3"}}),_e=new T({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),$e=new wo({props:{source:"https://github.com/huggingface/course/blob/main/chapters/pt/chapter2/3.mdx"}}),{c(){o=f("meta"),s=m(),t=f("p"),n=m(),M(g.$$.fragment),i=m(),M(v.$$.fragment),Ve=m(),w.c(),Ce=m(),j.c(),Be=m(),R.c(),qe=m(),H=f("p"),H.textContent=Bt,He=m(),M(N.$$.fragment),Ne=m(),G=f("p"),G.textContent=qt,Ge=m(),B.c(),ze=m(),Q=f("p"),Q.textContent=zt,Qe=m(),M(A.$$.fragment),Ae=m(),M(L.$$.fragment),Le=m(),F=f("p"),F.innerHTML=Zt,Fe=m(),M(X.$$.fragment),Xe=m(),P=f("p"),P.textContent=Et,Pe=m(),z.c(),Ze=m(),D=f("p"),D.innerHTML=Ut,De=m(),Y=f("p"),Y.innerHTML=Wt,Ye=m(),E.c(),Ee=m(),S=f("p"),S.innerHTML=xt,Se=m(),O=f("p"),O.innerHTML=It,Oe=m(),K=f("p"),K.innerHTML=Rt,Ke=m(),ee=f("p"),ee.innerHTML=Vt,et=m(),M(te.$$.fragment),tt=m(),oe=f("p"),oe.innerHTML=Ht,ot=m(),M(ae.$$.fragment),at=m(),se=f("p"),se.textContent=Nt,st=m(),W.c(),Ue=m(),le=f("p"),le.innerHTML=Gt,lt=m(),V.c(),We=m(),M(re.$$.fragment),rt=m(),ne=f("p"),ne.textContent=Qt,nt=m(),ie=f("p"),ie.textContent=At,it=m(),me=f("p"),me.textContent=Lt,mt=m(),M(ce.$$.fragment),ct=m(),de=f("p"),de.innerHTML=Ft,dt=m(),M(pe.$$.fragment),pt=m(),ue=f("p"),ue.textContent=Xt,ut=m(),I.c(),xe=m(),M(fe.$$.fragment),ft=m(),be=f("p"),be.textContent=Pt,bt=m(),M(_e.$$.fragment),_t=m(),Me=f("p"),Me.textContent=Dt,Mt=m(),M($e.$$.fragment),$t=m(),Re=f("p"),this.h()},l(e){const a=vo("svelte-u9bgzb",document.head);o=b(a,"META",{name:!0,content:!0}),a.forEach(l),s=c(e),t=b(e,"P",{}),fo(t).forEach(l),n=c(e),$(g.$$.fragment,e),i=c(e),$(v.$$.fragment,e),Ve=c(e),w.l(e),Ce=c(e),j.l(e),Be=c(e),R.l(e),qe=c(e),H=b(e,"P",{"data-svelte-h":!0}),_(H)!=="svelte-b5fo1f"&&(H.textContent=Bt),He=c(e),$(N.$$.fragment,e),Ne=c(e),G=b(e,"P",{"data-svelte-h":!0}),_(G)!=="svelte-1nn3gc9"&&(G.textContent=qt),Ge=c(e),B.l(e),ze=c(e),Q=b(e,"P",{"data-svelte-h":!0}),_(Q)!=="svelte-1uk1vjz"&&(Q.textContent=zt),Qe=c(e),$(A.$$.fragment,e),Ae=c(e),$(L.$$.fragment,e),Le=c(e),F=b(e,"P",{"data-svelte-h":!0}),_(F)!=="svelte-1istizx"&&(F.innerHTML=Zt),Fe=c(e),$(X.$$.fragment,e),Xe=c(e),P=b(e,"P",{"data-svelte-h":!0}),_(P)!=="svelte-1uh39iq"&&(P.textContent=Et),Pe=c(e),z.l(e),Ze=c(e),D=b(e,"P",{"data-svelte-h":!0}),_(D)!=="svelte-8eo21h"&&(D.innerHTML=Ut),De=c(e),Y=b(e,"P",{"data-svelte-h":!0}),_(Y)!=="svelte-wfr5x6"&&(Y.innerHTML=Wt),Ye=c(e),E.l(e),Ee=c(e),S=b(e,"P",{"data-svelte-h":!0}),_(S)!=="svelte-12a7s59"&&(S.innerHTML=xt),Se=c(e),O=b(e,"P",{"data-svelte-h":!0}),_(O)!=="svelte-104b8mw"&&(O.innerHTML=It),Oe=c(e),K=b(e,"P",{"data-svelte-h":!0}),_(K)!=="svelte-hwhx3z"&&(K.innerHTML=Rt),Ke=c(e),ee=b(e,"P",{"data-svelte-h":!0}),_(ee)!=="svelte-br1wyv"&&(ee.innerHTML=Vt),et=c(e),$(te.$$.fragment,e),tt=c(e),oe=b(e,"P",{"data-svelte-h":!0}),_(oe)!=="svelte-1qwaa2x"&&(oe.innerHTML=Ht),ot=c(e),$(ae.$$.fragment,e),at=c(e),se=b(e,"P",{"data-svelte-h":!0}),_(se)!=="svelte-11sfza4"&&(se.textContent=Nt),st=c(e),W.l(e),Ue=c(e),le=b(e,"P",{"data-svelte-h":!0}),_(le)!=="svelte-u7otb2"&&(le.innerHTML=Gt),lt=c(e),V.l(e),We=c(e),$(re.$$.fragment,e),rt=c(e),ne=b(e,"P",{"data-svelte-h":!0}),_(ne)!=="svelte-5onznt"&&(ne.textContent=Qt),nt=c(e),ie=b(e,"P",{"data-svelte-h":!0}),_(ie)!=="svelte-18d3uf4"&&(ie.textContent=At),it=c(e),me=b(e,"P",{"data-svelte-h":!0}),_(me)!=="svelte-bmrbmh"&&(me.textContent=Lt),mt=c(e),$(ce.$$.fragment,e),ct=c(e),de=b(e,"P",{"data-svelte-h":!0}),_(de)!=="svelte-1nxb57d"&&(de.innerHTML=Ft),dt=c(e),$(pe.$$.fragment,e),pt=c(e),ue=b(e,"P",{"data-svelte-h":!0}),_(ue)!=="svelte-14xo9bo"&&(ue.textContent=Xt),ut=c(e),I.l(e),xe=c(e),$(fe.$$.fragment,e),ft=c(e),be=b(e,"P",{"data-svelte-h":!0}),_(be)!=="svelte-1sgfoec"&&(be.textContent=Pt),bt=c(e),$(_e.$$.fragment,e),_t=c(e),Me=b(e,"P",{"data-svelte-h":!0}),_(Me)!=="svelte-14azult"&&(Me.textContent=Dt),Mt=c(e),$($e.$$.fragment,e),$t=c(e),Re=b(e,"P",{}),fo(Re).forEach(l),this.h()},h(){bo(o,"name","hf:doc:metadata"),bo(o,"content",Lo)},m(e,a){To(document.head,o),r(e,s,a),r(e,t,a),r(e,n,a),y(g,e,a),r(e,i,a),y(v,e,a),r(e,Ve,a),ye[k].m(e,a),r(e,Ce,a),he[J].m(e,a),r(e,Be,a),R.m(e,a),r(e,qe,a),r(e,H,a),r(e,He,a),y(N,e,a),r(e,Ne,a),r(e,G,a),r(e,Ge,a),ge[C].m(e,a),r(e,ze,a),r(e,Q,a),r(e,Qe,a),y(A,e,a),r(e,Ae,a),y(L,e,a),r(e,Le,a),r(e,F,a),r(e,Fe,a),y(X,e,a),r(e,Xe,a),r(e,P,a),r(e,Pe,a),ve[q].m(e,a),r(e,Ze,a),r(e,D,a),r(e,De,a),r(e,Y,a),r(e,Ye,a),Te[Z].m(e,a),r(e,Ee,a),r(e,S,a),r(e,Se,a),r(e,O,a),r(e,Oe,a),r(e,K,a),r(e,Ke,a),r(e,ee,a),r(e,et,a),y(te,e,a),r(e,tt,a),r(e,oe,a),r(e,ot,a),y(ae,e,a),r(e,at,a),r(e,se,a),r(e,st,a),ke[U].m(e,a),r(e,Ue,a),r(e,le,a),r(e,lt,a),V.m(e,a),r(e,We,a),y(re,e,a),r(e,rt,a),r(e,ne,a),r(e,nt,a),r(e,ie,a),r(e,it,a),r(e,me,a),r(e,mt,a),y(ce,e,a),r(e,ct,a),r(e,de,a),r(e,dt,a),y(pe,e,a),r(e,pt,a),r(e,ue,a),r(e,ut,a),we[x].m(e,a),r(e,xe,a),y(fe,e,a),r(e,ft,a),r(e,be,a),r(e,bt,a),y(_e,e,a),r(e,_t,a),r(e,Me,a),r(e,Mt,a),y($e,e,a),r(e,$t,a),r(e,Re,a),yt=!0},p(e,[a]){const uo={};a&1&&(uo.fw=e[0]),g.$set(uo);let vt=k;k=St(e),k!==vt&&(je(),d(ye[vt],1,1,()=>{ye[vt]=null}),Je(),w=ye[k],w||(w=ye[k]=Yt[k](e),w.c()),p(w,1),w.m(Ce.parentNode,Ce));let Tt=J;J=Kt(e),J!==Tt&&(je(),d(he[Tt],1,1,()=>{he[Tt]=null}),Je(),j=he[J],j||(j=he[J]=Ot[J](e),j.c()),p(j,1),j.m(Be.parentNode,Be)),ht!==(ht=eo(e))&&(R.d(1),R=ht(e),R&&(R.c(),R.m(qe.parentNode,qe)));let kt=C;C=oo(e),C!==kt&&(je(),d(ge[kt],1,1,()=>{ge[kt]=null}),Je(),B=ge[C],B||(B=ge[C]=to[C](e),B.c()),p(B,1),B.m(ze.parentNode,ze));let wt=q;q=so(e),q!==wt&&(je(),d(ve[wt],1,1,()=>{ve[wt]=null}),Je(),z=ve[q],z||(z=ve[q]=ao[q](e),z.c()),p(z,1),z.m(Ze.parentNode,Ze));let Jt=Z;Z=ro(e),Z!==Jt&&(je(),d(Te[Jt],1,1,()=>{Te[Jt]=null}),Je(),E=Te[Z],E||(E=Te[Z]=lo[Z](e),E.c()),p(E,1),E.m(Ee.parentNode,Ee));let jt=U;U=io(e),U!==jt&&(je(),d(ke[jt],1,1,()=>{ke[jt]=null}),Je(),W=ke[U],W||(W=ke[U]=no[U](e),W.c()),p(W,1),W.m(Ue.parentNode,Ue)),gt!==(gt=mo(e))&&(V.d(1),V=gt(e),V&&(V.c(),V.m(We.parentNode,We)));let Ct=x;x=po(e),x!==Ct&&(je(),d(we[Ct],1,1,()=>{we[Ct]=null}),Je(),I=we[x],I||(I=we[x]=co[x](e),I.c()),p(I,1),I.m(xe.parentNode,xe))},i(e){yt||(p(g.$$.fragment,e),p(v.$$.fragment,e),p(w),p(j),p(N.$$.fragment,e),p(B),p(A.$$.fragment,e),p(L.$$.fragment,e),p(X.$$.fragment,e),p(z),p(E),p(te.$$.fragment,e),p(ae.$$.fragment,e),p(W),p(re.$$.fragment,e),p(ce.$$.fragment,e),p(pe.$$.fragment,e),p(I),p(fe.$$.fragment,e),p(_e.$$.fragment,e),p($e.$$.fragment,e),yt=!0)},o(e){d(g.$$.fragment,e),d(v.$$.fragment,e),d(w),d(j),d(N.$$.fragment,e),d(B),d(A.$$.fragment,e),d(L.$$.fragment,e),d(X.$$.fragment,e),d(z),d(E),d(te.$$.fragment,e),d(ae.$$.fragment,e),d(W),d(re.$$.fragment,e),d(ce.$$.fragment,e),d(pe.$$.fragment,e),d(I),d(fe.$$.fragment,e),d(_e.$$.fragment,e),d($e.$$.fragment,e),yt=!1},d(e){e&&(l(s),l(t),l(n),l(i),l(Ve),l(Ce),l(Be),l(qe),l(H),l(He),l(Ne),l(G),l(Ge),l(ze),l(Q),l(Qe),l(Ae),l(Le),l(F),l(Fe),l(Xe),l(P),l(Pe),l(Ze),l(D),l(De),l(Y),l(Ye),l(Ee),l(S),l(Se),l(O),l(Oe),l(K),l(Ke),l(ee),l(et),l(tt),l(oe),l(ot),l(at),l(se),l(st),l(Ue),l(le),l(lt),l(We),l(rt),l(ne),l(nt),l(ie),l(it),l(me),l(mt),l(ct),l(de),l(dt),l(pt),l(ue),l(ut),l(xe),l(ft),l(be),l(bt),l(_t),l(Me),l(Mt),l($t),l(Re)),l(o),h(g,e),h(v,e),ye[k].d(e),he[J].d(e),R.d(e),h(N,e),ge[C].d(e),h(A,e),h(L,e),h(X,e),ve[q].d(e),Te[Z].d(e),h(te,e),h(ae,e),ke[U].d(e),V.d(e),h(re,e),h(ce,e),h(pe,e),we[x].d(e),h(fe,e),h(_e,e),h($e,e)}}}const Lo='{"title":"Modelos","local":"modelos","sections":[{"title":"Criando um Transformer","local":"criando-um-transformer","sections":[{"title":"Diferentes métodos de inicializar o modelo","local":"diferentes-métodos-de-inicializar-o-modelo","sections":[],"depth":3},{"title":"Métodos para salvar/armazenar o modelo","local":"métodos-para-salvararmazenar-o-modelo","sections":[],"depth":3}],"depth":2},{"title":"Usando um modelo de Transformer para inferência","local":"usando-um-modelo-de-transformer-para-inferência","sections":[{"title":"Usando os tensores como entradas para o modelo","local":"usando-os-tensores-como-entradas-para-o-modelo","sections":[],"depth":3}],"depth":2}],"depth":1}';function Fo(u,o,s){let t="pt";return yo(()=>{const n=new URLSearchParams(window.location.search);s(0,t=n.get("fw")||"pt")}),[t]}class ea extends ho{constructor(o){super(),go(this,o,Fo,Ao,$o,{})}}export{ea as component};
