Buckets:
| 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.ebf8be91.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">"distilbert-base-cased-distilled-squad"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(model_checkpoint) | |
| model = TFAutoModelForQuestionAnswering.from_pretrained(model_checkpoint) | |
| inputs = tokenizer(question, context, return_tensors=<span class="hljs-string">"tf"</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">"distilbert-base-cased-distilled-squad"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(model_checkpoint) | |
| model = AutoModelForQuestionAnswering.from_pretrained(model_checkpoint) | |
| inputs = tokenizer(question, context, return_tensors=<span class="hljs-string">"pt"</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 > 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 > 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">"overflow_to_sample_mapping"</span>) | |
| offsets = inputs.pop(<span class="hljs-string">"offset_mapping"</span>) | |
| inputs = inputs.convert_to_tensors(<span class="hljs-string">"tf"</span>) | |
| <span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">"input_ids"</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">"overflow_to_sample_mapping"</span>) | |
| offsets = inputs.pop(<span class="hljs-string">"offset_mapping"</span>) | |
| inputs = inputs.convert_to_tensors(<span class="hljs-string">"pt"</span>) | |
| <span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">"input_ids"</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">"attention_mask"</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">"attention_mask"</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 <= 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>" only_second"</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["input_ids"]</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">"question-answering"</span>) | |
| context = <span class="hljs-string">""" | |
| 🤗 Transformers is backed by the three most popular deep learning libraries — Jax, PyTorch, and TensorFlow — with a seamless integration | |
| between them. It's straightforward to train your models with one before loading them for inference with the other. | |
| """</span> | |
| question = <span class="hljs-string">"Which deep learning libraries back 🤗 Transformers?"</span> | |
| question_answerer(question=question, context=context)`,wrap:!1}}),cl=new T({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTc3NzMlMkMlMEElMjAnc3RhcnQnJTNBJTIwNzglMkMlMEElMjAnZW5kJyUzQSUyMDEwNSUyQyUwQSUyMCdhbnN3ZXInJTNBJTIwJ0pheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JyU3RA==",highlighted:`{<span class="hljs-string">'score'</span>: <span class="hljs-number">0.97773</span>, | |
| <span class="hljs-string">'start'</span>: <span class="hljs-number">78</span>, | |
| <span class="hljs-string">'end'</span>: <span class="hljs-number">105</span>, | |
| <span class="hljs-string">'answer'</span>: <span class="hljs-string">'Jax, PyTorch and TensorFlow'</span>}`,wrap:!1}}),Ul=new T({props:{code:"bG9uZ19jb250ZXh0JTIwJTNEJTIwJTIyJTIyJTIyJTBBJUYwJTlGJUE0JTk3JTIwVHJhbnNmb3JtZXJzJTNBJTIwU3RhdGUlMjBvZiUyMHRoZSUyMEFydCUyME5MUCUwQSUwQSVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUyMHByb3ZpZGVzJTIwdGhvdXNhbmRzJTIwb2YlMjBwcmV0cmFpbmVkJTIwbW9kZWxzJTIwdG8lMjBwZXJmb3JtJTIwdGFza3MlMjBvbiUyMHRleHRzJTIwc3VjaCUyMGFzJTIwY2xhc3NpZmljYXRpb24lMkMlMjBpbmZvcm1hdGlvbiUyMGV4dHJhY3Rpb24lMkMlMEFxdWVzdGlvbiUyMGFuc3dlcmluZyUyQyUyMHN1bW1hcml6YXRpb24lMkMlMjB0cmFuc2xhdGlvbiUyQyUyMHRleHQlMjBnZW5lcmF0aW9uJTIwYW5kJTIwbW9yZSUyMGluJTIwb3ZlciUyMDEwMCUyMGxhbmd1YWdlcy4lMEFJdHMlMjBhaW0lMjBpcyUyMHRvJTIwbWFrZSUyMGN1dHRpbmctZWRnZSUyME5MUCUyMGVhc2llciUyMHRvJTIwdXNlJTIwZm9yJTIwZXZlcnlvbmUuJTBBJTBBJUYwJTlGJUE0JTk3JTIwVHJhbnNmb3JtZXJzJTIwcHJvdmlkZXMlMjBBUElzJTIwdG8lMjBxdWlja2x5JTIwZG93bmxvYWQlMjBhbmQlMjB1c2UlMjB0aG9zZSUyMHByZXRyYWluZWQlMjBtb2RlbHMlMjBvbiUyMGElMjBnaXZlbiUyMHRleHQlMkMlMjBmaW5lLXR1bmUlMjB0aGVtJTIwb24lMjB5b3VyJTIwb3duJTIwZGF0YXNldHMlMjBhbmQlMEF0aGVuJTIwc2hhcmUlMjB0aGVtJTIwd2l0aCUyMHRoZSUyMGNvbW11bml0eSUyMG9uJTIwb3VyJTIwbW9kZWwlMjBodWIuJTIwQXQlMjB0aGUlMjBzYW1lJTIwdGltZSUyQyUyMGVhY2glMjBweXRob24lMjBtb2R1bGUlMjBkZWZpbmluZyUyMGFuJTIwYXJjaGl0ZWN0dXJlJTIwaXMlMjBmdWxseSUyMHN0YW5kYWxvbmUlMjBhbmQlMEFjYW4lMjBiZSUyMG1vZGlmaWVkJTIwdG8lMjBlbmFibGUlMjBxdWljayUyMHJlc2VhcmNoJTIwZXhwZXJpbWVudHMuJTBBJTBBV2h5JTIwc2hvdWxkJTIwSSUyMHVzZSUyMHRyYW5zZm9ybWVycyUzRiUwQSUwQTEuJTIwRWFzeS10by11c2UlMjBzdGF0ZS1vZi10aGUtYXJ0JTIwbW9kZWxzJTNBJTBBJTIwJTIwLSUyMEhpZ2glMjBwZXJmb3JtYW5jZSUyMG9uJTIwTkxVJTIwYW5kJTIwTkxHJTIwdGFza3MuJTBBJTIwJTIwLSUyMExvdyUyMGJhcnJpZXIlMjB0byUyMGVudHJ5JTIwZm9yJTIwZWR1Y2F0b3JzJTIwYW5kJTIwcHJhY3RpdGlvbmVycy4lMEElMjAlMjAtJTIwRmV3JTIwdXNlci1mYWNpbmclMjBhYnN0cmFjdGlvbnMlMjB3aXRoJTIwanVzdCUyMHRocmVlJTIwY2xhc3NlcyUyMHRvJTIwbGVhcm4uJTBBJTIwJTIwLSUyMEElMjB1bmlmaWVkJTIwQVBJJTIwZm9yJTIwdXNpbmclMjBhbGwlMjBvdXIlMjBwcmV0cmFpbmVkJTIwbW9kZWxzLiUwQSUyMCUyMC0lMjBMb3dlciUyMGNvbXB1dGUlMjBjb3N0cyUyQyUyMHNtYWxsZXIlMjBjYXJib24lMjBmb290cHJpbnQlM0ElMEElMEEyLiUyMFJlc2VhcmNoZXJzJTIwY2FuJTIwc2hhcmUlMjB0cmFpbmVkJTIwbW9kZWxzJTIwaW5zdGVhZCUyMG9mJTIwYWx3YXlzJTIwcmV0cmFpbmluZy4lMEElMjAlMjAtJTIwUHJhY3RpdGlvbmVycyUyMGNhbiUyMHJlZHVjZSUyMGNvbXB1dGUlMjB0aW1lJTIwYW5kJTIwcHJvZHVjdGlvbiUyMGNvc3RzLiUwQSUyMCUyMC0lMjBEb3plbnMlMjBvZiUyMGFyY2hpdGVjdHVyZXMlMjB3aXRoJTIwb3ZlciUyMDEwJTJDMDAwJTIwcHJldHJhaW5lZCUyMG1vZGVscyUyQyUyMHNvbWUlMjBpbiUyMG1vcmUlMjB0aGFuJTIwMTAwJTIwbGFuZ3VhZ2VzLiUwQSUwQTMuJTIwQ2hvb3NlJTIwdGhlJTIwcmlnaHQlMjBmcmFtZXdvcmslMjBmb3IlMjBldmVyeSUyMHBhcnQlMjBvZiUyMGElMjBtb2RlbCdzJTIwbGlmZXRpbWUlM0ElMEElMjAlMjAtJTIwVHJhaW4lMjBzdGF0ZS1vZi10aGUtYXJ0JTIwbW9kZWxzJTIwaW4lMjAzJTIwbGluZXMlMjBvZiUyMGNvZGUuJTBBJTIwJTIwLSUyME1vdmUlMjBhJTIwc2luZ2xlJTIwbW9kZWwlMjBiZXR3ZWVuJTIwVEYyLjAlMkZQeVRvcmNoJTIwZnJhbWV3b3JrcyUyMGF0JTIwd2lsbC4lMEElMjAlMjAtJTIwU2VhbWxlc3NseSUyMHBpY2slMjB0aGUlMjByaWdodCUyMGZyYW1ld29yayUyMGZvciUyMHRyYWluaW5nJTJDJTIwZXZhbHVhdGlvbiUyMGFuZCUyMHByb2R1Y3Rpb24uJTBBJTBBNC4lMjBFYXNpbHklMjBjdXN0b21pemUlMjBhJTIwbW9kZWwlMjBvciUyMGFuJTIwZXhhbXBsZSUyMHRvJTIweW91ciUyMG5lZWRzJTNBJTBBJTIwJTIwLSUyMFdlJTIwcHJvdmlkZSUyMGV4YW1wbGVzJTIwZm9yJTIwZWFjaCUyMGFyY2hpdGVjdHVyZSUyMHRvJTIwcmVwcm9kdWNlJTIwdGhlJTIwcmVzdWx0cyUyMHB1Ymxpc2hlZCUyMGJ5JTIwaXRzJTIwb3JpZ2luYWwlMjBhdXRob3JzLiUwQSUyMCUyMC0lMjBNb2RlbCUyMGludGVybmFscyUyMGFyZSUyMGV4cG9zZWQlMjBhcyUyMGNvbnNpc3RlbnRseSUyMGFzJTIwcG9zc2libGUuJTBBJTIwJTIwLSUyME1vZGVsJTIwZmlsZXMlMjBjYW4lMjBiZSUyMHVzZWQlMjBpbmRlcGVuZGVudGx5JTIwb2YlMjB0aGUlMjBsaWJyYXJ5JTIwZm9yJTIwcXVpY2slMjBleHBlcmltZW50cy4lMEElMEElRjAlOUYlQTQlOTclMjBUcmFuc2Zvcm1lcnMlMjBpcyUyMGJhY2tlZCUyMGJ5JTIwdGhlJTIwdGhyZWUlMjBtb3N0JTIwcG9wdWxhciUyMGRlZXAlMjBsZWFybmluZyUyMGxpYnJhcmllcyUyMCVFMiU4MCU5NCUyMEpheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JTIwJUUyJTgwJTk0JTIwd2l0aCUyMGElMjBzZWFtbGVzcyUyMGludGVncmF0aW9uJTBBYmV0d2VlbiUyMHRoZW0uJTIwSXQncyUyMHN0cmFpZ2h0Zm9yd2FyZCUyMHRvJTIwdHJhaW4lMjB5b3VyJTIwbW9kZWxzJTIwd2l0aCUyMG9uZSUyMGJlZm9yZSUyMGxvYWRpbmclMjB0aGVtJTIwZm9yJTIwaW5mZXJlbmNlJTIwd2l0aCUyMHRoZSUyMG90aGVyLiUwQSUyMiUyMiUyMiUwQXF1ZXN0aW9uX2Fuc3dlcmVyKHF1ZXN0aW9uJTNEcXVlc3Rpb24lMkMlMjBjb250ZXh0JTNEbG9uZ19jb250ZXh0KQ==",highlighted:`long_context = <span class="hljs-string">""" | |
| 🤗 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'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's straightforward to train your models with one before loading them for inference with the other. | |
| """</span> | |
| question_answerer(question=question, context=long_context)`,wrap:!1}}),yl=new T({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTcxNDklMkMlMEElMjAnc3RhcnQnJTNBJTIwMTg5MiUyQyUwQSUyMCdlbmQnJTNBJTIwMTkxOSUyQyUwQSUyMCdhbnN3ZXInJTNBJTIwJ0pheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JyU3RA==",highlighted:`{<span class="hljs-string">'score'</span>: <span class="hljs-number">0.97149</span>, | |
| <span class="hljs-string">'start'</span>: <span class="hljs-number">1892</span>, | |
| <span class="hljs-string">'end'</span>: <span class="hljs-number">1919</span>, | |
| <span class="hljs-string">'answer'</span>: <span class="hljs-string">'Jax, PyTorch and TensorFlow'</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">"offset_mapping"</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">"answer"</span>: answer, | |
| <span class="hljs-string">"start"</span>: start_char, | |
| <span class="hljs-string">"end"</span>: end_char, | |
| <span class="hljs-string">"score"</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">'answer'</span>: <span class="hljs-string">'Jax, PyTorch and TensorFlow'</span>, | |
| <span class="hljs-string">'start'</span>: <span class="hljs-number">78</span>, | |
| <span class="hljs-string">'end'</span>: <span class="hljs-number">105</span>, | |
| <span class="hljs-string">'score'</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">"input_ids"</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">"only_second"</span>) | |
| <span class="hljs-built_in">print</span>(tokenizer.decode(inputs[<span class="hljs-string">"input_ids"</span>]))`,wrap:!1}}),Fl=new T({props:{code:"JTIyJTIyJTIyJTBBJTVCQ0xTJTVEJTIwV2hpY2glMjBkZWVwJTIwbGVhcm5pbmclMjBsaWJyYXJpZXMlMjBiYWNrJTIwJTVCVU5LJTVEJTIwVHJhbnNmb3JtZXJzJTNGJTIwJTVCU0VQJTVEJTIwJTVCVU5LJTVEJTIwVHJhbnNmb3JtZXJzJTIwJTNBJTIwU3RhdGUlMjBvZiUyMHRoZSUyMEFydCUyME5MUCUwQSUwQSU1QlVOSyU1RCUyMFRyYW5zZm9ybWVycyUyMHByb3ZpZGVzJTIwdGhvdXNhbmRzJTIwb2YlMjBwcmV0cmFpbmVkJTIwbW9kZWxzJTIwdG8lMjBwZXJmb3JtJTIwdGFza3MlMjBvbiUyMHRleHRzJTIwc3VjaCUyMGFzJTIwY2xhc3NpZmljYXRpb24lMkMlMjBpbmZvcm1hdGlvbiUyMGV4dHJhY3Rpb24lMkMlMEFxdWVzdGlvbiUyMGFuc3dlcmluZyUyQyUyMHN1bW1hcml6YXRpb24lMkMlMjB0cmFuc2xhdGlvbiUyQyUyMHRleHQlMjBnZW5lcmF0aW9uJTIwYW5kJTIwbW9yZSUyMGluJTIwb3ZlciUyMDEwMCUyMGxhbmd1YWdlcy4lMEFJdHMlMjBhaW0lMjBpcyUyMHRvJTIwbWFrZSUyMGN1dHRpbmctZWRnZSUyME5MUCUyMGVhc2llciUyMHRvJTIwdXNlJTIwZm9yJTIwZXZlcnlvbmUuJTBBJTBBJTVCVU5LJTVEJTIwVHJhbnNmb3JtZXJzJTIwcHJvdmlkZXMlMjBBUElzJTIwdG8lMjBxdWlja2x5JTIwZG93bmxvYWQlMjBhbmQlMjB1c2UlMjB0aG9zZSUyMHByZXRyYWluZWQlMjBtb2RlbHMlMjBvbiUyMGElMjBnaXZlbiUyMHRleHQlMkMlMjBmaW5lLXR1bmUlMjB0aGVtJTIwb24lMjB5b3VyJTIwb3duJTIwZGF0YXNldHMlMjBhbmQlMEF0aGVuJTIwc2hhcmUlMjB0aGVtJTIwd2l0aCUyMHRoZSUyMGNvbW11bml0eSUyMG9uJTIwb3VyJTIwbW9kZWwlMjBodWIuJTIwQXQlMjB0aGUlMjBzYW1lJTIwdGltZSUyQyUyMGVhY2glMjBweXRob24lMjBtb2R1bGUlMjBkZWZpbmluZyUyMGFuJTIwYXJjaGl0ZWN0dXJlJTIwaXMlMjBmdWxseSUyMHN0YW5kYWxvbmUlMjBhbmQlMEFjYW4lMjBiZSUyMG1vZGlmaWVkJTIwdG8lMjBlbmFibGUlMjBxdWljayUyMHJlc2VhcmNoJTIwZXhwZXJpbWVudHMuJTBBJTBBV2h5JTIwc2hvdWxkJTIwSSUyMHVzZSUyMHRyYW5zZm9ybWVycyUzRiUwQSUwQTEuJTIwRWFzeS10by11c2UlMjBzdGF0ZS1vZi10aGUtYXJ0JTIwbW9kZWxzJTNBJTBBJTIwJTIwLSUyMEhpZ2glMjBwZXJmb3JtYW5jZSUyMG9uJTIwTkxVJTIwYW5kJTIwTkxHJTIwdGFza3MuJTBBJTIwJTIwLSUyMExvdyUyMGJhcnJpZXIlMjB0byUyMGVudHJ5JTIwZm9yJTIwZWR1Y2F0b3JzJTIwYW5kJTIwcHJhY3RpdGlvbmVycy4lMEElMjAlMjAtJTIwRmV3JTIwdXNlci1mYWNpbmclMjBhYnN0cmFjdGlvbnMlMjB3aXRoJTIwanVzdCUyMHRocmVlJTIwY2xhc3NlcyUyMHRvJTIwbGVhcm4uJTBBJTIwJTIwLSUyMEElMjB1bmlmaWVkJTIwQVBJJTIwZm9yJTIwdXNpbmclMjBhbGwlMjBvdXIlMjBwcmV0cmFpbmVkJTIwbW9kZWxzLiUwQSUyMCUyMC0lMjBMb3dlciUyMGNvbXB1dGUlMjBjb3N0cyUyQyUyMHNtYWxsZXIlMjBjYXJib24lMjBmb290cHJpbnQlM0ElMEElMEEyLiUyMFJlc2VhcmNoZXJzJTIwY2FuJTIwc2hhcmUlMjB0cmFpbmVkJTIwbW9kZWxzJTIwaW5zdGVhZCUyMG9mJTIwYWx3YXlzJTIwcmV0cmFpbmluZy4lMEElMjAlMjAtJTIwUHJhY3RpdGlvbmVycyUyMGNhbiUyMHJlZHVjZSUyMGNvbXB1dGUlMjB0aW1lJTIwYW5kJTIwcHJvZHVjdGlvbiUyMGNvc3RzLiUwQSUyMCUyMC0lMjBEb3plbnMlMjBvZiUyMGFyY2hpdGVjdHVyZXMlMjB3aXRoJTIwb3ZlciUyMDEwJTJDMDAwJTIwcHJldHJhaW5lZCUyMG1vZGVscyUyQyUyMHNvbWUlMjBpbiUyMG1vcmUlMjB0aGFuJTIwMTAwJTIwbGFuZ3VhZ2VzLiUwQSUwQTMuJTIwQ2hvb3NlJTIwdGhlJTIwcmlnaHQlMjBmcmFtZXdvcmslMjBmb3IlMjBldmVyeSUyMHBhcnQlMjBvZiUyMGElMjBtb2RlbCdzJTIwbGlmZXRpbWUlM0ElMEElMjAlMjAtJTIwVHJhaW4lMjBzdGF0ZS1vZi10aGUtYXJ0JTIwbW9kZWxzJTIwaW4lMjAzJTIwbGluZXMlMjBvZiUyMGNvZGUuJTBBJTIwJTIwLSUyME1vdmUlMjBhJTIwc2luZ2xlJTIwbW9kZWwlMjBiZXR3ZWVuJTIwVEYyLjAlMkZQeVRvcmNoJTIwZnJhbWV3b3JrcyUyMGF0JTIwd2lsbC4lMEElMjAlMjAtJTIwU2VhbWxlc3NseSUyMHBpY2slMjB0aGUlMjByaWdodCUyMGZyYW1ld29yayUyMGZvciUyMHRyYWluaW5nJTJDJTIwZXZhbHVhdGlvbiUyMGFuZCUyMHByb2R1Y3Rpb24uJTBBJTBBNC4lMjBFYXNpbHklMjBjdXN0b21pemUlMjBhJTIwbW9kZWwlMjBvciUyMGFuJTIwZXhhbXBsZSUyMHRvJTIweW91ciUyMG5lZWRzJTNBJTBBJTIwJTIwLSUyMFdlJTIwcHJvdmlkZSUyMGV4YW1wbGVzJTIwZm9yJTIwZWFjaCUyMGFyY2hpdGVjdHVyZSUyMHRvJTIwcmVwcm9kdWNlJTIwdGhlJTIwcmVzdWx0cyUyMHB1Ymxpc2hlZCUyMGJ5JTIwaXRzJTIwb3JpZ2luYWwlMjBhdXRob3JzLiUwQSUyMCUyMC0lMjBNb2RlbCUyMGludGVybmFsJTIwJTVCU0VQJTVEJTBBJTIyJTIyJTIy",highlighted:`<span class="hljs-string">""" | |
| [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'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] | |
| """</span>`,wrap:!1}}),Sl=new T({props:{code:"c2VudGVuY2UlMjAlM0QlMjAlMjJUaGlzJTIwc2VudGVuY2UlMjBpcyUyMG5vdCUyMHRvbyUyMGxvbmclMjBidXQlMjB3ZSUyMGFyZSUyMGdvaW5nJTIwdG8lMjBzcGxpdCUyMGl0JTIwYW55d2F5LiUyMiUwQWlucHV0cyUyMCUzRCUyMHRva2VuaXplciglMEElMjAlMjAlMjAlMjBzZW50ZW5jZSUyQyUyMHRydW5jYXRpb24lM0RUcnVlJTJDJTIwcmV0dXJuX292ZXJmbG93aW5nX3Rva2VucyUzRFRydWUlMkMlMjBtYXhfbGVuZ3RoJTNENiUyQyUyMHN0cmlkZSUzRDIlMEEpJTBBJTBBZm9yJTIwaWRzJTIwaW4lMjBpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQlM0ElMEElMjAlMjAlMjAlMjBwcmludCh0b2tlbml6ZXIuZGVjb2RlKGlkcykp",highlighted:`sentence = <span class="hljs-string">"This sentence is not too long but we are going to split it anyway."</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">"input_ids"</span>]: | |
| <span class="hljs-built_in">print</span>(tokenizer.decode(ids))`,wrap:!1}}),Dl=new T({props:{code:"JyU1QkNMUyU1RCUyMFRoaXMlMjBzZW50ZW5jZSUyMGlzJTIwbm90JTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjBpcyUyMG5vdCUyMHRvbyUyMGxvbmclMjAlNUJTRVAlNUQnJTBBJyU1QkNMUyU1RCUyMHRvbyUyMGxvbmclMjBidXQlMjB3ZSUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwYnV0JTIwd2UlMjBhcmUlMjBnb2luZyUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwYXJlJTIwZ29pbmclMjB0byUyMHNwbGl0JTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjB0byUyMHNwbGl0JTIwaXQlMjBhbnl3YXklMjAlNUJTRVAlNUQnJTBBJyU1QkNMUyU1RCUyMGl0JTIwYW55d2F5LiUyMCU1QlNFUCU1RCc=",highlighted:`<span class="hljs-string">'[CLS] This sentence is not [SEP]'</span> | |
| <span class="hljs-string">'[CLS] is not too long [SEP]'</span> | |
| <span class="hljs-string">'[CLS] too long but we [SEP]'</span> | |
| <span class="hljs-string">'[CLS] but we are going [SEP]'</span> | |
| <span class="hljs-string">'[CLS] are going to split [SEP]'</span> | |
| <span class="hljs-string">'[CLS] to split it anyway [SEP]'</span> | |
| <span class="hljs-string">'[CLS] it anyway. [SEP]'</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">'input_ids'</span>, <span class="hljs-string">'attention_mask'</span>, <span class="hljs-string">'overflow_to_sample_mapping'</span>])',wrap:!1}}),lt=new T({props:{code:"cHJpbnQoaW5wdXRzJTVCJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIlNUQp",highlighted:'<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">"overflow_to_sample_mapping"</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">"This sentence is not too long but we are going to split it anyway."</span>, | |
| <span class="hljs-string">"This sentence is shorter but will still get split."</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">"overflow_to_sample_mapping"</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">"longest"</span>, | |
| truncation=<span class="hljs-string">"only_second"</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">"answer"</span>: answer, <span class="hljs-string">"start"</span>: start_char, <span class="hljs-string">"end"</span>: end_char, <span class="hljs-string">"score"</span>: score} | |
| <span class="hljs-built_in">print</span>(result)`,wrap:!1}}),bt=new T({props:{code:"JTdCJ2Fuc3dlciclM0ElMjAnJTVDbiVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUzQSUyMFN0YXRlJTIwb2YlMjB0aGUlMjBBcnQlMjBOTFAnJTJDJTIwJ3N0YXJ0JyUzQSUyMDAlMkMlMjAnZW5kJyUzQSUyMDM3JTJDJTIwJ3Njb3JlJyUzQSUyMDAuMzM4NjclN0QlMEElN0InYW5zd2VyJyUzQSUyMCdKYXglMkMlMjBQeVRvcmNoJTIwYW5kJTIwVGVuc29yRmxvdyclMkMlMjAnc3RhcnQnJTNBJTIwMTg5MiUyQyUyMCdlbmQnJTNBJTIwMTkxOSUyQyUyMCdzY29yZSclM0ElMjAwLjk3MTQ5JTdE",highlighted:`{<span class="hljs-string">'answer'</span>: <span class="hljs-string">'\\n🤗 Transformers: State of the Art NLP'</span>, <span class="hljs-string">'start'</span>: <span class="hljs-number">0</span>, <span class="hljs-string">'end'</span>: <span class="hljs-number">37</span>, <span class="hljs-string">'score'</span>: <span class="hljs-number">0.33867</span>} | |
| {<span class="hljs-string">'answer'</span>: <span class="hljs-string">'Jax, PyTorch and TensorFlow'</span>, <span class="hljs-string">'start'</span>: <span class="hljs-number">1892</span>, <span class="hljs-string">'end'</span>: <span class="hljs-number">1919</span>, <span class="hljs-string">'score'</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}; | |
Xet Storage Details
- Size:
- 97.3 kB
- Xet hash:
- 35668028d7dbda74c2fe2b75be84e2bf7ddaf14b44dba22c9ecb6c80b374b289
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.