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