import{s as At,o as Nt,n as Ve}from"../chunks/scheduler.cc52f4b9.js";import{S as Zt,i as Et,e as u,s as M,c as J,h as Gt,a as m,d as n,b as i,f as It,g as U,j,k as Vt,l as Bt,m as a,n as d,o,u as ll,t as c,p as f,q as vt,r as Xt,v as el}from"../chunks/index.9480bb2b.js";import{T as we}from"../chunks/Tip.f7b80743.js";import{C as Wt,H as Ce,E as zt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.e0b4ce23.js";import{Y as yl}from"../chunks/Youtube.7b12d9e8.js";import{C as w}from"../chunks/CodeBlock.d991436c.js";import{C as Rt}from"../chunks/CourseFloatingBanner.0ea490da.js";import{F as St}from"../chunks/FrameworkSwitchCourse.42d12053.js";function Ht(T){let e,p;return e=new Rt({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/ru/chapter3/section2_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ru/chapter3/section2_tf.ipynb"}]}}),{c(){J(e.$$.fragment)},l(t){U(e.$$.fragment,t)},m(t,r){d(e,t,r),p=!0},i(t){p||(c(e.$$.fragment,t),p=!0)},o(t){o(e.$$.fragment,t),p=!1},d(t){f(e,t)}}}function Dt(T){let e,p;return e=new Rt({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/ru/chapter3/section2_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ru/chapter3/section2_pt.ipynb"}]}}),{c(){J(e.$$.fragment)},l(t){U(e.$$.fragment,t)},m(t,r){d(e,t,r),p=!0},i(t){p||(c(e.$$.fragment,t),p=!0)},o(t){o(e.$$.fragment,t),p=!1},d(t){f(e,t)}}}function Yt(T){let e,p='Continuing with the example from the <a href="../chapter2/1">previous chapter</a>, вот как мы будем обучать классификатор последовательности на одном батче с помощью TensorFlow:',t,r,b;return r=new w({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyMCVEMCVBMiVEMCVCMCVEMCVCQSUyMCVEMCVCNiVEMCVCNSUyQyUyMCVEMCVCQSVEMCVCMCVEMCVCQSUyMCVEMCVCOCUyMCVEMCVCMiUyMCVEMCVCRiVEMSU4MCVEMCVCRSVEMSU4OCVEMCVCQiVEMSU4QiVEMCVCOSUyMCVEMSU4MCVEMCVCMCVEMCVCNyUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJiZXJ0LWJhc2UtdW5jYXNlZCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBc2VxdWVuY2VzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIySSd2ZSUyMGJlZW4lMjB3YWl0aW5nJTIwZm9yJTIwYSUyMEh1Z2dpbmdGYWNlJTIwY291cnNlJTIwbXklMjB3aG9sZSUyMGxpZmUuJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGNvdXJzZSUyMGlzJTIwYW1hemluZyElMjIlMkMlMEElNUQlMEFiYXRjaCUyMCUzRCUyMGRpY3QodG9rZW5pemVyKHNlcXVlbmNlcyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKSklMEElMEElMjMlMjAlRDAlQUQlRDElODIlRDAlQjAlMjAlRDElODclRDAlQjAlRDElODElRDElODIlRDElOEMlMjAlRDAlQkQlRDAlQkUlRDAlQjIlRDAlQjAlRDElOEYlMEFtb2RlbC5jb21waWxlKG9wdGltaXplciUzRCUyMmFkYW0lMjIlMkMlMjBsb3NzJTNEJTIyc3BhcnNlX2NhdGVnb3JpY2FsX2Nyb3NzZW50cm9weSUyMiklMEFsYWJlbHMlMjAlM0QlMjB0Zi5jb252ZXJ0X3RvX3RlbnNvciglNUIxJTJDJTIwMSU1RCklMEFtb2RlbC50cmFpbl9vbl9iYXRjaChiYXRjaCUyQyUyMGxhYmVscyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf
<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForSequenceClassification

<span class="hljs-comment"># Так же, как и в прошлый раз</span>
checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint)
sequences = [
    <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
    <span class="hljs-string">&quot;This course is amazing!&quot;</span>,
]
batch = <span class="hljs-built_in">dict</span>(tokenizer(sequences, padding=<span class="hljs-literal">True</span>, truncation=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>))

<span class="hljs-comment"># Эта часть новая</span>
model.<span class="hljs-built_in">compile</span>(optimizer=<span class="hljs-string">&quot;adam&quot;</span>, loss=<span class="hljs-string">&quot;sparse_categorical_crossentropy&quot;</span>)
labels = tf.convert_to_tensor([<span class="hljs-number">1</span>, <span class="hljs-number">1</span>])
model.train_on_batch(batch, labels)`,wrap:!1}}),{c(){e=u("p"),e.innerHTML=p,t=M(),J(r.$$.fragment)},l(y){e=m(y,"P",{"data-svelte-h":!0}),j(e)!=="svelte-kxxoie"&&(e.innerHTML=p),t=i(y),U(r.$$.fragment,y)},m(y,C){a(y,e,C),a(y,t,C),d(r,y,C),b=!0},i(y){b||(c(r.$$.fragment,y),b=!0)},o(y){o(r.$$.fragment,y),b=!1},d(y){y&&(n(e),n(t)),f(r,y)}}}function Ft(T){let e,p='Продолжим с примером из <a href="../chapter2/1">предыдущей главы</a>, вот как мы будем обучать классификатор последовательности на одном батче с помощью PyTorch:',t,r,b;return r=new w({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdG9yY2gub3B0aW0lMjBpbXBvcnQlMjBBZGFtVyUwQWZyb20lMjB0cmFuc2Zvcm1lcnMlMjBpbXBvcnQlMjBBdXRvVG9rZW5pemVyJTJDJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyMCVEMCVBMiVEMCVCMCVEMCVCQSUyMCVEMCVCNiVEMCVCNSUyQyUyMCVEMCVCQSVEMCVCMCVEMCVCQSUyMCVEMCVCOCUyMCVEMCVCMiUyMCVEMCVCRiVEMSU4MCVEMCVCRSVEMSU4OCVEMCVCQiVEMSU4QiVEMCVCOSUyMCVEMSU4MCVEMCVCMCVEMCVCNyUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJiZXJ0LWJhc2UtdW5jYXNlZCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQXNlcXVlbmNlcyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMlRoaXMlMjBjb3Vyc2UlMjBpcyUyMGFtYXppbmchJTIyJTJDJTBBJTVEJTBBYmF0Y2glMjAlM0QlMjB0b2tlbml6ZXIoc2VxdWVuY2VzJTJDJTIwcGFkZGluZyUzRFRydWUlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBJTBBJTIzJTIwJUQwJUFEJUQxJTgyJUQwJUIwJTIwJUQxJTg3JUQwJUIwJUQxJTgxJUQxJTgyJUQxJThDJTIwJUQwJUJEJUQwJUJFJUQwJUIyJUQwJUIwJUQxJThGJTBBYmF0Y2glNUIlMjJsYWJlbHMlMjIlNUQlMjAlM0QlMjB0b3JjaC50ZW5zb3IoJTVCMSUyQyUyMDElNUQpJTBBJTBBb3B0aW1pemVyJTIwJTNEJTIwQWRhbVcobW9kZWwucGFyYW1ldGVycygpKSUwQWxvc3MlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKS5sb3NzJTBBbG9zcy5iYWNrd2FyZCgpJTBBb3B0aW1pemVyLnN0ZXAoKQ==",highlighted:`<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModelForSequenceClassification

<span class="hljs-comment"># Так же, как и в прошлый раз</span>
checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
sequences = [
    <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
    <span class="hljs-string">&quot;This course is amazing!&quot;</span>,
]
batch = tokenizer(sequences, padding=<span class="hljs-literal">True</span>, truncation=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)

<span class="hljs-comment"># Эта часть новая</span>
batch[<span class="hljs-string">&quot;labels&quot;</span>] = torch.tensor([<span class="hljs-number">1</span>, <span class="hljs-number">1</span>])

optimizer = AdamW(model.parameters())
loss = model(**batch).loss
loss.backward()
optimizer.step()`,wrap:!1}}),{c(){e=u("p"),e.innerHTML=p,t=M(),J(r.$$.fragment)},l(y){e=m(y,"P",{"data-svelte-h":!0}),j(e)!=="svelte-1tgz7ys"&&(e.innerHTML=p),t=i(y),U(r.$$.fragment,y)},m(y,C){a(y,e,C),a(y,t,C),d(r,y,C),b=!0},i(y){b||(c(r.$$.fragment,y),b=!0)},o(y){o(r.$$.fragment,y),b=!1},d(y){y&&(n(e),n(t)),f(r,y)}}}function qt(T){let e,p;return e=new yl({props:{id:"W_gMJF0xomE"}}),{c(){J(e.$$.fragment)},l(t){U(e.$$.fragment,t)},m(t,r){d(e,t,r),p=!0},i(t){p||(c(e.$$.fragment,t),p=!0)},o(t){o(e.$$.fragment,t),p=!1},d(t){f(e,t)}}}function Lt(T){let e,p;return e=new yl({props:{id:"_BZearw7f0w"}}),{c(){J(e.$$.fragment)},l(t){U(e.$$.fragment,t)},m(t,r){d(e,t,r),p=!0},i(t){p||(c(e.$$.fragment,t),p=!0)},o(t){o(e.$$.fragment,t),p=!1},d(t){f(e,t)}}}function Pt(T){let e;return{c(){e=vt("⚠️ **Предупреждение** Убедитесь, что `datasets` установлены, выполнив `pip install datasets`. Затем загрузите набор данных MRPC и выведите его, чтобы увидеть, что он содержит.")},l(p){e=Xt(p,"⚠️ **Предупреждение** Убедитесь, что `datasets` установлены, выполнив `pip install datasets`. Затем загрузите набор данных MRPC и выведите его, чтобы увидеть, что он содержит.")},m(p,t){a(p,e,t)},d(p){p&&n(e)}}}function Kt(T){let e,p="✏️ <strong>Попробуйте!</strong> Посмотрите на 15-й элемент обучающей выборки и на 87-й элемент вадидационной выборки. Какие у них лейблы?";return{c(){e=u("p"),e.innerHTML=p},l(t){e=m(t,"P",{"data-svelte-h":!0}),j(e)!=="svelte-did8fs"&&(e.innerHTML=p)},m(t,r){a(t,e,r)},p:Ve,d(t){t&&n(e)}}}function Ot(T){let e,p;return e=new yl({props:{id:"P-rZWqcB6CE"}}),{c(){J(e.$$.fragment)},l(t){U(e.$$.fragment,t)},m(t,r){d(e,t,r),p=!0},i(t){p||(c(e.$$.fragment,t),p=!0)},o(t){o(e.$$.fragment,t),p=!1},d(t){f(e,t)}}}function sn(T){let e,p;return e=new yl({props:{id:"0u3ioSwev3s"}}),{c(){J(e.$$.fragment)},l(t){U(e.$$.fragment,t)},m(t,r){d(e,t,r),p=!0},i(t){p||(c(e.$$.fragment,t),p=!0)},o(t){o(e.$$.fragment,t),p=!1},d(t){f(e,t)}}}function ln(T){let e,p="✏️ <strong>Попробуйте!</strong> Токенизируйте 15-й элемент обучающей выборки как два предложения, и как пару предложений. В чем разница между двумя результатами?";return{c(){e=u("p"),e.innerHTML=p},l(t){e=m(t,"P",{"data-svelte-h":!0}),j(e)!=="svelte-a7207g"&&(e.innerHTML=p)},m(t,r){a(t,e,r)},p:Ve,d(t){t&&n(e)}}}function en(T){let e,p="Функция, отвечающая за объединение элементов внутри батча, называется <em>collate function</em> (функция сопоставления). По умолчанию — это функция, которая просто преобразует ваши образцы в tf.Tensor и объединяет их (рекурсивно, если ваши элементы — это списки, кортежи или словари). В нашем случае это невозможно, поскольку входные данные, которые у нас есть, не будут иметь одинакового размера. Мы намеренно отложили отступы, чтобы применять их только по мере необходимости в каждом пакете и избегать слишком длинных входных данных с большим количеством отступов. Это немного ускорит обучение, но учтите, что если вы тренируетесь на TPU, это может вызвать проблемы — TPU предпочитают фиксированные формы, даже если для этого требуется дополнительное дополнение.";return{c(){e=u("p"),e.innerHTML=p},l(t){e=m(t,"P",{"data-svelte-h":!0}),j(e)!=="svelte-oya5c"&&(e.innerHTML=p)},m(t,r){a(t,e,r)},d(t){t&&n(e)}}}function tn(T){let e,p="Функция, отвечающая за объединение элементов внутри батча, называется <em>collate function</em> (функция сопоставления). Это аргумент, который вы можете передать при создании <code>DataLoader</code>, по умолчанию это функция, которая просто преобразует ваши образцы в тензоры PyTorch и объединяет их (рекурсивно, если вашими элементами являются списки, кортежи или словари). В нашем случае это невозможно, поскольку входные данные, которые у нас есть, не будут иметь одинакового размера. Мы намеренно не стали делать пэддинг, чтобы применять его только по мере необходимости в каждом пакете и избегать слишком длинных входных данных с большим количеством отступов. Это немного ускорит обучение, но учтите, что если вы тренируетесь на TPU, это может вызвать проблемы — TPU предпочитают фиксированные формы, даже если для этого требуется дополнительн пэддинг.";return{c(){e=u("p"),e.innerHTML=p},l(t){e=m(t,"P",{"data-svelte-h":!0}),j(e)!=="svelte-kny0h4"&&(e.innerHTML=p)},m(t,r){a(t,e,r)},d(t){t&&n(e)}}}function nn(T){let e,p;return e=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nJTBBJTBBZGF0YV9jb2xsYXRvciUyMCUzRCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nKHRva2VuaXplciUzRHRva2VuaXplciUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIydGYlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorWithPadding

data_collator = DataCollatorWithPadding(tokenizer=tokenizer, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>)`,wrap:!1}}),{c(){J(e.$$.fragment)},l(t){U(e.$$.fragment,t)},m(t,r){d(e,t,r),p=!0},i(t){p||(c(e.$$.fragment,t),p=!0)},o(t){o(e.$$.fragment,t),p=!1},d(t){f(e,t)}}}function an(T){let e,p;return e=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nJTBBJTBBZGF0YV9jb2xsYXRvciUyMCUzRCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nKHRva2VuaXplciUzRHRva2VuaXplcik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorWithPadding

data_collator = DataCollatorWithPadding(tokenizer=tokenizer)`,wrap:!1}}),{c(){J(e.$$.fragment)},l(t){U(e.$$.fragment,t)},m(t,r){d(e,t,r),p=!0},i(t){p||(c(e.$$.fragment,t),p=!0)},o(t){o(e.$$.fragment,t),p=!1},d(t){f(e,t)}}}function pn(T){let e,p,t,r="Выглядит неплохо! Теперь мы пришли от обычного текста к батчу, с которым может работать наша модель. Можем приступить к fine-tuning!",b;return e=new w({props:{code:"JTdCJ2F0dGVudGlvbl9tYXNrJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY3JTVEKSUyQyUwQSUyMCdpbnB1dF9pZHMnJTNBJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwNjclNUQpJTJDJTBBJTIwJ3Rva2VuX3R5cGVfaWRzJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY3JTVEKSUyQyUwQSUyMCdsYWJlbHMnJTNBJTIwdG9yY2guU2l6ZSglNUI4JTVEKSU3RA==",highlighted:`{<span class="hljs-string">&#x27;attention_mask&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;input_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;token_type_ids&#x27;</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;labels&#x27;</span>: torch.Size([<span class="hljs-number">8</span>])}`,wrap:!1}}),{c(){J(e.$$.fragment),p=M(),t=u("p"),t.textContent=r},l(y){U(e.$$.fragment,y),p=i(y),t=m(y,"P",{"data-svelte-h":!0}),j(t)!=="svelte-1ngbatr"&&(t.textContent=r)},m(y,C){d(e,y,C),a(y,p,C),a(y,t,C),b=!0},i(y){b||(c(e.$$.fragment,y),b=!0)},o(y){o(e.$$.fragment,y),b=!1},d(y){y&&(n(p),n(t)),f(e,y)}}}function Mn(T){let e,p;return e=new w({props:{code:"JTdCJ2F0dGVudGlvbl9tYXNrJyUzQSUyMFRlbnNvclNoYXBlKCU1QjglMkMlMjA2NyU1RCklMkMlMEElMjAnaW5wdXRfaWRzJyUzQSUyMFRlbnNvclNoYXBlKCU1QjglMkMlMjA2NyU1RCklMkMlMEElMjAndG9rZW5fdHlwZV9pZHMnJTNBJTIwVGVuc29yU2hhcGUoJTVCOCUyQyUyMDY3JTVEKSUyQyUwQSUyMCdsYWJlbHMnJTNBJTIwVGVuc29yU2hhcGUoJTVCOCU1RCklN0Q=",highlighted:`{<span class="hljs-string">&#x27;attention_mask&#x27;</span>: TensorShape([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;input_ids&#x27;</span>: TensorShape([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;token_type_ids&#x27;</span>: TensorShape([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]),
 <span class="hljs-string">&#x27;labels&#x27;</span>: TensorShape([<span class="hljs-number">8</span>])}`,wrap:!1}}),{c(){J(e.$$.fragment)},l(t){U(e.$$.fragment,t)},m(t,r){d(e,t,r),p=!0},i(t){p||(c(e.$$.fragment,t),p=!0)},o(t){o(e.$$.fragment,t),p=!1},d(t){f(e,t)}}}function rn(T){let e,p="✏️ <strong>Попробуйте!</strong> Повторите этап препроцессинга для набора данных GLUE SST-2. Он немного отличается, так как состоит из отдельных предложений, а не пар, но в остальном это то же самое, что мы сделали. Для более сложной задачи попробуйте написать функцию предварительной обработки, которая работает с любой из задач GLUE.";return{c(){e=u("p"),e.innerHTML=p},l(t){e=m(t,"P",{"data-svelte-h":!0}),j(e)!=="svelte-1kxtt4v"&&(e.innerHTML=p)},m(t,r){a(t,e,r)},p:Ve,d(t){t&&n(e)}}}function Qt(T){let e,p="Теперь, когда у нас есть набор данных и функция сопоставления данных, нам нужно собрать их вместе. Мы могли бы вручную загружать пакеты и применять к ним функцию, но это неудобно и не очень эффективно. Вместо этого есть простой метод, предлагающий эффективное решение этой проблемы: <code>to_tf_dataset()</code>. Эта функция обернет <code>tf.data.Dataset</code> вокруг вашего набора данных с дополнительной функцией сопоставления. <code>tf.data.Dataset</code> — это собственный формат TensorFlow, который Keras может использовать для <code>model.fit()</code>, поэтому этот метод немедленно преобразует 🤗 набор данных в формат, готовый для обучения. Давайте посмотрим на это в действии с нашим набором данных!",t,r,b,y,C="Это все! Мы можем использовать эти датасеты в следующей лекции, где процесс обучения будет очень простым после рутинной процедура предобработки.",B;return r=new w({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELnRvX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwY29sdW1ucyUzRCU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTJDJTIwJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIydG9rZW5fdHlwZV9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBsYWJlbF9jb2xzJTNEJTVCJTIybGFiZWxzJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0Q4JTJDJTBBKSUwQSUwQXRmX3ZhbGlkYXRpb25fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQudG9fdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBjb2x1bW5zJTNEJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGxhYmVsX2NvbHMlM0QlNUIlMjJsYWJlbHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0Q4JTJDJTBBKQ==",highlighted:`tf_train_dataset = tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>].to_tf_dataset(
    columns=[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>],
    label_cols=[<span class="hljs-string">&quot;labels&quot;</span>],
    shuffle=<span class="hljs-literal">True</span>,
    collate_fn=data_collator,
    batch_size=<span class="hljs-number">8</span>,
)

tf_validation_dataset = tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>].to_tf_dataset(
    columns=[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>],
    label_cols=[<span class="hljs-string">&quot;labels&quot;</span>],
    shuffle=<span class="hljs-literal">False</span>,
    collate_fn=data_collator,
    batch_size=<span class="hljs-number">8</span>,
)`,wrap:!1}}),{c(){e=u("p"),e.innerHTML=p,t=M(),J(r.$$.fragment),b=M(),y=u("p"),y.textContent=C},l(h){e=m(h,"P",{"data-svelte-h":!0}),j(e)!=="svelte-1ec5rd0"&&(e.innerHTML=p),t=i(h),U(r.$$.fragment,h),b=i(h),y=m(h,"P",{"data-svelte-h":!0}),j(y)!=="svelte-nsmnin"&&(y.textContent=C)},m(h,G){a(h,e,G),a(h,t,G),d(r,h,G),a(h,b,G),a(h,y,G),B=!0},i(h){B||(c(r.$$.fragment,h),B=!0)},o(h){o(r.$$.fragment,h),B=!1},d(h){h&&(n(e),n(t),n(b),n(y)),f(r,h)}}}function cn(T){let e,p,t,r,b,y,C,B,h,G,_,k,tl,x,g,nl,H,Qe="Обучение всего лишь на двух предложениях, конечно, не даст хорошего результата. Чтобы получить более качественные результаты, вам следует подготовить б<em>о</em>льший датасет.",ul,D,Re='В данном разделе мы будем использовать в качестве примера MRPC (Microsoft Research Paraphrase Corpus) dataset, предложенный в <a href="https://www.aclweb.org/anthology/I05-5002.pdf" rel="nofollow">статье</a> авторами William B. Dolan и Chris Brockett. Датасет состоит из 5801 пар предложений с соответствующим им лейблом: является ли пара преложений парафразами или нет (т.е. идет ли речь в обоих предложениях об одном и том же). Мы выбрали именно этот датасет для этой главы потому что он небольшой: с ним легко экспериментировать в процессе обучения.',ml,Y,jl,I,V,al,F,Ae='Hub содержит не только модели, там также расположено множество датасетов на различных языках. Вы можете посмотреть на них <a href="https://huggingface.co/datasets" rel="nofollow">тут</a>, а также мы рекомендуем попровать загрузить новый датасет после того, как вы изучите текущий раздел (см. документацию <a href="https://huggingface.co/docs/datasets/loading" rel="nofollow">здесь</a>). Но сейчас вернемся к датасету MRPC! Это один из 10 датасетов из состава <a href="https://gluebenchmark.com/" rel="nofollow">GLUE</a>, который является тестом для производительности моделей машинного обучения в задачах классификации текста.',Jl,q,Ne="Библиотека 🤗 Datasets предоставляет возможность использовать очень простую команду для загрузки и кэширования датасета с Hub. Мы можем загрузить датасет следующим образом:",Ul,X,dl,L,fl,P,Tl,K,Ze="Как можно заметить, мы получили объект типа <code>DatasetDict</code>, который содержит обучающую выборку, валидационную выборку и тестовую выборку. Каждая из них содержит несколько колонок (<code>sentence1</code>, <code>sentence2</code>, <code>label</code>, и <code>idx</code>) и переменную с числом строк (число элементов в каждой выборке): 3668 пар предложений в обучающей части, 408 в валидационной и 1725 в тестовой .",bl,O,Ee="Эта команда загружает и кэширует датасет (по умолчанию в <em>~/.cache/huggingface/dataset</em>). Вспомним из главы 2, что вы можете изменить путь к кэшу изменив переменную окружения <code>HF_HOME</code>.",hl,ss,Ge="Мы можем получить доступ к предложениями в объекте <code>raw_datasets</code> путем индексирования, как в словаре:",wl,ls,Cl,es,$l,ts,Be="Можно увидеть, что лейблы уже являются целыми числами (integer), их обрабатывать не нужно. Чтобы сопосотавить индекс класса с его названием, можно распечатать значение переменной <code>features</code> у <code>raw_train_dataset</code>:",_l,ns,kl,as,xl,ps,ve="Переменная <code>label</code> типа <code>ClassLabel</code> соответствует именам в <em>names</em>. <code>0</code> соответствует <code>not_equivalent</code>, <code>1</code> соответствует <code>equivalent</code>.",gl,W,Il,Ms,Vl,Q,R,pl,is,Xe='Чтобы предобработать датасет, нам необходимо конвертировать текст в числа, которые может обработать модель. Как вы видели в <a href="../chapter2/1">предыдущей главе</a>, это делается с помощью токенайзера. Мы можем подать на вход токенайзеру одно или список предложений, т.е. можно токенизировать предложения попарно таким образом:',Ql,rs,Rl,cs,We="Однако мы не можем просто передать две последовательности в модель и получить прогноз того, являются ли эти два предложения парафразами или нет. Нам нужно обрабатывать две последовательности как пару и применять соответствующую предварительную обработку. К счастью, токенизатор также может взять пару последовательностей и подготовить их так, как ожидает наша модель BERT:",Al,os,Nl,ys,Zl,us,ze='Мы уже обсуждали ключи <code>input_ids</code> и <code>attention_mask</code> в <a href="../chapter2/1">главе 2</a>, но не упоминали о <code>token_type_ids</code>. В этом примере мы указываем модели какая часть входных данных является первым предложением, а какая вторым.',El,z,Gl,ms,Se="Если мы декодируем ID из <code>input_ids</code> обратно в слова:",Bl,js,vl,Js,He="мы получим",Xl,Us,Wl,ds,De="Видно, что модель ожидает входные данные в следующем формате: <code>[CLS] sentence1 [SEP] sentence2 [SEP]</code> в случае двух предложений. Посмотрим соответствие элементов и <code>token_type_ids</code>",zl,fs,Sl,Ts,Ye="Как вы можете заметить, части входных данных, соответствующих <code>[CLS] sentence1 [SEP]</code> имеют тип токена <code>0</code>, в то время как остальные части, соответствующие второму предложению <code>sentence2 [SEP]</code>, имеют тип токена <code>1</code>.",Hl,bs,Fe="Обратите внимание, что если вы выберете другой чекпоинт, <code>token_type_ids</code> необязательно будут присутствовать в ваших токенизированных входных данных (например, они не возвращаются, если вы используете модель DistilBERT). Они возвращаются только тогда, когда модель будет знать, что с ними делать, потому что она видела их во время предобучения.",Dl,hs,qe='В данном случае BERT был обучен с информацией о идентификаторах типов токенов, и помимо задачи маскированной языковой модели, о которой мы говорили в <a href="../chapter1/1">главе 1</a>, он может решать еще одну задачу: предсказание следующего предложения (<em>next sentence prediction</em>). Суть этой задачи - смоделировать связь между предложениями.',Yl,ws,Le="В этой задаче модели на вход подаются пары предложений (со случайно замаскированными токенами), от модели требуется предсказать, является ли следующее предложение продолжением текущего. Чтобы задача не была слишком тривиальной, половина времени модель обучается на соседних предложениях из одного документа, другую половину на парах предложений, взятых из разных источников.",Fl,Cs,Pe="В общем случае вам не нужно беспокоиться о наличии <code>token_type_ids</code> в ваших токенизированных данных: пока вы используете одинаковый чекпоинт и для токенизатора, и для модели – токенизатор будет знать, как нужно обработать данные.",ql,$s,Ke='Теперь мы знаем, что токенизатор может подготовить сразу пару предложений, а значит мы можем использовать его для целого датасета: так же как и в <a href="../chapter2/1">предыдущей главе</a> можно подать на вход токенизатору список первых предложений и список вторых предложений. Это также сработает и для механизмов дополнения (padding) и усечения до максимальной длины (truncation) - об этом мы говорили в <a href="../chapter2">главе 2</a>. Итак, один из способов предобработать обучающий датасет такой:',Ll,_s,Pl,ks,Oe='Это хорошо работает, однако есть недостаток, который формирует токенизатор (с ключами,  <code>input_ids</code>, <code>attention_mask</code>, и <code>token_type_ids</code>, и значениями в формате списка списков). Это будет работать только если у нас достаточно оперативной памяти (RAM) для хранения целого датасета во время токенизации (в то время как датасеты из библиотеки 🤗 Datasets являются <a href="https://arrow.apache.org/" rel="nofollow">Apache Arrow</a> файлами, хранящимися на диске; они будут загружены только в тот момент, когда вы их будете запрашивать).',Kl,xs,st='Чтобы хранить данные в формате датасета, мы будем использовать методы <a href="https://huggingface.co/docs/datasets/package_reference/main_classes#datasets.Dataset.map" rel="nofollow"><code>Dataset.map()</code></a>. Это позволит нам сохранить высокую гибкость даже если нам нужно что-то большее, чем просто токенизация. Метод <code>map()</code> работает так: применяет некоторую функцию к каждому элементу датасета, давайте определим функцию, которая токенизирует наши входные данные:',Ol,gs,se,Is,lt='Эта функция принимает на вход слвоарь (похожий на элементы нашего словаря) и возвращает новый словарь с ключами <code>input_ids</code>, <code>attention_mask</code> и <code>token_type_ids</code>. Заметьте, это также работает если словарь <code>example</code> содержит несколько элементов (каждый ключ в виде списка предложений), поскольку <code>tokenizer</code> работает и со списками пар предложений, как мы и видели ранее. Это позволит нам использовать аргумент <code>batched=True</code> в вызове <code>map()</code>, которая ускорит процесс токенизации. <code>tokenizer</code> внутри реализован на языке Rust из библиотеки <a href="https://github.com/huggingface/tokenizers" rel="nofollow">🤗 Tokenizers</a>. Этот токенизатор может быть очень быстрым, но только если мы подадим большой объем данных за раз.',le,Vs,et="Обратите внимание, в этот раз мы оставили аргумент <code>padding</code> пустым, потому что дополнение данных до максимальной длины неэффективно: гораздо быстрее делать это во время формирования батча, в таком случае мы будем дополнять до максимальной длины только элементы батча, а не целого датасета. Это поможет сэкономить время в случае длинных последовательностей.",ee,Qs,tt="Ниже пример того, как мы применяем функцию токенизации к целому датасету. Мы указываем <code>batched=True</code> в нашем вызове <code>map</code> и функция будет применена сразу к нескольким элементам датасета одновременно, а не к каждому по отдельности. Это позволяет сделать токенизацию более быстрой.",te,Rs,ne,As,nt="Библиотека 🤗 Datasets применяет обработку, добавляя новые поля в наборы данных, по одному для каждого ключа в словаре, который возвращает функция предварительной обработки:",ae,Ns,pe,Zs,at="В функции <code>map()</code> можно использовать мультипроцессинг: за это отвечает аргумент <code>num_proc</code>. Мы его не применяли, потому что библиоетека 🤗 Tokenizers сразу использует несколько потоков для токенизации, но если вы будете использовать функцию не из 🤗 Tokenizers, это может ускорить процесс.",Me,Es,pt="Наша функция <code>tokenize_function</code>  возвращает словарь с ключами <code>input_ids</code>, <code>attention_mask</code> и <code>token_type_ids</code>, они уже добавлены ко всем разбиениями нашего датасета. Обратите внимание, что мы могли бы также изменить существующие поля, если бы наша функция препроцессинга вернула новое значение для существующего ключа в наборе данных, к которому мы применили <code>map()</code>.",ie,Gs,Mt="Последнее, что нам нужно сделать, это дополнить все примеры до длины самого длинного элемента, когда мы собираем элементы вместе — метод, который мы называем <em>динамическим пэддингом</em> (<em>dynamic padding</em>).",re,Bs,ce,vs,oe,Ml,Xs,it="Для того, чтобы сделать это на практике, мы должны задать функцию сопоставления, которая будет осуществлять корректный пэддинг элементов выборки, которые мы хотим объединить в батч. К счастью, библиотека 🤗 Transformers предоставляет нам эту функцию через класс <code>DataCollatorWithPadding</code>. При создании экземпляра требуется указать токенизатор (чтобы знать, какой токен использовать для пэддинга и слева или справа нужно дополнять данные), а дальше функция сделает все, что вам нужно:",ye,A,N,il,Ws,rt="Чтобы протестировать это, давайте возьмем несколько элементов обучающей выборки, которые мы хотим объединить в батч. Мы удалим колонки <code>idx</code>, <code>sentence1</code> и <code>sentence2</code> т.к. они содержат строки (а мы не можем превратить строки в тензоры) и посмотрим на длину каждой записи в батче:",ue,zs,me,Ss,je,Hs,ct="Неудивительно: мы получили объекты разной длины от 32 до 67. Динамический пэддинг подразумевает, что все объекты будут дополнены до максимальной длины, до 67.",Je,Ds,ot="No surprise, we get samples of varying length, from 32 to 67. Dynamic padding means the samples in this batch should all be padded to a length of 67, the maximum length inside the batch. Без динамического заполнения все выборки должны быть дополнены до максимальной длины во всем наборе данных, или до максимальной длины, которую может принять модель. Давайте дважды проверим, что наш <code>data_collator</code> динамически правильно дополняет батч:",Ue,Ys,de,Z,E,rl,S,fe,cl,Fs,Te,ol,be;b=new St({props:{fw:T[0]}}),C=new Wt({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),h=new Ce({props:{title:"Предобработка данных",local:"предобработка-данных",headingTag:"h1"}});const yt=[Dt,Ht],qs=[];function ut(s,l){return s[0]==="pt"?0:1}_=ut(T),k=qs[_]=yt[_](T);const mt=[Ft,Yt],Ls=[];function jt(s,l){return s[0]==="pt"?0:1}x=jt(T),g=Ls[x]=mt[x](T),Y=new Ce({props:{title:"Загрузка датасета с Hub",local:"загрузка-датасета-с-hub",headingTag:"h3"}});const Jt=[Lt,qt],Ps=[];function Ut(s,l){return s[0]==="pt"?0:1}I=Ut(T),V=Ps[I]=Jt[I](T),X=new we({props:{$$slots:{default:[Pt]},$$scope:{ctx:T}}}),L=new w({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBcmF3X2RhdGFzZXRzJTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMmdsdWUlMjIlMkMlMjAlMjJtcnBjJTIyKSUwQXJhd19kYXRhc2V0cw==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

raw_datasets = load_dataset(<span class="hljs-string">&quot;glue&quot;</span>, <span class="hljs-string">&quot;mrpc&quot;</span>)
raw_datasets`,wrap:!1}}),P=new w({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ3NlbnRlbmNlMSclMkMlMjAnc2VudGVuY2UyJyUyQyUyMCdsYWJlbCclMkMlMjAnaWR4JyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMzY2OCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB2YWxpZGF0aW9uJTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidzZW50ZW5jZTEnJTJDJTIwJ3NlbnRlbmNlMiclMkMlMjAnbGFiZWwnJTJDJTIwJ2lkeCclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDQwOCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB0ZXN0JTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidzZW50ZW5jZTEnJTJDJTIwJ3NlbnRlbmNlMiclMkMlMjAnbGFiZWwnJTJDJTIwJ2lkeCclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE3MjUlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>],
        num_rows: <span class="hljs-number">3668</span>
    })
    validation: Dataset({
        features: [<span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>],
        num_rows: <span class="hljs-number">408</span>
    })
    test: Dataset({
        features: [<span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>],
        num_rows: <span class="hljs-number">1725</span>
    })
})`,wrap:!1}}),ls=new w({props:{code:"cmF3X3RyYWluX2RhdGFzZXQlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCUwQXJhd190cmFpbl9kYXRhc2V0JTVCMCU1RA==",highlighted:`raw_train_dataset = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>]
raw_train_dataset[<span class="hljs-number">0</span>]`,wrap:!1}}),es=new w({props:{code:"JTdCJ2lkeCclM0ElMjAwJTJDJTBBJTIwJ2xhYmVsJyUzQSUyMDElMkMlMEElMjAnc2VudGVuY2UxJyUzQSUyMCdBbXJvemklMjBhY2N1c2VkJTIwaGlzJTIwYnJvdGhlciUyMCUyQyUyMHdob20lMjBoZSUyMGNhbGxlZCUyMCUyMiUyMHRoZSUyMHdpdG5lc3MlMjAlMjIlMjAlMkMlMjBvZiUyMGRlbGliZXJhdGVseSUyMGRpc3RvcnRpbmclMjBoaXMlMjBldmlkZW5jZSUyMC4nJTJDJTBBJTIwJ3NlbnRlbmNlMiclM0ElMjAnUmVmZXJyaW5nJTIwdG8lMjBoaW0lMjBhcyUyMG9ubHklMjAlMjIlMjB0aGUlMjB3aXRuZXNzJTIwJTIyJTIwJTJDJTIwQW1yb3ppJTIwYWNjdXNlZCUyMGhpcyUyMGJyb3RoZXIlMjBvZiUyMGRlbGliZXJhdGVseSUyMGRpc3RvcnRpbmclMjBoaXMlMjBldmlkZW5jZSUyMC4nJTdE",highlighted:`{<span class="hljs-string">&#x27;idx&#x27;</span>: <span class="hljs-number">0</span>,
 <span class="hljs-string">&#x27;label&#x27;</span>: <span class="hljs-number">1</span>,
 <span class="hljs-string">&#x27;sentence1&#x27;</span>: <span class="hljs-string">&#x27;Amrozi accused his brother , whom he called &quot; the witness &quot; , of deliberately distorting his evidence .&#x27;</span>,
 <span class="hljs-string">&#x27;sentence2&#x27;</span>: <span class="hljs-string">&#x27;Referring to him as only &quot; the witness &quot; , Amrozi accused his brother of deliberately distorting his evidence .&#x27;</span>}`,wrap:!1}}),ns=new w({props:{code:"cmF3X3RyYWluX2RhdGFzZXQuZmVhdHVyZXM=",highlighted:"raw_train_dataset.features",wrap:!1}}),as=new w({props:{code:"JTdCJ3NlbnRlbmNlMSclM0ElMjBWYWx1ZShkdHlwZSUzRCdzdHJpbmcnJTJDJTIwaWQlM0ROb25lKSUyQyUwQSUyMCdzZW50ZW5jZTInJTNBJTIwVmFsdWUoZHR5cGUlM0Qnc3RyaW5nJyUyQyUyMGlkJTNETm9uZSklMkMlMEElMjAnbGFiZWwnJTNBJTIwQ2xhc3NMYWJlbChudW1fY2xhc3NlcyUzRDIlMkMlMjBuYW1lcyUzRCU1Qidub3RfZXF1aXZhbGVudCclMkMlMjAnZXF1aXZhbGVudCclNUQlMkMlMjBuYW1lc19maWxlJTNETm9uZSUyQyUyMGlkJTNETm9uZSklMkMlMEElMjAnaWR4JyUzQSUyMFZhbHVlKGR0eXBlJTNEJ2ludDMyJyUyQyUyMGlkJTNETm9uZSklN0Q=",highlighted:`{<span class="hljs-string">&#x27;sentence1&#x27;</span>: Value(dtype=<span class="hljs-string">&#x27;string&#x27;</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>),
 <span class="hljs-string">&#x27;sentence2&#x27;</span>: Value(dtype=<span class="hljs-string">&#x27;string&#x27;</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>),
 <span class="hljs-string">&#x27;label&#x27;</span>: ClassLabel(num_classes=<span class="hljs-number">2</span>, names=[<span class="hljs-string">&#x27;not_equivalent&#x27;</span>, <span class="hljs-string">&#x27;equivalent&#x27;</span>], names_file=<span class="hljs-literal">None</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>),
 <span class="hljs-string">&#x27;idx&#x27;</span>: Value(dtype=<span class="hljs-string">&#x27;int32&#x27;</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>)}`,wrap:!1}}),W=new we({props:{$$slots:{default:[Kt]},$$scope:{ctx:T}}}),Ms=new Ce({props:{title:"Предобработка датасета",local:"предобработка-датасета",headingTag:"h3"}});const dt=[sn,Ot],Ks=[];function ft(s,l){return s[0]==="pt"?0:1}Q=ft(T),R=Ks[Q]=dt[Q](T),rs=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQXRva2VuaXplZF9zZW50ZW5jZXNfMSUyMCUzRCUyMHRva2VuaXplcihyYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QiUyMnNlbnRlbmNlMSUyMiU1RCklMEF0b2tlbml6ZWRfc2VudGVuY2VzXzIlMjAlM0QlMjB0b2tlbml6ZXIocmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIlMjJzZW50ZW5jZTIlMjIlNUQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

checkpoint = <span class="hljs-string">&quot;bert-base-uncased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)
tokenized_sentences_1 = tokenizer(raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-string">&quot;sentence1&quot;</span>])
tokenized_sentences_2 = tokenizer(raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-string">&quot;sentence2&quot;</span>])`,wrap:!1}}),os=new w({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUyMlRoaXMlMjBpcyUyMHRoZSUyMGZpcnN0JTIwc2VudGVuY2UuJTIyJTJDJTIwJTIyVGhpcyUyMGlzJTIwdGhlJTIwc2Vjb25kJTIwb25lLiUyMiklMEFpbnB1dHM=",highlighted:`inputs = tokenizer(<span class="hljs-string">&quot;This is the first sentence.&quot;</span>, <span class="hljs-string">&quot;This is the second one.&quot;</span>)
inputs`,wrap:!1}}),ys=new w({props:{code:"JTdCJTIwJTBBJTIwJTIwJ2lucHV0X2lkcyclM0ElMjAlNUIxMDElMkMlMjAyMDIzJTJDJTIwMjAwMyUyQyUyMDE5OTYlMkMlMjAyMDM0JTJDJTIwNjI1MSUyQyUyMDEwMTIlMkMlMjAxMDIlMkMlMjAyMDIzJTJDJTIwMjAwMyUyQyUyMDE5OTYlMkMlMjAyMTE3JTJDJTIwMjAyOCUyQyUyMDEwMTIlMkMlMjAxMDIlNUQlMkMlMEElMjAlMjAndG9rZW5fdHlwZV9pZHMnJTNBJTIwJTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVEJTJDJTBBJTIwJTIwJ2F0dGVudGlvbl9tYXNrJyUzQSUyMCU1QjElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSU1RCUwQSU3RA==",highlighted:`{ 
  <span class="hljs-string">&#x27;input_ids&#x27;</span>: [<span class="hljs-number">101</span>, <span class="hljs-number">2023</span>, <span class="hljs-number">2003</span>, <span class="hljs-number">1996</span>, <span class="hljs-number">2034</span>, <span class="hljs-number">6251</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>, <span class="hljs-number">2023</span>, <span class="hljs-number">2003</span>, <span class="hljs-number">1996</span>, <span class="hljs-number">2117</span>, <span class="hljs-number">2028</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>],
  <span class="hljs-string">&#x27;token_type_ids&#x27;</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">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>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>],
  <span class="hljs-string">&#x27;attention_mask&#x27;</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>, <span class="hljs-number">1</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>, <span class="hljs-number">1</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>, <span class="hljs-number">1</span>]
}`,wrap:!1}}),z=new we({props:{$$slots:{default:[ln]},$$scope:{ctx:T}}}),js=new w({props:{code:"dG9rZW5pemVyLmNvbnZlcnRfaWRzX3RvX3Rva2VucyhpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQp",highlighted:'tokenizer.convert_ids_to_tokens(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>])',wrap:!1}}),Us=new w({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAndGhpcyclMkMlMjAnaXMnJTJDJTIwJ3RoZSclMkMlMjAnZmlyc3QnJTJDJTIwJ3NlbnRlbmNlJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTJDJTIwJ3RoaXMnJTJDJTIwJ2lzJyUyQyUyMCd0aGUnJTJDJTIwJ3NlY29uZCclMkMlMjAnb25lJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTVE",highlighted:'[<span class="hljs-string">&#x27;[CLS]&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;the&#x27;</span>, <span class="hljs-string">&#x27;first&#x27;</span>, <span class="hljs-string">&#x27;sentence&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;the&#x27;</span>, <span class="hljs-string">&#x27;second&#x27;</span>, <span class="hljs-string">&#x27;one&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>]',wrap:!1}}),fs=new w({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAndGhpcyclMkMlMjAnaXMnJTJDJTIwJ3RoZSclMkMlMjAnZmlyc3QnJTJDJTIwJ3NlbnRlbmNlJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTJDJTIwJ3RoaXMnJTJDJTIwJ2lzJyUyQyUyMCd0aGUnJTJDJTIwJ3NlY29uZCclMkMlMjAnb25lJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTVEJTBBJTVCJTIwJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAlMjAxJTJDJTIwJTIwJTIwJTIwMSUyQyUyMCUyMCUyMCUyMCUyMDElMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAxJTJDJTIwJTIwJTIwJTIwJTIwMSUyQyUyMCUyMCUyMDElMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAxJTVE",highlighted:`[<span class="hljs-string">&#x27;[CLS]&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;the&#x27;</span>, <span class="hljs-string">&#x27;first&#x27;</span>, <span class="hljs-string">&#x27;sentence&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;the&#x27;</span>, <span class="hljs-string">&#x27;second&#x27;</span>, <span class="hljs-string">&#x27;one&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</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">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>,     <span class="hljs-number">1</span>,   <span class="hljs-number">1</span>,       <span class="hljs-number">1</span>]`,wrap:!1}}),_s=new w({props:{code:"dG9rZW5pemVkX2RhdGFzZXQlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwcmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMEElMjAlMjAlMjAlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QiUyMnNlbnRlbmNlMiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMHBhZGRpbmclM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMEEp",highlighted:`tokenized_dataset = tokenizer(
    raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-string">&quot;sentence1&quot;</span>],
    raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-string">&quot;sentence2&quot;</span>],
    padding=<span class="hljs-literal">True</span>,
    truncation=<span class="hljs-literal">True</span>,
)`,wrap:!1}}),gs=new w({props:{code:"ZGVmJTIwdG9rZW5pemVfZnVuY3Rpb24oZXhhbXBsZSklM0ElMEElMjAlMjAlMjAlMjByZXR1cm4lMjB0b2tlbml6ZXIoZXhhbXBsZSU1QiUyMnNlbnRlbmNlMSUyMiU1RCUyQyUyMGV4YW1wbGUlNUIlMjJzZW50ZW5jZTIlMjIlNUQlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">example</span>):
    <span class="hljs-keyword">return</span> tokenizer(example[<span class="hljs-string">&quot;sentence1&quot;</span>], example[<span class="hljs-string">&quot;sentence2&quot;</span>], truncation=<span class="hljs-literal">True</span>)`,wrap:!1}}),Rs=new w({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQXRva2VuaXplZF9kYXRhc2V0cw==",highlighted:`tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>)
tokenized_datasets`,wrap:!1}}),Ns=new w({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpZHgnJTJDJTIwJ2lucHV0X2lkcyclMkMlMjAnbGFiZWwnJTJDJTIwJ3NlbnRlbmNlMSclMkMlMjAnc2VudGVuY2UyJyUyQyUyMCd0b2tlbl90eXBlX2lkcyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDM2NjglMEElMjAlMjAlMjAlMjAlN0QpJTBBJTIwJTIwJTIwJTIwdmFsaWRhdGlvbiUzQSUyMERhdGFzZXQoJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmVhdHVyZXMlM0ElMjAlNUInYXR0ZW50aW9uX21hc2snJTJDJTIwJ2lkeCclMkMlMjAnaW5wdXRfaWRzJyUyQyUyMCdsYWJlbCclMkMlMjAnc2VudGVuY2UxJyUyQyUyMCdzZW50ZW5jZTInJTJDJTIwJ3Rva2VuX3R5cGVfaWRzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNDA4JTBBJTIwJTIwJTIwJTIwJTdEKSUwQSUyMCUyMCUyMCUyMHRlc3QlM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpZHgnJTJDJTIwJ2lucHV0X2lkcyclMkMlMjAnbGFiZWwnJTJDJTIwJ3NlbnRlbmNlMSclMkMlMjAnc2VudGVuY2UyJyUyQyUyMCd0b2tlbl90eXBlX2lkcyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE3MjUlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;token_type_ids&#x27;</span>],
        num_rows: <span class="hljs-number">3668</span>
    })
    validation: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;token_type_ids&#x27;</span>],
        num_rows: <span class="hljs-number">408</span>
    })
    test: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;idx&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>, <span class="hljs-string">&#x27;sentence1&#x27;</span>, <span class="hljs-string">&#x27;sentence2&#x27;</span>, <span class="hljs-string">&#x27;token_type_ids&#x27;</span>],
        num_rows: <span class="hljs-number">1725</span>
    })
})`,wrap:!1}}),Bs=new Ce({props:{title:"Dynamic padding",local:"dynamic-padding",headingTag:"h3"}}),vs=new yl({props:{id:"7q5NyFT8REg"}});function Tt(s,l){return s[0]==="pt"?tn:en}let he=Tt(T),v=he(T);const bt=[an,nn],Os=[];function ht(s,l){return s[0]==="pt"?0:1}A=ht(T),N=Os[A]=bt[A](T),zs=new w({props:{code:"c2FtcGxlcyUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCJTNBOCU1RCUwQXNhbXBsZXMlMjAlM0QlMjAlN0JrJTNBJTIwdiUyMGZvciUyMGslMkMlMjB2JTIwaW4lMjBzYW1wbGVzLml0ZW1zKCklMjBpZiUyMGslMjBub3QlMjBpbiUyMCU1QiUyMmlkeCUyMiUyQyUyMCUyMnNlbnRlbmNlMSUyMiUyQyUyMCUyMnNlbnRlbmNlMiUyMiU1RCU3RCUwQSU1Qmxlbih4KSUyMGZvciUyMHglMjBpbiUyMHNhbXBsZXMlNUIlMjJpbnB1dF9pZHMlMjIlNUQlNUQ=",highlighted:`samples = tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][:<span class="hljs-number">8</span>]
samples = {k: v <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> samples.items() <span class="hljs-keyword">if</span> k <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> [<span class="hljs-string">&quot;idx&quot;</span>, <span class="hljs-string">&quot;sentence1&quot;</span>, <span class="hljs-string">&quot;sentence2&quot;</span>]}
[<span class="hljs-built_in">len</span>(x) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> samples[<span class="hljs-string">&quot;input_ids&quot;</span>]]`,wrap:!1}}),Ss=new w({props:{code:"JTVCNTAlMkMlMjA1OSUyQyUyMDQ3JTJDJTIwNjclMkMlMjA1OSUyQyUyMDUwJTJDJTIwNjIlMkMlMjAzMiU1RA==",highlighted:'[<span class="hljs-number">50</span>, <span class="hljs-number">59</span>, <span class="hljs-number">47</span>, <span class="hljs-number">67</span>, <span class="hljs-number">59</span>, <span class="hljs-number">50</span>, <span class="hljs-number">62</span>, <span class="hljs-number">32</span>]',wrap:!1}}),Ys=new w({props:{code:"YmF0Y2glMjAlM0QlMjBkYXRhX2NvbGxhdG9yKHNhbXBsZXMpJTBBJTdCayUzQSUyMHYuc2hhcGUlMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwYmF0Y2guaXRlbXMoKSU3RA==",highlighted:`batch = data_collator(samples)
{k: v.shape <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}`,wrap:!1}});const wt=[Mn,pn],sl=[];function Ct(s,l){return s[0]==="tf"?0:1}Z=Ct(T),E=sl[Z]=wt[Z](T),S=new we({props:{$$slots:{default:[rn]},$$scope:{ctx:T}}});let $=T[0]==="tf"&&Qt();return Fs=new zt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter3/2.mdx"}}),{c(){e=u("meta"),p=M(),t=u("p"),r=M(),J(b.$$.fragment),y=M(),J(C.$$.fragment),B=M(),J(h.$$.fragment),G=M(),k.c(),tl=M(),g.c(),nl=M(),H=u("p"),H.innerHTML=Qe,ul=M(),D=u("p"),D.innerHTML=Re,ml=M(),J(Y.$$.fragment),jl=M(),V.c(),al=M(),F=u("p"),F.innerHTML=Ae,Jl=M(),q=u("p"),q.textContent=Ne,Ul=M(),J(X.$$.fragment),dl=M(),J(L.$$.fragment),fl=M(),J(P.$$.fragment),Tl=M(),K=u("p"),K.innerHTML=Ze,bl=M(),O=u("p"),O.innerHTML=Ee,hl=M(),ss=u("p"),ss.innerHTML=Ge,wl=M(),J(ls.$$.fragment),Cl=M(),J(es.$$.fragment),$l=M(),ts=u("p"),ts.innerHTML=Be,_l=M(),J(ns.$$.fragment),kl=M(),J(as.$$.fragment),xl=M(),ps=u("p"),ps.innerHTML=ve,gl=M(),J(W.$$.fragment),Il=M(),J(Ms.$$.fragment),Vl=M(),R.c(),pl=M(),is=u("p"),is.innerHTML=Xe,Ql=M(),J(rs.$$.fragment),Rl=M(),cs=u("p"),cs.textContent=We,Al=M(),J(os.$$.fragment),Nl=M(),J(ys.$$.fragment),Zl=M(),us=u("p"),us.innerHTML=ze,El=M(),J(z.$$.fragment),Gl=M(),ms=u("p"),ms.innerHTML=Se,Bl=M(),J(js.$$.fragment),vl=M(),Js=u("p"),Js.textContent=He,Xl=M(),J(Us.$$.fragment),Wl=M(),ds=u("p"),ds.innerHTML=De,zl=M(),J(fs.$$.fragment),Sl=M(),Ts=u("p"),Ts.innerHTML=Ye,Hl=M(),bs=u("p"),bs.innerHTML=Fe,Dl=M(),hs=u("p"),hs.innerHTML=qe,Yl=M(),ws=u("p"),ws.textContent=Le,Fl=M(),Cs=u("p"),Cs.innerHTML=Pe,ql=M(),$s=u("p"),$s.innerHTML=Ke,Ll=M(),J(_s.$$.fragment),Pl=M(),ks=u("p"),ks.innerHTML=Oe,Kl=M(),xs=u("p"),xs.innerHTML=st,Ol=M(),J(gs.$$.fragment),se=M(),Is=u("p"),Is.innerHTML=lt,le=M(),Vs=u("p"),Vs.innerHTML=et,ee=M(),Qs=u("p"),Qs.innerHTML=tt,te=M(),J(Rs.$$.fragment),ne=M(),As=u("p"),As.textContent=nt,ae=M(),J(Ns.$$.fragment),pe=M(),Zs=u("p"),Zs.innerHTML=at,Me=M(),Es=u("p"),Es.innerHTML=pt,ie=M(),Gs=u("p"),Gs.innerHTML=Mt,re=M(),J(Bs.$$.fragment),ce=M(),J(vs.$$.fragment),oe=M(),v.c(),Ml=M(),Xs=u("p"),Xs.innerHTML=it,ye=M(),N.c(),il=M(),Ws=u("p"),Ws.innerHTML=rt,ue=M(),J(zs.$$.fragment),me=M(),J(Ss.$$.fragment),je=M(),Hs=u("p"),Hs.textContent=ct,Je=M(),Ds=u("p"),Ds.innerHTML=ot,Ue=M(),J(Ys.$$.fragment),de=M(),E.c(),rl=M(),J(S.$$.fragment),fe=M(),$&&$.c(),cl=M(),J(Fs.$$.fragment),Te=M(),ol=u("p"),this.h()},l(s){const l=Gt("svelte-u9bgzb",document.head);e=m(l,"META",{name:!0,content:!0}),l.forEach(n),p=i(s),t=m(s,"P",{}),It(t).forEach(n),r=i(s),U(b.$$.fragment,s),y=i(s),U(C.$$.fragment,s),B=i(s),U(h.$$.fragment,s),G=i(s),k.l(s),tl=i(s),g.l(s),nl=i(s),H=m(s,"P",{"data-svelte-h":!0}),j(H)!=="svelte-11ew759"&&(H.innerHTML=Qe),ul=i(s),D=m(s,"P",{"data-svelte-h":!0}),j(D)!=="svelte-q3o8gt"&&(D.innerHTML=Re),ml=i(s),U(Y.$$.fragment,s),jl=i(s),V.l(s),al=i(s),F=m(s,"P",{"data-svelte-h":!0}),j(F)!=="svelte-1pfvw0k"&&(F.innerHTML=Ae),Jl=i(s),q=m(s,"P",{"data-svelte-h":!0}),j(q)!=="svelte-75g6kx"&&(q.textContent=Ne),Ul=i(s),U(X.$$.fragment,s),dl=i(s),U(L.$$.fragment,s),fl=i(s),U(P.$$.fragment,s),Tl=i(s),K=m(s,"P",{"data-svelte-h":!0}),j(K)!=="svelte-1dl2br0"&&(K.innerHTML=Ze),bl=i(s),O=m(s,"P",{"data-svelte-h":!0}),j(O)!=="svelte-33nz84"&&(O.innerHTML=Ee),hl=i(s),ss=m(s,"P",{"data-svelte-h":!0}),j(ss)!=="svelte-1lva7ym"&&(ss.innerHTML=Ge),wl=i(s),U(ls.$$.fragment,s),Cl=i(s),U(es.$$.fragment,s),$l=i(s),ts=m(s,"P",{"data-svelte-h":!0}),j(ts)!=="svelte-1jkb34i"&&(ts.innerHTML=Be),_l=i(s),U(ns.$$.fragment,s),kl=i(s),U(as.$$.fragment,s),xl=i(s),ps=m(s,"P",{"data-svelte-h":!0}),j(ps)!=="svelte-1m29qur"&&(ps.innerHTML=ve),gl=i(s),U(W.$$.fragment,s),Il=i(s),U(Ms.$$.fragment,s),Vl=i(s),R.l(s),pl=i(s),is=m(s,"P",{"data-svelte-h":!0}),j(is)!=="svelte-1ypsy6q"&&(is.innerHTML=Xe),Ql=i(s),U(rs.$$.fragment,s),Rl=i(s),cs=m(s,"P",{"data-svelte-h":!0}),j(cs)!=="svelte-pklusf"&&(cs.textContent=We),Al=i(s),U(os.$$.fragment,s),Nl=i(s),U(ys.$$.fragment,s),Zl=i(s),us=m(s,"P",{"data-svelte-h":!0}),j(us)!=="svelte-1a9y0zr"&&(us.innerHTML=ze),El=i(s),U(z.$$.fragment,s),Gl=i(s),ms=m(s,"P",{"data-svelte-h":!0}),j(ms)!=="svelte-fflco7"&&(ms.innerHTML=Se),Bl=i(s),U(js.$$.fragment,s),vl=i(s),Js=m(s,"P",{"data-svelte-h":!0}),j(Js)!=="svelte-f12kmv"&&(Js.textContent=He),Xl=i(s),U(Us.$$.fragment,s),Wl=i(s),ds=m(s,"P",{"data-svelte-h":!0}),j(ds)!=="svelte-n5xwf2"&&(ds.innerHTML=De),zl=i(s),U(fs.$$.fragment,s),Sl=i(s),Ts=m(s,"P",{"data-svelte-h":!0}),j(Ts)!=="svelte-ssb2ns"&&(Ts.innerHTML=Ye),Hl=i(s),bs=m(s,"P",{"data-svelte-h":!0}),j(bs)!=="svelte-18zv626"&&(bs.innerHTML=Fe),Dl=i(s),hs=m(s,"P",{"data-svelte-h":!0}),j(hs)!=="svelte-t7bdf5"&&(hs.innerHTML=qe),Yl=i(s),ws=m(s,"P",{"data-svelte-h":!0}),j(ws)!=="svelte-c5jhlz"&&(ws.textContent=Le),Fl=i(s),Cs=m(s,"P",{"data-svelte-h":!0}),j(Cs)!=="svelte-5btg29"&&(Cs.innerHTML=Pe),ql=i(s),$s=m(s,"P",{"data-svelte-h":!0}),j($s)!=="svelte-1wh9ous"&&($s.innerHTML=Ke),Ll=i(s),U(_s.$$.fragment,s),Pl=i(s),ks=m(s,"P",{"data-svelte-h":!0}),j(ks)!=="svelte-1cf7eho"&&(ks.innerHTML=Oe),Kl=i(s),xs=m(s,"P",{"data-svelte-h":!0}),j(xs)!=="svelte-16quvwh"&&(xs.innerHTML=st),Ol=i(s),U(gs.$$.fragment,s),se=i(s),Is=m(s,"P",{"data-svelte-h":!0}),j(Is)!=="svelte-1ol5uxl"&&(Is.innerHTML=lt),le=i(s),Vs=m(s,"P",{"data-svelte-h":!0}),j(Vs)!=="svelte-xfn9k3"&&(Vs.innerHTML=et),ee=i(s),Qs=m(s,"P",{"data-svelte-h":!0}),j(Qs)!=="svelte-uknrpa"&&(Qs.innerHTML=tt),te=i(s),U(Rs.$$.fragment,s),ne=i(s),As=m(s,"P",{"data-svelte-h":!0}),j(As)!=="svelte-1iiirto"&&(As.textContent=nt),ae=i(s),U(Ns.$$.fragment,s),pe=i(s),Zs=m(s,"P",{"data-svelte-h":!0}),j(Zs)!=="svelte-j3on1t"&&(Zs.innerHTML=at),Me=i(s),Es=m(s,"P",{"data-svelte-h":!0}),j(Es)!=="svelte-l47bf4"&&(Es.innerHTML=pt),ie=i(s),Gs=m(s,"P",{"data-svelte-h":!0}),j(Gs)!=="svelte-1tc4lo3"&&(Gs.innerHTML=Mt),re=i(s),U(Bs.$$.fragment,s),ce=i(s),U(vs.$$.fragment,s),oe=i(s),v.l(s),Ml=i(s),Xs=m(s,"P",{"data-svelte-h":!0}),j(Xs)!=="svelte-1usjo86"&&(Xs.innerHTML=it),ye=i(s),N.l(s),il=i(s),Ws=m(s,"P",{"data-svelte-h":!0}),j(Ws)!=="svelte-ohixzw"&&(Ws.innerHTML=rt),ue=i(s),U(zs.$$.fragment,s),me=i(s),U(Ss.$$.fragment,s),je=i(s),Hs=m(s,"P",{"data-svelte-h":!0}),j(Hs)!=="svelte-bg3ugc"&&(Hs.textContent=ct),Je=i(s),Ds=m(s,"P",{"data-svelte-h":!0}),j(Ds)!=="svelte-yaqdwl"&&(Ds.innerHTML=ot),Ue=i(s),U(Ys.$$.fragment,s),de=i(s),E.l(s),rl=i(s),U(S.$$.fragment,s),fe=i(s),$&&$.l(s),cl=i(s),U(Fs.$$.fragment,s),Te=i(s),ol=m(s,"P",{}),It(ol).forEach(n),this.h()},h(){Vt(e,"name","hf:doc:metadata"),Vt(e,"content",on)},m(s,l){Bt(document.head,e),a(s,p,l),a(s,t,l),a(s,r,l),d(b,s,l),a(s,y,l),d(C,s,l),a(s,B,l),d(h,s,l),a(s,G,l),qs[_].m(s,l),a(s,tl,l),Ls[x].m(s,l),a(s,nl,l),a(s,H,l),a(s,ul,l),a(s,D,l),a(s,ml,l),d(Y,s,l),a(s,jl,l),Ps[I].m(s,l),a(s,al,l),a(s,F,l),a(s,Jl,l),a(s,q,l),a(s,Ul,l),d(X,s,l),a(s,dl,l),d(L,s,l),a(s,fl,l),d(P,s,l),a(s,Tl,l),a(s,K,l),a(s,bl,l),a(s,O,l),a(s,hl,l),a(s,ss,l),a(s,wl,l),d(ls,s,l),a(s,Cl,l),d(es,s,l),a(s,$l,l),a(s,ts,l),a(s,_l,l),d(ns,s,l),a(s,kl,l),d(as,s,l),a(s,xl,l),a(s,ps,l),a(s,gl,l),d(W,s,l),a(s,Il,l),d(Ms,s,l),a(s,Vl,l),Ks[Q].m(s,l),a(s,pl,l),a(s,is,l),a(s,Ql,l),d(rs,s,l),a(s,Rl,l),a(s,cs,l),a(s,Al,l),d(os,s,l),a(s,Nl,l),d(ys,s,l),a(s,Zl,l),a(s,us,l),a(s,El,l),d(z,s,l),a(s,Gl,l),a(s,ms,l),a(s,Bl,l),d(js,s,l),a(s,vl,l),a(s,Js,l),a(s,Xl,l),d(Us,s,l),a(s,Wl,l),a(s,ds,l),a(s,zl,l),d(fs,s,l),a(s,Sl,l),a(s,Ts,l),a(s,Hl,l),a(s,bs,l),a(s,Dl,l),a(s,hs,l),a(s,Yl,l),a(s,ws,l),a(s,Fl,l),a(s,Cs,l),a(s,ql,l),a(s,$s,l),a(s,Ll,l),d(_s,s,l),a(s,Pl,l),a(s,ks,l),a(s,Kl,l),a(s,xs,l),a(s,Ol,l),d(gs,s,l),a(s,se,l),a(s,Is,l),a(s,le,l),a(s,Vs,l),a(s,ee,l),a(s,Qs,l),a(s,te,l),d(Rs,s,l),a(s,ne,l),a(s,As,l),a(s,ae,l),d(Ns,s,l),a(s,pe,l),a(s,Zs,l),a(s,Me,l),a(s,Es,l),a(s,ie,l),a(s,Gs,l),a(s,re,l),d(Bs,s,l),a(s,ce,l),d(vs,s,l),a(s,oe,l),v.m(s,l),a(s,Ml,l),a(s,Xs,l),a(s,ye,l),Os[A].m(s,l),a(s,il,l),a(s,Ws,l),a(s,ue,l),d(zs,s,l),a(s,me,l),d(Ss,s,l),a(s,je,l),a(s,Hs,l),a(s,Je,l),a(s,Ds,l),a(s,Ue,l),d(Ys,s,l),a(s,de,l),sl[Z].m(s,l),a(s,rl,l),d(S,s,l),a(s,fe,l),$&&$.m(s,l),a(s,cl,l),d(Fs,s,l),a(s,Te,l),a(s,ol,l),be=!0},p(s,[l]){const $t={};l&1&&($t.fw=s[0]),b.$set($t);let $e=_;_=ut(s),_!==$e&&(el(),o(qs[$e],1,1,()=>{qs[$e]=null}),ll(),k=qs[_],k||(k=qs[_]=yt[_](s),k.c()),c(k,1),k.m(tl.parentNode,tl));let _e=x;x=jt(s),x!==_e&&(el(),o(Ls[_e],1,1,()=>{Ls[_e]=null}),ll(),g=Ls[x],g||(g=Ls[x]=mt[x](s),g.c()),c(g,1),g.m(nl.parentNode,nl));let ke=I;I=Ut(s),I!==ke&&(el(),o(Ps[ke],1,1,()=>{Ps[ke]=null}),ll(),V=Ps[I],V||(V=Ps[I]=Jt[I](s),V.c()),c(V,1),V.m(al.parentNode,al));const _t={};l&2&&(_t.$$scope={dirty:l,ctx:s}),X.$set(_t);const kt={};l&2&&(kt.$$scope={dirty:l,ctx:s}),W.$set(kt);let xe=Q;Q=ft(s),Q!==xe&&(el(),o(Ks[xe],1,1,()=>{Ks[xe]=null}),ll(),R=Ks[Q],R||(R=Ks[Q]=dt[Q](s),R.c()),c(R,1),R.m(pl.parentNode,pl));const xt={};l&2&&(xt.$$scope={dirty:l,ctx:s}),z.$set(xt),he!==(he=Tt(s))&&(v.d(1),v=he(s),v&&(v.c(),v.m(Ml.parentNode,Ml)));let ge=A;A=ht(s),A!==ge&&(el(),o(Os[ge],1,1,()=>{Os[ge]=null}),ll(),N=Os[A],N||(N=Os[A]=bt[A](s),N.c()),c(N,1),N.m(il.parentNode,il));let Ie=Z;Z=Ct(s),Z!==Ie&&(el(),o(sl[Ie],1,1,()=>{sl[Ie]=null}),ll(),E=sl[Z],E||(E=sl[Z]=wt[Z](s),E.c()),c(E,1),E.m(rl.parentNode,rl));const gt={};l&2&&(gt.$$scope={dirty:l,ctx:s}),S.$set(gt),s[0]==="tf"?$?l&1&&c($,1):($=Qt(),$.c(),c($,1),$.m(cl.parentNode,cl)):$&&(el(),o($,1,1,()=>{$=null}),ll())},i(s){be||(c(b.$$.fragment,s),c(C.$$.fragment,s),c(h.$$.fragment,s),c(k),c(g),c(Y.$$.fragment,s),c(V),c(X.$$.fragment,s),c(L.$$.fragment,s),c(P.$$.fragment,s),c(ls.$$.fragment,s),c(es.$$.fragment,s),c(ns.$$.fragment,s),c(as.$$.fragment,s),c(W.$$.fragment,s),c(Ms.$$.fragment,s),c(R),c(rs.$$.fragment,s),c(os.$$.fragment,s),c(ys.$$.fragment,s),c(z.$$.fragment,s),c(js.$$.fragment,s),c(Us.$$.fragment,s),c(fs.$$.fragment,s),c(_s.$$.fragment,s),c(gs.$$.fragment,s),c(Rs.$$.fragment,s),c(Ns.$$.fragment,s),c(Bs.$$.fragment,s),c(vs.$$.fragment,s),c(N),c(zs.$$.fragment,s),c(Ss.$$.fragment,s),c(Ys.$$.fragment,s),c(E),c(S.$$.fragment,s),c($),c(Fs.$$.fragment,s),be=!0)},o(s){o(b.$$.fragment,s),o(C.$$.fragment,s),o(h.$$.fragment,s),o(k),o(g),o(Y.$$.fragment,s),o(V),o(X.$$.fragment,s),o(L.$$.fragment,s),o(P.$$.fragment,s),o(ls.$$.fragment,s),o(es.$$.fragment,s),o(ns.$$.fragment,s),o(as.$$.fragment,s),o(W.$$.fragment,s),o(Ms.$$.fragment,s),o(R),o(rs.$$.fragment,s),o(os.$$.fragment,s),o(ys.$$.fragment,s),o(z.$$.fragment,s),o(js.$$.fragment,s),o(Us.$$.fragment,s),o(fs.$$.fragment,s),o(_s.$$.fragment,s),o(gs.$$.fragment,s),o(Rs.$$.fragment,s),o(Ns.$$.fragment,s),o(Bs.$$.fragment,s),o(vs.$$.fragment,s),o(N),o(zs.$$.fragment,s),o(Ss.$$.fragment,s),o(Ys.$$.fragment,s),o(E),o(S.$$.fragment,s),o($),o(Fs.$$.fragment,s),be=!1},d(s){s&&(n(p),n(t),n(r),n(y),n(B),n(G),n(tl),n(nl),n(H),n(ul),n(D),n(ml),n(jl),n(al),n(F),n(Jl),n(q),n(Ul),n(dl),n(fl),n(Tl),n(K),n(bl),n(O),n(hl),n(ss),n(wl),n(Cl),n($l),n(ts),n(_l),n(kl),n(xl),n(ps),n(gl),n(Il),n(Vl),n(pl),n(is),n(Ql),n(Rl),n(cs),n(Al),n(Nl),n(Zl),n(us),n(El),n(Gl),n(ms),n(Bl),n(vl),n(Js),n(Xl),n(Wl),n(ds),n(zl),n(Sl),n(Ts),n(Hl),n(bs),n(Dl),n(hs),n(Yl),n(ws),n(Fl),n(Cs),n(ql),n($s),n(Ll),n(Pl),n(ks),n(Kl),n(xs),n(Ol),n(se),n(Is),n(le),n(Vs),n(ee),n(Qs),n(te),n(ne),n(As),n(ae),n(pe),n(Zs),n(Me),n(Es),n(ie),n(Gs),n(re),n(ce),n(oe),n(Ml),n(Xs),n(ye),n(il),n(Ws),n(ue),n(me),n(je),n(Hs),n(Je),n(Ds),n(Ue),n(de),n(rl),n(fe),n(cl),n(Te),n(ol)),n(e),f(b,s),f(C,s),f(h,s),qs[_].d(s),Ls[x].d(s),f(Y,s),Ps[I].d(s),f(X,s),f(L,s),f(P,s),f(ls,s),f(es,s),f(ns,s),f(as,s),f(W,s),f(Ms,s),Ks[Q].d(s),f(rs,s),f(os,s),f(ys,s),f(z,s),f(js,s),f(Us,s),f(fs,s),f(_s,s),f(gs,s),f(Rs,s),f(Ns,s),f(Bs,s),f(vs,s),v.d(s),Os[A].d(s),f(zs,s),f(Ss,s),f(Ys,s),sl[Z].d(s),f(S,s),$&&$.d(s),f(Fs,s)}}}const on='{"title":"Предобработка данных","local":"предобработка-данных","sections":[{"title":"Загрузка датасета с Hub","local":"загрузка-датасета-с-hub","sections":[],"depth":3},{"title":"Предобработка датасета","local":"предобработка-датасета","sections":[],"depth":3},{"title":"Dynamic padding","local":"dynamic-padding","sections":[],"depth":3}],"depth":1}';function yn(T,e,p){let t="pt";return Nt(()=>{const r=new URLSearchParams(window.location.search);p(0,t=r.get("fw")||"pt")}),[t]}class bn extends Zt{constructor(e){super(),Et(this,e,yn,cn,At,{})}}export{bn as component};
