Buckets:
| import{s as Me,o as Ee}from"../chunks/scheduler.505acc25.js";import{S as Te,i as Ie,e as ke,s as o,c as r,h as _e,a as ze,d as t,b as s,f as je,g as i,k as ve,l as Ce,m as n,n as l,t as u,o as c,p as d}from"../chunks/index.e22abd30.js";import{C as Ze,H as p,E as Je}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.a144e953.js";import{C as we}from"../chunks/CodeBlock.f6688f67.js";import{C as Ue}from"../chunks/CourseFloatingBanner.f0a2dc21.js";import{Q as m}from"../chunks/Question.bc1e0795.js";import{F as Ae}from"../chunks/FrameworkSwitchCourse.c2af54e8.js";function We(ye){let $,H,f,V,g,D,x,R,b,F,q,G,y,N,k,Y,z,K,h,O,j,ee,v,ae,w,te,M,ne,E,oe,T,se,I,re,_,ie,C,le,Z,ue,J,ce,U,de,A,pe,W,me,B,$e,L,fe,Q,ge,P,xe,S,be,X,qe;return g=new Ae({props:{fw:ye[0]}}),x=new Ze({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),b=new p({props:{title:"Quiz de final de capítulo",local:"end-of-chapter-quiz",headingTag:"h1"}}),q=new Ue({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),y=new p({props:{title:"1. ¿Cuál es el orden del pipeline de modelado del lenguaje?",local:"1-cuál-es-el-orden-del-pipeline-de-modelado-del-lenguaje",headingTag:"h3"}}),k=new m({props:{choices:[{text:"Primero, el modelo, que maneja el texto y devuelve predicciones en bruto. Luego el tokenizador da sentido a esas predicciones y las convierte de nuevo en texto cuando hace falta.",explain:"El modelo no puede entender texto. El tokenizador primero tiene que tokenizar el texto y convertirlo en IDs para que el modelo pueda entenderlo."},{text:"Primero, el tokenizador, que maneja el texto y devuelve IDs. El modelo maneja esos IDs y produce una predicción, que puede ser algún texto.",explain:"La predicción del modelo no puede ser texto directamente. Hay que usar el tokenizador para convertir la predicción de vuelta en texto."},{text:"El tokenizador maneja texto y devuelve IDs. El modelo maneja esos IDs y produce una predicción. Después, el tokenizador puede volver a usarse para convertir esas predicciones otra vez en texto.",explain:"El tokenizador puede usarse tanto para tokenizar como para destokenizar.",correct:!0}]}}),z=new p({props:{title:"2. ¿Cuántas dimensiones tiene el tensor que produce el modelo Transformer base, y cuáles son?",local:"2-cuántas-dimensiones-tiene-el-tensor-que-produce-el-modelo-transformer-base-y-cuáles-son",headingTag:"h3"}}),h=new m({props:{choices:[{text:"2: La longitud de la secuencia y el tamaño del lote",explain:"Falso. El tensor que produce el modelo tiene una tercera dimensión: el hidden size."},{text:"2: La longitud de la secuencia y el hidden size",explain:"Falso. Todos los modelos Transformer manejan lotes, incluso con una sola secuencia; en ese caso el batch size sería 1."},{text:"3: La longitud de la secuencia, el tamaño del lote y el hidden size",explain:"Bien hecho.",correct:!0}]}}),j=new p({props:{title:"3. ¿Cuál de los siguientes es un ejemplo de tokenización por subpalabras?",local:"3-cuál-de-los-siguientes-es-un-ejemplo-de-tokenización-por-subpalabras",headingTag:"h3"}}),v=new m({props:{choices:[{text:"WordPiece",explain:"Sí, ese es un ejemplo de tokenización por subpalabras.",correct:!0},{text:"Tokenización basada en caracteres",explain:"La tokenización basada en caracteres no es un tipo de tokenización por subpalabras."},{text:"Dividir por espacios en blanco y puntuación",explain:"Eso es un esquema de tokenización basado en palabras."},{text:"BPE",explain:"Sí, ese es un ejemplo de tokenización por subpalabras.",correct:!0},{text:"Unigram",explain:"Sí, ese es un ejemplo de tokenización por subpalabras.",correct:!0},{text:"Ninguna de las anteriores",explain:"Incorrecto."}]}}),w=new p({props:{title:"4. ¿Qué es una cabeza de modelo?",local:"4-qué-es-una-cabeza-de-modelo",headingTag:"h3"}}),M=new m({props:{choices:[{text:"Un componente de la red Transformer base que redirige tensores a sus capas correctas",explain:"No existe ese componente."},{text:"También conocida como el mecanismo de self-attention, adapta la representación de un token según los demás tokens de la secuencia",explain:'La capa de self-attention sí contiene "heads" de atención, pero esas no son cabezas de adaptación.'},{text:"Un componente adicional, normalmente formado por una o unas pocas capas, para convertir las predicciones del Transformer en una salida específica de una tarea",explain:"Exacto. Las cabezas de adaptación, también conocidas simplemente como heads, aparecen de distintas formas: cabezas de modelado del lenguaje, de question answering, de clasificación de secuencias...",correct:!0}]}}),E=new p({props:{title:"5. ¿Qué es un AutoModel?",local:"5-qué-es-un-automodel",headingTag:"h3"}}),T=new m({props:{choices:[{text:"Un modelo que se entrena automáticamente con tus datos",explain:"¿Lo estás confundiendo con nuestro producto <a href='https://huggingface.co/autotrain'>AutoTrain</a>?"},{text:"Un objeto que devuelve la arquitectura correcta a partir del checkpoint",explain:"Exactamente: <code>AutoModel</code> solo necesita saber desde qué checkpoint inicializarse para devolver la arquitectura correcta.",correct:!0},{text:"Un modelo que detecta automáticamente el idioma usado en sus entradas para cargar los pesos correctos",explain:"Aunque algunos checkpoints y modelos pueden manejar varios idiomas, no hay herramientas integradas para seleccionar automáticamente el checkpoint según el idioma. Ve al <a href='https://huggingface.co/models'>Model Hub</a> para encontrar el mejor checkpoint para tu tarea."}]}}),I=new p({props:{title:"6. ¿Qué técnicas hay que tener en cuenta al agrupar juntas secuencias de distintas longitudes?",local:"6-qué-técnicas-hay-que-tener-en-cuenta-al-agrupar-juntas-secuencias-de-distintas-longitudes",headingTag:"h3"}}),_=new m({props:{choices:[{text:"Truncado",explain:"Sí, truncar es una forma correcta de igualar secuencias para que encajen en una forma rectangular. Pero, ¿es la única?",correct:!0},{text:"Devolver tensores",explain:"Aunque las otras técnicas te permiten devolver tensores rectangulares, devolver tensores no sirve de mucho para agrupar secuencias."},{text:"Relleno",explain:"Sí, el relleno es una forma correcta de igualar secuencias para que encajen en una forma rectangular. Pero, ¿es la única?",correct:!0},{text:"Enmascarado de atención",explain:"Exacto. Las máscaras de atención son muy importantes al manejar secuencias de distintas longitudes. Aun así, no es la única técnica que hay que tener en cuenta.",correct:!0}]}}),C=new p({props:{title:"7. ¿Para qué sirve aplicar una función SoftMax a los logits que produce un modelo de clasificación de secuencias?",local:"7-para-qué-sirve-aplicar-una-función-softmax-a-los-logits-que-produce-un-modelo-de-clasificación-de-secuencias",headingTag:"h3"}}),Z=new m({props:{choices:[{text:"Suaviza los logits para que sean más fiables.",explain:"No, la función SoftMax no afecta a la fiabilidad de los resultados."},{text:"Aplica un límite inferior y uno superior para que sean entendibles.",explain:"Los valores resultantes quedan acotados entre 0 y 1. Pero esa no es la única razón por la que usamos una función SoftMax.",correct:!0},{text:"La suma total de la salida pasa a ser 1, lo que permite una posible interpretación probabilística.",explain:"Correcto. Pero esa no es la única razón por la que usamos una función SoftMax.",correct:!0}]}}),J=new p({props:{title:"8. ¿En qué método se centra la mayor parte de la API del tokenizador?",local:"8-en-qué-método-se-centra-la-mayor-parte-de-la-api-del-tokenizador",headingTag:"h3"}}),U=new m({props:{choices:[{text:"<code>encode</code>, ya que puede codificar texto en IDs e IDs en predicciones",explain:"Incorrecto. Aunque el método <code>encode</code> existe en los tokenizadores, no existe en los modelos."},{text:"Llamar directamente al objeto tokenizador.",explain:"Exacto. El método <code>__call__</code> del tokenizador es muy potente y puede encargarse de casi todo. También es el método que se usa para obtener predicciones de un modelo.",correct:!0},{text:"<code>pad</code>",explain:"Incorrecto. El relleno es muy útil, pero es solo una parte de la API del tokenizador."},{text:"<code>tokenize</code>",explain:"El método <code>tokenize</code> es seguramente uno de los métodos más útiles, pero no es el núcleo de la API del tokenizador."}]}}),A=new p({props:{title:"9. ¿Qué contiene la variable result en este ejemplo de código?",local:"9-qué-contiene-la-variable-result-en-este-ejemplo-de-código",headingTag:"h3"}}),W=new we({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyLnRva2VuaXplKCUyMkhlbGxvISUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"bert-base-cased"</span>) | |
| result = tokenizer.tokenize(<span class="hljs-string">"Hello!"</span>)`,wrap:!1}}),B=new m({props:{choices:[{text:"Una lista de strings, donde cada string es un token",explain:"Claro. Convierte eso a IDs y envíalos a un modelo.",correct:!0},{text:"Una lista de IDs",explain:"Incorrecto; para eso están los métodos <code>__call__</code> o <code>convert_tokens_to_ids</code>."},{text:"Un string que contiene todos los tokens",explain:"Eso sería poco práctico, porque el objetivo es dividir el string en varios tokens."}]}}),L=new p({props:{title:"10. ¿Hay algo mal en el siguiente código?",local:"10-hay-algo-mal-en-el-siguiente-código",headingTag:"h3"}}),Q=new we({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWwlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMmdwdDIlMjIpJTBBJTBBZW5jb2RlZCUyMCUzRCUyMHRva2VuaXplciglMjJIZXkhJTIyJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJwdCUyMiklMEFyZXN1bHQlMjAlM0QlMjBtb2RlbCgqKmVuY29kZWQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModel | |
| tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"bert-base-cased"</span>) | |
| model = AutoModel.from_pretrained(<span class="hljs-string">"gpt2"</span>) | |
| encoded = tokenizer(<span class="hljs-string">"Hey!"</span>, return_tensors=<span class="hljs-string">"pt"</span>) | |
| result = model(**encoded)`,wrap:!1}}),P=new m({props:{choices:[{text:"No, parece correcto.",explain:"Por desgracia, combinar un modelo con un tokenizador que se entrenó con un checkpoint distinto rara vez es una buena idea. El modelo no fue entrenado para entender la salida de este tokenizador, así que la salida del modelo, si es que siquiera puede ejecutarse, no tendrá ningún sentido."},{text:"El tokenizador y el modelo deberían venir siempre del mismo checkpoint.",explain:"Correcto.",correct:!0},{text:"Es una buena práctica aplicar relleno y truncado con el tokenizador porque toda entrada es un batch.",explain:"Es cierto que toda entrada al modelo tiene que ser un batch. Sin embargo, truncar o rellenar esta secuencia no tendría por qué tener sentido, ya que solo hay una, y esas son técnicas para agrupar listas de frases."}]}}),S=new Je({props:{source:"https://github.com/huggingface/course/blob/main/chapters/es/chapter2/9.mdx"}}),{c(){$=ke("meta"),H=o(),f=ke("p"),V=o(),r(g.$$.fragment),D=o(),r(x.$$.fragment),R=o(),r(b.$$.fragment),F=o(),r(q.$$.fragment),G=o(),r(y.$$.fragment),N=o(),r(k.$$.fragment),Y=o(),r(z.$$.fragment),K=o(),r(h.$$.fragment),O=o(),r(j.$$.fragment),ee=o(),r(v.$$.fragment),ae=o(),r(w.$$.fragment),te=o(),r(M.$$.fragment),ne=o(),r(E.$$.fragment),oe=o(),r(T.$$.fragment),se=o(),r(I.$$.fragment),re=o(),r(_.$$.fragment),ie=o(),r(C.$$.fragment),le=o(),r(Z.$$.fragment),ue=o(),r(J.$$.fragment),ce=o(),r(U.$$.fragment),de=o(),r(A.$$.fragment),pe=o(),r(W.$$.fragment),me=o(),r(B.$$.fragment),$e=o(),r(L.$$.fragment),fe=o(),r(Q.$$.fragment),ge=o(),r(P.$$.fragment),xe=o(),r(S.$$.fragment),be=o(),X=ke("p"),this.h()},l(e){const a=_e("svelte-u9bgzb",document.head);$=ze(a,"META",{name:!0,content:!0}),a.forEach(t),H=s(e),f=ze(e,"P",{}),je(f).forEach(t),V=s(e),i(g.$$.fragment,e),D=s(e),i(x.$$.fragment,e),R=s(e),i(b.$$.fragment,e),F=s(e),i(q.$$.fragment,e),G=s(e),i(y.$$.fragment,e),N=s(e),i(k.$$.fragment,e),Y=s(e),i(z.$$.fragment,e),K=s(e),i(h.$$.fragment,e),O=s(e),i(j.$$.fragment,e),ee=s(e),i(v.$$.fragment,e),ae=s(e),i(w.$$.fragment,e),te=s(e),i(M.$$.fragment,e),ne=s(e),i(E.$$.fragment,e),oe=s(e),i(T.$$.fragment,e),se=s(e),i(I.$$.fragment,e),re=s(e),i(_.$$.fragment,e),ie=s(e),i(C.$$.fragment,e),le=s(e),i(Z.$$.fragment,e),ue=s(e),i(J.$$.fragment,e),ce=s(e),i(U.$$.fragment,e),de=s(e),i(A.$$.fragment,e),pe=s(e),i(W.$$.fragment,e),me=s(e),i(B.$$.fragment,e),$e=s(e),i(L.$$.fragment,e),fe=s(e),i(Q.$$.fragment,e),ge=s(e),i(P.$$.fragment,e),xe=s(e),i(S.$$.fragment,e),be=s(e),X=ze(e,"P",{}),je(X).forEach(t),this.h()},h(){ve($,"name","hf:doc:metadata"),ve($,"content",Be)},m(e,a){Ce(document.head,$),n(e,H,a),n(e,f,a),n(e,V,a),l(g,e,a),n(e,D,a),l(x,e,a),n(e,R,a),l(b,e,a),n(e,F,a),l(q,e,a),n(e,G,a),l(y,e,a),n(e,N,a),l(k,e,a),n(e,Y,a),l(z,e,a),n(e,K,a),l(h,e,a),n(e,O,a),l(j,e,a),n(e,ee,a),l(v,e,a),n(e,ae,a),l(w,e,a),n(e,te,a),l(M,e,a),n(e,ne,a),l(E,e,a),n(e,oe,a),l(T,e,a),n(e,se,a),l(I,e,a),n(e,re,a),l(_,e,a),n(e,ie,a),l(C,e,a),n(e,le,a),l(Z,e,a),n(e,ue,a),l(J,e,a),n(e,ce,a),l(U,e,a),n(e,de,a),l(A,e,a),n(e,pe,a),l(W,e,a),n(e,me,a),l(B,e,a),n(e,$e,a),l(L,e,a),n(e,fe,a),l(Q,e,a),n(e,ge,a),l(P,e,a),n(e,xe,a),l(S,e,a),n(e,be,a),n(e,X,a),qe=!0},p(e,[a]){const he={};a&1&&(he.fw=e[0]),g.$set(he)},i(e){qe||(u(g.$$.fragment,e),u(x.$$.fragment,e),u(b.$$.fragment,e),u(q.$$.fragment,e),u(y.$$.fragment,e),u(k.$$.fragment,e),u(z.$$.fragment,e),u(h.$$.fragment,e),u(j.$$.fragment,e),u(v.$$.fragment,e),u(w.$$.fragment,e),u(M.$$.fragment,e),u(E.$$.fragment,e),u(T.$$.fragment,e),u(I.$$.fragment,e),u(_.$$.fragment,e),u(C.$$.fragment,e),u(Z.$$.fragment,e),u(J.$$.fragment,e),u(U.$$.fragment,e),u(A.$$.fragment,e),u(W.$$.fragment,e),u(B.$$.fragment,e),u(L.$$.fragment,e),u(Q.$$.fragment,e),u(P.$$.fragment,e),u(S.$$.fragment,e),qe=!0)},o(e){c(g.$$.fragment,e),c(x.$$.fragment,e),c(b.$$.fragment,e),c(q.$$.fragment,e),c(y.$$.fragment,e),c(k.$$.fragment,e),c(z.$$.fragment,e),c(h.$$.fragment,e),c(j.$$.fragment,e),c(v.$$.fragment,e),c(w.$$.fragment,e),c(M.$$.fragment,e),c(E.$$.fragment,e),c(T.$$.fragment,e),c(I.$$.fragment,e),c(_.$$.fragment,e),c(C.$$.fragment,e),c(Z.$$.fragment,e),c(J.$$.fragment,e),c(U.$$.fragment,e),c(A.$$.fragment,e),c(W.$$.fragment,e),c(B.$$.fragment,e),c(L.$$.fragment,e),c(Q.$$.fragment,e),c(P.$$.fragment,e),c(S.$$.fragment,e),qe=!1},d(e){e&&(t(H),t(f),t(V),t(D),t(R),t(F),t(G),t(N),t(Y),t(K),t(O),t(ee),t(ae),t(te),t(ne),t(oe),t(se),t(re),t(ie),t(le),t(ue),t(ce),t(de),t(pe),t(me),t($e),t(fe),t(ge),t(xe),t(be),t(X)),t($),d(g,e),d(x,e),d(b,e),d(q,e),d(y,e),d(k,e),d(z,e),d(h,e),d(j,e),d(v,e),d(w,e),d(M,e),d(E,e),d(T,e),d(I,e),d(_,e),d(C,e),d(Z,e),d(J,e),d(U,e),d(A,e),d(W,e),d(B,e),d(L,e),d(Q,e),d(P,e),d(S,e)}}}const Be='{"title":"Quiz de final de capítulo","local":"end-of-chapter-quiz","sections":[{"title":"1. ¿Cuál es el orden del pipeline de modelado del lenguaje?","local":"1-cuál-es-el-orden-del-pipeline-de-modelado-del-lenguaje","sections":[],"depth":3},{"title":"2. ¿Cuántas dimensiones tiene el tensor que produce el modelo Transformer base, y cuáles son?","local":"2-cuántas-dimensiones-tiene-el-tensor-que-produce-el-modelo-transformer-base-y-cuáles-son","sections":[],"depth":3},{"title":"3. ¿Cuál de los siguientes es un ejemplo de tokenización por subpalabras?","local":"3-cuál-de-los-siguientes-es-un-ejemplo-de-tokenización-por-subpalabras","sections":[],"depth":3},{"title":"4. ¿Qué es una cabeza de modelo?","local":"4-qué-es-una-cabeza-de-modelo","sections":[],"depth":3},{"title":"5. ¿Qué es un AutoModel?","local":"5-qué-es-un-automodel","sections":[],"depth":3},{"title":"6. ¿Qué técnicas hay que tener en cuenta al agrupar juntas secuencias de distintas longitudes?","local":"6-qué-técnicas-hay-que-tener-en-cuenta-al-agrupar-juntas-secuencias-de-distintas-longitudes","sections":[],"depth":3},{"title":"7. ¿Para qué sirve aplicar una función SoftMax a los logits que produce un modelo de clasificación de secuencias?","local":"7-para-qué-sirve-aplicar-una-función-softmax-a-los-logits-que-produce-un-modelo-de-clasificación-de-secuencias","sections":[],"depth":3},{"title":"8. ¿En qué método se centra la mayor parte de la API del tokenizador?","local":"8-en-qué-método-se-centra-la-mayor-parte-de-la-api-del-tokenizador","sections":[],"depth":3},{"title":"9. ¿Qué contiene la variable result en este ejemplo de código?","local":"9-qué-contiene-la-variable-result-en-este-ejemplo-de-código","sections":[],"depth":3},{"title":"10. ¿Hay algo mal en el siguiente código?","local":"10-hay-algo-mal-en-el-siguiente-código","sections":[],"depth":3}],"depth":1}';function Le(ye,$,H){let f="pt";return Ee(()=>{const V=new URLSearchParams(window.location.search);H(0,f=V.get("fw")||"pt")}),[f]}class Re extends Te{constructor($){super(),Ie(this,$,Le,We,Me,{})}}export{Re as component}; | |
Xet Storage Details
- Size:
- 17.5 kB
- Xet hash:
- c97618f182a975fdf57aef45a1ea31a3bb5c175d4e190b098a477bb353165111
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.