import{s as _o,o as Mo}from"../chunks/scheduler.37c15a92.js";import{S as $o,i as yo,g as f,s as m,r as M,A as ho,h as b,f as l,c,j as po,u as $,x as _,k as uo,y as vo,a as r,v as y,t as d,b as we,d as p,w as h,p as Je}from"../chunks/index.2bf4358c.js";import{Y as fo}from"../chunks/Youtube.1e50a667.js";import{C as g}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as bo}from"../chunks/CourseFloatingBanner.15ba07e6.js";import{F as To}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as xe}from"../chunks/Heading.8ada512a.js";function go(u){let o,s;return o=new bo({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 ko(u){let o,s;return o=new bo({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 wo(u){let o,s;return o=new fo({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 Jo(u){let o,s;return o=new fo({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 jo(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,v="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=v},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=v)},m(i,T){r(i,o,T),r(i,t,T),r(i,n,T)},d(i){i&&(l(o),l(t),l(n))}}}function Co(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,v="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=v},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=v)},m(i,T){r(i,o,T),r(i,t,T),r(i,n,T)},d(i){i&&(l(o),l(t),l(n))}}}function Bo(u){let o,s;return o=new g({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 qo(u){let o,s;return o=new g({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 zo(u){let o,s;return o=new g({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 Zo(u){let o,s;return o=new g({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 Eo(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).",v;return o=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(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,T){y(o,i,T),r(i,s,T),r(i,t,T),v=!0},i(i){v||(p(o.$$.fragment,i),v=!0)},o(i){d(o.$$.fragment,i),v=!1},d(i){i&&(l(s),l(t)),h(o,i)}}}function Uo(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).",v;return o=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(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,T){y(o,i,T),r(i,s,T),r(i,t,T),v=!0},i(i){v||(p(o.$$.fragment,i),v=!0)},o(i){d(o.$$.fragment,i),v=!1},d(i){i&&(l(s),l(t)),h(o,i)}}}function Wo(u){let o,s;return o=new g({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 xo(u){let o,s;return o=new g({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 Io(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 Ro(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 Vo(u){let o,s;return o=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(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;return o=new g({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 No(u){let o,s,t,n,v,i,T,Re,k,w,je,J,j,Ce,Be,H,jt="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.",Ve,N,He,G,Ct="A primeira coisa que precisamos fazer para inicializar um modelo BERT é carregar um objeto de configuração:",Ne,C,B,qe,Q,Bt="A configuração contém muitos atributos que são usados para construir o modelo:",Ge,A,Qe,L,Ae,F,qt="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.",Le,X,Fe,P,zt="A criação de um modelo a partir da configuração padrão o inicializa com valores aleatórios:",Xe,q,z,ze,D,Zt='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.',Pe,Y,Et="Carregar um Transformer já treinado é simples - podemos fazer isso utilizando o método <code>from_pretrained()</code>:",De,Z,E,Ze,S,Ut='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>.',Ye,O,Wt="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.",Se,K,xt="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>.",Oe,ee,It='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>).',Ke,te,et,oe,Rt="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>:",tt,ae,ot,se,Vt="Isto salva dois arquivos em seu disco:",at,U,W,Ee,le,Ht="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.",st,Ue,re,lt,ne,Nt="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.",rt,ie,Gt="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.",nt,me,Qt="Digamos que temos um par de sequências:",it,ce,mt,de,At="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 é:",ct,pe,dt,ue,Lt="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:",pt,x,I,We,fe,ut,be,Ft="Fazer uso dos tensores com o modelo é extremamente simples - chamamos apenas o modelo com os inputs:",ft,_e,bt,Me,Xt="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.",_t,Ie,Mt;v=new To({props:{fw:u[0]}}),T=new xe({props:{title:"Modelos",local:"modelos",headingTag:"h1"}});const Pt=[ko,go],$e=[];function Dt(e,a){return e[0]==="pt"?0:1}k=Dt(u),w=$e[k]=Pt[k](u);const Yt=[Jo,wo],ye=[];function St(e,a){return e[0]==="pt"?0:1}J=St(u),j=ye[J]=Yt[J](u);function Ot(e,a){return e[0]==="pt"?Co:jo}let $t=Ot(u),R=$t(u);N=new xe({props:{title:"Criando um Transformer",local:"criando-um-transformer",headingTag:"h2"}});const Kt=[qo,Bo],he=[];function eo(e,a){return e[0]==="pt"?0:1}C=eo(u),B=he[C]=Kt[C](u),A=new g({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),L=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}}),X=new xe({props:{title:"Diferentes métodos de inicializar o modelo",local:"diferentes-métodos-de-inicializar-o-modelo",headingTag:"h3"}});const to=[Zo,zo],ve=[];function oo(e,a){return e[0]==="pt"?0:1}q=oo(u),z=ve[q]=to[q](u);const ao=[Uo,Eo],Te=[];function so(e,a){return e[0]==="pt"?0:1}Z=so(u),E=Te[Z]=ao[Z](u),te=new xe({props:{title:"Métodos para salvar/armazenar o modelo",local:"métodos-para-salvararmazenar-o-modelo",headingTag:"h3"}}),ae=new g({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMnBhdGhfbm9fc2V1X2NvbXB1dGFkb3IlMjIp",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;path_no_seu_computador&quot;</span>)',wrap:!1}});const lo=[xo,Wo],ge=[];function ro(e,a){return e[0]==="pt"?0:1}U=ro(u),W=ge[U]=lo[U](u);function no(e,a){return e[0]==="pt"?Ro:Io}let yt=no(u),V=yt(u);re=new xe({props:{title:"Usando um modelo de Transformer para inferência",local:"usando-um-modelo-de-transformer-para-inferência",headingTag:"h2"}}),ce=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}}),pe=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 io=[Ho,Vo],ke=[];function mo(e,a){return e[0]==="pt"?0:1}return x=mo(u),I=ke[x]=io[x](u),fe=new xe({props:{title:"Usando os tensores como entradas para o modelo",local:"usando-os-tensores-como-entradas-para-o-modelo",headingTag:"h3"}}),_e=new g({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),{c(){o=f("meta"),s=m(),t=f("p"),n=m(),M(v.$$.fragment),i=m(),M(T.$$.fragment),Re=m(),w.c(),je=m(),j.c(),Ce=m(),R.c(),Be=m(),H=f("p"),H.textContent=jt,Ve=m(),M(N.$$.fragment),He=m(),G=f("p"),G.textContent=Ct,Ne=m(),B.c(),qe=m(),Q=f("p"),Q.textContent=Bt,Ge=m(),M(A.$$.fragment),Qe=m(),M(L.$$.fragment),Ae=m(),F=f("p"),F.innerHTML=qt,Le=m(),M(X.$$.fragment),Fe=m(),P=f("p"),P.textContent=zt,Xe=m(),z.c(),ze=m(),D=f("p"),D.innerHTML=Zt,Pe=m(),Y=f("p"),Y.innerHTML=Et,De=m(),E.c(),Ze=m(),S=f("p"),S.innerHTML=Ut,Ye=m(),O=f("p"),O.innerHTML=Wt,Se=m(),K=f("p"),K.innerHTML=xt,Oe=m(),ee=f("p"),ee.innerHTML=It,Ke=m(),M(te.$$.fragment),et=m(),oe=f("p"),oe.innerHTML=Rt,tt=m(),M(ae.$$.fragment),ot=m(),se=f("p"),se.textContent=Vt,at=m(),W.c(),Ee=m(),le=f("p"),le.innerHTML=Ht,st=m(),V.c(),Ue=m(),M(re.$$.fragment),lt=m(),ne=f("p"),ne.textContent=Nt,rt=m(),ie=f("p"),ie.textContent=Gt,nt=m(),me=f("p"),me.textContent=Qt,it=m(),M(ce.$$.fragment),mt=m(),de=f("p"),de.innerHTML=At,ct=m(),M(pe.$$.fragment),dt=m(),ue=f("p"),ue.textContent=Lt,pt=m(),I.c(),We=m(),M(fe.$$.fragment),ut=m(),be=f("p"),be.textContent=Ft,ft=m(),M(_e.$$.fragment),bt=m(),Me=f("p"),Me.textContent=Xt,_t=m(),Ie=f("p"),this.h()},l(e){const a=ho("svelte-u9bgzb",document.head);o=b(a,"META",{name:!0,content:!0}),a.forEach(l),s=c(e),t=b(e,"P",{}),po(t).forEach(l),n=c(e),$(v.$$.fragment,e),i=c(e),$(T.$$.fragment,e),Re=c(e),w.l(e),je=c(e),j.l(e),Ce=c(e),R.l(e),Be=c(e),H=b(e,"P",{"data-svelte-h":!0}),_(H)!=="svelte-b5fo1f"&&(H.textContent=jt),Ve=c(e),$(N.$$.fragment,e),He=c(e),G=b(e,"P",{"data-svelte-h":!0}),_(G)!=="svelte-1nn3gc9"&&(G.textContent=Ct),Ne=c(e),B.l(e),qe=c(e),Q=b(e,"P",{"data-svelte-h":!0}),_(Q)!=="svelte-1uk1vjz"&&(Q.textContent=Bt),Ge=c(e),$(A.$$.fragment,e),Qe=c(e),$(L.$$.fragment,e),Ae=c(e),F=b(e,"P",{"data-svelte-h":!0}),_(F)!=="svelte-1istizx"&&(F.innerHTML=qt),Le=c(e),$(X.$$.fragment,e),Fe=c(e),P=b(e,"P",{"data-svelte-h":!0}),_(P)!=="svelte-1uh39iq"&&(P.textContent=zt),Xe=c(e),z.l(e),ze=c(e),D=b(e,"P",{"data-svelte-h":!0}),_(D)!=="svelte-8eo21h"&&(D.innerHTML=Zt),Pe=c(e),Y=b(e,"P",{"data-svelte-h":!0}),_(Y)!=="svelte-wfr5x6"&&(Y.innerHTML=Et),De=c(e),E.l(e),Ze=c(e),S=b(e,"P",{"data-svelte-h":!0}),_(S)!=="svelte-12a7s59"&&(S.innerHTML=Ut),Ye=c(e),O=b(e,"P",{"data-svelte-h":!0}),_(O)!=="svelte-104b8mw"&&(O.innerHTML=Wt),Se=c(e),K=b(e,"P",{"data-svelte-h":!0}),_(K)!=="svelte-hwhx3z"&&(K.innerHTML=xt),Oe=c(e),ee=b(e,"P",{"data-svelte-h":!0}),_(ee)!=="svelte-br1wyv"&&(ee.innerHTML=It),Ke=c(e),$(te.$$.fragment,e),et=c(e),oe=b(e,"P",{"data-svelte-h":!0}),_(oe)!=="svelte-1qwaa2x"&&(oe.innerHTML=Rt),tt=c(e),$(ae.$$.fragment,e),ot=c(e),se=b(e,"P",{"data-svelte-h":!0}),_(se)!=="svelte-11sfza4"&&(se.textContent=Vt),at=c(e),W.l(e),Ee=c(e),le=b(e,"P",{"data-svelte-h":!0}),_(le)!=="svelte-u7otb2"&&(le.innerHTML=Ht),st=c(e),V.l(e),Ue=c(e),$(re.$$.fragment,e),lt=c(e),ne=b(e,"P",{"data-svelte-h":!0}),_(ne)!=="svelte-5onznt"&&(ne.textContent=Nt),rt=c(e),ie=b(e,"P",{"data-svelte-h":!0}),_(ie)!=="svelte-18d3uf4"&&(ie.textContent=Gt),nt=c(e),me=b(e,"P",{"data-svelte-h":!0}),_(me)!=="svelte-bmrbmh"&&(me.textContent=Qt),it=c(e),$(ce.$$.fragment,e),mt=c(e),de=b(e,"P",{"data-svelte-h":!0}),_(de)!=="svelte-1nxb57d"&&(de.innerHTML=At),ct=c(e),$(pe.$$.fragment,e),dt=c(e),ue=b(e,"P",{"data-svelte-h":!0}),_(ue)!=="svelte-14xo9bo"&&(ue.textContent=Lt),pt=c(e),I.l(e),We=c(e),$(fe.$$.fragment,e),ut=c(e),be=b(e,"P",{"data-svelte-h":!0}),_(be)!=="svelte-1sgfoec"&&(be.textContent=Ft),ft=c(e),$(_e.$$.fragment,e),bt=c(e),Me=b(e,"P",{"data-svelte-h":!0}),_(Me)!=="svelte-14azult"&&(Me.textContent=Xt),_t=c(e),Ie=b(e,"P",{}),po(Ie).forEach(l),this.h()},h(){uo(o,"name","hf:doc:metadata"),uo(o,"content",Go)},m(e,a){vo(document.head,o),r(e,s,a),r(e,t,a),r(e,n,a),y(v,e,a),r(e,i,a),y(T,e,a),r(e,Re,a),$e[k].m(e,a),r(e,je,a),ye[J].m(e,a),r(e,Ce,a),R.m(e,a),r(e,Be,a),r(e,H,a),r(e,Ve,a),y(N,e,a),r(e,He,a),r(e,G,a),r(e,Ne,a),he[C].m(e,a),r(e,qe,a),r(e,Q,a),r(e,Ge,a),y(A,e,a),r(e,Qe,a),y(L,e,a),r(e,Ae,a),r(e,F,a),r(e,Le,a),y(X,e,a),r(e,Fe,a),r(e,P,a),r(e,Xe,a),ve[q].m(e,a),r(e,ze,a),r(e,D,a),r(e,Pe,a),r(e,Y,a),r(e,De,a),Te[Z].m(e,a),r(e,Ze,a),r(e,S,a),r(e,Ye,a),r(e,O,a),r(e,Se,a),r(e,K,a),r(e,Oe,a),r(e,ee,a),r(e,Ke,a),y(te,e,a),r(e,et,a),r(e,oe,a),r(e,tt,a),y(ae,e,a),r(e,ot,a),r(e,se,a),r(e,at,a),ge[U].m(e,a),r(e,Ee,a),r(e,le,a),r(e,st,a),V.m(e,a),r(e,Ue,a),y(re,e,a),r(e,lt,a),r(e,ne,a),r(e,rt,a),r(e,ie,a),r(e,nt,a),r(e,me,a),r(e,it,a),y(ce,e,a),r(e,mt,a),r(e,de,a),r(e,ct,a),y(pe,e,a),r(e,dt,a),r(e,ue,a),r(e,pt,a),ke[x].m(e,a),r(e,We,a),y(fe,e,a),r(e,ut,a),r(e,be,a),r(e,ft,a),y(_e,e,a),r(e,bt,a),r(e,Me,a),r(e,_t,a),r(e,Ie,a),Mt=!0},p(e,[a]){const co={};a&1&&(co.fw=e[0]),v.$set(co);let ht=k;k=Dt(e),k!==ht&&(Je(),d($e[ht],1,1,()=>{$e[ht]=null}),we(),w=$e[k],w||(w=$e[k]=Pt[k](e),w.c()),p(w,1),w.m(je.parentNode,je));let vt=J;J=St(e),J!==vt&&(Je(),d(ye[vt],1,1,()=>{ye[vt]=null}),we(),j=ye[J],j||(j=ye[J]=Yt[J](e),j.c()),p(j,1),j.m(Ce.parentNode,Ce)),$t!==($t=Ot(e))&&(R.d(1),R=$t(e),R&&(R.c(),R.m(Be.parentNode,Be)));let Tt=C;C=eo(e),C!==Tt&&(Je(),d(he[Tt],1,1,()=>{he[Tt]=null}),we(),B=he[C],B||(B=he[C]=Kt[C](e),B.c()),p(B,1),B.m(qe.parentNode,qe));let gt=q;q=oo(e),q!==gt&&(Je(),d(ve[gt],1,1,()=>{ve[gt]=null}),we(),z=ve[q],z||(z=ve[q]=to[q](e),z.c()),p(z,1),z.m(ze.parentNode,ze));let kt=Z;Z=so(e),Z!==kt&&(Je(),d(Te[kt],1,1,()=>{Te[kt]=null}),we(),E=Te[Z],E||(E=Te[Z]=ao[Z](e),E.c()),p(E,1),E.m(Ze.parentNode,Ze));let wt=U;U=ro(e),U!==wt&&(Je(),d(ge[wt],1,1,()=>{ge[wt]=null}),we(),W=ge[U],W||(W=ge[U]=lo[U](e),W.c()),p(W,1),W.m(Ee.parentNode,Ee)),yt!==(yt=no(e))&&(V.d(1),V=yt(e),V&&(V.c(),V.m(Ue.parentNode,Ue)));let Jt=x;x=mo(e),x!==Jt&&(Je(),d(ke[Jt],1,1,()=>{ke[Jt]=null}),we(),I=ke[x],I||(I=ke[x]=io[x](e),I.c()),p(I,1),I.m(We.parentNode,We))},i(e){Mt||(p(v.$$.fragment,e),p(T.$$.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),Mt=!0)},o(e){d(v.$$.fragment,e),d(T.$$.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),Mt=!1},d(e){e&&(l(s),l(t),l(n),l(i),l(Re),l(je),l(Ce),l(Be),l(H),l(Ve),l(He),l(G),l(Ne),l(qe),l(Q),l(Ge),l(Qe),l(Ae),l(F),l(Le),l(Fe),l(P),l(Xe),l(ze),l(D),l(Pe),l(Y),l(De),l(Ze),l(S),l(Ye),l(O),l(Se),l(K),l(Oe),l(ee),l(Ke),l(et),l(oe),l(tt),l(ot),l(se),l(at),l(Ee),l(le),l(st),l(Ue),l(lt),l(ne),l(rt),l(ie),l(nt),l(me),l(it),l(mt),l(de),l(ct),l(dt),l(ue),l(pt),l(We),l(ut),l(be),l(ft),l(bt),l(Me),l(_t),l(Ie)),l(o),h(v,e),h(T,e),$e[k].d(e),ye[J].d(e),R.d(e),h(N,e),he[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),ge[U].d(e),V.d(e),h(re,e),h(ce,e),h(pe,e),ke[x].d(e),h(fe,e),h(_e,e)}}}const Go='{"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 Qo(u,o,s){let t="pt";return Mo(()=>{const n=new URLSearchParams(window.location.search);s(0,t=n.get("fw")||"pt")}),[t]}class So extends $o{constructor(o){super(),yo(this,o,Qo,No,_o,{})}}export{So as component};
