import{s as We,o as Ce}from"../chunks/scheduler.cc52f4b9.js";import{S as Ae,i as Ve,e as _e,s as p,c as o,h as Be,a as we,d as i,b as f,f as je,g as u,k as Ie,l as ve,m as a,n as c,o as s,u as qe,t as m,p as g,v as ze}from"../chunks/index.ccfa71ad.js";import{C as Qe,H as y,E as Xe}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.bf6e17b3.js";import{C as ke}from"../chunks/CodeBlock.d683ceb4.js";import{C as Ee}from"../chunks/CourseFloatingBanner.23e5afab.js";import{Q as _}from"../chunks/Question.b3ec92b0.js";import{F as Fe}from"../chunks/FrameworkSwitchCourse.4d190e14.js";function Re(w){let l,x,$,d;return l=new y({props:{title:"5. TFAutoModel이 무엇인가요?",local:"5-tfautomodel이-무엇인가요",headingTag:"h3"}}),$=new _({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($.$$.fragment)},l(t){u(l.$$.fragment,t),x=f(t),u($.$$.fragment,t)},m(t,b){c(l,t,b),a(t,x,b),c($,t,b),d=!0},i(t){d||(m(l.$$.fragment,t),m($.$$.fragment,t),d=!0)},o(t){s(l.$$.fragment,t),s($.$$.fragment,t),d=!1},d(t){t&&i(x),g(l,t),g($,t)}}}function Ge(w){let l,x,$,d;return l=new y({props:{title:"5. AutoModel이 무엇인가요?",local:"5-automodel이-무엇인가요",headingTag:"h3"}}),$=new _({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($.$$.fragment)},l(t){u(l.$$.fragment,t),x=f(t),u($.$$.fragment,t)},m(t,b){c(l,t,b),a(t,x,b),c($,t,b),d=!0},i(t){d||(m(l.$$.fragment,t),m($.$$.fragment,t),d=!0)},o(t){s(l.$$.fragment,t),s($.$$.fragment,t),d=!1},d(t){t&&i(x),g(l,t),g($,t)}}}function He(w){let l,x,$,d,t,b;return l=new y({props:{title:"10. 아래 코드에서 잘못된 부분이 있을까요?",local:"10-아래-코드에서-잘못된-부분이-있을까요",headingTag:"h3"}}),$=new ke({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 _({props:{choices:[{text:"아니요, 모두 제대로 되어 있습니다.",explain:"안타깝게도, 서로 다른 체크포인트로 학습된 토크나이저와 모델을 함께 사용하는 것은 좋은 방법이 아닙니다. 모델은 토크나이저의 출력 결과를 이해할 수 있도록 학습되지 않았기 때문에 모델이 동작하더라도 모델의 출력을 이해할 수 없을 것입니다."},{text:"토크나이저와 모델은 같은 체크포인트를 사용해야 합니다.",explain:"정답입니다!",correct:!0},{text:"토크나이저를 이용해 패딩을 추가하거나 시퀀스 길이를 잘라내는 것은 모든 입력이 배치로 처리될 때 좋은 방법입니다.",explain:"모든 모델의 입력이 배치로 들어가야 하는 것은 맞습니다. 하지만 주어진 시퀀스가 하나뿐이기 때문에 이 예시에서 필수적인 부분은 아닙니다. 시퀀스를 잘라내거나 시퀀스에 패딩을 추가하는 것은 여러 개의 문장으로 배치를 만들 때 필요한 기술입니다."}]}}),{c(){o(l.$$.fragment),x=p(),o($.$$.fragment),d=p(),o(t.$$.fragment)},l(n){u(l.$$.fragment,n),x=f(n),u($.$$.fragment,n),d=f(n),u(t.$$.fragment,n)},m(n,M){c(l,n,M),a(n,x,M),c($,n,M),a(n,d,M),c(t,n,M),b=!0},i(n){b||(m(l.$$.fragment,n),m($.$$.fragment,n),m(t.$$.fragment,n),b=!0)},o(n){s(l.$$.fragment,n),s($.$$.fragment,n),s(t.$$.fragment,n),b=!1},d(n){n&&(i(x),i(d)),g(l,n),g($,n),g(t,n)}}}function Se(w){let l,x,$,d,t,b;return l=new y({props:{title:"10. 아래 코드에서 잘못된 부분이 있을까요?",local:"10-아래-코드에서-잘못된-부분이-있을까요",headingTag:"h3"}}),$=new ke({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 _({props:{choices:[{text:"아니요, 모두 제대로 되어 있습니다.",explain:"안타깝게도, 서로 다른 체크포인트로 학습된 토크나이저와 모델을 함께 사용하는 것은 좋은 방법이 아닙니다. 모델은 토크나이저의 출력 결과를 이해할 수 있도록 학습되지 않았기 때문에 모델이 동작하더라도 모델의 출력을 이해할 수 없을 것입니다."},{text:"토크나이저와 모델은 같은 체크포인트를 사용해야 합니다.",explain:"정답입니다!",correct:!0},{text:"토크나이저를 이용해 패딩을 추가하거나 시퀀스 길이를 잘라내는 것은 모든 입력이 배치로 처리될 때 좋은 방법입니다.",explain:"모든 모델의 입력이 배치로 들어가야 하는 것은 맞습니다. 하지만 주어진 시퀀스가 하나뿐이기 때문에 이 예시에서 필수적인 부분은 아닙니다. 시퀀스를 잘라내거나 시퀀스에 패딩을 추가하는 것은 여러 개의 문장으로 배치를 만들 때 필요한 기술입니다."}]}}),{c(){o(l.$$.fragment),x=p(),o($.$$.fragment),d=p(),o(t.$$.fragment)},l(n){u(l.$$.fragment,n),x=f(n),u($.$$.fragment,n),d=f(n),u(t.$$.fragment,n)},m(n,M){c(l,n,M),a(n,x,M),c($,n,M),a(n,d,M),c(t,n,M),b=!0},i(n){b||(m(l.$$.fragment,n),m($.$$.fragment,n),m(t.$$.fragment,n),b=!0)},o(n){s(l.$$.fragment,n),s($.$$.fragment,n),s(t.$$.fragment,n),b=!1},d(n){n&&(i(x),i(d)),g(l,n),g($,n),g(t,n)}}}function De(w){let l,x,$,d,t,b,n,M,Z,K,U,O,j,ee,I,te,q,re,z,ne,W,le,C,$e,A,ie,V,se,k,T,P,B,me,v,ae,Q,pe,X,fe,E,oe,F,ue,R,ce,G,ge,H,xe,h,J,L,S,de,Y,be;t=new Fe({props:{fw:w[0]}}),n=new Qe({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),Z=new y({props:{title:"단원 마무리 퀴즈",local:"end-of-chapter-quiz",headingTag:"h1"}}),U=new Ee({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),j=new y({props:{title:"1. 언어 모델링 파이프라인은 어떤 순서로 진행될까요?",local:"1-언어-모델링-파이프라인은-어떤-순서로-진행될까요",headingTag:"h3"}}),I=new _({props:{choices:[{text:"먼저, 모델이 텍스트를 처리하고 원시 예측 결과를 출력합니다. 이어서 토크나이저가 이 예측 결과를 이해하고 텍스트로 변환합니다.",explain:"모델은 텍스트를 이해할 수 없습니다! 먼저 토크나이저가 텍스트를 토큰화하고 ID로 변환해야만 모델이 이해할 수 있습니다."},{text:"먼저, 토크나이저가 텍스트를 처리하고 ID를 반환합니다. 모델은 ID를 이용해 텍스트로 된 예측 결과를 출력합니다.",explain:"모델의 예측 결과가 텍스트 형태로 바로 나올 수는 없습니다. 예측을 텍스트로 변환하기 위해 토크나이저를 사용해야 합니다!"},{text:"토크나이저가 텍스트를 처리하고 ID를 반환합니다. 모델은 ID를 이용해 예측 결과를 출력합니다. 그리고 토크나이저를 다시 사용해 예측 결과를 일부 텍스트로 변환할 수 있습니다.",explain:"정답! 토크나이저는 토큰화와 역토큰화에 사용될 수 있습니다.",correct:!0}]}}),q=new y({props:{title:"2. 기본 Transformer 모델에 의해 만들어지는 텐서의 출력은 몇 차원이며, 각 텐서가 무엇을 의미하나요?",local:"2-기본-transformer-모델에-의해-만들어지는-텐서의-출력은-몇-차원이며-각-텐서가-무엇을-의미하나요",headingTag:"h3"}}),z=new _({props:{choices:[{text:"2: 문장 길이, 배치 크기",explain:"틀렸습니다! 모델에 의한 텐서 출력은 은닉 크기를 포함한 3차원입니다."},{text:"2: 문장 길이, 은닉 크기",explain:"틀렸습니다! 모든 Transformer 모델은 단일 시퀀스에서도 크기 1로 배치를 처리합니다!"},{text:"3: 문장 길이, 배치 크기, 은닉 크기",explain:"정답!",correct:!0}]}}),W=new y({props:{title:"3. 서브워드 토큰화 예시에 해당하는 것은 무엇인가요?",local:"3-서브워드-토큰화-예시에-해당하는-것은-무엇인가요",headingTag:"h3"}}),C=new _({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 y({props:{title:"4. 모델 헤드가 무엇인가요?",local:"4-모델-헤드가-무엇인가요",headingTag:"h3"}}),V=new _({props:{choices:[{text:"기본 Transformer 네트워크의 요소로, 텐서를 적합한 레이어로 리디렉션합니다.",explain:"오답입니다! 그런 요소는 없습니다."},{text:"셀프 어텐션 메커니즘이라고도 부르며, 시퀀스 내 다른 토큰에 따라 토큰의 표현을 조정합니다.",explain:'오답입니다! 셀프 어텐션 레이어는 어텐션 "헤드,"를 포함하고 있지만 어텐션 헤드가 적응 헤드는 아닙니다.'},{text:"하나 또는 여러 개의 레이어로 이루어진 추가적인 요소로 트랜스포머의 예측 결과를 task-specific한 출력으로 변환합니다.",explain:"정답입니다. 헤드라고 알려진 적응 헤드는 언어 모델링 헤드, 질의 응답 헤드, 순차 분류 헤드 등과 같이 다양한 형태로 나타납니다.",correct:!0}]}});const Te=[Ge,Re],D=[];function he(e,r){return e[0]==="pt"?0:1}k=he(w),T=D[k]=Te[k](w),B=new y({props:{title:"6. 길이가 다른 시퀀스를 하나의 배치로 만들 때 신경써야 할 부분은 무엇일까요?",local:"6-길이가-다른-시퀀스를-하나의-배치로-만들-때-신경써야-할-부분은-무엇일까요",headingTag:"h3"}}),v=new _({props:{choices:[{text:"잘라내기",explain:"정답입니다, 잘라내기는 시퀀스 길이를 동일하게 만들어서 텐서가 직사각형 형태를 가질 수 있게 하는 확실한 방법입니다. 하지만 이 방법 밖에 없을까요?",correct:!0},{text:"텐서 반환하기",explain:"직사각형 텐서를 만들 수 있는 방법은 여러가지가 있겠지만, 텐서를 반환하는 것은 시퀀스를 하나의 배치로 만들 때 유용한 방법이 아닙니다."},{text:"패딩 추가하기",explain:"정답입니다, 패딩은 시퀀스 길이를 동일하게 만들어서 텐서가 직사각형 형태를 가질 수 있게 하는 확실한 방법입니다. 하지만 이 방법 밖에 없을까요?",correct:!0},{text:"어텐션 마스킹",explain:"정확합니다! 어텐션 마스크는 다른 길이의 시퀀스를 처리할 때 매우 중요합니다. 하지만 어텐션 마스킹이 신경써야 하는 유일한 부분은 아닙니다.",correct:!0}]}}),Q=new y({props:{title:"7. 시퀀스 분류 모델의 로짓 출력 결과에 소프트맥스 함수를 적용하는 핵심적인 이유는 무엇일까요?",local:"7-시퀀스-분류-모델의-로짓-출력-결과에-소프트맥스-함수를-적용하는-핵심적인-이유는-무엇일까요",headingTag:"h3"}}),X=new _({props:{choices:[{text:"소프트맥스 함수는 더 신뢰성 있는 로짓 결과를 만들기 위해 정규화를 수행합니다.",explain:"오답입니다, 소프트맥스 함수는 결과의 신뢰도에 영향을 주지 않습니다."},{text:"소프트맥스 함수는 상한과 하한을 적용해서 로짓 결과를 이해하기 쉽게 만듭니다.",explain:"정답입니다! 소프트맥스 함수를 거친 로짓 값은 0과 1 사이 값으로 바뀌게 됩니다. 하지만 이 이유가 소프트맥스 함수를 사용하는 유일한 이유는 아닙니다.",correct:!0},{text:"출력 결과의 총 합이 1이므로 확률적으로 해석이 가능합니다.",explain:"정답입니다! 하지만 이 이유가 소프트맥스 함수를 사용하는 유일한 이유는 아닙니다.",correct:!0}]}}),E=new y({props:{title:"8. 토크나이저 API의 가장 핵심적인 메서드는 무엇일까요?",local:"8-토크나이저-api의-가장-핵심적인-메서드는-무엇일까요",headingTag:"h3"}}),F=new _({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 y({props:{title:"9. 아래 코드 예시에서 result 변수가 포함하고 있는 것은 무엇일까요?",local:"9-아래-코드-예시에서-result-변수가-포함하고-있는-것은-무엇일까요",headingTag:"h3"}}),G=new ke({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 _({props:{choices:[{text:"문자열 리스트로, 각 문자열은 토큰입니다.",explain:"아주 정확합니다! 토큰을 ID로 변환하고 모델로 넘겨 보세요!",correct:!0},{text:"ID 리스트입니다.",explain:"오답입니다. ID 리스트를 만드는 메서드는 <code>__call__</code> 또는 <code>convert_tokens_to_ids</code> 입니다!"},{text:"모든 토큰을 포함하고 있는 문자열입니다.",explain:"문자열을 각각의 토큰으로 나누는 것이 목표기 때문에 정확한 정답은 아닙니다."}]}});const Je=[Se,He],N=[];function Ze(e,r){return e[0]==="pt"?0:1}return h=Ze(w),J=N[h]=Je[h](w),S=new Xe({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ko/chapter2/8.mdx"}}),{c(){l=_e("meta"),x=p(),$=_e("p"),d=p(),o(t.$$.fragment),b=p(),o(n.$$.fragment),M=p(),o(Z.$$.fragment),K=p(),o(U.$$.fragment),O=p(),o(j.$$.fragment),ee=p(),o(I.$$.fragment),te=p(),o(q.$$.fragment),re=p(),o(z.$$.fragment),ne=p(),o(W.$$.fragment),le=p(),o(C.$$.fragment),$e=p(),o(A.$$.fragment),ie=p(),o(V.$$.fragment),se=p(),T.c(),P=p(),o(B.$$.fragment),me=p(),o(v.$$.fragment),ae=p(),o(Q.$$.fragment),pe=p(),o(X.$$.fragment),fe=p(),o(E.$$.fragment),oe=p(),o(F.$$.fragment),ue=p(),o(R.$$.fragment),ce=p(),o(G.$$.fragment),ge=p(),o(H.$$.fragment),xe=p(),J.c(),L=p(),o(S.$$.fragment),de=p(),Y=_e("p"),this.h()},l(e){const r=Be("svelte-u9bgzb",document.head);l=we(r,"META",{name:!0,content:!0}),r.forEach(i),x=f(e),$=we(e,"P",{}),je($).forEach(i),d=f(e),u(t.$$.fragment,e),b=f(e),u(n.$$.fragment,e),M=f(e),u(Z.$$.fragment,e),K=f(e),u(U.$$.fragment,e),O=f(e),u(j.$$.fragment,e),ee=f(e),u(I.$$.fragment,e),te=f(e),u(q.$$.fragment,e),re=f(e),u(z.$$.fragment,e),ne=f(e),u(W.$$.fragment,e),le=f(e),u(C.$$.fragment,e),$e=f(e),u(A.$$.fragment,e),ie=f(e),u(V.$$.fragment,e),se=f(e),T.l(e),P=f(e),u(B.$$.fragment,e),me=f(e),u(v.$$.fragment,e),ae=f(e),u(Q.$$.fragment,e),pe=f(e),u(X.$$.fragment,e),fe=f(e),u(E.$$.fragment,e),oe=f(e),u(F.$$.fragment,e),ue=f(e),u(R.$$.fragment,e),ce=f(e),u(G.$$.fragment,e),ge=f(e),u(H.$$.fragment,e),xe=f(e),J.l(e),L=f(e),u(S.$$.fragment,e),de=f(e),Y=we(e,"P",{}),je(Y).forEach(i),this.h()},h(){Ie(l,"name","hf:doc:metadata"),Ie(l,"content",Ne)},m(e,r){ve(document.head,l),a(e,x,r),a(e,$,r),a(e,d,r),c(t,e,r),a(e,b,r),c(n,e,r),a(e,M,r),c(Z,e,r),a(e,K,r),c(U,e,r),a(e,O,r),c(j,e,r),a(e,ee,r),c(I,e,r),a(e,te,r),c(q,e,r),a(e,re,r),c(z,e,r),a(e,ne,r),c(W,e,r),a(e,le,r),c(C,e,r),a(e,$e,r),c(A,e,r),a(e,ie,r),c(V,e,r),a(e,se,r),D[k].m(e,r),a(e,P,r),c(B,e,r),a(e,me,r),c(v,e,r),a(e,ae,r),c(Q,e,r),a(e,pe,r),c(X,e,r),a(e,fe,r),c(E,e,r),a(e,oe,r),c(F,e,r),a(e,ue,r),c(R,e,r),a(e,ce,r),c(G,e,r),a(e,ge,r),c(H,e,r),a(e,xe,r),N[h].m(e,r),a(e,L,r),c(S,e,r),a(e,de,r),a(e,Y,r),be=!0},p(e,[r]){const Ue={};r&1&&(Ue.fw=e[0]),t.$set(Ue);let Me=k;k=he(e),k!==Me&&(ze(),s(D[Me],1,1,()=>{D[Me]=null}),qe(),T=D[k],T||(T=D[k]=Te[k](e),T.c()),m(T,1),T.m(P.parentNode,P));let ye=h;h=Ze(e),h!==ye&&(ze(),s(N[ye],1,1,()=>{N[ye]=null}),qe(),J=N[h],J||(J=N[h]=Je[h](e),J.c()),m(J,1),J.m(L.parentNode,L))},i(e){be||(m(t.$$.fragment,e),m(n.$$.fragment,e),m(Z.$$.fragment,e),m(U.$$.fragment,e),m(j.$$.fragment,e),m(I.$$.fragment,e),m(q.$$.fragment,e),m(z.$$.fragment,e),m(W.$$.fragment,e),m(C.$$.fragment,e),m(A.$$.fragment,e),m(V.$$.fragment,e),m(T),m(B.$$.fragment,e),m(v.$$.fragment,e),m(Q.$$.fragment,e),m(X.$$.fragment,e),m(E.$$.fragment,e),m(F.$$.fragment,e),m(R.$$.fragment,e),m(G.$$.fragment,e),m(H.$$.fragment,e),m(J),m(S.$$.fragment,e),be=!0)},o(e){s(t.$$.fragment,e),s(n.$$.fragment,e),s(Z.$$.fragment,e),s(U.$$.fragment,e),s(j.$$.fragment,e),s(I.$$.fragment,e),s(q.$$.fragment,e),s(z.$$.fragment,e),s(W.$$.fragment,e),s(C.$$.fragment,e),s(A.$$.fragment,e),s(V.$$.fragment,e),s(T),s(B.$$.fragment,e),s(v.$$.fragment,e),s(Q.$$.fragment,e),s(X.$$.fragment,e),s(E.$$.fragment,e),s(F.$$.fragment,e),s(R.$$.fragment,e),s(G.$$.fragment,e),s(H.$$.fragment,e),s(J),s(S.$$.fragment,e),be=!1},d(e){e&&(i(x),i($),i(d),i(b),i(M),i(K),i(O),i(ee),i(te),i(re),i(ne),i(le),i($e),i(ie),i(se),i(P),i(me),i(ae),i(pe),i(fe),i(oe),i(ue),i(ce),i(ge),i(xe),i(L),i(de),i(Y)),i(l),g(t,e),g(n,e),g(Z,e),g(U,e),g(j,e),g(I,e),g(q,e),g(z,e),g(W,e),g(C,e),g(A,e),g(V,e),D[k].d(e),g(B,e),g(v,e),g(Q,e),g(X,e),g(E,e),g(F,e),g(R,e),g(G,e),g(H,e),N[h].d(e),g(S,e)}}}const Ne='{"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 Pe(w,l,x){let $="pt";return Ce(()=>{const d=new URLSearchParams(window.location.search);x(0,$=d.get("fw")||"pt")}),[$]}class nt extends Ae{constructor(l){super(),Ve(this,l,Pe,De,We,{})}}export{nt as component};
