import{S as Li,i as Oi,s as Ki,e as r,k as f,w as z,t,M as ec,c as l,d as s,m as h,a as n,x as k,h as o,b as E,G as a,g as c,y as M,q as w,o as Z,B as C,v as ac,L as bo}from"../chunks/vendor-hf-doc-builder.js";import{T as ho}from"../chunks/Tip-hf-doc-builder.js";import{I as $a}from"../chunks/IconCopyLink-hf-doc-builder.js";import{C as Y}from"../chunks/CodeBlock-hf-doc-builder.js";import{F as Hi,M as go}from"../chunks/Markdown-hf-doc-builder.js";import"../chunks/IconTensorflow-hf-doc-builder.js";function sc(X){let p;return{c(){p=t("Tambi\xE9n puedes guardar los archivos de configuraci\xF3n como un diccionario; o incluso guardar solo la diferencia entre tu archivo personalizado y la configuraci\xF3n por defecto. Consulta la [documentaci\xF3n sobre configuraci\xF3n](main_classes/configuration) para ver m\xE1s detalles.")},l(_){p=o(_,"Tambi\xE9n puedes guardar los archivos de configuraci\xF3n como un diccionario; o incluso guardar solo la diferencia entre tu archivo personalizado y la configuraci\xF3n por defecto. Consulta la [documentaci\xF3n sobre configuraci\xF3n](main_classes/configuration) para ver m\xE1s detalles.")},m(_,u){c(_,p,u)},d(_){_&&s(p)}}}function tc(X){let p,_,u,b,$,y,q,J,g,B,j,x,T,W,V,R,U,N,D,F,G;return b=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERpc3RpbEJlcnRNb2RlbCUwQSUwQW15X2NvbmZpZyUyMCUzRCUyMERpc3RpbEJlcnRDb25maWcuZnJvbV9wcmV0cmFpbmVkKCUyMi4lMkZ5b3VyX21vZGVsX3NhdmVfcGF0aCUyRm15X2NvbmZpZy5qc29uJTIyKSUwQW1vZGVsJTIwJTNEJTIwRGlzdGlsQmVydE1vZGVsKG15X2NvbmZpZyk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DistilBertModel

<span class="hljs-meta">&gt;&gt;&gt; </span>my_config = DistilBertConfig.from_pretrained(<span class="hljs-string">&quot;./your_model_save_path/my_config.json&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>model = DistilBertModel(my_config)`}}),V=new Y({props:{code:"bW9kZWwlMjAlM0QlMjBEaXN0aWxCZXJ0TW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyKQ==",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>model = DistilBertModel.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)'}}),F=new Y({props:{code:"bW9kZWwlMjAlM0QlMjBEaXN0aWxCZXJ0TW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyJTJDJTIwY29uZmlnJTNEbXlfY29uZmlnKQ==",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>model = DistilBertModel.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>, config=my_config)'}}),{c(){p=r("p"),_=t("Carga los atributos de tu configuraci\xF3n personalizada en el modelo de la siguiente forma:"),u=f(),z(b.$$.fragment),$=f(),y=r("p"),q=t("Esto crea un modelo con valores aleatorios, en lugar de crearlo con los pesos del preentrenamiento, por lo que no ser\xE1s capaz de usar este modelo para nada \xFAtil hasta que no lo entrenes. El entrenamiento es un proceso costoso, tanto en cuesti\xF3n de recursos como de tiempo, por lo que generalmente es mejor usar un modelo preentrenado para obtener mejores resultados m\xE1s r\xE1pido, consumiendo una fracci\xF3n de los recursos que un entrenamiento completo hubiera requerido."),J=f(),g=r("p"),B=t("Puedes crear un modelo preentrenado con "),j=r("code"),x=t("from_pretrained()"),T=t(":"),W=f(),z(V.$$.fragment),R=f(),U=r("p"),N=t("Cuando cargues tus pesos del preentrenamiento, el modelo por defecto se carga autom\xE1ticamente si nos lo proporciona \u{1F917} Transformers. Sin embargo, siempre puedes reemplazar (todos o algunos de) los atributos del modelo por defecto por los tuyos:"),D=f(),z(F.$$.fragment)},l(d){p=l(d,"P",{});var m=n(p);_=o(m,"Carga los atributos de tu configuraci\xF3n personalizada en el modelo de la siguiente forma:"),m.forEach(s),u=h(d),k(b.$$.fragment,d),$=h(d),y=l(d,"P",{});var v=n(y);q=o(v,"Esto crea un modelo con valores aleatorios, en lugar de crearlo con los pesos del preentrenamiento, por lo que no ser\xE1s capaz de usar este modelo para nada \xFAtil hasta que no lo entrenes. El entrenamiento es un proceso costoso, tanto en cuesti\xF3n de recursos como de tiempo, por lo que generalmente es mejor usar un modelo preentrenado para obtener mejores resultados m\xE1s r\xE1pido, consumiendo una fracci\xF3n de los recursos que un entrenamiento completo hubiera requerido."),v.forEach(s),J=h(d),g=l(d,"P",{});var I=n(g);B=o(I,"Puedes crear un modelo preentrenado con "),j=l(I,"CODE",{});var P=n(j);x=o(P,"from_pretrained()"),P.forEach(s),T=o(I,":"),I.forEach(s),W=h(d),k(V.$$.fragment,d),R=h(d),U=l(d,"P",{});var L=n(U);N=o(L,"Cuando cargues tus pesos del preentrenamiento, el modelo por defecto se carga autom\xE1ticamente si nos lo proporciona \u{1F917} Transformers. Sin embargo, siempre puedes reemplazar (todos o algunos de) los atributos del modelo por defecto por los tuyos:"),L.forEach(s),D=h(d),k(F.$$.fragment,d)},m(d,m){c(d,p,m),a(p,_),c(d,u,m),M(b,d,m),c(d,$,m),c(d,y,m),a(y,q),c(d,J,m),c(d,g,m),a(g,B),a(g,j),a(j,x),a(g,T),c(d,W,m),M(V,d,m),c(d,R,m),c(d,U,m),a(U,N),c(d,D,m),M(F,d,m),G=!0},p:bo,i(d){G||(w(b.$$.fragment,d),w(V.$$.fragment,d),w(F.$$.fragment,d),G=!0)},o(d){Z(b.$$.fragment,d),Z(V.$$.fragment,d),Z(F.$$.fragment,d),G=!1},d(d){d&&s(p),d&&s(u),C(b,d),d&&s($),d&&s(y),d&&s(J),d&&s(g),d&&s(W),C(V,d),d&&s(R),d&&s(U),d&&s(D),C(F,d)}}}function oc(X){let p,_;return p=new go({props:{$$slots:{default:[tc]},$$scope:{ctx:X}}}),{c(){z(p.$$.fragment)},l(u){k(p.$$.fragment,u)},m(u,b){M(p,u,b),_=!0},p(u,b){const $={};b&2&&($.$$scope={dirty:b,ctx:u}),p.$set($)},i(u){_||(w(p.$$.fragment,u),_=!0)},o(u){Z(p.$$.fragment,u),_=!1},d(u){C(p,u)}}}function rc(X){let p,_,u,b,$,y,q,J,g,B,j,x,T,W,V,R,U,N,D,F,G;return b=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGRGlzdGlsQmVydE1vZGVsJTBBJTBBbXlfY29uZmlnJTIwJTNEJTIwRGlzdGlsQmVydENvbmZpZy5mcm9tX3ByZXRyYWluZWQoJTIyLiUyRnlvdXJfbW9kZWxfc2F2ZV9wYXRoJTJGbXlfY29uZmlnLmpzb24lMjIpJTBBdGZfbW9kZWwlMjAlM0QlMjBURkRpc3RpbEJlcnRNb2RlbChteV9jb25maWcp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFDistilBertModel

<span class="hljs-meta">&gt;&gt;&gt; </span>my_config = DistilBertConfig.from_pretrained(<span class="hljs-string">&quot;./your_model_save_path/my_config.json&quot;</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model = TFDistilBertModel(my_config)`}}),V=new Y({props:{code:"dGZfbW9kZWwlMjAlM0QlMjBURkRpc3RpbEJlcnRNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIp",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model = TFDistilBertModel.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)'}}),F=new Y({props:{code:"dGZfbW9kZWwlMjAlM0QlMjBURkRpc3RpbEJlcnRNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIlMkMlMjBjb25maWclM0RteV9jb25maWcp",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model = TFDistilBertModel.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>, config=my_config)'}}),{c(){p=r("p"),_=t("Carga los atributos de tu configuraci\xF3n personalizada en el modelo de la siguiente forma:"),u=f(),z(b.$$.fragment),$=f(),y=r("p"),q=t("Esto crea un modelo con valores aleatorios, en lugar de crearlo con los pesos del preentrenamiento, por lo que no ser\xE1s capaz de usar este modelo para nada \xFAtil hasta que no lo entrenes. El entrenamiento es un proceso costoso, tanto en cuesti\xF3n de recursos como de tiempo, por lo que generalmente es mejor usar un modelo preentrenado para obtener mejores resultados m\xE1s r\xE1pido, consumiendo solo una fracci\xF3n de los recursos que un entrenamiento completo hubiera requerido."),J=f(),g=r("p"),B=t("Puedes crear un modelo preentrenado con "),j=r("code"),x=t("from_pretrained()"),T=t(":"),W=f(),z(V.$$.fragment),R=f(),U=r("p"),N=t("Cuando cargues tus pesos del preentrenamiento, el modelo por defecto se carga autom\xE1ticamente si este nos lo proporciona \u{1F917} Transformers. Sin embargo, siempre puedes reemplazar (todos o algunos de) los atributos del modelo por defecto por los tuyos:"),D=f(),z(F.$$.fragment)},l(d){p=l(d,"P",{});var m=n(p);_=o(m,"Carga los atributos de tu configuraci\xF3n personalizada en el modelo de la siguiente forma:"),m.forEach(s),u=h(d),k(b.$$.fragment,d),$=h(d),y=l(d,"P",{});var v=n(y);q=o(v,"Esto crea un modelo con valores aleatorios, en lugar de crearlo con los pesos del preentrenamiento, por lo que no ser\xE1s capaz de usar este modelo para nada \xFAtil hasta que no lo entrenes. El entrenamiento es un proceso costoso, tanto en cuesti\xF3n de recursos como de tiempo, por lo que generalmente es mejor usar un modelo preentrenado para obtener mejores resultados m\xE1s r\xE1pido, consumiendo solo una fracci\xF3n de los recursos que un entrenamiento completo hubiera requerido."),v.forEach(s),J=h(d),g=l(d,"P",{});var I=n(g);B=o(I,"Puedes crear un modelo preentrenado con "),j=l(I,"CODE",{});var P=n(j);x=o(P,"from_pretrained()"),P.forEach(s),T=o(I,":"),I.forEach(s),W=h(d),k(V.$$.fragment,d),R=h(d),U=l(d,"P",{});var L=n(U);N=o(L,"Cuando cargues tus pesos del preentrenamiento, el modelo por defecto se carga autom\xE1ticamente si este nos lo proporciona \u{1F917} Transformers. Sin embargo, siempre puedes reemplazar (todos o algunos de) los atributos del modelo por defecto por los tuyos:"),L.forEach(s),D=h(d),k(F.$$.fragment,d)},m(d,m){c(d,p,m),a(p,_),c(d,u,m),M(b,d,m),c(d,$,m),c(d,y,m),a(y,q),c(d,J,m),c(d,g,m),a(g,B),a(g,j),a(j,x),a(g,T),c(d,W,m),M(V,d,m),c(d,R,m),c(d,U,m),a(U,N),c(d,D,m),M(F,d,m),G=!0},p:bo,i(d){G||(w(b.$$.fragment,d),w(V.$$.fragment,d),w(F.$$.fragment,d),G=!0)},o(d){Z(b.$$.fragment,d),Z(V.$$.fragment,d),Z(F.$$.fragment,d),G=!1},d(d){d&&s(p),d&&s(u),C(b,d),d&&s($),d&&s(y),d&&s(J),d&&s(g),d&&s(W),C(V,d),d&&s(R),d&&s(U),d&&s(D),C(F,d)}}}function lc(X){let p,_;return p=new go({props:{$$slots:{default:[rc]},$$scope:{ctx:X}}}),{c(){z(p.$$.fragment)},l(u){k(p.$$.fragment,u)},m(u,b){M(p,u,b),_=!0},p(u,b){const $={};b&2&&($.$$scope={dirty:b,ctx:u}),p.$set($)},i(u){_||(w(p.$$.fragment,u),_=!0)},o(u){Z(p.$$.fragment,u),_=!1},d(u){C(p,u)}}}function nc(X){let p,_,u,b,$,y,q,J,g,B,j,x,T,W,V,R,U,N,D,F,G,d;return q=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERpc3RpbEJlcnRGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uJTBBJTBBbW9kZWwlMjAlM0QlMjBEaXN0aWxCZXJ0Rm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DistilBertForSequenceClassification

<span class="hljs-meta">&gt;&gt;&gt; </span>model = DistilBertForSequenceClassification.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)`}}),G=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERpc3RpbEJlcnRGb3JRdWVzdGlvbkFuc3dlcmluZyUwQSUwQW1vZGVsJTIwJTNEJTIwRGlzdGlsQmVydEZvclF1ZXN0aW9uQW5zd2VyaW5nLmZyb21fcHJldHJhaW5lZCglMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZCUyMik=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DistilBertForQuestionAnswering

<span class="hljs-meta">&gt;&gt;&gt; </span>model = DistilBertForQuestionAnswering.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)`}}),{c(){p=r("p"),_=t("Por ejemplo,  "),u=r("code"),b=t("DistilBertForSequenceClassification"),$=t(" es un modelo DistilBERT base con una cabeza de clasificaci\xF3n de secuencias. La cabeza de clasificaci\xF3n de secuencias es una capa superior que precede a la recolecci\xF3n de las salidas."),y=f(),z(q.$$.fragment),J=f(),g=r("p"),B=t("Puedes reutilizar este punto de guardado o "),j=r("em"),x=t("checkpoint"),T=t(" para otra tarea f\xE1cilmente cambiando a una cabeza de un modelo diferente. Para una tarea de respuesta a preguntas, puedes usar la cabeza del modelo "),W=r("code"),V=t("DistilBertForQuestionAnswering"),R=t(". La cabeza de respuesta a preguntas es similar a la de clasificaci\xF3n de secuencias, excepto porque consta de una capa lineal delante de la salida de los "),U=r("em"),N=t("hidden states"),D=t("."),F=f(),z(G.$$.fragment)},l(m){p=l(m,"P",{});var v=n(p);_=o(v,"Por ejemplo,  "),u=l(v,"CODE",{});var I=n(u);b=o(I,"DistilBertForSequenceClassification"),I.forEach(s),$=o(v," es un modelo DistilBERT base con una cabeza de clasificaci\xF3n de secuencias. La cabeza de clasificaci\xF3n de secuencias es una capa superior que precede a la recolecci\xF3n de las salidas."),v.forEach(s),y=h(m),k(q.$$.fragment,m),J=h(m),g=l(m,"P",{});var P=n(g);B=o(P,"Puedes reutilizar este punto de guardado o "),j=l(P,"EM",{});var L=n(j);x=o(L,"checkpoint"),L.forEach(s),T=o(P," para otra tarea f\xE1cilmente cambiando a una cabeza de un modelo diferente. Para una tarea de respuesta a preguntas, puedes usar la cabeza del modelo "),W=l(P,"CODE",{});var te=n(W);V=o(te,"DistilBertForQuestionAnswering"),te.forEach(s),R=o(P,". La cabeza de respuesta a preguntas es similar a la de clasificaci\xF3n de secuencias, excepto porque consta de una capa lineal delante de la salida de los "),U=l(P,"EM",{});var fe=n(U);N=o(fe,"hidden states"),fe.forEach(s),D=o(P,"."),P.forEach(s),F=h(m),k(G.$$.fragment,m)},m(m,v){c(m,p,v),a(p,_),a(p,u),a(u,b),a(p,$),c(m,y,v),M(q,m,v),c(m,J,v),c(m,g,v),a(g,B),a(g,j),a(j,x),a(g,T),a(g,W),a(W,V),a(g,R),a(g,U),a(U,N),a(g,D),c(m,F,v),M(G,m,v),d=!0},p:bo,i(m){d||(w(q.$$.fragment,m),w(G.$$.fragment,m),d=!0)},o(m){Z(q.$$.fragment,m),Z(G.$$.fragment,m),d=!1},d(m){m&&s(p),m&&s(y),C(q,m),m&&s(J),m&&s(g),m&&s(F),C(G,m)}}}function ic(X){let p,_;return p=new go({props:{$$slots:{default:[nc]},$$scope:{ctx:X}}}),{c(){z(p.$$.fragment)},l(u){k(p.$$.fragment,u)},m(u,b){M(p,u,b),_=!0},p(u,b){const $={};b&2&&($.$$scope={dirty:b,ctx:u}),p.$set($)},i(u){_||(w(p.$$.fragment,u),_=!0)},o(u){Z(p.$$.fragment,u),_=!1},d(u){C(p,u)}}}function cc(X){let p,_,u,b,$,y,q,J,g,B,j,x,T,W,V,R,U,N,D,F,G,d;return q=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGRGlzdGlsQmVydEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEF0Zl9tb2RlbCUyMCUzRCUyMFRGRGlzdGlsQmVydEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFDistilBertForSequenceClassification

<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model = TFDistilBertForSequenceClassification.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)`}}),G=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGRGlzdGlsQmVydEZvclF1ZXN0aW9uQW5zd2VyaW5nJTBBJTBBdGZfbW9kZWwlMjAlM0QlMjBURkRpc3RpbEJlcnRGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFDistilBertForQuestionAnswering

<span class="hljs-meta">&gt;&gt;&gt; </span>tf_model = TFDistilBertForQuestionAnswering.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)`}}),{c(){p=r("p"),_=t("Por ejemplo,  "),u=r("code"),b=t("TFDistilBertForSequenceClassification"),$=t(" es un modelo DistilBERT base con una cabeza de clasificaci\xF3n de secuencias. La cabeza de clasificaci\xF3n de secuencias es una capa superior que precede a la recolecci\xF3n de las salidas."),y=f(),z(q.$$.fragment),J=f(),g=r("p"),B=t("Puedes reutilizar este punto de guardado o "),j=r("em"),x=t("checkpoint"),T=t(" para otra tarea f\xE1cilmente cambiando a una cabeza de un modelo diferente. Para una tarea de respuesta a preguntas, puedes usar la cabeza del modelo "),W=r("code"),V=t("TFDistilBertForQuestionAnswering"),R=t(". La cabeza de respuesta a preguntas es similar a la de clasificaci\xF3n de secuencias, excepto porque consta de una capa lineal delante de la salida de los "),U=r("em"),N=t("hidden states"),D=t("."),F=f(),z(G.$$.fragment)},l(m){p=l(m,"P",{});var v=n(p);_=o(v,"Por ejemplo,  "),u=l(v,"CODE",{});var I=n(u);b=o(I,"TFDistilBertForSequenceClassification"),I.forEach(s),$=o(v," es un modelo DistilBERT base con una cabeza de clasificaci\xF3n de secuencias. La cabeza de clasificaci\xF3n de secuencias es una capa superior que precede a la recolecci\xF3n de las salidas."),v.forEach(s),y=h(m),k(q.$$.fragment,m),J=h(m),g=l(m,"P",{});var P=n(g);B=o(P,"Puedes reutilizar este punto de guardado o "),j=l(P,"EM",{});var L=n(j);x=o(L,"checkpoint"),L.forEach(s),T=o(P," para otra tarea f\xE1cilmente cambiando a una cabeza de un modelo diferente. Para una tarea de respuesta a preguntas, puedes usar la cabeza del modelo "),W=l(P,"CODE",{});var te=n(W);V=o(te,"TFDistilBertForQuestionAnswering"),te.forEach(s),R=o(P,". La cabeza de respuesta a preguntas es similar a la de clasificaci\xF3n de secuencias, excepto porque consta de una capa lineal delante de la salida de los "),U=l(P,"EM",{});var fe=n(U);N=o(fe,"hidden states"),fe.forEach(s),D=o(P,"."),P.forEach(s),F=h(m),k(G.$$.fragment,m)},m(m,v){c(m,p,v),a(p,_),a(p,u),a(u,b),a(p,$),c(m,y,v),M(q,m,v),c(m,J,v),c(m,g,v),a(g,B),a(g,j),a(j,x),a(g,T),a(g,W),a(W,V),a(g,R),a(g,U),a(U,N),a(g,D),c(m,F,v),M(G,m,v),d=!0},p:bo,i(m){d||(w(q.$$.fragment,m),w(G.$$.fragment,m),d=!0)},o(m){Z(q.$$.fragment,m),Z(G.$$.fragment,m),d=!1},d(m){m&&s(p),m&&s(y),C(q,m),m&&s(J),m&&s(g),m&&s(F),C(G,m)}}}function pc(X){let p,_;return p=new go({props:{$$slots:{default:[cc]},$$scope:{ctx:X}}}),{c(){z(p.$$.fragment)},l(u){k(p.$$.fragment,u)},m(u,b){M(p,u,b),_=!0},p(u,b){const $={};b&2&&($.$$scope={dirty:b,ctx:u}),p.$set($)},i(u){_||(w(p.$$.fragment,u),_=!0)},o(u){Z(p.$$.fragment,u),_=!1},d(u){C(p,u)}}}function dc(X){let p,_,u,b,$,y,q,J,g,B,j;return{c(){p=r("p"),_=t("No todos los modelos son compatibles con un "),u=r("em"),b=t("tokenizer"),$=t(" r\xE1pido. \xC9chale un vistazo a esta "),y=r("a"),q=t("tabla"),J=t(" para comprobar si un modelo espec\xEDfico es compatible con un "),g=r("em"),B=t("tokenizer"),j=t(" r\xE1pido."),this.h()},l(x){p=l(x,"P",{});var T=n(p);_=o(T,"No todos los modelos son compatibles con un "),u=l(T,"EM",{});var W=n(u);b=o(W,"tokenizer"),W.forEach(s),$=o(T," r\xE1pido. \xC9chale un vistazo a esta "),y=l(T,"A",{href:!0});var V=n(y);q=o(V,"tabla"),V.forEach(s),J=o(T," para comprobar si un modelo espec\xEDfico es compatible con un "),g=l(T,"EM",{});var R=n(g);B=o(R,"tokenizer"),R.forEach(s),j=o(T," r\xE1pido."),T.forEach(s),this.h()},h(){E(y,"href","index#supported-frameworks")},m(x,T){c(x,p,T),a(p,_),a(p,u),a(u,b),a(p,$),a(p,y),a(y,q),a(p,J),a(p,g),a(g,B),a(p,j)},d(x){x&&s(p)}}}function uc(X){let p,_,u,b,$,y,q,J,g,B,j,x,T,W;return{c(){p=r("p"),_=t("Por defecto, el "),u=r("code"),b=t("AutoTokenizer"),$=t(" intentar\xE1 cargar un "),y=r("em"),q=t("tokenizer"),J=t(" r\xE1pido. Puedes desactivar este comportamiento cambiando el par\xE1metro "),g=r("code"),B=t("use_fast=False"),j=t(" de "),x=r("code"),T=t("from_pretrained"),W=t(".")},l(V){p=l(V,"P",{});var R=n(p);_=o(R,"Por defecto, el "),u=l(R,"CODE",{});var U=n(u);b=o(U,"AutoTokenizer"),U.forEach(s),$=o(R," intentar\xE1 cargar un "),y=l(R,"EM",{});var N=n(y);q=o(N,"tokenizer"),N.forEach(s),J=o(R," r\xE1pido. Puedes desactivar este comportamiento cambiando el par\xE1metro "),g=l(R,"CODE",{});var D=n(g);B=o(D,"use_fast=False"),D.forEach(s),j=o(R," de "),x=l(R,"CODE",{});var F=n(x);T=o(F,"from_pretrained"),F.forEach(s),W=o(R,"."),R.forEach(s)},m(V,R){c(V,p,R),a(p,_),a(p,u),a(u,b),a(p,$),a(p,y),a(y,q),a(p,J),a(p,g),a(g,B),a(p,j),a(p,x),a(x,T),a(p,W)},d(V){V&&s(p)}}}function mc(X){let p,_,u,b,$;return{c(){p=r("p"),_=t("Si no est\xE1s buscando ninguna personalizaci\xF3n en espec\xEDfico, usa el m\xE9todo "),u=r("code"),b=t("from_pretrained"),$=t(" para cargar los par\xE1metros del extractor de caracter\xEDsticas por defecto del modelo.")},l(y){p=l(y,"P",{});var q=n(p);_=o(q,"Si no est\xE1s buscando ninguna personalizaci\xF3n en espec\xEDfico, usa el m\xE9todo "),u=l(q,"CODE",{});var J=n(u);b=o(J,"from_pretrained"),J.forEach(s),$=o(q," para cargar los par\xE1metros del extractor de caracter\xEDsticas por defecto del modelo."),q.forEach(s)},m(y,q){c(y,p,q),a(p,_),a(p,u),a(u,b),a(p,$)},d(y){y&&s(p)}}}function fc(X){let p,_,u,b,$,y,q,J,g,B,j,x,T,W,V,R,U,N,D,F,G,d,m,v,I,P,L,te,fe,_o,Va,yo,$o,Wa,vo,Eo,Ua,jo,Ks,he,je,Fa,Se,qo,xa,zo,et,A,ko,va,Mo,wo,Ga,Zo,Co,Ba,To,Ro,Pa,Jo,Vo,Xa,Wo,Uo,at,le,Fo,Ea,xo,Go,Da,Bo,Po,st,Ae,tt,be,Ya,Xo,Do,Na,Yo,No,ot,qe,He,Qo,Qa,Io,So,Ao,ge,Ho,Ia,Lo,Oo,Sa,Ko,er,rt,Le,lt,ze,ar,Aa,sr,tr,nt,Oe,it,ke,or,Ha,rr,lr,ct,Ke,pt,Me,nr,La,ir,cr,dt,ea,ut,we,mt,_e,Ze,Oa,aa,pr,Ka,dr,ft,Q,ur,ja,mr,fr,es,hr,br,as,gr,_r,ss,yr,$r,ts,vr,Er,sa,os,jr,qr,ta,rs,zr,kr,oa,ls,Mr,wr,ht,Ce,bt,ye,Te,ns,ra,Zr,is,Cr,gt,ne,Tr,cs,Rr,Jr,ps,Vr,Wr,_t,Re,yt,$e,Je,ds,la,Ur,us,Fr,$t,ie,xr,qa,Gr,Br,ms,Pr,Xr,vt,Ve,We,fs,Dr,Yr,hs,Nr,Qr,Ir,O,bs,Sr,Ar,gs,Hr,Lr,na,Or,Kr,_s,el,al,ys,sl,tl,Et,Ue,ol,$s,rl,ll,jt,Fe,qt,xe,nl,vs,il,cl,zt,ia,kt,H,pl,Es,dl,ul,js,ml,fl,qs,hl,bl,zs,gl,_l,ks,yl,$l,Mt,ca,wt,ce,vl,Ms,El,jl,ws,ql,zl,Zt,pa,Ct,Ge,Tt,ve,Be,Zs,da,kl,Cs,Ml,Rt,ee,wl,Ts,Zl,Cl,Rs,Tl,Rl,Js,Jl,Vl,Jt,pe,Wl,Vs,Ul,Fl,za,xl,Gl,Vt,ua,Wt,Pe,Ut,Xe,Bl,Ws,Pl,Xl,Ft,ma,xt,De,Dl,Us,Yl,Nl,Gt,fa,Bt,Ee,Ye,Fs,ha,Ql,xs,Il,Pt,K,Sl,Gs,Al,Hl,Bs,Ll,Ol,Ps,Kl,en,Xs,an,sn,Xt,ka,tn,Dt,ba,Yt,Ne,on,Ds,rn,ln,Nt,ga,Qt,de,nn,Ys,cn,pn,Ns,dn,un,It,_a,St,Qe,mn,Qs,fn,hn,At;return y=new $a({}),Se=new $a({}),Ae=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERpc3RpbEJlcnRDb25maWclMEElMEFjb25maWclMjAlM0QlMjBEaXN0aWxCZXJ0Q29uZmlnKCklMEFwcmludChjb25maWcp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DistilBertConfig

<span class="hljs-meta">&gt;&gt;&gt; </span>config = DistilBertConfig()
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(config)
DistilBertConfig {
  <span class="hljs-string">&quot;activation&quot;</span>: <span class="hljs-string">&quot;gelu&quot;</span>,
  <span class="hljs-string">&quot;attention_dropout&quot;</span>: <span class="hljs-number">0.1</span>,
  <span class="hljs-string">&quot;dim&quot;</span>: <span class="hljs-number">768</span>,
  <span class="hljs-string">&quot;dropout&quot;</span>: <span class="hljs-number">0.1</span>,
  <span class="hljs-string">&quot;hidden_dim&quot;</span>: <span class="hljs-number">3072</span>,
  <span class="hljs-string">&quot;initializer_range&quot;</span>: <span class="hljs-number">0.02</span>,
  <span class="hljs-string">&quot;max_position_embeddings&quot;</span>: <span class="hljs-number">512</span>,
  <span class="hljs-string">&quot;model_type&quot;</span>: <span class="hljs-string">&quot;distilbert&quot;</span>,
  <span class="hljs-string">&quot;n_heads&quot;</span>: <span class="hljs-number">12</span>,
  <span class="hljs-string">&quot;n_layers&quot;</span>: <span class="hljs-number">6</span>,
  <span class="hljs-string">&quot;pad_token_id&quot;</span>: <span class="hljs-number">0</span>,
  <span class="hljs-string">&quot;qa_dropout&quot;</span>: <span class="hljs-number">0.1</span>,
  <span class="hljs-string">&quot;seq_classif_dropout&quot;</span>: <span class="hljs-number">0.2</span>,
  <span class="hljs-string">&quot;sinusoidal_pos_embds&quot;</span>: false,
  <span class="hljs-string">&quot;transformers_version&quot;</span>: <span class="hljs-string">&quot;4.16.2&quot;</span>,
  <span class="hljs-string">&quot;vocab_size&quot;</span>: <span class="hljs-number">30522</span>
}`}}),Le=new Y({props:{code:"bXlfY29uZmlnJTIwJTNEJTIwRGlzdGlsQmVydENvbmZpZyhhY3RpdmF0aW9uJTNEJTIycmVsdSUyMiUyQyUyMGF0dGVudGlvbl9kcm9wb3V0JTNEMC40KSUwQXByaW50KG15X2NvbmZpZyk=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>my_config = DistilBertConfig(activation=<span class="hljs-string">&quot;relu&quot;</span>, attention_dropout=<span class="hljs-number">0.4</span>)
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(my_config)
DistilBertConfig {
  <span class="hljs-string">&quot;activation&quot;</span>: <span class="hljs-string">&quot;relu&quot;</span>,
  <span class="hljs-string">&quot;attention_dropout&quot;</span>: <span class="hljs-number">0.4</span>,
  <span class="hljs-string">&quot;dim&quot;</span>: <span class="hljs-number">768</span>,
  <span class="hljs-string">&quot;dropout&quot;</span>: <span class="hljs-number">0.1</span>,
  <span class="hljs-string">&quot;hidden_dim&quot;</span>: <span class="hljs-number">3072</span>,
  <span class="hljs-string">&quot;initializer_range&quot;</span>: <span class="hljs-number">0.02</span>,
  <span class="hljs-string">&quot;max_position_embeddings&quot;</span>: <span class="hljs-number">512</span>,
  <span class="hljs-string">&quot;model_type&quot;</span>: <span class="hljs-string">&quot;distilbert&quot;</span>,
  <span class="hljs-string">&quot;n_heads&quot;</span>: <span class="hljs-number">12</span>,
  <span class="hljs-string">&quot;n_layers&quot;</span>: <span class="hljs-number">6</span>,
  <span class="hljs-string">&quot;pad_token_id&quot;</span>: <span class="hljs-number">0</span>,
  <span class="hljs-string">&quot;qa_dropout&quot;</span>: <span class="hljs-number">0.1</span>,
  <span class="hljs-string">&quot;seq_classif_dropout&quot;</span>: <span class="hljs-number">0.2</span>,
  <span class="hljs-string">&quot;sinusoidal_pos_embds&quot;</span>: false,
  <span class="hljs-string">&quot;transformers_version&quot;</span>: <span class="hljs-string">&quot;4.16.2&quot;</span>,
  <span class="hljs-string">&quot;vocab_size&quot;</span>: <span class="hljs-number">30522</span>
}`}}),Oe=new Y({props:{code:"bXlfY29uZmlnJTIwJTNEJTIwRGlzdGlsQmVydENvbmZpZy5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIlMkMlMjBhY3RpdmF0aW9uJTNEJTIycmVsdSUyMiUyQyUyMGF0dGVudGlvbl9kcm9wb3V0JTNEMC40KQ==",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>my_config = DistilBertConfig.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>, activation=<span class="hljs-string">&quot;relu&quot;</span>, attention_dropout=<span class="hljs-number">0.4</span>)'}}),Ke=new Y({props:{code:"bXlfY29uZmlnLnNhdmVfcHJldHJhaW5lZChzYXZlX2RpcmVjdG9yeSUzRCUyMi4lMkZ5b3VyX21vZGVsX3NhdmVfcGF0aCUyMik=",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>my_config.save_pretrained(save_directory=<span class="hljs-string">&quot;./your_model_save_path&quot;</span>)'}}),ea=new Y({props:{code:"bXlfY29uZmlnJTIwJTNEJTIwRGlzdGlsQmVydENvbmZpZy5mcm9tX3ByZXRyYWluZWQoJTIyLiUyRnlvdXJfbW9kZWxfc2F2ZV9wYXRoJTJGbXlfY29uZmlnLmpzb24lMjIp",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>my_config = DistilBertConfig.from_pretrained(<span class="hljs-string">&quot;./your_model_save_path/my_config.json&quot;</span>)'}}),we=new ho({props:{$$slots:{default:[sc]},$$scope:{ctx:X}}}),aa=new $a({}),Ce=new Hi({props:{pytorch:!0,tensorflow:!0,jax:!1,$$slots:{tensorflow:[lc],pytorch:[oc]},$$scope:{ctx:X}}}),ra=new $a({}),Re=new Hi({props:{pytorch:!0,tensorflow:!0,jax:!1,$$slots:{tensorflow:[pc],pytorch:[ic]},$$scope:{ctx:X}}}),la=new $a({}),Fe=new ho({props:{warning:!0,$$slots:{default:[dc]},$$scope:{ctx:X}}}),ia=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERpc3RpbEJlcnRUb2tlbml6ZXIlMEElMEFteV90b2tlbml6ZXIlMjAlM0QlMjBEaXN0aWxCZXJ0VG9rZW5pemVyKHZvY2FiX2ZpbGUlM0QlMjJteV92b2NhYl9maWxlLnR4dCUyMiUyQyUyMGRvX2xvd2VyX2Nhc2UlM0RGYWxzZSUyQyUyMHBhZGRpbmdfc2lkZSUzRCUyMmxlZnQlMjIp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DistilBertTokenizer

<span class="hljs-meta">&gt;&gt;&gt; </span>my_tokenizer = DistilBertTokenizer(vocab_file=<span class="hljs-string">&quot;my_vocab_file.txt&quot;</span>, do_lower_case=<span class="hljs-literal">False</span>, padding_side=<span class="hljs-string">&quot;left&quot;</span>)`}}),ca=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERpc3RpbEJlcnRUb2tlbml6ZXIlMEElMEFzbG93X3Rva2VuaXplciUyMCUzRCUyMERpc3RpbEJlcnRUb2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DistilBertTokenizer

<span class="hljs-meta">&gt;&gt;&gt; </span>slow_tokenizer = DistilBertTokenizer.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)`}}),pa=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERpc3RpbEJlcnRUb2tlbml6ZXJGYXN0JTBBJTBBZmFzdF90b2tlbml6ZXIlMjAlM0QlMjBEaXN0aWxCZXJ0VG9rZW5pemVyRmFzdC5mcm9tX3ByZXRyYWluZWQoJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIp",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DistilBertTokenizerFast

