import{s as W,o as X,n as Y}from"../chunks/scheduler.39a43cde.js";import{S as Z,i as tt,g as i,s as c,m as et,r as V,A as nt,h as p,f as l,c as m,j as S,n as at,u as G,x as h,k as N,y as s,a as _,v as J,d as K,t as O,w as Q}from"../chunks/index.23ec2204.js";import{T as st}from"../chunks/Tip.99600415.js";import{C as rt}from"../chunks/CourseFloatingBanner.c5f43a8d.js";function lt(T){let a,u='⚠️ برای بهره بردن از تمامی ویژگی‌های موجود در هاب مدل‌ها و همچنین ترنسفورمرهای هاگینگ‌فِیس پیشنهاد می‌کنیم که <a href="https://huggingface.co/join">حساب کاربری بسازید.</a>';return{c(){a=i("p"),a.innerHTML=u},l(o){a=p(o,"P",{"data-svelte-h":!0}),h(a)!=="svelte-1jb8f64"&&(a.innerHTML=u)},m(o,$){_(o,a,$)},p:Y,d(o){o&&l(a)}}}function ot(T){let a,u,o,$,e,b,d,j,g,U='همان طور که در <a href="/course/chapter1">فصل اول</a> دیدید، مدل‌های ترنسفورمر معمولا بسیار بزرگ هستند. با داشتن میلیون‌ها یا حتی ده‌ها میلیارد پارامتر، تعلیم و بکارگیری این مدل‌ها کار بسیار پیچیده‌ای است. علاوه بر این،‌ تقریبا هر روز مدل‌های جدیدی عرضه می‌شوند که هرکدام شیوه پیاده‌سازی خود را دارند و امتحان کردن تمام آن‌ها کار آسانی نیست.',A,v,q="کتابخانه ترنسفومرهای هاگینگ‌فِیس برای حل این مشکل تولید شده است. هدف آن، ارائه یک API واحد برای بارگذاری، تعلیم و ذخیره‌سازی مدل‌های ترنسفورمر است. ویژگی های اصلی این کتابخانه از این قرار است:",E,x,B="<li><strong>سهولت استفاده</strong>: دانلود، بارگذاری و استفاده از مدل‌های NLP روز دنیا برای تولید نتیجه عملیاتی، فقط با دو خط کد امکان‌پذیر است.</li> <li><strong>انعطاف</strong>: تمام مدل‌ها در واقع کلاس‌های معمولی پایتورچ مانند nn.Module یا کلاس‌های تنسورفلو مانند tf.keras.Model هستند و مانند هر مدل دیگری در فریمورک خود در دسترسی قرار دارند.</li> <li><strong>سادگی</strong>: در طراحی کتابخانه انتزاعات بسیار کمی به کار رفته‌ است. اصل خودکفا بودن مدل‌ها بسیار مهم است. اجرای رو به جلوی مدل تماماً در یک فایل تعریف می‌شود و به این شیوه، کد به سادگی قابل فهم و تغییر است.</li>",y,P,D="این ویژگی آخر باعث می‌شود ترنسفورمرهای هاگینگ‌فِیس بسیار متفاوت با نمونه‌های مشابه در کتابخانه‌های یادگیری ماشین دیگر باشند. مدل‌ها روی ماژول‌های متفاوتی که در فایل‌های مختلف قرار دارند بنا نشده‌اند؛ بلکه هر مدل محتوی لایه‌های خود است. علاوه بر ساده‌تر و قابل فهم‌تر کردن مدل‌ها، این ویژگی به شما اجازه می‌دهد به راحتی مدل را دستکاری کنید بدون این که بر مدل‌های دیگر تاثیر بگذارید.",z,C,F='این فصل با مثالی کامل شروع می‌شود که در آن مدل و توکِنایزر را با هم استفاده می‌کنیم تا تابع <span dir="ltr">pipeline()</span> که در فصل اول معرفی کردیم را شبیه‌سازی کنیم. سپس API مربوط به مدل‌ها را بررسی می‌کنیم و وارد پیچیدگی‌های کلاس‌های مدل و کلاس‌های تنظیمات می‌شویم تا نشان دهیم چگونه می‌توان مدل‌ها را بارگذاری نمود و این مدل‌ها چطور ورودی‌های عددی را پردازش می‌کنند تا در خروجی پیش‌بینی‌ها را تولید کنند.',I,M,R='سپس نگاهی به API مربوط به توکِنایزر خواهیم داشت که بخش دیگر پیاده‌سازی تابع <span dir="ltr">pipeline()</span> است. توکِنایزرها مرحله اول و مرحله آخر پردازش را انجام می‌دهند که در طی آن‌ها داده‌های نوشتاری را به ورودی‌های عددی برای شبکه عصبی تبدیل نموده و هنگام نیاز باز داده‌های عددی را به نوشتار تبدیل می‌کنند. در انتها، به شما نشان خواهیم داد چگونه چندین جمله را همزمان در یک بتچ از پیش آماده شده از مدل عبور دهید و سپس فصل را با نگاهی نزدیک‌تر به تابع بالادستی <span dir="ltr">tokenizer()</span> به اتمام خواهیم برد.',k,f,H,L,w;return d=new rt({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),f=new st({props:{$$slots:{default:[lt]},$$scope:{ctx:T}}}),{c(){a=i("meta"),u=c(),o=i("p"),$=c(),e=i("div"),b=et(`# مقدمه
`),V(d.$$.fragment),j=c(),g=i("p"),g.innerHTML=U,A=c(),v=i("p"),v.textContent=q,E=c(),x=i("ul"),x.innerHTML=B,y=c(),P=i("p"),P.textContent=D,z=c(),C=i("p"),C.innerHTML=F,I=c(),M=i("p"),M.innerHTML=R,k=c(),V(f.$$.fragment),H=c(),L=i("p"),this.h()},l(t){const r=nt("svelte-u9bgzb",document.head);a=p(r,"META",{name:!0,content:!0}),r.forEach(l),u=m(t),o=p(t,"P",{}),S(o).forEach(l),$=m(t),e=p(t,"DIV",{dir:!0});var n=S(e);b=at(n,`# مقدمه
`),G(d.$$.fragment,n),j=m(n),g=p(n,"P",{"data-svelte-h":!0}),h(g)!=="svelte-10pm5vj"&&(g.innerHTML=U),A=m(n),v=p(n,"P",{"data-svelte-h":!0}),h(v)!=="svelte-dnt0rt"&&(v.textContent=q),E=m(n),x=p(n,"UL",{"data-svelte-h":!0}),h(x)!=="svelte-gmcnhj"&&(x.innerHTML=B),y=m(n),P=p(n,"P",{"data-svelte-h":!0}),h(P)!=="svelte-7is77c"&&(P.textContent=D),z=m(n),C=p(n,"P",{"data-svelte-h":!0}),h(C)!=="svelte-esdr4a"&&(C.innerHTML=F),I=m(n),M=p(n,"P",{"data-svelte-h":!0}),h(M)!=="svelte-muepyz"&&(M.innerHTML=R),k=m(n),G(f.$$.fragment,n),n.forEach(l),H=m(t),L=p(t,"P",{}),S(L).forEach(l),this.h()},h(){N(a,"name","hf:doc:metadata"),N(a,"content",it),N(e,"dir","rtl")},m(t,r){s(document.head,a),_(t,u,r),_(t,o,r),_(t,$,r),_(t,e,r),s(e,b),J(d,e,null),s(e,j),s(e,g),s(e,A),s(e,v),s(e,E),s(e,x),s(e,y),s(e,P),s(e,z),s(e,C),s(e,I),s(e,M),s(e,k),J(f,e,null),_(t,H,r),_(t,L,r),w=!0},p(t,[r]){const n={};r&2&&(n.$$scope={dirty:r,ctx:t}),f.$set(n)},i(t){w||(K(d.$$.fragment,t),K(f.$$.fragment,t),w=!0)},o(t){O(d.$$.fragment,t),O(f.$$.fragment,t),w=!1},d(t){t&&(l(u),l(o),l($),l(e),l(H),l(L)),l(a),Q(d),Q(f)}}}const it="undefined";function pt(T){return X(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class dt extends Z{constructor(a){super(),tt(this,a,pt,ot,W,{})}}export{dt as component};
