import{s as ba,o as Ta,n as gs}from"../chunks/scheduler.37c15a92.js";import{S as ha,i as fa,g as d,s as r,r as c,m as il,H as Ma,A as ja,h as b,f as n,c as m,j as Bs,u as M,x as h,n as rl,E as Ua,k as Ds,y as B,a,v as U,t as p,b as C,d as J,w as y,p as k}from"../chunks/index.2bf4358c.js";import{T as Cs}from"../chunks/Tip.363c041f.js";import{Y as ya}from"../chunks/Youtube.1e50a667.js";import{C as T}from"../chunks/CodeBlock.4e987730.js";import{C as wa}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{F as Ia}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as ks,E as _a}from"../chunks/getInferenceSnippets.8b9eb92a.js";function Ba(w){let e,i;return e=new wa({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Ca(w){let e,i;return e=new wa({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function ka(w){let e,i;return e=new ya({props:{id:"b3u8RzBCX9Y"}}),{c(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function ga(w){let e,i;return e=new ya({props:{id:"_wxyB3j3mk4"}}),{c(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function $a(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Za(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Qa(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function xa(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function va(w){let e,i;return e=new T({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKCklMEElMjMlMjAlRDAlOUMlRDAlQjAlRDElODElRDAlQkElRDAlQjglRDElODAlRDElODMlRDAlQjUlRDAlQkMlMjAlRDAlQjIlRDElODElRDAlQjUlMkMlMjAlRDAlQkElRDElODAlRDAlQkUlRDAlQkMlRDAlQjUlMjAlRDElODIlRDAlQkUlRDAlQkElRDAlQjUlRDAlQkQlRDAlQkUlRDAlQjIlMjAlRDAlQkElRDAlQkUlRDAlQkQlRDElODIlRDAlQjUlRDAlQkElRDElODElRDElODIlRDAlQjAlMEFtYXNrJTIwJTNEJTIwJTVCaSUyMCElM0QlMjAxJTIwZm9yJTIwaSUyMGluJTIwc2VxdWVuY2VfaWRzJTVEJTBBJTIzJTIwJUQwJTk0JUQwJUI1JUQwJUJDJUQwJUIwJUQxJTgxJUQwJUJBJUQwJUI4JUQxJTgwJUQxJTgzJUQwJUI1JUQwJUJDJTIwJUQxJTgyJUQwJUJFJUQwJUJBJUQwJUI1JUQwJUJEJTIwJTVCQ0xTJTVEJTBBbWFzayU1QjAlNUQlMjAlM0QlMjBGYWxzZSUwQW1hc2slMjAlM0QlMjB0Zi5jb25zdGFudChtYXNrKSU1Qk5vbmUlNUQlMEElMEFzdGFydF9sb2dpdHMlMjAlM0QlMjB0Zi53aGVyZShtYXNrJTJDJTIwLTEwMDAwJTJDJTIwc3RhcnRfbG9naXRzKSUwQWVuZF9sb2dpdHMlMjAlM0QlMjB0Zi53aGVyZShtYXNrJTJDJTIwLTEwMDAwJTJDJTIwZW5kX2xvZ2l0cyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Маскируем все, кроме токенов контекста</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"># Демаскируем токен [CLS]</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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Ra(w){let e,i;return e=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKCklMEElMjMlMjAlRDAlOUMlRDAlQjAlRDElODElRDAlQkElRDAlQjglRDElODAlRDElODMlRDAlQjUlRDAlQkMlMjAlRDAlQjIlRDElODElRDAlQjUlMkMlMjAlRDAlQkElRDElODAlRDAlQkUlRDAlQkMlRDAlQjUlMjAlRDElODIlRDAlQkUlRDAlQkElRDAlQjUlRDAlQkQlRDAlQkUlRDAlQjIlMjAlRDAlQkElRDAlQkUlRDAlQkQlRDElODIlRDAlQjUlRDAlQkElRDElODElRDElODIlRDAlQjAlMEFtYXNrJTIwJTNEJTIwJTVCaSUyMCElM0QlMjAxJTIwZm9yJTIwaSUyMGluJTIwc2VxdWVuY2VfaWRzJTVEJTBBJTIzJTIwJUQwJTk0JUQwJUI1JUQwJUJDJUQwJUIwJUQxJTgxJUQwJUJBJUQwJUI4JUQxJTgwJUQxJTgzJUQwJUI1JUQwJUJDJTIwJUQxJTgyJUQwJUJFJUQwJUJBJUQwJUI1JUQwJUJEJTIwJTVCQ0xTJTVEJTBBbWFzayU1QjAlNUQlMjAlM0QlMjBGYWxzZSUwQW1hc2slMjAlM0QlMjB0b3JjaC50ZW5zb3IobWFzayklNUJOb25lJTVEJTBBJTBBc3RhcnRfbG9naXRzJTVCbWFzayU1RCUyMCUzRCUyMC0xMDAwMCUwQWVuZF9sb2dpdHMlNUJtYXNrJTVEJTIwJTNEJTIwLTEwMDAw",highlighted:`<span class="hljs-keyword">import</span> torch

sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Маскируем все, кроме токенов контекста</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"># Демаскируем токен [CLS]</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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Ga(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Va(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Wa(w){let e,i="Затем мы замаскируем значения, где <code>start_index &gt; end_index</code>, установив для них значение <code>0</code> (все остальные вероятности - положительные числа). Функция <code>np.triu()</code> возвращает верхнюю треугольную часть двумерного тензора, переданного в качестве аргумента, поэтому она сделает эту маскировку за нас:",t,o,u;return o=new T({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(){e=d("p"),e.innerHTML=i,t=r(),c(o.$$.fragment)},l(f){e=b(f,"P",{"data-svelte-h":!0}),h(e)!=="svelte-sulffv"&&(e.innerHTML=i),t=m(f),M(o.$$.fragment,f)},m(f,j){a(f,e,j),a(f,t,j),U(o,f,j),u=!0},i(f){u||(J(o.$$.fragment,f),u=!0)},o(f){p(o.$$.fragment,f),u=!1},d(f){f&&(n(e),n(t)),y(o,f)}}}function Na(w){let e,i="Затем мы замаскируем значения, где <code>start_index &gt; end_index</code>, установив для них значение <code>0</code> (все остальные вероятности - положительные числа). Функция <code>torch.triu()</code> возвращает верхнюю треугольную часть двумерного тензора, переданного в качестве аргумента, поэтому она сделает эту маскировку за нас:",t,o,u;return o=new T({props:{code:"c2NvcmVzJTIwJTNEJTIwdG9yY2gudHJpdShzY29yZXMp",highlighted:"scores = torch.triu(scores)",wrap:!1}}),{c(){e=d("p"),e.innerHTML=i,t=r(),c(o.$$.fragment)},l(f){e=b(f,"P",{"data-svelte-h":!0}),h(e)!=="svelte-1hg914h"&&(e.innerHTML=i),t=m(f),M(o.$$.fragment,f)},m(f,j){a(f,e,j),a(f,t,j),U(o,f,j),u=!0},i(f){u||(J(o.$$.fragment,f),u=!0)},o(f){p(o.$$.fragment,f),u=!1},d(f){f&&(n(e),n(t)),y(o,f)}}}function Ea(w){let e,i="✏️ <strong>Попробуйте!</strong> Вычислите начальный и конечный индексы для пяти наиболее вероятных ответов.";return{c(){e=d("p"),e.innerHTML=i},l(t){e=b(t,"P",{"data-svelte-h":!0}),h(e)!=="svelte-10u3bvm"&&(e.innerHTML=i)},m(t,o){a(t,e,o)},p:gs,d(t){t&&n(e)}}}function Xa(w){let e,i="✏️ <strong>Попробуйте!</strong> Используйте лучшие оценки, которые вы вычислили ранее, чтобы показать пять наиболее вероятных ответов. Чтобы проверить результаты, вернитесь к первому конвейеру и передайте <code>top_k=5</code> при его вызове.";return{c(){e=d("p"),e.innerHTML=i},l(t){e=b(t,"P",{"data-svelte-h":!0}),h(e)!=="svelte-5bia3"&&(e.innerHTML=i)},m(t,o){a(t,e,o)},p:gs,d(t){t&&n(e)}}}function za(w){let e,i,t,o;return e=new T({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 T({props:{code:"KDIlMkMlMjAzODQp",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">384</span>)',wrap:!1}}),{c(){c(e.$$.fragment),i=r(),c(t.$$.fragment)},l(u){M(e.$$.fragment,u),i=m(u),M(t.$$.fragment,u)},m(u,f){U(e,u,f),a(u,i,f),U(t,u,f),o=!0},i(u){o||(J(e.$$.fragment,u),J(t.$$.fragment,u),o=!0)},o(u){p(e.$$.fragment,u),p(t.$$.fragment,u),o=!1},d(u){u&&n(i),y(e,u),y(t,u)}}}function Ha(w){let e,i,t,o;return e=new T({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 T({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMzg0JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>])',wrap:!1}}),{c(){c(e.$$.fragment),i=r(),c(t.$$.fragment)},l(u){M(e.$$.fragment,u),i=m(u),M(t.$$.fragment,u)},m(u,f){U(e,u,f),a(u,i,f),U(t,u,f),o=!0},i(u){o||(J(e.$$.fragment,u),J(t.$$.fragment,u),o=!0)},o(u){p(e.$$.fragment,u),p(t.$$.fragment,u),o=!1},d(u){u&&n(i),y(e,u),y(t,u)}}}function Fa(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Ya(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Aa(w){let e,i;return e=new T({props:{code:"c2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcygpJTBBJTIzJTIwJUQwJTlDJUQwJUIwJUQxJTgxJUQwJUJBJUQwJUI4JUQxJTgwJUQxJTgzJUQwJUI1JUQwJUJDJTIwJUQwJUIyJUQxJTgxJUQwJUI1JTJDJTIwJUQwJUJBJUQxJTgwJUQwJUJFJUQwJUJDJUQwJUI1JTIwJUQxJTgyJUQwJUJFJUQwJUJBJUQwJUI1JUQwJUJEJUQwJUJFJUQwJUIyJTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTgyJUQwJUI1JUQwJUJBJUQxJTgxJUQxJTgyJUQwJUIwJTBBbWFzayUyMCUzRCUyMCU1QmklMjAhJTNEJTIwMSUyMGZvciUyMGklMjBpbiUyMHNlcXVlbmNlX2lkcyU1RCUwQSUyMyUyMCVEMCU5NCVEMCVCNSVEMCVCQyVEMCVCMCVEMSU4MSVEMCVCQSVEMCVCOCVEMSU4MCVEMSU4MyVEMCVCNSVEMCVCQyUyMCVEMSU4MiVEMCVCRSVEMCVCQSVEMCVCNSVEMCVCRCUyMCU1QkNMUyU1RC4lMEFtYXNrJTVCMCU1RCUyMCUzRCUyMEZhbHNlJTBBJTIzJTIwJUQwJTlDJUQwJUIwJUQxJTgxJUQwJUJBJUQwJUI4JUQxJTgwJUQxJTgzJUQwJUI1JUQwJUJDJTIwJUQwJUIyJUQxJTgxJUQwJUI1JTIwJTVCUEFEJTVEJTIwJUQxJTgyJUQwJUJFJUQwJUJBJUQwJUI1JUQwJUJEJUQxJThCJTBBbWFzayUyMCUzRCUyMHRmLm1hdGgubG9naWNhbF9vcih0Zi5jb25zdGFudChtYXNrKSU1Qk5vbmUlNUQlMkMlMjBpbnB1dHMlNUIlMjJhdHRlbnRpb25fbWFzayUyMiU1RCUyMCUzRCUzRCUyMDApJTBBJTBBc3RhcnRfbG9naXRzJTIwJTNEJTIwdGYud2hlcmUobWFzayUyQyUyMC0xMDAwMCUyQyUyMHN0YXJ0X2xvZ2l0cyklMEFlbmRfbG9naXRzJTIwJTNEJTIwdGYud2hlcmUobWFzayUyQyUyMC0xMDAwMCUyQyUyMGVuZF9sb2dpdHMp",highlighted:`sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Маскируем все, кроме токенов контекста</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"># Демаскируем токен [CLS].</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
<span class="hljs-comment"># Маскируем все [PAD] токены</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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Sa(w){let e,i;return e=new T({props:{code:"c2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcygpJTBBJTIzJTIwJUQwJTlDJUQwJUIwJUQxJTgxJUQwJUJBJUQwJUI4JUQxJTgwJUQxJTgzJUQwJUI1JUQwJUJDJTIwJUQwJUIyJUQxJTgxJUQwJUI1JTJDJTIwJUQwJUJBJUQxJTgwJUQwJUJFJUQwJUJDJUQwJUI1JTIwJUQxJTgyJUQwJUJFJUQwJUJBJUQwJUI1JUQwJUJEJUQwJUJFJUQwJUIyJTIwJUQwJUJBJUQwJUJFJUQwJUJEJUQxJTgyJUQwJUI1JUQwJUJBJUQxJTgxJUQxJTgyJUQwJUIwJTBBbWFzayUyMCUzRCUyMCU1QmklMjAhJTNEJTIwMSUyMGZvciUyMGklMjBpbiUyMHNlcXVlbmNlX2lkcyU1RCUwQSUyMyUyMCVEMCU5NCVEMCVCNSVEMCVCQyVEMCVCMCVEMSU4MSVEMCVCQSVEMCVCOCVEMSU4MCVEMSU4MyVEMCVCNSVEMCVCQyUyMCVEMSU4MiVEMCVCRSVEMCVCQSVEMCVCNSVEMCVCRCUyMCU1QkNMUyU1RC4lMEFtYXNrJTVCMCU1RCUyMCUzRCUyMEZhbHNlJTBBJTIzJTIwJUQwJTlDJUQwJUIwJUQxJTgxJUQwJUJBJUQwJUI4JUQxJTgwJUQxJTgzJUQwJUI1JUQwJUJDJTIwJUQwJUIyJUQxJTgxJUQwJUI1JTIwJTVCUEFEJTVEJTIwJUQxJTgyJUQwJUJFJUQwJUJBJUQwJUI1JUQwJUJEJUQxJThCJTBBbWFzayUyMCUzRCUyMHRvcmNoLmxvZ2ljYWxfb3IodG9yY2gudGVuc29yKG1hc2spJTVCTm9uZSU1RCUyQyUyMChpbnB1dHMlNUIlMjJhdHRlbnRpb25fbWFzayUyMiU1RCUyMCUzRCUzRCUyMDApKSUwQSUwQXN0YXJ0X2xvZ2l0cyU1Qm1hc2slNUQlMjAlM0QlMjAtMTAwMDAlMEFlbmRfbG9naXRzJTVCbWFzayU1RCUyMCUzRCUyMC0xMDAwMA==",highlighted:`sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Маскируем все, кроме токенов контекста</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"># Демаскируем токен [CLS].</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
<span class="hljs-comment"># Маскируем все [PAD] токены</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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Da(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function qa(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function La(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Pa(w){let e,i;return e=new T({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(){c(e.$$.fragment)},l(t){M(e.$$.fragment,t)},m(t,o){U(e,t,o),i=!0},i(t){i||(J(e.$$.fragment,t),i=!0)},o(t){p(e.$$.fragment,t),i=!1},d(t){y(e,t)}}}function Ka(w){let e,i="✏️ <strong>Попробуйте!</strong> Адаптируйте приведенный выше код, чтобы он возвращал оценки и промежутки для пяти наиболее вероятных ответов (в целом, а не по частям).";return{c(){e=d("p"),e.innerHTML=i},l(t){e=b(t,"P",{"data-svelte-h":!0}),h(e)!=="svelte-1llzwth"&&(e.innerHTML=i)},m(t,o){a(t,e,o)},p:gs,d(t){t&&n(e)}}}function Oa(w){let e,i="✏️ <strong>Попробуйте!</strong> Используйте лучшие оценки, которые вы вычислили ранее, чтобы показать пять наиболее вероятных ответов (для всего контекста, а не для каждого фрагмента). Чтобы проверить результаты, вернитесь к первому конвейеру и передайте <code>top_k=5</code> при его вызове.";return{c(){e=d("p"),e.innerHTML=i},l(t){e=b(t,"P",{"data-svelte-h":!0}),h(e)!=="svelte-8w0j10"&&(e.innerHTML=i)},m(t,o){a(t,e,o)},p:gs,d(t){t&&n(e)}}}function li(w){let e,i,t,o,u,f,j,Ot,g,$,Rt,ml,qs="Теперь мы погрузимся в конвейер <code>question-answering</code> и посмотрим, как использовать смещения (offsets) для получения ответа на вопрос из контекста, подобно тому, как мы делали это для сгруппированных сущностей в предыдущем разделе. Затем мы посмотрим, как работать с очень длинными контекстами, которые в итоге будут обрезаны. Вы можете пропустить этот раздел, если вас не интересует задача ответа на вопрос.",le,Z,Q,Gt,pl,te,Jl,Ls='Как мы видели в <a href="../chapter1/1">Главе 1</a>, для получения ответа на вопрос мы можем использовать конвейер <code>question-answering</code> следующим образом:',ee,ol,se,cl,ne,Ml,Ps="В отличие от других конвейеров, которые не могут обрезать и разбивать на части тексты, длина которых превышает максимально допустимую моделью (и поэтому могут пропустить информацию в конце документа), этот конвейер может работать с очень длинными контекстами и вернет ответ на вопрос, даже если он находится в конце:",ae,Ul,ie,yl,re,wl,Ks="Давайте посмотрим, как он справится со всем этим!",me,ul,pe,dl,Os='Как и в любом другом конвейере, мы начинаем с токенизации входных данных, а затем отправляем их через модель. По умолчанию для конвейера <code>question-answering</code> используется контрольная точка <a href="https://huggingface.co/distilbert-base-cased-distilled-squad" rel="nofollow"><code>distilbert-base-cased-distilled-squad</code></a> (слово “squad” в названии происходит от набора данных, на котором дообучили модель; подробнее о наборе данных SQuAD мы поговорим в <a href="../chapter7/7">главе 7</a>):',Je,x,v,Vt,bl,ln="Обратите внимание, что мы токенизируем вопрос и контекст как пару, причем вопрос стоит первым.",oe,tl,tn='<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"/>',ce,Tl,en="Модели для ответов на вопросы работают немного иначе, чем модели, которые мы рассматривали до сих пор. На примере картинки выше модель была обучена предсказывать индекс токена, с которого начинается ответ (здесь 21), и индекс токена, на котором ответ заканчивается (здесь 24). Вот почему эти модели возвращают не один тензор логитов, а два: один для логитов, соответствующих начальному токену ответа, и один для логитов, соответствующих конечному токену ответа. Поскольку в данном случае у нас только один вход, содержащий 66 токенов, мы получаем:",Me,hl,Ue,R,G,Wt,fl,sn="Чтобы преобразовать эти логиты в вероятности, мы применим функцию softmax, но перед этим нам нужно убедиться, что мы маскируем индексы, которые не являются частью контекста. Наш вход - <code>[CLS] вопрос [SEP] контекст [SEP]</code>, поэтому нам нужно замаскировать токены вопроса, а также токен <code>[SEP]</code>. Однако мы оставим токен <code>[CLS]</code>, поскольку некоторые модели используют его для указания на то, что ответ не находится в контексте.",ye,jl,nn="Поскольку впоследствии мы будем применять softmax, нам просто нужно заменить логиты, которые мы хотим замаскировать, на большое отрицательное число. Здесь мы используем <code>-10000</code>:",we,V,W,Nt,Il,an="Теперь, когда мы правильно замаскировали логиты, соответствующие позициям, которые мы не хотим предсказывать, мы можем применить softmax:",ue,N,E,Et,_l,rn="На этом этапе мы могли бы взять argmax вероятностей начала и конца - но в итоге мы можем получить начальный индекс, который больше конечного, поэтому нам нужно принять еще несколько мер предосторожности. Мы вычислим вероятности каждого возможного <code>start_index</code> и <code>end_index</code>, где <code>start_index &lt;= end_index</code>, а затем возьмем кортеж <code>(start_index, end_index)</code> с наибольшей вероятностью.",de,I,$s,Xt,mn="start_index",Zs,zt,pn="end_index",Qs,Ht,Jn="start_index",xs,Ft,on="end_index",vs,be,ua='<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>',Te,O,Rs,he,da='<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>',fe,Yt,cn="start_index <= end_index",Gs,je,Bl,Mn="Сначала вычислим все возможные произведения:",Ie,Cl,_e,X,z,At,kl,Un="Теперь нам осталось получить индекс максимума. Поскольку PyTorch вернет индекс в плоском тензоре, для получения <code>start_index</code> и <code>end_index</code> нам нужно воспользоваться операциями получения целой части <code>//</code> и остатка <code>%</code> от деления:",Be,gl,Ce,$l,yn="Мы еще не закончили, но, по крайней мере, у нас уже есть корректная оценка ответа (вы можете проверить это, сравнив ее с первым результатом в предыдущем разделе):",ke,Zl,ge,el,$e,Ql,wn="У нас есть <code>start_index</code> и <code>end_index</code> ответа в терминах токенов, так что теперь нам просто нужно преобразовать их в индексы символов в контексте. Именно здесь смещения будут очень полезны. Мы можем захватить их и использовать, как мы это делали в задаче token classification:",Ze,xl,Qe,vl,un="Осталось только отформатировать все, чтобы получить результат:",xe,Rl,ve,Gl,Re,Vl,dn="Отлично! Это то же самое, что и в нашем первом примере!",Ge,sl,Ve,Wl,We,Nl,bn="Если мы попытаемся токенизировать вопрос и длинный контекст, который мы использовали в качестве примера ранее, мы получим количество токенов, превышающее максимальную длину, используемую в конвейере <code>question-answering</code> (которая составляет 384):",Ne,El,Ee,Xl,Xe,zl,Tn="Поэтому нам нужно обрезать входные данные до максимальной длины. Есть несколько способов сделать это, но мы не хотим усекать вопрос, а только контекст. Поскольку контекст - это второе предложение, мы используем стратегию усечения <code>&quot; only_second&quot;</code>. Проблема, которая возникает в этом случае, заключается в том, что ответ на вопрос может не находиться в усеченном контексте. Например, здесь мы выбрали вопрос, ответ на который находится в конце контекста, а когда мы его усекаем, то этого ответа в нём нет:",ze,Hl,He,Fl,Fe,Yl,hn="Это означает, что модели будет сложно выбрать правильный ответ. Чтобы исправить это, конвейер <code>question-answering</code> позволяет нам разбить контекст на более мелкие фрагменты, указав максимальную длину. Чтобы убедиться, что мы не разбиваем контекст на фрагменты именно в том месте, которое не позволяет найти ответ, он также включает некоторое перекрытие между фрагментами.",Ye,Al,fn="Мы можем заставить токенизатор (быстрый или медленный) сделать это за нас, добавив <code>return_overflowing_tokens=True</code>, и указать желаемое перекрытие с помощью аргумента <code>stride</code>. Вот пример, использующий небольшое предложение:",Ae,Sl,Se,Dl,De,ql,jn="Как мы видим, предложение было разбито на части таким образом, что каждая запись в <code>inputs[&quot;input_ids&quot;]</code> содержит не более 6 токенов (чтобы последняя запись была такого же размера, как и остальные, нам придется добавить дополняющие токены (padding tokens)), и между каждой частью есть перекрытие в 2 токена.",qe,Ll,In="Давайте посмотрим на результат токенизации:",Le,Pl,Pe,Kl,Ke,Ol,_n="Как и ожидалось, мы получаем идентификаторы входов и маску внимания. Последний ключ, <code>overflow_to_sample_mapping</code>, представляет собой карту, которая говорит нам, какому предложению соответствует каждый из результатов - здесь у нас есть 7 результатов, которые все происходят из (единственного) предложения, которое мы передали токенизатору:",Oe,lt,ls,tt,ts,et,Bn="Это более полезно, когда мы токенизируем несколько предложений вместе. Например, так:",es,st,ss,nt,Cn="gets us:",ns,at,as,it,kn="что означает, что первое предложение разбито на 7 частей, как и раньше, а следующие 4 части взяты из второго предложения.",is,rt,gn="Теперь давайте вернемся к нашему длинному контексту. По умолчанию конвейер <code>question-answering</code> использует максимальную длину 384, как мы уже упоминали ранее, и stride 128, что соответствует тому, как была дообучена модель (вы можете настроить эти параметры, передав аргументы <code>max_seq_len</code> и <code>stride</code> при вызове конвейера). Таким образом, мы будем использовать эти параметры при токенизации. Мы также добавим дополняющие токены (padding tokens) (чтобы иметь образцы одинаковой длины, чтобы можно было строить тензоры), а также запросим смещения:",rs,mt,ms,pt,$n="Эти <code>inputs</code> будут содержать идентификаторы входов и маски внимания, которые ожидает модель, а также смещения и <code>overflow_to_sample_mapping</code>, о которых мы только что говорили. Поскольку эти два параметра не используются моделью, мы выкинем их из <code>inputs</code> (и не будем хранить карту, поскольку она здесь не нужна) перед преобразованием в тензор:",ps,H,F,St,Jt,Zn="Наш длинный контекст был разделен на две части, а это значит, что после того, как он пройдет через нашу модель, у нас будет два набора начальных и конечных логитов:",Js,ot,os,Y,A,Dt,ct,Qn="Как и раньше, мы сначала маскируем токены, которые не являются частью контекста, прежде чем использовать softmax. Мы также маскируем все дополняющие токены (padding tokens) (отмеченные маской внимания):",cs,S,D,qt,Mt,xn="Затем мы можем использовать softmax для преобразования логитов в вероятности:",Ms,q,L,Lt,Ut,vn="Следующий шаг аналогичен тому, что мы делали для малого контекста, но мы повторяем его для каждого из наших двух фрагментов. Мы присваиваем оценку всем возможным фрагментам ответа, а затем выбираем фрагмент с наилучшей оценкой:",Us,P,K,Pt,yt,ys,wt,Rn="Эти два кандидата соответствуют лучшим ответам, которые модель смогла найти в каждом фрагменте. Модель гораздо больше уверена в том, что правильный ответ находится во второй части (это хороший знак!). Теперь нам нужно сопоставить эти два диапазона токенов с диапазонами символов в контексте (для получения ответа нам нужно сопоставить только второй, но интересно посмотреть, что модель выбрала в первом фрагменте).",ws,nl,us,ut,Gn="<code>offsets</code>, которую мы взяли ранее, на самом деле является списком смещений, по одному списку на каждый фрагмент текста:",ds,dt,bs,bt,Ts,Tt,Vn="Если мы проигнорируем первый результат, то получим тот же результат, что и в нашем конвейере для этого длинного контекста - ура!",hs,al,fs,ht,Wn="На этом мы завершаем наше глубокое погружение в возможности токенизатора. В следующей главе мы снова применим все это на практике, когда покажем, как дообучить модель для ряда распространенных задач NLP.",js,ft,Is,Kt,_s;u=new Ia({props:{fw:w[0]}}),j=new ks({props:{title:"Быстрые токенизаторы в QA конвейере",local:"fast-tokenizers-in-the-qa-pipeline",headingTag:"h1"}});const Nn=[Ca,Ba],jt=[];function En(l,s){return l[0]==="pt"?0:1}g=En(w),$=jt[g]=Nn[g](w);const Xn=[ga,ka],It=[];function zn(l,s){return l[0]==="pt"?0:1}Z=zn(w),Q=It[Z]=Xn[Z](w),pl=new ks({props:{title:"Использование конвейера question-answering",local:"using-the-question-answering-pipeline",headingTag:"h2"}}),ol=new T({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}}),cl=new T({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}}),Ul=new T({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}}),yl=new T({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}}),ul=new ks({props:{title:"Использование модели для ответа на вопросы",local:"using-a-model-for-question-answering",headingTag:"h2"}});const Hn=[Za,$a],_t=[];function Fn(l,s){return l[0]==="pt"?0:1}x=Fn(w),v=_t[x]=Hn[x](w),hl=new T({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 Yn=[xa,Qa],Bt=[];function An(l,s){return l[0]==="pt"?0:1}R=An(w),G=Bt[R]=Yn[R](w);const Sn=[Ra,va],Ct=[];function Dn(l,s){return l[0]==="pt"?0:1}V=Dn(w),W=Ct[V]=Sn[V](w);const qn=[Va,Ga],kt=[];function Ln(l,s){return l[0]==="pt"?0:1}N=Ln(w),E=kt[N]=qn[N](w),Cl=new T({props:{code:"c2NvcmVzJTIwJTNEJTIwc3RhcnRfcHJvYmFiaWxpdGllcyU1QiUzQSUyQyUyME5vbmUlNUQlMjAqJTIwZW5kX3Byb2JhYmlsaXRpZXMlNUJOb25lJTJDJTIwJTNBJTVE",highlighted:'scores = start_probabilities[:, <span class="hljs-literal">None</span>] * end_probabilities[<span class="hljs-literal">None</span>, :]',wrap:!1}});const Pn=[Na,Wa],gt=[];function Kn(l,s){return l[0]==="pt"?0:1}X=Kn(w),z=gt[X]=Pn[X](w),gl=new T({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}}),Zl=new T({props:{code:"MC45Nzc3Mw==",highlighted:'<span class="hljs-number">0.97773</span>',wrap:!1}}),el=new Cs({props:{$$slots:{default:[Ea]},$$scope:{ctx:w}}}),xl=new T({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}}),Rl=new T({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}}),Gl=new T({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}}),sl=new Cs({props:{$$slots:{default:[Xa]},$$scope:{ctx:w}}}),Wl=new ks({props:{title:"Обработка длинных контекстов",local:"handling-long-contexts",headingTag:"h2"}}),El=new T({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}}),Xl=new T({props:{code:"NDYx",highlighted:'<span class="hljs-number">461</span>',wrap:!1}}),Hl=new T({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}}),Fl=new T({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}}),Sl=new T({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}}),Dl=new T({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}}),Pl=new T({props:{code:"cHJpbnQoaW5wdXRzLmtleXMoKSk=",highlighted:'<span class="hljs-built_in">print</span>(inputs.keys())',wrap:!1}}),Kl=new T({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}}),lt=new T({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 T({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}}),st=new T({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}}),at=new T({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}}),mt=new T({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 On=[Ha,za],$t=[];function la(l,s){return l[0]==="pt"?0:1}H=la(w),F=$t[H]=On[H](w),ot=new T({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 ta=[Ya,Fa],Zt=[];function ea(l,s){return l[0]==="pt"?0:1}Y=ea(w),A=Zt[Y]=ta[Y](w);const sa=[Sa,Aa],Qt=[];function na(l,s){return l[0]==="pt"?0:1}S=na(w),D=Qt[S]=sa[S](w);const aa=[qa,Da],xt=[];function ia(l,s){return l[0]==="pt"?0:1}q=ia(w),L=xt[q]=aa[q](w);const ra=[Pa,La],vt=[];function ma(l,s){return l[0]==="pt"?0:1}return P=ma(w),K=vt[P]=ra[P](w),yt=new T({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}}),nl=new Cs({props:{$$slots:{default:[Ka]},$$scope:{ctx:w}}}),dt=new T({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}}),bt=new T({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}}),al=new Cs({props:{$$slots:{default:[Oa]},$$scope:{ctx:w}}}),ft=new _a({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter6/3b.mdx"}}),{c(){e=d("meta"),i=r(),t=d("p"),o=r(),c(u.$$.fragment),f=r(),c(j.$$.fragment),Ot=r(),$.c(),Rt=r(),ml=d("p"),ml.innerHTML=qs,le=r(),Q.c(),Gt=r(),c(pl.$$.fragment),te=r(),Jl=d("p"),Jl.innerHTML=Ls,ee=r(),c(ol.$$.fragment),se=r(),c(cl.$$.fragment),ne=r(),Ml=d("p"),Ml.textContent=Ps,ae=r(),c(Ul.$$.fragment),ie=r(),c(yl.$$.fragment),re=r(),wl=d("p"),wl.textContent=Ks,me=r(),c(ul.$$.fragment),pe=r(),dl=d("p"),dl.innerHTML=Os,Je=r(),v.c(),Vt=r(),bl=d("p"),bl.textContent=ln,oe=r(),tl=d("div"),tl.innerHTML=tn,ce=r(),Tl=d("p"),Tl.textContent=en,Me=r(),c(hl.$$.fragment),Ue=r(),G.c(),Wt=r(),fl=d("p"),fl.innerHTML=sn,ye=r(),jl=d("p"),jl.innerHTML=nn,we=r(),W.c(),Nt=r(),Il=d("p"),Il.textContent=an,ue=r(),E.c(),Et=r(),_l=d("p"),_l.innerHTML=rn,de=r(),I=d("p"),$s=il("Если предположить, что события “Ответ начинается на "),Xt=d("code"),Xt.textContent=mn,Zs=il("” и “Ответ заканчивается на "),zt=d("code"),zt.textContent=pn,Qs=il("” независимы, то вероятность того, что ответ начинается на "),Ht=d("code"),Ht.textContent=Jn,xs=il(" и заканчивается на "),Ft=d("code"),Ft.textContent=on,vs=il(`, равна:
`),be=new Ma(!1),Te=r(),O=d("p"),Rs=il("Таким образом, чтобы вычислить все оценки, нам нужно просто вычислить все произведения"),he=new Ma(!1),fe=il(" где "),Yt=d("code"),Yt.textContent=cn,Gs=il("."),je=r(),Bl=d("p"),Bl.textContent=Mn,Ie=r(),c(Cl.$$.fragment),_e=r(),z.c(),At=r(),kl=d("p"),kl.innerHTML=Un,Be=r(),c(gl.$$.fragment),Ce=r(),$l=d("p"),$l.textContent=yn,ke=r(),c(Zl.$$.fragment),ge=r(),c(el.$$.fragment),$e=r(),Ql=d("p"),Ql.innerHTML=wn,Ze=r(),c(xl.$$.fragment),Qe=r(),vl=d("p"),vl.textContent=un,xe=r(),c(Rl.$$.fragment),ve=r(),c(Gl.$$.fragment),Re=r(),Vl=d("p"),Vl.textContent=dn,Ge=r(),c(sl.$$.fragment),Ve=r(),c(Wl.$$.fragment),We=r(),Nl=d("p"),Nl.innerHTML=bn,Ne=r(),c(El.$$.fragment),Ee=r(),c(Xl.$$.fragment),Xe=r(),zl=d("p"),zl.innerHTML=Tn,ze=r(),c(Hl.$$.fragment),He=r(),c(Fl.$$.fragment),Fe=r(),Yl=d("p"),Yl.innerHTML=hn,Ye=r(),Al=d("p"),Al.innerHTML=fn,Ae=r(),c(Sl.$$.fragment),Se=r(),c(Dl.$$.fragment),De=r(),ql=d("p"),ql.innerHTML=jn,qe=r(),Ll=d("p"),Ll.textContent=In,Le=r(),c(Pl.$$.fragment),Pe=r(),c(Kl.$$.fragment),Ke=r(),Ol=d("p"),Ol.innerHTML=_n,Oe=r(),c(lt.$$.fragment),ls=r(),c(tt.$$.fragment),ts=r(),et=d("p"),et.textContent=Bn,es=r(),c(st.$$.fragment),ss=r(),nt=d("p"),nt.textContent=Cn,ns=r(),c(at.$$.fragment),as=r(),it=d("p"),it.textContent=kn,is=r(),rt=d("p"),rt.innerHTML=gn,rs=r(),c(mt.$$.fragment),ms=r(),pt=d("p"),pt.innerHTML=$n,ps=r(),F.c(),St=r(),Jt=d("p"),Jt.textContent=Zn,Js=r(),c(ot.$$.fragment),os=r(),A.c(),Dt=r(),ct=d("p"),ct.textContent=Qn,cs=r(),D.c(),qt=r(),Mt=d("p"),Mt.textContent=xn,Ms=r(),L.c(),Lt=r(),Ut=d("p"),Ut.textContent=vn,Us=r(),K.c(),Pt=r(),c(yt.$$.fragment),ys=r(),wt=d("p"),wt.textContent=Rn,ws=r(),c(nl.$$.fragment),us=r(),ut=d("p"),ut.innerHTML=Gn,ds=r(),c(dt.$$.fragment),bs=r(),c(bt.$$.fragment),Ts=r(),Tt=d("p"),Tt.textContent=Vn,hs=r(),c(al.$$.fragment),fs=r(),ht=d("p"),ht.textContent=Wn,js=r(),c(ft.$$.fragment),Is=r(),Kt=d("p"),this.h()},l(l){const s=ja("svelte-u9bgzb",document.head);e=b(s,"META",{name:!0,content:!0}),s.forEach(n),i=m(l),t=b(l,"P",{}),Bs(t).forEach(n),o=m(l),M(u.$$.fragment,l),f=m(l),M(j.$$.fragment,l),Ot=m(l),$.l(l),Rt=m(l),ml=b(l,"P",{"data-svelte-h":!0}),h(ml)!=="svelte-1mtrbpx"&&(ml.innerHTML=qs),le=m(l),Q.l(l),Gt=m(l),M(pl.$$.fragment,l),te=m(l),Jl=b(l,"P",{"data-svelte-h":!0}),h(Jl)!=="svelte-6is037"&&(Jl.innerHTML=Ls),ee=m(l),M(ol.$$.fragment,l),se=m(l),M(cl.$$.fragment,l),ne=m(l),Ml=b(l,"P",{"data-svelte-h":!0}),h(Ml)!=="svelte-tujhko"&&(Ml.textContent=Ps),ae=m(l),M(Ul.$$.fragment,l),ie=m(l),M(yl.$$.fragment,l),re=m(l),wl=b(l,"P",{"data-svelte-h":!0}),h(wl)!=="svelte-db8cci"&&(wl.textContent=Ks),me=m(l),M(ul.$$.fragment,l),pe=m(l),dl=b(l,"P",{"data-svelte-h":!0}),h(dl)!=="svelte-12lmj6m"&&(dl.innerHTML=Os),Je=m(l),v.l(l),Vt=m(l),bl=b(l,"P",{"data-svelte-h":!0}),h(bl)!=="svelte-1hcvc88"&&(bl.textContent=ln),oe=m(l),tl=b(l,"DIV",{class:!0,"data-svelte-h":!0}),h(tl)!=="svelte-47wedv"&&(tl.innerHTML=tn),ce=m(l),Tl=b(l,"P",{"data-svelte-h":!0}),h(Tl)!=="svelte-12ycmmo"&&(Tl.textContent=en),Me=m(l),M(hl.$$.fragment,l),Ue=m(l),G.l(l),Wt=m(l),fl=b(l,"P",{"data-svelte-h":!0}),h(fl)!=="svelte-1lgkb5p"&&(fl.innerHTML=sn),ye=m(l),jl=b(l,"P",{"data-svelte-h":!0}),h(jl)!=="svelte-90vcep"&&(jl.innerHTML=nn),we=m(l),W.l(l),Nt=m(l),Il=b(l,"P",{"data-svelte-h":!0}),h(Il)!=="svelte-1ecyl2b"&&(Il.textContent=an),ue=m(l),E.l(l),Et=m(l),_l=b(l,"P",{"data-svelte-h":!0}),h(_l)!=="svelte-1dvwtbu"&&(_l.innerHTML=rn),de=m(l),I=b(l,"P",{});var _=Bs(I);$s=rl(_,"Если предположить, что события “Ответ начинается на "),Xt=b(_,"CODE",{"data-svelte-h":!0}),h(Xt)!=="svelte-8eqb3b"&&(Xt.textContent=mn),Zs=rl(_,"” и “Ответ заканчивается на "),zt=b(_,"CODE",{"data-svelte-h":!0}),h(zt)!=="svelte-9cistc"&&(zt.textContent=pn),Qs=rl(_,"” независимы, то вероятность того, что ответ начинается на "),Ht=b(_,"CODE",{"data-svelte-h":!0}),h(Ht)!=="svelte-8eqb3b"&&(Ht.textContent=Jn),xs=rl(_," и заканчивается на "),Ft=b(_,"CODE",{"data-svelte-h":!0}),h(Ft)!=="svelte-9cistc"&&(Ft.textContent=on),vs=rl(_,`, равна:
`),be=Ua(_,!1),_.forEach(n),Te=m(l),O=b(l,"P",{});var ll=Bs(O);Rs=rl(ll,"Таким образом, чтобы вычислить все оценки, нам нужно просто вычислить все произведения"),he=Ua(ll,!1),fe=rl(ll," где "),Yt=b(ll,"CODE",{"data-svelte-h":!0}),h(Yt)!=="svelte-1kp3szf"&&(Yt.textContent=cn),Gs=rl(ll,"."),ll.forEach(n),je=m(l),Bl=b(l,"P",{"data-svelte-h":!0}),h(Bl)!=="svelte-431wes"&&(Bl.textContent=Mn),Ie=m(l),M(Cl.$$.fragment,l),_e=m(l),z.l(l),At=m(l),kl=b(l,"P",{"data-svelte-h":!0}),h(kl)!=="svelte-1f44j6a"&&(kl.innerHTML=Un),Be=m(l),M(gl.$$.fragment,l),Ce=m(l),$l=b(l,"P",{"data-svelte-h":!0}),h($l)!=="svelte-12b8saa"&&($l.textContent=yn),ke=m(l),M(Zl.$$.fragment,l),ge=m(l),M(el.$$.fragment,l),$e=m(l),Ql=b(l,"P",{"data-svelte-h":!0}),h(Ql)!=="svelte-5tjq7j"&&(Ql.innerHTML=wn),Ze=m(l),M(xl.$$.fragment,l),Qe=m(l),vl=b(l,"P",{"data-svelte-h":!0}),h(vl)!=="svelte-185mh2h"&&(vl.textContent=un),xe=m(l),M(Rl.$$.fragment,l),ve=m(l),M(Gl.$$.fragment,l),Re=m(l),Vl=b(l,"P",{"data-svelte-h":!0}),h(Vl)!=="svelte-1rxpw2v"&&(Vl.textContent=dn),Ge=m(l),M(sl.$$.fragment,l),Ve=m(l),M(Wl.$$.fragment,l),We=m(l),Nl=b(l,"P",{"data-svelte-h":!0}),h(Nl)!=="svelte-ngmcwa"&&(Nl.innerHTML=bn),Ne=m(l),M(El.$$.fragment,l),Ee=m(l),M(Xl.$$.fragment,l),Xe=m(l),zl=b(l,"P",{"data-svelte-h":!0}),h(zl)!=="svelte-vnqntb"&&(zl.innerHTML=Tn),ze=m(l),M(Hl.$$.fragment,l),He=m(l),M(Fl.$$.fragment,l),Fe=m(l),Yl=b(l,"P",{"data-svelte-h":!0}),h(Yl)!=="svelte-jpcfoi"&&(Yl.innerHTML=hn),Ye=m(l),Al=b(l,"P",{"data-svelte-h":!0}),h(Al)!=="svelte-1icrz27"&&(Al.innerHTML=fn),Ae=m(l),M(Sl.$$.fragment,l),Se=m(l),M(Dl.$$.fragment,l),De=m(l),ql=b(l,"P",{"data-svelte-h":!0}),h(ql)!=="svelte-1qeluw4"&&(ql.innerHTML=jn),qe=m(l),Ll=b(l,"P",{"data-svelte-h":!0}),h(Ll)!=="svelte-1lz3bm6"&&(Ll.textContent=In),Le=m(l),M(Pl.$$.fragment,l),Pe=m(l),M(Kl.$$.fragment,l),Ke=m(l),Ol=b(l,"P",{"data-svelte-h":!0}),h(Ol)!=="svelte-d89r7i"&&(Ol.innerHTML=_n),Oe=m(l),M(lt.$$.fragment,l),ls=m(l),M(tt.$$.fragment,l),ts=m(l),et=b(l,"P",{"data-svelte-h":!0}),h(et)!=="svelte-1n70dm5"&&(et.textContent=Bn),es=m(l),M(st.$$.fragment,l),ss=m(l),nt=b(l,"P",{"data-svelte-h":!0}),h(nt)!=="svelte-b6k3qh"&&(nt.textContent=Cn),ns=m(l),M(at.$$.fragment,l),as=m(l),it=b(l,"P",{"data-svelte-h":!0}),h(it)!=="svelte-8n0ynw"&&(it.textContent=kn),is=m(l),rt=b(l,"P",{"data-svelte-h":!0}),h(rt)!=="svelte-f6fgzz"&&(rt.innerHTML=gn),rs=m(l),M(mt.$$.fragment,l),ms=m(l),pt=b(l,"P",{"data-svelte-h":!0}),h(pt)!=="svelte-rlvaa0"&&(pt.innerHTML=$n),ps=m(l),F.l(l),St=m(l),Jt=b(l,"P",{"data-svelte-h":!0}),h(Jt)!=="svelte-1ou3h3l"&&(Jt.textContent=Zn),Js=m(l),M(ot.$$.fragment,l),os=m(l),A.l(l),Dt=m(l),ct=b(l,"P",{"data-svelte-h":!0}),h(ct)!=="svelte-gtcaqb"&&(ct.textContent=Qn),cs=m(l),D.l(l),qt=m(l),Mt=b(l,"P",{"data-svelte-h":!0}),h(Mt)!=="svelte-olz1ma"&&(Mt.textContent=xn),Ms=m(l),L.l(l),Lt=m(l),Ut=b(l,"P",{"data-svelte-h":!0}),h(Ut)!=="svelte-82wf2w"&&(Ut.textContent=vn),Us=m(l),K.l(l),Pt=m(l),M(yt.$$.fragment,l),ys=m(l),wt=b(l,"P",{"data-svelte-h":!0}),h(wt)!=="svelte-1ikij4g"&&(wt.textContent=Rn),ws=m(l),M(nl.$$.fragment,l),us=m(l),ut=b(l,"P",{"data-svelte-h":!0}),h(ut)!=="svelte-3u6tgi"&&(ut.innerHTML=Gn),ds=m(l),M(dt.$$.fragment,l),bs=m(l),M(bt.$$.fragment,l),Ts=m(l),Tt=b(l,"P",{"data-svelte-h":!0}),h(Tt)!=="svelte-p95ta6"&&(Tt.textContent=Vn),hs=m(l),M(al.$$.fragment,l),fs=m(l),ht=b(l,"P",{"data-svelte-h":!0}),h(ht)!=="svelte-wcof5"&&(ht.textContent=Wn),js=m(l),M(ft.$$.fragment,l),Is=m(l),Kt=b(l,"P",{}),Bs(Kt).forEach(n),this.h()},h(){Ds(e,"name","hf:doc:metadata"),Ds(e,"content",ti),Ds(tl,"class","flex justify-center"),be.a=null,he.a=fe},m(l,s){B(document.head,e),a(l,i,s),a(l,t,s),a(l,o,s),U(u,l,s),a(l,f,s),U(j,l,s),a(l,Ot,s),jt[g].m(l,s),a(l,Rt,s),a(l,ml,s),a(l,le,s),It[Z].m(l,s),a(l,Gt,s),U(pl,l,s),a(l,te,s),a(l,Jl,s),a(l,ee,s),U(ol,l,s),a(l,se,s),U(cl,l,s),a(l,ne,s),a(l,Ml,s),a(l,ae,s),U(Ul,l,s),a(l,ie,s),U(yl,l,s),a(l,re,s),a(l,wl,s),a(l,me,s),U(ul,l,s),a(l,pe,s),a(l,dl,s),a(l,Je,s),_t[x].m(l,s),a(l,Vt,s),a(l,bl,s),a(l,oe,s),a(l,tl,s),a(l,ce,s),a(l,Tl,s),a(l,Me,s),U(hl,l,s),a(l,Ue,s),Bt[R].m(l,s),a(l,Wt,s),a(l,fl,s),a(l,ye,s),a(l,jl,s),a(l,we,s),Ct[V].m(l,s),a(l,Nt,s),a(l,Il,s),a(l,ue,s),kt[N].m(l,s),a(l,Et,s),a(l,_l,s),a(l,de,s),a(l,I,s),B(I,$s),B(I,Xt),B(I,Zs),B(I,zt),B(I,Qs),B(I,Ht),B(I,xs),B(I,Ft),B(I,vs),be.m(ua,I),a(l,Te,s),a(l,O,s),B(O,Rs),he.m(da,O),B(O,fe),B(O,Yt),B(O,Gs),a(l,je,s),a(l,Bl,s),a(l,Ie,s),U(Cl,l,s),a(l,_e,s),gt[X].m(l,s),a(l,At,s),a(l,kl,s),a(l,Be,s),U(gl,l,s),a(l,Ce,s),a(l,$l,s),a(l,ke,s),U(Zl,l,s),a(l,ge,s),U(el,l,s),a(l,$e,s),a(l,Ql,s),a(l,Ze,s),U(xl,l,s),a(l,Qe,s),a(l,vl,s),a(l,xe,s),U(Rl,l,s),a(l,ve,s),U(Gl,l,s),a(l,Re,s),a(l,Vl,s),a(l,Ge,s),U(sl,l,s),a(l,Ve,s),U(Wl,l,s),a(l,We,s),a(l,Nl,s),a(l,Ne,s),U(El,l,s),a(l,Ee,s),U(Xl,l,s),a(l,Xe,s),a(l,zl,s),a(l,ze,s),U(Hl,l,s),a(l,He,s),U(Fl,l,s),a(l,Fe,s),a(l,Yl,s),a(l,Ye,s),a(l,Al,s),a(l,Ae,s),U(Sl,l,s),a(l,Se,s),U(Dl,l,s),a(l,De,s),a(l,ql,s),a(l,qe,s),a(l,Ll,s),a(l,Le,s),U(Pl,l,s),a(l,Pe,s),U(Kl,l,s),a(l,Ke,s),a(l,Ol,s),a(l,Oe,s),U(lt,l,s),a(l,ls,s),U(tt,l,s),a(l,ts,s),a(l,et,s),a(l,es,s),U(st,l,s),a(l,ss,s),a(l,nt,s),a(l,ns,s),U(at,l,s),a(l,as,s),a(l,it,s),a(l,is,s),a(l,rt,s),a(l,rs,s),U(mt,l,s),a(l,ms,s),a(l,pt,s),a(l,ps,s),$t[H].m(l,s),a(l,St,s),a(l,Jt,s),a(l,Js,s),U(ot,l,s),a(l,os,s),Zt[Y].m(l,s),a(l,Dt,s),a(l,ct,s),a(l,cs,s),Qt[S].m(l,s),a(l,qt,s),a(l,Mt,s),a(l,Ms,s),xt[q].m(l,s),a(l,Lt,s),a(l,Ut,s),a(l,Us,s),vt[P].m(l,s),a(l,Pt,s),U(yt,l,s),a(l,ys,s),a(l,wt,s),a(l,ws,s),U(nl,l,s),a(l,us,s),a(l,ut,s),a(l,ds,s),U(dt,l,s),a(l,bs,s),U(bt,l,s),a(l,Ts,s),a(l,Tt,s),a(l,hs,s),U(al,l,s),a(l,fs,s),a(l,ht,s),a(l,js,s),U(ft,l,s),a(l,Is,s),a(l,Kt,s),_s=!0},p(l,[s]){const _={};s&1&&(_.fw=l[0]),u.$set(_);let ll=g;g=En(l),g!==ll&&(k(),p(jt[ll],1,1,()=>{jt[ll]=null}),C(),$=jt[g],$||($=jt[g]=Nn[g](l),$.c()),J($,1),$.m(Rt.parentNode,Rt));let Vs=Z;Z=zn(l),Z!==Vs&&(k(),p(It[Vs],1,1,()=>{It[Vs]=null}),C(),Q=It[Z],Q||(Q=It[Z]=Xn[Z](l),Q.c()),J(Q,1),Q.m(Gt.parentNode,Gt));let Ws=x;x=Fn(l),x!==Ws&&(k(),p(_t[Ws],1,1,()=>{_t[Ws]=null}),C(),v=_t[x],v||(v=_t[x]=Hn[x](l),v.c()),J(v,1),v.m(Vt.parentNode,Vt));let Ns=R;R=An(l),R!==Ns&&(k(),p(Bt[Ns],1,1,()=>{Bt[Ns]=null}),C(),G=Bt[R],G||(G=Bt[R]=Yn[R](l),G.c()),J(G,1),G.m(Wt.parentNode,Wt));let Es=V;V=Dn(l),V!==Es&&(k(),p(Ct[Es],1,1,()=>{Ct[Es]=null}),C(),W=Ct[V],W||(W=Ct[V]=Sn[V](l),W.c()),J(W,1),W.m(Nt.parentNode,Nt));let Xs=N;N=Ln(l),N!==Xs&&(k(),p(kt[Xs],1,1,()=>{kt[Xs]=null}),C(),E=kt[N],E||(E=kt[N]=qn[N](l),E.c()),J(E,1),E.m(Et.parentNode,Et));let zs=X;X=Kn(l),X!==zs&&(k(),p(gt[zs],1,1,()=>{gt[zs]=null}),C(),z=gt[X],z||(z=gt[X]=Pn[X](l),z.c()),J(z,1),z.m(At.parentNode,At));const pa={};s&2&&(pa.$$scope={dirty:s,ctx:l}),el.$set(pa);const Ja={};s&2&&(Ja.$$scope={dirty:s,ctx:l}),sl.$set(Ja);let Hs=H;H=la(l),H!==Hs&&(k(),p($t[Hs],1,1,()=>{$t[Hs]=null}),C(),F=$t[H],F||(F=$t[H]=On[H](l),F.c()),J(F,1),F.m(St.parentNode,St));let Fs=Y;Y=ea(l),Y!==Fs&&(k(),p(Zt[Fs],1,1,()=>{Zt[Fs]=null}),C(),A=Zt[Y],A||(A=Zt[Y]=ta[Y](l),A.c()),J(A,1),A.m(Dt.parentNode,Dt));let Ys=S;S=na(l),S!==Ys&&(k(),p(Qt[Ys],1,1,()=>{Qt[Ys]=null}),C(),D=Qt[S],D||(D=Qt[S]=sa[S](l),D.c()),J(D,1),D.m(qt.parentNode,qt));let As=q;q=ia(l),q!==As&&(k(),p(xt[As],1,1,()=>{xt[As]=null}),C(),L=xt[q],L||(L=xt[q]=aa[q](l),L.c()),J(L,1),L.m(Lt.parentNode,Lt));let Ss=P;P=ma(l),P!==Ss&&(k(),p(vt[Ss],1,1,()=>{vt[Ss]=null}),C(),K=vt[P],K||(K=vt[P]=ra[P](l),K.c()),J(K,1),K.m(Pt.parentNode,Pt));const oa={};s&2&&(oa.$$scope={dirty:s,ctx:l}),nl.$set(oa);const ca={};s&2&&(ca.$$scope={dirty:s,ctx:l}),al.$set(ca)},i(l){_s||(J(u.$$.fragment,l),J(j.$$.fragment,l),J($),J(Q),J(pl.$$.fragment,l),J(ol.$$.fragment,l),J(cl.$$.fragment,l),J(Ul.$$.fragment,l),J(yl.$$.fragment,l),J(ul.$$.fragment,l),J(v),J(hl.$$.fragment,l),J(G),J(W),J(E),J(Cl.$$.fragment,l),J(z),J(gl.$$.fragment,l),J(Zl.$$.fragment,l),J(el.$$.fragment,l),J(xl.$$.fragment,l),J(Rl.$$.fragment,l),J(Gl.$$.fragment,l),J(sl.$$.fragment,l),J(Wl.$$.fragment,l),J(El.$$.fragment,l),J(Xl.$$.fragment,l),J(Hl.$$.fragment,l),J(Fl.$$.fragment,l),J(Sl.$$.fragment,l),J(Dl.$$.fragment,l),J(Pl.$$.fragment,l),J(Kl.$$.fragment,l),J(lt.$$.fragment,l),J(tt.$$.fragment,l),J(st.$$.fragment,l),J(at.$$.fragment,l),J(mt.$$.fragment,l),J(F),J(ot.$$.fragment,l),J(A),J(D),J(L),J(K),J(yt.$$.fragment,l),J(nl.$$.fragment,l),J(dt.$$.fragment,l),J(bt.$$.fragment,l),J(al.$$.fragment,l),J(ft.$$.fragment,l),_s=!0)},o(l){p(u.$$.fragment,l),p(j.$$.fragment,l),p($),p(Q),p(pl.$$.fragment,l),p(ol.$$.fragment,l),p(cl.$$.fragment,l),p(Ul.$$.fragment,l),p(yl.$$.fragment,l),p(ul.$$.fragment,l),p(v),p(hl.$$.fragment,l),p(G),p(W),p(E),p(Cl.$$.fragment,l),p(z),p(gl.$$.fragment,l),p(Zl.$$.fragment,l),p(el.$$.fragment,l),p(xl.$$.fragment,l),p(Rl.$$.fragment,l),p(Gl.$$.fragment,l),p(sl.$$.fragment,l),p(Wl.$$.fragment,l),p(El.$$.fragment,l),p(Xl.$$.fragment,l),p(Hl.$$.fragment,l),p(Fl.$$.fragment,l),p(Sl.$$.fragment,l),p(Dl.$$.fragment,l),p(Pl.$$.fragment,l),p(Kl.$$.fragment,l),p(lt.$$.fragment,l),p(tt.$$.fragment,l),p(st.$$.fragment,l),p(at.$$.fragment,l),p(mt.$$.fragment,l),p(F),p(ot.$$.fragment,l),p(A),p(D),p(L),p(K),p(yt.$$.fragment,l),p(nl.$$.fragment,l),p(dt.$$.fragment,l),p(bt.$$.fragment,l),p(al.$$.fragment,l),p(ft.$$.fragment,l),_s=!1},d(l){l&&(n(i),n(t),n(o),n(f),n(Ot),n(Rt),n(ml),n(le),n(Gt),n(te),n(Jl),n(ee),n(se),n(ne),n(Ml),n(ae),n(ie),n(re),n(wl),n(me),n(pe),n(dl),n(Je),n(Vt),n(bl),n(oe),n(tl),n(ce),n(Tl),n(Me),n(Ue),n(Wt),n(fl),n(ye),n(jl),n(we),n(Nt),n(Il),n(ue),n(Et),n(_l),n(de),n(I),n(Te),n(O),n(je),n(Bl),n(Ie),n(_e),n(At),n(kl),n(Be),n(Ce),n($l),n(ke),n(ge),n($e),n(Ql),n(Ze),n(Qe),n(vl),n(xe),n(ve),n(Re),n(Vl),n(Ge),n(Ve),n(We),n(Nl),n(Ne),n(Ee),n(Xe),n(zl),n(ze),n(He),n(Fe),n(Yl),n(Ye),n(Al),n(Ae),n(Se),n(De),n(ql),n(qe),n(Ll),n(Le),n(Pe),n(Ke),n(Ol),n(Oe),n(ls),n(ts),n(et),n(es),n(ss),n(nt),n(ns),n(as),n(it),n(is),n(rt),n(rs),n(ms),n(pt),n(ps),n(St),n(Jt),n(Js),n(os),n(Dt),n(ct),n(cs),n(qt),n(Mt),n(Ms),n(Lt),n(Ut),n(Us),n(Pt),n(ys),n(wt),n(ws),n(us),n(ut),n(ds),n(bs),n(Ts),n(Tt),n(hs),n(fs),n(ht),n(js),n(Is),n(Kt)),n(e),y(u,l),y(j,l),jt[g].d(l),It[Z].d(l),y(pl,l),y(ol,l),y(cl,l),y(Ul,l),y(yl,l),y(ul,l),_t[x].d(l),y(hl,l),Bt[R].d(l),Ct[V].d(l),kt[N].d(l),y(Cl,l),gt[X].d(l),y(gl,l),y(Zl,l),y(el,l),y(xl,l),y(Rl,l),y(Gl,l),y(sl,l),y(Wl,l),y(El,l),y(Xl,l),y(Hl,l),y(Fl,l),y(Sl,l),y(Dl,l),y(Pl,l),y(Kl,l),y(lt,l),y(tt,l),y(st,l),y(at,l),y(mt,l),$t[H].d(l),y(ot,l),Zt[Y].d(l),Qt[S].d(l),xt[q].d(l),vt[P].d(l),y(yt,l),y(nl,l),y(dt,l),y(bt,l),y(al,l),y(ft,l)}}}const ti='{"title":"Быстрые токенизаторы в QA конвейере","local":"fast-tokenizers-in-the-qa-pipeline","sections":[{"title":"Использование конвейера question-answering","local":"using-the-question-answering-pipeline","sections":[],"depth":2},{"title":"Использование модели для ответа на вопросы","local":"using-a-model-for-question-answering","sections":[],"depth":2},{"title":"Обработка длинных контекстов","local":"handling-long-contexts","sections":[],"depth":2}],"depth":1}';function ei(w,e,i){let t="pt";return Ta(()=>{const o=new URLSearchParams(window.location.search);i(0,t=o.get("fw")||"pt")}),[t]}class oi extends ha{constructor(e){super(),fa(this,e,ei,li,ba,{})}}export{oi as component};
