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