import{s as _l,o as bl}from"../chunks/scheduler.37c15a92.js";import{S as dl,i as Jl,g as M,s as p,r as d,A as $l,h as _,f as r,c,j as fl,u as J,x as b,k as ml,y as yl,a as o,v as $,t as f,b as Ue,d as m,w as y,p as ge}from"../chunks/index.2bf4358c.js";import{Y as ul}from"../chunks/Youtube.1e50a667.js";import{C as T}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as Ml}from"../chunks/CourseFloatingBanner.06521e8b.js";import{F as wl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as xe}from"../chunks/Heading.8ada512a.js";function Cl(u){let l,s;return l=new Ml({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/ru/chapter2/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ru/chapter2/section3_tf.ipynb"}]}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function Tl(u){let l,s;return l=new Ml({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/ru/chapter2/section3_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ru/chapter2/section3_pt.ipynb"}]}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function kl(u){let l,s;return l=new ul({props:{id:"d3JVgghSOew"}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function Ul(u){let l,s;return l=new ul({props:{id:"AhChOFRegn4"}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function gl(u){let l,s="In this section we’ll take a closer look at creating and using a model. We’ll use the <code>TFAutoModel</code> class, which is handy when you want to instantiate any model from a checkpoint.",t,i,w="Класс <code>TFAutoModel</code> и все его родственники на самом деле являются простыми оболочками для большого количества моделей, доступных в библиотеке. Это умная оболочка, поскольку она может автоматически угадывать подходящую архитектуру модели для вашей контрольной точки, а затем создает экземпляр модели с этой архитектурой.";return{c(){l=M("p"),l.innerHTML=s,t=p(),i=M("p"),i.innerHTML=w},l(a){l=_(a,"P",{"data-svelte-h":!0}),b(l)!=="svelte-1f7w3iq"&&(l.innerHTML=s),t=c(a),i=_(a,"P",{"data-svelte-h":!0}),b(i)!=="svelte-zgorb"&&(i.innerHTML=w)},m(a,C){o(a,l,C),o(a,t,C),o(a,i,C)},d(a){a&&(r(l),r(t),r(i))}}}function hl(u){let l,s="В этом разделе мы подробнее рассмотрим создание и использование модели. Мы будем использовать класс <code>AutoModel</code>, который удобен, когда вы хотите создать экземпляр любой модели из контрольной точки.",t,i,w="Класс <code>AutoModel</code> и все его родственники на самом деле являются простыми оболочками для большого количества моделей, доступных в библиотеке. Это умная оболочка, поскольку она может автоматически угадывать подходящую архитектуру модели для вашей контрольной точки, а затем создает экземпляр модели с этой архитектурой.";return{c(){l=M("p"),l.innerHTML=s,t=p(),i=M("p"),i.innerHTML=w},l(a){l=_(a,"P",{"data-svelte-h":!0}),b(l)!=="svelte-dxihgc"&&(l.innerHTML=s),t=c(a),i=_(a,"P",{"data-svelte-h":!0}),b(i)!=="svelte-13vxus1"&&(i.innerHTML=w)},m(a,C){o(a,l,C),o(a,t,C),o(a,i,C)},d(a){a&&(r(l),r(t),r(i))}}}function jl(u){let l,s;return l=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQSUyMyUyMEJ1aWxkaW5nJTIwdGhlJTIwY29uZmlnJTBBY29uZmlnJTIwJTNEJTIwQmVydENvbmZpZygpJTBBJTBBJTIzJTIwQnVpbGRpbmclMjB0aGUlMjBtb2RlbCUyMGZyb20lMjB0aGUlMjBjb25maWclMEFtb2RlbCUyMCUzRCUyMFRGQmVydE1vZGVsKGNvbmZpZyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

<span class="hljs-comment"># Building the config</span>
config = BertConfig()

<span class="hljs-comment"># Building the model from the config</span>
model = TFBertModel(config)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function Vl(u){let l,s;return l=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEElMjMlMjBCdWlsZGluZyUyMHRoZSUyMGNvbmZpZyUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQSUwQSUyMyUyMEJ1aWxkaW5nJTIwdGhlJTIwbW9kZWwlMjBmcm9tJTIwdGhlJTIwY29uZmlnJTBBbW9kZWwlMjAlM0QlMjBCZXJ0TW9kZWwoY29uZmlnKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

<span class="hljs-comment"># Building the config</span>
config = BertConfig()

<span class="hljs-comment"># Building the model from the config</span>
model = BertModel(config)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function El(u){let l,s;return l=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKSUwQSUwQSUyMyUyMCVEMCU5QyVEMCVCRSVEMCVCNCVEMCVCNSVEMCVCQiVEMSU4QyUyMCVEMCVCOCVEMCVCRCVEMCVCOCVEMSU4NiVEMCVCOCVEMCVCMCVEMCVCQiVEMCVCOCVEMCVCNyVEMCVCOCVEMSU4MCVEMSU4MyVEMCVCNSVEMSU4MiVEMSU4MSVEMSU4RiUyMCVEMSU4MSVEMCVCQiVEMSU4MyVEMSU4NyVEMCVCMCVEMCVCOSVEMCVCRCVEMSU4QiVEMCVCQyUyMCVEMCVCRSVEMCVCMSVEMSU4MCVEMCVCMCVEMCVCNyVEMCVCRSVEMCVCQyE=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

config = BertConfig()
model = TFBertModel(config)

<span class="hljs-comment"># Модель инициализируется случайным образом!</span>`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function vl(u){let l,s;return l=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwJUQwJTlDJUQwJUJFJUQwJUI0JUQwJUI1JUQwJUJCJUQxJThDJTIwJUQwJUI4JUQwJUJEJUQwJUI4JUQxJTg2JUQwJUI4JUQwJUIwJUQwJUJCJUQwJUI4JUQwJUI3JUQwJUI4JUQxJTgwJUQxJTgzJUQwJUI1JUQxJTgyJUQxJTgxJUQxJThGJTIwJUQxJTgxJUQwJUJCJUQxJTgzJUQxJTg3JUQwJUIwJUQwJUI5JUQwJUJEJUQxJThCJUQwJUJDJTIwJUQwJUJFJUQwJUIxJUQxJTgwJUQwJUIwJUQwJUI3JUQwJUJFJUQwJUJDIQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

config = BertConfig()
model = BertModel(config)

<span class="hljs-comment"># Модель инициализируется случайным образом!</span>`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function Zl(u){let l,s,t,i="Как вы видели ранее, мы могли бы заменить <code>TFBertModel</code> эквивалентным классом <code>TFAutoModel</code>. С этого момента мы начнем делать так, поскольку таким образом создается код, не зависящий от контрольных точек; если ваш код работает для одной контрольной точки, он должен беспрепятственно работать с другой. Это применимо, даже если архитектура отличается, при условии, что контрольная точка была обучена для аналогичной задачи (например, задачи анализа тональности).",w;return l=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQmVydE1vZGVsJTBBJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyYmVydC1iYXNlLWNhc2VkJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFBertModel

model = TFBertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){d(l.$$.fragment),s=p(),t=M("p"),t.innerHTML=i},l(a){J(l.$$.fragment,a),s=c(a),t=_(a,"P",{"data-svelte-h":!0}),b(t)!=="svelte-1cc0fac"&&(t.innerHTML=i)},m(a,C){$(l,a,C),o(a,s,C),o(a,t,C),w=!0},i(a){w||(m(l.$$.fragment,a),w=!0)},o(a){f(l.$$.fragment,a),w=!1},d(a){a&&(r(s),r(t)),y(l,a)}}}function Bl(u){let l,s,t,i="Как вы видели ранее, мы могли бы заменить <code>BertModel</code> эквивалентным классом <code>AutoModel</code>. С этого момента мы начнем делать так, поскольку таким образом создается код, не зависящий от контрольных точек; если ваш код работает для одной контрольной точки, он должен беспрепятственно работать с другой. Это применимо, даже если архитектура отличается, при условии, что контрольная точка была обучена для аналогичной задачи (например, задачи анализа тональности).",w;return l=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUwQSUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel

model = BertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){d(l.$$.fragment),s=p(),t=M("p"),t.innerHTML=i},l(a){J(l.$$.fragment,a),s=c(a),t=_(a,"P",{"data-svelte-h":!0}),b(t)!=="svelte-mg9r8w"&&(t.innerHTML=i)},m(a,C){$(l,a,C),o(a,s,C),o(a,t,C),w=!0},i(a){w||(m(l.$$.fragment,a),w=!0)},o(a){f(l.$$.fragment,a),w=!1},d(a){a&&(r(s),r(t)),y(l,a)}}}function Ql(u){let l,s;return l=new T({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHRmX21vZGVsLmg1",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>tf_model.h5`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function Il(u){let l,s;return l=new T({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHB5dG9yY2hfbW9kZWwuYmlu",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>pytorch_model.<span class="hljs-keyword">bin</span>`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function xl(u){let l,s="Файл <em>tf_model.h5</em> известен как <em>словарь состояний</em>; он содержит все веса вашей модели. Эти два файла идут рука об руку; конфигурация необходима, чтобы знать архитектуру вашей модели, в то время как веса модели являются параметрами вашей модели.";return{c(){l=M("p"),l.innerHTML=s},l(t){l=_(t,"P",{"data-svelte-h":!0}),b(l)!=="svelte-nkvub8"&&(l.innerHTML=s)},m(t,i){o(t,l,i)},d(t){t&&r(l)}}}function Wl(u){let l,s="Файл <em>pytorch_model.bin</em> известен как <em>словарь состояний</em>; он содержит все веса вашей модели. Эти два файла идут рука об руку; конфигурация необходима, чтобы знать архитектуру вашей модели, в то время как веса модели являются параметрами вашей модели.";return{c(){l=M("p"),l.innerHTML=s},l(t){l=_(t,"P",{"data-svelte-h":!0}),b(l)!=="svelte-aycro5"&&(l.innerHTML=s)},m(t,i){o(t,l,i)},d(t){t&&r(l)}}}function Rl(u){let l,s;return l=new T({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0Zi5jb25zdGFudChlbmNvZGVkX3NlcXVlbmNlcyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

model_inputs = tf.constant(encoded_sequences)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function Hl(u){let l,s;return l=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW5jb2RlZF9zZXF1ZW5jZXMp",highlighted:`<span class="hljs-keyword">import</span> torch

model_inputs = torch.tensor(encoded_sequences)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){J(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){y(l,t)}}}function Nl(u){let l,s,t,i,w,a,C,Re,k,U,he,g,h,je,Ve,N,ht="Однако, если вы знаете тип модели, которую хотите использовать, вы можете использовать класс, который напрямую определяет ее архитектуру. Давайте посмотрим, как это работает с моделью BERT.",He,S,Ne,G,jt="Первое, что нам нужно будет сделать для инициализации модели BERT, это загрузить объект конфигурации:",Se,j,V,Ee,L,Vt="Конфигурация содержит множество атрибутов, которые используются для построения модели:",Ge,A,Le,F,Ae,z,Et="Хотя вы еще не видели, что делают все эти атрибуты, вы должны узнать некоторые из них: атрибут <code>hidden_size</code> определяет размер вектора <code>hidden_states</code>, а <code>num_hidden_layers</code> определяет количество слоев, которые имеет модель.",Fe,P,ze,X,vt="Создание модели из конфигурации по умолчанию инициализирует ее случайными значениями:",Pe,E,v,ve,Y,Zt='Модель можно использовать в этом состоянии, но она будет выводить тарабарщину; сначала ее нужно обучить. Мы могли бы обучить модель с нуля для решения поставленной задачи, но, как вы видели в <a href="../chapter1/1">Главе 1</a>, это потребовало бы много времени и большого количества данных, а также имело бы значительное воздействие на окружающую среду. Чтобы избежать ненужных и дублирующих усилий, крайне важно иметь возможность делиться и повторно использовать модели, которые уже были обучены.',Xe,q,Bt="Загрузить уже обученную модель Transformer очень просто — мы можем сделать это с помощью метода <code>from_pretrained()</code>:",Ye,Z,B,Ze,D,Qt='В приведенном выше примере кода мы не использовали <code>BertConfig</code>, а вместо этого загрузили предварительно обученную модель с помощью идентификатора <code>bert-base-cased</code>. Это контрольная точка модели, которую обучили сами авторы BERT; вы можете найти более подробную информацию о ней в её <a href="https://huggingface.co/bert-base-cased" rel="nofollow">карточке модели</a>.',qe,O,It="Теперь эта модель инициализирована со всеми весами контрольной точки. Её можно использовать непосредственно для логического вывода на задачах, для которых она обучалась, а также её можно точно донастроить для новой задачи. Тренируясь с предварительно обученными весами, а не с нуля, мы можем быстро добиться хороших результатов.",De,K,xt="Веса будут загружены и кэшированы (поэтому будущие вызовы метода <code>from_pretrained()</code> не будут загружать их повторно) в папку кеша, которая по умолчанию находится в <em>~/.cache/huggingface/transformers</em>. Вы можете настроить папку кэша, установив переменную среды <code>HF_HOME</code>.",Oe,ee,Wt='Идентификатор, используемый для загрузки модели, может быть идентификатором любой модели в Model Hub, если он совместим с архитектурой BERT. Полный список доступных контрольных точек моделей BERT можно найти <a href="https://huggingface.co/models?filter=bert" rel="nofollow">здесь</a>.',Ke,te,et,le,Rt="Сохранить модель так же просто, как и загрузить - для этого мы используем метод <code>save_pretrained()</code>, аналогичный методу <code>from_pretrained()</code>:",tt,ne,lt,se,Ht="Данный код сохранит два файла на вашем диске:",nt,Q,I,Be,re,Nt="Если вы посмотрите на файл <em>config.json</em>, вы увидите атрибуты, необходимые для построения архитектуры модели. Этот файл также содержит некоторые метаданные, например, откуда появилась контрольная точка и какую версию 🤗 Transformers вы использовали, когда в последний раз сохраняли контрольную точку.",st,Qe,oe,rt,ie,St="Теперь, когда вы знаете, как загружать и сохранять модель, давайте попробуем использовать ее для построения некоторых предсказаний. Модели Transformer могут обрабатывать только числа — числа, которые генерирует токенизатор. Но прежде чем мы обсудим токенизаторы, давайте рассмотрим, какие входные данные принимает модель.",ot,ae,Gt="Токенизаторы могут позаботиться о преобразовании входных данных в соответствующие тензоры фреймворка, но чтобы помочь вам понять, что происходит, мы кратко рассмотрим, что необходимо сделать, прежде чем отправлять входные данные в модель.",it,pe,Lt="Допустим, у нас есть несколько последовательностей:",at,ce,pt,fe,At="Токенизатор преобразует их в словарные индексы, которые обычно называются <em>входными идентификаторами</em>. Каждая последовательность теперь представляет собой список чисел! В результате получается:",ct,me,ft,ue,Ft="Это список закодированных последовательностей: список списков. Тензоры принимают только прямоугольные формы (например, матрицы). Этот “массив” уже имеет прямоугольную форму, поэтому преобразовать его в тензор несложно:",mt,x,W,Ie,Me,ut,_e,zt="Использовать тензоры с моделью чрезвычайно просто — мы просто вызываем модель с входными данными:",Mt,be,_t,de,Pt="В то время как модель принимает множество различных аргументов, необходимы только входные идентификаторы. Позже мы объясним, для чего применяются другие аргументы и когда они требуются, но сначала нам нужно поближе познакомиться с токенизаторами, которые используются для создания входных данных, понятных модели Transformer.",bt,We,dt;w=new wl({props:{fw:u[0]}}),C=new xe({props:{title:"Модели",local:"модели",headingTag:"h1"}});const Xt=[Tl,Cl],Je=[];function Yt(e,n){return e[0]==="pt"?0:1}k=Yt(u),U=Je[k]=Xt[k](u);const qt=[Ul,kl],$e=[];function Dt(e,n){return e[0]==="pt"?0:1}g=Dt(u),h=$e[g]=qt[g](u);function Ot(e,n){return e[0]==="pt"?hl:gl}let Jt=Ot(u),R=Jt(u);S=new xe({props:{title:"Создание модели Transformer",local:"создание-модели-transformer",headingTag:"h2"}});const Kt=[Vl,jl],ye=[];function el(e,n){return e[0]==="pt"?0:1}j=el(u),V=ye[j]=Kt[j](u),A=new T({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),F=new T({props:{code:"QmVydENvbmZpZyUyMCU3QiUwQSUyMCUyMCU1Qi4uLiU1RCUwQSUyMCUyMCUyMmhpZGRlbl9zaXplJTIyJTNBJTIwNzY4JTJDJTBBJTIwJTIwJTIyaW50ZXJtZWRpYXRlX3NpemUlMjIlM0ElMjAzMDcyJTJDJTBBJTIwJTIwJTIybWF4X3Bvc2l0aW9uX2VtYmVkZGluZ3MlMjIlM0ElMjA1MTIlMkMlMEElMjAlMjAlMjJudW1fYXR0ZW50aW9uX2hlYWRzJTIyJTNBJTIwMTIlMkMlMEElMjAlMjAlMjJudW1faGlkZGVuX2xheWVycyUyMiUzQSUyMDEyJTJDJTBBJTIwJTIwJTVCLi4uJTVEJTBBJTdE",highlighted:`BertConfig {
  [...]
  <span class="hljs-string">&quot;hidden_size&quot;</span>: <span class="hljs-number">768</span>,
  <span class="hljs-string">&quot;intermediate_size&quot;</span>: <span class="hljs-number">3072</span>,
  <span class="hljs-string">&quot;max_position_embeddings&quot;</span>: <span class="hljs-number">512</span>,
  <span class="hljs-string">&quot;num_attention_heads&quot;</span>: <span class="hljs-number">12</span>,
  <span class="hljs-string">&quot;num_hidden_layers&quot;</span>: <span class="hljs-number">12</span>,
  [...]
}`,wrap:!1}}),P=new xe({props:{title:"Различные способы загрузки",local:"различные-способы-загрузки",headingTag:"h3"}});const tl=[vl,El],we=[];function ll(e,n){return e[0]==="pt"?0:1}E=ll(u),v=we[E]=tl[E](u);const nl=[Bl,Zl],Ce=[];function sl(e,n){return e[0]==="pt"?0:1}Z=sl(u),B=Ce[Z]=nl[Z](u),te=new xe({props:{title:"Способы сохранения",local:"способы-сохранения",headingTag:"h3"}}),ne=new T({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const rl=[Il,Ql],Te=[];function ol(e,n){return e[0]==="pt"?0:1}Q=ol(u),I=Te[Q]=rl[Q](u);function il(e,n){return e[0]==="pt"?Wl:xl}let $t=il(u),H=$t(u);oe=new xe({props:{title:"Использование модели Transformer для логического вывода",local:"использование-модели-transformer-для-логического-вывода",headingTag:"h2"}}),ce=new T({props:{code:"c2VxdWVuY2VzJTIwJTNEJTIwJTVCJTIySGVsbG8hJTIyJTJDJTIwJTIyQ29vbC4lMjIlMkMlMjAlMjJOaWNlISUyMiU1RA==",highlighted:'sequences = [<span class="hljs-string">&quot;Hello!&quot;</span>, <span class="hljs-string">&quot;Cool.&quot;</span>, <span class="hljs-string">&quot;Nice!&quot;</span>]',wrap:!1}}),me=new T({props:{code:"ZW5jb2RlZF9zZXF1ZW5jZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjA3NTkyJTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTVCMTAxJTJDJTIwNDY1OCUyQyUyMDEwMTIlMkMlMjAxMDIlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjAzODM1JTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTVE",highlighted:`encoded_sequences = [
    [<span class="hljs-number">101</span>, <span class="hljs-number">7592</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">4658</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">3835</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
]`,wrap:!1}});const al=[Hl,Rl],ke=[];function pl(e,n){return e[0]==="pt"?0:1}return x=pl(u),W=ke[x]=al[x](u),Me=new xe({props:{title:"Использование тензоров в качестве входных данных для модели",local:"использование-тензоров-в-качестве-входных-данных-для-модели",headingTag:"h3"}}),be=new T({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),{c(){l=M("meta"),s=p(),t=M("p"),i=p(),d(w.$$.fragment),a=p(),d(C.$$.fragment),Re=p(),U.c(),he=p(),h.c(),je=p(),R.c(),Ve=p(),N=M("p"),N.textContent=ht,He=p(),d(S.$$.fragment),Ne=p(),G=M("p"),G.textContent=jt,Se=p(),V.c(),Ee=p(),L=M("p"),L.textContent=Vt,Ge=p(),d(A.$$.fragment),Le=p(),d(F.$$.fragment),Ae=p(),z=M("p"),z.innerHTML=Et,Fe=p(),d(P.$$.fragment),ze=p(),X=M("p"),X.textContent=vt,Pe=p(),v.c(),ve=p(),Y=M("p"),Y.innerHTML=Zt,Xe=p(),q=M("p"),q.innerHTML=Bt,Ye=p(),B.c(),Ze=p(),D=M("p"),D.innerHTML=Qt,qe=p(),O=M("p"),O.textContent=It,De=p(),K=M("p"),K.innerHTML=xt,Oe=p(),ee=M("p"),ee.innerHTML=Wt,Ke=p(),d(te.$$.fragment),et=p(),le=M("p"),le.innerHTML=Rt,tt=p(),d(ne.$$.fragment),lt=p(),se=M("p"),se.textContent=Ht,nt=p(),I.c(),Be=p(),re=M("p"),re.innerHTML=Nt,st=p(),H.c(),Qe=p(),d(oe.$$.fragment),rt=p(),ie=M("p"),ie.textContent=St,ot=p(),ae=M("p"),ae.textContent=Gt,it=p(),pe=M("p"),pe.textContent=Lt,at=p(),d(ce.$$.fragment),pt=p(),fe=M("p"),fe.innerHTML=At,ct=p(),d(me.$$.fragment),ft=p(),ue=M("p"),ue.textContent=Ft,mt=p(),W.c(),Ie=p(),d(Me.$$.fragment),ut=p(),_e=M("p"),_e.textContent=zt,Mt=p(),d(be.$$.fragment),_t=p(),de=M("p"),de.textContent=Pt,bt=p(),We=M("p"),this.h()},l(e){const n=$l("svelte-u9bgzb",document.head);l=_(n,"META",{name:!0,content:!0}),n.forEach(r),s=c(e),t=_(e,"P",{}),fl(t).forEach(r),i=c(e),J(w.$$.fragment,e),a=c(e),J(C.$$.fragment,e),Re=c(e),U.l(e),he=c(e),h.l(e),je=c(e),R.l(e),Ve=c(e),N=_(e,"P",{"data-svelte-h":!0}),b(N)!=="svelte-181q0b0"&&(N.textContent=ht),He=c(e),J(S.$$.fragment,e),Ne=c(e),G=_(e,"P",{"data-svelte-h":!0}),b(G)!=="svelte-i5xaee"&&(G.textContent=jt),Se=c(e),V.l(e),Ee=c(e),L=_(e,"P",{"data-svelte-h":!0}),b(L)!=="svelte-ot1zp1"&&(L.textContent=Vt),Ge=c(e),J(A.$$.fragment,e),Le=c(e),J(F.$$.fragment,e),Ae=c(e),z=_(e,"P",{"data-svelte-h":!0}),b(z)!=="svelte-gf879n"&&(z.innerHTML=Et),Fe=c(e),J(P.$$.fragment,e),ze=c(e),X=_(e,"P",{"data-svelte-h":!0}),b(X)!=="svelte-sebbln"&&(X.textContent=vt),Pe=c(e),v.l(e),ve=c(e),Y=_(e,"P",{"data-svelte-h":!0}),b(Y)!=="svelte-13p4pbm"&&(Y.innerHTML=Zt),Xe=c(e),q=_(e,"P",{"data-svelte-h":!0}),b(q)!=="svelte-fmu6pw"&&(q.innerHTML=Bt),Ye=c(e),B.l(e),Ze=c(e),D=_(e,"P",{"data-svelte-h":!0}),b(D)!=="svelte-xejkj8"&&(D.innerHTML=Qt),qe=c(e),O=_(e,"P",{"data-svelte-h":!0}),b(O)!=="svelte-wk7hfm"&&(O.textContent=It),De=c(e),K=_(e,"P",{"data-svelte-h":!0}),b(K)!=="svelte-ofhmmq"&&(K.innerHTML=xt),Oe=c(e),ee=_(e,"P",{"data-svelte-h":!0}),b(ee)!=="svelte-1cm2r1l"&&(ee.innerHTML=Wt),Ke=c(e),J(te.$$.fragment,e),et=c(e),le=_(e,"P",{"data-svelte-h":!0}),b(le)!=="svelte-10glme5"&&(le.innerHTML=Rt),tt=c(e),J(ne.$$.fragment,e),lt=c(e),se=_(e,"P",{"data-svelte-h":!0}),b(se)!=="svelte-p5kjst"&&(se.textContent=Ht),nt=c(e),I.l(e),Be=c(e),re=_(e,"P",{"data-svelte-h":!0}),b(re)!=="svelte-s01kwp"&&(re.innerHTML=Nt),st=c(e),H.l(e),Qe=c(e),J(oe.$$.fragment,e),rt=c(e),ie=_(e,"P",{"data-svelte-h":!0}),b(ie)!=="svelte-uxtwnc"&&(ie.textContent=St),ot=c(e),ae=_(e,"P",{"data-svelte-h":!0}),b(ae)!=="svelte-1n4g9dw"&&(ae.textContent=Gt),it=c(e),pe=_(e,"P",{"data-svelte-h":!0}),b(pe)!=="svelte-pj9vqk"&&(pe.textContent=Lt),at=c(e),J(ce.$$.fragment,e),pt=c(e),fe=_(e,"P",{"data-svelte-h":!0}),b(fe)!=="svelte-xsrtjt"&&(fe.innerHTML=At),ct=c(e),J(me.$$.fragment,e),ft=c(e),ue=_(e,"P",{"data-svelte-h":!0}),b(ue)!=="svelte-1h7av37"&&(ue.textContent=Ft),mt=c(e),W.l(e),Ie=c(e),J(Me.$$.fragment,e),ut=c(e),_e=_(e,"P",{"data-svelte-h":!0}),b(_e)!=="svelte-c76l0s"&&(_e.textContent=zt),Mt=c(e),J(be.$$.fragment,e),_t=c(e),de=_(e,"P",{"data-svelte-h":!0}),b(de)!=="svelte-pi3ibl"&&(de.textContent=Pt),bt=c(e),We=_(e,"P",{}),fl(We).forEach(r),this.h()},h(){ml(l,"name","hf:doc:metadata"),ml(l,"content",Sl)},m(e,n){yl(document.head,l),o(e,s,n),o(e,t,n),o(e,i,n),$(w,e,n),o(e,a,n),$(C,e,n),o(e,Re,n),Je[k].m(e,n),o(e,he,n),$e[g].m(e,n),o(e,je,n),R.m(e,n),o(e,Ve,n),o(e,N,n),o(e,He,n),$(S,e,n),o(e,Ne,n),o(e,G,n),o(e,Se,n),ye[j].m(e,n),o(e,Ee,n),o(e,L,n),o(e,Ge,n),$(A,e,n),o(e,Le,n),$(F,e,n),o(e,Ae,n),o(e,z,n),o(e,Fe,n),$(P,e,n),o(e,ze,n),o(e,X,n),o(e,Pe,n),we[E].m(e,n),o(e,ve,n),o(e,Y,n),o(e,Xe,n),o(e,q,n),o(e,Ye,n),Ce[Z].m(e,n),o(e,Ze,n),o(e,D,n),o(e,qe,n),o(e,O,n),o(e,De,n),o(e,K,n),o(e,Oe,n),o(e,ee,n),o(e,Ke,n),$(te,e,n),o(e,et,n),o(e,le,n),o(e,tt,n),$(ne,e,n),o(e,lt,n),o(e,se,n),o(e,nt,n),Te[Q].m(e,n),o(e,Be,n),o(e,re,n),o(e,st,n),H.m(e,n),o(e,Qe,n),$(oe,e,n),o(e,rt,n),o(e,ie,n),o(e,ot,n),o(e,ae,n),o(e,it,n),o(e,pe,n),o(e,at,n),$(ce,e,n),o(e,pt,n),o(e,fe,n),o(e,ct,n),$(me,e,n),o(e,ft,n),o(e,ue,n),o(e,mt,n),ke[x].m(e,n),o(e,Ie,n),$(Me,e,n),o(e,ut,n),o(e,_e,n),o(e,Mt,n),$(be,e,n),o(e,_t,n),o(e,de,n),o(e,bt,n),o(e,We,n),dt=!0},p(e,[n]){const cl={};n&1&&(cl.fw=e[0]),w.$set(cl);let yt=k;k=Yt(e),k!==yt&&(ge(),f(Je[yt],1,1,()=>{Je[yt]=null}),Ue(),U=Je[k],U||(U=Je[k]=Xt[k](e),U.c()),m(U,1),U.m(he.parentNode,he));let wt=g;g=Dt(e),g!==wt&&(ge(),f($e[wt],1,1,()=>{$e[wt]=null}),Ue(),h=$e[g],h||(h=$e[g]=qt[g](e),h.c()),m(h,1),h.m(je.parentNode,je)),Jt!==(Jt=Ot(e))&&(R.d(1),R=Jt(e),R&&(R.c(),R.m(Ve.parentNode,Ve)));let Ct=j;j=el(e),j!==Ct&&(ge(),f(ye[Ct],1,1,()=>{ye[Ct]=null}),Ue(),V=ye[j],V||(V=ye[j]=Kt[j](e),V.c()),m(V,1),V.m(Ee.parentNode,Ee));let Tt=E;E=ll(e),E!==Tt&&(ge(),f(we[Tt],1,1,()=>{we[Tt]=null}),Ue(),v=we[E],v||(v=we[E]=tl[E](e),v.c()),m(v,1),v.m(ve.parentNode,ve));let kt=Z;Z=sl(e),Z!==kt&&(ge(),f(Ce[kt],1,1,()=>{Ce[kt]=null}),Ue(),B=Ce[Z],B||(B=Ce[Z]=nl[Z](e),B.c()),m(B,1),B.m(Ze.parentNode,Ze));let Ut=Q;Q=ol(e),Q!==Ut&&(ge(),f(Te[Ut],1,1,()=>{Te[Ut]=null}),Ue(),I=Te[Q],I||(I=Te[Q]=rl[Q](e),I.c()),m(I,1),I.m(Be.parentNode,Be)),$t!==($t=il(e))&&(H.d(1),H=$t(e),H&&(H.c(),H.m(Qe.parentNode,Qe)));let gt=x;x=pl(e),x!==gt&&(ge(),f(ke[gt],1,1,()=>{ke[gt]=null}),Ue(),W=ke[x],W||(W=ke[x]=al[x](e),W.c()),m(W,1),W.m(Ie.parentNode,Ie))},i(e){dt||(m(w.$$.fragment,e),m(C.$$.fragment,e),m(U),m(h),m(S.$$.fragment,e),m(V),m(A.$$.fragment,e),m(F.$$.fragment,e),m(P.$$.fragment,e),m(v),m(B),m(te.$$.fragment,e),m(ne.$$.fragment,e),m(I),m(oe.$$.fragment,e),m(ce.$$.fragment,e),m(me.$$.fragment,e),m(W),m(Me.$$.fragment,e),m(be.$$.fragment,e),dt=!0)},o(e){f(w.$$.fragment,e),f(C.$$.fragment,e),f(U),f(h),f(S.$$.fragment,e),f(V),f(A.$$.fragment,e),f(F.$$.fragment,e),f(P.$$.fragment,e),f(v),f(B),f(te.$$.fragment,e),f(ne.$$.fragment,e),f(I),f(oe.$$.fragment,e),f(ce.$$.fragment,e),f(me.$$.fragment,e),f(W),f(Me.$$.fragment,e),f(be.$$.fragment,e),dt=!1},d(e){e&&(r(s),r(t),r(i),r(a),r(Re),r(he),r(je),r(Ve),r(N),r(He),r(Ne),r(G),r(Se),r(Ee),r(L),r(Ge),r(Le),r(Ae),r(z),r(Fe),r(ze),r(X),r(Pe),r(ve),r(Y),r(Xe),r(q),r(Ye),r(Ze),r(D),r(qe),r(O),r(De),r(K),r(Oe),r(ee),r(Ke),r(et),r(le),r(tt),r(lt),r(se),r(nt),r(Be),r(re),r(st),r(Qe),r(rt),r(ie),r(ot),r(ae),r(it),r(pe),r(at),r(pt),r(fe),r(ct),r(ft),r(ue),r(mt),r(Ie),r(ut),r(_e),r(Mt),r(_t),r(de),r(bt),r(We)),r(l),y(w,e),y(C,e),Je[k].d(e),$e[g].d(e),R.d(e),y(S,e),ye[j].d(e),y(A,e),y(F,e),y(P,e),we[E].d(e),Ce[Z].d(e),y(te,e),y(ne,e),Te[Q].d(e),H.d(e),y(oe,e),y(ce,e),y(me,e),ke[x].d(e),y(Me,e),y(be,e)}}}const Sl='{"title":"Модели","local":"модели","sections":[{"title":"Создание модели Transformer","local":"создание-модели-transformer","sections":[{"title":"Различные способы загрузки","local":"различные-способы-загрузки","sections":[],"depth":3},{"title":"Способы сохранения","local":"способы-сохранения","sections":[],"depth":3}],"depth":2},{"title":"Использование модели Transformer для логического вывода","local":"использование-модели-transformer-для-логического-вывода","sections":[{"title":"Использование тензоров в качестве входных данных для модели","local":"использование-тензоров-в-качестве-входных-данных-для-модели","sections":[],"depth":3}],"depth":2}],"depth":1}';function Gl(u,l,s){let t="pt";return bl(()=>{const i=new URLSearchParams(window.location.search);s(0,t=i.get("fw")||"pt")}),[t]}class ql extends dl{constructor(l){super(),Jl(this,l,Gl,Nl,_l,{})}}export{ql as component};