<span class="hljs-meta">&gt;&gt;&gt; </span>fast_tokenizer = DistilBertTokenizerFast.from_pretrained(<span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>)`}}),Ge=new ho({props:{$$slots:{default:[uc]},$$scope:{ctx:X}}}),da=new $a({}),ua=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFZpVEZlYXR1cmVFeHRyYWN0b3IlMEElMEF2aXRfZXh0cmFjdG9yJTIwJTNEJTIwVmlURmVhdHVyZUV4dHJhY3RvcigpJTBBcHJpbnQodml0X2V4dHJhY3Rvcik=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> ViTFeatureExtractor

<span class="hljs-meta">&gt;&gt;&gt; </span>vit_extractor = ViTFeatureExtractor()
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(vit_extractor)
ViTFeatureExtractor {
  <span class="hljs-string">&quot;do_normalize&quot;</span>: true,
  <span class="hljs-string">&quot;do_resize&quot;</span>: true,
  <span class="hljs-string">&quot;feature_extractor_type&quot;</span>: <span class="hljs-string">&quot;ViTFeatureExtractor&quot;</span>,
  <span class="hljs-string">&quot;image_mean&quot;</span>: [
    <span class="hljs-number">0.5</span>,
    <span class="hljs-number">0.5</span>,
    <span class="hljs-number">0.5</span>
  ],
  <span class="hljs-string">&quot;image_std&quot;</span>: [
    <span class="hljs-number">0.5</span>,
    <span class="hljs-number">0.5</span>,
    <span class="hljs-number">0.5</span>
  ],
  <span class="hljs-string">&quot;resample&quot;</span>: <span class="hljs-number">2</span>,
  <span class="hljs-string">&quot;size&quot;</span>: <span class="hljs-number">224</span>
}`}}),Pe=new ho({props:{$$slots:{default:[mc]},$$scope:{ctx:X}}}),ma=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFZpVEZlYXR1cmVFeHRyYWN0b3IlMEElMEFteV92aXRfZXh0cmFjdG9yJTIwJTNEJTIwVmlURmVhdHVyZUV4dHJhY3RvcihyZXNhbXBsZSUzRCUyMlBJTC5JbWFnZS5CT1glMjIlMkMlMjBkb19ub3JtYWxpemUlM0RGYWxzZSUyQyUyMGltYWdlX21lYW4lM0QlNUIwLjMlMkMlMjAwLjMlMkMlMjAwLjMlNUQpJTBBcHJpbnQobXlfdml0X2V4dHJhY3Rvcik=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> ViTFeatureExtractor

