import{s as Cl,o as _l}from"../chunks/scheduler.37c15a92.js";import{S as dl,i as bl,g as u,s as f,r as d,A as $l,h as C,f as r,c as p,j as cl,u as b,x as _,k as ml,y as Jl,a as o,v as $,t as c,b as Ee,d as m,w as J,p as ke}from"../chunks/index.2bf4358c.js";import{Y as Ml}from"../chunks/Youtube.1e50a667.js";import{C as w}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as ul}from"../chunks/CourseFloatingBanner.06521e8b.js";import{F as yl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Ie}from"../chunks/Heading.8ada512a.js";function Vl(M){let l,s;return l=new ul({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/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_tf.ipynb"}]}}),{c(){d(l.$$.fragment)},l(t){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function wl(M){let l,s;return l=new ul({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/section3_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section3_pt.ipynb"}]}}),{c(){d(l.$$.fragment)},l(t){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function Ul(M){let l,s;return l=new Ml({props:{id:"d3JVgghSOew"}}),{c(){d(l.$$.fragment)},l(t){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function El(M){let l,s;return l=new Ml({props:{id:"AhChOFRegn4"}}),{c(){d(l.$$.fragment)},l(t){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function kl(M){let l,s="В этом разделе мы подробно рассмотрим создание и использование модели. Мы будем использовать класс <code>TFAutoModel</code>, который удобен, когда вы хотите инстанцировать любую модель из контрольной точки.",t,i,y="Класс <code>TFAutoModel</code> и все его родственники на самом деле являются простыми обертками для широкого спектра моделей, доступных в библиотеке. Это умная обертка, поскольку она может автоматически определить подходящую архитектуру модели для вашей контрольной точки, а затем инстанцировать модель с этой архитектурой.";return{c(){l=u("p"),l.innerHTML=s,t=f(),i=u("p"),i.innerHTML=y},l(a){l=C(a,"P",{"data-svelte-h":!0}),_(l)!=="svelte-719mh7"&&(l.innerHTML=s),t=p(a),i=C(a,"P",{"data-svelte-h":!0}),_(i)!=="svelte-fd7m75"&&(i.innerHTML=y)},m(a,V){o(a,l,V),o(a,t,V),o(a,i,V)},d(a){a&&(r(l),r(t),r(i))}}}function Tl(M){let l,s="В этом разделе мы подробно рассмотрим создание и использование модели. Мы будем использовать класс <code>AutoModel</code>, который удобен, когда вы хотите инстанцировать любую модель из контрольной точки.",t,i,y="Класс <code>AutoModel</code> и все его представители на самом деле являются простыми обертками для широкого спектра моделей, доступных в библиотеке. Это умная обертка, поскольку она может автоматически определить архитектуру модели, подходящую для вашей контрольной точки, а затем инстанцировать модель с этой архитектурой.";return{c(){l=u("p"),l.innerHTML=s,t=f(),i=u("p"),i.innerHTML=y},l(a){l=C(a,"P",{"data-svelte-h":!0}),_(l)!=="svelte-211xd1"&&(l.innerHTML=s),t=p(a),i=C(a,"P",{"data-svelte-h":!0}),_(i)!=="svelte-10evvnu"&&(i.innerHTML=y)},m(a,V){o(a,l,V),o(a,t,V),o(a,i,V)},d(a){a&&(r(l),r(t),r(i))}}}function jl(M){let l,s;return l=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQSUyMyUyMCVEMCVBMSVEMCVCRSVEMCVCNyVEMCVCNCVEMCVCMCVEMCVCRCVEMCVCOCVEMCVCNSUyMCVEMCVCQSVEMCVCRSVEMCVCRCVEMSU4NCVEMCVCOCVEMCVCMyVEMSU4MyVEMSU4MCVEMCVCMCVEMSU4NiVEMCVCOCVEMCVCOCUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQSUwQSUyMyUyMCVEMCVBMSVEMCVCRSVEMCVCNyVEMCVCNCVEMCVCMCVEMCVCRCVEMCVCOCVEMCVCNSUyMCVEMCVCQyVEMCVCRSVEMCVCNCVEMCVCNSVEMCVCQiVEMCVCOCUyMCVEMCVCRCVEMCVCMCUyMCVEMCVCRSVEMSU4MSVEMCVCRCVEMCVCRSVEMCVCMiVEMCVCNSUyMCVEMCVCQSVEMCVCRSVEMCVCRCVEMSU4NCVEMCVCOCVEMCVCMyVEMSU4MyVEMSU4MCVEMCVCMCVEMSU4NiVEMCVCOCVEMCVCOCUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

<span class="hljs-comment"># Создание конфигурации</span>
config = BertConfig()

<span class="hljs-comment"># Создание модели на основе конфигурации</span>
model = TFBertModel(config)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function gl(M){let l,s;return l=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEElMjMlMjAlRDAlQTElRDAlQkUlRDAlQjclRDAlQjQlRDAlQjAlRDAlQkQlRDAlQjglRDAlQjUlMjAlRDAlQkElRDAlQkUlRDAlQkQlRDElODQlRDAlQjglRDAlQjMlRDElODMlRDElODAlRDAlQjAlRDElODYlRDAlQjglRDAlQjglMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEElMEElMjMlMjAlRDAlQTElRDAlQkUlRDAlQjclRDAlQjQlRDAlQjAlRDAlQkQlRDAlQjglRDAlQjUlMjAlRDAlQkMlRDAlQkUlRDAlQjQlRDAlQjUlRDAlQkIlRDAlQjglMjAlRDAlQkQlRDAlQjAlMjAlRDAlQkUlRDElODElRDAlQkQlRDAlQkUlRDAlQjIlRDAlQjUlMjAlRDAlQkElRDAlQkUlRDAlQkQlRDElODQlRDAlQjglRDAlQjMlRDElODMlRDElODAlRDAlQjAlRDElODYlRDAlQjglRDAlQjglMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

<span class="hljs-comment"># Создание конфигурации</span>
config = BertConfig()

<span class="hljs-comment"># Создание модели на основе конфигурации</span>
model = BertModel(config)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(t){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function Ql(M){let l,s;return l=new w({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){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function hl(M){let l,s;return l=new w({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){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function Rl(M){let l,s,t,i="Как вы видели ранее, мы можем заменить <code>TFBertModel</code> на эквивалентный класс <code>TFAutoModel</code>. В дальнейшем мы будем поступать именно так, поскольку таким образом мы получаем код, не зависящий от контрольных точек; если ваш код работает на одной контрольной точке, он должен без проблем работать и на другой. Это касается даже разных архитектур, если контрольная точка была обучена для схожей задачи (например, задачи анализа настроений).",y;return l=new w({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=f(),t=u("p"),t.innerHTML=i},l(a){b(l.$$.fragment,a),s=p(a),t=C(a,"P",{"data-svelte-h":!0}),_(t)!=="svelte-1olxpc0"&&(t.innerHTML=i)},m(a,V){$(l,a,V),o(a,s,V),o(a,t,V),y=!0},i(a){y||(m(l.$$.fragment,a),y=!0)},o(a){c(l.$$.fragment,a),y=!1},d(a){a&&(r(s),r(t)),J(l,a)}}}function vl(M){let l,s,t,i="Как вы видели ранее, мы можем заменить <code>BertModel</code> на эквивалентный класс <code>AutoModel</code>. В дальнейшем мы будем поступать именно так, поскольку таким образом мы получаем код, не зависящий от контрольных точек; если ваш код работает на одной контрольной точке, он должен без проблем работать и на другой. Это касается даже разных архитектур, если контрольная точка была обучена для схожей задачи (например, задачи анализа настроений).",y;return l=new w({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=f(),t=u("p"),t.innerHTML=i},l(a){b(l.$$.fragment,a),s=p(a),t=C(a,"P",{"data-svelte-h":!0}),_(t)!=="svelte-1wd831c"&&(t.innerHTML=i)},m(a,V){$(l,a,V),o(a,s,V),o(a,t,V),y=!0},i(a){y||(m(l.$$.fragment,a),y=!0)},o(a){c(l.$$.fragment,a),y=!1},d(a){a&&(r(s),r(t)),J(l,a)}}}function Al(M){let l,s;return l=new w({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){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function Dl(M){let l,s;return l=new w({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){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function Il(M){let l,s="Файл <em>tf_model.h5</em> известен как <em>словарь состояний (state dictionary)</em>; он содержит все веса вашей модели. Эти два файла неразрывно связаны друг с другом; конфигурация необходима для того, чтобы знать архитектуру модели, а веса модели - это ее параметры.";return{c(){l=u("p"),l.innerHTML=s},l(t){l=C(t,"P",{"data-svelte-h":!0}),_(l)!=="svelte-1jkmqr1"&&(l.innerHTML=s)},m(t,i){o(t,l,i)},d(t){t&&r(l)}}}function xl(M){let l,s="Файл <em>pytorch_model.bin</em> известен как <em>словарь состояний (state dictionary)</em>; он содержит все веса вашей модели. Эти два файла неразрывно связаны друг с другом; конфигурация необходима для того, чтобы знать архитектуру модели, а веса модели - это ее параметры.";return{c(){l=u("p"),l.innerHTML=s},l(t){l=C(t,"P",{"data-svelte-h":!0}),_(l)!=="svelte-1rgkfkc"&&(l.innerHTML=s)},m(t,i){o(t,l,i)},d(t){t&&r(l)}}}function Zl(M){let l,s;return l=new w({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){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function Sl(M){let l,s;return l=new w({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){b(l.$$.fragment,t)},m(t,i){$(l,t,i),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){c(l.$$.fragment,t),s=!1},d(t){J(l,t)}}}function Wl(M){let l,s,t,i,y,a,V,Ze,U,E,Te,k,T,je,ge,W,Tt="Однако если вы знаете тип модели, которую хотите использовать, вы можете напрямую использовать класс, определяющий ее архитектуру. Давайте рассмотрим, как это работает на примере модели BERT.",Se,B,We,N,jt="Первое, что нам нужно сделать для инициализации модели BERT, - загрузить объект конфигурации:",Be,j,g,Qe,H,gt="Конфигурация содержит множество атрибутов, которые используются для создания модели:",Ne,L,He,F,Le,z,Qt="Хотя вы еще не видели, что делают все эти атрибуты, вы должны узнать некоторые из них: атрибут <code>hidden_size</code> определяет размер вектора <code>hidden_states</code>, а <code>num_hidden_layers</code> определяет количество слоев в модели Transformer.",Fe,G,ze,P,ht="При создании модели из конфигурации по умолчанию она инициализируется случайными значениями:",Ge,Q,h,he,X,Rt='Модель можно использовать и в таком состоянии, но она будет выдавать тарабарщину; сначала ее нужно обучить. Мы могли бы обучить модель с нуля для конкретной задачи, но, как вы видели в <a href="../chapter1">Главе 1</a>, это потребовало бы много времени и большого количества данных, а также оказало бы немалое влияние на окружающую среду. Чтобы избежать ненужных и дублирующих усилий, крайне важно иметь возможность обмениваться уже обученными моделями и повторно их использовать.',Pe,q,vt="Загрузить уже обученную модель Transformer очень просто - мы можем сделать это с помощью метода <code>from_pretrained()</code>:",Xe,R,v,Re,O,At='В приведенном выше примере кода мы не использовали <code>BertConfig</code>, а вместо этого загрузили предварительно обученную модель через идентификатор <code>bert-base-cased</code>. Это контрольная точка модели, которая была обучена самими авторами BERT; более подробную информацию о ней можно найти в ее <a href="https://huggingface.co/bert-base-cased" rel="nofollow">карточке модели</a>.',qe,Y,Dt="Теперь эта модель инициализирована всеми весами контрольной точки. Ее можно использовать непосредственно для инференса на задачах, для которых она была обучена, а также для дообучения на новой задаче. Обучаясь с предварительно подготовленными весами, а не с нуля, мы можем быстро добиться хороших результатов.",Oe,K,It="Веса были загружены и кэшированы (чтобы последующие вызовы метода <code>from_pretrained()</code> не загружали их заново) в папке кэша, которая по умолчанию находится в <em>~/.cache/huggingface/transformers</em>. Вы можете настроить папку кэша, установив переменную окружения <code>HF_HOME</code>.",Ye,ee,xt='Идентификатор, используемый для загрузки модели, может быть идентификатором любой модели на Model Hub, если она совместима с архитектурой BERT. Полный список доступных контрольных точек BERT можно найти <a href="https://huggingface.co/models?filter=bert" rel="nofollow">здесь</a>.',Ke,te,et,le,Zt="Сохранить модель так же просто, как и загрузить ее - мы используем метод <code>save_pretrained()</code>, который аналогичен методу <code>from_pretrained()</code>:",tt,ne,lt,se,St="При этом на диск сохраняются два файла:",nt,A,D,ve,re,Wt="Если вы посмотрите на файл <em>config.json</em>, то узнаете атрибуты, необходимые для построения архитектуры модели. Этот файл также содержит некоторые метаданные, такие как место создания контрольной точки и версию 🤗 Transformers, которую вы использовали при последнем сохранении контрольной точки.",st,Ae,oe,rt,ie,Bt="Теперь, когда вы знаете, как загружать и сохранять модель, давайте попробуем использовать ее для прогнозирования. Модели Transformer могут обрабатывать только числа - числа, которые генерирует токенизатор. Но прежде чем мы обсудим токенизаторы, давайте узнаем, какие входные данные (входы) принимает модель.",ot,ae,Nt="Токенизаторы могут позаботиться о приведении входных данных к тензорам соответствующего фреймворка, но чтобы помочь вам понять, что происходит, мы кратко рассмотрим, что нужно сделать перед передачей входных данных в модель.",it,fe,Ht="Допустим, у нас есть несколько последовательностей:",at,pe,ft,ce,Lt="Токенизатор преобразует их в индексы словаря, которые обычно называются <em>идентификаторами входов (input IDs)</em>. Теперь каждая последовательность представляет собой список чисел! В результате на выходе получаем:",pt,me,ct,Me,Ft="Это список закодированных последовательностей: список списков. Тензоры принимают только прямоугольную форму (подумайте о матрицах). Этот “массив” уже имеет прямоугольную форму, поэтому преобразовать его в тензор очень просто:",mt,I,x,De,ue,Mt,Ce,zt="Использовать тензоры с моделью очень просто - мы просто вызываем модель с входами:",ut,_e,Ct,de,Gt=`Хотя модель принимает множество различных аргументов, только идентификаторы входов являются необходимыми. О том, что делают остальные аргументы и когда они нужны, мы расскажем позже,
но сначала нам нужно подробнее рассмотреть токенизаторы, которые формируют входные данные (входы), которые может понять модель Transformer.`,_t,xe,dt;y=new yl({props:{fw:M[0]}}),V=new Ie({props:{title:"Модели",local:"models",headingTag:"h1"}});const Pt=[wl,Vl],be=[];function Xt(e,n){return e[0]==="pt"?0:1}U=Xt(M),E=be[U]=Pt[U](M);const qt=[El,Ul],$e=[];function Ot(e,n){return e[0]==="pt"?0:1}k=Ot(M),T=$e[k]=qt[k](M);function Yt(e,n){return e[0]==="pt"?Tl:kl}let bt=Yt(M),Z=bt(M);B=new Ie({props:{title:"Создание Transformer",local:"creating-a-transformer",headingTag:"h2"}});const Kt=[gl,jl],Je=[];function el(e,n){return e[0]==="pt"?0:1}j=el(M),g=Je[j]=Kt[j](M),L=new w({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),F=new w({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}}),G=new Ie({props:{title:"Различные методы загрузки",local:"different-loading-methods",headingTag:"h3"}});const tl=[hl,Ql],ye=[];function ll(e,n){return e[0]==="pt"?0:1}Q=ll(M),h=ye[Q]=tl[Q](M);const nl=[vl,Rl],Ve=[];function sl(e,n){return e[0]==="pt"?0:1}R=sl(M),v=Ve[R]=nl[R](M),te=new Ie({props:{title:"Методы сохранения",local:"saving-methods",headingTag:"h3"}}),ne=new w({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const rl=[Dl,Al],we=[];function ol(e,n){return e[0]==="pt"?0:1}A=ol(M),D=we[A]=rl[A](M);function il(e,n){return e[0]==="pt"?xl:Il}let $t=il(M),S=$t(M);oe=new Ie({props:{title:"Использование модели Transformer для инференса",local:"using-a-transformer-model-for-inference",headingTag:"h2"}}),pe=new w({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 w({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=[Sl,Zl],Ue=[];function fl(e,n){return e[0]==="pt"?0:1}return I=fl(M),x=Ue[I]=al[I](M),ue=new Ie({props:{title:"Использование тензоров в качестве входов в модель",local:"using-the-tensors-as-inputs-to-the-model",headingTag:"h3"}}),_e=new w({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),{c(){l=u("meta"),s=f(),t=u("p"),i=f(),d(y.$$.fragment),a=f(),d(V.$$.fragment),Ze=f(),E.c(),Te=f(),T.c(),je=f(),Z.c(),ge=f(),W=u("p"),W.textContent=Tt,Se=f(),d(B.$$.fragment),We=f(),N=u("p"),N.textContent=jt,Be=f(),g.c(),Qe=f(),H=u("p"),H.textContent=gt,Ne=f(),d(L.$$.fragment),He=f(),d(F.$$.fragment),Le=f(),z=u("p"),z.innerHTML=Qt,Fe=f(),d(G.$$.fragment),ze=f(),P=u("p"),P.textContent=ht,Ge=f(),h.c(),he=f(),X=u("p"),X.innerHTML=Rt,Pe=f(),q=u("p"),q.innerHTML=vt,Xe=f(),v.c(),Re=f(),O=u("p"),O.innerHTML=At,qe=f(),Y=u("p"),Y.textContent=Dt,Oe=f(),K=u("p"),K.innerHTML=It,Ye=f(),ee=u("p"),ee.innerHTML=xt,Ke=f(),d(te.$$.fragment),et=f(),le=u("p"),le.innerHTML=Zt,tt=f(),d(ne.$$.fragment),lt=f(),se=u("p"),se.textContent=St,nt=f(),D.c(),ve=f(),re=u("p"),re.innerHTML=Wt,st=f(),S.c(),Ae=f(),d(oe.$$.fragment),rt=f(),ie=u("p"),ie.textContent=Bt,ot=f(),ae=u("p"),ae.textContent=Nt,it=f(),fe=u("p"),fe.textContent=Ht,at=f(),d(pe.$$.fragment),ft=f(),ce=u("p"),ce.innerHTML=Lt,pt=f(),d(me.$$.fragment),ct=f(),Me=u("p"),Me.textContent=Ft,mt=f(),x.c(),De=f(),d(ue.$$.fragment),Mt=f(),Ce=u("p"),Ce.textContent=zt,ut=f(),d(_e.$$.fragment),Ct=f(),de=u("p"),de.textContent=Gt,_t=f(),xe=u("p"),this.h()},l(e){const n=$l("svelte-u9bgzb",document.head);l=C(n,"META",{name:!0,content:!0}),n.forEach(r),s=p(e),t=C(e,"P",{}),cl(t).forEach(r),i=p(e),b(y.$$.fragment,e),a=p(e),b(V.$$.fragment,e),Ze=p(e),E.l(e),Te=p(e),T.l(e),je=p(e),Z.l(e),ge=p(e),W=C(e,"P",{"data-svelte-h":!0}),_(W)!=="svelte-1k5gwwi"&&(W.textContent=Tt),Se=p(e),b(B.$$.fragment,e),We=p(e),N=C(e,"P",{"data-svelte-h":!0}),_(N)!=="svelte-67i1mp"&&(N.textContent=jt),Be=p(e),g.l(e),Qe=p(e),H=C(e,"P",{"data-svelte-h":!0}),_(H)!=="svelte-q1gk36"&&(H.textContent=gt),Ne=p(e),b(L.$$.fragment,e),He=p(e),b(F.$$.fragment,e),Le=p(e),z=C(e,"P",{"data-svelte-h":!0}),_(z)!=="svelte-r98d9e"&&(z.innerHTML=Qt),Fe=p(e),b(G.$$.fragment,e),ze=p(e),P=C(e,"P",{"data-svelte-h":!0}),_(P)!=="svelte-9d5qyy"&&(P.textContent=ht),Ge=p(e),h.l(e),he=p(e),X=C(e,"P",{"data-svelte-h":!0}),_(X)!=="svelte-5w36dd"&&(X.innerHTML=Rt),Pe=p(e),q=C(e,"P",{"data-svelte-h":!0}),_(q)!=="svelte-hmtaz7"&&(q.innerHTML=vt),Xe=p(e),v.l(e),Re=p(e),O=C(e,"P",{"data-svelte-h":!0}),_(O)!=="svelte-qy09ow"&&(O.innerHTML=At),qe=p(e),Y=C(e,"P",{"data-svelte-h":!0}),_(Y)!=="svelte-3z31sh"&&(Y.textContent=Dt),Oe=p(e),K=C(e,"P",{"data-svelte-h":!0}),_(K)!=="svelte-3sp1vv"&&(K.innerHTML=It),Ye=p(e),ee=C(e,"P",{"data-svelte-h":!0}),_(ee)!=="svelte-1ee1qv2"&&(ee.innerHTML=xt),Ke=p(e),b(te.$$.fragment,e),et=p(e),le=C(e,"P",{"data-svelte-h":!0}),_(le)!=="svelte-1il03pc"&&(le.innerHTML=Zt),tt=p(e),b(ne.$$.fragment,e),lt=p(e),se=C(e,"P",{"data-svelte-h":!0}),_(se)!=="svelte-j0c3r4"&&(se.textContent=St),nt=p(e),D.l(e),ve=p(e),re=C(e,"P",{"data-svelte-h":!0}),_(re)!=="svelte-1yb4shs"&&(re.innerHTML=Wt),st=p(e),S.l(e),Ae=p(e),b(oe.$$.fragment,e),rt=p(e),ie=C(e,"P",{"data-svelte-h":!0}),_(ie)!=="svelte-187ytzt"&&(ie.textContent=Bt),ot=p(e),ae=C(e,"P",{"data-svelte-h":!0}),_(ae)!=="svelte-toay4n"&&(ae.textContent=Nt),it=p(e),fe=C(e,"P",{"data-svelte-h":!0}),_(fe)!=="svelte-pj9vqk"&&(fe.textContent=Ht),at=p(e),b(pe.$$.fragment,e),ft=p(e),ce=C(e,"P",{"data-svelte-h":!0}),_(ce)!=="svelte-kjbfu0"&&(ce.innerHTML=Lt),pt=p(e),b(me.$$.fragment,e),ct=p(e),Me=C(e,"P",{"data-svelte-h":!0}),_(Me)!=="svelte-nleewj"&&(Me.textContent=Ft),mt=p(e),x.l(e),De=p(e),b(ue.$$.fragment,e),Mt=p(e),Ce=C(e,"P",{"data-svelte-h":!0}),_(Ce)!=="svelte-acsy28"&&(Ce.textContent=zt),ut=p(e),b(_e.$$.fragment,e),Ct=p(e),de=C(e,"P",{"data-svelte-h":!0}),_(de)!=="svelte-48jjdn"&&(de.textContent=Gt),_t=p(e),xe=C(e,"P",{}),cl(xe).forEach(r),this.h()},h(){ml(l,"name","hf:doc:metadata"),ml(l,"content",Bl)},m(e,n){Jl(document.head,l),o(e,s,n),o(e,t,n),o(e,i,n),$(y,e,n),o(e,a,n),$(V,e,n),o(e,Ze,n),be[U].m(e,n),o(e,Te,n),$e[k].m(e,n),o(e,je,n),Z.m(e,n),o(e,ge,n),o(e,W,n),o(e,Se,n),$(B,e,n),o(e,We,n),o(e,N,n),o(e,Be,n),Je[j].m(e,n),o(e,Qe,n),o(e,H,n),o(e,Ne,n),$(L,e,n),o(e,He,n),$(F,e,n),o(e,Le,n),o(e,z,n),o(e,Fe,n),$(G,e,n),o(e,ze,n),o(e,P,n),o(e,Ge,n),ye[Q].m(e,n),o(e,he,n),o(e,X,n),o(e,Pe,n),o(e,q,n),o(e,Xe,n),Ve[R].m(e,n),o(e,Re,n),o(e,O,n),o(e,qe,n),o(e,Y,n),o(e,Oe,n),o(e,K,n),o(e,Ye,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),we[A].m(e,n),o(e,ve,n),o(e,re,n),o(e,st,n),S.m(e,n),o(e,Ae,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,fe,n),o(e,at,n),$(pe,e,n),o(e,ft,n),o(e,ce,n),o(e,pt,n),$(me,e,n),o(e,ct,n),o(e,Me,n),o(e,mt,n),Ue[I].m(e,n),o(e,De,n),$(ue,e,n),o(e,Mt,n),o(e,Ce,n),o(e,ut,n),$(_e,e,n),o(e,Ct,n),o(e,de,n),o(e,_t,n),o(e,xe,n),dt=!0},p(e,[n]){const pl={};n&1&&(pl.fw=e[0]),y.$set(pl);let Jt=U;U=Xt(e),U!==Jt&&(ke(),c(be[Jt],1,1,()=>{be[Jt]=null}),Ee(),E=be[U],E||(E=be[U]=Pt[U](e),E.c()),m(E,1),E.m(Te.parentNode,Te));let yt=k;k=Ot(e),k!==yt&&(ke(),c($e[yt],1,1,()=>{$e[yt]=null}),Ee(),T=$e[k],T||(T=$e[k]=qt[k](e),T.c()),m(T,1),T.m(je.parentNode,je)),bt!==(bt=Yt(e))&&(Z.d(1),Z=bt(e),Z&&(Z.c(),Z.m(ge.parentNode,ge)));let Vt=j;j=el(e),j!==Vt&&(ke(),c(Je[Vt],1,1,()=>{Je[Vt]=null}),Ee(),g=Je[j],g||(g=Je[j]=Kt[j](e),g.c()),m(g,1),g.m(Qe.parentNode,Qe));let wt=Q;Q=ll(e),Q!==wt&&(ke(),c(ye[wt],1,1,()=>{ye[wt]=null}),Ee(),h=ye[Q],h||(h=ye[Q]=tl[Q](e),h.c()),m(h,1),h.m(he.parentNode,he));let Ut=R;R=sl(e),R!==Ut&&(ke(),c(Ve[Ut],1,1,()=>{Ve[Ut]=null}),Ee(),v=Ve[R],v||(v=Ve[R]=nl[R](e),v.c()),m(v,1),v.m(Re.parentNode,Re));let Et=A;A=ol(e),A!==Et&&(ke(),c(we[Et],1,1,()=>{we[Et]=null}),Ee(),D=we[A],D||(D=we[A]=rl[A](e),D.c()),m(D,1),D.m(ve.parentNode,ve)),$t!==($t=il(e))&&(S.d(1),S=$t(e),S&&(S.c(),S.m(Ae.parentNode,Ae)));let kt=I;I=fl(e),I!==kt&&(ke(),c(Ue[kt],1,1,()=>{Ue[kt]=null}),Ee(),x=Ue[I],x||(x=Ue[I]=al[I](e),x.c()),m(x,1),x.m(De.parentNode,De))},i(e){dt||(m(y.$$.fragment,e),m(V.$$.fragment,e),m(E),m(T),m(B.$$.fragment,e),m(g),m(L.$$.fragment,e),m(F.$$.fragment,e),m(G.$$.fragment,e),m(h),m(v),m(te.$$.fragment,e),m(ne.$$.fragment,e),m(D),m(oe.$$.fragment,e),m(pe.$$.fragment,e),m(me.$$.fragment,e),m(x),m(ue.$$.fragment,e),m(_e.$$.fragment,e),dt=!0)},o(e){c(y.$$.fragment,e),c(V.$$.fragment,e),c(E),c(T),c(B.$$.fragment,e),c(g),c(L.$$.fragment,e),c(F.$$.fragment,e),c(G.$$.fragment,e),c(h),c(v),c(te.$$.fragment,e),c(ne.$$.fragment,e),c(D),c(oe.$$.fragment,e),c(pe.$$.fragment,e),c(me.$$.fragment,e),c(x),c(ue.$$.fragment,e),c(_e.$$.fragment,e),dt=!1},d(e){e&&(r(s),r(t),r(i),r(a),r(Ze),r(Te),r(je),r(ge),r(W),r(Se),r(We),r(N),r(Be),r(Qe),r(H),r(Ne),r(He),r(Le),r(z),r(Fe),r(ze),r(P),r(Ge),r(he),r(X),r(Pe),r(q),r(Xe),r(Re),r(O),r(qe),r(Y),r(Oe),r(K),r(Ye),r(ee),r(Ke),r(et),r(le),r(tt),r(lt),r(se),r(nt),r(ve),r(re),r(st),r(Ae),r(rt),r(ie),r(ot),r(ae),r(it),r(fe),r(at),r(ft),r(ce),r(pt),r(ct),r(Me),r(mt),r(De),r(Mt),r(Ce),r(ut),r(Ct),r(de),r(_t),r(xe)),r(l),J(y,e),J(V,e),be[U].d(e),$e[k].d(e),Z.d(e),J(B,e),Je[j].d(e),J(L,e),J(F,e),J(G,e),ye[Q].d(e),Ve[R].d(e),J(te,e),J(ne,e),we[A].d(e),S.d(e),J(oe,e),J(pe,e),J(me,e),Ue[I].d(e),J(ue,e),J(_e,e)}}}const Bl='{"title":"Модели","local":"models","sections":[{"title":"Создание Transformer","local":"creating-a-transformer","sections":[{"title":"Различные методы загрузки","local":"different-loading-methods","sections":[],"depth":3},{"title":"Методы сохранения","local":"saving-methods","sections":[],"depth":3}],"depth":2},{"title":"Использование модели Transformer для инференса","local":"using-a-transformer-model-for-inference","sections":[{"title":"Использование тензоров в качестве входов в модель","local":"using-the-tensors-as-inputs-to-the-model","sections":[],"depth":3}],"depth":2}],"depth":1}';function Nl(M,l,s){let t="pt";return _l(()=>{const i=new URLSearchParams(window.location.search);s(0,t=i.get("fw")||"pt")}),[t]}class ql extends dl{constructor(l){super(),bl(this,l,Nl,Wl,Cl,{})}}export{ql as component};
