import{s as Ue,o as Ae}from"../chunks/scheduler.37c15a92.js";import{S as Be,i as Ie,g as Me,s as p,r as f,A as We,h as be,f as o,c as m,j as Je,u as c,k as Ze,y as Ce,a as $,v as u,t as s,b as qe,d as a,w as g,p as je}from"../chunks/index.2bf4358c.js";import{C as he}from"../chunks/CodeBlock.4e987730.js";import{C as He}from"../chunks/CourseFloatingBanner.9ff4c771.js";import{Q as h}from"../chunks/Question.668688bc.js";import{F as Se}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as b,E as Ve}from"../chunks/getInferenceSnippets.7bb25a7f.js";function Fe(_){let i,d,l,k;return i=new b({props:{title:"5．什么是 TFAutoModel？",local:"5什么是-tfautomodel",headingTag:"h3"}}),l=new h({props:{choices:[{text:"根据你的数据自动进行训练的模型",explain:"错误。你可能把 TFAutoModel 与 Hugging Face 的<a href='https://huggingface.co/autotrain'>AutoTrain</a> 产品相混淆了？"},{text:"一个根据 checkpoint(检查点)返回模型体系结构的对象",explain:"确切地说：<code>TFAutoModel</code>只需要知道初始化的 checkpoint(检查点)名称就可以返回正确的体系结构。",correct:!0},{text:"一种可以自动检测输入语言来加载正确权重的模型",explain:"不正确；虽然有些 checkpoint(检查点)和模型能够处理多种语言，但是没有内置的工具可以根据语言自动选择 checkpoint(检查点)。你应该前往 <a href='https://huggingface.co/models'>Model Hub</a> 寻找完成所需任务的最佳 checkpoint(检查点)！"}]}}),{c(){f(i.$$.fragment),d=p(),f(l.$$.fragment)},l(t){c(i.$$.fragment,t),d=m(t),c(l.$$.fragment,t)},m(t,x){u(i,t,x),$(t,d,x),u(l,t,x),k=!0},i(t){k||(a(i.$$.fragment,t),a(l.$$.fragment,t),k=!0)},o(t){s(i.$$.fragment,t),s(l.$$.fragment,t),k=!1},d(t){t&&o(d),g(i,t),g(l,t)}}}function Ee(_){let i,d,l,k;return i=new b({props:{title:"5．什么是 AutoModel？",local:"5什么是-automodel",headingTag:"h3"}}),l=new h({props:{choices:[{text:"根据你的数据自动进行训练的模型",explain:"错误。你可能把 AutoModel 与 Hugging Face 的<a href='https://huggingface.co/autotrain'>AutoTrain</a> 产品相混淆了？"},{text:"一个根据 checkpoint(检查点)返回模型体系结构的对象",explain:"确切地说：<code>AutoModel</code>只需要知道初始化的 checkpoint(检查点)名称就可以返回正确的体系结构。",correct:!0},{text:"一种可以自动检测输入语言来加载正确权重的模型",explain:"不正确；虽然有些 checkpoint(检查点)和模型能够处理多种语言，但是没有内置的工具可以根据语言自动选择 checkpoint(检查点)。你应该前往 <a href='https://huggingface.co/models'>Model Hub</a> 寻找完成所需任务的最佳 checkpoint(检查点)！"}]}}),{c(){f(i.$$.fragment),d=p(),f(l.$$.fragment)},l(t){c(i.$$.fragment,t),d=m(t),c(l.$$.fragment,t)},m(t,x){u(i,t,x),$(t,d,x),u(l,t,x),k=!0},i(t){k||(a(i.$$.fragment,t),a(l.$$.fragment,t),k=!0)},o(t){s(i.$$.fragment,t),s(l.$$.fragment,t),k=!1},d(t){t&&o(d),g(i,t),g(l,t)}}}function Qe(_){let i,d,l,k,t,x;return i=new b({props:{title:"10．下面的代码有什么错误吗？",local:"10下面的代码有什么错误吗",headingTag:"h3"}}),l=new he({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 h({props:{choices:[{text:"不，看起来是对的。",explain:"不幸的是，将一个模型与一个不同 checkpoint 训练的 tokenizer 耦合在并不是一个好主意。模型没有在这个这个 tokenizer 上训练来理解 tokenizer 的输出，因此模型的输出(如果它可以运行的话)会是错乱的。"},{text:"Tokenizer 和模型应该来自相同的 checkpoint。",explain:"对！",correct:!0},{text:"由于每个输入都是一个 Batch，因此可以使用 tokenizer 对其进行平移和截断来改善这段代码。",explain:"的确，每个模型都需要 Batch 类型的输入。然而，截断或填充这个序列并不一定有意义，这里只有一句话，而这些技术是用来批处理一个句子列表的。"}]}}),{c(){f(i.$$.fragment),d=p(),f(l.$$.fragment),k=p(),f(t.$$.fragment)},l(n){c(i.$$.fragment,n),d=m(n),c(l.$$.fragment,n),k=m(n),c(t.$$.fragment,n)},m(n,M){u(i,n,M),$(n,d,M),u(l,n,M),$(n,k,M),u(t,n,M),x=!0},i(n){x||(a(i.$$.fragment,n),a(l.$$.fragment,n),a(t.$$.fragment,n),x=!0)},o(n){s(i.$$.fragment,n),s(l.$$.fragment,n),s(t.$$.fragment,n),x=!1},d(n){n&&(o(d),o(k)),g(i,n),g(l,n),g(t,n)}}}function Xe(_){let i,d,l,k,t,x;return i=new b({props:{title:"10．下面的代码有什么错误吗？",local:"10下面的代码有什么错误吗",headingTag:"h3"}}),l=new he({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 h({props:{choices:[{text:"不，看起来是对的。",explain:"将一个模型与一个在不同 checkpoint 训练的 tokenizer 耦合在一起并不是一个好主意。模型没有在这个这个 tokenizer 上训练来理解 tokenizer 的输出，因此模型的输出(如果它可以运行的话)会是错乱的。"},{text:"Tokenizer 和模型应该来自相同的 checkpoint。",explain:"对！",correct:!0},{text:"由于模型输入需要是一个 Batch，因此可以使用 tokenizer 对其进行截断或填充来改进这段代码。",explain:"的确，模型输入需要是一个 Batch。然而，截断或填充这个序列并不一定有意义，这里只有一句话，而截断或填充这些技术是用来批处理一个句子列表使其长度一致的。"}]}}),{c(){f(i.$$.fragment),d=p(),f(l.$$.fragment),k=p(),f(t.$$.fragment)},l(n){c(i.$$.fragment,n),d=m(n),c(l.$$.fragment,n),k=m(n),c(t.$$.fragment,n)},m(n,M){u(i,n,M),$(n,d,M),u(l,n,M),$(n,k,M),u(t,n,M),x=!0},i(n){x||(a(i.$$.fragment,n),a(l.$$.fragment,n),a(t.$$.fragment,n),x=!0)},o(n){s(i.$$.fragment,n),s(l.$$.fragment,n),s(t.$$.fragment,n),x=!1},d(n){n&&(o(d),o(k)),g(i,n),g(l,n),g(t,n)}}}function ve(_){let i,d,l,k,t,x,n,M,J,K,Z,D,q,O,j,ee,U,te,A,ne,B,re,I,ie,W,le,y,w,P,C,oe,H,se,S,ae,V,$e,F,pe,E,me,Q,fe,X,ce,v,ue,T,z,L,R,ge,Y,de;t=new Se({props:{fw:_[0]}}),n=new b({props:{title:"章末小测试",local:"章末小测验",headingTag:"h1"}}),J=new He({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),Z=new b({props:{title:"1. 自然语言处理流程的顺序是什么？",local:"1-自然语言处理流程的顺序是什么",headingTag:"h3"}}),q=new h({props:{choices:[{text:"首先是模型它处理文本并返回原始预测。然后 tokenizer 会对这些预测进行解释，并在将它们转换回文本",explain:"模型不能直接理解文本！必须首先使用 tokenizer 将文本转换为 id，之后才可以输入给模型。"},{text:"首先 Tokenizer 处理文本并返回 id。模型根据这些 id 并输出预测，可以是一些文本。",explain:"该模型的预测结果是 id 而不是文本。必须使用 tokenizer 才可以将预测转换回文本！"},{text:"Tokenizer 处理文本并返回 id。模型处理这些 id 并输出一个预测。然后可以再次使用 tokenizer 将这些预测转换回某些文本。",explain:"正确！Tokenizer 可以用于 id 与文本的相互转换。",correct:!0}]}}),j=new b({props:{title:"2. Transformer 模型的输出有的张量多少个维度，每个维度分别是什么？",local:"2-transformer-模型的输出有的张量多少个维度每个维度分别是什么",headingTag:"h3"}}),U=new h({props:{choices:[{text:"2 个维度，分别是：序列长度(Sequence Length)和批次大小(Batch Size)",explain:"错！该模型的张量输出还具有第三个维度：隐藏层大小(Hidden Size)。"},{text:"2 个维度，分别是：序列长度(Sequence Length)和隐藏层大小(Hidden Size)",explain:"错！所有 Transformer 模型都批量进行计算，即使是单个序列；那么也会有批次大小(Batch Size)的维度并且值为 1！"},{text:"3 个维度，分别是：序列长度(Sequence Length)、批次大小(Batch Size)和隐藏层大小(Hidden Size)",explain:"正确！",correct:!0}]}}),A=new b({props:{title:"3．下列哪一个是子词分词的例子（从分词的颗粒度来划分）？",local:"3下列哪一个是子词分词的例子从分词的颗粒度来划分",headingTag:"h3"}}),B=new h({props:{choices:[{text:"WordPiece",explain:"是的，这是一个子词分词的例子！",correct:!0},{text:"基于单个字符的分词",explain:"基于单个字符的分词和子词分词的颗粒度是不同的。"},{text:"基于空格和标点符号的分割",explain:"这是一种基于单词的分词而不是子词分词！"},{text:"BPE(Byte Pair Encoding)",explain:"是的，这是一个子词分词的的例子！",correct:!0},{text:"Unigram",explain:"是的，这是一个子词分词的例子！",correct:!0},{text:"以上都不是",explain:"不对！"}]}}),I=new b({props:{title:"4．什么是模型头（Haed 层）？",local:"4什么是模型头haed-层",headingTag:"h3"}}),W=new h({props:{choices:[{text:"原始 Transformer 网络的一种组件，直接将张量(Tensors)输入到到正确的层",explain:"不对！没有这样的组件。"},{text:"也称为自注意力(self-attention)机制，它会根据序列的其他 tokens 调整一个 token 的表示",explain:"不对！自注意力层确实包含“注意力头”，但是和模型头并不是同一个概念。"},{text:"一个附加组件，通常由一个或几个层组成，用于将 Transformer 的预测转换为特定于任务的输出",explain:"没错。它的全名是 Adaptation Heads，也被简单地称为模型的头部，在不同的任务上有不同的形式：语言模型头，问题回答头，序列分类头．",correct:!0}]}});const _e=[Ee,Fe],G=[];function ye(e,r){return e[0]==="pt"?0:1}y=ye(_),w=G[y]=_e[y](_),C=new b({props:{title:"6．当将不同长度的句子序列在一起批处理时，需要进行哪些处理？",local:"6当将不同长度的句子序列在一起批处理时需要进行哪些处理",headingTag:"h3"}}),H=new h({props:{choices:[{text:"截短",explain:"是的，截断是一个正确的方式，截断可以将他们转化为一个固定长度的矩形序列。这是唯一的正确答案吗？",correct:!0},{text:"直接将 Tensors 返回",explain:"在批处理序列时不可以直接返回长度不一致的 Tensors。(必须是固定长度)"},{text:"填充",explain:"是的，填充是一个正确的方式，可以将他们转化为一个固定长度的矩形序列。这是唯一的正确答案吗？",correct:!0},{text:"注意力掩码(Attention masking)",explain:"当然！当处理不同长度的序列时，注意力掩码是最重要的。然而，仅仅使用注意力遮蔽是不够的。",correct:!0}]}}),S=new b({props:{title:"7．使用 SoftMax 激活函数对序列分类(Sequence Classification)模型的 logits 输出进行处理有什么意义？",local:"7使用-softmax-激活函数对序列分类sequence-classification模型的-logits-输出进行处理有什么意义",headingTag:"h3"}}),V=new h({props:{choices:[{text:"它软化了 logits 输出，使结果更可靠。",explain:"不，SoftMax 激活函数不会影响结果的可靠性。"},{text:"它限定了上下界，使模型的输出结果可以被解释。",explain:"正确！结果值被压缩到了 0 和 1 之间。不过，这并不是我们使用 SoftMax 激活函数的唯一原因。",correct:!0},{text:"输出的和是 1，从而产生一个可能的概率解释。",explain:"没错，但这并不是我们使用 SoftMax 激活函数的唯一原因。",correct:!0}]}}),F=new b({props:{title:"8.Tokenizer API 的核心方法是哪一个？",local:"8tokenizer-api-的核心方法是哪一个",headingTag:"h3"}}),E=new h({props:{choices:[{text:"<code>encode</code> 因为它可以将文本编码为 ID，将预测的 ID 解码为文本",explain:"错！虽然 <code>encode</code> 方法确实是 Tokenizer 中的方法之一，但是它并不是核心的方法，此外将预测 ID 解码为文本的是 decode。"},{text:"直接调用 Tokenizer 对象。",explain:"完全正确！ tokenizer (Tokenizer) 的 <code>__call__</code>方法是一个非常强大的方法，可以处理几乎任何事情。它同时也可以从模型中获取预测。",correct:!0},{text:"<code>pad</code>(填充)",explain:"错！<code>pad</code>(填充)非常有用，但它只是 Tokenizer API 的一部分。"},{text:"<code>tokenize</code>",explain:"可以说，<code>tokenize</code>方法是最有用的方法之一，但它不是 Tokenizer API 的核心方法。"}]}}),Q=new b({props:{title:"9．这个代码示例中的 result 变量包含什么？",local:"9这个代码示例中的-result-变量包含什么",headingTag:"h3"}}),X=new he({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}}),v=new h({props:{choices:[{text:"字符串列表，每个字符串都是一个 token",explain:"正确！把 tokens 转换成 id 后，就可以传输给模型了！",correct:!0},{text:"一个 ID 的列表",explain:"不正确；这是 <code>__call__</code> 或 <code>convert_tokens_to_ids</code>方法的作用！"},{text:"包含所有分词后的的字符串",explain:"这将是次优的答案，因为 tokenize 方法会将字符串拆分为多个 tokens 的列表。"}]}});const we=[Xe,Qe],N=[];function Te(e,r){return e[0]==="pt"?0:1}return T=Te(_),z=N[T]=we[T](_),R=new Ve({props:{source:"https://github.com/huggingface/course/blob/main/chapters/zh-CN/chapter2/8.mdx"}}),{c(){i=Me("meta"),d=p(),l=Me("p"),k=p(),f(t.$$.fragment),x=p(),f(n.$$.fragment),M=p(),f(J.$$.fragment),K=p(),f(Z.$$.fragment),D=p(),f(q.$$.fragment),O=p(),f(j.$$.fragment),ee=p(),f(U.$$.fragment),te=p(),f(A.$$.fragment),ne=p(),f(B.$$.fragment),re=p(),f(I.$$.fragment),ie=p(),f(W.$$.fragment),le=p(),w.c(),P=p(),f(C.$$.fragment),oe=p(),f(H.$$.fragment),se=p(),f(S.$$.fragment),ae=p(),f(V.$$.fragment),$e=p(),f(F.$$.fragment),pe=p(),f(E.$$.fragment),me=p(),f(Q.$$.fragment),fe=p(),f(X.$$.fragment),ce=p(),f(v.$$.fragment),ue=p(),z.c(),L=p(),f(R.$$.fragment),ge=p(),Y=Me("p"),this.h()},l(e){const r=We("svelte-u9bgzb",document.head);i=be(r,"META",{name:!0,content:!0}),r.forEach(o),d=m(e),l=be(e,"P",{}),Je(l).forEach(o),k=m(e),c(t.$$.fragment,e),x=m(e),c(n.$$.fragment,e),M=m(e),c(J.$$.fragment,e),K=m(e),c(Z.$$.fragment,e),D=m(e),c(q.$$.fragment,e),O=m(e),c(j.$$.fragment,e),ee=m(e),c(U.$$.fragment,e),te=m(e),c(A.$$.fragment,e),ne=m(e),c(B.$$.fragment,e),re=m(e),c(I.$$.fragment,e),ie=m(e),c(W.$$.fragment,e),le=m(e),w.l(e),P=m(e),c(C.$$.fragment,e),oe=m(e),c(H.$$.fragment,e),se=m(e),c(S.$$.fragment,e),ae=m(e),c(V.$$.fragment,e),$e=m(e),c(F.$$.fragment,e),pe=m(e),c(E.$$.fragment,e),me=m(e),c(Q.$$.fragment,e),fe=m(e),c(X.$$.fragment,e),ce=m(e),c(v.$$.fragment,e),ue=m(e),z.l(e),L=m(e),c(R.$$.fragment,e),ge=m(e),Y=be(e,"P",{}),Je(Y).forEach(o),this.h()},h(){Ze(i,"name","hf:doc:metadata"),Ze(i,"content",Re)},m(e,r){Ce(document.head,i),$(e,d,r),$(e,l,r),$(e,k,r),u(t,e,r),$(e,x,r),u(n,e,r),$(e,M,r),u(J,e,r),$(e,K,r),u(Z,e,r),$(e,D,r),u(q,e,r),$(e,O,r),u(j,e,r),$(e,ee,r),u(U,e,r),$(e,te,r),u(A,e,r),$(e,ne,r),u(B,e,r),$(e,re,r),u(I,e,r),$(e,ie,r),u(W,e,r),$(e,le,r),G[y].m(e,r),$(e,P,r),u(C,e,r),$(e,oe,r),u(H,e,r),$(e,se,r),u(S,e,r),$(e,ae,r),u(V,e,r),$(e,$e,r),u(F,e,r),$(e,pe,r),u(E,e,r),$(e,me,r),u(Q,e,r),$(e,fe,r),u(X,e,r),$(e,ce,r),u(v,e,r),$(e,ue,r),N[T].m(e,r),$(e,L,r),u(R,e,r),$(e,ge,r),$(e,Y,r),de=!0},p(e,[r]){const ze={};r&1&&(ze.fw=e[0]),t.$set(ze);let ke=y;y=ye(e),y!==ke&&(je(),s(G[ke],1,1,()=>{G[ke]=null}),qe(),w=G[y],w||(w=G[y]=_e[y](e),w.c()),a(w,1),w.m(P.parentNode,P));let xe=T;T=Te(e),T!==xe&&(je(),s(N[xe],1,1,()=>{N[xe]=null}),qe(),z=N[T],z||(z=N[T]=we[T](e),z.c()),a(z,1),z.m(L.parentNode,L))},i(e){de||(a(t.$$.fragment,e),a(n.$$.fragment,e),a(J.$$.fragment,e),a(Z.$$.fragment,e),a(q.$$.fragment,e),a(j.$$.fragment,e),a(U.$$.fragment,e),a(A.$$.fragment,e),a(B.$$.fragment,e),a(I.$$.fragment,e),a(W.$$.fragment,e),a(w),a(C.$$.fragment,e),a(H.$$.fragment,e),a(S.$$.fragment,e),a(V.$$.fragment,e),a(F.$$.fragment,e),a(E.$$.fragment,e),a(Q.$$.fragment,e),a(X.$$.fragment,e),a(v.$$.fragment,e),a(z),a(R.$$.fragment,e),de=!0)},o(e){s(t.$$.fragment,e),s(n.$$.fragment,e),s(J.$$.fragment,e),s(Z.$$.fragment,e),s(q.$$.fragment,e),s(j.$$.fragment,e),s(U.$$.fragment,e),s(A.$$.fragment,e),s(B.$$.fragment,e),s(I.$$.fragment,e),s(W.$$.fragment,e),s(w),s(C.$$.fragment,e),s(H.$$.fragment,e),s(S.$$.fragment,e),s(V.$$.fragment,e),s(F.$$.fragment,e),s(E.$$.fragment,e),s(Q.$$.fragment,e),s(X.$$.fragment,e),s(v.$$.fragment,e),s(z),s(R.$$.fragment,e),de=!1},d(e){e&&(o(d),o(l),o(k),o(x),o(M),o(K),o(D),o(O),o(ee),o(te),o(ne),o(re),o(ie),o(le),o(P),o(oe),o(se),o(ae),o($e),o(pe),o(me),o(fe),o(ce),o(ue),o(L),o(ge),o(Y)),o(i),g(t,e),g(n,e),g(J,e),g(Z,e),g(q,e),g(j,e),g(U,e),g(A,e),g(B,e),g(I,e),g(W,e),G[y].d(e),g(C,e),g(H,e),g(S,e),g(V,e),g(F,e),g(E,e),g(Q,e),g(X,e),g(v,e),N[T].d(e),g(R,e)}}}const Re='{"title":"章末小测试","local":"章末小测验","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．什么是模型头（Haed 层）？","local":"4什么是模型头haed-层","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．使用 SoftMax 激活函数对序列分类(Sequence Classification)模型的 logits 输出进行处理有什么意义？","local":"7使用-softmax-激活函数对序列分类sequence-classification模型的-logits-输出进行处理有什么意义","sections":[],"depth":3},{"title":"8.Tokenizer API 的核心方法是哪一个？","local":"8tokenizer-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 Ge(_,i,d){let l="pt";return Ae(()=>{const k=new URLSearchParams(window.location.search);d(0,l=k.get("fw")||"pt")}),[l]}class et extends Be{constructor(i){super(),Ie(this,i,Ge,ve,Ue,{})}}export{et as component};