<span class="hljs-meta">&gt;&gt;&gt; </span>my_vit_extractor = ViTFeatureExtractor(resample=<span class="hljs-string">&quot;PIL.Image.BOX&quot;</span>, do_normalize=<span class="hljs-literal">False</span>, image_mean=[<span class="hljs-number">0.3</span>, <span class="hljs-number">0.3</span>, <span class="hljs-number">0.3</span>])
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(my_vit_extractor)
ViTFeatureExtractor {
  <span class="hljs-string">&quot;do_normalize&quot;</span>: false,
  <span class="hljs-string">&quot;do_resize&quot;</span>: true,
  <span class="hljs-string">&quot;feature_extractor_type&quot;</span>: <span class="hljs-string">&quot;ViTFeatureExtractor&quot;</span>,
  <span class="hljs-string">&quot;image_mean&quot;</span>: [
    <span class="hljs-number">0.3</span>,
    <span class="hljs-number">0.3</span>,
    <span class="hljs-number">0.3</span>
  ],
  <span class="hljs-string">&quot;image_std&quot;</span>: [
    <span class="hljs-number">0.5</span>,
    <span class="hljs-number">0.5</span>,
    <span class="hljs-number">0.5</span>
  ],
  <span class="hljs-string">&quot;resample&quot;</span>: <span class="hljs-string">&quot;PIL.Image.BOX&quot;</span>,
  <span class="hljs-string">&quot;size&quot;</span>: <span class="hljs-number">224</span>
}`}}),fa=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFdhdjJWZWMyRmVhdHVyZUV4dHJhY3RvciUwQSUwQXcydjJfZXh0cmFjdG9yJTIwJTNEJTIwV2F2MlZlYzJGZWF0dXJlRXh0cmFjdG9yKCklMEFwcmludCh3MnYyX2V4dHJhY3Rvcik=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Wav2Vec2FeatureExtractor

<span class="hljs-meta">&gt;&gt;&gt; </span>w2v2_extractor = Wav2Vec2FeatureExtractor()
<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-built_in">print</span>(w2v2_extractor)
Wav2Vec2FeatureExtractor {
  <span class="hljs-string">&quot;do_normalize&quot;</span>: true,
  <span class="hljs-string">&quot;feature_extractor_type&quot;</span>: <span class="hljs-string">&quot;Wav2Vec2FeatureExtractor&quot;</span>,
  <span class="hljs-string">&quot;feature_size&quot;</span>: <span class="hljs-number">1</span>,
  <span class="hljs-string">&quot;padding_side&quot;</span>: <span class="hljs-string">&quot;right&quot;</span>,
  <span class="hljs-string">&quot;padding_value&quot;</span>: <span class="hljs-number">0.0</span>,
  <span class="hljs-string">&quot;return_attention_mask&quot;</span>: false,
  <span class="hljs-string">&quot;sampling_rate&quot;</span>: <span class="hljs-number">16000</span>
}`}}),ha=new $a({}),ba=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFdhdjJWZWMyRmVhdHVyZUV4dHJhY3RvciUwQSUwQWZlYXR1cmVfZXh0cmFjdG9yJTIwJTNEJTIwV2F2MlZlYzJGZWF0dXJlRXh0cmFjdG9yKHBhZGRpbmdfdmFsdWUlM0QxLjAlMkMlMjBkb19ub3JtYWxpemUlM0RUcnVlKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Wav2Vec2FeatureExtractor

