import{s as jl,o as Cl}from"../chunks/scheduler.37c15a92.js";import{S as vl,i as Ul,g as d,s as f,r as M,A as Zl,h as _,f as s,c as p,j as wl,u as $,x as b,k as kl,y as Bl,a as o,v as y,t as m,b as Ue,d as c,w as h,p as Ze}from"../chunks/index.2bf4358c.js";import{Y as gl}from"../chunks/Youtube.1e50a667.js";import{C as k}from"../chunks/CodeBlock.4f5fc1ad.js";import{D as Jl}from"../chunks/DocNotebookDropdown.d9dfeb24.js";import{F as Wl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Ne,E as xl}from"../chunks/EditOnGithub.8916dc7c.js";function El(u){let l,r;return l=new Jl({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/chapter2/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/chapter2/section3_tf.ipynb"}]}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Il(u){let l,r;return l=new Jl({props:{classNames:"absolute z-10 right-0 top-0",options:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/chapter2/section3_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/chapter2/section3_pt.ipynb"}]}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Rl(u){let l,r;return l=new gl({props:{id:"d3JVgghSOew"}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Hl(u){let l,r;return l=new gl({props:{id:"AhChOFRegn4"}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Vl(u){let l,r="이번 섹션에서는 모델을 생성하고 사용하는 방법에 대해 자세히 알아보겠습니다. 체크포인트에서 모델을 인스턴스화하는 데 유용한 <code>TFAutoModel</code> 클래스를 사용할 것입니다.",t,i,T="이 <code>TFAutoModel</code> 클래스와 관련 클래스들은 실제로 라이브러리에 있는 다양한 모델들을 감싸고 있는 간단한 래퍼입니다. 이 래퍼는 체크포인트에 적합한 모델 아키텍처를 자동으로 추측하고, 이 아키텍처를 가진 모델을 인스턴스화하는 것도 똑똑하게 처리합니다.";return{c(){l=d("p"),l.innerHTML=r,t=f(),i=d("p"),i.innerHTML=T},l(a){l=_(a,"P",{"data-svelte-h":!0}),b(l)!=="svelte-134zx5a"&&(l.innerHTML=r),t=p(a),i=_(a,"P",{"data-svelte-h":!0}),b(i)!=="svelte-1mlrknf"&&(i.innerHTML=T)},m(a,w){o(a,l,w),o(a,t,w),o(a,i,w)},d(a){a&&(s(l),s(t),s(i))}}}function Gl(u){let l,r="이번 섹션에서는 모델을 생성하고 사용하는 방법에 대해 자세히 알아보겠습니다. 체크포인트에서 모델을 인스턴스화하는 데 유용한 <code>AutoModel</code> 클래스를 사용할 것입니다.",t,i,T="이 <code>AutoModel</code> 클래스와 관련 클래스들은 실제로 라이브러리에 있는 다양한 모델들을 감싸고 있는 간단한 래퍼입니다. 이 래퍼는 체크포인트에 적합한 모델 아키텍처를 자동으로 추측하고, 이 아키텍처를 가진 모델을 인스턴스화하는 것도 똑똑하게 처리합니다.";return{c(){l=d("p"),l.innerHTML=r,t=f(),i=d("p"),i.innerHTML=T},l(a){l=_(a,"P",{"data-svelte-h":!0}),b(l)!=="svelte-21bfoo"&&(l.innerHTML=r),t=p(a),i=_(a,"P",{"data-svelte-h":!0}),b(i)!=="svelte-17klgbd"&&(i.innerHTML=T)},m(a,w){o(a,l,w),o(a,t,w),o(a,i,w)},d(a){a&&(s(l),s(t),s(i))}}}function Nl(u){let l,r;return l=new k({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(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Al(u){let l,r;return l=new k({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(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Ql(u){let l,r;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKSUwQSUwQSUyMyUyME1vZGVsJTIwaXMlMjByYW5kb21seSUyMGluaXRpYWxpemVkIQ==",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"># Model is randomly initialized!</span>`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Ll(u){let l,r;return l=new k({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwTW9kZWwlMjBpcyUyMHJhbmRvbWx5JTIwaW5pdGlhbGl6ZWQh",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"># Model is randomly initialized!</span>`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function zl(u){let l,r,t,i="이전에 봤듯이, <code>TFBertModel</code> 대신 <code>TFAutoModel</code> 클래스를 사용할 수도 있습니다. 이제부터는 체크포인트에 독립적인 코드를 생성하기 위해 <code>TFAutoModel</code>를 사용하겠습니다. 만약 코드가 한 체크포인트에서 잘 동작한다면, 다른 체크포인트에서도 잘 동작해야 합니다. 이는 체크포인트의 아키텍처가 다르더라도, 비슷한 작업(예를 들어, 감성 분석 작업)을 위해 훈련된 경우에도 적용됩니다.",T;return l=new k({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(){M(l.$$.fragment),r=f(),t=d("p"),t.innerHTML=i},l(a){$(l.$$.fragment,a),r=p(a),t=_(a,"P",{"data-svelte-h":!0}),b(t)!=="svelte-2n2ajq"&&(t.innerHTML=i)},m(a,w){y(l,a,w),o(a,r,w),o(a,t,w),T=!0},i(a){T||(c(l.$$.fragment,a),T=!0)},o(a){m(l.$$.fragment,a),T=!1},d(a){a&&(s(r),s(t)),h(l,a)}}}function Pl(u){let l,r,t,i="이전에 봤듯이, <code>BertModel</code> 대신 <code>AutoModel</code> 클래스를 사용할 수도 있습니다. 이제부터는 체크포인트에 독립적인 코드를 생성하기 위해 <code>AutoModel</code>를 사용하겠습니다. 만약 코드가 한 체크포인트에서 잘 동작한다면, 다른 체크포인트에서도 잘 동작해야 합니다. 이는 체크포인트의 아키텍처가 다르더라도, 비슷한 작업(예를 들어, 감성 분석 작업)을 위해 훈련된 경우에도 적용됩니다.",T;return l=new k({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(){M(l.$$.fragment),r=f(),t=d("p"),t.innerHTML=i},l(a){$(l.$$.fragment,a),r=p(a),t=_(a,"P",{"data-svelte-h":!0}),b(t)!=="svelte-1fbu2yk"&&(t.innerHTML=i)},m(a,w){y(l,a,w),o(a,r,w),o(a,t,w),T=!0},i(a){T||(c(l.$$.fragment,a),T=!0)},o(a){m(l.$$.fragment,a),T=!1},d(a){a&&(s(r),s(t)),h(l,a)}}}function Fl(u){let l,r;return l=new k({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(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Xl(u){let l,r;return l=new k({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(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Yl(u){let l,r="The <em>tf_model.h5</em> file is known as the <em>state dictionary</em>; it contains all your model’s weights. The two files go hand in hand; the configuration is necessary to know your model’s architecture, while the model weights are your model’s parameters.";return{c(){l=d("p"),l.innerHTML=r},l(t){l=_(t,"P",{"data-svelte-h":!0}),b(l)!=="svelte-phe9t5"&&(l.innerHTML=r)},m(t,i){o(t,l,i)},d(t){t&&s(l)}}}function ql(u){let l,r="The <em>pytorch_model.bin</em> file is known as the <em>state dictionary</em>; it contains all your model’s weights. The two files go hand in hand; the configuration is necessary to know your model’s architecture, while the model weights are your model’s parameters.";return{c(){l=d("p"),l.innerHTML=r},l(t){l=_(t,"P",{"data-svelte-h":!0}),b(l)!=="svelte-fa4pia"&&(l.innerHTML=r)},m(t,i){o(t,l,i)},d(t){t&&s(l)}}}function Sl(u){let l,r;return l=new k({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(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Dl(u){let l,r;return l=new k({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW5jb2RlZF9zZXF1ZW5jZXMp",highlighted:`<span class="hljs-keyword">import</span> torch

model_inputs = torch.tensor(encoded_sequences)`,wrap:!1}}),{c(){M(l.$$.fragment)},l(t){$(l.$$.fragment,t)},m(t,i){y(l,t,i),r=!0},i(t){r||(c(l.$$.fragment,t),r=!0)},o(t){m(l.$$.fragment,t),r=!1},d(t){h(l,t)}}}function Kl(u){let l,r,t,i,T,a,w,Qe,g,J,Be,j,C,We,xe,N,It="하지만, 만약 모델의 아키텍처를 직접 정의하고 싶다면, 해당 모델의 클래스를 사용할 수 있습니다. BERT 모델을 예로 들어보겠습니다.",Le,A,ze,Q,Rt="BERT 모델을 초기화 하기 위해서는 먼저 모델의 환경설정을 로드해야 합나다.",Pe,v,U,Ee,L,Ht="이 환경설정은 모델을 구축하는데 사용되는 많은 속성들을 포함하고 있습니다:",Fe,z,Xe,P,Ye,F,Vt="아직 이 속성들이 무엇을 의미하는지는 모르겠지만, 몇몇은 익숙할 것입니다: <code>hidden_size</code> 속성은 <code>hidden_states</code> 벡터의 크기를 정의하고, <code>num_hidden_layers</code>는 Transformer 모델이 가지고 있는 레이어의 수를 정의합니다.",qe,X,Se,Y,Gt="무작위 값을 통한 기본 환경설정으로 모델 생성",De,Z,B,Ie,q,Nt='이 모델은 무작위로 초기화되어 있기 때문에, 아직은 아무런 유용한 정보를 포함하고 있지 않습니다. 이 모델을 훈련시키기 위해서는, 먼저 훈련 데이터를 준비해야 합니다. 우리가 바닥부터 학습을 할 수 있지만, 이 과정은 <a href="/course/chapter1">Chapter 1</a>에서 확인 했듯이, 많은 시간과 많은 데이터가 필요하며, 학습 환경에도 큰 영향을 미칩니다.',Ke,S,At="이러한 불필요한 중복된 노력을 피하기 위해서, 이미 훈련된 모델을 공유하고 재사용할 수 있어야 합니다.",Oe,D,Qt="훈련된 Transformer 모델을 불러오는 것은 매우 간단합니다 - <code>from_pretrained</code> 메소드를 사용하면 됩니다.",et,W,x,Re,K,Lt='이 코드 샘플에서는 <code>BertConfig</code>를 사용하지 않았고, 대신 <code>bert-base-cased</code> 식별자를 통해 사전 훈련된 모델을 불러왔습니다. 이는 BERT의 저자들이 직접 훈련시킨 체크포인트입니다. 자세한 내용은 <a href="https://huggingface.co/bert-base-cased" rel="nofollow">모델 카드</a>에서 확인할 수 있습니다.',tt,O,zt="이 모델은 체크포인트의 모든 가중치로 초기화되었습니다. 이 모델은 체크포인트에서 훈련된 작업에 대해 직접 추론에 사용할 수 있으며, 새로운 작업에 대해 미세 조정할 수도 있습니다. 사전 훈련된 가중치로부터 학습을 진행하면, 빈 상태에서 훈련을 시작하는 것보다 빠르게 좋은 결과를 얻을 수 있습니다.",lt,ee,Pt="모델을 불러오는 또 다른 방법은 <code>from_pretrained()</code> 메서드를 사용하는 것입니다. 이 메서드는 체크포인트를 다운로드하고, 캐시에 저장합니다(이후 <code>from_pretrained()</code> 메서드를 호출할 때 다시 다운로드하지 않습니다). 캐시 폴더는 기본적으로 <em>~/.cache/huggingface/transformers</em>에 저장됩니다. 캐시 폴더를 사용자 정의하려면 <code>HF_HOME</code> 환경 변수를 설정하면 됩니다.",nt,te,Ft='모델을 불러오는 식별자는 BERT 아키텍처와 호환되는 경우 모델 허브의 모든 모델의 식별자가 될 수 있습니다. BERT 체크포인트의 전체 목록은 <a href="https://huggingface.co/models?filter=bert" rel="nofollow">여기</a>에서 확인할 수 있습니다.',st,le,rt,ne,Xt="모델을 저장하는 방법은 불러오는 방법처럼 쉽습니다. <code>save_pretrained()</code> 메서드를 사용하면 됩니다. 이 메서드는 <code>from_pretrained()</code> 메서드와 유사합니다.",ot,se,it,re,Yt="이는 2가지 파일을 저장하게 됩니다:",at,E,I,He,oe,qt="<em>config.json</em> 파일은 모델 아키텍처를 구축하는 데 필요한 속성을 알려줍니다. 이 파일에는 체크포인트가 어디에서 생성되었는지, 마지막으로 체크포인트를 저장할 때 사용한 🤗 Transformers 버전 등의 메타데이터도 포함되어 있습니다.",ft,Ve,ie,pt,ae,St="Now that you know how to load and save a model, let’s try using it to make some predictions. Transformer models can only process numbers — numbers that the tokenizer generates. But before we discuss tokenizers, let’s explore what inputs the model accepts.",mt,fe,Dt="이제 모델을 불러오고 저장하는 방법을 알았으니, 모델을 사용하여 예측을 만들어 보겠습니다. Transformer 모델은 토크나이저가 생성하는 숫자만 처리할 수 있습니다. 그러나 토크나이저에 대해 논의하기 전에 모델이 받는 입력에 대해 알아보겠습니다.",ct,pe,Kt="토크나이저는 입력을 적절한 프레임워크의 텐서로 변환할 수 있지만, 이해도를 높이기 위해 모델에 입력을 보내기 전 무엇을 반드시 해야 하는지 간단히 살펴보겠습니다.",ut,me,Ot="우리가 여러 시퀀스들이 있다고 가정해 봅시다:",dt,ce,_t,ue,el="토크나이저는 이를 단어 인덱스로 변환합니다. 이를 <em>input IDs</em>라고 합니다. 각 시퀀스는 이제 숫자 목록입니다! 결과는 다음과 같습니다:",bt,de,Mt,_e,tl="이는 인코딩된 시퀀스의 목록입니다. 텐서는 정사각형 모양만 받을 수 있습니다 (행렬을 생각해 보세요). 이 “배열”은 이미 정사각형 모양이므로 텐서로 변환하는 것은 쉽습니다:",$t,be,ll="This is a list of encoded sequences: a list of lists. Tensors only accept rectangular shapes (think matrices). This “array” is already of rectangular shape, so converting it to a tensor is easy:",yt,R,H,Ge,Me,ht,$e,nl="모델의 텐서를 사용하는 것은 매우 간단합니다. 모델에 입력을 넣기만 하면 됩니다:",Tt,ye,wt,he,sl="모델이 다양한 어규먼트를 받는 중에, 입력은 input IDs 만 필요합니다. 나머지 어규먼트들은 언제 필요한지, 어떤 역할을 하는지는 나중에 설명하겠습니다. 먼저 토크나이저에 대해 좀 더 자세히 알아보겠습니다.",kt,Te,gt,Ae,Jt;T=new Wl({props:{fw:u[0]}}),w=new Ne({props:{title:"Models",local:"models",headingTag:"h1"}});const rl=[Il,El],we=[];function ol(e,n){return e[0]==="pt"?0:1}g=ol(u),J=we[g]=rl[g](u);const il=[Hl,Rl],ke=[];function al(e,n){return e[0]==="pt"?0:1}j=al(u),C=ke[j]=il[j](u);function fl(e,n){return e[0]==="pt"?Gl:Vl}let jt=fl(u),V=jt(u);A=new Ne({props:{title:"Creating a Transformer (Transformer 생성하기)",local:"creating-a-transformer-transformer-생성하기",headingTag:"h2"}});const pl=[Al,Nl],ge=[];function ml(e,n){return e[0]==="pt"?0:1}v=ml(u),U=ge[v]=pl[v](u),z=new k({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),P=new k({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}}),X=new Ne({props:{title:"Different loading methods (다른 로딩 방법)",local:"different-loading-methods-다른-로딩-방법",headingTag:"h3"}});const cl=[Ll,Ql],Je=[];function ul(e,n){return e[0]==="pt"?0:1}Z=ul(u),B=Je[Z]=cl[Z](u);const dl=[Pl,zl],je=[];function _l(e,n){return e[0]==="pt"?0:1}W=_l(u),x=je[W]=dl[W](u),le=new Ne({props:{title:"Saving methods (저장 방법)",local:"saving-methods-저장-방법",headingTag:"h3"}}),se=new k({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const bl=[Xl,Fl],Ce=[];function Ml(e,n){return e[0]==="pt"?0:1}E=Ml(u),I=Ce[E]=bl[E](u);function $l(e,n){return e[0]==="pt"?ql:Yl}let Ct=$l(u),G=Ct(u);ie=new Ne({props:{title:"Using a Transformer model for inference (Transformer 모델을 추론에 사용하기)",local:"using-a-transformer-model-for-inference-transformer-모델을-추론에-사용하기",headingTag:"h2"}}),ce=new k({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}}),de=new k({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 yl=[Dl,Sl],ve=[];function hl(e,n){return e[0]==="pt"?0:1}return R=hl(u),H=ve[R]=yl[R](u),Me=new Ne({props:{title:"Using the tensors as inputs to the model (텐서를 모델의 입력으로 사용하기)",local:"using-the-tensors-as-inputs-to-the-model-텐서를-모델의-입력으로-사용하기",headingTag:"h3"}}),ye=new k({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),Te=new xl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ko/chapter2/3.mdx"}}),{c(){l=d("meta"),r=f(),t=d("p"),i=f(),M(T.$$.fragment),a=f(),M(w.$$.fragment),Qe=f(),J.c(),Be=f(),C.c(),We=f(),V.c(),xe=f(),N=d("p"),N.textContent=It,Le=f(),M(A.$$.fragment),ze=f(),Q=d("p"),Q.textContent=Rt,Pe=f(),U.c(),Ee=f(),L=d("p"),L.textContent=Ht,Fe=f(),M(z.$$.fragment),Xe=f(),M(P.$$.fragment),Ye=f(),F=d("p"),F.innerHTML=Vt,qe=f(),M(X.$$.fragment),Se=f(),Y=d("p"),Y.textContent=Gt,De=f(),B.c(),Ie=f(),q=d("p"),q.innerHTML=Nt,Ke=f(),S=d("p"),S.textContent=At,Oe=f(),D=d("p"),D.innerHTML=Qt,et=f(),x.c(),Re=f(),K=d("p"),K.innerHTML=Lt,tt=f(),O=d("p"),O.textContent=zt,lt=f(),ee=d("p"),ee.innerHTML=Pt,nt=f(),te=d("p"),te.innerHTML=Ft,st=f(),M(le.$$.fragment),rt=f(),ne=d("p"),ne.innerHTML=Xt,ot=f(),M(se.$$.fragment),it=f(),re=d("p"),re.textContent=Yt,at=f(),I.c(),He=f(),oe=d("p"),oe.innerHTML=qt,ft=f(),G.c(),Ve=f(),M(ie.$$.fragment),pt=f(),ae=d("p"),ae.textContent=St,mt=f(),fe=d("p"),fe.textContent=Dt,ct=f(),pe=d("p"),pe.textContent=Kt,ut=f(),me=d("p"),me.textContent=Ot,dt=f(),M(ce.$$.fragment),_t=f(),ue=d("p"),ue.innerHTML=el,bt=f(),M(de.$$.fragment),Mt=f(),_e=d("p"),_e.textContent=tl,$t=f(),be=d("p"),be.textContent=ll,yt=f(),H.c(),Ge=f(),M(Me.$$.fragment),ht=f(),$e=d("p"),$e.textContent=nl,Tt=f(),M(ye.$$.fragment),wt=f(),he=d("p"),he.textContent=sl,kt=f(),M(Te.$$.fragment),gt=f(),Ae=d("p"),this.h()},l(e){const n=Zl("svelte-u9bgzb",document.head);l=_(n,"META",{name:!0,content:!0}),n.forEach(s),r=p(e),t=_(e,"P",{}),wl(t).forEach(s),i=p(e),$(T.$$.fragment,e),a=p(e),$(w.$$.fragment,e),Qe=p(e),J.l(e),Be=p(e),C.l(e),We=p(e),V.l(e),xe=p(e),N=_(e,"P",{"data-svelte-h":!0}),b(N)!=="svelte-rfqpyg"&&(N.textContent=It),Le=p(e),$(A.$$.fragment,e),ze=p(e),Q=_(e,"P",{"data-svelte-h":!0}),b(Q)!=="svelte-1sy9k0m"&&(Q.textContent=Rt),Pe=p(e),U.l(e),Ee=p(e),L=_(e,"P",{"data-svelte-h":!0}),b(L)!=="svelte-4918vz"&&(L.textContent=Ht),Fe=p(e),$(z.$$.fragment,e),Xe=p(e),$(P.$$.fragment,e),Ye=p(e),F=_(e,"P",{"data-svelte-h":!0}),b(F)!=="svelte-1e8xh3r"&&(F.innerHTML=Vt),qe=p(e),$(X.$$.fragment,e),Se=p(e),Y=_(e,"P",{"data-svelte-h":!0}),b(Y)!=="svelte-13ikagc"&&(Y.textContent=Gt),De=p(e),B.l(e),Ie=p(e),q=_(e,"P",{"data-svelte-h":!0}),b(q)!=="svelte-1yw7n7u"&&(q.innerHTML=Nt),Ke=p(e),S=_(e,"P",{"data-svelte-h":!0}),b(S)!=="svelte-44rdi0"&&(S.textContent=At),Oe=p(e),D=_(e,"P",{"data-svelte-h":!0}),b(D)!=="svelte-10dy6w6"&&(D.innerHTML=Qt),et=p(e),x.l(e),Re=p(e),K=_(e,"P",{"data-svelte-h":!0}),b(K)!=="svelte-cvzi5b"&&(K.innerHTML=Lt),tt=p(e),O=_(e,"P",{"data-svelte-h":!0}),b(O)!=="svelte-17jdgt"&&(O.textContent=zt),lt=p(e),ee=_(e,"P",{"data-svelte-h":!0}),b(ee)!=="svelte-14igyn2"&&(ee.innerHTML=Pt),nt=p(e),te=_(e,"P",{"data-svelte-h":!0}),b(te)!=="svelte-9vriyb"&&(te.innerHTML=Ft),st=p(e),$(le.$$.fragment,e),rt=p(e),ne=_(e,"P",{"data-svelte-h":!0}),b(ne)!=="svelte-pdew2h"&&(ne.innerHTML=Xt),ot=p(e),$(se.$$.fragment,e),it=p(e),re=_(e,"P",{"data-svelte-h":!0}),b(re)!=="svelte-1lqi2rw"&&(re.textContent=Yt),at=p(e),I.l(e),He=p(e),oe=_(e,"P",{"data-svelte-h":!0}),b(oe)!=="svelte-155d6gs"&&(oe.innerHTML=qt),ft=p(e),G.l(e),Ve=p(e),$(ie.$$.fragment,e),pt=p(e),ae=_(e,"P",{"data-svelte-h":!0}),b(ae)!=="svelte-6brd07"&&(ae.textContent=St),mt=p(e),fe=_(e,"P",{"data-svelte-h":!0}),b(fe)!=="svelte-19s153b"&&(fe.textContent=Dt),ct=p(e),pe=_(e,"P",{"data-svelte-h":!0}),b(pe)!=="svelte-ijlg93"&&(pe.textContent=Kt),ut=p(e),me=_(e,"P",{"data-svelte-h":!0}),b(me)!=="svelte-5ur23s"&&(me.textContent=Ot),dt=p(e),$(ce.$$.fragment,e),_t=p(e),ue=_(e,"P",{"data-svelte-h":!0}),b(ue)!=="svelte-j2rddg"&&(ue.innerHTML=el),bt=p(e),$(de.$$.fragment,e),Mt=p(e),_e=_(e,"P",{"data-svelte-h":!0}),b(_e)!=="svelte-1pakz9q"&&(_e.textContent=tl),$t=p(e),be=_(e,"P",{"data-svelte-h":!0}),b(be)!=="svelte-y3q2fn"&&(be.textContent=ll),yt=p(e),H.l(e),Ge=p(e),$(Me.$$.fragment,e),ht=p(e),$e=_(e,"P",{"data-svelte-h":!0}),b($e)!=="svelte-m9n65x"&&($e.textContent=nl),Tt=p(e),$(ye.$$.fragment,e),wt=p(e),he=_(e,"P",{"data-svelte-h":!0}),b(he)!=="svelte-1ff0t23"&&(he.textContent=sl),kt=p(e),$(Te.$$.fragment,e),gt=p(e),Ae=_(e,"P",{}),wl(Ae).forEach(s),this.h()},h(){kl(l,"name","hf:doc:metadata"),kl(l,"content",Ol)},m(e,n){Bl(document.head,l),o(e,r,n),o(e,t,n),o(e,i,n),y(T,e,n),o(e,a,n),y(w,e,n),o(e,Qe,n),we[g].m(e,n),o(e,Be,n),ke[j].m(e,n),o(e,We,n),V.m(e,n),o(e,xe,n),o(e,N,n),o(e,Le,n),y(A,e,n),o(e,ze,n),o(e,Q,n),o(e,Pe,n),ge[v].m(e,n),o(e,Ee,n),o(e,L,n),o(e,Fe,n),y(z,e,n),o(e,Xe,n),y(P,e,n),o(e,Ye,n),o(e,F,n),o(e,qe,n),y(X,e,n),o(e,Se,n),o(e,Y,n),o(e,De,n),Je[Z].m(e,n),o(e,Ie,n),o(e,q,n),o(e,Ke,n),o(e,S,n),o(e,Oe,n),o(e,D,n),o(e,et,n),je[W].m(e,n),o(e,Re,n),o(e,K,n),o(e,tt,n),o(e,O,n),o(e,lt,n),o(e,ee,n),o(e,nt,n),o(e,te,n),o(e,st,n),y(le,e,n),o(e,rt,n),o(e,ne,n),o(e,ot,n),y(se,e,n),o(e,it,n),o(e,re,n),o(e,at,n),Ce[E].m(e,n),o(e,He,n),o(e,oe,n),o(e,ft,n),G.m(e,n),o(e,Ve,n),y(ie,e,n),o(e,pt,n),o(e,ae,n),o(e,mt,n),o(e,fe,n),o(e,ct,n),o(e,pe,n),o(e,ut,n),o(e,me,n),o(e,dt,n),y(ce,e,n),o(e,_t,n),o(e,ue,n),o(e,bt,n),y(de,e,n),o(e,Mt,n),o(e,_e,n),o(e,$t,n),o(e,be,n),o(e,yt,n),ve[R].m(e,n),o(e,Ge,n),y(Me,e,n),o(e,ht,n),o(e,$e,n),o(e,Tt,n),y(ye,e,n),o(e,wt,n),o(e,he,n),o(e,kt,n),y(Te,e,n),o(e,gt,n),o(e,Ae,n),Jt=!0},p(e,[n]){const Tl={};n&1&&(Tl.fw=e[0]),T.$set(Tl);let vt=g;g=ol(e),g!==vt&&(Ze(),m(we[vt],1,1,()=>{we[vt]=null}),Ue(),J=we[g],J||(J=we[g]=rl[g](e),J.c()),c(J,1),J.m(Be.parentNode,Be));let Ut=j;j=al(e),j!==Ut&&(Ze(),m(ke[Ut],1,1,()=>{ke[Ut]=null}),Ue(),C=ke[j],C||(C=ke[j]=il[j](e),C.c()),c(C,1),C.m(We.parentNode,We)),jt!==(jt=fl(e))&&(V.d(1),V=jt(e),V&&(V.c(),V.m(xe.parentNode,xe)));let Zt=v;v=ml(e),v!==Zt&&(Ze(),m(ge[Zt],1,1,()=>{ge[Zt]=null}),Ue(),U=ge[v],U||(U=ge[v]=pl[v](e),U.c()),c(U,1),U.m(Ee.parentNode,Ee));let Bt=Z;Z=ul(e),Z!==Bt&&(Ze(),m(Je[Bt],1,1,()=>{Je[Bt]=null}),Ue(),B=Je[Z],B||(B=Je[Z]=cl[Z](e),B.c()),c(B,1),B.m(Ie.parentNode,Ie));let Wt=W;W=_l(e),W!==Wt&&(Ze(),m(je[Wt],1,1,()=>{je[Wt]=null}),Ue(),x=je[W],x||(x=je[W]=dl[W](e),x.c()),c(x,1),x.m(Re.parentNode,Re));let xt=E;E=Ml(e),E!==xt&&(Ze(),m(Ce[xt],1,1,()=>{Ce[xt]=null}),Ue(),I=Ce[E],I||(I=Ce[E]=bl[E](e),I.c()),c(I,1),I.m(He.parentNode,He)),Ct!==(Ct=$l(e))&&(G.d(1),G=Ct(e),G&&(G.c(),G.m(Ve.parentNode,Ve)));let Et=R;R=hl(e),R!==Et&&(Ze(),m(ve[Et],1,1,()=>{ve[Et]=null}),Ue(),H=ve[R],H||(H=ve[R]=yl[R](e),H.c()),c(H,1),H.m(Ge.parentNode,Ge))},i(e){Jt||(c(T.$$.fragment,e),c(w.$$.fragment,e),c(J),c(C),c(A.$$.fragment,e),c(U),c(z.$$.fragment,e),c(P.$$.fragment,e),c(X.$$.fragment,e),c(B),c(x),c(le.$$.fragment,e),c(se.$$.fragment,e),c(I),c(ie.$$.fragment,e),c(ce.$$.fragment,e),c(de.$$.fragment,e),c(H),c(Me.$$.fragment,e),c(ye.$$.fragment,e),c(Te.$$.fragment,e),Jt=!0)},o(e){m(T.$$.fragment,e),m(w.$$.fragment,e),m(J),m(C),m(A.$$.fragment,e),m(U),m(z.$$.fragment,e),m(P.$$.fragment,e),m(X.$$.fragment,e),m(B),m(x),m(le.$$.fragment,e),m(se.$$.fragment,e),m(I),m(ie.$$.fragment,e),m(ce.$$.fragment,e),m(de.$$.fragment,e),m(H),m(Me.$$.fragment,e),m(ye.$$.fragment,e),m(Te.$$.fragment,e),Jt=!1},d(e){e&&(s(r),s(t),s(i),s(a),s(Qe),s(Be),s(We),s(xe),s(N),s(Le),s(ze),s(Q),s(Pe),s(Ee),s(L),s(Fe),s(Xe),s(Ye),s(F),s(qe),s(Se),s(Y),s(De),s(Ie),s(q),s(Ke),s(S),s(Oe),s(D),s(et),s(Re),s(K),s(tt),s(O),s(lt),s(ee),s(nt),s(te),s(st),s(rt),s(ne),s(ot),s(it),s(re),s(at),s(He),s(oe),s(ft),s(Ve),s(pt),s(ae),s(mt),s(fe),s(ct),s(pe),s(ut),s(me),s(dt),s(_t),s(ue),s(bt),s(Mt),s(_e),s($t),s(be),s(yt),s(Ge),s(ht),s($e),s(Tt),s(wt),s(he),s(kt),s(gt),s(Ae)),s(l),h(T,e),h(w,e),we[g].d(e),ke[j].d(e),V.d(e),h(A,e),ge[v].d(e),h(z,e),h(P,e),h(X,e),Je[Z].d(e),je[W].d(e),h(le,e),h(se,e),Ce[E].d(e),G.d(e),h(ie,e),h(ce,e),h(de,e),ve[R].d(e),h(Me,e),h(ye,e),h(Te,e)}}}const Ol='{"title":"Models","local":"models","sections":[{"title":"Creating a Transformer (Transformer 생성하기)","local":"creating-a-transformer-transformer-생성하기","sections":[{"title":"Different loading methods (다른 로딩 방법)","local":"different-loading-methods-다른-로딩-방법","sections":[],"depth":3},{"title":"Saving methods (저장 방법)","local":"saving-methods-저장-방법","sections":[],"depth":3}],"depth":2},{"title":"Using a Transformer model for inference (Transformer 모델을 추론에 사용하기)","local":"using-a-transformer-model-for-inference-transformer-모델을-추론에-사용하기","sections":[{"title":"Using the tensors as inputs to the model (텐서를 모델의 입력으로 사용하기)","local":"using-the-tensors-as-inputs-to-the-model-텐서를-모델의-입력으로-사용하기","sections":[],"depth":3}],"depth":2}],"depth":1}';function en(u,l,r){let t="pt";return Cl(()=>{const i=new URLSearchParams(window.location.search);r(0,t=i.get("fw")||"pt")}),[t]}class fn extends vl{constructor(l){super(),Ul(this,l,en,Kl,jl,{})}}export{fn as component};
