Buckets:

rtrm's picture
download
raw
19.1 kB
import{s as Ze,n as Ve,o as _e}from"../chunks/scheduler.505acc25.js";import{S as Qe,i as Se,e as Y,s as n,c as r,h as Fe,a as K,d as t,b as o,f as ke,g as i,j as Ge,k as We,l as He,m as s,n as l,t as u,o as m,p}from"../chunks/index.ccc5f2c1.js";import{C as Le,E as Re}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.c7a55e43.js";import{C as ze}from"../chunks/CodeBlock.dd7e3e43.js";import{C as Pe}from"../chunks/CourseFloatingBanner.edb13094.js";import{Q as d}from"../chunks/Question.03127a79.js";import{H as c}from"../chunks/Heading.666af0ac.js";function Ne(Be){let f,A,P,X,$,D,g,O,x,ee,y,Ie="¡Este capítulo cubrió una gran variedad de temas! No te preocupes si no entendiste todos los detalles; los siguientes capítulos te ayudarán a entender cómo funcionan las cosas detrás de cámaras.",ae,b,Ee="Por ahora, ¡revisemos lo que aprendiste en este capítulo!",te,q,se,w,ne,v,oe,T,re,j,ie,U,le,h,ue,M,me,J,pe,C,ce,z,de,B,fe,I,$e,E,ge,k,xe,G,ye,W,be,Z,qe,V,we,_,ve,Q,Te,S,je,F,Ue,H,he,L,Me,R,Je,N,Ce;return $=new Le({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),g=new c({props:{title:"Quiz de final de capítulo",local:"quiz-de-final-de-capítulo",headingTag:"h1"}}),x=new Pe({props:{chapter:1,classNames:"absolute z-10 right-0 top-0"}}),q=new c({props:{title:"1. Explora el Hub y busca el punto de control roberta-large-mnli . ¿Qué tarea desarrolla?",local:"1-explora-el-hub-y-busca-el-punto-de-control-roberta-large-mnli--qué-tarea-desarrolla",headingTag:"h3"}}),w=new d({props:{choices:[{text:"Resumen",explain:'Vuelve a mirar en la <a href="https://huggingface.co/roberta-large-mnli">página de roberta-large-mnli</a>.'},{text:"Clasificación de texto",explain:" Más precisamente, clasifica si dos oraciones están relacionadas lógicamente a través de tres etiquetas (contradiction, neutral, entailment) - una tarea que también se conoce como <em>inferencia de lenguaje natural</em>.",correct:!0},{text:"Generación de texto",explain:'Vuelve a mirar en la <a href="https://huggingface.co/roberta-large-mnli">página de roberta-large-mnli</a>.'}]}}),v=new c({props:{title:"2. ¿Qué devuelve el siguiente código?",local:"2-qué-devuelve-el-siguiente-código",headingTag:"h3"}}),T=new ze({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBbmVyJTIwJTNEJTIwcGlwZWxpbmUoJTIybmVyJTIyJTJDJTIwZ3JvdXBlZF9lbnRpdGllcyUzRFRydWUpJTBBbmVyKCUyMk15JTIwbmFtZSUyMGlzJTIwU3lsdmFpbiUyMGFuZCUyMEklMjB3b3JrJTIwYXQlMjBIdWdnaW5nJTIwRmFjZSUyMGluJTIwQnJvb2tseW4uJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline
ner = pipeline(<span class="hljs-string">&quot;ner&quot;</span>, grouped_entities=<span class="hljs-literal">True</span>)
ner(<span class="hljs-string">&quot;My name is Sylvain and I work at Hugging Face in Brooklyn.&quot;</span>)`,wrap:!1}}),j=new d({props:{choices:[{text:'Devuelve los puntajes de clasificación de esta oración, con las etiquetas "positive" o "negative".',explain:"Incorrecto - esto sería un pipeline de <code>sentiment-analysis</code>."},{text:"Devuelve un texto generado que completa esta oración.",explain:"Incorrecto - esto sería un pipeline de <code>text-generation</code>."},{text:"Devuelve las palabras que representan personas, organizaciones o ubicaciones.",explain:'Adicionalmente, con <code>grouped_entities=True</code>, agrupará las palabras que pertenecen a la misma entidad, como "Hugging Face".',correct:!0}]}}),U=new c({props:{title:"3. ¿Qué debería reemplazar … en este ejemplo de código?",local:"3-qué-debería-reemplazar--en-este-ejemplo-de-código",headingTag:"h3"}}),h=new ze({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBZmlsbGVyJTIwJTNEJTIwcGlwZWxpbmUoJTIyZmlsbC1tYXNrJTIyJTJDJTIwbW9kZWwlM0QlMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwZmlsbGVyKCUyMi4uLiUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline
filler = pipeline(<span class="hljs-string">&quot;fill-mask&quot;</span>, model=<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
result = filler(<span class="hljs-string">&quot;...&quot;</span>)`,wrap:!1}}),M=new d({props:{choices:[{text:"This &#60;mask> has been waiting for you.",explain:"Incorrecto. Revisa la ficha del modelo <code>bert-base-cased</code> e intenta identificar tu error."},{text:"This [MASK] has been waiting for you.",explain:"¡Correcto! El mask token de este modelo es [MASK].",correct:!0},{text:"This man has been waiting for you.",explain:"Incorrecto. Este pipeline llena palabras ocultas, por lo que necesita un mask token en algún lugar."}]}}),J=new c({props:{title:"4. ¿Por qué fallará este código?",local:"4-por-qué-fallará-este-código",headingTag:"h3"}}),C=new ze({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBY2xhc3NpZmllciUyMCUzRCUyMHBpcGVsaW5lKCUyMnplcm8tc2hvdC1jbGFzc2lmaWNhdGlvbiUyMiklMEFyZXN1bHQlMjAlM0QlMjBjbGFzc2lmaWVyKCUyMlRoaXMlMjBpcyUyMGElMjBjb3Vyc2UlMjBhYm91dCUyMHRoZSUyMFRyYW5zZm9ybWVycyUyMGxpYnJhcnklMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline
classifier = pipeline(<span class="hljs-string">&quot;zero-shot-classification&quot;</span>)
result = classifier(<span class="hljs-string">&quot;This is a course about the Transformers library&quot;</span>)`,wrap:!1}}),z=new d({props:{choices:[{text:"Este pipeline necesita que se le indiquen etiquetas para clasificar el texto.",explain:"Correcto — el código necesita incluir <code>candidate_labels=[...]</code>.",correct:!0},{text:"Este pipeline requiere varias oraciones, no sólo una.",explain:"Incorrecto, aunque cuando se usa adecuadamente, este pipeline puede tomar una lista de oraciones para procesar (como todos los otros pipelines)."},{text:"La librería 🤗 Transformers está dañada, como siempre.",explain:"¡No vamos a dignificar esta respuesta con un comentario!"},{text:"Este pipeline necesita entradas más largas; esta oración es muy corta.",explain:"Incorrecto. Un texto muy largo se va a truncar cuando se procesa por este pipeline."}]}}),B=new c({props:{title:"5. ¿Qué significa “transferencia de aprendizaje”?",local:"5-qué-significa-transferencia-de-aprendizaje",headingTag:"h3"}}),I=new d({props:{choices:[{text:"Transferir el conocimiento de un modelo preentrenado a un nuevo modelo, al entrenarlo en el mismo conjunto de datos.",explain:"No, eso sería dos versiones del mismo modelo."},{text:"Transferir el conocimiento de un modelo preentrenado a un nuevo modelo al inicializar un segundo modelo con los pesos del primero.",explain:"Correcto: cuando el segundo modelo se entrena para una tarea nueva, éste *transfiere* el conocimiento del primero.",correct:!0},{text:"Transferir el conocimiento de un modelo preentrenado al construir el segundo modelo con la misma arquitectura del primero.",explain:"La arquitectura sólo es la forma en que el modelo se construye; en este caso no hay conocimiento compartido o transferido."}]}}),E=new c({props:{title:"6. ¿Verdadero o falso? Un modelo de lenguaje usualmente no necesita etiquetas para su preentrenamiento.",local:"6-verdadero-o-falso-un-modelo-de-lenguaje-usualmente-no-necesita-etiquetas-para-su-preentrenamiento",headingTag:"h3"}}),k=new d({props:{choices:[{text:"Verdadero",explain:"El preentrenamiento suele ser <em>auto-supervisado</em>, lo que significa que las etiquetas se crean automáticamente a partir de la entrada (como predecir la siguiente palabra o llenar palabras ocultas).",correct:!0},{text:"Falso",explain:"Esta no es la respuesta correcta."}]}}),G=new c({props:{title:"7. Selecciona la oración que describe mejor los términos “modelo”, “arquitectura” y “pesos”.",local:"7-selecciona-la-oración-que-describe-mejor-los-términos-modelo-arquitectura-y-pesos",headingTag:"h3"}}),W=new d({props:{choices:[{text:"Si un modelo es un edificio, su arquitectura es el plano y los pesos son las personas que viven allí.",explain:"Siguiendo esta metáfora, los pesos serían los ladrillos y otros materiales usados para construir el edificio."},{text:"Una arquitectura es un mapa para construir un modelo y sus pesos son las ciudades representadas en el mapa.",explain:"El problema de esta metáfora es que un mapa suele representar una realidad existente (sólo hay una ciudad en Francia llamada Paris). Para una arquitectura dada son posibles múltiples pesos."},{text:"Una arquitectura es una sucesión de funciones matemáticas para construir un modelo y sus pesos son los parámetros de dichas funciones.",explain:"El mismo conjunto de funciones matemáticas (arquitectura) pueden usarse para construir diferentes modelos, usando diferentes parámetros (pesos).",correct:!0}]}}),Z=new c({props:{title:"8. ¿Cuál de los siguientes tipos de modelos usarías para completar una indicación con texto generado?",local:"8-cuál-de-los-siguientes-tipos-de-modelos-usarías-para-completar-una-indicación-con-texto-generado",headingTag:"h3"}}),V=new d({props:{choices:[{text:"Un modelo de codificadores",explain:"Un modelo de codificadores genera una representación de la oración completa que es más adecuada para tareas como clasificación."},{text:"Un modelo de decodificadores",explain:"Los modelos de decodificadores son perfectamente adecuados para la generación de texto de una indicación.",correct:!0},{text:"Un modelo secuencia a secuencia",explain:"Los modelos secuencia a secuencia son más adecuados para tareas en las que quieres generar oraciones en relación con las oraciones de entrada, no una indicación dada."}]}}),_=new c({props:{title:"9. ¿Cuál de los siguientes tipos de modelos usarías para resumir textos?",local:"9-cuál-de-los-siguientes-tipos-de-modelos-usarías-para-resumir-textos",headingTag:"h3"}}),Q=new d({props:{choices:[{text:"Un modelo de codificadores",explain:"Un modelo de codificadores genera una representación de la oración completa que es más adecuada para tareas como clasificación."},{text:"Un modelo de decodificadores",explain:"Los modelos de decodificadores son buenos para generar salidas de texto (como resúmenes), pero no tienen la habilidad de explotar un contexto como el texto completo para resumir."},{text:"Un modelo secuencia a secuencia",explain:"Los modelos secuencia a secuencia son perfectamente adecuados para una tarea de resumen.",correct:!0}]}}),S=new c({props:{title:"10. ¿Cuál de los siguientes tipos de modelos usarías para clasificar texto de acuerdo con ciertas etiquetas?",local:"10-cuál-de-los-siguientes-tipos-de-modelos-usarías-para-clasificar-texto-de-acuerdo-con-ciertas-etiquetas",headingTag:"h3"}}),F=new d({props:{choices:[{text:"Un modelo de codificadores",explain:"Un modelo de codificadores genera una representación de la oración completa que es perfectamente adecuado para una tarea como clasificación.",correct:!0},{text:"Un modelo de decodificadores",explain:"Los modelos de decodificadores son buenos para generar textos de salida, no extraer una etiqueta de una oración."},{text:"Un modelo secuencia a secuencia",explain:"Los modelos secuencia a secuencia son más adecuados para tareas en las que quieres generar texto con base en una oración de entrada, no una etiqueta."}]}}),H=new c({props:{title:"11. ¿Cuál puede ser una posible fuente del sesgo observado en un modelo?",local:"11-cuál-puede-ser-una-posible-fuente-del-sesgo-observado-en-un-modelo",headingTag:"h3"}}),L=new d({props:{choices:[{text:"El modelo es una versión ajustada de un modelo preentrenado y tomó el sesgo a partir de allí.",explain:"Cuando se aplica la Transferencia de Aprendizaje, el sesgo en el modelo preentrenado se manifiesta en el modelo ajustado.",correct:!0},{text:"Los datos con los que se entrenó el modelo están sesgados.",explain:"Esta es la fuente más obvia de sesgo, pero no la única.",correct:!0},{text:"La métrica que el modelo estaba optimizando está sesgada.",explain:"Una fuente menos obvia de sesgo es la forma en que fue entrenado el modelo. El modelo va a optimizar ciegamente cualquier métrica que escojas, sin pensarlo dos veces.",correct:!0}]}}),R=new Re({props:{source:"https://github.com/huggingface/course/blob/main/chapters/es/chapter1/10.mdx"}}),{c(){f=Y("meta"),A=n(),P=Y("p"),X=n(),r($.$$.fragment),D=n(),r(g.$$.fragment),O=n(),r(x.$$.fragment),ee=n(),y=Y("p"),y.textContent=Ie,ae=n(),b=Y("p"),b.textContent=Ee,te=n(),r(q.$$.fragment),se=n(),r(w.$$.fragment),ne=n(),r(v.$$.fragment),oe=n(),r(T.$$.fragment),re=n(),r(j.$$.fragment),ie=n(),r(U.$$.fragment),le=n(),r(h.$$.fragment),ue=n(),r(M.$$.fragment),me=n(),r(J.$$.fragment),pe=n(),r(C.$$.fragment),ce=n(),r(z.$$.fragment),de=n(),r(B.$$.fragment),fe=n(),r(I.$$.fragment),$e=n(),r(E.$$.fragment),ge=n(),r(k.$$.fragment),xe=n(),r(G.$$.fragment),ye=n(),r(W.$$.fragment),be=n(),r(Z.$$.fragment),qe=n(),r(V.$$.fragment),we=n(),r(_.$$.fragment),ve=n(),r(Q.$$.fragment),Te=n(),r(S.$$.fragment),je=n(),r(F.$$.fragment),Ue=n(),r(H.$$.fragment),he=n(),r(L.$$.fragment),Me=n(),r(R.$$.fragment),Je=n(),N=Y("p"),this.h()},l(e){const a=Fe("svelte-u9bgzb",document.head);f=K(a,"META",{name:!0,content:!0}),a.forEach(t),A=o(e),P=K(e,"P",{}),ke(P).forEach(t),X=o(e),i($.$$.fragment,e),D=o(e),i(g.$$.fragment,e),O=o(e),i(x.$$.fragment,e),ee=o(e),y=K(e,"P",{"data-svelte-h":!0}),Ge(y)!=="svelte-adz853"&&(y.textContent=Ie),ae=o(e),b=K(e,"P",{"data-svelte-h":!0}),Ge(b)!=="svelte-1sy8mit"&&(b.textContent=Ee),te=o(e),i(q.$$.fragment,e),se=o(e),i(w.$$.fragment,e),ne=o(e),i(v.$$.fragment,e),oe=o(e),i(T.$$.fragment,e),re=o(e),i(j.$$.fragment,e),ie=o(e),i(U.$$.fragment,e),le=o(e),i(h.$$.fragment,e),ue=o(e),i(M.$$.fragment,e),me=o(e),i(J.$$.fragment,e),pe=o(e),i(C.$$.fragment,e),ce=o(e),i(z.$$.fragment,e),de=o(e),i(B.$$.fragment,e),fe=o(e),i(I.$$.fragment,e),$e=o(e),i(E.$$.fragment,e),ge=o(e),i(k.$$.fragment,e),xe=o(e),i(G.$$.fragment,e),ye=o(e),i(W.$$.fragment,e),be=o(e),i(Z.$$.fragment,e),qe=o(e),i(V.$$.fragment,e),we=o(e),i(_.$$.fragment,e),ve=o(e),i(Q.$$.fragment,e),Te=o(e),i(S.$$.fragment,e),je=o(e),i(F.$$.fragment,e),Ue=o(e),i(H.$$.fragment,e),he=o(e),i(L.$$.fragment,e),Me=o(e),i(R.$$.fragment,e),Je=o(e),N=K(e,"P",{}),ke(N).forEach(t),this.h()},h(){We(f,"name","hf:doc:metadata"),We(f,"content",Ye)},m(e,a){He(document.head,f),s(e,A,a),s(e,P,a),s(e,X,a),l($,e,a),s(e,D,a),l(g,e,a),s(e,O,a),l(x,e,a),s(e,ee,a),s(e,y,a),s(e,ae,a),s(e,b,a),s(e,te,a),l(q,e,a),s(e,se,a),l(w,e,a),s(e,ne,a),l(v,e,a),s(e,oe,a),l(T,e,a),s(e,re,a),l(j,e,a),s(e,ie,a),l(U,e,a),s(e,le,a),l(h,e,a),s(e,ue,a),l(M,e,a),s(e,me,a),l(J,e,a),s(e,pe,a),l(C,e,a),s(e,ce,a),l(z,e,a),s(e,de,a),l(B,e,a),s(e,fe,a),l(I,e,a),s(e,$e,a),l(E,e,a),s(e,ge,a),l(k,e,a),s(e,xe,a),l(G,e,a),s(e,ye,a),l(W,e,a),s(e,be,a),l(Z,e,a),s(e,qe,a),l(V,e,a),s(e,we,a),l(_,e,a),s(e,ve,a),l(Q,e,a),s(e,Te,a),l(S,e,a),s(e,je,a),l(F,e,a),s(e,Ue,a),l(H,e,a),s(e,he,a),l(L,e,a),s(e,Me,a),l(R,e,a),s(e,Je,a),s(e,N,a),Ce=!0},p:Ve,i(e){Ce||(u($.$$.fragment,e),u(g.$$.fragment,e),u(x.$$.fragment,e),u(q.$$.fragment,e),u(w.$$.fragment,e),u(v.$$.fragment,e),u(T.$$.fragment,e),u(j.$$.fragment,e),u(U.$$.fragment,e),u(h.$$.fragment,e),u(M.$$.fragment,e),u(J.$$.fragment,e),u(C.$$.fragment,e),u(z.$$.fragment,e),u(B.$$.fragment,e),u(I.$$.fragment,e),u(E.$$.fragment,e),u(k.$$.fragment,e),u(G.$$.fragment,e),u(W.$$.fragment,e),u(Z.$$.fragment,e),u(V.$$.fragment,e),u(_.$$.fragment,e),u(Q.$$.fragment,e),u(S.$$.fragment,e),u(F.$$.fragment,e),u(H.$$.fragment,e),u(L.$$.fragment,e),u(R.$$.fragment,e),Ce=!0)},o(e){m($.$$.fragment,e),m(g.$$.fragment,e),m(x.$$.fragment,e),m(q.$$.fragment,e),m(w.$$.fragment,e),m(v.$$.fragment,e),m(T.$$.fragment,e),m(j.$$.fragment,e),m(U.$$.fragment,e),m(h.$$.fragment,e),m(M.$$.fragment,e),m(J.$$.fragment,e),m(C.$$.fragment,e),m(z.$$.fragment,e),m(B.$$.fragment,e),m(I.$$.fragment,e),m(E.$$.fragment,e),m(k.$$.fragment,e),m(G.$$.fragment,e),m(W.$$.fragment,e),m(Z.$$.fragment,e),m(V.$$.fragment,e),m(_.$$.fragment,e),m(Q.$$.fragment,e),m(S.$$.fragment,e),m(F.$$.fragment,e),m(H.$$.fragment,e),m(L.$$.fragment,e),m(R.$$.fragment,e),Ce=!1},d(e){e&&(t(A),t(P),t(X),t(D),t(O),t(ee),t(y),t(ae),t(b),t(te),t(se),t(ne),t(oe),t(re),t(ie),t(le),t(ue),t(me),t(pe),t(ce),t(de),t(fe),t($e),t(ge),t(xe),t(ye),t(be),t(qe),t(we),t(ve),t(Te),t(je),t(Ue),t(he),t(Me),t(Je),t(N)),t(f),p($,e),p(g,e),p(x,e),p(q,e),p(w,e),p(v,e),p(T,e),p(j,e),p(U,e),p(h,e),p(M,e),p(J,e),p(C,e),p(z,e),p(B,e),p(I,e),p(E,e),p(k,e),p(G,e),p(W,e),p(Z,e),p(V,e),p(_,e),p(Q,e),p(S,e),p(F,e),p(H,e),p(L,e),p(R,e)}}}const Ye='{"title":"Quiz de final de capítulo","local":"quiz-de-final-de-capítulo","sections":[{"title":"1. Explora el Hub y busca el punto de control roberta-large-mnli . ¿Qué tarea desarrolla?","local":"1-explora-el-hub-y-busca-el-punto-de-control-roberta-large-mnli--qué-tarea-desarrolla","sections":[],"depth":3},{"title":"2. ¿Qué devuelve el siguiente código?","local":"2-qué-devuelve-el-siguiente-código","sections":[],"depth":3},{"title":"3. ¿Qué debería reemplazar … en este ejemplo de código?","local":"3-qué-debería-reemplazar--en-este-ejemplo-de-código","sections":[],"depth":3},{"title":"4. ¿Por qué fallará este código?","local":"4-por-qué-fallará-este-código","sections":[],"depth":3},{"title":"5. ¿Qué significa “transferencia de aprendizaje”?","local":"5-qué-significa-transferencia-de-aprendizaje","sections":[],"depth":3},{"title":"6. ¿Verdadero o falso? Un modelo de lenguaje usualmente no necesita etiquetas para su preentrenamiento.","local":"6-verdadero-o-falso-un-modelo-de-lenguaje-usualmente-no-necesita-etiquetas-para-su-preentrenamiento","sections":[],"depth":3},{"title":"7. Selecciona la oración que describe mejor los términos “modelo”, “arquitectura” y “pesos”.","local":"7-selecciona-la-oración-que-describe-mejor-los-términos-modelo-arquitectura-y-pesos","sections":[],"depth":3},{"title":"8. ¿Cuál de los siguientes tipos de modelos usarías para completar una indicación con texto generado?","local":"8-cuál-de-los-siguientes-tipos-de-modelos-usarías-para-completar-una-indicación-con-texto-generado","sections":[],"depth":3},{"title":"9. ¿Cuál de los siguientes tipos de modelos usarías para resumir textos?","local":"9-cuál-de-los-siguientes-tipos-de-modelos-usarías-para-resumir-textos","sections":[],"depth":3},{"title":"10. ¿Cuál de los siguientes tipos de modelos usarías para clasificar texto de acuerdo con ciertas etiquetas?","local":"10-cuál-de-los-siguientes-tipos-de-modelos-usarías-para-clasificar-texto-de-acuerdo-con-ciertas-etiquetas","sections":[],"depth":3},{"title":"11. ¿Cuál puede ser una posible fuente del sesgo observado en un modelo?","local":"11-cuál-puede-ser-una-posible-fuente-del-sesgo-observado-en-un-modelo","sections":[],"depth":3}],"depth":1}';function Ke(Be){return _e(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class sa extends Qe{constructor(f){super(),Se(this,f,Ke,Ne,Ze,{})}}export{sa as component};

Xet Storage Details

Size:
19.1 kB
·
Xet hash:
0edcd7d8d4fab535cf7d1731a034ee1744926a16aa80bd94b3abd5a57cf3a21e

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.