<span class="hljs-meta">&gt;&gt;&gt; </span>feature_extractor = Wav2Vec2FeatureExtractor(padding_value=<span class="hljs-number">1.0</span>, do_normalize=<span class="hljs-literal">True</span>)`}}),ga=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFdhdjJWZWMyQ1RDVG9rZW5pemVyJTBBJTBBdG9rZW5pemVyJTIwJTNEJTIwV2F2MlZlYzJDVENUb2tlbml6ZXIodm9jYWJfZmlsZSUzRCUyMm15X3ZvY2FiX2ZpbGUudHh0JTIyKQ==",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Wav2Vec2CTCTokenizer

<span class="hljs-meta">&gt;&gt;&gt; </span>tokenizer = Wav2Vec2CTCTokenizer(vocab_file=<span class="hljs-string">&quot;my_vocab_file.txt&quot;</span>)`}}),_a=new Y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFdhdjJWZWMyUHJvY2Vzc29yJTBBJTBBcHJvY2Vzc29yJTIwJTNEJTIwV2F2MlZlYzJQcm9jZXNzb3IoZmVhdHVyZV9leHRyYWN0b3IlM0RmZWF0dXJlX2V4dHJhY3RvciUyQyUyMHRva2VuaXplciUzRHRva2VuaXplcik=",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span><span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Wav2Vec2Processor

