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