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