<span class="hljs-meta">&gt;&gt;&gt; </span>processor = Wav2Vec2Processor(feature_extractor=feature_extractor, tokenizer=tokenizer)`}}),{c(){p=r("meta"),_=f(),u=r("h1"),b=r("a"),$=r("span"),z(y.$$.fragment),q=f(),J=r("span"),g=t("Crea una arquitectura personalizada"),B=f(),j=r("p"),x=t("Una "),T=r("a"),W=r("code"),V=t("AutoClass"),R=t(" infiere, autom\xE1ticamente, la arquitectura del modelo y descarga la configuraci\xF3n y los pesos del modelo preentrenado. Normalmente, recomendamos usar una "),U=r("code"),N=t("AutoClass"),D=t(" para producir un c\xF3digo agn\xF3stico a puntos de guardado o checkpoints. Sin embargo, los usuarios que quieran m\xE1s control sobre los par\xE1metros espec\xEDficos de los modelos pueden crear su propio modelo \u{1F917} Transformers personalizado a partir de varias clases base. Esto puede ser particularmente \xFAtil para alguien que est\xE9 interesado en estudiar, entrenar o experimentar con modelos \u{1F917} Transformers. En esta gu\xEDa vamos a profundizar en la creaci\xF3n de modelos personalizados sin usar "),F=r("code"),G=t("AutoClass"),d=t(". Aprenderemos a:"),m=f(),v=r("ul"),I=r("li"),P=t("Cargar y personalizar una configuraci\xF3n para un modelo."),L=f(),te=r("li"),fe=t("Crear una arquitectura para un modelo."),_o=f(),Va=r("li"),yo=t("Crear tokenizadores r\xE1pidos y lentos para textos."),$o=f(),Wa=r("li"),vo=t("Crear un extractor de propiedades para tareas de audio o im\xE1genes."),Eo=f(),Ua=r("li"),jo=t("Crear un procesador para tareas multimodales."),Ks=f(),he=r("h2"),je=r("a"),Fa=r("span"),z(Se.$$.fragment),qo=f(),xa=r("span"),zo=t("Configuraci\xF3n"),et=f(),A=r("p"),ko=t("Una "),va=r("a"),Mo=t("configuraci\xF3n"),wo=t(" es un conjunto de atributos espec\xEDficos de un modelo. Cada configuraci\xF3n de modelo tiene atributos diferentes. Por ejemplo, todos los modelos de PLN tienen los atributos "),Ga=r("code"),Zo=t("hidden_size"),Co=t(", "),Ba=r("code"),To=t("num_attention_heads"),Ro=t(", "),Pa=r("code"),Jo=t("num_hidden_layers"),Vo=t(" y "),Xa=r("code"),Wo=t("vocab_size"),Uo=t(" en com\xFAn. Estos atributos especifican el n\xFAmero de cabezas de atenci\xF3n o de capas ocultas con las que se construyen los modelos."),at=f(),le=r("p"),Fo=t("Puedes echarle un vistazo a "),Ea=r("a"),xo=t("DistilBERT"),Go=t(" y sus atributos accediendo a "),Da=r("code"),Bo=t("DistilBertConfig"),Po=t(":"),st=f(),z(Ae.$$.fragment),tt=f(),be=r("p"),Ya=r("code"),Xo=t("DistilBertConfig"),Do=t(" muestra todos los atributos por defecto que se han usado para construir un modelo "),Na=r("code"),Yo=t("DistilBertModel"),No=t(" base. Todos ellos son personalizables, lo que deja espacio para poder experimentar. Por ejemplo, puedes personalizar un modelo predeterminado para:"),ot=f(),qe=r("ul"),He=r("li"),Qo=t("Probar una funci\xF3n de activaci\xF3n diferente, usando el par\xE1metro "),Qa=r("code"),Io=t("activation"),So=t("."),Ao=f(),ge=r("li"),Ho=t("Usar un valor de abandono (tambi\xE9n conocido como "),Ia=r("em"),Lo=t("dropout"),Oo=t(") m\xE1s alto para las probabilidades de las capas de atenci\xF3n, usando el par\xE1metro "),Sa=r("code"),Ko=t("attention_dropout"),er=t("."),rt=f(),z(Le.$$.fragment),lt=f(),ze=r("p"),ar=t("Los atributos de los modelos preentrenados pueden ser modificados con la funci\xF3n "),Aa=r("code"),sr=t("from_pretrained()"),tr=t(":"),nt=f(),z(Oe.$$.fragment),it=f(),ke=r("p"),or=t("Cuando est\xE9s satisfecho con la configuraci\xF3n de tu modelo, puedes guardarlo con la funci\xF3n "),Ha=r("code"),rr=t("save_pretrained()"),lr=t(". Tu configuraci\xF3n se guardar\xE1 en un archivo JSON dentro del directorio que le especifiques como par\xE1metro."),ct=f(),z(Ke.$$.fragment),pt=f(),Me=r("p"),nr=t("Para volver a usar el archivo de configuraci\xF3n, puedes cargarlo usando "),La=r("code"),ir=t("from_pretrained()"),cr=t(":"),dt=f(),z(ea.$$.fragment),ut=f(),z(we.$$.fragment),mt=f(),_e=r("h2"),Ze=r("a"),Oa=r("span"),z(aa.$$.fragment),pr=f(),Ka=r("span"),dr=t("Modelo"),ft=f(),Q=r("p"),ur=t("El siguiente paso ser\xE1 crear un "),ja=r("a"),mr=t("modelo"),fr=t(". El modelo, al que a veces tambi\xE9n nos referimos como arquitectura, es el encargado de definir cada capa y qu\xE9 operaciones se realizan. Los atributos como "),es=r("code"),hr=t("num_hidden_layers"),br=t(" de la configuraci\xF3n se usan para definir la arquitectura. Todos los modelos comparten una clase base, "),as=r("code"),gr=t("PreTrainedModel"),_r=t(", y algunos m\xE9todos comunes que se pueden usar para redimensionar los "),ss=r("em"),yr=t("embeddings"),$r=t(" o para recortar cabezas de auto-atenci\xF3n (tambi\xE9n llamadas "),ts=r("em"),vr=t("self-attention heads"),Er=t("). Adem\xE1s, todos los modelos son subclases de "),sa=r("a"),os=r("code"),jr=t("torch.nn.Module"),qr=t(", "),ta=r("a"),rs=r("code"),zr=t("tf.keras.Model"),kr=t(" o "),oa=r("a"),ls=r("code"),Mr=t("flax.linen.Module"),wr=t(", lo que significa que son compatibles con su respectivo framework."),ht=f(),z(Ce.$$.fragment),bt=f(),ye=r("h3"),Te=r("a"),ns=r("span"),z(ra.$$.fragment),Zr=f(),is=r("span"),Cr=t("Cabezas de modelo"),gt=f(),ne=r("p"),Tr=t("En este punto del tutorial, tenemos un modelo DistilBERT base que devuelve los "),cs=r("em"),Rr=t("hidden states"),Jr=t(" o estados ocultos. Los "),ps=r("em"),Vr=t("hidden states"),Wr=t(" se pasan como par\xE1metros de entrada a la cabeza del modelo para producir la salida. \u{1F917} Transformers ofrece una cabeza de modelo diferente para cada tarea, siempre y cuando el modelo sea compatible para la tarea (por ejemplo, no puedes usar DistilBERT para una tarea secuencia a secuencia como la traducci\xF3n)."),_t=f(),z(Re.$$.fragment),yt=f(),$e=r("h2"),Je=r("a"),ds=r("span"),z(la.$$.fragment),Ur=f(),us=r("span"),Fr=t("Tokenizer"),$t=f(),ie=r("p"),xr=t("La ultima clase base que debes conocer antes de usar un modelo con datos textuales es la clase "),qa=r("a"),Gr=t("tokenizer"),Br=t(", que convierte el texto bruto en tensores. Hay dos tipos de "),ms=r("em"),Pr=t("tokenizers"),Xr=t(" que puedes usar con \u{1F917} Transformers:"),vt=f(),Ve=r("ul"),We=r("li"),fs=r("code"),Dr=t("PreTrainedTokenizer"),Yr=t(":  una implementaci\xF3n de un "),hs=r("em"),Nr=t("tokenizer"),Qr=t(" hecha en Python."),Ir=f(),O=r("li"),bs=r("code"),Sr=t("PreTrainedTokenizerFast"),Ar=t(": un "),gs=r("em"),Hr=t("tokenizer"),Lr=t(" de nuestra librer\xEDa "),na=r("a"),Or=t("\u{1F917} Tokenizer"),Kr=t(", basada en Rust. Este tipo de "),_s=r("em"),el=t("tokenizer"),al=t(" es bastante m\xE1s r\xE1pido, especialmente durante la tokenizaci\xF3n por lotes, gracias a estar implementado en Rust. Esta r\xE1pida tokenizaci\xF3n tambi\xE9n ofrece m\xE9todos adicionales como el "),ys=r("em"),sl=t("offset mapping"),tl=t(", que relaciona los tokens con sus palabras o caracteres originales."),Et=f(),Ue=r("p"),ol=t("Ambos "),$s=r("em"),rl=t("tokenizers"),ll=t(" son compatibles con los m\xE9todos comunes, como los de encodificaci\xF3n y decodificaci\xF3n, los m\xE9todos para a\xF1adir tokens y aquellos que manejan tokens especiales."),jt=f(),z(Fe.$$.fragment),qt=f(),xe=r("p"),nl=t("Si has entrenado tu propio "),vs=r("em"),il=t("tokenizer"),cl=t(", puedes crear uno desde tu archivo de \u201Cvocabulario\u201D:"),zt=f(),z(ia.$$.fragment),kt=f(),H=r("p"),pl=t("Es importante recordar que los vocabularios que provienen de un "),Es=r("em"),dl=t("tokenizer"),ul=t(" personalizado ser\xE1n diferentes a los vocabularios generados por el "),js=r("em"),ml=t("tokenizer"),fl=t(" de un modelo preentrenado. Debes usar el vocabulario de un "),qs=r("em"),hl=t("tokenizer"),bl=t(" preentrenado si vas a usar un modelo preentrenado, de lo contrario las entradas no tendr\xE1n sentido. Crea un "),zs=r("em"),gl=t("tokenizer"),_l=t(" con el vocabulario de un modelo preentrenado usando la clase "),ks=r("code"),yl=t("DistilBertTokenizer"),$l=t(":"),Mt=f(),z(ca.$$.fragment),wt=f(),ce=r("p"),vl=t("Crea un "),Ms=r("em"),El=t("tokenizer"),jl=t(" r\xE1pido con la clase "),ws=r("code"),ql=t("DistilBertTokenizerFast"),zl=t(":"),Zt=f(),z(pa.$$.fragment),Ct=f(),z(Ge.$$.fragment),Tt=f(),ve=r("h2"),Be=r("a"),Zs=r("span"),z(da.$$.fragment),kl=f(),Cs=r("span"),Ml=t("Extractor de Caracter\xEDsticas"),Rt=f(),ee=r("p"),wl=t("Un extractor de caracter\xEDsticas procesa entradas de audio e imagen. Hereda de la clase base "),Ts=r("code"),Zl=t("FeatureExtractionMixin"),Cl=t(" y tambi\xE9n puede heredar de la clase "),Rs=r("code"),Tl=t("ImageFeatureExtractionMixin"),Rl=t(" para el procesamiento de caracter\xEDsticas de las im\xE1genes o de la clase "),Js=r("code"),Jl=t("SequenceFeatureExtractor"),Vl=t(" para el procesamiento de entradas de audio."),Jt=f(),pe=r("p"),Wl=t("Dependiendo de si trabajas en una tarea de audio o de video, puedes crear un extractor de caracter\xEDsticas asociado al modelo que est\xE9s usando. Por ejemplo, podr\xEDas crear un "),Vs=r("code"),Ul=t("ViTFeatureExtractor"),Fl=t(" por defecto si est\xE1s usando "),za=r("a"),xl=t("ViT"),Gl=t(" para clasificaci\xF3n de im\xE1genes:"),Vt=f(),z(ua.$$.fragment),Wt=f(),z(Pe.$$.fragment),Ut=f(),Xe=r("p"),Bl=t("Puedes modificar cualquier par\xE1metro de "),Ws=r("code"),Pl=t("ViTFeatureExtractor"),Xl=t(" para crear tu extractor de caracter\xEDsticas personalizado:"),Ft=f(),z(ma.$$.fragment),xt=f(),De=r("p"),Dl=t("Para las entradas de audio, puedes crear un "),Us=r("code"),Yl=t("Wav2Vec2FeatureExtractor"),Nl=t(" y personalizar los par\xE1metros de una forma similar:"),Gt=f(),z(fa.$$.fragment),Bt=f(),Ee=r("h2"),Ye=r("a"),Fs=r("span"),z(ha.$$.fragment),Ql=f(),xs=r("span"),Il=t("Procesador"),Pt=f(),K=r("p"),Sl=t("Para modelos que son compatibles con tareas multimodales, \u{1F917} Transformers ofrece una clase "),Gs=r("em"),Al=t("procesador"),Hl=t(" que agrupa un extractor de caracter\xEDsticas y un "),Bs=r("em"),Ll=t("tokenizer"),Ol=t(" en el mismo objeto. Por ejemplo, probemos a usar el procesador "),Ps=r("code"),Kl=t("Wav2Vec2Processor"),en=t(" para una tarea de reconocimiento de voz (ASR). Un ASR transcribe el audio a texto, por lo que necesitaremos un extractor de caracter\xEDsticas y un "),Xs=r("em"),an=t("tokenizer"),sn=t("."),Xt=f(),ka=r("p"),tn=t("Crea un extractor de caracter\xEDsticas para manejar la entrada de audio:"),Dt=f(),z(ba.$$.fragment),Yt=f(),Ne=r("p"),on=t("Crea un "),Ds=r("em"),rn=t("tokenizer"),ln=t(" para manejar la entrada de texto:"),Nt=f(),z(ga.$$.fragment),Qt=f(),de=r("p"),nn=t("Puedes combinar el extractor de caracter\xEDsticas y el "),Ys=r("em"),cn=t("tokenizer"),pn=t(" en el "),Ns=r("code"),dn=t("Wav2Vec2Processor"),un=t(":"),It=f(),z(_a.$$.fragment),St=f(),Qe=r("p"),mn=t("Con dos clases base (la configuraci\xF3n y el modelo) y una clase de preprocesamiento adicional ("),Qs=r("em"),fn=t("tokenizer"),hn=t(", extractor de caracter\xEDsticas o procesador), puedes crear cualquiera de los modelos compatibles con \u{1F917} Transformers. Cada una de estas clases son configurables, permiti\xE9ndote usar sus atributos espec\xEDficos. Puedes crear un modelo para entrenarlo de una forma f\xE1cil, o modificar un modelo preentrenado disponible para especializarlo."),this.h()},l(e){const i=ec('[data-svelte="svelte-1phssyn"]',document.head);p=l(i,"META",{name:!0,content:!0}),i.forEach(s),_=h(e),u=l(e,"H1",{class:!0});var ya=n(u);b=l(ya,"A",{id:!0,class:!0,href:!0});var Is=n(b);$=l(Is,"SPAN",{});var Ss=n($);k(y.$$.fragment,Ss),Ss.forEach(s),Is.forEach(s),q=h(ya),J=l(ya,"SPAN",{});var As=n(J);g=o(As,"Crea una arquitectura personalizada"),As.forEach(s),ya.forEach(s),B=h(e),j=l(e,"P",{});var oe=n(j);x=o(oe,"Una "),T=l(oe,"A",{href:!0});var Hs=n(T);W=l(Hs,"CODE",{});var bn=n(W);V=o(bn,"AutoClass"),bn.forEach(s),Hs.forEach(s),R=o(oe," infiere, autom\xE1ticamente, la arquitectura del modelo y descarga la configuraci\xF3n y los pesos del modelo preentrenado. Normalmente, recomendamos usar una "),U=l(oe,"CODE",{});var gn=n(U);N=o(gn,"AutoClass"),gn.forEach(s),D=o(oe," para producir un c\xF3digo agn\xF3stico a puntos de guardado o checkpoints. Sin embargo, los usuarios que quieran m\xE1s control sobre los par\xE1metros espec\xEDficos de los modelos pueden crear su propio modelo \u{1F917} Transformers personalizado a partir de varias clases base. Esto puede ser particularmente \xFAtil para alguien que est\xE9 interesado en estudiar, entrenar o experimentar con modelos \u{1F917} Transformers. En esta gu\xEDa vamos a profundizar en la creaci\xF3n de modelos personalizados sin usar "),F=l(oe,"CODE",{});var _n=n(F);G=o(_n,"AutoClass"),_n.forEach(s),d=o(oe,". Aprenderemos a:"),oe.forEach(s),m=h(e),v=l(e,"UL",{});var ue=n(v);I=l(ue,"LI",{});var yn=n(I);P=o(yn,"Cargar y personalizar una configuraci\xF3n para un modelo."),yn.forEach(s),L=h(ue),te=l(ue,"LI",{});var $n=n(te);fe=o($n,"Crear una arquitectura para un modelo."),$n.forEach(s),_o=h(ue),Va=l(ue,"LI",{});var vn=n(Va);yo=o(vn,"Crear tokenizadores r\xE1pidos y lentos para textos."),vn.forEach(s),$o=h(ue),Wa=l(ue,"LI",{});var En=n(Wa);vo=o(En,"Crear un extractor de propiedades para tareas de audio o im\xE1genes."),En.forEach(s),Eo=h(ue),Ua=l(ue,"LI",{});var jn=n(Ua);jo=o(jn,"Crear un procesador para tareas multimodales."),jn.forEach(s),ue.forEach(s),Ks=h(e),he=l(e,"H2",{class:!0});var Ht=n(he);je=l(Ht,"A",{id:!0,class:!0,href:!0});var qn=n(je);Fa=l(qn,"SPAN",{});var zn=n(Fa);k(Se.$$.fragment,zn),zn.forEach(s),qn.forEach(s),qo=h(Ht),xa=l(Ht,"SPAN",{});var kn=n(xa);zo=o(kn,"Configuraci\xF3n"),kn.forEach(s),Ht.forEach(s),et=h(e),A=l(e,"P",{});var ae=n(A);ko=o(ae,"Una "),va=l(ae,"A",{href:!0});var Mn=n(va);Mo=o(Mn,"configuraci\xF3n"),Mn.forEach(s),wo=o(ae," es un conjunto de atributos espec\xEDficos de un modelo. Cada configuraci\xF3n de modelo tiene atributos diferentes. Por ejemplo, todos los modelos de PLN tienen los atributos "),Ga=l(ae,"CODE",{});var wn=n(Ga);Zo=o(wn,"hidden_size"),wn.forEach(s),Co=o(ae,", "),Ba=l(ae,"CODE",{});var Zn=n(Ba);To=o(Zn,"num_attention_heads"),Zn.forEach(s),Ro=o(ae,", "),Pa=l(ae,"CODE",{});var Cn=n(Pa);Jo=o(Cn,"num_hidden_layers"),Cn.forEach(s),Vo=o(ae," y "),Xa=l(ae,"CODE",{});var Tn=n(Xa);Wo=o(Tn,"vocab_size"),Tn.forEach(s),Uo=o(ae," en com\xFAn. Estos atributos especifican el n\xFAmero de cabezas de atenci\xF3n o de capas ocultas con las que se construyen los modelos."),ae.forEach(s),at=h(e),le=l(e,"P",{});var Ma=n(le);Fo=o(Ma,"Puedes echarle un vistazo a "),Ea=l(Ma,"A",{href:!0});var Rn=n(Ea);xo=o(Rn,"DistilBERT"),Rn.forEach(s),Go=o(Ma," y sus atributos accediendo a "),Da=l(Ma,"CODE",{});var Jn=n(Da);Bo=o(Jn,"DistilBertConfig"),Jn.forEach(s),Po=o(Ma,":"),Ma.forEach(s),st=h(e),k(Ae.$$.fragment,e),tt=h(e),be=l(e,"P",{});var Ls=n(be);Ya=l(Ls,"CODE",{});var Vn=n(Ya);Xo=o(Vn,"DistilBertConfig"),Vn.forEach(s),Do=o(Ls," muestra todos los atributos por defecto que se han usado para construir un modelo "),Na=l(Ls,"CODE",{});var Wn=n(Na);Yo=o(Wn,"DistilBertModel"),Wn.forEach(s),No=o(Ls," base. Todos ellos son personalizables, lo que deja espacio para poder experimentar. Por ejemplo, puedes personalizar un modelo predeterminado para:"),Ls.forEach(s),ot=h(e),qe=l(e,"UL",{});var Lt=n(qe);He=l(Lt,"LI",{});var Ot=n(He);Qo=o(Ot,"Probar una funci\xF3n de activaci\xF3n diferente, usando el par\xE1metro "),Qa=l(Ot,"CODE",{});var Un=n(Qa);Io=o(Un,"activation"),Un.forEach(s),So=o(Ot,"."),Ot.forEach(s),Ao=h(Lt),ge=l(Lt,"LI",{});var wa=n(ge);Ho=o(wa,"Usar un valor de abandono (tambi\xE9n conocido como "),Ia=l(wa,"EM",{});var Fn=n(Ia);Lo=o(Fn,"dropout"),Fn.forEach(s),Oo=o(wa,") m\xE1s alto para las probabilidades de las capas de atenci\xF3n, usando el par\xE1metro "),Sa=l(wa,"CODE",{});var xn=n(Sa);Ko=o(xn,"attention_dropout"),xn.forEach(s),er=o(wa,"."),wa.forEach(s),Lt.forEach(s),rt=h(e),k(Le.$$.fragment,e),lt=h(e),ze=l(e,"P",{});var Kt=n(ze);ar=o(Kt,"Los atributos de los modelos preentrenados pueden ser modificados con la funci\xF3n "),Aa=l(Kt,"CODE",{});var Gn=n(Aa);sr=o(Gn,"from_pretrained()"),Gn.forEach(s),tr=o(Kt,":"),Kt.forEach(s),nt=h(e),k(Oe.$$.fragment,e),it=h(e),ke=l(e,"P",{});var eo=n(ke);or=o(eo,"Cuando est\xE9s satisfecho con la configuraci\xF3n de tu modelo, puedes guardarlo con la funci\xF3n "),Ha=l(eo,"CODE",{});var Bn=n(Ha);rr=o(Bn,"save_pretrained()"),Bn.forEach(s),lr=o(eo,". Tu configuraci\xF3n se guardar\xE1 en un archivo JSON dentro del directorio que le especifiques como par\xE1metro."),eo.forEach(s),ct=h(e),k(Ke.$$.fragment,e),pt=h(e),Me=l(e,"P",{});var ao=n(Me);nr=o(ao,"Para volver a usar el archivo de configuraci\xF3n, puedes cargarlo usando "),La=l(ao,"CODE",{});var Pn=n(La);ir=o(Pn,"from_pretrained()"),Pn.forEach(s),cr=o(ao,":"),ao.forEach(s),dt=h(e),k(ea.$$.fragment,e),ut=h(e),k(we.$$.fragment,e),mt=h(e),_e=l(e,"H2",{class:!0});var so=n(_e);Ze=l(so,"A",{id:!0,class:!0,href:!0});var Xn=n(Ze);Oa=l(Xn,"SPAN",{});var Dn=n(Oa);k(aa.$$.fragment,Dn),Dn.forEach(s),Xn.forEach(s),pr=h(so),Ka=l(so,"SPAN",{});var Yn=n(Ka);dr=o(Yn,"Modelo"),Yn.forEach(s),so.forEach(s),ft=h(e),Q=l(e,"P",{});var S=n(Q);ur=o(S,"El siguiente paso ser\xE1 crear un "),ja=l(S,"A",{href:!0});var Nn=n(ja);mr=o(Nn,"modelo"),Nn.forEach(s),fr=o(S,". El modelo, al que a veces tambi\xE9n nos referimos como arquitectura, es el encargado de definir cada capa y qu\xE9 operaciones se realizan. Los atributos como "),es=l(S,"CODE",{});var Qn=n(es);hr=o(Qn,"num_hidden_layers"),Qn.forEach(s),br=o(S," de la configuraci\xF3n se usan para definir la arquitectura. Todos los modelos comparten una clase base, "),as=l(S,"CODE",{});var In=n(as);gr=o(In,"PreTrainedModel"),In.forEach(s),_r=o(S,", y algunos m\xE9todos comunes que se pueden usar para redimensionar los "),ss=l(S,"EM",{});var Sn=n(ss);yr=o(Sn,"embeddings"),Sn.forEach(s),$r=o(S," o para recortar cabezas de auto-atenci\xF3n (tambi\xE9n llamadas "),ts=l(S,"EM",{});var An=n(ts);vr=o(An,"self-attention heads"),An.forEach(s),Er=o(S,"). Adem\xE1s, todos los modelos son subclases de "),sa=l(S,"A",{href:!0,rel:!0});var Hn=n(sa);os=l(Hn,"CODE",{});var Ln=n(os);jr=o(Ln,"torch.nn.Module"),Ln.forEach(s),Hn.forEach(s),qr=o(S,", "),ta=l(S,"A",{href:!0,rel:!0});var On=n(ta);rs=l(On,"CODE",{});var Kn=n(rs);zr=o(Kn,"tf.keras.Model"),Kn.forEach(s),On.forEach(s),kr=o(S," o "),oa=l(S,"A",{href:!0,rel:!0});var ei=n(oa);ls=l(ei,"CODE",{});var ai=n(ls);Mr=o(ai,"flax.linen.Module"),ai.forEach(s),ei.forEach(s),wr=o(S,", lo que significa que son compatibles con su respectivo framework."),S.forEach(s),ht=h(e),k(Ce.$$.fragment,e),bt=h(e),ye=l(e,"H3",{class:!0});var to=n(ye);Te=l(to,"A",{id:!0,class:!0,href:!0});var si=n(Te);ns=l(si,"SPAN",{});var ti=n(ns);k(ra.$$.fragment,ti),ti.forEach(s),si.forEach(s),Zr=h(to),is=l(to,"SPAN",{});var oi=n(is);Cr=o(oi,"Cabezas de modelo"),oi.forEach(s),to.forEach(s),gt=h(e),ne=l(e,"P",{});var Za=n(ne);Tr=o(Za,"En este punto del tutorial, tenemos un modelo DistilBERT base que devuelve los "),cs=l(Za,"EM",{});var ri=n(cs);Rr=o(ri,"hidden states"),ri.forEach(s),Jr=o(Za," o estados ocultos. Los "),ps=l(Za,"EM",{});var li=n(ps);Vr=o(li,"hidden states"),li.forEach(s),Wr=o(Za," se pasan como par\xE1metros de entrada a la cabeza del modelo para producir la salida. \u{1F917} Transformers ofrece una cabeza de modelo diferente para cada tarea, siempre y cuando el modelo sea compatible para la tarea (por ejemplo, no puedes usar DistilBERT para una tarea secuencia a secuencia como la traducci\xF3n)."),Za.forEach(s),_t=h(e),k(Re.$$.fragment,e),yt=h(e),$e=l(e,"H2",{class:!0});var oo=n($e);Je=l(oo,"A",{id:!0,class:!0,href:!0});var ni=n(Je);ds=l(ni,"SPAN",{});var ii=n(ds);k(la.$$.fragment,ii),ii.forEach(s),ni.forEach(s),Ur=h(oo),us=l(oo,"SPAN",{});var ci=n(us);Fr=o(ci,"Tokenizer"),ci.forEach(s),oo.forEach(s),$t=h(e),ie=l(e,"P",{});var Ca=n(ie);xr=o(Ca,"La ultima clase base que debes conocer antes de usar un modelo con datos textuales es la clase "),qa=l(Ca,"A",{href:!0});var pi=n(qa);Gr=o(pi,"tokenizer"),pi.forEach(s),Br=o(Ca,", que convierte el texto bruto en tensores. Hay dos tipos de "),ms=l(Ca,"EM",{});var di=n(ms);Pr=o(di,"tokenizers"),di.forEach(s),Xr=o(Ca," que puedes usar con \u{1F917} Transformers:"),Ca.forEach(s),vt=h(e),Ve=l(e,"UL",{});var ro=n(Ve);We=l(ro,"LI",{});var Os=n(We);fs=l(Os,"CODE",{});var ui=n(fs);Dr=o(ui,"PreTrainedTokenizer"),ui.forEach(s),Yr=o(Os,":  una implementaci\xF3n de un "),hs=l(Os,"EM",{});var mi=n(hs);Nr=o(mi,"tokenizer"),mi.forEach(s),Qr=o(Os," hecha en Python."),Os.forEach(s),Ir=h(ro),O=l(ro,"LI",{});var re=n(O);bs=l(re,"CODE",{});var fi=n(bs);Sr=o(fi,"PreTrainedTokenizerFast"),fi.forEach(s),Ar=o(re,": un "),gs=l(re,"EM",{});var hi=n(gs);Hr=o(hi,"tokenizer"),hi.forEach(s),Lr=o(re," de nuestra librer\xEDa "),na=l(re,"A",{href:!0,rel:!0});var bi=n(na);Or=o(bi,"\u{1F917} Tokenizer"),bi.forEach(s),Kr=o(re,", basada en Rust. Este tipo de "),_s=l(re,"EM",{});var gi=n(_s);el=o(gi,"tokenizer"),gi.forEach(s),al=o(re," es bastante m\xE1s r\xE1pido, especialmente durante la tokenizaci\xF3n por lotes, gracias a estar implementado en Rust. Esta r\xE1pida tokenizaci\xF3n tambi\xE9n ofrece m\xE9todos adicionales como el "),ys=l(re,"EM",{});var _i=n(ys);sl=o(_i,"offset mapping"),_i.forEach(s),tl=o(re,", que relaciona los tokens con sus palabras o caracteres originales."),re.forEach(s),ro.forEach(s),Et=h(e),Ue=l(e,"P",{});var lo=n(Ue);ol=o(lo,"Ambos "),$s=l(lo,"EM",{});var yi=n($s);rl=o(yi,"tokenizers"),yi.forEach(s),ll=o(lo," son compatibles con los m\xE9todos comunes, como los de encodificaci\xF3n y decodificaci\xF3n, los m\xE9todos para a\xF1adir tokens y aquellos que manejan tokens especiales."),lo.forEach(s),jt=h(e),k(Fe.$$.fragment,e),qt=h(e),xe=l(e,"P",{});var no=n(xe);nl=o(no,"Si has entrenado tu propio "),vs=l(no,"EM",{});var $i=n(vs);il=o($i,"tokenizer"),$i.forEach(s),cl=o(no,", puedes crear uno desde tu archivo de \u201Cvocabulario\u201D:"),no.forEach(s),zt=h(e),k(ia.$$.fragment,e),kt=h(e),H=l(e,"P",{});var se=n(H);pl=o(se,"Es importante recordar que los vocabularios que provienen de un "),Es=l(se,"EM",{});var vi=n(Es);dl=o(vi,"tokenizer"),vi.forEach(s),ul=o(se," personalizado ser\xE1n diferentes a los vocabularios generados por el "),js=l(se,"EM",{});var Ei=n(js);ml=o(Ei,"tokenizer"),Ei.forEach(s),fl=o(se," de un modelo preentrenado. Debes usar el vocabulario de un "),qs=l(se,"EM",{});var ji=n(qs);hl=o(ji,"tokenizer"),ji.forEach(s),bl=o(se," preentrenado si vas a usar un modelo preentrenado, de lo contrario las entradas no tendr\xE1n sentido. Crea un "),zs=l(se,"EM",{});var qi=n(zs);gl=o(qi,"tokenizer"),qi.forEach(s),_l=o(se," con el vocabulario de un modelo preentrenado usando la clase "),ks=l(se,"CODE",{});var zi=n(ks);yl=o(zi,"DistilBertTokenizer"),zi.forEach(s),$l=o(se,":"),se.forEach(s),Mt=h(e),k(ca.$$.fragment,e),wt=h(e),ce=l(e,"P",{});var Ta=n(ce);vl=o(Ta,"Crea un "),Ms=l(Ta,"EM",{});var ki=n(Ms);El=o(ki,"tokenizer"),ki.forEach(s),jl=o(Ta," r\xE1pido con la clase "),ws=l(Ta,"CODE",{});var Mi=n(ws);ql=o(Mi,"DistilBertTokenizerFast"),Mi.forEach(s),zl=o(Ta,":"),Ta.forEach(s),Zt=h(e),k(pa.$$.fragment,e),Ct=h(e),k(Ge.$$.fragment,e),Tt=h(e),ve=l(e,"H2",{class:!0});var io=n(ve);Be=l(io,"A",{id:!0,class:!0,href:!0});var wi=n(Be);Zs=l(wi,"SPAN",{});var Zi=n(Zs);k(da.$$.fragment,Zi),Zi.forEach(s),wi.forEach(s),kl=h(io),Cs=l(io,"SPAN",{});var Ci=n(Cs);Ml=o(Ci,"Extractor de Caracter\xEDsticas"),Ci.forEach(s),io.forEach(s),Rt=h(e),ee=l(e,"P",{});var Ie=n(ee);wl=o(Ie,"Un extractor de caracter\xEDsticas procesa entradas de audio e imagen. Hereda de la clase base "),Ts=l(Ie,"CODE",{});var Ti=n(Ts);Zl=o(Ti,"FeatureExtractionMixin"),Ti.forEach(s),Cl=o(Ie," y tambi\xE9n puede heredar de la clase "),Rs=l(Ie,"CODE",{});var Ri=n(Rs);Tl=o(Ri,"ImageFeatureExtractionMixin"),Ri.forEach(s),Rl=o(Ie," para el procesamiento de caracter\xEDsticas de las im\xE1genes o de la clase "),Js=l(Ie,"CODE",{});var Ji=n(Js);Jl=o(Ji,"SequenceFeatureExtractor"),Ji.forEach(s),Vl=o(Ie," para el procesamiento de entradas de audio."),Ie.forEach(s),Jt=h(e),pe=l(e,"P",{});var Ra=n(pe);Wl=o(Ra,"Dependiendo de si trabajas en una tarea de audio o de video, puedes crear un extractor de caracter\xEDsticas asociado al modelo que est\xE9s usando. Por ejemplo, podr\xEDas crear un "),Vs=l(Ra,"CODE",{});var Vi=n(Vs);Ul=o(Vi,"ViTFeatureExtractor"),Vi.forEach(s),Fl=o(Ra," por defecto si est\xE1s usando "),za=l(Ra,"A",{href:!0});var Wi=n(za);xl=o(Wi,"ViT"),Wi.forEach(s),Gl=o(Ra," para clasificaci\xF3n de im\xE1genes:"),Ra.forEach(s),Vt=h(e),k(ua.$$.fragment,e),Wt=h(e),k(Pe.$$.fragment,e),Ut=h(e),Xe=l(e,"P",{});var co=n(Xe);Bl=o(co,"Puedes modificar cualquier par\xE1metro de "),Ws=l(co,"CODE",{});var Ui=n(Ws);Pl=o(Ui,"ViTFeatureExtractor"),Ui.forEach(s),Xl=o(co," para crear tu extractor de caracter\xEDsticas personalizado:"),co.forEach(s),Ft=h(e),k(ma.$$.fragment,e),xt=h(e),De=l(e,"P",{});var po=n(De);Dl=o(po,"Para las entradas de audio, puedes crear un "),Us=l(po,"CODE",{});var Fi=n(Us);Yl=o(Fi,"Wav2Vec2FeatureExtractor"),Fi.forEach(s),Nl=o(po," y personalizar los par\xE1metros de una forma similar:"),po.forEach(s),Gt=h(e),k(fa.$$.fragment,e),Bt=h(e),Ee=l(e,"H2",{class:!0});var uo=n(Ee);Ye=l(uo,"A",{id:!0,class:!0,href:!0});var xi=n(Ye);Fs=l(xi,"SPAN",{});var Gi=n(Fs);k(ha.$$.fragment,Gi),Gi.forEach(s),xi.forEach(s),Ql=h(uo),xs=l(uo,"SPAN",{});var Bi=n(xs);Il=o(Bi,"Procesador"),Bi.forEach(s),uo.forEach(s),Pt=h(e),K=l(e,"P",{});var me=n(K);Sl=o(me,"Para modelos que son compatibles con tareas multimodales, \u{1F917} Transformers ofrece una clase "),Gs=l(me,"EM",{});var Pi=n(Gs);Al=o(Pi,"procesador"),Pi.forEach(s),Hl=o(me," que agrupa un extractor de caracter\xEDsticas y un "),Bs=l(me,"EM",{});var Xi=n(Bs);Ll=o(Xi,"tokenizer"),Xi.forEach(s),Ol=o(me," en el mismo objeto. Por ejemplo, probemos a usar el procesador "),Ps=l(me,"CODE",{});var Di=n(Ps);Kl=o(Di,"Wav2Vec2Processor"),Di.forEach(s),en=o(me," para una tarea de reconocimiento de voz (ASR). Un ASR transcribe el audio a texto, por lo que necesitaremos un extractor de caracter\xEDsticas y un "),Xs=l(me,"EM",{});var Yi=n(Xs);an=o(Yi,"tokenizer"),Yi.forEach(s),sn=o(me,"."),me.forEach(s),Xt=h(e),ka=l(e,"P",{});var Ni=n(ka);tn=o(Ni,"Crea un extractor de caracter\xEDsticas para manejar la entrada de audio:"),Ni.forEach(s),Dt=h(e),k(ba.$$.fragment,e),Yt=h(e),Ne=l(e,"P",{});var mo=n(Ne);on=o(mo,"Crea un "),Ds=l(mo,"EM",{});var Qi=n(Ds);rn=o(Qi,"tokenizer"),Qi.forEach(s),ln=o(mo," para manejar la entrada de texto:"),mo.forEach(s),Nt=h(e),k(ga.$$.fragment,e),Qt=h(e),de=l(e,"P",{});var Ja=n(de);nn=o(Ja,"Puedes combinar el extractor de caracter\xEDsticas y el "),Ys=l(Ja,"EM",{});var Ii=n(Ys);cn=o(Ii,"tokenizer"),Ii.forEach(s),pn=o(Ja," en el "),Ns=l(Ja,"CODE",{});var Si=n(Ns);dn=o(Si,"Wav2Vec2Processor"),Si.forEach(s),un=o(Ja,":"),Ja.forEach(s),It=h(e),k(_a.$$.fragment,e),St=h(e),Qe=l(e,"P",{});var fo=n(Qe);mn=o(fo,"Con dos clases base (la configuraci\xF3n y el modelo) y una clase de preprocesamiento adicional ("),Qs=l(fo,"EM",{});var Ai=n(Qs);fn=o(Ai,"tokenizer"),Ai.forEach(s),hn=o(fo,", extractor de caracter\xEDsticas o procesador), puedes crear cualquiera de los modelos compatibles con \u{1F917} Transformers. Cada una de estas clases son configurables, permiti\xE9ndote usar sus atributos espec\xEDficos. Puedes crear un modelo para entrenarlo de una forma f\xE1cil, o modificar un modelo preentrenado disponible para especializarlo."),fo.forEach(s),this.h()},h(){E(p,"name","hf:doc:metadata"),E(p,"content",JSON.stringify(hc)),E(b,"id","crea-una-arquitectura-personalizada"),E(b,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),E(b,"href","#crea-una-arquitectura-personalizada"),E(u,"class","relative group"),E(T,"href","model_doc/auto"),E(je,"id","configuracin"),E(je,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),E(je,"href","#configuracin"),E(he,"class","relative group"),E(va,"href","main_classes/configuration"),E(Ea,"href","model_doc/distilbert"),E(Ze,"id","modelo"),E(Ze,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),E(Ze,"href","#modelo"),E(_e,"class","relative group"),E(ja,"href","main_classes/models"),E(sa,"href","https://pytorch.org/docs/stable/generated/torch.nn.Module.html"),E(sa,"rel","nofollow"),E(ta,"href","https://www.tensorflow.org/api_docs/python/tf/keras/Model"),E(ta,"rel","nofollow"),E(oa,"href","https://flax.readthedocs.io/en/latest/flax.linen.html#module"),E(oa,"rel","nofollow"),E(Te,"id","cabezas-de-modelo"),E(Te,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),E(Te,"href","#cabezas-de-modelo"),E(ye,"class","relative group"),E(Je,"id","tokenizer"),E(Je,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),E(Je,"href","#tokenizer"),E($e,"class","relative group"),E(qa,"href","main_classes/tokenizer"),E(na,"href","https://huggingface.co/docs/tokenizers/python/latest/"),E(na,"rel","nofollow"),E(Be,"id","extractor-de-caractersticas"),E(Be,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),E(Be,"href","#extractor-de-caractersticas"),E(ve,"class","relative group"),E(za,"href","model_doc/vit"),E(Ye,"id","procesador"),E(Ye,"class","header-link block pr-1.5 text-lg no-hover:hidden with-hover:absolute with-hover:p-1.5 with-hover:opacity-0 with-hover:group-hover:opacity-100 with-hover:right-full"),E(Ye,"href","#procesador"),E(Ee,"class","relative group")},m(e,i){a(document.head,p),c(e,_,i),c(e,u,i),a(u,b),a(b,$),M(y,$,null),a(u,q),a(u,J),a(J,g),c(e,B,i),c(e,j,i),a(j,x),a(j,T),a(T,W),a(W,V),a(j,R),a(j,U),a(U,N),a(j,D),a(j,F),a(F,G),a(j,d),c(e,m,i),c(e,v,i),a(v,I),a(I,P),a(v,L),a(v,te),a(te,fe),a(v,_o),a(v,Va),a(Va,yo),a(v,$o),a(v,Wa),a(Wa,vo),a(v,Eo),a(v,Ua),a(Ua,jo),c(e,Ks,i),c(e,he,i),a(he,je),a(je,Fa),M(Se,Fa,null),a(he,qo),a(he,xa),a(xa,zo),c(e,et,i),c(e,A,i),a(A,ko),a(A,va),a(va,Mo),a(A,wo),a(A,Ga),a(Ga,Zo),a(A,Co),a(A,Ba),a(Ba,To),a(A,Ro),a(A,Pa),a(Pa,Jo),a(A,Vo),a(A,Xa),a(Xa,Wo),a(A,Uo),c(e,at,i),c(e,le,i),a(le,Fo),a(le,Ea),a(Ea,xo),a(le,Go),a(le,Da),a(Da,Bo),a(le,Po),c(e,st,i),M(Ae,e,i),c(e,tt,i),c(e,be,i),a(be,Ya),a(Ya,Xo),a(be,Do),a(be,Na),a(Na,Yo),a(be,No),c(e,ot,i),c(e,qe,i),a(qe,He),a(He,Qo),a(He,Qa),a(Qa,Io),a(He,So),a(qe,Ao),a(qe,ge),a(ge,Ho),a(ge,Ia),a(Ia,Lo),a(ge,Oo),a(ge,Sa),a(Sa,Ko),a(ge,er),c(e,rt,i),M(Le,e,i),c(e,lt,i),c(e,ze,i),a(ze,ar),a(ze,Aa),a(Aa,sr),a(ze,tr),c(e,nt,i),M(Oe,e,i),c(e,it,i),c(e,ke,i),a(ke,or),a(ke,Ha),a(Ha,rr),a(ke,lr),c(e,ct,i),M(Ke,e,i),c(e,pt,i),c(e,Me,i),a(Me,nr),a(Me,La),a(La,ir),a(Me,cr),c(e,dt,i),M(ea,e,i),c(e,ut,i),M(we,e,i),c(e,mt,i),c(e,_e,i),a(_e,Ze),a(Ze,Oa),M(aa,Oa,null),a(_e,pr),a(_e,Ka),a(Ka,dr),c(e,ft,i),c(e,Q,i),a(Q,ur),a(Q,ja),a(ja,mr),a(Q,fr),a(Q,es),a(es,hr),a(Q,br),a(Q,as),a(as,gr),a(Q,_r),a(Q,ss),a(ss,yr),a(Q,$r),a(Q,ts),a(ts,vr),a(Q,Er),a(Q,sa),a(sa,os),a(os,jr),a(Q,qr),a(Q,ta),a(ta,rs),a(rs,zr),a(Q,kr),a(Q,oa),a(oa,ls),a(ls,Mr),a(Q,wr),c(e,ht,i),M(Ce,e,i),c(e,bt,i),c(e,ye,i),a(ye,Te),a(Te,ns),M(ra,ns,null),a(ye,Zr),a(ye,is),a(is,Cr),c(e,gt,i),c(e,ne,i),a(ne,Tr),a(ne,cs),a(cs,Rr),a(ne,Jr),a(ne,ps),a(ps,Vr),a(ne,Wr),c(e,_t,i),M(Re,e,i),c(e,yt,i),c(e,$e,i),a($e,Je),a(Je,ds),M(la,ds,null),a($e,Ur),a($e,us),a(us,Fr),c(e,$t,i),c(e,ie,i),a(ie,xr),a(ie,qa),a(qa,Gr),a(ie,Br),a(ie,ms),a(ms,Pr),a(ie,Xr),c(e,vt,i),c(e,Ve,i),a(Ve,We),a(We,fs),a(fs,Dr),a(We,Yr),a(We,hs),a(hs,Nr),a(We,Qr),a(Ve,Ir),a(Ve,O),a(O,bs),a(bs,Sr),a(O,Ar),a(O,gs),a(gs,Hr),a(O,Lr),a(O,na),a(na,Or),a(O,Kr),a(O,_s),a(_s,el),a(O,al),a(O,ys),a(ys,sl),a(O,tl),c(e,Et,i),c(e,Ue,i),a(Ue,ol),a(Ue,$s),a($s,rl),a(Ue,ll),c(e,jt,i),M(Fe,e,i),c(e,qt,i),c(e,xe,i),a(xe,nl),a(xe,vs),a(vs,il),a(xe,cl),c(e,zt,i),M(ia,e,i),c(e,kt,i),c(e,H,i),a(H,pl),a(H,Es),a(Es,dl),a(H,ul),a(H,js),a(js,ml),a(H,fl),a(H,qs),a(qs,hl),a(H,bl),a(H,zs),a(zs,gl),a(H,_l),a(H,ks),a(ks,yl),a(H,$l),c(e,Mt,i),M(ca,e,i),c(e,wt,i),c(e,ce,i),a(ce,vl),a(ce,Ms),a(Ms,El),a(ce,jl),a(ce,ws),a(ws,ql),a(ce,zl),c(e,Zt,i),M(pa,e,i),c(e,Ct,i),M(Ge,e,i),c(e,Tt,i),c(e,ve,i),a(ve,Be),a(Be,Zs),M(da,Zs,null),a(ve,kl),a(ve,Cs),a(Cs,Ml),c(e,Rt,i),c(e,ee,i),a(ee,wl),a(ee,Ts),a(Ts,Zl),a(ee,Cl),a(ee,Rs),a(Rs,Tl),a(ee,Rl),a(ee,Js),a(Js,Jl),a(ee,Vl),c(e,Jt,i),c(e,pe,i),a(pe,Wl),a(pe,Vs),a(Vs,Ul),a(pe,Fl),a(pe,za),a(za,xl),a(pe,Gl),c(e,Vt,i),M(ua,e,i),c(e,Wt,i),M(Pe,e,i),c(e,Ut,i),c(e,Xe,i),a(Xe,Bl),a(Xe,Ws),a(Ws,Pl),a(Xe,Xl),c(e,Ft,i),M(ma,e,i),c(e,xt,i),c(e,De,i),a(De,Dl),a(De,Us),a(Us,Yl),a(De,Nl),c(e,Gt,i),M(fa,e,i),c(e,Bt,i),c(e,Ee,i),a(Ee,Ye),a(Ye,Fs),M(ha,Fs,null),a(Ee,Ql),a(Ee,xs),a(xs,Il),c(e,Pt,i),c(e,K,i),a(K,Sl),a(K,Gs),a(Gs,Al),a(K,Hl),a(K,Bs),a(Bs,Ll),a(K,Ol),a(K,Ps),a(Ps,Kl),a(K,en),a(K,Xs),a(Xs,an),a(K,sn),c(e,Xt,i),c(e,ka,i),a(ka,tn),c(e,Dt,i),M(ba,e,i),c(e,Yt,i),c(e,Ne,i),a(Ne,on),a(Ne,Ds),a(Ds,rn),a(Ne,ln),c(e,Nt,i),M(ga,e,i),c(e,Qt,i),c(e,de,i),a(de,nn),a(de,Ys),a(Ys,cn),a(de,pn),a(de,Ns),a(Ns,dn),a(de,un),c(e,It,i),M(_a,e,i),c(e,St,i),c(e,Qe,i),a(Qe,mn),a(Qe,Qs),a(Qs,fn),a(Qe,hn),At=!0},p(e,[i]){const ya={};i&2&&(ya.$$scope={dirty:i,ctx:e}),we.$set(ya);const Is={};i&2&&(Is.$$scope={dirty:i,ctx:e}),Ce.$set(Is);const Ss={};i&2&&(Ss.$$scope={dirty:i,ctx:e}),Re.$set(Ss);const As={};i&2&&(As.$$scope={dirty:i,ctx:e}),Fe.$set(As);const oe={};i&2&&(oe.$$scope={dirty:i,ctx:e}),Ge.$set(oe);const Hs={};i&2&&(Hs.$$scope={dirty:i,ctx:e}),Pe.$set(Hs)},i(e){At||(w(y.$$.fragment,e),w(Se.$$.fragment,e),w(Ae.$$.fragment,e),w(Le.$$.fragment,e),w(Oe.$$.fragment,e),w(Ke.$$.fragment,e),w(ea.$$.fragment,e),w(we.$$.fragment,e),w(aa.$$.fragment,e),w(Ce.$$.fragment,e),w(ra.$$.fragment,e),w(Re.$$.fragment,e),w(la.$$.fragment,e),w(Fe.$$.fragment,e),w(ia.$$.fragment,e),w(ca.$$.fragment,e),w(pa.$$.fragment,e),w(Ge.$$.fragment,e),w(da.$$.fragment,e),w(ua.$$.fragment,e),w(Pe.$$.fragment,e),w(ma.$$.fragment,e),w(fa.$$.fragment,e),w(ha.$$.fragment,e),w(ba.$$.fragment,e),w(ga.$$.fragment,e),w(_a.$$.fragment,e),At=!0)},o(e){Z(y.$$.fragment,e),Z(Se.$$.fragment,e),Z(Ae.$$.fragment,e),Z(Le.$$.fragment,e),Z(Oe.$$.fragment,e),Z(Ke.$$.fragment,e),Z(ea.$$.fragment,e),Z(we.$$.fragment,e),Z(aa.$$.fragment,e),Z(Ce.$$.fragment,e),Z(ra.$$.fragment,e),Z(Re.$$.fragment,e),Z(la.$$.fragment,e),Z(Fe.$$.fragment,e),Z(ia.$$.fragment,e),Z(ca.$$.fragment,e),Z(pa.$$.fragment,e),Z(Ge.$$.fragment,e),Z(da.$$.fragment,e),Z(ua.$$.fragment,e),Z(Pe.$$.fragment,e),Z(ma.$$.fragment,e),Z(fa.$$.fragment,e),Z(ha.$$.fragment,e),Z(ba.$$.fragment,e),Z(ga.$$.fragment,e),Z(_a.$$.fragment,e),At=!1},d(e){s(p),e&&s(_),e&&s(u),C(y),e&&s(B),e&&s(j),e&&s(m),e&&s(v),e&&s(Ks),e&&s(he),C(Se),e&&s(et),e&&s(A),e&&s(at),e&&s(le),e&&s(st),C(Ae,e),e&&s(tt),e&&s(be),e&&s(ot),e&&s(qe),e&&s(rt),C(Le,e),e&&s(lt),e&&s(ze),e&&s(nt),C(Oe,e),e&&s(it),e&&s(ke),e&&s(ct),C(Ke,e),e&&s(pt),e&&s(Me),e&&s(dt),C(ea,e),e&&s(ut),C(we,e),e&&s(mt),e&&s(_e),C(aa),e&&s(ft),e&&s(Q),e&&s(ht),C(Ce,e),e&&s(bt),e&&s(ye),C(ra),e&&s(gt),e&&s(ne),e&&s(_t),C(Re,e),e&&s(yt),e&&s($e),C(la),e&&s($t),e&&s(ie),e&&s(vt),e&&s(Ve),e&&s(Et),e&&s(Ue),e&&s(jt),C(Fe,e),e&&s(qt),e&&s(xe),e&&s(zt),C(ia,e),e&&s(kt),e&&s(H),e&&s(Mt),C(ca,e),e&&s(wt),e&&s(ce),e&&s(Zt),C(pa,e),e&&s(Ct),C(Ge,e),e&&s(Tt),e&&s(ve),C(da),e&&s(Rt),e&&s(ee),e&&s(Jt),e&&s(pe),e&&s(Vt),C(ua,e),e&&s(Wt),C(Pe,e),e&&s(Ut),e&&s(Xe),e&&s(Ft),C(ma,e),e&&s(xt),e&&s(De),e&&s(Gt),C(fa,e),e&&s(Bt),e&&s(Ee),C(ha),e&&s(Pt),e&&s(K),e&&s(Xt),e&&s(ka),e&&s(Dt),C(ba,e),e&&s(Yt),e&&s(Ne),e&&s(Nt),C(ga,e),e&&s(Qt),e&&s(de),e&&s(It),C(_a,e),e&&s(St),e&&s(Qe)}}}const hc={local:"crea-una-arquitectura-personalizada",sections:[{local:"configuracin",title:"Configuraci\xF3n"},{local:"modelo",sections:[{local:"cabezas-de-modelo",title:"Cabezas de modelo "}],title:"Modelo"},{local:"tokenizer",title:"Tokenizer"},{local:"extractor-de-caractersticas",title:"Extractor de Caracter\xEDsticas "},{local:"procesador",title:"Procesador"}],title:"Crea una arquitectura personalizada"};function bc(X){return ac(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class jc extends Li{constructor(p){super();Oi(this,p,bc,fc,Ki,{})}}export{jc as default,hc as metadata};
