import{s as Z,o as tt,n as et}from"../chunks/scheduler.37c15a92.js";import{S as nt,i as st,g as m,s as r,r as S,A as at,h as f,f as n,c as o,j as W,u as F,x as P,k as G,y as it,a as s,v as N,d as U,t as q,w as B,m as X,n as Y}from"../chunks/index.2bf4358c.js";import{T as lt}from"../chunks/Tip.363c041f.js";import{C as rt}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{H as ot,E as mt}from"../chunks/getInferenceSnippets.24b50994.js";function ft(b){let i,l,u="계정을 만드는 게",p;return{c(){i=X("⚠️ Model Hub와 🤗 Transformers에서 사용할 수 있는 모든 기능을 활용하려면 "),l=m("a"),l.textContent=u,p=X(" 좋습니다."),this.h()},l(a){i=Y(a,"⚠️ Model Hub와 🤗 Transformers에서 사용할 수 있는 모든 기능을 활용하려면 "),l=f(a,"A",{href:!0,"data-svelte-h":!0}),P(l)!=="svelte-1d2xlvt"&&(l.textContent=u),p=Y(a," 좋습니다."),this.h()},h(){G(l,"href","https://huggingface.co/join")},m(a,c){s(a,i,c),s(a,l,c),s(a,p,c)},p:et,d(a){a&&(n(i),n(l),n(p))}}}function pt(b){let i,l,u,p,a,c,d,w,h,O='<a href="/course/chapter1">제1단원</a>에서 보았듯이, 트랜스포머 모델은 대부분 매우 큽니다. 수백만에서 <em>수백억</em>개의 파라미터를 가진 모델을 훈련시키고 배포하는 것은 만만치 않은데다가, 하루가 멀다하고 자체적으로 구현된 새로운 모델이 출시되어서, 모두 적용해보려고 한다면 쉽지는 않을 거예요.',L,_,R="🤗 Transformers 라이브러리는 이 문제를 해결하기 위해 만들어졌습니다. Transformer 모델을 가져오고, 훈련시킨 후 저장할 수 있는 단일 API를 제공하는 것이 목표예요. 라이브러리의 주요 기능은 다음과 같습니다.",H,x,D="<li><strong>사용 편의성</strong>: 추론하기 위해 최첨단 NLP 모델을 다운로드한 다음 적재시켜 사용하고 싶다면, 단 2줄의 코드만으로 할 수 있어요.</li> <li><strong>유연성</strong>: 기초적으로 보면 모든 모델은 단순한 PyTorch <code>nn.module</code> 또는 TensorFlow <code>tf.keras.Model</code> 클래스입니다. 각 머신러닝(ML) 프레임워크의 여타 다른 모델이나 마찬가지로 처리할 수 있다는 뜻이에요.</li> <li><strong>단순성</strong>: 라이브러리 위에 추상화를 거의 하지 않았어요. “모든 것을 파일 하나에”가 핵심 개념입니다. 모델의 순전파(forward propagation) 부분이 파일 한 개에 모두 정의되어 있어서, 코드 자체를 이해하고 해킹할 수도 있어요.</li>",k,g,J="마지막 기능은 여타 ML 라이브러리들과는 다른 🤗 Transformers만의 차별점입니다. 모델은 파일 간에 공유되는 모듈로 만들어지지 않고, 모델마다 자체적인 레이어를 쌓습니다. 이렇게 하면 모델을 더 쉽게 보고 이해할 수 있으면서도, 다른 모델과는 상관없이 원하는 모델에서 마음껏 실험해볼 수 있습니다.",y,v,K='이 단원은 모델과 토크나이저로 <a href="/course/chapter1">제1단원</a>에서 소개된 <code>pipeline()</code> 함수를 처음부터 끝까지 만들어보는 것으로 시작합니다. 만들고나면 모델 API를 더 깊게 탐구해봅니다. model과 configuration 클래스를 알아보고, 모델을 적재하는 방법과 수치를 입력으로 제공해서 예측이 출력되는 처리 과정을 보여드리겠습니다.',z,T,Q="그런 다음 <code>pipeline()</code> 함수의 중요한 구성요소인 tokenizer API를 살펴보겠습니다. tokenizer는 처리의 첫 번째 단계인 텍스트를 신경망의 수치 입력으로 바꾸는 부분과 필요할 때 다시 텍스트로 바꾸는 마지막 단계, 즉 양끝을 다룹니다. 마지막으로 여러 문장을 묶어서 모델에게 제공하는 방법을 알아보고, 기존 <code>tokenizer()</code> 함수를 자세히 살펴봄으로써 마무리짓겠습니다.",A,$,E,C,j,M,I;return a=new ot({props:{title:"단원 소개",local:"introduction",headingTag:"h1"}}),d=new rt({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),$=new lt({props:{$$slots:{default:[ft]},$$scope:{ctx:b}}}),C=new mt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ko/chapter2/1.mdx"}}),{c(){i=m("meta"),l=r(),u=m("p"),p=r(),S(a.$$.fragment),c=r(),S(d.$$.fragment),w=r(),h=m("p"),h.innerHTML=O,L=r(),_=m("p"),_.textContent=R,H=r(),x=m("ul"),x.innerHTML=D,k=r(),g=m("p"),g.textContent=J,y=r(),v=m("p"),v.innerHTML=K,z=r(),T=m("p"),T.innerHTML=Q,A=r(),S($.$$.fragment),E=r(),S(C.$$.fragment),j=r(),M=m("p"),this.h()},l(t){const e=at("svelte-u9bgzb",document.head);i=f(e,"META",{name:!0,content:!0}),e.forEach(n),l=o(t),u=f(t,"P",{}),W(u).forEach(n),p=o(t),F(a.$$.fragment,t),c=o(t),F(d.$$.fragment,t),w=o(t),h=f(t,"P",{"data-svelte-h":!0}),P(h)!=="svelte-foydyi"&&(h.innerHTML=O),L=o(t),_=f(t,"P",{"data-svelte-h":!0}),P(_)!=="svelte-1f6yixk"&&(_.textContent=R),H=o(t),x=f(t,"UL",{"data-svelte-h":!0}),P(x)!=="svelte-1ebzm9b"&&(x.innerHTML=D),k=o(t),g=f(t,"P",{"data-svelte-h":!0}),P(g)!=="svelte-wmfgge"&&(g.textContent=J),y=o(t),v=f(t,"P",{"data-svelte-h":!0}),P(v)!=="svelte-jwrt7n"&&(v.innerHTML=K),z=o(t),T=f(t,"P",{"data-svelte-h":!0}),P(T)!=="svelte-xz4ni5"&&(T.innerHTML=Q),A=o(t),F($.$$.fragment,t),E=o(t),F(C.$$.fragment,t),j=o(t),M=f(t,"P",{}),W(M).forEach(n),this.h()},h(){G(i,"name","hf:doc:metadata"),G(i,"content",ut)},m(t,e){it(document.head,i),s(t,l,e),s(t,u,e),s(t,p,e),N(a,t,e),s(t,c,e),N(d,t,e),s(t,w,e),s(t,h,e),s(t,L,e),s(t,_,e),s(t,H,e),s(t,x,e),s(t,k,e),s(t,g,e),s(t,y,e),s(t,v,e),s(t,z,e),s(t,T,e),s(t,A,e),N($,t,e),s(t,E,e),N(C,t,e),s(t,j,e),s(t,M,e),I=!0},p(t,[e]){const V={};e&2&&(V.$$scope={dirty:e,ctx:t}),$.$set(V)},i(t){I||(U(a.$$.fragment,t),U(d.$$.fragment,t),U($.$$.fragment,t),U(C.$$.fragment,t),I=!0)},o(t){q(a.$$.fragment,t),q(d.$$.fragment,t),q($.$$.fragment,t),q(C.$$.fragment,t),I=!1},d(t){t&&(n(l),n(u),n(p),n(c),n(w),n(h),n(L),n(_),n(H),n(x),n(k),n(g),n(y),n(v),n(z),n(T),n(A),n(E),n(j),n(M)),n(i),B(a,t),B(d,t),B($,t),B(C,t)}}}const ut='{"title":"단원 소개","local":"introduction","sections":[],"depth":1}';function ct(b){return tt(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class gt extends nt{constructor(i){super(),st(this,i,ct,pt,Z,{})}}export{gt as component};
