import{s as Ue,o as Ie}from"../chunks/scheduler.37c15a92.js";import{S as qe,i as ze,g as de,s as p,r as o,A as We,h as be,f as i,c as f,j as he,u,k as Je,y as Ae,a as m,v as c,t as $,b as Ze,d as a,w as g,p as je}from"../chunks/index.2bf4358c.js";import{C as Me}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as Ce}from"../chunks/CourseFloatingBanner.06521e8b.js";import{Q as y}from"../chunks/Question.668688bc.js";import{F as Ve}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as _}from"../chunks/Heading.8ada512a.js";function Be(w){let l,x,s,d;return l=new _({props:{title:"5. TFAutoModel이 무엇인가요?",local:"5-tfautomodel이-무엇인가요",headingTag:"h3"}}),s=new y({props:{choices:[{text:"데이터를 자동으로 학습하는 모델입니다.",explain:"오답입니다. <a href='https://huggingface.co/autotrain'>AutoTrain</a>과 헷갈린 게 아닐까요?"},{text:"체크포인트에 기반하여 적합한 구조를 반환하는 객체입니다.",explain:"정확합니다. <code>AutoModel</code>은 적절한 모델 구조를 초기화할 때 필요한 체크포인트만을 필요로 합니다.",correct:!0},{text:"적합한 가중치를 불러오기 위해 입력에 사용된 언어를 자동으로 감지하는 모델입니다.",explain:"오답입니다. 몇몇 체크포인트와 모델은 다양한 언어를 처리할 수 있지만, 언어에 따라 체크포인트를 자동으로 선택할 수 있도록 내장된 도구는 없습니다. 태스크에 가장 적합한 체크포인트를 찾으려면 <a href='https://huggingface.co/models'>모델 허브</a>에 가보세요!"}]}}),{c(){o(l.$$.fragment),x=p(),o(s.$$.fragment)},l(t){u(l.$$.fragment,t),x=f(t),u(s.$$.fragment,t)},m(t,b){c(l,t,b),m(t,x,b),c(s,t,b),d=!0},i(t){d||(a(l.$$.fragment,t),a(s.$$.fragment,t),d=!0)},o(t){$(l.$$.fragment,t),$(s.$$.fragment,t),d=!1},d(t){t&&i(x),g(l,t),g(s,t)}}}function Qe(w){let l,x,s,d;return l=new _({props:{title:"5. AutoModel이 무엇인가요?",local:"5-automodel이-무엇인가요",headingTag:"h3"}}),s=new y({props:{choices:[{text:"데이터를 자동으로 학습하는 모델입니다.",explain:"오답입니다. <a href='https://huggingface.co/autotrain'>AutoTrain</a>과 헷갈린 게 아닐까요?"},{text:"체크포인트에 기반하여 적합한 구조를 반환하는 객체입니다.",explain:"정확합니다. <code>AutoModel</code>은 적절한 모델 구조를 초기화할 때 필요한 체크포인트만을 필요로 합니다.",correct:!0},{text:"적합한 가중치를 불러오기 위해 입력에 사용된 언어를 자동으로 감지하는 모델입니다.",explain:"오답입니다. 몇몇 체크포인트와 모델은 다양한 언어를 처리할 수 있지만, 언어에 따라 체크포인트를 자동으로 선택할 수 있도록 내장된 도구는 없습니다. 태스크에 가장 적합한 체크포인트를 찾으려면 <a href='https://huggingface.co/models'>모델 허브</a>에 가보세요!"}]}}),{c(){o(l.$$.fragment),x=p(),o(s.$$.fragment)},l(t){u(l.$$.fragment,t),x=f(t),u(s.$$.fragment,t)},m(t,b){c(l,t,b),m(t,x,b),c(s,t,b),d=!0},i(t){d||(a(l.$$.fragment,t),a(s.$$.fragment,t),d=!0)},o(t){$(l.$$.fragment,t),$(s.$$.fragment,t),d=!1},d(t){t&&i(x),g(l,t),g(s,t)}}}function Xe(w){let l,x,s,d,t,b;return l=new _({props:{title:"10. 아래 코드에서 잘못된 부분이 있을까요?",local:"10-아래-코드에서-잘못된-부분이-있을까요",headingTag:"h3"}}),s=new Me({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbCUwQSUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmJlcnQtYmFzZS1jYXNlZCUyMiklMEFtb2RlbCUyMCUzRCUyMFRGQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZCglMjJncHQyJTIyKSUwQSUwQWVuY29kZWQlMjAlM0QlMjB0b2tlbml6ZXIoJTIySGV5ISUyMiUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwbW9kZWwoKiplbmNvZGVkKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModel

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
model = TFAutoModel.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)

encoded = tokenizer(<span class="hljs-string">&quot;Hey!&quot;</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
result = model(**encoded)`,wrap:!1}}),t=new y({props:{choices:[{text:"아니요, 모두 제대로 되어 있습니다.",explain:"안타깝게도, 서로 다른 체크포인트로 학습된 토크나이저와 모델을 함께 사용하는 것은 좋은 방법이 아닙니다. 모델은 토크나이저의 출력 결과를 이해할 수 있도록 학습되지 않았기 때문에 모델이 동작하더라도 모델의 출력을 이해할 수 없을 것입니다."},{text:"토크나이저와 모델은 같은 체크포인트를 사용해야 합니다.",explain:"정답입니다!",correct:!0},{text:"토크나이저를 이용해 패딩을 추가하거나 시퀀스 길이를 잘라내는 것은 모든 입력이 배치로 처리될 때 좋은 방법입니다.",explain:"모든 모델의 입력이 배치로 들어가야 하는 것은 맞습니다. 하지만 주어진 시퀀스가 하나뿐이기 때문에 이 예시에서 필수적인 부분은 아닙니다. 시퀀스를 잘라내거나 시퀀스에 패딩을 추가하는 것은 여러 개의 문장으로 배치를 만들 때 필요한 기술입니다."}]}}),{c(){o(l.$$.fragment),x=p(),o(s.$$.fragment),d=p(),o(t.$$.fragment)},l(r){u(l.$$.fragment,r),x=f(r),u(s.$$.fragment,r),d=f(r),u(t.$$.fragment,r)},m(r,M){c(l,r,M),m(r,x,M),c(s,r,M),m(r,d,M),c(t,r,M),b=!0},i(r){b||(a(l.$$.fragment,r),a(s.$$.fragment,r),a(t.$$.fragment,r),b=!0)},o(r){$(l.$$.fragment,r),$(s.$$.fragment,r),$(t.$$.fragment,r),b=!1},d(r){r&&(i(x),i(d)),g(l,r),g(s,r),g(t,r)}}}function ve(w){let l,x,s,d,t,b;return l=new _({props:{title:"10. 아래 코드에서 잘못된 부분이 있을까요?",local:"10-아래-코드에서-잘못된-부분이-있을까요",headingTag:"h3"}}),s=new Me({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWwlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMmdwdDIlMjIpJTBBJTBBZW5jb2RlZCUyMCUzRCUyMHRva2VuaXplciglMjJIZXkhJTIyJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJwdCUyMiklMEFyZXN1bHQlMjAlM0QlMjBtb2RlbCgqKmVuY29kZWQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
model = AutoModel.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)

encoded = tokenizer(<span class="hljs-string">&quot;Hey!&quot;</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
result = model(**encoded)`,wrap:!1}}),t=new y({props:{choices:[{text:"아니요, 모두 제대로 되어 있습니다.",explain:"안타깝게도, 서로 다른 체크포인트로 학습된 토크나이저와 모델을 함께 사용하는 것은 좋은 방법이 아닙니다. 모델은 토크나이저의 출력 결과를 이해할 수 있도록 학습되지 않았기 때문에 모델이 동작하더라도 모델의 출력을 이해할 수 없을 것입니다."},{text:"토크나이저와 모델은 같은 체크포인트를 사용해야 합니다.",explain:"정답입니다!",correct:!0},{text:"토크나이저를 이용해 패딩을 추가하거나 시퀀스 길이를 잘라내는 것은 모든 입력이 배치로 처리될 때 좋은 방법입니다.",explain:"모든 모델의 입력이 배치로 들어가야 하는 것은 맞습니다. 하지만 주어진 시퀀스가 하나뿐이기 때문에 이 예시에서 필수적인 부분은 아닙니다. 시퀀스를 잘라내거나 시퀀스에 패딩을 추가하는 것은 여러 개의 문장으로 배치를 만들 때 필요한 기술입니다."}]}}),{c(){o(l.$$.fragment),x=p(),o(s.$$.fragment),d=p(),o(t.$$.fragment)},l(r){u(l.$$.fragment,r),x=f(r),u(s.$$.fragment,r),d=f(r),u(t.$$.fragment,r)},m(r,M){c(l,r,M),m(r,x,M),c(s,r,M),m(r,d,M),c(t,r,M),b=!0},i(r){b||(a(l.$$.fragment,r),a(s.$$.fragment,r),a(t.$$.fragment,r),b=!0)},o(r){$(l.$$.fragment,r),$(s.$$.fragment,r),$(t.$$.fragment,r),b=!1},d(r){r&&(i(x),i(d)),g(l,r),g(s,r),g(t,r)}}}function Fe(w){let l,x,s,d,t,b,r,M,Z,Y,j,K,U,L,I,O,q,ee,z,te,W,re,A,ne,C,le,k,T,D,V,se,B,ie,Q,$e,X,ae,v,me,F,pe,R,fe,E,oe,H,ue,h,J,N,P,ce;t=new Ve({props:{fw:w[0]}}),r=new _({props:{title:"단원 마무리 퀴즈",local:"end-of-chapter-quiz",headingTag:"h1"}}),Z=new Ce({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),j=new _({props:{title:"1. 언어 모델링 파이프라인은 어떤 순서로 진행될까요?",local:"1-언어-모델링-파이프라인은-어떤-순서로-진행될까요",headingTag:"h3"}}),U=new y({props:{choices:[{text:"먼저, 모델이 텍스트를 처리하고 원시 예측 결과를 출력합니다. 이어서 토크나이저가 이 예측 결과를 이해하고 텍스트로 변환합니다.",explain:"모델은 텍스트를 이해할 수 없습니다! 먼저 토크나이저가 텍스트를 토큰화하고 ID로 변환해야만 모델이 이해할 수 있습니다."},{text:"먼저, 토크나이저가 텍스트를 처리하고 ID를 반환합니다. 모델은 ID를 이용해 텍스트로 된 예측 결과를 출력합니다.",explain:"모델의 예측 결과가 텍스트 형태로 바로 나올 수는 없습니다. 예측을 텍스트로 변환하기 위해 토크나이저를 사용해야 합니다!"},{text:"토크나이저가 텍스트를 처리하고 ID를 반환합니다. 모델은 ID를 이용해 예측 결과를 출력합니다. 그리고 토크나이저를 다시 사용해 예측 결과를 일부 텍스트로 변환할 수 있습니다.",explain:"정답! 토크나이저는 토큰화와 역토큰화에 사용될 수 있습니다.",correct:!0}]}}),I=new _({props:{title:"2. 기본 Transformer 모델에 의해 만들어지는 텐서의 출력은 몇 차원이며, 각 텐서가 무엇을 의미하나요?",local:"2-기본-transformer-모델에-의해-만들어지는-텐서의-출력은-몇-차원이며-각-텐서가-무엇을-의미하나요",headingTag:"h3"}}),q=new y({props:{choices:[{text:"2: 문장 길이, 배치 크기",explain:"틀렸습니다! 모델에 의한 텐서 출력은 은닉 크기를 포함한 3차원입니다."},{text:"2: 문장 길이, 은닉 크기",explain:"틀렸습니다! 모든 Transformer 모델은 단일 시퀀스에서도 크기 1로 배치를 처리합니다!"},{text:"3: 문장 길이, 배치 크기, 은닉 크기",explain:"정답!",correct:!0}]}}),z=new _({props:{title:"3. 서브워드 토큰화 예시에 해당하는 것은 무엇인가요?",local:"3-서브워드-토큰화-예시에-해당하는-것은-무엇인가요",headingTag:"h3"}}),W=new y({props:{choices:[{text:"WordPiece",explain:"정답입니다. 서브워드 토큰화 예시 중 하나에 해당합니다!",correct:!0},{text:"문자 기반 토큰화",explain:"문자 기반 토큰화는 서브워드 토큰화 방법이 아닙니다."},{text:"공백과 구두점을 기준으로 나누기",explain:"단어 기반 토큰화 방법입니다!"},{text:"BPE",explain:"정답입니다. 서브워드 토큰화 예시 중 하나에 해당합니다!",correct:!0},{text:"Unigram",explain:"정답입니다. 서브워드 토큰화 예시 중 하나에 해당합니다!",correct:!0},{text:"해당하는 것이 없습니다.",explain:"오답!"}]}}),A=new _({props:{title:"4. 모델 헤드가 무엇인가요?",local:"4-모델-헤드가-무엇인가요",headingTag:"h3"}}),C=new y({props:{choices:[{text:"기본 Transformer 네트워크의 요소로, 텐서를 적합한 레이어로 리디렉션합니다.",explain:"오답입니다! 그런 요소는 없습니다."},{text:"셀프 어텐션 메커니즘이라고도 부르며, 시퀀스 내 다른 토큰에 따라 토큰의 표현을 조정합니다.",explain:'오답입니다! 셀프 어텐션 레이어는 어텐션 "헤드,"를 포함하고 있지만 어텐션 헤드가 적응 헤드는 아닙니다.'},{text:"하나 또는 여러 개의 레이어로 이루어진 추가적인 요소로 트랜스포머의 예측 결과를 task-specific한 출력으로 변환합니다.",explain:"정답입니다. 헤드라고 알려진 적응 헤드는 언어 모델링 헤드, 질의 응답 헤드, 순차 분류 헤드 등과 같이 다양한 형태로 나타납니다.",correct:!0}]}});const _e=[Qe,Be],G=[];function ye(e,n){return e[0]==="pt"?0:1}k=ye(w),T=G[k]=_e[k](w),V=new _({props:{title:"6. 길이가 다른 시퀀스를 하나의 배치로 만들 때 신경써야 할 부분은 무엇일까요?",local:"6-길이가-다른-시퀀스를-하나의-배치로-만들-때-신경써야-할-부분은-무엇일까요",headingTag:"h3"}}),B=new y({props:{choices:[{text:"잘라내기",explain:"정답입니다, 잘라내기는 시퀀스 길이를 동일하게 만들어서 텐서가 직사각형 형태를 가질 수 있게 하는 확실한 방법입니다. 하지만 이 방법 밖에 없을까요?",correct:!0},{text:"텐서 반환하기",explain:"직사각형 텐서를 만들 수 있는 방법은 여러가지가 있겠지만, 텐서를 반환하는 것은 시퀀스를 하나의 배치로 만들 때 유용한 방법이 아닙니다."},{text:"패딩 추가하기",explain:"정답입니다, 패딩은 시퀀스 길이를 동일하게 만들어서 텐서가 직사각형 형태를 가질 수 있게 하는 확실한 방법입니다. 하지만 이 방법 밖에 없을까요?",correct:!0},{text:"어텐션 마스킹",explain:"정확합니다! 어텐션 마스크는 다른 길이의 시퀀스를 처리할 때 매우 중요합니다. 하지만 어텐션 마스킹이 신경써야 하는 유일한 부분은 아닙니다.",correct:!0}]}}),Q=new _({props:{title:"7. 시퀀스 분류 모델의 로짓 출력 결과에 소프트맥스 함수를 적용하는 핵심적인 이유는 무엇일까요?",local:"7-시퀀스-분류-모델의-로짓-출력-결과에-소프트맥스-함수를-적용하는-핵심적인-이유는-무엇일까요",headingTag:"h3"}}),X=new y({props:{choices:[{text:"소프트맥스 함수는 더 신뢰성 있는 로짓 결과를 만들기 위해 정규화를 수행합니다.",explain:"오답입니다, 소프트맥스 함수는 결과의 신뢰도에 영향을 주지 않습니다."},{text:"소프트맥스 함수는 상한과 하한을 적용해서 로짓 결과를 이해하기 쉽게 만듭니다.",explain:"정답입니다! 소프트맥스 함수를 거친 로짓 값은 0과 1 사이 값으로 바뀌게 됩니다. 하지만 이 이유가 소프트맥스 함수를 사용하는 유일한 이유는 아닙니다.",correct:!0},{text:"출력 결과의 총 합이 1이므로 확률적으로 해석이 가능합니다.",explain:"정답입니다! 하지만 이 이유가 소프트맥스 함수를 사용하는 유일한 이유는 아닙니다.",correct:!0}]}}),v=new _({props:{title:"8. 토크나이저 API의 가장 핵심적인 메서드는 무엇일까요?",local:"8-토크나이저-api의-가장-핵심적인-메서드는-무엇일까요",headingTag:"h3"}}),F=new y({props:{choices:[{text:"텍스트를 ID로 인코딩하고 ID를 예측 결과로 인코딩하는 <code>encode</code>입니다.",explain:"틀렸습니다! <code>encode</code> 메서드가 토크나이저에는 있지만, 모델에는 없습니다."},{text:"토크나이저 객체를 바로 호출하는 메서드입니다.",explain:"정확합니다! 토크나이저의 <code>__call__</code> 메서드는 거의 모든 것을 처리할 수 있는 강력한 메서드입니다. 이 메서드는 또한 모델로부터 예측 결과를 탐색하는 데에 사용되기도 합니다.",correct:!0},{text:"<code>pad</code> 메서드입니다.",explain:"틀렸습니다! 패딩은 매우 유용한 방법이지만, 토크나이저 API가 제공하는 기능 중 하나일 뿐입니다."},{text:"<code>tokenize</code> 메서드입니다.",explain:"<code>tokenize</code> 메서드가 유용한 것은 틀림없지만, 토크나이저 API의 핵심은 아닙니다."}]}}),R=new _({props:{title:"9. 아래 코드 예시에서 result 변수가 포함하고 있는 것은 무엇일까요?",local:"9-아래-코드-예시에서-result-변수가-포함하고-있는-것은-무엇일까요",headingTag:"h3"}}),E=new Me({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyLnRva2VuaXplKCUyMkhlbGxvISUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
result = tokenizer.tokenize(<span class="hljs-string">&quot;Hello!&quot;</span>)`,wrap:!1}}),H=new y({props:{choices:[{text:"문자열 리스트로, 각 문자열은 토큰입니다.",explain:"아주 정확합니다! 토큰을 ID로 변환하고 모델로 넘겨 보세요!",correct:!0},{text:"ID 리스트입니다.",explain:"오답입니다. ID 리스트를 만드는 메서드는 <code>__call__</code> 또는 <code>convert_tokens_to_ids</code> 입니다!"},{text:"모든 토큰을 포함하고 있는 문자열입니다.",explain:"문자열을 각각의 토큰으로 나누는 것이 목표기 때문에 정확한 정답은 아닙니다."}]}});const we=[ve,Xe],S=[];function ke(e,n){return e[0]==="pt"?0:1}return h=ke(w),J=S[h]=we[h](w),{c(){l=de("meta"),x=p(),s=de("p"),d=p(),o(t.$$.fragment),b=p(),o(r.$$.fragment),M=p(),o(Z.$$.fragment),Y=p(),o(j.$$.fragment),K=p(),o(U.$$.fragment),L=p(),o(I.$$.fragment),O=p(),o(q.$$.fragment),ee=p(),o(z.$$.fragment),te=p(),o(W.$$.fragment),re=p(),o(A.$$.fragment),ne=p(),o(C.$$.fragment),le=p(),T.c(),D=p(),o(V.$$.fragment),se=p(),o(B.$$.fragment),ie=p(),o(Q.$$.fragment),$e=p(),o(X.$$.fragment),ae=p(),o(v.$$.fragment),me=p(),o(F.$$.fragment),pe=p(),o(R.$$.fragment),fe=p(),o(E.$$.fragment),oe=p(),o(H.$$.fragment),ue=p(),J.c(),N=p(),P=de("p"),this.h()},l(e){const n=We("svelte-u9bgzb",document.head);l=be(n,"META",{name:!0,content:!0}),n.forEach(i),x=f(e),s=be(e,"P",{}),he(s).forEach(i),d=f(e),u(t.$$.fragment,e),b=f(e),u(r.$$.fragment,e),M=f(e),u(Z.$$.fragment,e),Y=f(e),u(j.$$.fragment,e),K=f(e),u(U.$$.fragment,e),L=f(e),u(I.$$.fragment,e),O=f(e),u(q.$$.fragment,e),ee=f(e),u(z.$$.fragment,e),te=f(e),u(W.$$.fragment,e),re=f(e),u(A.$$.fragment,e),ne=f(e),u(C.$$.fragment,e),le=f(e),T.l(e),D=f(e),u(V.$$.fragment,e),se=f(e),u(B.$$.fragment,e),ie=f(e),u(Q.$$.fragment,e),$e=f(e),u(X.$$.fragment,e),ae=f(e),u(v.$$.fragment,e),me=f(e),u(F.$$.fragment,e),pe=f(e),u(R.$$.fragment,e),fe=f(e),u(E.$$.fragment,e),oe=f(e),u(H.$$.fragment,e),ue=f(e),J.l(e),N=f(e),P=be(e,"P",{}),he(P).forEach(i),this.h()},h(){Je(l,"name","hf:doc:metadata"),Je(l,"content",Re)},m(e,n){Ae(document.head,l),m(e,x,n),m(e,s,n),m(e,d,n),c(t,e,n),m(e,b,n),c(r,e,n),m(e,M,n),c(Z,e,n),m(e,Y,n),c(j,e,n),m(e,K,n),c(U,e,n),m(e,L,n),c(I,e,n),m(e,O,n),c(q,e,n),m(e,ee,n),c(z,e,n),m(e,te,n),c(W,e,n),m(e,re,n),c(A,e,n),m(e,ne,n),c(C,e,n),m(e,le,n),G[k].m(e,n),m(e,D,n),c(V,e,n),m(e,se,n),c(B,e,n),m(e,ie,n),c(Q,e,n),m(e,$e,n),c(X,e,n),m(e,ae,n),c(v,e,n),m(e,me,n),c(F,e,n),m(e,pe,n),c(R,e,n),m(e,fe,n),c(E,e,n),m(e,oe,n),c(H,e,n),m(e,ue,n),S[h].m(e,n),m(e,N,n),m(e,P,n),ce=!0},p(e,[n]){const Te={};n&1&&(Te.fw=e[0]),t.$set(Te);let ge=k;k=ye(e),k!==ge&&(je(),$(G[ge],1,1,()=>{G[ge]=null}),Ze(),T=G[k],T||(T=G[k]=_e[k](e),T.c()),a(T,1),T.m(D.parentNode,D));let xe=h;h=ke(e),h!==xe&&(je(),$(S[xe],1,1,()=>{S[xe]=null}),Ze(),J=S[h],J||(J=S[h]=we[h](e),J.c()),a(J,1),J.m(N.parentNode,N))},i(e){ce||(a(t.$$.fragment,e),a(r.$$.fragment,e),a(Z.$$.fragment,e),a(j.$$.fragment,e),a(U.$$.fragment,e),a(I.$$.fragment,e),a(q.$$.fragment,e),a(z.$$.fragment,e),a(W.$$.fragment,e),a(A.$$.fragment,e),a(C.$$.fragment,e),a(T),a(V.$$.fragment,e),a(B.$$.fragment,e),a(Q.$$.fragment,e),a(X.$$.fragment,e),a(v.$$.fragment,e),a(F.$$.fragment,e),a(R.$$.fragment,e),a(E.$$.fragment,e),a(H.$$.fragment,e),a(J),ce=!0)},o(e){$(t.$$.fragment,e),$(r.$$.fragment,e),$(Z.$$.fragment,e),$(j.$$.fragment,e),$(U.$$.fragment,e),$(I.$$.fragment,e),$(q.$$.fragment,e),$(z.$$.fragment,e),$(W.$$.fragment,e),$(A.$$.fragment,e),$(C.$$.fragment,e),$(T),$(V.$$.fragment,e),$(B.$$.fragment,e),$(Q.$$.fragment,e),$(X.$$.fragment,e),$(v.$$.fragment,e),$(F.$$.fragment,e),$(R.$$.fragment,e),$(E.$$.fragment,e),$(H.$$.fragment,e),$(J),ce=!1},d(e){e&&(i(x),i(s),i(d),i(b),i(M),i(Y),i(K),i(L),i(O),i(ee),i(te),i(re),i(ne),i(le),i(D),i(se),i(ie),i($e),i(ae),i(me),i(pe),i(fe),i(oe),i(ue),i(N),i(P)),i(l),g(t,e),g(r,e),g(Z,e),g(j,e),g(U,e),g(I,e),g(q,e),g(z,e),g(W,e),g(A,e),g(C,e),G[k].d(e),g(V,e),g(B,e),g(Q,e),g(X,e),g(v,e),g(F,e),g(R,e),g(E,e),g(H,e),S[h].d(e)}}}const Re='{"title":"단원 마무리 퀴즈","local":"end-of-chapter-quiz","sections":[{"title":"1. 언어 모델링 파이프라인은 어떤 순서로 진행될까요?","local":"1-언어-모델링-파이프라인은-어떤-순서로-진행될까요","sections":[],"depth":3},{"title":"2. 기본 Transformer 모델에 의해 만들어지는 텐서의 출력은 몇 차원이며, 각 텐서가 무엇을 의미하나요?","local":"2-기본-transformer-모델에-의해-만들어지는-텐서의-출력은-몇-차원이며-각-텐서가-무엇을-의미하나요","sections":[],"depth":3},{"title":"3. 서브워드 토큰화 예시에 해당하는 것은 무엇인가요?","local":"3-서브워드-토큰화-예시에-해당하는-것은-무엇인가요","sections":[],"depth":3},{"title":"4. 모델 헤드가 무엇인가요?","local":"4-모델-헤드가-무엇인가요","sections":[],"depth":3},{"title":"5. AutoModel이 무엇인가요?","local":"5-automodel이-무엇인가요","sections":[],"depth":3},{"title":"5. TFAutoModel이 무엇인가요?","local":"5-tfautomodel이-무엇인가요","sections":[],"depth":3},{"title":"6. 길이가 다른 시퀀스를 하나의 배치로 만들 때 신경써야 할 부분은 무엇일까요?","local":"6-길이가-다른-시퀀스를-하나의-배치로-만들-때-신경써야-할-부분은-무엇일까요","sections":[],"depth":3},{"title":"7. 시퀀스 분류 모델의 로짓 출력 결과에 소프트맥스 함수를 적용하는 핵심적인 이유는 무엇일까요?","local":"7-시퀀스-분류-모델의-로짓-출력-결과에-소프트맥스-함수를-적용하는-핵심적인-이유는-무엇일까요","sections":[],"depth":3},{"title":"8. 토크나이저 API의 가장 핵심적인 메서드는 무엇일까요?","local":"8-토크나이저-api의-가장-핵심적인-메서드는-무엇일까요","sections":[],"depth":3},{"title":"9. 아래 코드 예시에서 result 변수가 포함하고 있는 것은 무엇일까요?","local":"9-아래-코드-예시에서-result-변수가-포함하고-있는-것은-무엇일까요","sections":[],"depth":3},{"title":"10. 아래 코드에서 잘못된 부분이 있을까요?","local":"10-아래-코드에서-잘못된-부분이-있을까요","sections":[],"depth":3},{"title":"10. 아래 코드에서 잘못된 부분이 있을까요?","local":"10-아래-코드에서-잘못된-부분이-있을까요","sections":[],"depth":3}],"depth":1}';function Ee(w,l,x){let s="pt";return Ie(()=>{const d=new URLSearchParams(window.location.search);x(0,s=d.get("fw")||"pt")}),[s]}class Ke extends qe{constructor(l){super(),ze(this,l,Ee,Fe,Ue,{})}}export{Ke as component};
