import{s as te,o as ne,n as se}from"../chunks/scheduler.cc52f4b9.js";import{S as le,i as ie,e as m,s as r,c as b,h as ae,a as p,d as n,b as o,f as Y,g as H,j as P,k as R,l as re,m as s,n as w,t as z,o as y,p as k,q as Z,r as ee}from"../chunks/index.9480bb2b.js";import{T as oe}from"../chunks/Tip.f7b80743.js";import{C as me,H as pe,E as fe}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.009dc98d.js";import{C as ue}from"../chunks/CourseFloatingBanner.6488bde3.js";function ce(E){let i,a,u="创建一个账户",f;return{c(){i=Z("⚠️ 为了充分利用 Model Hub 和🤗 Transformers 提供的所有功能，我们建议你"),a=m("a"),a.textContent=u,f=Z("。"),this.h()},l(l){i=ee(l,"⚠️ 为了充分利用 Model Hub 和🤗 Transformers 提供的所有功能，我们建议你"),a=p(l,"A",{href:!0,"data-svelte-h":!0}),P(a)!=="svelte-14dhiow"&&(a.textContent=u),f=ee(l,"。"),this.h()},h(){R(a,"href","https://huggingface.co/join")},m(l,c){s(l,i,c),s(l,a,c),s(l,f,c)},p:se,d(l){l&&(n(i),n(a),n(f))}}}function $e(E){let i,a,u,f,l,c,d,A,h,S,_,D='正如你在 <a href="/course/chapter1">第一章</a> ，中看到的那样，Transformers 模型通常规模庞大。包含数以百万计到数千万计数十亿的参数，训练和部署这些模型是一项复杂的任务。再者，新模型的推出几乎日新月异，而每种模型都有其独特的实现方式，尝试全部模型绝非易事。',j,x,J="🤗 Transformers 库应运而生，就是为了解决这个问题。它的目标是提供一个统一的 API 接口，通过它可以加载、训练和保存任何 Transformer 模型。该库的主要特点有：",q,T,K="<li><strong>易于使用</strong>：仅需两行代码，就能下载、加载并使用先进的 NLP 模型进行推理。</li> <li><strong>灵活</strong>：在本质上，所有的模型都是简单的 PyTorch nn.Module 或 TensorFlow tf.keras.Model 类，并可像在各自的机器学习（ML）框架中处理其他模型一样处理它们。</li> <li><strong>简单</strong>：该库几乎没有进行任何抽象化。🤗 Transformers 库一个核心概念是“全在一个文件中”：模型的前向传播完全在一个文件中定义，这使得代码本身易于理解和修改。</li>",I,g,Q="最后一个特性使🤗 Transformers 与其他 ML 库截然不同。模型并非建立在跨越多个代码文件共享的模块上；相反，每一个模型都有自己的层次结构。除了使模型更加容易接受和更容易理解，这还允许你轻松地在一个模型上实验，而且不影响其他模型。",N,C,V='本章将从一个端到端（从输入端到输出端）的示例开始，在该示例中，我们一起使用模型和 tokenizer 来复刻 <a href="/course/chapter1">第一章</a> 中看到的 <code>pipeline()</code> 函数。接下来，我们将讨论 <code>Model</code> API：我们将深入研究 <code>Model</code> 类和 <code>Config</code> 类，并向你展示如何加载模型，以及它如何将输入处理为输出。',F,M,W="然后我们来看看 <code>tokenizer</code> API，它是 <code>pipeline()</code> 函数的另一个重要组成部分。在 <code>pipeline()</code> 中 <code>Tokenizer</code> 负责第一步和最后一步的处理，将文本转换到神经网络的输入，以及在需要时将其转换回文本。最后，我们将向你展示如何处理将多个句子整理为一个 batch 发送给模型，然后我们将更深入地研究 <code>tokenizer()</code> 函数。",U,$,B,v,G,L,O;return l=new me({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),d=new pe({props:{title:"本章简介",local:"本章简介",headingTag:"h1"}}),h=new ue({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),$=new oe({props:{$$slots:{default:[ce]},$$scope:{ctx:E}}}),v=new fe({props:{source:"https://github.com/huggingface/course/blob/main/chapters/zh-CN/chapter2/1.mdx"}}),{c(){i=m("meta"),a=r(),u=m("p"),f=r(),b(l.$$.fragment),c=r(),b(d.$$.fragment),A=r(),b(h.$$.fragment),S=r(),_=m("p"),_.innerHTML=D,j=r(),x=m("p"),x.textContent=J,q=r(),T=m("ul"),T.innerHTML=K,I=r(),g=m("p"),g.textContent=Q,N=r(),C=m("p"),C.innerHTML=V,F=r(),M=m("p"),M.innerHTML=W,U=r(),b($.$$.fragment),B=r(),b(v.$$.fragment),G=r(),L=m("p"),this.h()},l(e){const t=ae("svelte-u9bgzb",document.head);i=p(t,"META",{name:!0,content:!0}),t.forEach(n),a=o(e),u=p(e,"P",{}),Y(u).forEach(n),f=o(e),H(l.$$.fragment,e),c=o(e),H(d.$$.fragment,e),A=o(e),H(h.$$.fragment,e),S=o(e),_=p(e,"P",{"data-svelte-h":!0}),P(_)!=="svelte-kzps0h"&&(_.innerHTML=D),j=o(e),x=p(e,"P",{"data-svelte-h":!0}),P(x)!=="svelte-1n7vpa"&&(x.textContent=J),q=o(e),T=p(e,"UL",{"data-svelte-h":!0}),P(T)!=="svelte-gz80c6"&&(T.innerHTML=K),I=o(e),g=p(e,"P",{"data-svelte-h":!0}),P(g)!=="svelte-qyb0i3"&&(g.textContent=Q),N=o(e),C=p(e,"P",{"data-svelte-h":!0}),P(C)!=="svelte-6emoa7"&&(C.innerHTML=V),F=o(e),M=p(e,"P",{"data-svelte-h":!0}),P(M)!=="svelte-1croyj"&&(M.innerHTML=W),U=o(e),H($.$$.fragment,e),B=o(e),H(v.$$.fragment,e),G=o(e),L=p(e,"P",{}),Y(L).forEach(n),this.h()},h(){R(i,"name","hf:doc:metadata"),R(i,"content",de)},m(e,t){re(document.head,i),s(e,a,t),s(e,u,t),s(e,f,t),w(l,e,t),s(e,c,t),w(d,e,t),s(e,A,t),w(h,e,t),s(e,S,t),s(e,_,t),s(e,j,t),s(e,x,t),s(e,q,t),s(e,T,t),s(e,I,t),s(e,g,t),s(e,N,t),s(e,C,t),s(e,F,t),s(e,M,t),s(e,U,t),w($,e,t),s(e,B,t),w(v,e,t),s(e,G,t),s(e,L,t),O=!0},p(e,[t]){const X={};t&2&&(X.$$scope={dirty:t,ctx:e}),$.$set(X)},i(e){O||(z(l.$$.fragment,e),z(d.$$.fragment,e),z(h.$$.fragment,e),z($.$$.fragment,e),z(v.$$.fragment,e),O=!0)},o(e){y(l.$$.fragment,e),y(d.$$.fragment,e),y(h.$$.fragment,e),y($.$$.fragment,e),y(v.$$.fragment,e),O=!1},d(e){e&&(n(a),n(u),n(f),n(c),n(A),n(S),n(_),n(j),n(x),n(q),n(T),n(I),n(g),n(N),n(C),n(F),n(M),n(U),n(B),n(G),n(L)),n(i),k(l,e),k(d,e),k(h,e),k($,e),k(v,e)}}}const de='{"title":"本章简介","local":"本章简介","sections":[],"depth":1}';function he(E){return ne(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Me extends le{constructor(i){super(),ie(this,i,he,$e,te,{})}}export{Me as component};
