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