import{s as Tn,o as hn,n as Zl}from"../chunks/scheduler.37c15a92.js";import{S as fn,i as Un,g as w,s as r,r as u,m as oe,H as dn,A as jn,h as T,f as a,c as i,j as gl,u as d,x as f,n as re,E as Mn,k as Al,y as g,a as n,v as M,t as m,b as k,d as p,w as J,p as B}from"../chunks/index.2bf4358c.js";import{T as kl}from"../chunks/Tip.363c041f.js";import{Y as Jn}from"../chunks/Youtube.1e50a667.js";import{C as h}from"../chunks/CodeBlock.4e987730.js";import{C as yn}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as In}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Bl}from"../chunks/Heading.8ada512a.js";import{E as _n}from"../chunks/getInferenceSnippets.54ddb825.js";function gn(y){let s,o;return s=new yn({props:{chapter:6,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_tf.ipynb"}]}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function kn(y){let s,o;return s=new yn({props:{chapter:6,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_pt.ipynb"}]}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Bn(y){let s,o;return s=new Jn({props:{id:"b3u8RzBCX9Y"}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Zn(y){let s,o;return s=new Jn({props:{id:"_wxyB3j3mk4"}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function vn(y){let s,o;return s=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbEZvclF1ZXN0aW9uQW5zd2VyaW5nJTBBJTBBbW9kZWxfY2hlY2twb2ludCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQtYmFzZS1jYXNlZC1kaXN0aWxsZWQtc3F1YWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChtb2RlbF9jaGVja3BvaW50KSUwQW1vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCklMEElMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIocXVlc3Rpb24lMkMlMjBjb250ZXh0JTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJ0ZiUyMiklMEFvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKippbnB1dHMp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForQuestionAnswering

model_checkpoint = <span class="hljs-string">&quot;distilbert-base-cased-distilled-squad&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
model = TFAutoModelForQuestionAnswering.from_pretrained(model_checkpoint)

inputs = tokenizer(question, context, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>)
outputs = model(**inputs)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function $n(y){let s,o;return s=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZyUwQSUwQW1vZGVsX2NoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtY2FzZWQtZGlzdGlsbGVkLXNxdWFkJTIyJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCklMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclF1ZXN0aW9uQW5zd2VyaW5nLmZyb21fcHJldHJhaW5lZChtb2RlbF9jaGVja3BvaW50KSUwQSUwQWlucHV0cyUyMCUzRCUyMHRva2VuaXplcihxdWVzdGlvbiUyQyUyMGNvbnRleHQlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKSUwQW91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmlucHV0cyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModelForQuestionAnswering

model_checkpoint = <span class="hljs-string">&quot;distilbert-base-cased-distilled-squad&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
model = AutoModelForQuestionAnswering.from_pretrained(model_checkpoint)

inputs = tokenizer(question, context, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
outputs = model(**inputs)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function xn(y){let s,o;return s=new h({props:{code:"KDElMkMlMjA2NiklMjAoMSUyQyUyMDY2KQ==",highlighted:'(<span class="hljs-number">1</span>, <span class="hljs-number">66</span>) (<span class="hljs-number">1</span>, <span class="hljs-number">66</span>)',wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Gn(y){let s,o;return s=new h({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNjYlNUQpJTIwdG9yY2guU2l6ZSglNUIxJTJDJTIwNjYlNUQp",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">66</span>]) torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">66</span>])',wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Cn(y){let s,o;return s=new h({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKCklMEElMjMlMjBNYXNrJTIwZXZlcnl0aGluZyUyMGFwYXJ0JTIwZnJvbSUyMHRoZSUyMHRva2VucyUyMG9mJTIwdGhlJTIwY29udGV4dCUwQW1hc2slMjAlM0QlMjAlNUJpJTIwISUzRCUyMDElMjBmb3IlMjBpJTIwaW4lMjBzZXF1ZW5jZV9pZHMlNUQlMEElMjMlMjBVbm1hc2slMjB0aGUlMjAlNUJDTFMlNUQlMjB0b2tlbiUwQW1hc2slNUIwJTVEJTIwJTNEJTIwRmFsc2UlMEFtYXNrJTIwJTNEJTIwdGYuY29uc3RhbnQobWFzayklNUJOb25lJTVEJTBBJTBBc3RhcnRfbG9naXRzJTIwJTNEJTIwdGYud2hlcmUobWFzayUyQyUyMC0xMDAwMCUyQyUyMHN0YXJ0X2xvZ2l0cyklMEFlbmRfbG9naXRzJTIwJTNEJTIwdGYud2hlcmUobWFzayUyQyUyMC0xMDAwMCUyQyUyMGVuZF9sb2dpdHMp",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Mask everything apart from the tokens of the context</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Unmask the [CLS] token</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
mask = tf.constant(mask)[<span class="hljs-literal">None</span>]

start_logits = tf.where(mask, -<span class="hljs-number">10000</span>, start_logits)
end_logits = tf.where(mask, -<span class="hljs-number">10000</span>, end_logits)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Wn(y){let s,o;return s=new h({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKCklMEElMjMlMjBNYXNrJTIwZXZlcnl0aGluZyUyMGFwYXJ0JTIwZnJvbSUyMHRoZSUyMHRva2VucyUyMG9mJTIwdGhlJTIwY29udGV4dCUwQW1hc2slMjAlM0QlMjAlNUJpJTIwISUzRCUyMDElMjBmb3IlMjBpJTIwaW4lMjBzZXF1ZW5jZV9pZHMlNUQlMEElMjMlMjBVbm1hc2slMjB0aGUlMjAlNUJDTFMlNUQlMjB0b2tlbiUwQW1hc2slNUIwJTVEJTIwJTNEJTIwRmFsc2UlMEFtYXNrJTIwJTNEJTIwdG9yY2gudGVuc29yKG1hc2spJTVCTm9uZSU1RCUwQSUwQXN0YXJ0X2xvZ2l0cyU1Qm1hc2slNUQlMjAlM0QlMjAtMTAwMDAlMEFlbmRfbG9naXRzJTVCbWFzayU1RCUyMCUzRCUyMC0xMDAwMA==",highlighted:`<span class="hljs-keyword">import</span> torch

sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Mask everything apart from the tokens of the context</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Unmask the [CLS] token</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
mask = torch.tensor(mask)[<span class="hljs-literal">None</span>]

start_logits[mask] = -<span class="hljs-number">10000</span>
end_logits[mask] = -<span class="hljs-number">10000</span>`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Rn(y){let s,o;return s=new h({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBheGlzJTNELTEpJTVCMCU1RC5udW1weSgpJTBBZW5kX3Byb2JhYmlsaXRpZXMlMjAlM0QlMjB0Zi5tYXRoLnNvZnRtYXgoZW5kX2xvZ2l0cyUyQyUyMGF4aXMlM0QtMSklNUIwJTVELm51bXB5KCk=",highlighted:`start_probabilities = tf.math.softmax(start_logits, axis=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>].numpy()
end_probabilities = tf.math.softmax(end_logits, axis=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>].numpy()`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Nn(y){let s,o;return s=new h({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBkaW0lM0QtMSklNUIwJTVEJTBBZW5kX3Byb2JhYmlsaXRpZXMlMjAlM0QlMjB0b3JjaC5ubi5mdW5jdGlvbmFsLnNvZnRtYXgoZW5kX2xvZ2l0cyUyQyUyMGRpbSUzRC0xKSU1QjAlNUQ=",highlighted:`start_probabilities = torch.nn.functional.softmax(start_logits, dim=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>]
end_probabilities = torch.nn.functional.softmax(end_logits, dim=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>]`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Vn(y){let s,o="Luego enmascararemos los valores donde <code>start_index &gt; end_index</code> reemplazándolos como 0 (las otras probabilidades son todos números positivos). La función <code>np.triu()</code> retorna la parte triangular superior de el tensor 2D pasado como argumento, por lo que hará el enmascaramiento por nosotros.",t,c,b;return c=new h({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBc2NvcmVzJTIwJTNEJTIwbnAudHJpdShzY29yZXMp",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

scores = np.triu(scores)`,wrap:!1}}),{c(){s=w("p"),s.innerHTML=o,t=r(),u(c.$$.fragment)},l(U){s=T(U,"P",{"data-svelte-h":!0}),f(s)!=="svelte-vaptd2"&&(s.innerHTML=o),t=i(U),d(c.$$.fragment,U)},m(U,j){n(U,s,j),n(U,t,j),M(c,U,j),b=!0},i(U){b||(p(c.$$.fragment,U),b=!0)},o(U){m(c.$$.fragment,U),b=!1},d(U){U&&(a(s),a(t)),J(c,U)}}}function Xn(y){let s,o="Luego enmascararemos los valores donde <code>start_index &gt; end_index</code> reemplazándolos como 0 (las otras probabilidades son todos números positivos). La función <code>torch.triu()</code> retorna la parte triangular superior de el tensor 2D pasado como argumento, por lo que hará el enmascaramiento por nosotros.",t,c,b;return c=new h({props:{code:"c2NvcmVzJTIwJTNEJTIwdG9yY2gudHJpdShzY29yZXMp",highlighted:"scores = torch.triu(scores)",wrap:!1}}),{c(){s=w("p"),s.innerHTML=o,t=r(),u(c.$$.fragment)},l(U){s=T(U,"P",{"data-svelte-h":!0}),f(s)!=="svelte-1ofnl64"&&(s.innerHTML=o),t=i(U),d(c.$$.fragment,U)},m(U,j){n(U,s,j),n(U,t,j),M(c,U,j),b=!0},i(U){b||(p(c.$$.fragment,U),b=!0)},o(U){m(c.$$.fragment,U),b=!1},d(U){U&&(a(s),a(t)),J(c,U)}}}function zn(y){let s,o="✏️ <strong>Inténtalo!</strong> Calcula los índices de inicio y término para las cinco respuestas más probables.";return{c(){s=w("p"),s.innerHTML=o},l(t){s=T(t,"P",{"data-svelte-h":!0}),f(s)!=="svelte-t0m42b"&&(s.innerHTML=o)},m(t,c){n(t,s,c)},p:Zl,d(t){t&&a(s)}}}function Hn(y){let s,o="✏️ <strong>Inténtalo!</strong> Usaremos los mejores puntajes calculados anteriormente para mostrar las cinco respuestas más probables. Para revisar nuestros resultados regresa al primer pipeline y agrega <code>top_k=5</code> al llamarlo.";return{c(){s=w("p"),s.innerHTML=o},l(t){s=T(t,"P",{"data-svelte-h":!0}),f(s)!=="svelte-1dvbs01"&&(s.innerHTML=o)},m(t,c){n(t,s,c)},p:Zl,d(t){t&&a(s)}}}function Qn(y){let s,o,t,c;return s=new h({props:{code:"XyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIpJTBBb2Zmc2V0cyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb2Zmc2V0X21hcHBpbmclMjIpJTBBJTBBaW5wdXRzJTIwJTNEJTIwaW5wdXRzLmNvbnZlcnRfdG9fdGVuc29ycyglMjJ0ZiUyMiklMEFwcmludChpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQuc2hhcGUp",highlighted:`_ = inputs.pop(<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>)
offsets = inputs.pop(<span class="hljs-string">&quot;offset_mapping&quot;</span>)

inputs = inputs.convert_to_tensors(<span class="hljs-string">&quot;tf&quot;</span>)
<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>].shape)`,wrap:!1}}),t=new h({props:{code:"KDIlMkMlMjAzODQp",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">384</span>)',wrap:!1}}),{c(){u(s.$$.fragment),o=r(),u(t.$$.fragment)},l(b){d(s.$$.fragment,b),o=i(b),d(t.$$.fragment,b)},m(b,U){M(s,b,U),n(b,o,U),M(t,b,U),c=!0},i(b){c||(p(s.$$.fragment,b),p(t.$$.fragment,b),c=!0)},o(b){m(s.$$.fragment,b),m(t.$$.fragment,b),c=!1},d(b){b&&a(o),J(s,b),J(t,b)}}}function En(y){let s,o,t,c;return s=new h({props:{code:"XyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIpJTBBb2Zmc2V0cyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb2Zmc2V0X21hcHBpbmclMjIpJTBBJTBBaW5wdXRzJTIwJTNEJTIwaW5wdXRzLmNvbnZlcnRfdG9fdGVuc29ycyglMjJwdCUyMiklMEFwcmludChpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQuc2hhcGUp",highlighted:`_ = inputs.pop(<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>)
offsets = inputs.pop(<span class="hljs-string">&quot;offset_mapping&quot;</span>)

inputs = inputs.convert_to_tensors(<span class="hljs-string">&quot;pt&quot;</span>)
<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>].shape)`,wrap:!1}}),t=new h({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMzg0JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>])',wrap:!1}}),{c(){u(s.$$.fragment),o=r(),u(t.$$.fragment)},l(b){d(s.$$.fragment,b),o=i(b),d(t.$$.fragment,b)},m(b,U){M(s,b,U),n(b,o,U),M(t,b,U),c=!0},i(b){c||(p(s.$$.fragment,b),p(t.$$.fragment,b),c=!0)},o(b){m(s.$$.fragment,b),m(t.$$.fragment,b),c=!1},d(b){b&&a(o),J(s,b),J(t,b)}}}function Yn(y){let s,o;return s=new h({props:{code:"KDIlMkMlMjAzODQpJTIwKDIlMkMlMjAzODQp",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">384</span>) (<span class="hljs-number">2</span>, <span class="hljs-number">384</span>)',wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Fn(y){let s,o;return s=new h({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMzg0JTVEKSUyMHRvcmNoLlNpemUoJTVCMiUyQyUyMDM4NCU1RCk=",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>]) torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>])',wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function qn(y){let s,o;return s=new h({props:{code:"c2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcygpJTBBJTIzJTIwTWFzayUyMGV2ZXJ5dGhpbmclMjBhcGFydCUyMGZyb20lMjB0aGUlMjB0b2tlbnMlMjBvZiUyMHRoZSUyMGNvbnRleHQlMEFtYXNrJTIwJTNEJTIwJTVCaSUyMCElM0QlMjAxJTIwZm9yJTIwaSUyMGluJTIwc2VxdWVuY2VfaWRzJTVEJTBBJTIzJTIwVW5tYXNrJTIwdGhlJTIwJTVCQ0xTJTVEJTIwdG9rZW4lMEFtYXNrJTVCMCU1RCUyMCUzRCUyMEZhbHNlJTBBJTIzJTIwTWFzayUyMGFsbCUyMHRoZSUyMCU1QlBBRCU1RCUyMHRva2VucyUwQW1hc2slMjAlM0QlMjB0Zi5tYXRoLmxvZ2ljYWxfb3IodGYuY29uc3RhbnQobWFzayklNUJOb25lJTVEJTJDJTIwaW5wdXRzJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlNUQlMjAlM0QlM0QlMjAwKSUwQSUwQXN0YXJ0X2xvZ2l0cyUyMCUzRCUyMHRmLndoZXJlKG1hc2slMkMlMjAtMTAwMDAlMkMlMjBzdGFydF9sb2dpdHMpJTBBZW5kX2xvZ2l0cyUyMCUzRCUyMHRmLndoZXJlKG1hc2slMkMlMjAtMTAwMDAlMkMlMjBlbmRfbG9naXRzKQ==",highlighted:`sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Mask everything apart from the tokens of the context</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Unmask the [CLS] token</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
<span class="hljs-comment"># Mask all the [PAD] tokens</span>
mask = tf.math.logical_or(tf.constant(mask)[<span class="hljs-literal">None</span>], inputs[<span class="hljs-string">&quot;attention_mask&quot;</span>] == <span class="hljs-number">0</span>)

start_logits = tf.where(mask, -<span class="hljs-number">10000</span>, start_logits)
end_logits = tf.where(mask, -<span class="hljs-number">10000</span>, end_logits)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Sn(y){let s,o;return s=new h({props:{code:"c2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcygpJTBBJTIzJTIwTWFzayUyMGV2ZXJ5dGhpbmclMjBhcGFydCUyMGZyb20lMjB0aGUlMjB0b2tlbnMlMjBvZiUyMHRoZSUyMGNvbnRleHQlMEFtYXNrJTIwJTNEJTIwJTVCaSUyMCElM0QlMjAxJTIwZm9yJTIwaSUyMGluJTIwc2VxdWVuY2VfaWRzJTVEJTBBJTIzJTIwVW5tYXNrJTIwdGhlJTIwJTVCQ0xTJTVEJTIwdG9rZW4lMEFtYXNrJTVCMCU1RCUyMCUzRCUyMEZhbHNlJTBBJTIzJTIwTWFzayUyMGFsbCUyMHRoZSUyMCU1QlBBRCU1RCUyMHRva2VucyUwQW1hc2slMjAlM0QlMjB0b3JjaC5sb2dpY2FsX29yKHRvcmNoLnRlbnNvcihtYXNrKSU1Qk5vbmUlNUQlMkMlMjAoaW5wdXRzJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlNUQlMjAlM0QlM0QlMjAwKSklMEElMEFzdGFydF9sb2dpdHMlNUJtYXNrJTVEJTIwJTNEJTIwLTEwMDAwJTBBZW5kX2xvZ2l0cyU1Qm1hc2slNUQlMjAlM0QlMjAtMTAwMDA=",highlighted:`sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Mask everything apart from the tokens of the context</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Unmask the [CLS] token</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
<span class="hljs-comment"># Mask all the [PAD] tokens</span>
mask = torch.logical_or(torch.tensor(mask)[<span class="hljs-literal">None</span>], (inputs[<span class="hljs-string">&quot;attention_mask&quot;</span>] == <span class="hljs-number">0</span>))

start_logits[mask] = -<span class="hljs-number">10000</span>
end_logits[mask] = -<span class="hljs-number">10000</span>`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function An(y){let s,o;return s=new h({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBheGlzJTNELTEpLm51bXB5KCklMEFlbmRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChlbmRfbG9naXRzJTJDJTIwYXhpcyUzRC0xKS5udW1weSgp",highlighted:`start_probabilities = tf.math.softmax(start_logits, axis=-<span class="hljs-number">1</span>).numpy()
end_probabilities = tf.math.softmax(end_logits, axis=-<span class="hljs-number">1</span>).numpy()`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Ln(y){let s,o;return s=new h({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBkaW0lM0QtMSklMEFlbmRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChlbmRfbG9naXRzJTJDJTIwZGltJTNELTEp",highlighted:`start_probabilities = torch.nn.functional.softmax(start_logits, dim=-<span class="hljs-number">1</span>)
end_probabilities = torch.nn.functional.softmax(end_logits, dim=-<span class="hljs-number">1</span>)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Dn(y){let s,o;return s=new h({props:{code:"Y2FuZGlkYXRlcyUyMCUzRCUyMCU1QiU1RCUwQWZvciUyMHN0YXJ0X3Byb2JzJTJDJTIwZW5kX3Byb2JzJTIwaW4lMjB6aXAoc3RhcnRfcHJvYmFiaWxpdGllcyUyQyUyMGVuZF9wcm9iYWJpbGl0aWVzKSUzQSUwQSUyMCUyMCUyMCUyMHNjb3JlcyUyMCUzRCUyMHN0YXJ0X3Byb2JzJTVCJTNBJTJDJTIwTm9uZSU1RCUyMColMjBlbmRfcHJvYnMlNUJOb25lJTJDJTIwJTNBJTVEJTBBJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwbnAudHJpdShzY29yZXMpLmFyZ21heCgpLml0ZW0oKSUwQSUwQSUyMCUyMCUyMCUyMHN0YXJ0X2lkeCUyMCUzRCUyMGlkeCUyMCUyRiUyRiUyMHNjb3Jlcy5zaGFwZSU1QjElNUQlMEElMjAlMjAlMjAlMjBlbmRfaWR4JTIwJTNEJTIwaWR4JTIwJTI1JTIwc2NvcmVzLnNoYXBlJTVCMSU1RCUwQSUyMCUyMCUyMCUyMHNjb3JlJTIwJTNEJTIwc2NvcmVzJTVCc3RhcnRfaWR4JTJDJTIwZW5kX2lkeCU1RC5pdGVtKCklMEElMjAlMjAlMjAlMjBjYW5kaWRhdGVzLmFwcGVuZCgoc3RhcnRfaWR4JTJDJTIwZW5kX2lkeCUyQyUyMHNjb3JlKSklMEElMEFwcmludChjYW5kaWRhdGVzKQ==",highlighted:`candidates = []
<span class="hljs-keyword">for</span> start_probs, end_probs <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(start_probabilities, end_probabilities):
    scores = start_probs[:, <span class="hljs-literal">None</span>] * end_probs[<span class="hljs-literal">None</span>, :]
    idx = np.triu(scores).argmax().item()

    start_idx = idx // scores.shape[<span class="hljs-number">1</span>]
    end_idx = idx % scores.shape[<span class="hljs-number">1</span>]
    score = scores[start_idx, end_idx].item()
    candidates.append((start_idx, end_idx, score))

<span class="hljs-built_in">print</span>(candidates)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Pn(y){let s,o;return s=new h({props:{code:"Y2FuZGlkYXRlcyUyMCUzRCUyMCU1QiU1RCUwQWZvciUyMHN0YXJ0X3Byb2JzJTJDJTIwZW5kX3Byb2JzJTIwaW4lMjB6aXAoc3RhcnRfcHJvYmFiaWxpdGllcyUyQyUyMGVuZF9wcm9iYWJpbGl0aWVzKSUzQSUwQSUyMCUyMCUyMCUyMHNjb3JlcyUyMCUzRCUyMHN0YXJ0X3Byb2JzJTVCJTNBJTJDJTIwTm9uZSU1RCUyMColMjBlbmRfcHJvYnMlNUJOb25lJTJDJTIwJTNBJTVEJTBBJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwdG9yY2gudHJpdShzY29yZXMpLmFyZ21heCgpLml0ZW0oKSUwQSUwQSUyMCUyMCUyMCUyMHN0YXJ0X2lkeCUyMCUzRCUyMGlkeCUyMCUyRiUyRiUyMHNjb3Jlcy5zaGFwZSU1QjElNUQlMEElMjAlMjAlMjAlMjBlbmRfaWR4JTIwJTNEJTIwaWR4JTIwJTI1JTIwc2NvcmVzLnNoYXBlJTVCMSU1RCUwQSUyMCUyMCUyMCUyMHNjb3JlJTIwJTNEJTIwc2NvcmVzJTVCc3RhcnRfaWR4JTJDJTIwZW5kX2lkeCU1RC5pdGVtKCklMEElMjAlMjAlMjAlMjBjYW5kaWRhdGVzLmFwcGVuZCgoc3RhcnRfaWR4JTJDJTIwZW5kX2lkeCUyQyUyMHNjb3JlKSklMEElMEFwcmludChjYW5kaWRhdGVzKQ==",highlighted:`candidates = []
<span class="hljs-keyword">for</span> start_probs, end_probs <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(start_probabilities, end_probabilities):
    scores = start_probs[:, <span class="hljs-literal">None</span>] * end_probs[<span class="hljs-literal">None</span>, :]
    idx = torch.triu(scores).argmax().item()

    start_idx = idx // scores.shape[<span class="hljs-number">1</span>]
    end_idx = idx % scores.shape[<span class="hljs-number">1</span>]
    score = scores[start_idx, end_idx].item()
    candidates.append((start_idx, end_idx, score))

<span class="hljs-built_in">print</span>(candidates)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(t){d(s.$$.fragment,t)},m(t,c){M(s,t,c),o=!0},i(t){o||(p(s.$$.fragment,t),o=!0)},o(t){m(s.$$.fragment,t),o=!1},d(t){J(s,t)}}}function Kn(y){let s,o="✏️ <strong>Inténtalo!</strong> Adapta el código de arriba pra retornar los puntajes de las 5 respuestas más probables (en total, no por trozo).";return{c(){s=w("p"),s.innerHTML=o},l(t){s=T(t,"P",{"data-svelte-h":!0}),f(s)!=="svelte-36lym3"&&(s.innerHTML=o)},m(t,c){n(t,s,c)},p:Zl,d(t){t&&a(s)}}}function On(y){let s,o="✏️ <strong>Inténtalo!</strong> Usa los mejores puntajes que calculaste antes para mostrar las 5 respuestas más probables. Para revisar tus resultados, regresa al primer pipeline y agrega <code>top_k=5</code> al llamarlo.";return{c(){s=w("p"),s.innerHTML=o},l(t){s=T(t,"P",{"data-svelte-h":!0}),f(s)!=="svelte-1bsvao6"&&(s.innerHTML=o)},m(t,c){n(t,s,c)},p:Zl,d(t){t&&a(s)}}}function eo(y){let s,o,t,c,b,U,j,Ot,Z,v,Wt,ie,Ll="Ahora nos sumergiremos en el pipeline de <code>question-answering</code> (preguntas y respuestas) y veremos como hacer uso de los offsets para tomar la respuesta de la pregunta desde el contexto, un poco como lo que hicimos para las entidades agrupadas en la sección previa. Luego veremos como lidiar con contextos muy largos que terminan siendo truncados. Puedes saltar esta sección si no estás interesado en la tarea de pregunta y respuesta (<em>question answering</em>).",es,$,x,Rt,me,ts,pe,Dl='Como vimos en el <a href="/course/chapter1">Capítulo 1</a>, podemos usar el pipeline de <code>question-answering</code> para obtener la respuesta a una pregunta de la siguiente manera:',ss,ce,ls,ue,as,de,Pl="A diferencia de otros pipelines, los cuales no pueden truncar y dividir textos que son más largos que el largo máximo aceptado por el modelo (y por lo tanto perder información al final de un documento), este pipeline puede lidiar con contextos muy largos y retornará una respuesta a la pregunta incluso si está al final.",ns,Me,os,Je,rs,ye,Kl="¡Veamos cómo hace todo esto!",is,be,ms,we,Ol='Como para cualquier otro pipeline, empezamos tokenizando nuestro input y lo envíamos a través del modelo. El punto de control (<code>checkpoint</code>) usado por defecto para el pipeline de <code>question-answering</code> es <a href="https://huggingface.co/distilbert-base-cased-distilled-squad" rel="nofollow"><code>distilbert-base-cased-distilled-squad</code></a> (el “squad” en el nombre viene del conjunto de datos en el cual se le hizo fine-tune; hablaremos más acerca del conjunto de datos SQuAD en el <a href="/course/chapter7/7">Capítulo 7</a>)',ps,G,C,Nt,Te,ea="Notar que tokenizamos nuestra y el contexto como un par, con la pregunta primero.",cs,te,ta='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/question_tokens.svg" alt="An example of tokenization of question and context"/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/question_tokens-dark.svg" alt="An example of tokenization of question and context"/>',us,he,sa="Los modelos para question answering funcionan de manera un poco distinta de los modelos que hemos visto hasta ahora. Usando la imagen de arriba como ejemplo, el modelo ha sido entrenado para predecir el índice de los tokens al inicio de la respuesta (en este caso el 21) y el índice del token donde la respuesta termina (en este caso el 24). Esto porque estos modelos no retornar un tensor de logits sino dos: uno para los logits correspondientes al token de inicio de la respuesta, y uno para los logits correspondientes al token de término de la respuesta. Dado que en este caso tenemos un input conteniendo 66 tokens, obtenemos:",ds,fe,Ms,W,R,Vt,Ue,la="Para convertir estos logits en probabilidades, aplicaremos la función softmax — pero antes de eso, necesitamos asegurarnos que enmascaramos los índices que no son parte del contexto. Nuestro input es <code>[CLS] pregunta [SEP] contexto [SEP]</code>, por lo que necesitamos enmascarar los tokens de la pregunta como también el token <code>[SEP]</code>. Mantredemos el token <code>[CLS]</code>, ya que algunos modelos lo usan para indicar que la respuesta no está en el contexto.",Js,je,aa="Dado que aplicaremos una softmax después, sólo necesitamos reemplazar los logits que queremos enmascarar con un número negativo muy grande. En este caso, usamos el <code>-10000</code>:",ys,N,V,Xt,Ie,na="Ahora que tenemos enmascarados los logits de manera apropiada correspondientes a los tokens que no queremos predecir. Podemos aplicar la softmax:",bs,X,z,zt,_e,oa="En esta punto, podemos tomar el argmax de las probabilidades de inicio y fin — pero podríamos terminar con un índice de inicio que es mayot que índice de término, por lo que necesitamos tomar unas pocas precauciones más. Calcularemos la probabilidad de cada posible <code>start_index</code> and <code>end_index</code> (índice de inicio y final respectivamente) donde <code>start_index &lt;= end_index</code>, luego tomamos la tupla <code>(start_index, end_index)</code> con la probabilidad más alta.",ws,I,vl,Ht,ra="start_index",$l,Qt,ia="end_index",xl,Et,ma="start_index",Gl,Yt,pa="end_index",Cl,Ts,bn='<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo><mo>×</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">\\mathrm{start\\_probabilities}[\\mathrm{start\\_index}] \\times \\mathrm{end\\_probabilities}[\\mathrm{end\\_index}]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">start_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">start_index</span></span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">end_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">end_index</span></span><span class="mclose">]</span></span></span></span></span>',hs,O,Wl,fs,wn='<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo><mo>×</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">\\mathrm{start\\_probabilities}[\\mathrm{start\\_index}] \\times \\mathrm{end\\_probabilities}[\\mathrm{end\\_index}]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">start_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">start_index</span></span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">end_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">end_index</span></span><span class="mclose">]</span></span></span></span>',Us,Ft,ca="start_index <= end_index",Rl,js,ge,ua="Primero calculemos todos los posibles productos:",Is,ke,_s,H,Q,qt,Be,da="Ahora basta con obtener el índice el máximo. Dado que Pytorch retornará el índice en el tensor aplanado, necesitamos usar las operaciones división entera <code>//</code> y módulo <code>%</code> para obtener el <code>start_index</code> y el <code>end_index</code>:",gs,Ze,ks,ve,Ma="No estamos listos aún, pero al menos ya tenemos el puntaje correcto para la respuesta (puedes chequear esto comparándolo con el primer resultado en la sección previa):",Bs,$e,Zs,se,vs,xe,Ja="Tenemos el <code>start_index</code> y el <code>end_index</code> de la respuesta en términos de tokens, así que ahora sólo necesitamos convertirlos en los índices de caracteres en el contexto. Aquí es donde los offsets serán sumamente útiles. Podemos tomarlos y usarlos como lo hicimos en la tarea de clasificación de tokens:",$s,Ge,xs,Ce,ya="Ahora sólo tenemos que dar formato a todo para tener nuestros resultados:",Gs,We,Cs,Re,Ws,Ne,ba="Genial! Obtuvimos lo mismo que en nuestro primer ejemplo!",Rs,le,Ns,Ve,Vs,Xe,wa="Si tratamos de tokenizar la pregunta en un contexto largo que usamos en el ejemplo previamente, tendremos un número de tokens que es más alto que el largo máximo usado en el pipeline de <code>question-answering</code> (que es 384):",Xs,ze,zs,He,Hs,Qe,Ta="Entonces, necesitaremos truncar nuestras entradas/inputs al largo máximo. Hay varias maneras de hacer esto, pero no queremos truncar la pregunta, sólo el contexto. Dado que el contexto es la segunda oración, usaremos la estrategia de truncamiento <code>&quot;only_second&quot;</code>. El problema que aparece es que la respuesta a la pregunta podría no estar en el contexto truncado. En este caso, por ejemplo, elegimos una pregunta donde la respuesta está hacia el final del contexto, y cuando truncamos la respuesta no está presente:",Qs,Ee,Es,Ye,Ys,Fe,ha="Esto significa que el modelo le costará bastante elegir la respuesta correcta. Para corregir eso, el pipeline de <code>question-answering</code> permite separar el contexto en trozos pequeños, especificando el largo máximo. Para asegurarnos que no separemos el contexto exactamente en un lugar incorrecto donde podríamos encontrar la respuesta, también incluye algunos traslapes (overlaps) entre los trozos.",Fs,qe,fa="Podemos hacer que el tokenizador (rápido o lento) haga esto por nosotros agregando <code>return_overflowing_tokens=True</code>, y podemos especificar el traslape (overlap) que queremos con el argumento <code>stride</code>. Acá un ejemplo, usando una oración corta:",qs,Se,Ss,Ae,As,Le,Ua="Como podemos ver, la oración ha sido dividida en trozos de tal manera que cada entrada en <code>inputs[&quot;input_ids&quot;] tiene a lo más 6 tokens (tendríamos que agregar relleno (</code>padding`) en el último trozo para tener el mismo largo que los otros) y hay traslape (overlap) de 2 tokens entre cada uno de los trozos.",Ls,De,ja="Miremos de cerca el resultado de la tokenización:",Ds,Pe,Ps,Ke,Ks,Oe,Ia="Como se esperaba, obtenemos los IDs de entrada y una máscara de atención (attention mask). La última clave, <code>overflow_to_sample_mapping</code>, es un mapa que nos dice a qué oraciones corresponde cada resultado — en este caso tenemos 7 resultados, todos provenientes de la (única) oración que le pasamos al tokenizador:",Os,et,el,tt,tl,st,_a="Esto es más útil cuando tokenizamos varias oraciones juntas. Por ejemplo así:",sl,lt,ll,at,ga="obtenemos:",al,nt,nl,ot,ka="lo que significa que la primera oración está dividida en 7 trozos igual que antes, y los siguientes 4 trozos vienen de la segunda oración.",ol,rt,Ba="Ahora volvamos a nuestro contexto largo. Por defecto el pipeline de <code>question-answering</code> usa un largo máximo de 384, como mencionamos antes, y un stride de 128, lo que corresponde a la manera en la que al modelo se le hizo fine-tuning (puedes ajustar esos parámetros pasando los argumentos <code>max_seq_len</code> y <code>stride</code> al llamar el pipeline). Por lo tanto, usaremos esos parámetros al tokenizar. También agregaremos relleno (<code>padding</code>) (para tener muestras del mismo largo, para que podamos construir los tensores) como también pedir los offsets:",rl,it,il,mt,Za="Esos <code>inputs</code> contendrán los IDs de entrada y las máscaras de atención (attention masks) que el modelo espera, así como los offsets y el <code>overflow_to_sample_mapping</code> que hablamos antes. Dado que esos dos no son parámetros usados por el modelo, los sacaremos de los <code>inputs</code> (y no guardaremos el mapa, ya que no es útil acá) antes de convertirlo en un tensor:",ml,E,Y,St,pt,va="Nuestro contexto largo fue dividido en dos, lo que significa que después de pasar por nuestro modelo, tendremos 2 sets de logits de inicio y término:",pl,ct,cl,F,q,At,ut,$a="Al igual que antes, primero enmascaramos los tokens que no son parte del contexto antes de aplicar softmax. También enmascaramos todos los tokens de de relleno (<code>padding</code>) (de acuerdo a la máscara de atención (attention masks)):",ul,S,A,Lt,dt,xa="Luego podemos usar la función softmax para convertir nuestros logits en probabilidades:",dl,L,D,Dt,Mt,Ga="El siguiente paso es similar a lo que hicimos para el contexto pequeño, pero lo repetimos para cada uno de nuestros dos trozos. Le atribuímos un puntaje a todas las posibles respuestas, para luego tomar la respuesta con el mejor puntaje:",Ml,P,K,Pt,Jt,Jl,yt,Ca="Estos dos candidatos corresponden a las mejores respuestas que el modelo fue capaz de encontrar en cada trozo. El modelo está mucho más confiado de que la respuesta correcta está en la segunda parte (¡lo que es una buena señal!). Ahora sólo tenemos que mapear dichos tokens a los caracteres en el contexto (sólo necesitamos mapear la segunda para obtener nuestra respuesta, pero es interesante ver que el modelo ha elegido en el primer trozo).",yl,ae,bl,bt,Wa="Los <code>offsets</code> que tomamos antes es en realidad una lista de offsets, con una lista por trozo de texto:",wl,wt,Tl,Tt,hl,ht,Ra="Si ignoramos el primer resultado, obtenemos el mismo resultado que nuestro pipeline para el contexto largo — bien!",fl,ne,Ul,ft,Na="Esto concluye nuestra profundización en las capacidades de los tokenizadores. Pondremos todo esto en práctica de nuevo en el siguiente capítulo, cuando te mostremos cómo hacer fine-tuning a un modelo en una variedad de tareas comunes de PLN.",jl,Ut,Il,Kt,_l;b=new In({props:{fw:y[0]}}),j=new Bl({props:{title:"Tokenizadores Rápidos en un Pipeline de Question-Answering",local:"fast-tokenizers-in-the-qa-pipeline",headingTag:"h1"}});const Va=[kn,gn],jt=[];function Xa(e,l){return e[0]==="pt"?0:1}Z=Xa(y),v=jt[Z]=Va[Z](y);const za=[Zn,Bn],It=[];function Ha(e,l){return e[0]==="pt"?0:1}$=Ha(y),x=It[$]=za[$](y),me=new Bl({props:{title:"Usando el pipeline de question-answering",local:"using-the-question-answering-pipeline",headingTag:"h2"}}),ce=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBcXVlc3Rpb25fYW5zd2VyZXIlMjAlM0QlMjBwaXBlbGluZSglMjJxdWVzdGlvbi1hbnN3ZXJpbmclMjIpJTBBY29udGV4dCUyMCUzRCUyMCUyMiUyMiUyMiUwQSVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUyMGlzJTIwYmFja2VkJTIwYnklMjB0aGUlMjB0aHJlZSUyMG1vc3QlMjBwb3B1bGFyJTIwZGVlcCUyMGxlYXJuaW5nJTIwbGlicmFyaWVzJTIwJUUyJTgwJTk0JTIwSmF4JTJDJTIwUHlUb3JjaCUyQyUyMGFuZCUyMFRlbnNvckZsb3clMjAlRTIlODAlOTQlMjB3aXRoJTIwYSUyMHNlYW1sZXNzJTIwaW50ZWdyYXRpb24lMEFiZXR3ZWVuJTIwdGhlbS4lMjBJdCdzJTIwc3RyYWlnaHRmb3J3YXJkJTIwdG8lMjB0cmFpbiUyMHlvdXIlMjBtb2RlbHMlMjB3aXRoJTIwb25lJTIwYmVmb3JlJTIwbG9hZGluZyUyMHRoZW0lMjBmb3IlMjBpbmZlcmVuY2UlMjB3aXRoJTIwdGhlJTIwb3RoZXIuJTBBJTIyJTIyJTIyJTBBcXVlc3Rpb24lMjAlM0QlMjAlMjJXaGljaCUyMGRlZXAlMjBsZWFybmluZyUyMGxpYnJhcmllcyUyMGJhY2slMjAlRjAlOUYlQTQlOTclMjBUcmFuc2Zvcm1lcnMlM0YlMjIlMEFxdWVzdGlvbl9hbnN3ZXJlcihxdWVzdGlvbiUzRHF1ZXN0aW9uJTJDJTIwY29udGV4dCUzRGNvbnRleHQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

question_answerer = pipeline(<span class="hljs-string">&quot;question-answering&quot;</span>)
context = <span class="hljs-string">&quot;&quot;&quot;
🤗 Transformers is backed by the three most popular deep learning libraries — Jax, PyTorch, and TensorFlow — with a seamless integration
between them. It&#x27;s straightforward to train your models with one before loading them for inference with the other.
&quot;&quot;&quot;</span>
question = <span class="hljs-string">&quot;Which deep learning libraries back 🤗 Transformers?&quot;</span>
question_answerer(question=question, context=context)`,wrap:!1}}),ue=new h({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTc3NzMlMkMlMEElMjAnc3RhcnQnJTNBJTIwNzglMkMlMEElMjAnZW5kJyUzQSUyMDEwNSUyQyUwQSUyMCdhbnN3ZXInJTNBJTIwJ0pheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JyU3RA==",highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97773</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">78</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">105</span>,
 <span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>}`,wrap:!1}}),Me=new h({props:{code:"bG9uZ19jb250ZXh0JTIwJTNEJTIwJTIyJTIyJTIyJTBBJUYwJTlGJUE0JTk3JTIwVHJhbnNmb3JtZXJzJTNBJTIwU3RhdGUlMjBvZiUyMHRoZSUyMEFydCUyME5MUCUwQSUwQSVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUyMHByb3ZpZGVzJTIwdGhvdXNhbmRzJTIwb2YlMjBwcmV0cmFpbmVkJTIwbW9kZWxzJTIwdG8lMjBwZXJmb3JtJTIwdGFza3MlMjBvbiUyMHRleHRzJTIwc3VjaCUyMGFzJTIwY2xhc3NpZmljYXRpb24lMkMlMjBpbmZvcm1hdGlvbiUyMGV4dHJhY3Rpb24lMkMlMEFxdWVzdGlvbiUyMGFuc3dlcmluZyUyQyUyMHN1bW1hcml6YXRpb24lMkMlMjB0cmFuc2xhdGlvbiUyQyUyMHRleHQlMjBnZW5lcmF0aW9uJTIwYW5kJTIwbW9yZSUyMGluJTIwb3ZlciUyMDEwMCUyMGxhbmd1YWdlcy4lMEFJdHMlMjBhaW0lMjBpcyUyMHRvJTIwbWFrZSUyMGN1dHRpbmctZWRnZSUyME5MUCUyMGVhc2llciUyMHRvJTIwdXNlJTIwZm9yJTIwZXZlcnlvbmUuJTBBJTBBJUYwJTlGJUE0JTk3JTIwVHJhbnNmb3JtZXJzJTIwcHJvdmlkZXMlMjBBUElzJTIwdG8lMjBxdWlja2x5JTIwZG93bmxvYWQlMjBhbmQlMjB1c2UlMjB0aG9zZSUyMHByZXRyYWluZWQlMjBtb2RlbHMlMjBvbiUyMGElMjBnaXZlbiUyMHRleHQlMkMlMjBmaW5lLXR1bmUlMjB0aGVtJTIwb24lMjB5b3VyJTIwb3duJTIwZGF0YXNldHMlMjBhbmQlMEF0aGVuJTIwc2hhcmUlMjB0aGVtJTIwd2l0aCUyMHRoZSUyMGNvbW11bml0eSUyMG9uJTIwb3VyJTIwbW9kZWwlMjBodWIuJTIwQXQlMjB0aGUlMjBzYW1lJTIwdGltZSUyQyUyMGVhY2glMjBweXRob24lMjBtb2R1bGUlMjBkZWZpbmluZyUyMGFuJTIwYXJjaGl0ZWN0dXJlJTIwaXMlMjBmdWxseSUyMHN0YW5kYWxvbmUlMjBhbmQlMEFjYW4lMjBiZSUyMG1vZGlmaWVkJTIwdG8lMjBlbmFibGUlMjBxdWljayUyMHJlc2VhcmNoJTIwZXhwZXJpbWVudHMuJTBBJTBBV2h5JTIwc2hvdWxkJTIwSSUyMHVzZSUyMHRyYW5zZm9ybWVycyUzRiUwQSUwQTEuJTIwRWFzeS10by11c2UlMjBzdGF0ZS1vZi10aGUtYXJ0JTIwbW9kZWxzJTNBJTBBJTIwJTIwLSUyMEhpZ2glMjBwZXJmb3JtYW5jZSUyMG9uJTIwTkxVJTIwYW5kJTIwTkxHJTIwdGFza3MuJTBBJTIwJTIwLSUyMExvdyUyMGJhcnJpZXIlMjB0byUyMGVudHJ5JTIwZm9yJTIwZWR1Y2F0b3JzJTIwYW5kJTIwcHJhY3RpdGlvbmVycy4lMEElMjAlMjAtJTIwRmV3JTIwdXNlci1mYWNpbmclMjBhYnN0cmFjdGlvbnMlMjB3aXRoJTIwanVzdCUyMHRocmVlJTIwY2xhc3NlcyUyMHRvJTIwbGVhcm4uJTBBJTIwJTIwLSUyMEElMjB1bmlmaWVkJTIwQVBJJTIwZm9yJTIwdXNpbmclMjBhbGwlMjBvdXIlMjBwcmV0cmFpbmVkJTIwbW9kZWxzLiUwQSUyMCUyMC0lMjBMb3dlciUyMGNvbXB1dGUlMjBjb3N0cyUyQyUyMHNtYWxsZXIlMjBjYXJib24lMjBmb290cHJpbnQlM0ElMEElMEEyLiUyMFJlc2VhcmNoZXJzJTIwY2FuJTIwc2hhcmUlMjB0cmFpbmVkJTIwbW9kZWxzJTIwaW5zdGVhZCUyMG9mJTIwYWx3YXlzJTIwcmV0cmFpbmluZy4lMEElMjAlMjAtJTIwUHJhY3RpdGlvbmVycyUyMGNhbiUyMHJlZHVjZSUyMGNvbXB1dGUlMjB0aW1lJTIwYW5kJTIwcHJvZHVjdGlvbiUyMGNvc3RzLiUwQSUyMCUyMC0lMjBEb3plbnMlMjBvZiUyMGFyY2hpdGVjdHVyZXMlMjB3aXRoJTIwb3ZlciUyMDEwJTJDMDAwJTIwcHJldHJhaW5lZCUyMG1vZGVscyUyQyUyMHNvbWUlMjBpbiUyMG1vcmUlMjB0aGFuJTIwMTAwJTIwbGFuZ3VhZ2VzLiUwQSUwQTMuJTIwQ2hvb3NlJTIwdGhlJTIwcmlnaHQlMjBmcmFtZXdvcmslMjBmb3IlMjBldmVyeSUyMHBhcnQlMjBvZiUyMGElMjBtb2RlbCdzJTIwbGlmZXRpbWUlM0ElMEElMjAlMjAtJTIwVHJhaW4lMjBzdGF0ZS1vZi10aGUtYXJ0JTIwbW9kZWxzJTIwaW4lMjAzJTIwbGluZXMlMjBvZiUyMGNvZGUuJTBBJTIwJTIwLSUyME1vdmUlMjBhJTIwc2luZ2xlJTIwbW9kZWwlMjBiZXR3ZWVuJTIwVEYyLjAlMkZQeVRvcmNoJTIwZnJhbWV3b3JrcyUyMGF0JTIwd2lsbC4lMEElMjAlMjAtJTIwU2VhbWxlc3NseSUyMHBpY2slMjB0aGUlMjByaWdodCUyMGZyYW1ld29yayUyMGZvciUyMHRyYWluaW5nJTJDJTIwZXZhbHVhdGlvbiUyMGFuZCUyMHByb2R1Y3Rpb24uJTBBJTBBNC4lMjBFYXNpbHklMjBjdXN0b21pemUlMjBhJTIwbW9kZWwlMjBvciUyMGFuJTIwZXhhbXBsZSUyMHRvJTIweW91ciUyMG5lZWRzJTNBJTBBJTIwJTIwLSUyMFdlJTIwcHJvdmlkZSUyMGV4YW1wbGVzJTIwZm9yJTIwZWFjaCUyMGFyY2hpdGVjdHVyZSUyMHRvJTIwcmVwcm9kdWNlJTIwdGhlJTIwcmVzdWx0cyUyMHB1Ymxpc2hlZCUyMGJ5JTIwaXRzJTIwb3JpZ2luYWwlMjBhdXRob3JzLiUwQSUyMCUyMC0lMjBNb2RlbCUyMGludGVybmFscyUyMGFyZSUyMGV4cG9zZWQlMjBhcyUyMGNvbnNpc3RlbnRseSUyMGFzJTIwcG9zc2libGUuJTBBJTIwJTIwLSUyME1vZGVsJTIwZmlsZXMlMjBjYW4lMjBiZSUyMHVzZWQlMjBpbmRlcGVuZGVudGx5JTIwb2YlMjB0aGUlMjBsaWJyYXJ5JTIwZm9yJTIwcXVpY2slMjBleHBlcmltZW50cy4lMEElMEElRjAlOUYlQTQlOTclMjBUcmFuc2Zvcm1lcnMlMjBpcyUyMGJhY2tlZCUyMGJ5JTIwdGhlJTIwdGhyZWUlMjBtb3N0JTIwcG9wdWxhciUyMGRlZXAlMjBsZWFybmluZyUyMGxpYnJhcmllcyUyMCVFMiU4MCU5NCUyMEpheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JTIwJUUyJTgwJTk0JTIwd2l0aCUyMGElMjBzZWFtbGVzcyUyMGludGVncmF0aW9uJTBBYmV0d2VlbiUyMHRoZW0uJTIwSXQncyUyMHN0cmFpZ2h0Zm9yd2FyZCUyMHRvJTIwdHJhaW4lMjB5b3VyJTIwbW9kZWxzJTIwd2l0aCUyMG9uZSUyMGJlZm9yZSUyMGxvYWRpbmclMjB0aGVtJTIwZm9yJTIwaW5mZXJlbmNlJTIwd2l0aCUyMHRoZSUyMG90aGVyLiUwQSUyMiUyMiUyMiUwQXF1ZXN0aW9uX2Fuc3dlcmVyKHF1ZXN0aW9uJTNEcXVlc3Rpb24lMkMlMjBjb250ZXh0JTNEbG9uZ19jb250ZXh0KQ==",highlighted:`long_context = <span class="hljs-string">&quot;&quot;&quot;
🤗 Transformers: State of the Art NLP

🤗 Transformers provides thousands of pretrained models to perform tasks on texts such as classification, information extraction,
question answering, summarization, translation, text generation and more in over 100 languages.
Its aim is to make cutting-edge NLP easier to use for everyone.

🤗 Transformers provides APIs to quickly download and use those pretrained models on a given text, fine-tune them on your own datasets and
then share them with the community on our model hub. At the same time, each python module defining an architecture is fully standalone and
can be modified to enable quick research experiments.

Why should I use transformers?

1. Easy-to-use state-of-the-art models:
  - High performance on NLU and NLG tasks.
  - Low barrier to entry for educators and practitioners.
  - Few user-facing abstractions with just three classes to learn.
  - A unified API for using all our pretrained models.
  - Lower compute costs, smaller carbon footprint:

2. Researchers can share trained models instead of always retraining.
  - Practitioners can reduce compute time and production costs.
  - Dozens of architectures with over 10,000 pretrained models, some in more than 100 languages.

3. Choose the right framework for every part of a model&#x27;s lifetime:
  - Train state-of-the-art models in 3 lines of code.
  - Move a single model between TF2.0/PyTorch frameworks at will.
  - Seamlessly pick the right framework for training, evaluation and production.

4. Easily customize a model or an example to your needs:
  - We provide examples for each architecture to reproduce the results published by its original authors.
  - Model internals are exposed as consistently as possible.
  - Model files can be used independently of the library for quick experiments.

🤗 Transformers is backed by the three most popular deep learning libraries — Jax, PyTorch and TensorFlow — with a seamless integration
between them. It&#x27;s straightforward to train your models with one before loading them for inference with the other.
&quot;&quot;&quot;</span>
question_answerer(question=question, context=long_context)`,wrap:!1}}),Je=new h({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTcxNDklMkMlMEElMjAnc3RhcnQnJTNBJTIwMTg5MiUyQyUwQSUyMCdlbmQnJTNBJTIwMTkxOSUyQyUwQSUyMCdhbnN3ZXInJTNBJTIwJ0pheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JyU3RA==",highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97149</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">1892</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">1919</span>,
 <span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>}`,wrap:!1}}),be=new Bl({props:{title:"Usando un modelo para question answering",local:"using-a-model-for-question-answering",headingTag:"h2"}});const Qa=[$n,vn],_t=[];function Ea(e,l){return e[0]==="pt"?0:1}G=Ea(y),C=_t[G]=Qa[G](y),fe=new h({props:{code:"c3RhcnRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5zdGFydF9sb2dpdHMlMEFlbmRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5lbmRfbG9naXRzJTBBcHJpbnQoc3RhcnRfbG9naXRzLnNoYXBlJTJDJTIwZW5kX2xvZ2l0cy5zaGFwZSk=",highlighted:`start_logits = outputs.start_logits
end_logits = outputs.end_logits
<span class="hljs-built_in">print</span>(start_logits.shape, end_logits.shape)`,wrap:!1}});const Ya=[Gn,xn],gt=[];function Fa(e,l){return e[0]==="pt"?0:1}W=Fa(y),R=gt[W]=Ya[W](y);const qa=[Wn,Cn],kt=[];function Sa(e,l){return e[0]==="pt"?0:1}N=Sa(y),V=kt[N]=qa[N](y);const Aa=[Nn,Rn],Bt=[];function La(e,l){return e[0]==="pt"?0:1}X=La(y),z=Bt[X]=Aa[X](y),ke=new h({props:{code:"c2NvcmVzJTIwJTNEJTIwc3RhcnRfcHJvYmFiaWxpdGllcyU1QiUzQSUyQyUyME5vbmUlNUQlMjAqJTIwZW5kX3Byb2JhYmlsaXRpZXMlNUJOb25lJTJDJTIwJTNBJTVE",highlighted:'scores = start_probabilities[:, <span class="hljs-literal">None</span>] * end_probabilities[<span class="hljs-literal">None</span>, :]',wrap:!1}});const Da=[Xn,Vn],Zt=[];function Pa(e,l){return e[0]==="pt"?0:1}H=Pa(y),Q=Zt[H]=Da[H](y),Ze=new h({props:{code:"bWF4X2luZGV4JTIwJTNEJTIwc2NvcmVzLmFyZ21heCgpLml0ZW0oKSUwQXN0YXJ0X2luZGV4JTIwJTNEJTIwbWF4X2luZGV4JTIwJTJGJTJGJTIwc2NvcmVzLnNoYXBlJTVCMSU1RCUwQWVuZF9pbmRleCUyMCUzRCUyMG1heF9pbmRleCUyMCUyNSUyMHNjb3Jlcy5zaGFwZSU1QjElNUQlMEFwcmludChzY29yZXMlNUJzdGFydF9pbmRleCUyQyUyMGVuZF9pbmRleCU1RCk=",highlighted:`max_index = scores.argmax().item()
start_index = max_index // scores.shape[<span class="hljs-number">1</span>]
end_index = max_index % scores.shape[<span class="hljs-number">1</span>]
<span class="hljs-built_in">print</span>(scores[start_index, end_index])`,wrap:!1}}),$e=new h({props:{code:"MC45Nzc3Mw==",highlighted:'<span class="hljs-number">0.97773</span>',wrap:!1}}),se=new kl({props:{$$slots:{default:[zn]},$$scope:{ctx:y}}}),Ge=new h({props:{code:"aW5wdXRzX3dpdGhfb2Zmc2V0cyUyMCUzRCUyMHRva2VuaXplcihxdWVzdGlvbiUyQyUyMGNvbnRleHQlMkMlMjByZXR1cm5fb2Zmc2V0c19tYXBwaW5nJTNEVHJ1ZSklMEFvZmZzZXRzJTIwJTNEJTIwaW5wdXRzX3dpdGhfb2Zmc2V0cyU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTBBJTBBc3RhcnRfY2hhciUyQyUyMF8lMjAlM0QlMjBvZmZzZXRzJTVCc3RhcnRfaW5kZXglNUQlMEFfJTJDJTIwZW5kX2NoYXIlMjAlM0QlMjBvZmZzZXRzJTVCZW5kX2luZGV4JTVEJTBBYW5zd2VyJTIwJTNEJTIwY29udGV4dCU1QnN0YXJ0X2NoYXIlM0FlbmRfY2hhciU1RA==",highlighted:`inputs_with_offsets = tokenizer(question, context, return_offsets_mapping=<span class="hljs-literal">True</span>)
offsets = inputs_with_offsets[<span class="hljs-string">&quot;offset_mapping&quot;</span>]

start_char, _ = offsets[start_index]
_, end_char = offsets[end_index]
answer = context[start_char:end_char]`,wrap:!1}}),We=new h({props:{code:"cmVzdWx0JTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIyYW5zd2VyJTIyJTNBJTIwYW5zd2VyJTJDJTBBJTIwJTIwJTIwJTIwJTIyc3RhcnQlMjIlM0ElMjBzdGFydF9jaGFyJTJDJTBBJTIwJTIwJTIwJTIwJTIyZW5kJTIyJTNBJTIwZW5kX2NoYXIlMkMlMEElMjAlMjAlMjAlMjAlMjJzY29yZSUyMiUzQSUyMHNjb3JlcyU1QnN0YXJ0X2luZGV4JTJDJTIwZW5kX2luZGV4JTVEJTJDJTBBJTdEJTBBcHJpbnQocmVzdWx0KQ==",highlighted:`result = {
    <span class="hljs-string">&quot;answer&quot;</span>: answer,
    <span class="hljs-string">&quot;start&quot;</span>: start_char,
    <span class="hljs-string">&quot;end&quot;</span>: end_char,
    <span class="hljs-string">&quot;score&quot;</span>: scores[start_index, end_index],
}
<span class="hljs-built_in">print</span>(result)`,wrap:!1}}),Re=new h({props:{code:"JTdCJ2Fuc3dlciclM0ElMjAnSmF4JTJDJTIwUHlUb3JjaCUyMGFuZCUyMFRlbnNvckZsb3cnJTJDJTBBJTIwJ3N0YXJ0JyUzQSUyMDc4JTJDJTBBJTIwJ2VuZCclM0ElMjAxMDUlMkMlMEElMjAnc2NvcmUnJTNBJTIwMC45Nzc3MyU3RA==",highlighted:`{<span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">78</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">105</span>,
 <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97773</span>}`,wrap:!1}}),le=new kl({props:{$$slots:{default:[Hn]},$$scope:{ctx:y}}}),Ve=new Bl({props:{title:"Manejando contextos largos",local:"handling-long-contexts",headingTag:"h2"}}),ze=new h({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHF1ZXN0aW9uJTJDJTIwbG9uZ19jb250ZXh0KSUwQXByaW50KGxlbihpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQpKQ==",highlighted:`inputs = tokenizer(question, long_context)
<span class="hljs-built_in">print</span>(<span class="hljs-built_in">len</span>(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]))`,wrap:!1}}),He=new h({props:{code:"NDYx",highlighted:'<span class="hljs-number">461</span>',wrap:!1}}),Ee=new h({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHF1ZXN0aW9uJTJDJTIwbG9uZ19jb250ZXh0JTJDJTIwbWF4X2xlbmd0aCUzRDM4NCUyQyUyMHRydW5jYXRpb24lM0QlMjJvbmx5X3NlY29uZCUyMiklMEFwcmludCh0b2tlbml6ZXIuZGVjb2RlKGlucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCkp",highlighted:`inputs = tokenizer(question, long_context, max_length=<span class="hljs-number">384</span>, truncation=<span class="hljs-string">&quot;only_second&quot;</span>)
<span class="hljs-built_in">print</span>(tokenizer.decode(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]))`,wrap:!1}}),Ye=new h({props:{code:"JTIyJTIyJTIyJTBBJTVCQ0xTJTVEJTIwV2hpY2glMjBkZWVwJTIwbGVhcm5pbmclMjBsaWJyYXJpZXMlMjBiYWNrJTIwJTVCVU5LJTVEJTIwVHJhbnNmb3JtZXJzJTNGJTIwJTVCU0VQJTVEJTIwJTVCVU5LJTVEJTIwVHJhbnNmb3JtZXJzJTIwJTNBJTIwU3RhdGUlMjBvZiUyMHRoZSUyMEFydCUyME5MUCUwQSUwQSU1QlVOSyU1RCUyMFRyYW5zZm9ybWVycyUyMHByb3ZpZGVzJTIwdGhvdXNhbmRzJTIwb2YlMjBwcmV0cmFpbmVkJTIwbW9kZWxzJTIwdG8lMjBwZXJmb3JtJTIwdGFza3MlMjBvbiUyMHRleHRzJTIwc3VjaCUyMGFzJTIwY2xhc3NpZmljYXRpb24lMkMlMjBpbmZvcm1hdGlvbiUyMGV4dHJhY3Rpb24lMkMlMEFxdWVzdGlvbiUyMGFuc3dlcmluZyUyQyUyMHN1bW1hcml6YXRpb24lMkMlMjB0cmFuc2xhdGlvbiUyQyUyMHRleHQlMjBnZW5lcmF0aW9uJTIwYW5kJTIwbW9yZSUyMGluJTIwb3ZlciUyMDEwMCUyMGxhbmd1YWdlcy4lMEFJdHMlMjBhaW0lMjBpcyUyMHRvJTIwbWFrZSUyMGN1dHRpbmctZWRnZSUyME5MUCUyMGVhc2llciUyMHRvJTIwdXNlJTIwZm9yJTIwZXZlcnlvbmUuJTBBJTBBJTVCVU5LJTVEJTIwVHJhbnNmb3JtZXJzJTIwcHJvdmlkZXMlMjBBUElzJTIwdG8lMjBxdWlja2x5JTIwZG93bmxvYWQlMjBhbmQlMjB1c2UlMjB0aG9zZSUyMHByZXRyYWluZWQlMjBtb2RlbHMlMjBvbiUyMGElMjBnaXZlbiUyMHRleHQlMkMlMjBmaW5lLXR1bmUlMjB0aGVtJTIwb24lMjB5b3VyJTIwb3duJTIwZGF0YXNldHMlMjBhbmQlMEF0aGVuJTIwc2hhcmUlMjB0aGVtJTIwd2l0aCUyMHRoZSUyMGNvbW11bml0eSUyMG9uJTIwb3VyJTIwbW9kZWwlMjBodWIuJTIwQXQlMjB0aGUlMjBzYW1lJTIwdGltZSUyQyUyMGVhY2glMjBweXRob24lMjBtb2R1bGUlMjBkZWZpbmluZyUyMGFuJTIwYXJjaGl0ZWN0dXJlJTIwaXMlMjBmdWxseSUyMHN0YW5kYWxvbmUlMjBhbmQlMEFjYW4lMjBiZSUyMG1vZGlmaWVkJTIwdG8lMjBlbmFibGUlMjBxdWljayUyMHJlc2VhcmNoJTIwZXhwZXJpbWVudHMuJTBBJTBBV2h5JTIwc2hvdWxkJTIwSSUyMHVzZSUyMHRyYW5zZm9ybWVycyUzRiUwQSUwQTEuJTIwRWFzeS10by11c2UlMjBzdGF0ZS1vZi10aGUtYXJ0JTIwbW9kZWxzJTNBJTBBJTIwJTIwLSUyMEhpZ2glMjBwZXJmb3JtYW5jZSUyMG9uJTIwTkxVJTIwYW5kJTIwTkxHJTIwdGFza3MuJTBBJTIwJTIwLSUyMExvdyUyMGJhcnJpZXIlMjB0byUyMGVudHJ5JTIwZm9yJTIwZWR1Y2F0b3JzJTIwYW5kJTIwcHJhY3RpdGlvbmVycy4lMEElMjAlMjAtJTIwRmV3JTIwdXNlci1mYWNpbmclMjBhYnN0cmFjdGlvbnMlMjB3aXRoJTIwanVzdCUyMHRocmVlJTIwY2xhc3NlcyUyMHRvJTIwbGVhcm4uJTBBJTIwJTIwLSUyMEElMjB1bmlmaWVkJTIwQVBJJTIwZm9yJTIwdXNpbmclMjBhbGwlMjBvdXIlMjBwcmV0cmFpbmVkJTIwbW9kZWxzLiUwQSUyMCUyMC0lMjBMb3dlciUyMGNvbXB1dGUlMjBjb3N0cyUyQyUyMHNtYWxsZXIlMjBjYXJib24lMjBmb290cHJpbnQlM0ElMEElMEEyLiUyMFJlc2VhcmNoZXJzJTIwY2FuJTIwc2hhcmUlMjB0cmFpbmVkJTIwbW9kZWxzJTIwaW5zdGVhZCUyMG9mJTIwYWx3YXlzJTIwcmV0cmFpbmluZy4lMEElMjAlMjAtJTIwUHJhY3RpdGlvbmVycyUyMGNhbiUyMHJlZHVjZSUyMGNvbXB1dGUlMjB0aW1lJTIwYW5kJTIwcHJvZHVjdGlvbiUyMGNvc3RzLiUwQSUyMCUyMC0lMjBEb3plbnMlMjBvZiUyMGFyY2hpdGVjdHVyZXMlMjB3aXRoJTIwb3ZlciUyMDEwJTJDMDAwJTIwcHJldHJhaW5lZCUyMG1vZGVscyUyQyUyMHNvbWUlMjBpbiUyMG1vcmUlMjB0aGFuJTIwMTAwJTIwbGFuZ3VhZ2VzLiUwQSUwQTMuJTIwQ2hvb3NlJTIwdGhlJTIwcmlnaHQlMjBmcmFtZXdvcmslMjBmb3IlMjBldmVyeSUyMHBhcnQlMjBvZiUyMGElMjBtb2RlbCdzJTIwbGlmZXRpbWUlM0ElMEElMjAlMjAtJTIwVHJhaW4lMjBzdGF0ZS1vZi10aGUtYXJ0JTIwbW9kZWxzJTIwaW4lMjAzJTIwbGluZXMlMjBvZiUyMGNvZGUuJTBBJTIwJTIwLSUyME1vdmUlMjBhJTIwc2luZ2xlJTIwbW9kZWwlMjBiZXR3ZWVuJTIwVEYyLjAlMkZQeVRvcmNoJTIwZnJhbWV3b3JrcyUyMGF0JTIwd2lsbC4lMEElMjAlMjAtJTIwU2VhbWxlc3NseSUyMHBpY2slMjB0aGUlMjByaWdodCUyMGZyYW1ld29yayUyMGZvciUyMHRyYWluaW5nJTJDJTIwZXZhbHVhdGlvbiUyMGFuZCUyMHByb2R1Y3Rpb24uJTBBJTBBNC4lMjBFYXNpbHklMjBjdXN0b21pemUlMjBhJTIwbW9kZWwlMjBvciUyMGFuJTIwZXhhbXBsZSUyMHRvJTIweW91ciUyMG5lZWRzJTNBJTBBJTIwJTIwLSUyMFdlJTIwcHJvdmlkZSUyMGV4YW1wbGVzJTIwZm9yJTIwZWFjaCUyMGFyY2hpdGVjdHVyZSUyMHRvJTIwcmVwcm9kdWNlJTIwdGhlJTIwcmVzdWx0cyUyMHB1Ymxpc2hlZCUyMGJ5JTIwaXRzJTIwb3JpZ2luYWwlMjBhdXRob3JzLiUwQSUyMCUyMC0lMjBNb2RlbCUyMGludGVybmFsJTIwJTVCU0VQJTVEJTBBJTIyJTIyJTIy",highlighted:`<span class="hljs-string">&quot;&quot;&quot;
[CLS] Which deep learning libraries back [UNK] Transformers? [SEP] [UNK] Transformers : State of the Art NLP

[UNK] Transformers provides thousands of pretrained models to perform tasks on texts such as classification, information extraction,
question answering, summarization, translation, text generation and more in over 100 languages.
Its aim is to make cutting-edge NLP easier to use for everyone.

[UNK] Transformers provides APIs to quickly download and use those pretrained models on a given text, fine-tune them on your own datasets and
then share them with the community on our model hub. At the same time, each python module defining an architecture is fully standalone and
can be modified to enable quick research experiments.

Why should I use transformers?

1. Easy-to-use state-of-the-art models:
  - High performance on NLU and NLG tasks.
  - Low barrier to entry for educators and practitioners.
  - Few user-facing abstractions with just three classes to learn.
  - A unified API for using all our pretrained models.
  - Lower compute costs, smaller carbon footprint:

2. Researchers can share trained models instead of always retraining.
  - Practitioners can reduce compute time and production costs.
  - Dozens of architectures with over 10,000 pretrained models, some in more than 100 languages.

3. Choose the right framework for every part of a model&#x27;s lifetime:
  - Train state-of-the-art models in 3 lines of code.
  - Move a single model between TF2.0/PyTorch frameworks at will.
  - Seamlessly pick the right framework for training, evaluation and production.

4. Easily customize a model or an example to your needs:
  - We provide examples for each architecture to reproduce the results published by its original authors.
  - Model internal [SEP]
&quot;&quot;&quot;</span>`,wrap:!1}}),Se=new h({props:{code:"c2VudGVuY2UlMjAlM0QlMjAlMjJUaGlzJTIwc2VudGVuY2UlMjBpcyUyMG5vdCUyMHRvbyUyMGxvbmclMjBidXQlMjB3ZSUyMGFyZSUyMGdvaW5nJTIwdG8lMjBzcGxpdCUyMGl0JTIwYW55d2F5LiUyMiUwQWlucHV0cyUyMCUzRCUyMHRva2VuaXplciglMEElMjAlMjAlMjAlMjBzZW50ZW5jZSUyQyUyMHRydW5jYXRpb24lM0RUcnVlJTJDJTIwcmV0dXJuX292ZXJmbG93aW5nX3Rva2VucyUzRFRydWUlMkMlMjBtYXhfbGVuZ3RoJTNENiUyQyUyMHN0cmlkZSUzRDIlMEEpJTBBJTBBZm9yJTIwaWRzJTIwaW4lMjBpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQlM0ElMEElMjAlMjAlMjAlMjBwcmludCh0b2tlbml6ZXIuZGVjb2RlKGlkcykp",highlighted:`sentence = <span class="hljs-string">&quot;This sentence is not too long but we are going to split it anyway.&quot;</span>
inputs = tokenizer(
    sentence, truncation=<span class="hljs-literal">True</span>, return_overflowing_tokens=<span class="hljs-literal">True</span>, max_length=<span class="hljs-number">6</span>, stride=<span class="hljs-number">2</span>
)

<span class="hljs-keyword">for</span> ids <span class="hljs-keyword">in</span> inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]:
    <span class="hljs-built_in">print</span>(tokenizer.decode(ids))`,wrap:!1}}),Ae=new h({props:{code:"JyU1QkNMUyU1RCUyMFRoaXMlMjBzZW50ZW5jZSUyMGlzJTIwbm90JTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjBpcyUyMG5vdCUyMHRvbyUyMGxvbmclMjAlNUJTRVAlNUQnJTBBJyU1QkNMUyU1RCUyMHRvbyUyMGxvbmclMjBidXQlMjB3ZSUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwYnV0JTIwd2UlMjBhcmUlMjBnb2luZyUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwYXJlJTIwZ29pbmclMjB0byUyMHNwbGl0JTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjB0byUyMHNwbGl0JTIwaXQlMjBhbnl3YXklMjAlNUJTRVAlNUQnJTBBJyU1QkNMUyU1RCUyMGl0JTIwYW55d2F5LiUyMCU1QlNFUCU1RCc=",highlighted:`<span class="hljs-string">&#x27;[CLS] This sentence is not [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] is not too long [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] too long but we [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] but we are going [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] are going to split [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] to split it anyway [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] it anyway. [SEP]&#x27;</span>`,wrap:!1}}),Pe=new h({props:{code:"cHJpbnQoaW5wdXRzLmtleXMoKSk=",highlighted:'<span class="hljs-built_in">print</span>(inputs.keys())',wrap:!1}}),Ke=new h({props:{code:"ZGljdF9rZXlzKCU1QidpbnB1dF9pZHMnJTJDJTIwJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyclNUQp",highlighted:'dict_keys([<span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;overflow_to_sample_mapping&#x27;</span>])',wrap:!1}}),et=new h({props:{code:"cHJpbnQoaW5wdXRzJTVCJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIlNUQp",highlighted:'<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>])',wrap:!1}}),tt=new h({props:{code:"JTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RA==",highlighted:'[<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]',wrap:!1}}),lt=new h({props:{code:"c2VudGVuY2VzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMHNlbnRlbmNlJTIwaXMlMjBub3QlMjB0b28lMjBsb25nJTIwYnV0JTIwd2UlMjBhcmUlMjBnb2luZyUyMHRvJTIwc3BsaXQlMjBpdCUyMGFueXdheS4lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJUaGlzJTIwc2VudGVuY2UlMjBpcyUyMHNob3J0ZXIlMjBidXQlMjB3aWxsJTIwc3RpbGwlMjBnZXQlMjBzcGxpdC4lMjIlMkMlMEElNUQlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwc2VudGVuY2VzJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fb3ZlcmZsb3dpbmdfdG9rZW5zJTNEVHJ1ZSUyQyUyMG1heF9sZW5ndGglM0Q2JTJDJTIwc3RyaWRlJTNEMiUwQSklMEElMEFwcmludChpbnB1dHMlNUIlMjJvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyUyMiU1RCk=",highlighted:`sentences = [
    <span class="hljs-string">&quot;This sentence is not too long but we are going to split it anyway.&quot;</span>,
    <span class="hljs-string">&quot;This sentence is shorter but will still get split.&quot;</span>,
]
inputs = tokenizer(
    sentences, truncation=<span class="hljs-literal">True</span>, return_overflowing_tokens=<span class="hljs-literal">True</span>, max_length=<span class="hljs-number">6</span>, stride=<span class="hljs-number">2</span>
)

<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>])`,wrap:!1}}),nt=new h({props:{code:"JTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElNUQ=",highlighted:'[<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>]',wrap:!1}}),it=new h({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMHF1ZXN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwbG9uZ19jb250ZXh0JTJDJTBBJTIwJTIwJTIwJTIwc3RyaWRlJTNEMTI4JTJDJTBBJTIwJTIwJTIwJTIwbWF4X2xlbmd0aCUzRDM4NCUyQyUwQSUyMCUyMCUyMCUyMHBhZGRpbmclM0QlMjJsb25nZXN0JTIyJTJDJTBBJTIwJTIwJTIwJTIwdHJ1bmNhdGlvbiUzRCUyMm9ubHlfc2Vjb25kJTIyJTJDJTBBJTIwJTIwJTIwJTIwcmV0dXJuX292ZXJmbG93aW5nX3Rva2VucyUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZXR1cm5fb2Zmc2V0c19tYXBwaW5nJTNEVHJ1ZSUyQyUwQSk=",highlighted:`inputs = tokenizer(
    question,
    long_context,
    stride=<span class="hljs-number">128</span>,
    max_length=<span class="hljs-number">384</span>,
    padding=<span class="hljs-string">&quot;longest&quot;</span>,
    truncation=<span class="hljs-string">&quot;only_second&quot;</span>,
    return_overflowing_tokens=<span class="hljs-literal">True</span>,
    return_offsets_mapping=<span class="hljs-literal">True</span>,
)`,wrap:!1}});const Ka=[En,Qn],vt=[];function Oa(e,l){return e[0]==="pt"?0:1}E=Oa(y),Y=vt[E]=Ka[E](y),ct=new h({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqaW5wdXRzKSUwQSUwQXN0YXJ0X2xvZ2l0cyUyMCUzRCUyMG91dHB1dHMuc3RhcnRfbG9naXRzJTBBZW5kX2xvZ2l0cyUyMCUzRCUyMG91dHB1dHMuZW5kX2xvZ2l0cyUwQXByaW50KHN0YXJ0X2xvZ2l0cy5zaGFwZSUyQyUyMGVuZF9sb2dpdHMuc2hhcGUp",highlighted:`outputs = model(**inputs)

start_logits = outputs.start_logits
end_logits = outputs.end_logits
<span class="hljs-built_in">print</span>(start_logits.shape, end_logits.shape)`,wrap:!1}});const en=[Fn,Yn],$t=[];function tn(e,l){return e[0]==="pt"?0:1}F=tn(y),q=$t[F]=en[F](y);const sn=[Sn,qn],xt=[];function ln(e,l){return e[0]==="pt"?0:1}S=ln(y),A=xt[S]=sn[S](y);const an=[Ln,An],Gt=[];function nn(e,l){return e[0]==="pt"?0:1}L=nn(y),D=Gt[L]=an[L](y);const on=[Pn,Dn],Ct=[];function rn(e,l){return e[0]==="pt"?0:1}return P=rn(y),K=Ct[P]=on[P](y),Jt=new h({props:{code:"JTVCKDAlMkMlMjAxOCUyQyUyMDAuMzM4NjcpJTJDJTIwKDE3MyUyQyUyMDE4NCUyQyUyMDAuOTcxNDkpJTVE",highlighted:'[(<span class="hljs-number">0</span>, <span class="hljs-number">18</span>, <span class="hljs-number">0.33867</span>), (<span class="hljs-number">173</span>, <span class="hljs-number">184</span>, <span class="hljs-number">0.97149</span>)]',wrap:!1}}),ae=new kl({props:{$$slots:{default:[Kn]},$$scope:{ctx:y}}}),wt=new h({props:{code:"Zm9yJTIwY2FuZGlkYXRlJTJDJTIwb2Zmc2V0JTIwaW4lMjB6aXAoY2FuZGlkYXRlcyUyQyUyMG9mZnNldHMpJTNBJTBBJTIwJTIwJTIwJTIwc3RhcnRfdG9rZW4lMkMlMjBlbmRfdG9rZW4lMkMlMjBzY29yZSUyMCUzRCUyMGNhbmRpZGF0ZSUwQSUyMCUyMCUyMCUyMHN0YXJ0X2NoYXIlMkMlMjBfJTIwJTNEJTIwb2Zmc2V0JTVCc3RhcnRfdG9rZW4lNUQlMEElMjAlMjAlMjAlMjBfJTJDJTIwZW5kX2NoYXIlMjAlM0QlMjBvZmZzZXQlNUJlbmRfdG9rZW4lNUQlMEElMjAlMjAlMjAlMjBhbnN3ZXIlMjAlM0QlMjBsb25nX2NvbnRleHQlNUJzdGFydF9jaGFyJTNBZW5kX2NoYXIlNUQlMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjAlN0IlMjJhbnN3ZXIlMjIlM0ElMjBhbnN3ZXIlMkMlMjAlMjJzdGFydCUyMiUzQSUyMHN0YXJ0X2NoYXIlMkMlMjAlMjJlbmQlMjIlM0ElMjBlbmRfY2hhciUyQyUyMCUyMnNjb3JlJTIyJTNBJTIwc2NvcmUlN0QlMEElMjAlMjAlMjAlMjBwcmludChyZXN1bHQp",highlighted:`<span class="hljs-keyword">for</span> candidate, offset <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(candidates, offsets):
    start_token, end_token, score = candidate
    start_char, _ = offset[start_token]
    _, end_char = offset[end_token]
    answer = long_context[start_char:end_char]
    result = {<span class="hljs-string">&quot;answer&quot;</span>: answer, <span class="hljs-string">&quot;start&quot;</span>: start_char, <span class="hljs-string">&quot;end&quot;</span>: end_char, <span class="hljs-string">&quot;score&quot;</span>: score}
    <span class="hljs-built_in">print</span>(result)`,wrap:!1}}),Tt=new h({props:{code:"JTdCJ2Fuc3dlciclM0ElMjAnJTVDbiVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUzQSUyMFN0YXRlJTIwb2YlMjB0aGUlMjBBcnQlMjBOTFAnJTJDJTIwJ3N0YXJ0JyUzQSUyMDAlMkMlMjAnZW5kJyUzQSUyMDM3JTJDJTIwJ3Njb3JlJyUzQSUyMDAuMzM4NjclN0QlMEElN0InYW5zd2VyJyUzQSUyMCdKYXglMkMlMjBQeVRvcmNoJTIwYW5kJTIwVGVuc29yRmxvdyclMkMlMjAnc3RhcnQnJTNBJTIwMTg5MiUyQyUyMCdlbmQnJTNBJTIwMTkxOSUyQyUyMCdzY29yZSclM0ElMjAwLjk3MTQ5JTdE",highlighted:`{<span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;\\n🤗 Transformers: State of the Art NLP&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">0</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">37</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.33867</span>}
{<span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">1892</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">1919</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97149</span>}`,wrap:!1}}),ne=new kl({props:{$$slots:{default:[On]},$$scope:{ctx:y}}}),Ut=new _n({props:{source:"https://github.com/huggingface/course/blob/main/chapters/es/chapter6/3b.mdx"}}),{c(){s=w("meta"),o=r(),t=w("p"),c=r(),u(b.$$.fragment),U=r(),u(j.$$.fragment),Ot=r(),v.c(),Wt=r(),ie=w("p"),ie.innerHTML=Ll,es=r(),x.c(),Rt=r(),u(me.$$.fragment),ts=r(),pe=w("p"),pe.innerHTML=Dl,ss=r(),u(ce.$$.fragment),ls=r(),u(ue.$$.fragment),as=r(),de=w("p"),de.textContent=Pl,ns=r(),u(Me.$$.fragment),os=r(),u(Je.$$.fragment),rs=r(),ye=w("p"),ye.textContent=Kl,is=r(),u(be.$$.fragment),ms=r(),we=w("p"),we.innerHTML=Ol,ps=r(),C.c(),Nt=r(),Te=w("p"),Te.textContent=ea,cs=r(),te=w("div"),te.innerHTML=ta,us=r(),he=w("p"),he.textContent=sa,ds=r(),u(fe.$$.fragment),Ms=r(),R.c(),Vt=r(),Ue=w("p"),Ue.innerHTML=la,Js=r(),je=w("p"),je.innerHTML=aa,ys=r(),V.c(),Xt=r(),Ie=w("p"),Ie.textContent=na,bs=r(),z.c(),zt=r(),_e=w("p"),_e.innerHTML=oa,ws=r(),I=w("p"),vl=oe("Asumiendo que los eventos “La respuesta comienzda en "),Ht=w("code"),Ht.textContent=ra,$l=oe("” y “La respuesta termina en "),Qt=w("code"),Qt.textContent=ia,xl=oe("” son independientes, la probabilidad de que la respuesta inicie en "),Et=w("code"),Et.textContent=ma,Gl=oe(" y termine en "),Yt=w("code"),Yt.textContent=pa,Cl=oe(` es:
`),Ts=new dn(!1),hs=r(),O=w("p"),Wl=oe("Así que para calcular todos los puntajes, necesitamos calcular todos los productos"),fs=new dn(!1),Us=oe(" donde "),Ft=w("code"),Ft.textContent=ca,Rl=oe("."),js=r(),ge=w("p"),ge.textContent=ua,Is=r(),u(ke.$$.fragment),_s=r(),Q.c(),qt=r(),Be=w("p"),Be.innerHTML=da,gs=r(),u(Ze.$$.fragment),ks=r(),ve=w("p"),ve.textContent=Ma,Bs=r(),u($e.$$.fragment),Zs=r(),u(se.$$.fragment),vs=r(),xe=w("p"),xe.innerHTML=Ja,$s=r(),u(Ge.$$.fragment),xs=r(),Ce=w("p"),Ce.textContent=ya,Gs=r(),u(We.$$.fragment),Cs=r(),u(Re.$$.fragment),Ws=r(),Ne=w("p"),Ne.textContent=ba,Rs=r(),u(le.$$.fragment),Ns=r(),u(Ve.$$.fragment),Vs=r(),Xe=w("p"),Xe.innerHTML=wa,Xs=r(),u(ze.$$.fragment),zs=r(),u(He.$$.fragment),Hs=r(),Qe=w("p"),Qe.innerHTML=Ta,Qs=r(),u(Ee.$$.fragment),Es=r(),u(Ye.$$.fragment),Ys=r(),Fe=w("p"),Fe.innerHTML=ha,Fs=r(),qe=w("p"),qe.innerHTML=fa,qs=r(),u(Se.$$.fragment),Ss=r(),u(Ae.$$.fragment),As=r(),Le=w("p"),Le.innerHTML=Ua,Ls=r(),De=w("p"),De.textContent=ja,Ds=r(),u(Pe.$$.fragment),Ps=r(),u(Ke.$$.fragment),Ks=r(),Oe=w("p"),Oe.innerHTML=Ia,Os=r(),u(et.$$.fragment),el=r(),u(tt.$$.fragment),tl=r(),st=w("p"),st.textContent=_a,sl=r(),u(lt.$$.fragment),ll=r(),at=w("p"),at.textContent=ga,al=r(),u(nt.$$.fragment),nl=r(),ot=w("p"),ot.textContent=ka,ol=r(),rt=w("p"),rt.innerHTML=Ba,rl=r(),u(it.$$.fragment),il=r(),mt=w("p"),mt.innerHTML=Za,ml=r(),Y.c(),St=r(),pt=w("p"),pt.textContent=va,pl=r(),u(ct.$$.fragment),cl=r(),q.c(),At=r(),ut=w("p"),ut.innerHTML=$a,ul=r(),A.c(),Lt=r(),dt=w("p"),dt.textContent=xa,dl=r(),D.c(),Dt=r(),Mt=w("p"),Mt.textContent=Ga,Ml=r(),K.c(),Pt=r(),u(Jt.$$.fragment),Jl=r(),yt=w("p"),yt.textContent=Ca,yl=r(),u(ae.$$.fragment),bl=r(),bt=w("p"),bt.innerHTML=Wa,wl=r(),u(wt.$$.fragment),Tl=r(),u(Tt.$$.fragment),hl=r(),ht=w("p"),ht.textContent=Ra,fl=r(),u(ne.$$.fragment),Ul=r(),ft=w("p"),ft.textContent=Na,jl=r(),u(Ut.$$.fragment),Il=r(),Kt=w("p"),this.h()},l(e){const l=jn("svelte-u9bgzb",document.head);s=T(l,"META",{name:!0,content:!0}),l.forEach(a),o=i(e),t=T(e,"P",{}),gl(t).forEach(a),c=i(e),d(b.$$.fragment,e),U=i(e),d(j.$$.fragment,e),Ot=i(e),v.l(e),Wt=i(e),ie=T(e,"P",{"data-svelte-h":!0}),f(ie)!=="svelte-1q2845j"&&(ie.innerHTML=Ll),es=i(e),x.l(e),Rt=i(e),d(me.$$.fragment,e),ts=i(e),pe=T(e,"P",{"data-svelte-h":!0}),f(pe)!=="svelte-7d1lxe"&&(pe.innerHTML=Dl),ss=i(e),d(ce.$$.fragment,e),ls=i(e),d(ue.$$.fragment,e),as=i(e),de=T(e,"P",{"data-svelte-h":!0}),f(de)!=="svelte-t7dxmv"&&(de.textContent=Pl),ns=i(e),d(Me.$$.fragment,e),os=i(e),d(Je.$$.fragment,e),rs=i(e),ye=T(e,"P",{"data-svelte-h":!0}),f(ye)!=="svelte-1fzhkpf"&&(ye.textContent=Kl),is=i(e),d(be.$$.fragment,e),ms=i(e),we=T(e,"P",{"data-svelte-h":!0}),f(we)!=="svelte-1bgjpog"&&(we.innerHTML=Ol),ps=i(e),C.l(e),Nt=i(e),Te=T(e,"P",{"data-svelte-h":!0}),f(Te)!=="svelte-jv8ai6"&&(Te.textContent=ea),cs=i(e),te=T(e,"DIV",{class:!0,"data-svelte-h":!0}),f(te)!=="svelte-47wedv"&&(te.innerHTML=ta),us=i(e),he=T(e,"P",{"data-svelte-h":!0}),f(he)!=="svelte-1e831oz"&&(he.textContent=sa),ds=i(e),d(fe.$$.fragment,e),Ms=i(e),R.l(e),Vt=i(e),Ue=T(e,"P",{"data-svelte-h":!0}),f(Ue)!=="svelte-xymzuu"&&(Ue.innerHTML=la),Js=i(e),je=T(e,"P",{"data-svelte-h":!0}),f(je)!=="svelte-1voicq3"&&(je.innerHTML=aa),ys=i(e),V.l(e),Xt=i(e),Ie=T(e,"P",{"data-svelte-h":!0}),f(Ie)!=="svelte-f5t01p"&&(Ie.textContent=na),bs=i(e),z.l(e),zt=i(e),_e=T(e,"P",{"data-svelte-h":!0}),f(_e)!=="svelte-bc2822"&&(_e.innerHTML=oa),ws=i(e),I=T(e,"P",{});var _=gl(I);vl=re(_,"Asumiendo que los eventos “La respuesta comienzda en "),Ht=T(_,"CODE",{"data-svelte-h":!0}),f(Ht)!=="svelte-8eqb3b"&&(Ht.textContent=ra),$l=re(_,"” y “La respuesta termina en "),Qt=T(_,"CODE",{"data-svelte-h":!0}),f(Qt)!=="svelte-9cistc"&&(Qt.textContent=ia),xl=re(_,"” son independientes, la probabilidad de que la respuesta inicie en "),Et=T(_,"CODE",{"data-svelte-h":!0}),f(Et)!=="svelte-8eqb3b"&&(Et.textContent=ma),Gl=re(_," y termine en "),Yt=T(_,"CODE",{"data-svelte-h":!0}),f(Yt)!=="svelte-9cistc"&&(Yt.textContent=pa),Cl=re(_,` es:
`),Ts=Mn(_,!1),_.forEach(a),hs=i(e),O=T(e,"P",{});var ee=gl(O);Wl=re(ee,"Así que para calcular todos los puntajes, necesitamos calcular todos los productos"),fs=Mn(ee,!1),Us=re(ee," donde "),Ft=T(ee,"CODE",{"data-svelte-h":!0}),f(Ft)!=="svelte-1kp3szf"&&(Ft.textContent=ca),Rl=re(ee,"."),ee.forEach(a),js=i(e),ge=T(e,"P",{"data-svelte-h":!0}),f(ge)!=="svelte-14wio1"&&(ge.textContent=ua),Is=i(e),d(ke.$$.fragment,e),_s=i(e),Q.l(e),qt=i(e),Be=T(e,"P",{"data-svelte-h":!0}),f(Be)!=="svelte-6kovir"&&(Be.innerHTML=da),gs=i(e),d(Ze.$$.fragment,e),ks=i(e),ve=T(e,"P",{"data-svelte-h":!0}),f(ve)!=="svelte-1wq3mgr"&&(ve.textContent=Ma),Bs=i(e),d($e.$$.fragment,e),Zs=i(e),d(se.$$.fragment,e),vs=i(e),xe=T(e,"P",{"data-svelte-h":!0}),f(xe)!=="svelte-db3k1s"&&(xe.innerHTML=Ja),$s=i(e),d(Ge.$$.fragment,e),xs=i(e),Ce=T(e,"P",{"data-svelte-h":!0}),f(Ce)!=="svelte-1bopg1j"&&(Ce.textContent=ya),Gs=i(e),d(We.$$.fragment,e),Cs=i(e),d(Re.$$.fragment,e),Ws=i(e),Ne=T(e,"P",{"data-svelte-h":!0}),f(Ne)!=="svelte-4w4wod"&&(Ne.textContent=ba),Rs=i(e),d(le.$$.fragment,e),Ns=i(e),d(Ve.$$.fragment,e),Vs=i(e),Xe=T(e,"P",{"data-svelte-h":!0}),f(Xe)!=="svelte-comf7u"&&(Xe.innerHTML=wa),Xs=i(e),d(ze.$$.fragment,e),zs=i(e),d(He.$$.fragment,e),Hs=i(e),Qe=T(e,"P",{"data-svelte-h":!0}),f(Qe)!=="svelte-1cfzbeg"&&(Qe.innerHTML=Ta),Qs=i(e),d(Ee.$$.fragment,e),Es=i(e),d(Ye.$$.fragment,e),Ys=i(e),Fe=T(e,"P",{"data-svelte-h":!0}),f(Fe)!=="svelte-6y5ai8"&&(Fe.innerHTML=ha),Fs=i(e),qe=T(e,"P",{"data-svelte-h":!0}),f(qe)!=="svelte-1r5oq8z"&&(qe.innerHTML=fa),qs=i(e),d(Se.$$.fragment,e),Ss=i(e),d(Ae.$$.fragment,e),As=i(e),Le=T(e,"P",{"data-svelte-h":!0}),f(Le)!=="svelte-1yan11o"&&(Le.innerHTML=Ua),Ls=i(e),De=T(e,"P",{"data-svelte-h":!0}),f(De)!=="svelte-wys9cn"&&(De.textContent=ja),Ds=i(e),d(Pe.$$.fragment,e),Ps=i(e),d(Ke.$$.fragment,e),Ks=i(e),Oe=T(e,"P",{"data-svelte-h":!0}),f(Oe)!=="svelte-rtrrjp"&&(Oe.innerHTML=Ia),Os=i(e),d(et.$$.fragment,e),el=i(e),d(tt.$$.fragment,e),tl=i(e),st=T(e,"P",{"data-svelte-h":!0}),f(st)!=="svelte-dueaql"&&(st.textContent=_a),sl=i(e),d(lt.$$.fragment,e),ll=i(e),at=T(e,"P",{"data-svelte-h":!0}),f(at)!=="svelte-142lk7i"&&(at.textContent=ga),al=i(e),d(nt.$$.fragment,e),nl=i(e),ot=T(e,"P",{"data-svelte-h":!0}),f(ot)!=="svelte-ik5n1z"&&(ot.textContent=ka),ol=i(e),rt=T(e,"P",{"data-svelte-h":!0}),f(rt)!=="svelte-lyx2ao"&&(rt.innerHTML=Ba),rl=i(e),d(it.$$.fragment,e),il=i(e),mt=T(e,"P",{"data-svelte-h":!0}),f(mt)!=="svelte-1723rfg"&&(mt.innerHTML=Za),ml=i(e),Y.l(e),St=i(e),pt=T(e,"P",{"data-svelte-h":!0}),f(pt)!=="svelte-176is8q"&&(pt.textContent=va),pl=i(e),d(ct.$$.fragment,e),cl=i(e),q.l(e),At=i(e),ut=T(e,"P",{"data-svelte-h":!0}),f(ut)!=="svelte-90te90"&&(ut.innerHTML=$a),ul=i(e),A.l(e),Lt=i(e),dt=T(e,"P",{"data-svelte-h":!0}),f(dt)!=="svelte-iulkpm"&&(dt.textContent=xa),dl=i(e),D.l(e),Dt=i(e),Mt=T(e,"P",{"data-svelte-h":!0}),f(Mt)!=="svelte-kamqdk"&&(Mt.textContent=Ga),Ml=i(e),K.l(e),Pt=i(e),d(Jt.$$.fragment,e),Jl=i(e),yt=T(e,"P",{"data-svelte-h":!0}),f(yt)!=="svelte-uvnze7"&&(yt.textContent=Ca),yl=i(e),d(ae.$$.fragment,e),bl=i(e),bt=T(e,"P",{"data-svelte-h":!0}),f(bt)!=="svelte-ibvnmd"&&(bt.innerHTML=Wa),wl=i(e),d(wt.$$.fragment,e),Tl=i(e),d(Tt.$$.fragment,e),hl=i(e),ht=T(e,"P",{"data-svelte-h":!0}),f(ht)!=="svelte-1g56fel"&&(ht.textContent=Ra),fl=i(e),d(ne.$$.fragment,e),Ul=i(e),ft=T(e,"P",{"data-svelte-h":!0}),f(ft)!=="svelte-1t2pqi8"&&(ft.textContent=Na),jl=i(e),d(Ut.$$.fragment,e),Il=i(e),Kt=T(e,"P",{}),gl(Kt).forEach(a),this.h()},h(){Al(s,"name","hf:doc:metadata"),Al(s,"content",to),Al(te,"class","flex justify-center"),Ts.a=null,fs.a=Us},m(e,l){g(document.head,s),n(e,o,l),n(e,t,l),n(e,c,l),M(b,e,l),n(e,U,l),M(j,e,l),n(e,Ot,l),jt[Z].m(e,l),n(e,Wt,l),n(e,ie,l),n(e,es,l),It[$].m(e,l),n(e,Rt,l),M(me,e,l),n(e,ts,l),n(e,pe,l),n(e,ss,l),M(ce,e,l),n(e,ls,l),M(ue,e,l),n(e,as,l),n(e,de,l),n(e,ns,l),M(Me,e,l),n(e,os,l),M(Je,e,l),n(e,rs,l),n(e,ye,l),n(e,is,l),M(be,e,l),n(e,ms,l),n(e,we,l),n(e,ps,l),_t[G].m(e,l),n(e,Nt,l),n(e,Te,l),n(e,cs,l),n(e,te,l),n(e,us,l),n(e,he,l),n(e,ds,l),M(fe,e,l),n(e,Ms,l),gt[W].m(e,l),n(e,Vt,l),n(e,Ue,l),n(e,Js,l),n(e,je,l),n(e,ys,l),kt[N].m(e,l),n(e,Xt,l),n(e,Ie,l),n(e,bs,l),Bt[X].m(e,l),n(e,zt,l),n(e,_e,l),n(e,ws,l),n(e,I,l),g(I,vl),g(I,Ht),g(I,$l),g(I,Qt),g(I,xl),g(I,Et),g(I,Gl),g(I,Yt),g(I,Cl),Ts.m(bn,I),n(e,hs,l),n(e,O,l),g(O,Wl),fs.m(wn,O),g(O,Us),g(O,Ft),g(O,Rl),n(e,js,l),n(e,ge,l),n(e,Is,l),M(ke,e,l),n(e,_s,l),Zt[H].m(e,l),n(e,qt,l),n(e,Be,l),n(e,gs,l),M(Ze,e,l),n(e,ks,l),n(e,ve,l),n(e,Bs,l),M($e,e,l),n(e,Zs,l),M(se,e,l),n(e,vs,l),n(e,xe,l),n(e,$s,l),M(Ge,e,l),n(e,xs,l),n(e,Ce,l),n(e,Gs,l),M(We,e,l),n(e,Cs,l),M(Re,e,l),n(e,Ws,l),n(e,Ne,l),n(e,Rs,l),M(le,e,l),n(e,Ns,l),M(Ve,e,l),n(e,Vs,l),n(e,Xe,l),n(e,Xs,l),M(ze,e,l),n(e,zs,l),M(He,e,l),n(e,Hs,l),n(e,Qe,l),n(e,Qs,l),M(Ee,e,l),n(e,Es,l),M(Ye,e,l),n(e,Ys,l),n(e,Fe,l),n(e,Fs,l),n(e,qe,l),n(e,qs,l),M(Se,e,l),n(e,Ss,l),M(Ae,e,l),n(e,As,l),n(e,Le,l),n(e,Ls,l),n(e,De,l),n(e,Ds,l),M(Pe,e,l),n(e,Ps,l),M(Ke,e,l),n(e,Ks,l),n(e,Oe,l),n(e,Os,l),M(et,e,l),n(e,el,l),M(tt,e,l),n(e,tl,l),n(e,st,l),n(e,sl,l),M(lt,e,l),n(e,ll,l),n(e,at,l),n(e,al,l),M(nt,e,l),n(e,nl,l),n(e,ot,l),n(e,ol,l),n(e,rt,l),n(e,rl,l),M(it,e,l),n(e,il,l),n(e,mt,l),n(e,ml,l),vt[E].m(e,l),n(e,St,l),n(e,pt,l),n(e,pl,l),M(ct,e,l),n(e,cl,l),$t[F].m(e,l),n(e,At,l),n(e,ut,l),n(e,ul,l),xt[S].m(e,l),n(e,Lt,l),n(e,dt,l),n(e,dl,l),Gt[L].m(e,l),n(e,Dt,l),n(e,Mt,l),n(e,Ml,l),Ct[P].m(e,l),n(e,Pt,l),M(Jt,e,l),n(e,Jl,l),n(e,yt,l),n(e,yl,l),M(ae,e,l),n(e,bl,l),n(e,bt,l),n(e,wl,l),M(wt,e,l),n(e,Tl,l),M(Tt,e,l),n(e,hl,l),n(e,ht,l),n(e,fl,l),M(ne,e,l),n(e,Ul,l),n(e,ft,l),n(e,jl,l),M(Ut,e,l),n(e,Il,l),n(e,Kt,l),_l=!0},p(e,[l]){const _={};l&1&&(_.fw=e[0]),b.$set(_);let ee=Z;Z=Xa(e),Z!==ee&&(B(),m(jt[ee],1,1,()=>{jt[ee]=null}),k(),v=jt[Z],v||(v=jt[Z]=Va[Z](e),v.c()),p(v,1),v.m(Wt.parentNode,Wt));let Nl=$;$=Ha(e),$!==Nl&&(B(),m(It[Nl],1,1,()=>{It[Nl]=null}),k(),x=It[$],x||(x=It[$]=za[$](e),x.c()),p(x,1),x.m(Rt.parentNode,Rt));let Vl=G;G=Ea(e),G!==Vl&&(B(),m(_t[Vl],1,1,()=>{_t[Vl]=null}),k(),C=_t[G],C||(C=_t[G]=Qa[G](e),C.c()),p(C,1),C.m(Nt.parentNode,Nt));let Xl=W;W=Fa(e),W!==Xl&&(B(),m(gt[Xl],1,1,()=>{gt[Xl]=null}),k(),R=gt[W],R||(R=gt[W]=Ya[W](e),R.c()),p(R,1),R.m(Vt.parentNode,Vt));let zl=N;N=Sa(e),N!==zl&&(B(),m(kt[zl],1,1,()=>{kt[zl]=null}),k(),V=kt[N],V||(V=kt[N]=qa[N](e),V.c()),p(V,1),V.m(Xt.parentNode,Xt));let Hl=X;X=La(e),X!==Hl&&(B(),m(Bt[Hl],1,1,()=>{Bt[Hl]=null}),k(),z=Bt[X],z||(z=Bt[X]=Aa[X](e),z.c()),p(z,1),z.m(zt.parentNode,zt));let Ql=H;H=Pa(e),H!==Ql&&(B(),m(Zt[Ql],1,1,()=>{Zt[Ql]=null}),k(),Q=Zt[H],Q||(Q=Zt[H]=Da[H](e),Q.c()),p(Q,1),Q.m(qt.parentNode,qt));const mn={};l&2&&(mn.$$scope={dirty:l,ctx:e}),se.$set(mn);const pn={};l&2&&(pn.$$scope={dirty:l,ctx:e}),le.$set(pn);let El=E;E=Oa(e),E!==El&&(B(),m(vt[El],1,1,()=>{vt[El]=null}),k(),Y=vt[E],Y||(Y=vt[E]=Ka[E](e),Y.c()),p(Y,1),Y.m(St.parentNode,St));let Yl=F;F=tn(e),F!==Yl&&(B(),m($t[Yl],1,1,()=>{$t[Yl]=null}),k(),q=$t[F],q||(q=$t[F]=en[F](e),q.c()),p(q,1),q.m(At.parentNode,At));let Fl=S;S=ln(e),S!==Fl&&(B(),m(xt[Fl],1,1,()=>{xt[Fl]=null}),k(),A=xt[S],A||(A=xt[S]=sn[S](e),A.c()),p(A,1),A.m(Lt.parentNode,Lt));let ql=L;L=nn(e),L!==ql&&(B(),m(Gt[ql],1,1,()=>{Gt[ql]=null}),k(),D=Gt[L],D||(D=Gt[L]=an[L](e),D.c()),p(D,1),D.m(Dt.parentNode,Dt));let Sl=P;P=rn(e),P!==Sl&&(B(),m(Ct[Sl],1,1,()=>{Ct[Sl]=null}),k(),K=Ct[P],K||(K=Ct[P]=on[P](e),K.c()),p(K,1),K.m(Pt.parentNode,Pt));const cn={};l&2&&(cn.$$scope={dirty:l,ctx:e}),ae.$set(cn);const un={};l&2&&(un.$$scope={dirty:l,ctx:e}),ne.$set(un)},i(e){_l||(p(b.$$.fragment,e),p(j.$$.fragment,e),p(v),p(x),p(me.$$.fragment,e),p(ce.$$.fragment,e),p(ue.$$.fragment,e),p(Me.$$.fragment,e),p(Je.$$.fragment,e),p(be.$$.fragment,e),p(C),p(fe.$$.fragment,e),p(R),p(V),p(z),p(ke.$$.fragment,e),p(Q),p(Ze.$$.fragment,e),p($e.$$.fragment,e),p(se.$$.fragment,e),p(Ge.$$.fragment,e),p(We.$$.fragment,e),p(Re.$$.fragment,e),p(le.$$.fragment,e),p(Ve.$$.fragment,e),p(ze.$$.fragment,e),p(He.$$.fragment,e),p(Ee.$$.fragment,e),p(Ye.$$.fragment,e),p(Se.$$.fragment,e),p(Ae.$$.fragment,e),p(Pe.$$.fragment,e),p(Ke.$$.fragment,e),p(et.$$.fragment,e),p(tt.$$.fragment,e),p(lt.$$.fragment,e),p(nt.$$.fragment,e),p(it.$$.fragment,e),p(Y),p(ct.$$.fragment,e),p(q),p(A),p(D),p(K),p(Jt.$$.fragment,e),p(ae.$$.fragment,e),p(wt.$$.fragment,e),p(Tt.$$.fragment,e),p(ne.$$.fragment,e),p(Ut.$$.fragment,e),_l=!0)},o(e){m(b.$$.fragment,e),m(j.$$.fragment,e),m(v),m(x),m(me.$$.fragment,e),m(ce.$$.fragment,e),m(ue.$$.fragment,e),m(Me.$$.fragment,e),m(Je.$$.fragment,e),m(be.$$.fragment,e),m(C),m(fe.$$.fragment,e),m(R),m(V),m(z),m(ke.$$.fragment,e),m(Q),m(Ze.$$.fragment,e),m($e.$$.fragment,e),m(se.$$.fragment,e),m(Ge.$$.fragment,e),m(We.$$.fragment,e),m(Re.$$.fragment,e),m(le.$$.fragment,e),m(Ve.$$.fragment,e),m(ze.$$.fragment,e),m(He.$$.fragment,e),m(Ee.$$.fragment,e),m(Ye.$$.fragment,e),m(Se.$$.fragment,e),m(Ae.$$.fragment,e),m(Pe.$$.fragment,e),m(Ke.$$.fragment,e),m(et.$$.fragment,e),m(tt.$$.fragment,e),m(lt.$$.fragment,e),m(nt.$$.fragment,e),m(it.$$.fragment,e),m(Y),m(ct.$$.fragment,e),m(q),m(A),m(D),m(K),m(Jt.$$.fragment,e),m(ae.$$.fragment,e),m(wt.$$.fragment,e),m(Tt.$$.fragment,e),m(ne.$$.fragment,e),m(Ut.$$.fragment,e),_l=!1},d(e){e&&(a(o),a(t),a(c),a(U),a(Ot),a(Wt),a(ie),a(es),a(Rt),a(ts),a(pe),a(ss),a(ls),a(as),a(de),a(ns),a(os),a(rs),a(ye),a(is),a(ms),a(we),a(ps),a(Nt),a(Te),a(cs),a(te),a(us),a(he),a(ds),a(Ms),a(Vt),a(Ue),a(Js),a(je),a(ys),a(Xt),a(Ie),a(bs),a(zt),a(_e),a(ws),a(I),a(hs),a(O),a(js),a(ge),a(Is),a(_s),a(qt),a(Be),a(gs),a(ks),a(ve),a(Bs),a(Zs),a(vs),a(xe),a($s),a(xs),a(Ce),a(Gs),a(Cs),a(Ws),a(Ne),a(Rs),a(Ns),a(Vs),a(Xe),a(Xs),a(zs),a(Hs),a(Qe),a(Qs),a(Es),a(Ys),a(Fe),a(Fs),a(qe),a(qs),a(Ss),a(As),a(Le),a(Ls),a(De),a(Ds),a(Ps),a(Ks),a(Oe),a(Os),a(el),a(tl),a(st),a(sl),a(ll),a(at),a(al),a(nl),a(ot),a(ol),a(rt),a(rl),a(il),a(mt),a(ml),a(St),a(pt),a(pl),a(cl),a(At),a(ut),a(ul),a(Lt),a(dt),a(dl),a(Dt),a(Mt),a(Ml),a(Pt),a(Jl),a(yt),a(yl),a(bl),a(bt),a(wl),a(Tl),a(hl),a(ht),a(fl),a(Ul),a(ft),a(jl),a(Il),a(Kt)),a(s),J(b,e),J(j,e),jt[Z].d(e),It[$].d(e),J(me,e),J(ce,e),J(ue,e),J(Me,e),J(Je,e),J(be,e),_t[G].d(e),J(fe,e),gt[W].d(e),kt[N].d(e),Bt[X].d(e),J(ke,e),Zt[H].d(e),J(Ze,e),J($e,e),J(se,e),J(Ge,e),J(We,e),J(Re,e),J(le,e),J(Ve,e),J(ze,e),J(He,e),J(Ee,e),J(Ye,e),J(Se,e),J(Ae,e),J(Pe,e),J(Ke,e),J(et,e),J(tt,e),J(lt,e),J(nt,e),J(it,e),vt[E].d(e),J(ct,e),$t[F].d(e),xt[S].d(e),Gt[L].d(e),Ct[P].d(e),J(Jt,e),J(ae,e),J(wt,e),J(Tt,e),J(ne,e),J(Ut,e)}}}const to='{"title":"Tokenizadores Rápidos en un Pipeline de Question-Answering","local":"fast-tokenizers-in-the-qa-pipeline","sections":[{"title":"Usando el pipeline de question-answering","local":"using-the-question-answering-pipeline","sections":[],"depth":2},{"title":"Usando un modelo para question answering","local":"using-a-model-for-question-answering","sections":[],"depth":2},{"title":"Manejando contextos largos","local":"handling-long-contexts","sections":[],"depth":2}],"depth":1}';function so(y,s,o){let t="pt";return hn(()=>{const c=new URLSearchParams(window.location.search);o(0,t=c.get("fw")||"pt")}),[t]}class uo extends fn{constructor(s){super(),Un(this,s,so,eo,Tn,{})}}export{uo as component};
