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