import{s as zt,o as Lt,n as Ft}from"../chunks/scheduler.cc52f4b9.js";import{S as Xt,i as Yt,e as f,s as c,c as J,h as Pt,a as T,d as n,b as M,f as St,g as U,j as b,k as js,l as qt,m as a,n as j,o as m,u as L,t as o,p as w,q as Kt,r as Ot,v as F}from"../chunks/index.9480bb2b.js";import{T as Rt}from"../chunks/Tip.f7b80743.js";import{C as en,H as Tl,E as ln}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.e0b4ce23.js";import{Y as Wt}from"../chunks/Youtube.7b12d9e8.js";import{C as h}from"../chunks/CodeBlock.d991436c.js";import{C as Bt}from"../chunks/CourseFloatingBanner.0ea490da.js";import{F as sn}from"../chunks/FrameworkSwitchCourse.42d12053.js";function tn(y){let s,p;return s=new Bt({props:{chapter:2,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/chapter2/section2_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section2_tf.ipynb"}]}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function nn(y){let s,p;return s=new Bt({props:{chapter:2,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/chapter2/section2_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section2_pt.ipynb"}]}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function an(y){let s;return{c(){s=Kt("Это первый раздел, в котором содержание немного отличается в зависимости от того, используете ли вы PyTorch или TensorFlow. Переключите переключатель в верхней части заголовка, чтобы выбрать платформу, которую вы предпочитаете!")},l(p){s=Ot(p,"Это первый раздел, в котором содержание немного отличается в зависимости от того, используете ли вы PyTorch или TensorFlow. Переключите переключатель в верхней части заголовка, чтобы выбрать платформу, которую вы предпочитаете!")},m(p,l){a(p,s,l)},d(p){p&&n(s)}}}function pn(y){let s,p;return s=new Wt({props:{id:"wVN12smEvqg"}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function rn(y){let s,p;return s=new Wt({props:{id:"1pedAIvTWXk"}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function cn(y){let s,p;return s=new h({props:{code:"cmF3X2lucHV0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMEElNUQlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIocmF3X2lucHV0cyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKSUwQXByaW50KGlucHV0cyk=",highlighted:`raw_inputs = [
    <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
    <span class="hljs-string">&quot;I hate this so much!&quot;</span>,
]
inputs = tokenizer(raw_inputs, 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-built_in">print</span>(inputs)`,wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function Mn(y){let s,p;return s=new h({props:{code:"cmF3X2lucHV0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMEElNUQlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIocmF3X2lucHV0cyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKSUwQXByaW50KGlucHV0cyk=",highlighted:`raw_inputs = [
    <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
    <span class="hljs-string">&quot;I hate this so much!&quot;</span>,
]
inputs = tokenizer(raw_inputs, 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-built_in">print</span>(inputs)`,wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function un(y){let s,p="Вот как выглядят результаты в виде тензоров TensorFlow:",l,i,u;return i=new h({props:{code:"JTdCJTBBJTIwJTIwJTIwJTIwJ2lucHV0X2lkcyclM0ElMjAlM0N0Zi5UZW5zb3IlM0ElMjBzaGFwZSUzRCgyJTJDJTIwMTYpJTJDJTIwZHR5cGUlM0RpbnQzMiUyQyUyMG51bXB5JTNEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXJyYXkoJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwJTIwMTAxJTJDJTIwJTIwMTA0NSUyQyUyMCUyMDEwMDUlMkMlMjAlMjAyMzEwJTJDJTIwJTIwMjA0MiUyQyUyMCUyMDM0MDMlMkMlMjAlMjAyMDA1JTJDJTIwJTIwMTAzNyUyQyUyMDE3NjYyJTJDJTIwMTIxNzIlMkMlMjAlMjAyNjA3JTJDJTIwJTIwMjAyNiUyQyUyMCUyMDI4NzglMkMlMjAlMjAyMTY2JTJDJTIwJTIwMTAxMiUyQyUyMCUyMCUyMDEwMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QiUyMCUyMDEwMSUyQyUyMCUyMDEwNDUlMkMlMjAlMjA1MjIzJTJDJTIwJTIwMjAyMyUyQyUyMCUyMDIwNjElMkMlMjAlMjAyMTcyJTJDJTIwJTIwJTIwOTk5JTJDJTIwJTIwJTIwMTAyJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMkMlMjBkdHlwZSUzRGludDMyKSUzRSUyQyUyMCUwQSUyMCUyMCUyMCUyMCdhdHRlbnRpb25fbWFzayclM0ElMjAlM0N0Zi5UZW5zb3IlM0ElMjBzaGFwZSUzRCgyJTJDJTIwMTYpJTJDJTIwZHR5cGUlM0RpbnQzMiUyQyUyMG51bXB5JTNEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXJyYXkoJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QjElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMkMlMjBkdHlwZSUzRGludDMyKSUzRSUwQSU3RA==",highlighted:`{
    <span class="hljs-string">&#x27;input_ids&#x27;</span>: &lt;tf.Tensor: shape=(<span class="hljs-number">2</span>, <span class="hljs-number">16</span>), dtype=int32, numpy=
        array([
            [  <span class="hljs-number">101</span>,  <span class="hljs-number">1045</span>,  <span class="hljs-number">1005</span>,  <span class="hljs-number">2310</span>,  <span class="hljs-number">2042</span>,  <span class="hljs-number">3403</span>,  <span class="hljs-number">2005</span>,  <span class="hljs-number">1037</span>, <span class="hljs-number">17662</span>, <span class="hljs-number">12172</span>,  <span class="hljs-number">2607</span>,  <span class="hljs-number">2026</span>,  <span class="hljs-number">2878</span>,  <span class="hljs-number">2166</span>,  <span class="hljs-number">1012</span>,   <span class="hljs-number">102</span>],
            [  <span class="hljs-number">101</span>,  <span class="hljs-number">1045</span>,  <span class="hljs-number">5223</span>,  <span class="hljs-number">2023</span>,  <span class="hljs-number">2061</span>,  <span class="hljs-number">2172</span>,   <span class="hljs-number">999</span>,   <span class="hljs-number">102</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>]
        ], dtype=int32)&gt;, 
    <span class="hljs-string">&#x27;attention_mask&#x27;</span>: &lt;tf.Tensor: shape=(<span class="hljs-number">2</span>, <span class="hljs-number">16</span>), dtype=int32, numpy=
        array([
            [<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>, <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">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>]
        ], dtype=int32)&gt;
}`,wrap:!1}}),{c(){s=f("p"),s.textContent=p,l=c(),J(i.$$.fragment)},l(r){s=T(r,"P",{"data-svelte-h":!0}),b(s)!=="svelte-1x39ut3"&&(s.textContent=p),l=M(r),U(i.$$.fragment,r)},m(r,d){a(r,s,d),a(r,l,d),j(i,r,d),u=!0},i(r){u||(o(i.$$.fragment,r),u=!0)},o(r){m(i.$$.fragment,r),u=!1},d(r){r&&(n(s),n(l)),w(i,r)}}}function mn(y){let s,p="Вот как выглядят результаты в виде тензоров PyTorch:",l,i,u;return i=new h({props:{code:"JTdCJTBBJTIwJTIwJTIwJTIwJ2lucHV0X2lkcyclM0ElMjB0ZW5zb3IoJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwJTIwMTAxJTJDJTIwJTIwMTA0NSUyQyUyMCUyMDEwMDUlMkMlMjAlMjAyMzEwJTJDJTIwJTIwMjA0MiUyQyUyMCUyMDM0MDMlMkMlMjAlMjAyMDA1JTJDJTIwJTIwMTAzNyUyQyUyMDE3NjYyJTJDJTIwMTIxNzIlMkMlMjAyNjA3JTJDJTIwJTIwMjAyNiUyQyUyMCUyMDI4NzglMkMlMjAlMjAyMTY2JTJDJTIwJTIwMTAxMiUyQyUyMCUyMCUyMDEwMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QiUyMCUyMDEwMSUyQyUyMCUyMDEwNDUlMkMlMjAlMjA1MjIzJTJDJTIwJTIwMjAyMyUyQyUyMCUyMDIwNjElMkMlMjAlMjAyMTcyJTJDJTIwJTIwJTIwOTk5JTJDJTIwJTIwJTIwMTAyJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlNUQlMEElMjAlMjAlMjAlMjAlNUQpJTJDJTIwJTBBJTIwJTIwJTIwJTIwJ2F0dGVudGlvbl9tYXNrJyUzQSUyMHRlbnNvciglNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RCUwQSUyMCUyMCUyMCUyMCU1RCklMEElN0Q=",highlighted:`{
    <span class="hljs-string">&#x27;input_ids&#x27;</span>: tensor([
        [  <span class="hljs-number">101</span>,  <span class="hljs-number">1045</span>,  <span class="hljs-number">1005</span>,  <span class="hljs-number">2310</span>,  <span class="hljs-number">2042</span>,  <span class="hljs-number">3403</span>,  <span class="hljs-number">2005</span>,  <span class="hljs-number">1037</span>, <span class="hljs-number">17662</span>, <span class="hljs-number">12172</span>, <span class="hljs-number">2607</span>,  <span class="hljs-number">2026</span>,  <span class="hljs-number">2878</span>,  <span class="hljs-number">2166</span>,  <span class="hljs-number">1012</span>,   <span class="hljs-number">102</span>],
        [  <span class="hljs-number">101</span>,  <span class="hljs-number">1045</span>,  <span class="hljs-number">5223</span>,  <span class="hljs-number">2023</span>,  <span class="hljs-number">2061</span>,  <span class="hljs-number">2172</span>,   <span class="hljs-number">999</span>,   <span class="hljs-number">102</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-string">&#x27;attention_mask&#x27;</span>: tensor([
        [<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>, <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">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>]
    ])
}`,wrap:!1}}),{c(){s=f("p"),s.textContent=p,l=c(),J(i.$$.fragment)},l(r){s=T(r,"P",{"data-svelte-h":!0}),b(s)!=="svelte-19o7f9b"&&(s.textContent=p),l=M(r),U(i.$$.fragment,r)},m(r,d){a(r,s,d),a(r,l,d),j(i,r,d),u=!0},i(r){u||(o(i.$$.fragment,r),u=!0)},o(r){m(i.$$.fragment,r),u=!1},d(r){r&&(n(s),n(l)),w(i,r)}}}function on(y){let s,p="Мы можем загрузить нашу предварительно обученную модель так же, как мы это делали с нашим токенизатором. 🤗 Transformers предоставляет класс <code>TFAutoModel</code>, в котором также есть метод <code>from_pretrained</code>:",l,i,u;return i=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsJTBBJTBBY2hlY2twb2ludCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkLWZpbmV0dW5lZC1zc3QtMi1lbmdsaXNoJTIyJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbC5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModel

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
model = TFAutoModel.from_pretrained(checkpoint)`,wrap:!1}}),{c(){s=f("p"),s.innerHTML=p,l=c(),J(i.$$.fragment)},l(r){s=T(r,"P",{"data-svelte-h":!0}),b(s)!=="svelte-pxa9f2"&&(s.innerHTML=p),l=M(r),U(i.$$.fragment,r)},m(r,d){a(r,s,d),a(r,l,d),j(i,r,d),u=!0},i(r){u||(o(i.$$.fragment,r),u=!0)},o(r){m(i.$$.fragment,r),u=!1},d(r){r&&(n(s),n(l)),w(i,r)}}}function yn(y){let s,p="Мы можем загрузить нашу предварительно обученную модель так же, как мы это делали с нашим токенизатором. 🤗 Transformers предоставляет класс <code>AutoModel</code>, у которого также есть метод <code>from_pretrained()</code>:",l,i,u;return i=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbCUwQSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMiUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModel

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
model = AutoModel.from_pretrained(checkpoint)`,wrap:!1}}),{c(){s=f("p"),s.innerHTML=p,l=c(),J(i.$$.fragment)},l(r){s=T(r,"P",{"data-svelte-h":!0}),b(s)!=="svelte-djyozh"&&(s.innerHTML=p),l=M(r),U(i.$$.fragment,r)},m(r,d){a(r,s,d),a(r,l,d),j(i,r,d),u=!0},i(r){u||(o(i.$$.fragment,r),u=!0)},o(r){m(i.$$.fragment,r),u=!1},d(r){r&&(n(s),n(l)),w(i,r)}}}function fn(y){let s,p,l,i;return s=new h({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKGlucHV0cyklMEFwcmludChvdXRwdXRzLmxhc3RfaGlkZGVuX3N0YXRlLnNoYXBlKQ==",highlighted:`outputs = model(inputs)
<span class="hljs-built_in">print</span>(outputs.last_hidden_state.shape)`,wrap:!1}}),l=new h({props:{code:"KDIlMkMlMjAxNiUyQyUyMDc2OCk=",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">16</span>, <span class="hljs-number">768</span>)',wrap:!1}}),{c(){J(s.$$.fragment),p=c(),J(l.$$.fragment)},l(u){U(s.$$.fragment,u),p=M(u),U(l.$$.fragment,u)},m(u,r){j(s,u,r),a(u,p,r),j(l,u,r),i=!0},i(u){i||(o(s.$$.fragment,u),o(l.$$.fragment,u),i=!0)},o(u){m(s.$$.fragment,u),m(l.$$.fragment,u),i=!1},d(u){u&&n(p),w(s,u),w(l,u)}}}function Tn(y){let s,p,l,i;return s=new h({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqaW5wdXRzKSUwQXByaW50KG91dHB1dHMubGFzdF9oaWRkZW5fc3RhdGUuc2hhcGUp",highlighted:`outputs = model(**inputs)
<span class="hljs-built_in">print</span>(outputs.last_hidden_state.shape)`,wrap:!1}}),l=new h({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMTYlMkMlMjA3NjglNUQp",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">16</span>, <span class="hljs-number">768</span>])',wrap:!1}}),{c(){J(s.$$.fragment),p=c(),J(l.$$.fragment)},l(u){U(s.$$.fragment,u),p=M(u),U(l.$$.fragment,u)},m(u,r){j(s,u,r),a(u,p,r),j(l,u,r),i=!0},i(u){i||(o(s.$$.fragment,u),o(l.$$.fragment,u),i=!0)},o(u){m(s.$$.fragment,u),m(l.$$.fragment,u),i=!1},d(u){u&&n(p),w(s,u),w(l,u)}}}function bn(y){let s,p="Для нашего примера нам понадобится модель с головой классификации последовательности (чтобы иметь возможность классифицировать предложения как положительные или отрицательные). Поэтому мы будем использовать не класс <code>TFAutoModel</code>, а <code>TFAutoModelForSequenceClassification</code>:",l,i,u;return i=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMiUwQW1vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQW91dHB1dHMlMjAlM0QlMjBtb2RlbChpbnB1dHMp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForSequenceClassification

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint)
outputs = model(inputs)`,wrap:!1}}),{c(){s=f("p"),s.innerHTML=p,l=c(),J(i.$$.fragment)},l(r){s=T(r,"P",{"data-svelte-h":!0}),b(s)!=="svelte-1569s7m"&&(s.innerHTML=p),l=M(r),U(i.$$.fragment,r)},m(r,d){a(r,s,d),a(r,l,d),j(i,r,d),u=!0},i(r){u||(o(i.$$.fragment,r),u=!0)},o(r){m(i.$$.fragment,r),u=!1},d(r){r&&(n(s),n(l)),w(i,r)}}}function Jn(y){let s,p="Для нашего примера нам понадобится модель с головой классификации последовательности (чтобы иметь возможность классифицировать предложения как положительные или отрицательные). Поэтому мы будем использовать не класс <code>AutoModel</code>, а <code>AutoModelForSequenceClassification</code>:",l,i,u;return i=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQtZmluZXR1bmVkLXNzdC0yLWVuZ2xpc2glMjIlMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBb3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqaW5wdXRzKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
outputs = model(**inputs)`,wrap:!1}}),{c(){s=f("p"),s.innerHTML=p,l=c(),J(i.$$.fragment)},l(r){s=T(r,"P",{"data-svelte-h":!0}),b(s)!=="svelte-17tdifq"&&(s.innerHTML=p),l=M(r),U(i.$$.fragment,r)},m(r,d){a(r,s,d),a(r,l,d),j(i,r,d),u=!0},i(r){u||(o(i.$$.fragment,r),u=!0)},o(r){m(i.$$.fragment,r),u=!1},d(r){r&&(n(s),n(l)),w(i,r)}}}function Un(y){let s,p;return s=new h({props:{code:"KDIlMkMlMjAyKQ==",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>)',wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function jn(y){let s,p;return s=new h({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMiU1RCk=",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">2</span>])',wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function wn(y){let s,p;return s=new h({props:{code:"JTNDdGYuVGVuc29yJTNBJTIwc2hhcGUlM0QoMiUyQyUyMDIpJTJDJTIwZHR5cGUlM0RmbG9hdDMyJTJDJTIwbnVtcHklM0QlMEElMjAlMjAlMjAlMjBhcnJheSglNUIlNUItMS41NjA2OTkxJTJDJTIwJTIwMS42MTIyODQyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwNC4xNjkyMzElMjAlMkMlMjAtMy4zNDY0NDcyJTVEJTVEJTJDJTIwZHR5cGUlM0RmbG9hdDMyKSUzRQ==",highlighted:`&lt;tf.Tensor: shape=(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>), dtype=float32, numpy=
    array([[-<span class="hljs-number">1.5606991</span>,  <span class="hljs-number">1.6122842</span>],
           [ <span class="hljs-number">4.169231</span> , -<span class="hljs-number">3.3464472</span>]], dtype=float32)&gt;`,wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function dn(y){let s,p;return s=new h({props:{code:"dGVuc29yKCU1QiU1Qi0xLjU2MDclMkMlMjAlMjAxLjYxMjMlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMjA0LjE2OTIlMkMlMjAtMy4zNDY0JTVEJTVEJTJDJTIwZ3JhZF9mbiUzRCUzQ0FkZG1tQmFja3dhcmQlM0Up",highlighted:`tensor([[-<span class="hljs-number">1.5607</span>,  <span class="hljs-number">1.6123</span>],
        [ <span class="hljs-number">4.1692</span>, -<span class="hljs-number">3.3464</span>]], grad_fn=&lt;AddmmBackward&gt;)`,wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function hn(y){let s,p;return s=new h({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFwcmVkaWN0aW9ucyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChvdXRwdXRzLmxvZ2l0cyUyQyUyMGF4aXMlM0QtMSklMEFwcmludChwcmVkaWN0aW9ucyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

predictions = tf.math.softmax(outputs.logits, axis=-<span class="hljs-number">1</span>)
<span class="hljs-built_in">print</span>(predictions)`,wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function $n(y){let s,p;return s=new h({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFwcmVkaWN0aW9ucyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChvdXRwdXRzLmxvZ2l0cyUyQyUyMGRpbSUzRC0xKSUwQXByaW50KHByZWRpY3Rpb25zKQ==",highlighted:`<span class="hljs-keyword">import</span> torch

predictions = torch.nn.functional.softmax(outputs.logits, dim=-<span class="hljs-number">1</span>)
<span class="hljs-built_in">print</span>(predictions)`,wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function _n(y){let s,p;return s=new h({props:{code:"dGYuVGVuc29yKCUwQSU1QiU1QjQuMDE5NTE2NzFlLTAyJTIwOS41OTgwNDgzM2UtMDElNUQlMEElMjAlNUI5Ljk5NDU1ODdlLTAxJTIwNS40NDE4NDI0ZS0wNCU1RCU1RCUyQyUyMHNoYXBlJTNEKDIlMkMlMjAyKSUyQyUyMGR0eXBlJTNEZmxvYXQzMik=",highlighted:`tf.Tensor(
[[<span class="hljs-number">4.01951671e-02</span> <span class="hljs-number">9.59804833e-01</span>]
 [<span class="hljs-number">9.9945587e-01</span> <span class="hljs-number">5.4418424e-04</span>]], shape=(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>), dtype=float32)`,wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function Cn(y){let s,p;return s=new h({props:{code:"dGVuc29yKCU1QiU1QjQuMDE5NWUtMDIlMkMlMjA5LjU5ODBlLTAxJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCOS45OTQ2ZS0wMSUyQyUyMDUuNDQxOGUtMDQlNUQlNUQlMkMlMjBncmFkX2ZuJTNEJTNDU29mdG1heEJhY2t3YXJkJTNFKQ==",highlighted:`tensor([[<span class="hljs-number">4.0195e-02</span>, <span class="hljs-number">9.5980e-01</span>],
        [<span class="hljs-number">9.9946e-01</span>, <span class="hljs-number">5.4418e-04</span>]], grad_fn=&lt;SoftmaxBackward&gt;)`,wrap:!1}}),{c(){J(s.$$.fragment)},l(l){U(s.$$.fragment,l)},m(l,i){j(s,l,i),p=!0},i(l){p||(o(s.$$.fragment,l),p=!0)},o(l){m(s.$$.fragment,l),p=!1},d(l){w(s,l)}}}function kn(y){let s,p="✏️ <strong>Попробуйте!</strong> Выберите два (или более) собственных текста и пропустите их через конвейер <code>sentiment-analysis</code>. Затем повторите описанные здесь шаги и убедитесь, что вы получили те же результаты!";return{c(){s=f("p"),s.innerHTML=p},l(l){s=T(l,"P",{"data-svelte-h":!0}),b(s)!=="svelte-2s98in"&&(s.innerHTML=p)},m(l,i){a(l,s,i)},p:Ft,d(l){l&&n(s)}}}function In(y){let s,p,l,i,u,r,d,Jl,K,Ul,$,_,al,X,jl,C,k,pl,O,vs='Давайте начнем с полноценного примера и посмотрим, что произошло за кулисами, когда мы выполнили следующий код в <a href="../chapter1">Главе 1</a>:',wl,ee,dl,le,Qs="и получили:",hl,se,$l,te,Ns="Как мы видели в [Главе 1] (../chapter1), этот конвейер объединяет три этапа: предобработку, пропуск входных данных через модель и постобработку:",_l,Y,Ds='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/full_nlp_pipeline.svg" alt="Полный конвейер NLP: токенизация текста, конвертация в идентификаторы, инференс через модель Transformer и голову модели."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/full_nlp_pipeline-dark.svg" alt="Полный конвейер NLP: токенизация текста, конвертация в идентификаторы, инференс через модель Transformer и голову модели."/>',Cl,ne,Es="Давайте быстро пройдемся по каждому из них.",kl,ae,Il,pe,Gs="Как и другие нейронные сети, модели Transformer не могут напрямую обрабатывать сырой текст, поэтому первым шагом нашего конвейера является преобразование текстовых данных в числа, которые сможет воспринимать модель. Для этого мы используем <em>токенизатор</em>, который будет отвечать за:",gl,re,Vs="<li>Разбиение входных данных на слова, подслова или символы (например, пунктуацию), которые называются <em>токенами</em></li> <li>Сопоставление каждого токена с целым числом</li> <li>Добавление дополнительных входных данных, которые могут быть полезны для модели</li>",Al,ie,Zs='Вся эта предобработка должна быть выполнена точно так же, как и при предварительном обучении модели, поэтому сначала нам нужно загрузить эту информацию из <a href="https://huggingface.co/models" rel="nofollow">Model Hub</a>. Для этого мы используем класс <code>AutoTokenizer</code> и его метод <code>from_pretrained()</code>. Используя имя контрольной точки нашей модели, он автоматически получает данные, ассоциированные с токенизатором модели, и кэширует их (таким образом, они скачиваются только в первый раз, когда вы выполняете приведенный ниже код).',xl,ce,Hs='Поскольку контрольной точкой по умолчанию конвейера <code>sentiment-analysis</code> является <code>distilbert-base-uncased-finetuned-sst-2-english</code> (вы можете посмотреть ее карточку модели <a href="https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english" rel="nofollow">здесь</a>), мы выполняем следующее:',vl,Me,Ql,ue,Ss="Когда у нас есть токенизатор, мы можем напрямую передать ему наши предложения и получить в ответ словарь, готовый к передаче в нашу модель! Осталось только преобразовать список входных идентификаторов в тензоры.",Nl,me,Rs="Вы можете использовать 🤗 Transformers, не задумываясь о том, какой ML-фреймворк используется в качестве бэкенда; это может быть PyTorch или TensorFlow, или Flax для некоторых моделей. Однако модели Transformer принимают на вход только <em>тензоры</em>. Если вы впервые слышите о тензорах, то можете считать их массивами NumPy. Массив NumPy может быть скаляром (0D), вектором (1D), матрицей (2D) или иметь больше измерений. По сути, это тензор; тензоры других ML-фреймворков ведут себя аналогично, и их обычно так же просто инстанцировать, как и массивы NumPy.",Dl,oe,Ws="Чтобы указать тип тензоров, которые мы хотим получить в ответ (PyTorch, TensorFlow или обычный NumPy), мы используем аргумент <code>return_tensors</code>:",El,I,g,rl,ye,Bs="Не беспокойтесь пока о дополнении и усечении, мы расскажем об этом позже. Главное, что нужно запомнить: вы можете передать одно предложение или список предложений, а также указать тип тензоров, которые вы хотите получить в ответ (если тип не указан, то в результате вы получите список списков).",Gl,A,x,il,fe,zs="Сам результат представляет собой словарь, содержащий два ключа, <code>input_ids</code> и <code>attention_mask</code>. <code>input_ids</code> содержит две строки целых чисел (по одной на каждое предложение), которые являются уникальными идентификаторами токенов в каждом предложении. Мы объясним, что такое <code>attention_mask</code> позже в этой главе.",Vl,Te,Zl,v,Q,cl,be,Ls="В этом фрагменте кода мы загрузили ту же контрольную точку, которую использовали в нашем конвейере ранее (на самом деле она уже должна была быть кэширована), и инстанцировали модель с ее помощью.",Hl,Je,Fs="Эта архитектура содержит только базовый модуль Transformer: при наличии некоторых входных данных он выводит то, что мы будем называть <em>скрытыми состояниями (hidden states)</em>, также известными как <em>признаки (features)</em>. Для каждого входа модели мы получим многомерный вектор, представляющий <strong>контекстное понимание этого входа моделью Transformer</strong>.",Sl,Ue,Xs="Если вы не поняли смысла, не волнуйтесь. Мы объясним всё это позже.",Rl,je,Ys='Хотя эти скрытые состояния могут быть полезны сами по себе, обычно они являются входными данными для другой части модели, известной как <em>голова (head)</em>. В <a href="../chapter1">Главе 1</a> различные задачи могли быть выполнены с помощью одной и той же архитектуры, но каждая из этих задач будет связана с разной головой.',Wl,we,Bl,de,Ps="Вектор, возвращаемый модулем Transformer, обычно большой. Обычно он имеет три измерения:",zl,he,qs="<li><strong>Размер батча (Batch size)</strong>: Количество последовательностей, обрабатываемых за один раз (в нашем примере - 2).</li> <li><strong>Длина последовательности (Sequence length)</strong>: Длина числового представления последовательности (в нашем примере - 16).</li> <li><strong>Скрытый размер (Hidden size)</strong>: Размерность вектора каждого входа модели.</li>",Ll,$e,Ks="О нем говорят как о “многомерном” из-за последнего значения. Скрытый размер может быть очень большим (768 - обычное явление для небольших моделей, а в больших моделях он может достигать 3072 и более).",Fl,_e,Os="Мы можем убедиться в этом, если подадим в нашу модель входные данные, которые мы подвергли предобработке:",Xl,N,D,Ml,Ce,et="Обратите внимание, что выходы моделей 🤗 Transformers ведут себя как <code>именованные кортежи</code> или словари. Вы можете обращаться к элементам по атрибутам (как мы это делали), по ключу (<code>outputs[&quot;last_hidden_state&quot;]</code>) или даже по индексу, если вы точно знаете, где находится искомый элемент (<code>outputs[0]</code>).",Yl,ke,Pl,Ie,lt="Головы модели принимают на вход многомерный вектор скрытых состояний и проецируют его на другое измерение. Обычно они состоят из одного или нескольких линейных слоев:",ql,P,st='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/transformer_and_head.svg" alt="Сеть-трансформер с головой."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/transformer_and_head-dark.svg" alt="Сеть-трансформер с головой."/>',Kl,ge,tt="Выход модели Transformer передается непосредственно в голову модели для обработки.",Ol,Ae,nt="На этой диаграмме модель представлена слоем эмбеддингов и последующими слоями. Слой эмбеддингов преобразует каждый входной идентификатор в токенизированном входе в вектор, который представляет соответствующий токен. Последующие слои манипулируют этими векторами с помощью механизма внимания, чтобы получить окончательное представление предложений.",es,xe,at="Существует множество различных архитектур 🤗 Transformers, каждая из которых предназначена для решения определенной задачи. Вот неполный список:",ls,ve,pt="<li><code>*Model</code> (извлечение скрытых состояний)</li> <li><code>*ForCausalLM</code></li> <li><code>*ForMaskedLM</code></li> <li><code>*ForMultipleChoice</code></li> <li><code>*ForQuestionAnswering</code></li> <li><code>*ForSequenceClassification</code></li> <li><code>*ForTokenClassification</code></li> <li>и другие 🤗</li>",ss,E,G,ul,Qe,rt="Теперь, если мы посмотрим на форму наших выходов, размерность будет гораздо ниже: голова модели принимает на вход высокоразмерные векторы, которые мы видели ранее, и возвращает векторы, содержащие два значения (по одному на метку):",ts,Ne,ns,V,Z,ml,De,it="Поскольку у нас всего два предложения и две метки, результат, полученный с помощью нашей модели, имеет форму 2 x 2.",as,Ee,ps,Ge,ct="Значения, которые мы получаем на выходе из нашей модели, не всегда имеют смысл сами по себе. Давайте посмотрим:",rs,Ve,is,H,S,ol,Ze,Mt='Наша модель спрогнозировала <code>[-1.5607, 1.6123]</code> для первого предложения и <code>[ 4.1692, -3.3464]</code> для второго. Это не вероятности, а <em>логиты</em>, сырые, ненормированные оценки, выведенные последним слоем модели. Чтобы преобразовать их в вероятности, они должны пройти через слой <a href="https://en.wikipedia.org/wiki/Softmax_function" rel="nofollow">SoftMax</a> (все модели 🤗 Transformers выводят логиты, поскольку функция потерь для обучения обычно объединяет последнюю функцию активации, такую как SoftMax, с фактической функцией потерь, такой как кросс-энтропия):',cs,R,W,yl,B,z,fl,He,ut="Теперь мы видим, что модель спрогнозировала <code>[0.0402, 0.9598]</code> для первого предложения и <code>[0.9995, 0.0005]</code> для второго. Это узнаваемые оценки вероятности.",Ms,Se,mt="Чтобы получить метки, соответствующие каждой позиции, мы можем обратиться к атрибуту <code>id2label</code> в конфигурации модели ( более подробно об этом в следующем разделе):",us,Re,ms,We,os,Be,ot="Теперь мы можем сделать вывод, что модель спрогнозировала следующее:",ys,ze,yt="<li>Первое предложение: NEGATIVE: 0.0402, POSITIVE: 0.9598</li> <li>Второе предложение: NEGATIVE: 0.9995, POSITIVE: 0.0005</li>",fs,Le,ft="Мы успешно воспроизвели три этапа конвейера: предобработку с помощью токенизаторов, прохождение входных данных через модель и постобработку! Теперь давайте уделим немного времени тому, чтобы углубиться в каждый из этих этапов.",Ts,q,bs,Fe,Js,bl,Us;u=new sn({props:{fw:y[0]}}),d=new en({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),K=new Tl({props:{title:"За конвейером",local:"behind-the-pipeline",headingTag:"h1"}});const Tt=[nn,tn],Xe=[];function bt(e,t){return e[0]==="pt"?0:1}$=bt(y),_=Xe[$]=Tt[$](y),X=new Rt({props:{$$slots:{default:[an]},$$scope:{ctx:y}}});const Jt=[rn,pn],Ye=[];function Ut(e,t){return e[0]==="pt"?0:1}C=Ut(y),k=Ye[C]=Jt[C](y),ee=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBY2xhc3NpZmllciUyMCUzRCUyMHBpcGVsaW5lKCUyMnNlbnRpbWVudC1hbmFseXNpcyUyMiklMEFjbGFzc2lmaWVyKCUwQSUyMCUyMCUyMCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMEElMjAlMjAlMjAlMjAlNUQlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

classifier = pipeline(<span class="hljs-string">&quot;sentiment-analysis&quot;</span>)
classifier(
    [
        <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
        <span class="hljs-string">&quot;I hate this so much!&quot;</span>,
    ]
)`,wrap:!1}}),se=new h({props:{code:"JTVCJTdCJ2xhYmVsJyUzQSUyMCdQT1NJVElWRSclMkMlMjAnc2NvcmUnJTNBJTIwMC45NTk4MDQ3MTM3MjYwNDM3JTdEJTJDJTBBJTIwJTdCJ2xhYmVsJyUzQSUyMCdORUdBVElWRSclMkMlMjAnc2NvcmUnJTNBJTIwMC45OTk0NTU4MDk1OTMyMDA3JTdEJTVE",highlighted:`[{<span class="hljs-string">&#x27;label&#x27;</span>: <span class="hljs-string">&#x27;POSITIVE&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9598047137260437</span>},
 {<span class="hljs-string">&#x27;label&#x27;</span>: <span class="hljs-string">&#x27;NEGATIVE&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9994558095932007</span>}]`,wrap:!1}}),ae=new Tl({props:{title:"Предобработка с помощью токенизатора",local:"preprocessing-with-a-tokenizer",headingTag:"h2"}}),Me=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQtZmluZXR1bmVkLXNzdC0yLWVuZ2xpc2glMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)`,wrap:!1}});const jt=[Mn,cn],Pe=[];function wt(e,t){return e[0]==="pt"?0:1}I=wt(y),g=Pe[I]=jt[I](y);const dt=[mn,un],qe=[];function ht(e,t){return e[0]==="pt"?0:1}A=ht(y),x=qe[A]=dt[A](y),Te=new Tl({props:{title:"Проходя сквозь модель",local:"going-through-the-model",headingTag:"h2"}});const $t=[yn,on],Ke=[];function _t(e,t){return e[0]==="pt"?0:1}v=_t(y),Q=Ke[v]=$t[v](y),we=new Tl({props:{title:"Многомерный вектор?",local:"a-high-dimensional-vector",headingTag:"h3"}});const Ct=[Tn,fn],Oe=[];function kt(e,t){return e[0]==="pt"?0:1}N=kt(y),D=Oe[N]=Ct[N](y),ke=new Tl({props:{title:"Головы моделей: Извлечение смысла из чисел",local:"model-heads-making-sense-out-of-numbers",headingTag:"h3"}});const It=[Jn,bn],el=[];function gt(e,t){return e[0]==="pt"?0:1}E=gt(y),G=el[E]=It[E](y),Ne=new h({props:{code:"cHJpbnQob3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:'<span class="hljs-built_in">print</span>(outputs.logits.shape)',wrap:!1}});const At=[jn,Un],ll=[];function xt(e,t){return e[0]==="pt"?0:1}V=xt(y),Z=ll[V]=At[V](y),Ee=new Tl({props:{title:"Постобработка вывода",local:"postprocessing-the-output",headingTag:"h2"}}),Ve=new h({props:{code:"cHJpbnQob3V0cHV0cy5sb2dpdHMp",highlighted:'<span class="hljs-built_in">print</span>(outputs.logits)',wrap:!1}});const vt=[dn,wn],sl=[];function Qt(e,t){return e[0]==="pt"?0:1}H=Qt(y),S=sl[H]=vt[H](y);const Nt=[$n,hn],tl=[];function Dt(e,t){return e[0]==="pt"?0:1}R=Dt(y),W=tl[R]=Nt[R](y);const Et=[Cn,_n],nl=[];function Gt(e,t){return e[0]==="pt"?0:1}return B=Gt(y),z=nl[B]=Et[B](y),Re=new h({props:{code:"bW9kZWwuY29uZmlnLmlkMmxhYmVs",highlighted:"model.config.id2label",wrap:!1}}),We=new h({props:{code:"JTdCMCUzQSUyMCdORUdBVElWRSclMkMlMjAxJTNBJTIwJ1BPU0lUSVZFJyU3RA==",highlighted:'{<span class="hljs-number">0</span>: <span class="hljs-string">&#x27;NEGATIVE&#x27;</span>, <span class="hljs-number">1</span>: <span class="hljs-string">&#x27;POSITIVE&#x27;</span>}',wrap:!1}}),q=new Rt({props:{$$slots:{default:[kn]},$$scope:{ctx:y}}}),Fe=new ln({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter2/2.mdx"}}),{c(){s=f("meta"),p=c(),l=f("p"),i=c(),J(u.$$.fragment),r=c(),J(d.$$.fragment),Jl=c(),J(K.$$.fragment),Ul=c(),_.c(),al=c(),J(X.$$.fragment),jl=c(),k.c(),pl=c(),O=f("p"),O.innerHTML=vs,wl=c(),J(ee.$$.fragment),dl=c(),le=f("p"),le.textContent=Qs,hl=c(),J(se.$$.fragment),$l=c(),te=f("p"),te.textContent=Ns,_l=c(),Y=f("div"),Y.innerHTML=Ds,Cl=c(),ne=f("p"),ne.textContent=Es,kl=c(),J(ae.$$.fragment),Il=c(),pe=f("p"),pe.innerHTML=Gs,gl=c(),re=f("ul"),re.innerHTML=Vs,Al=c(),ie=f("p"),ie.innerHTML=Zs,xl=c(),ce=f("p"),ce.innerHTML=Hs,vl=c(),J(Me.$$.fragment),Ql=c(),ue=f("p"),ue.textContent=Ss,Nl=c(),me=f("p"),me.innerHTML=Rs,Dl=c(),oe=f("p"),oe.innerHTML=Ws,El=c(),g.c(),rl=c(),ye=f("p"),ye.textContent=Bs,Gl=c(),x.c(),il=c(),fe=f("p"),fe.innerHTML=zs,Vl=c(),J(Te.$$.fragment),Zl=c(),Q.c(),cl=c(),be=f("p"),be.textContent=Ls,Hl=c(),Je=f("p"),Je.innerHTML=Fs,Sl=c(),Ue=f("p"),Ue.textContent=Xs,Rl=c(),je=f("p"),je.innerHTML=Ys,Wl=c(),J(we.$$.fragment),Bl=c(),de=f("p"),de.textContent=Ps,zl=c(),he=f("ul"),he.innerHTML=qs,Ll=c(),$e=f("p"),$e.textContent=Ks,Fl=c(),_e=f("p"),_e.textContent=Os,Xl=c(),D.c(),Ml=c(),Ce=f("p"),Ce.innerHTML=et,Yl=c(),J(ke.$$.fragment),Pl=c(),Ie=f("p"),Ie.textContent=lt,ql=c(),P=f("div"),P.innerHTML=st,Kl=c(),ge=f("p"),ge.textContent=tt,Ol=c(),Ae=f("p"),Ae.textContent=nt,es=c(),xe=f("p"),xe.textContent=at,ls=c(),ve=f("ul"),ve.innerHTML=pt,ss=c(),G.c(),ul=c(),Qe=f("p"),Qe.textContent=rt,ts=c(),J(Ne.$$.fragment),ns=c(),Z.c(),ml=c(),De=f("p"),De.textContent=it,as=c(),J(Ee.$$.fragment),ps=c(),Ge=f("p"),Ge.textContent=ct,rs=c(),J(Ve.$$.fragment),is=c(),S.c(),ol=c(),Ze=f("p"),Ze.innerHTML=Mt,cs=c(),W.c(),yl=c(),z.c(),fl=c(),He=f("p"),He.innerHTML=ut,Ms=c(),Se=f("p"),Se.innerHTML=mt,us=c(),J(Re.$$.fragment),ms=c(),J(We.$$.fragment),os=c(),Be=f("p"),Be.textContent=ot,ys=c(),ze=f("ul"),ze.innerHTML=yt,fs=c(),Le=f("p"),Le.textContent=ft,Ts=c(),J(q.$$.fragment),bs=c(),J(Fe.$$.fragment),Js=c(),bl=f("p"),this.h()},l(e){const t=Pt("svelte-u9bgzb",document.head);s=T(t,"META",{name:!0,content:!0}),t.forEach(n),p=M(e),l=T(e,"P",{}),St(l).forEach(n),i=M(e),U(u.$$.fragment,e),r=M(e),U(d.$$.fragment,e),Jl=M(e),U(K.$$.fragment,e),Ul=M(e),_.l(e),al=M(e),U(X.$$.fragment,e),jl=M(e),k.l(e),pl=M(e),O=T(e,"P",{"data-svelte-h":!0}),b(O)!=="svelte-16befet"&&(O.innerHTML=vs),wl=M(e),U(ee.$$.fragment,e),dl=M(e),le=T(e,"P",{"data-svelte-h":!0}),b(le)!=="svelte-1wiwec7"&&(le.textContent=Qs),hl=M(e),U(se.$$.fragment,e),$l=M(e),te=T(e,"P",{"data-svelte-h":!0}),b(te)!=="svelte-8am5v"&&(te.textContent=Ns),_l=M(e),Y=T(e,"DIV",{class:!0,"data-svelte-h":!0}),b(Y)!=="svelte-1leh7vj"&&(Y.innerHTML=Ds),Cl=M(e),ne=T(e,"P",{"data-svelte-h":!0}),b(ne)!=="svelte-1ec18ad"&&(ne.textContent=Es),kl=M(e),U(ae.$$.fragment,e),Il=M(e),pe=T(e,"P",{"data-svelte-h":!0}),b(pe)!=="svelte-1fj8oje"&&(pe.innerHTML=Gs),gl=M(e),re=T(e,"UL",{"data-svelte-h":!0}),b(re)!=="svelte-1cq4itw"&&(re.innerHTML=Vs),Al=M(e),ie=T(e,"P",{"data-svelte-h":!0}),b(ie)!=="svelte-pfuzim"&&(ie.innerHTML=Zs),xl=M(e),ce=T(e,"P",{"data-svelte-h":!0}),b(ce)!=="svelte-enqs18"&&(ce.innerHTML=Hs),vl=M(e),U(Me.$$.fragment,e),Ql=M(e),ue=T(e,"P",{"data-svelte-h":!0}),b(ue)!=="svelte-1vdxe08"&&(ue.textContent=Ss),Nl=M(e),me=T(e,"P",{"data-svelte-h":!0}),b(me)!=="svelte-1b9el8b"&&(me.innerHTML=Rs),Dl=M(e),oe=T(e,"P",{"data-svelte-h":!0}),b(oe)!=="svelte-1wzd49y"&&(oe.innerHTML=Ws),El=M(e),g.l(e),rl=M(e),ye=T(e,"P",{"data-svelte-h":!0}),b(ye)!=="svelte-1s4cli6"&&(ye.textContent=Bs),Gl=M(e),x.l(e),il=M(e),fe=T(e,"P",{"data-svelte-h":!0}),b(fe)!=="svelte-e61cg2"&&(fe.innerHTML=zs),Vl=M(e),U(Te.$$.fragment,e),Zl=M(e),Q.l(e),cl=M(e),be=T(e,"P",{"data-svelte-h":!0}),b(be)!=="svelte-1qxnrxm"&&(be.textContent=Ls),Hl=M(e),Je=T(e,"P",{"data-svelte-h":!0}),b(Je)!=="svelte-1fskn43"&&(Je.innerHTML=Fs),Sl=M(e),Ue=T(e,"P",{"data-svelte-h":!0}),b(Ue)!=="svelte-93rexp"&&(Ue.textContent=Xs),Rl=M(e),je=T(e,"P",{"data-svelte-h":!0}),b(je)!=="svelte-17ffx5j"&&(je.innerHTML=Ys),Wl=M(e),U(we.$$.fragment,e),Bl=M(e),de=T(e,"P",{"data-svelte-h":!0}),b(de)!=="svelte-u286w9"&&(de.textContent=Ps),zl=M(e),he=T(e,"UL",{"data-svelte-h":!0}),b(he)!=="svelte-1rhb374"&&(he.innerHTML=qs),Ll=M(e),$e=T(e,"P",{"data-svelte-h":!0}),b($e)!=="svelte-meobu0"&&($e.textContent=Ks),Fl=M(e),_e=T(e,"P",{"data-svelte-h":!0}),b(_e)!=="svelte-ik4v9u"&&(_e.textContent=Os),Xl=M(e),D.l(e),Ml=M(e),Ce=T(e,"P",{"data-svelte-h":!0}),b(Ce)!=="svelte-16luh58"&&(Ce.innerHTML=et),Yl=M(e),U(ke.$$.fragment,e),Pl=M(e),Ie=T(e,"P",{"data-svelte-h":!0}),b(Ie)!=="svelte-ez5t2s"&&(Ie.textContent=lt),ql=M(e),P=T(e,"DIV",{class:!0,"data-svelte-h":!0}),b(P)!=="svelte-p5gsup"&&(P.innerHTML=st),Kl=M(e),ge=T(e,"P",{"data-svelte-h":!0}),b(ge)!=="svelte-18w8t7f"&&(ge.textContent=tt),Ol=M(e),Ae=T(e,"P",{"data-svelte-h":!0}),b(Ae)!=="svelte-ytsad1"&&(Ae.textContent=nt),es=M(e),xe=T(e,"P",{"data-svelte-h":!0}),b(xe)!=="svelte-18m92ty"&&(xe.textContent=at),ls=M(e),ve=T(e,"UL",{"data-svelte-h":!0}),b(ve)!=="svelte-11e5qmc"&&(ve.innerHTML=pt),ss=M(e),G.l(e),ul=M(e),Qe=T(e,"P",{"data-svelte-h":!0}),b(Qe)!=="svelte-g7lcx6"&&(Qe.textContent=rt),ts=M(e),U(Ne.$$.fragment,e),ns=M(e),Z.l(e),ml=M(e),De=T(e,"P",{"data-svelte-h":!0}),b(De)!=="svelte-4l0m88"&&(De.textContent=it),as=M(e),U(Ee.$$.fragment,e),ps=M(e),Ge=T(e,"P",{"data-svelte-h":!0}),b(Ge)!=="svelte-1590jf6"&&(Ge.textContent=ct),rs=M(e),U(Ve.$$.fragment,e),is=M(e),S.l(e),ol=M(e),Ze=T(e,"P",{"data-svelte-h":!0}),b(Ze)!=="svelte-1l9i46m"&&(Ze.innerHTML=Mt),cs=M(e),W.l(e),yl=M(e),z.l(e),fl=M(e),He=T(e,"P",{"data-svelte-h":!0}),b(He)!=="svelte-grggho"&&(He.innerHTML=ut),Ms=M(e),Se=T(e,"P",{"data-svelte-h":!0}),b(Se)!=="svelte-47uv30"&&(Se.innerHTML=mt),us=M(e),U(Re.$$.fragment,e),ms=M(e),U(We.$$.fragment,e),os=M(e),Be=T(e,"P",{"data-svelte-h":!0}),b(Be)!=="svelte-704hex"&&(Be.textContent=ot),ys=M(e),ze=T(e,"UL",{"data-svelte-h":!0}),b(ze)!=="svelte-q6wm6e"&&(ze.innerHTML=yt),fs=M(e),Le=T(e,"P",{"data-svelte-h":!0}),b(Le)!=="svelte-vb6532"&&(Le.textContent=ft),Ts=M(e),U(q.$$.fragment,e),bs=M(e),U(Fe.$$.fragment,e),Js=M(e),bl=T(e,"P",{}),St(bl).forEach(n),this.h()},h(){js(s,"name","hf:doc:metadata"),js(s,"content",gn),js(Y,"class","flex justify-center"),js(P,"class","flex justify-center")},m(e,t){qt(document.head,s),a(e,p,t),a(e,l,t),a(e,i,t),j(u,e,t),a(e,r,t),j(d,e,t),a(e,Jl,t),j(K,e,t),a(e,Ul,t),Xe[$].m(e,t),a(e,al,t),j(X,e,t),a(e,jl,t),Ye[C].m(e,t),a(e,pl,t),a(e,O,t),a(e,wl,t),j(ee,e,t),a(e,dl,t),a(e,le,t),a(e,hl,t),j(se,e,t),a(e,$l,t),a(e,te,t),a(e,_l,t),a(e,Y,t),a(e,Cl,t),a(e,ne,t),a(e,kl,t),j(ae,e,t),a(e,Il,t),a(e,pe,t),a(e,gl,t),a(e,re,t),a(e,Al,t),a(e,ie,t),a(e,xl,t),a(e,ce,t),a(e,vl,t),j(Me,e,t),a(e,Ql,t),a(e,ue,t),a(e,Nl,t),a(e,me,t),a(e,Dl,t),a(e,oe,t),a(e,El,t),Pe[I].m(e,t),a(e,rl,t),a(e,ye,t),a(e,Gl,t),qe[A].m(e,t),a(e,il,t),a(e,fe,t),a(e,Vl,t),j(Te,e,t),a(e,Zl,t),Ke[v].m(e,t),a(e,cl,t),a(e,be,t),a(e,Hl,t),a(e,Je,t),a(e,Sl,t),a(e,Ue,t),a(e,Rl,t),a(e,je,t),a(e,Wl,t),j(we,e,t),a(e,Bl,t),a(e,de,t),a(e,zl,t),a(e,he,t),a(e,Ll,t),a(e,$e,t),a(e,Fl,t),a(e,_e,t),a(e,Xl,t),Oe[N].m(e,t),a(e,Ml,t),a(e,Ce,t),a(e,Yl,t),j(ke,e,t),a(e,Pl,t),a(e,Ie,t),a(e,ql,t),a(e,P,t),a(e,Kl,t),a(e,ge,t),a(e,Ol,t),a(e,Ae,t),a(e,es,t),a(e,xe,t),a(e,ls,t),a(e,ve,t),a(e,ss,t),el[E].m(e,t),a(e,ul,t),a(e,Qe,t),a(e,ts,t),j(Ne,e,t),a(e,ns,t),ll[V].m(e,t),a(e,ml,t),a(e,De,t),a(e,as,t),j(Ee,e,t),a(e,ps,t),a(e,Ge,t),a(e,rs,t),j(Ve,e,t),a(e,is,t),sl[H].m(e,t),a(e,ol,t),a(e,Ze,t),a(e,cs,t),tl[R].m(e,t),a(e,yl,t),nl[B].m(e,t),a(e,fl,t),a(e,He,t),a(e,Ms,t),a(e,Se,t),a(e,us,t),j(Re,e,t),a(e,ms,t),j(We,e,t),a(e,os,t),a(e,Be,t),a(e,ys,t),a(e,ze,t),a(e,fs,t),a(e,Le,t),a(e,Ts,t),j(q,e,t),a(e,bs,t),j(Fe,e,t),a(e,Js,t),a(e,bl,t),Us=!0},p(e,[t]){const Vt={};t&1&&(Vt.fw=e[0]),u.$set(Vt);let ws=$;$=bt(e),$!==ws&&(F(),m(Xe[ws],1,1,()=>{Xe[ws]=null}),L(),_=Xe[$],_||(_=Xe[$]=Tt[$](e),_.c()),o(_,1),_.m(al.parentNode,al));const Zt={};t&2&&(Zt.$$scope={dirty:t,ctx:e}),X.$set(Zt);let ds=C;C=Ut(e),C!==ds&&(F(),m(Ye[ds],1,1,()=>{Ye[ds]=null}),L(),k=Ye[C],k||(k=Ye[C]=Jt[C](e),k.c()),o(k,1),k.m(pl.parentNode,pl));let hs=I;I=wt(e),I!==hs&&(F(),m(Pe[hs],1,1,()=>{Pe[hs]=null}),L(),g=Pe[I],g||(g=Pe[I]=jt[I](e),g.c()),o(g,1),g.m(rl.parentNode,rl));let $s=A;A=ht(e),A!==$s&&(F(),m(qe[$s],1,1,()=>{qe[$s]=null}),L(),x=qe[A],x||(x=qe[A]=dt[A](e),x.c()),o(x,1),x.m(il.parentNode,il));let _s=v;v=_t(e),v!==_s&&(F(),m(Ke[_s],1,1,()=>{Ke[_s]=null}),L(),Q=Ke[v],Q||(Q=Ke[v]=$t[v](e),Q.c()),o(Q,1),Q.m(cl.parentNode,cl));let Cs=N;N=kt(e),N!==Cs&&(F(),m(Oe[Cs],1,1,()=>{Oe[Cs]=null}),L(),D=Oe[N],D||(D=Oe[N]=Ct[N](e),D.c()),o(D,1),D.m(Ml.parentNode,Ml));let ks=E;E=gt(e),E!==ks&&(F(),m(el[ks],1,1,()=>{el[ks]=null}),L(),G=el[E],G||(G=el[E]=It[E](e),G.c()),o(G,1),G.m(ul.parentNode,ul));let Is=V;V=xt(e),V!==Is&&(F(),m(ll[Is],1,1,()=>{ll[Is]=null}),L(),Z=ll[V],Z||(Z=ll[V]=At[V](e),Z.c()),o(Z,1),Z.m(ml.parentNode,ml));let gs=H;H=Qt(e),H!==gs&&(F(),m(sl[gs],1,1,()=>{sl[gs]=null}),L(),S=sl[H],S||(S=sl[H]=vt[H](e),S.c()),o(S,1),S.m(ol.parentNode,ol));let As=R;R=Dt(e),R!==As&&(F(),m(tl[As],1,1,()=>{tl[As]=null}),L(),W=tl[R],W||(W=tl[R]=Nt[R](e),W.c()),o(W,1),W.m(yl.parentNode,yl));let xs=B;B=Gt(e),B!==xs&&(F(),m(nl[xs],1,1,()=>{nl[xs]=null}),L(),z=nl[B],z||(z=nl[B]=Et[B](e),z.c()),o(z,1),z.m(fl.parentNode,fl));const Ht={};t&2&&(Ht.$$scope={dirty:t,ctx:e}),q.$set(Ht)},i(e){Us||(o(u.$$.fragment,e),o(d.$$.fragment,e),o(K.$$.fragment,e),o(_),o(X.$$.fragment,e),o(k),o(ee.$$.fragment,e),o(se.$$.fragment,e),o(ae.$$.fragment,e),o(Me.$$.fragment,e),o(g),o(x),o(Te.$$.fragment,e),o(Q),o(we.$$.fragment,e),o(D),o(ke.$$.fragment,e),o(G),o(Ne.$$.fragment,e),o(Z),o(Ee.$$.fragment,e),o(Ve.$$.fragment,e),o(S),o(W),o(z),o(Re.$$.fragment,e),o(We.$$.fragment,e),o(q.$$.fragment,e),o(Fe.$$.fragment,e),Us=!0)},o(e){m(u.$$.fragment,e),m(d.$$.fragment,e),m(K.$$.fragment,e),m(_),m(X.$$.fragment,e),m(k),m(ee.$$.fragment,e),m(se.$$.fragment,e),m(ae.$$.fragment,e),m(Me.$$.fragment,e),m(g),m(x),m(Te.$$.fragment,e),m(Q),m(we.$$.fragment,e),m(D),m(ke.$$.fragment,e),m(G),m(Ne.$$.fragment,e),m(Z),m(Ee.$$.fragment,e),m(Ve.$$.fragment,e),m(S),m(W),m(z),m(Re.$$.fragment,e),m(We.$$.fragment,e),m(q.$$.fragment,e),m(Fe.$$.fragment,e),Us=!1},d(e){e&&(n(p),n(l),n(i),n(r),n(Jl),n(Ul),n(al),n(jl),n(pl),n(O),n(wl),n(dl),n(le),n(hl),n($l),n(te),n(_l),n(Y),n(Cl),n(ne),n(kl),n(Il),n(pe),n(gl),n(re),n(Al),n(ie),n(xl),n(ce),n(vl),n(Ql),n(ue),n(Nl),n(me),n(Dl),n(oe),n(El),n(rl),n(ye),n(Gl),n(il),n(fe),n(Vl),n(Zl),n(cl),n(be),n(Hl),n(Je),n(Sl),n(Ue),n(Rl),n(je),n(Wl),n(Bl),n(de),n(zl),n(he),n(Ll),n($e),n(Fl),n(_e),n(Xl),n(Ml),n(Ce),n(Yl),n(Pl),n(Ie),n(ql),n(P),n(Kl),n(ge),n(Ol),n(Ae),n(es),n(xe),n(ls),n(ve),n(ss),n(ul),n(Qe),n(ts),n(ns),n(ml),n(De),n(as),n(ps),n(Ge),n(rs),n(is),n(ol),n(Ze),n(cs),n(yl),n(fl),n(He),n(Ms),n(Se),n(us),n(ms),n(os),n(Be),n(ys),n(ze),n(fs),n(Le),n(Ts),n(bs),n(Js),n(bl)),n(s),w(u,e),w(d,e),w(K,e),Xe[$].d(e),w(X,e),Ye[C].d(e),w(ee,e),w(se,e),w(ae,e),w(Me,e),Pe[I].d(e),qe[A].d(e),w(Te,e),Ke[v].d(e),w(we,e),Oe[N].d(e),w(ke,e),el[E].d(e),w(Ne,e),ll[V].d(e),w(Ee,e),w(Ve,e),sl[H].d(e),tl[R].d(e),nl[B].d(e),w(Re,e),w(We,e),w(q,e),w(Fe,e)}}}const gn='{"title":"За конвейером","local":"behind-the-pipeline","sections":[{"title":"Предобработка с помощью токенизатора","local":"preprocessing-with-a-tokenizer","sections":[],"depth":2},{"title":"Проходя сквозь модель","local":"going-through-the-model","sections":[{"title":"Многомерный вектор?","local":"a-high-dimensional-vector","sections":[],"depth":3},{"title":"Головы моделей: Извлечение смысла из чисел","local":"model-heads-making-sense-out-of-numbers","sections":[],"depth":3}],"depth":2},{"title":"Постобработка вывода","local":"postprocessing-the-output","sections":[],"depth":2}],"depth":1}';function An(y,s,p){let l="pt";return Lt(()=>{const i=new URLSearchParams(window.location.search);p(0,l=i.get("fw")||"pt")}),[l]}class Zn extends Xt{constructor(s){super(),Yt(this,s,An,In,zt,{})}}export{Zn as component};
