import{s as go,o as To}from"../chunks/scheduler.cc52f4b9.js";import{S as ho,i as vo,e as f,s as m,c as M,h as ko,a as b,d as l,b as c,f as _o,g as $,j as _,k as Mo,l as wo,m as r,n as y,o as d,u as je,t as p,p as g,v as Ce}from"../chunks/index.d2856393.js";import{C as Jo,H as Re,E as jo}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.e6659d4e.js";import{Y as $o}from"../chunks/Youtube.00df107c.js";import{C as v}from"../chunks/CodeBlock.9c179ed7.js";import{C as yo}from"../chunks/CourseFloatingBanner.1c404cc0.js";import{F as Co}from"../chunks/FrameworkSwitchCourse.22a5e932.js";function Bo(u){let o,s;return o=new yo({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){g(o,t)}}}function qo(u){let o,s;return o=new yo({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){g(o,t)}}}function zo(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){g(o,t)}}}function Zo(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){g(o,t)}}}function Eo(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,T="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=T},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=T)},m(i,h){r(i,o,h),r(i,t,h),r(i,n,h)},d(i){i&&(l(o),l(t),l(n))}}}function Uo(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,T="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=T},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=T)},m(i,h){r(i,o,h),r(i,t,h),r(i,n,h)},d(i){i&&(l(o),l(t),l(n))}}}function Wo(u){let o,s;return o=new v({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){g(o,t)}}}function xo(u){let o,s;return o=new v({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){g(o,t)}}}function Io(u){let o,s;return o=new v({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){g(o,t)}}}function Ro(u){let o,s;return o=new v({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){g(o,t)}}}function Vo(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).",T;return o=new v({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,h){y(o,i,h),r(i,s,h),r(i,t,h),T=!0},i(i){T||(p(o.$$.fragment,i),T=!0)},o(i){d(o.$$.fragment,i),T=!1},d(i){i&&(l(s),l(t)),g(o,i)}}}function Ho(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).",T;return o=new v({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,h){y(o,i,h),r(i,s,h),r(i,t,h),T=!0},i(i){T||(p(o.$$.fragment,i),T=!0)},o(i){d(o.$$.fragment,i),T=!1},d(i){i&&(l(s),l(t)),g(o,i)}}}function No(u){let o,s;return o=new v({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){g(o,t)}}}function Go(u){let o,s;return o=new v({props:{code:"bHMlMjBwYXRoX25vX3NldV9jb21wdXRhZG9yJTBBJTBBY29uZmlnLmpzb24lMjBtb2RlbC5zYWZldGVuc29ycw==",highlighted:`ls path_no_seu_computador

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