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