import{s as je,o as Ue}from"../chunks/scheduler.37c15a92.js";import{S as Se,i as Ae,g as Te,s as p,r as f,A as Be,h as be,f as l,c as m,j as Ce,u,k as Je,y as He,a as $,v as c,t as a,b as Ze,d as s,w as g,p as qe}from"../chunks/index.2bf4358c.js";import{C as Me}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as We}from"../chunks/CourseFloatingBanner.06521e8b.js";import{Q as M}from"../chunks/Question.668688bc.js";import{F as Ie}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as b,E as Ve}from"../chunks/EditOnGithub.8916dc7c.js";function Fe(w){let i,d,o,k;return i=new b({props:{title:"5.什么是 TFAutoModel？",local:"5什么是-tfautomodel",headingTag:"h3"}}),o=new M({props:{choices:[{text:"根据您的数据自动进行训练的模型",explain:"错误。您可能把TFAutoModel与我们的<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(o.$$.fragment)},l(t){u(i.$$.fragment,t),d=m(t),u(o.$$.fragment,t)},m(t,x){c(i,t,x),$(t,d,x),c(o,t,x),k=!0},i(t){k||(s(i.$$.fragment,t),s(o.$$.fragment,t),k=!0)},o(t){a(i.$$.fragment,t),a(o.$$.fragment,t),k=!1},d(t){t&&l(d),g(i,t),g(o,t)}}}function Ee(w){let i,d,o,k;return i=new b({props:{title:"5.什么是AutoModel？",local:"5什么是automodel",headingTag:"h3"}}),o=new M({props:{choices:[{text:"根据您的数据自动进行训练的模型",explain:"错误。您可能把AutoModel与我们的<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(o.$$.fragment)},l(t){u(i.$$.fragment,t),d=m(t),u(o.$$.fragment,t)},m(t,x){c(i,t,x),$(t,d,x),c(o,t,x),k=!0},i(t){k||(s(i.$$.fragment,t),s(o.$$.fragment,t),k=!0)},o(t){a(i.$$.fragment,t),a(o.$$.fragment,t),k=!1},d(t){t&&l(d),g(i,t),g(o,t)}}}function Qe(w){let i,d,o,k,t,x;return i=new b({props:{title:"10.下面的代码有什么错误吗？",local:"10下面的代码有什么错误吗",headingTag:"h3"}}),o=new Me({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 M({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(o.$$.fragment),k=p(),f(t.$$.fragment)},l(n){u(i.$$.fragment,n),d=m(n),u(o.$$.fragment,n),k=m(n),u(t.$$.fragment,n)},m(n,T){c(i,n,T),$(n,d,T),c(o,n,T),$(n,k,T),c(t,n,T),x=!0},i(n){x||(s(i.$$.fragment,n),s(o.$$.fragment,n),s(t.$$.fragment,n),x=!0)},o(n){a(i.$$.fragment,n),a(o.$$.fragment,n),a(t.$$.fragment,n),x=!1},d(n){n&&(l(d),l(k)),g(i,n),g(o,n),g(t,n)}}}function Xe(w){let i,d,o,k,t,x;return i=new b({props:{title:"10.下面的代码有什么错误吗？",local:"10下面的代码有什么错误吗",headingTag:"h3"}}),o=new Me({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 M({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(o.$$.fragment),k=p(),f(t.$$.fragment)},l(n){u(i.$$.fragment,n),d=m(n),u(o.$$.fragment,n),k=m(n),u(t.$$.fragment,n)},m(n,T){c(i,n,T),$(n,d,T),c(o,n,T),$(n,k,T),c(t,n,T),x=!0},i(n){x||(s(i.$$.fragment,n),s(o.$$.fragment,n),s(t.$$.fragment,n),x=!0)},o(n){a(i.$$.fragment,n),a(o.$$.fragment,n),a(t.$$.fragment,n),x=!1},d(n){n&&(l(d),l(k)),g(i,n),g(o,n),g(t,n)}}}function ve(w){let i,d,o,k,t,x,n,T,C,K,J,D,Z,O,q,ee,j,te,U,ne,S,re,A,ie,B,oe,h,z,N,H,le,W,ae,I,se,V,$e,F,pe,E,me,Q,fe,X,ue,v,ce,_,y,L,R,ge,Y,de;t=new Ie({props:{fw:w[0]}}),n=new b({props:{title:"章末小测试",local:"章末小测验",headingTag:"h1"}}),C=new We({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),J=new b({props:{title:"1. 语言建模 Pipeline 的顺序是什么？",local:"1-语言建模-pipeline-的顺序是什么",headingTag:"h3"}}),Z=new M({props:{choices:[{text:"首先是模型它处理文本并返回原始预测。然后，分词器会对这些预测进行解释，并在需要时将它们转换回文本",explain:"模型不能理解文本！必须首先使用标记器(Tokenizer)将文本转换为id，之后才可以输入给模型。"},{text:"首先是 标记器(Tokenizer)，它处理文本并返回id。模型根据这些 id 并输出预测，可以是一些文本。",explain:"该模型的预测结果是id而不是文本。为了将预测转换回文本，必须使用标记器(Tokenizer)！"},{text:"标记器(Tokenizer) 处理文本并返回 id。模型处理这些 id 并输出一个预测。然后可以再次使用 标记器(Tokenizer) 将这些预测转换回某些文本。",explain:"正确! 标记器(Tokenizer)可以用于id与文本的相互转换。",correct:!0}]}}),q=new b({props:{title:"2. Transformer模型的输出有多少个维度，每个维度分别是什么？",local:"2-transformer模型的输出有多少个维度每个维度分别是什么",headingTag:"h3"}}),j=new M({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}]}}),U=new b({props:{title:"3.下列哪一个是Subword标记(Tokenization)的例子（从分词的颗粒度来划分）？",local:"3下列哪一个是subword标记tokenization的例子从分词的颗粒度来划分",headingTag:"h3"}}),S=new M({props:{choices:[{text:"WordPiece",explain:"是的，这是一个Subword 标记化(Tokenization)的例子！",correct:!0},{text:"基于单个字符的标记(Tokenization)",explain:"基于字符的标记(Tokenization)不是一种Subword 标记化(Tokenization)。"},{text:"基于空格和标点符号的分割",explain:"这是一种基于单词标记化(Tokenization)！"},{text:"BPE(Byte Pair Encoding)",explain:"是的，这是一个Subword 标记化(Tokenization)的例子！",correct:!0},{text:"Unigram",explain:"是的，这是一个Subword 标记化(Tokenization)的例子！",correct:!0},{text:"以上都不是",explain:"不对！"}]}}),A=new b({props:{title:"4.什么是模型的Head层？",local:"4什么是模型的head层",headingTag:"h3"}}),B=new M({props:{choices:[{text:"原始Transformer网络的一种组件，将张量(Tensors)重定向到它们的正确层",explain:"不对! 没有这样的组件。"},{text:"也称为自注意力(self-attention)机制，它根据序列中的其他标记(Token)来调整一个标记(Token)",explain:"不对！ 自注意力层确实包含注意力“Head”层，但这些不是模型的head层。"},{text:"一个附加组件，通常由一个或几个层组成，用于将Transformer的预测转换为特定于任务的输出",explain:"没错。它的全名是Adaptation Heads，也被简单地称为模型的头部，在不同的任务上有不同的形式: 语言模型Heads，问题回答Heads，序列分类Heads..。",correct:!0}]}});const we=[Ee,Fe],G=[];function he(e,r){return e[0]==="pt"?0:1}h=he(w),z=G[h]=we[h](w),H=new b({props:{title:"6.当将不同长度的序列批处理在一起时，需要进行哪些处理？",local:"6当将不同长度的序列批处理在一起时需要进行哪些处理",headingTag:"h3"}}),W=new M({props:{choices:[{text:"截短",explain:"是的，截断是一个正确的方式，可以将他们转化为一个固定长度的矩形序列。这是唯一的一个答案吗？",correct:!0},{text:"返回Tensors",explain:"虽然其他技术允许返回矩形张量，但在批处理序列时不可以直接返回长度不一致的Tensors。(序列必须是固定长度)"},{text:"填充",explain:"是的，填充是一个正确的方式，可以将他们转化为一个固定长度的矩形序列。这是唯一的一个答案吗？",correct:!0},{text:"注意力遮蔽(Attention masking)",explain:"当然！当处理不同长度的序列时，注意力遮蔽是最重要的。然而，这并不是唯一需要进行的处理。",correct:!0}]}}),I=new b({props:{title:"7.将 SoftMax激活函数应用于序列分类(Sequence Classification)模型的 logits 输出有什么意义？",local:"7将-softmax激活函数应用于序列分类sequence-classification模型的-logits-输出有什么意义",headingTag:"h3"}}),V=new M({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:"8大多数标记器tokenizer的api以什么方法为核心",headingTag:"h3"}}),E=new M({props:{choices:[{text:"<code>编码</code> ，因为它可以将文本编码为id，将预测的id解码为文本",explain:"错! 虽然 <code>编码</code> 方法确实存在于标记器中，但是它不存在于模型中。"},{text:"直接调用标记器(Tokenizer)对象。",explain:"完全正确！标记化器(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 Me({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 M({props:{choices:[{text:"字符串列表，每个字符串都是一个标记(Token)",explain:"正确! 把这个转换成id后，就可以传输给模型了！",correct:!0},{text:"一个ID的列表",explain:"不正确; 这就是 <code>__call__</code> 或 <code>convert_tokens_to_ids</code>方法的作用！"},{text:"包含所有标记(Token)的字符串",explain:"这将是次优的，因为Tokenizer会将字符串拆分为多个标记的列表。"}]}});const ze=[Xe,Qe],P=[];function _e(e,r){return e[0]==="pt"?0:1}return _=_e(w),y=P[_]=ze[_](w),R=new Ve({props:{source:"https://github.com/huggingface/course/blob/main/chapters/zh-CN/chapter2/8.mdx"}}),{c(){i=Te("meta"),d=p(),o=Te("p"),k=p(),f(t.$$.fragment),x=p(),f(n.$$.fragment),T=p(),f(C.$$.fragment),K=p(),f(J.$$.fragment),D=p(),f(Z.$$.fragment),O=p(),f(q.$$.fragment),ee=p(),f(j.$$.fragment),te=p(),f(U.$$.fragment),ne=p(),f(S.$$.fragment),re=p(),f(A.$$.fragment),ie=p(),f(B.$$.fragment),oe=p(),z.c(),N=p(),f(H.$$.fragment),le=p(),f(W.$$.fragment),ae=p(),f(I.$$.fragment),se=p(),f(V.$$.fragment),$e=p(),f(F.$$.fragment),pe=p(),f(E.$$.fragment),me=p(),f(Q.$$.fragment),fe=p(),f(X.$$.fragment),ue=p(),f(v.$$.fragment),ce=p(),y.c(),L=p(),f(R.$$.fragment),ge=p(),Y=Te("p"),this.h()},l(e){const r=Be("svelte-u9bgzb",document.head);i=be(r,"META",{name:!0,content:!0}),r.forEach(l),d=m(e),o=be(e,"P",{}),Ce(o).forEach(l),k=m(e),u(t.$$.fragment,e),x=m(e),u(n.$$.fragment,e),T=m(e),u(C.$$.fragment,e),K=m(e),u(J.$$.fragment,e),D=m(e),u(Z.$$.fragment,e),O=m(e),u(q.$$.fragment,e),ee=m(e),u(j.$$.fragment,e),te=m(e),u(U.$$.fragment,e),ne=m(e),u(S.$$.fragment,e),re=m(e),u(A.$$.fragment,e),ie=m(e),u(B.$$.fragment,e),oe=m(e),z.l(e),N=m(e),u(H.$$.fragment,e),le=m(e),u(W.$$.fragment,e),ae=m(e),u(I.$$.fragment,e),se=m(e),u(V.$$.fragment,e),$e=m(e),u(F.$$.fragment,e),pe=m(e),u(E.$$.fragment,e),me=m(e),u(Q.$$.fragment,e),fe=m(e),u(X.$$.fragment,e),ue=m(e),u(v.$$.fragment,e),ce=m(e),y.l(e),L=m(e),u(R.$$.fragment,e),ge=m(e),Y=be(e,"P",{}),Ce(Y).forEach(l),this.h()},h(){Je(i,"name","hf:doc:metadata"),Je(i,"content",Re)},m(e,r){He(document.head,i),$(e,d,r),$(e,o,r),$(e,k,r),c(t,e,r),$(e,x,r),c(n,e,r),$(e,T,r),c(C,e,r),$(e,K,r),c(J,e,r),$(e,D,r),c(Z,e,r),$(e,O,r),c(q,e,r),$(e,ee,r),c(j,e,r),$(e,te,r),c(U,e,r),$(e,ne,r),c(S,e,r),$(e,re,r),c(A,e,r),$(e,ie,r),c(B,e,r),$(e,oe,r),G[h].m(e,r),$(e,N,r),c(H,e,r),$(e,le,r),c(W,e,r),$(e,ae,r),c(I,e,r),$(e,se,r),c(V,e,r),$(e,$e,r),c(F,e,r),$(e,pe,r),c(E,e,r),$(e,me,r),c(Q,e,r),$(e,fe,r),c(X,e,r),$(e,ue,r),c(v,e,r),$(e,ce,r),P[_].m(e,r),$(e,L,r),c(R,e,r),$(e,ge,r),$(e,Y,r),de=!0},p(e,[r]){const ye={};r&1&&(ye.fw=e[0]),t.$set(ye);let ke=h;h=he(e),h!==ke&&(qe(),a(G[ke],1,1,()=>{G[ke]=null}),Ze(),z=G[h],z||(z=G[h]=we[h](e),z.c()),s(z,1),z.m(N.parentNode,N));let xe=_;_=_e(e),_!==xe&&(qe(),a(P[xe],1,1,()=>{P[xe]=null}),Ze(),y=P[_],y||(y=P[_]=ze[_](e),y.c()),s(y,1),y.m(L.parentNode,L))},i(e){de||(s(t.$$.fragment,e),s(n.$$.fragment,e),s(C.$$.fragment,e),s(J.$$.fragment,e),s(Z.$$.fragment,e),s(q.$$.fragment,e),s(j.$$.fragment,e),s(U.$$.fragment,e),s(S.$$.fragment,e),s(A.$$.fragment,e),s(B.$$.fragment,e),s(z),s(H.$$.fragment,e),s(W.$$.fragment,e),s(I.$$.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(y),s(R.$$.fragment,e),de=!0)},o(e){a(t.$$.fragment,e),a(n.$$.fragment,e),a(C.$$.fragment,e),a(J.$$.fragment,e),a(Z.$$.fragment,e),a(q.$$.fragment,e),a(j.$$.fragment,e),a(U.$$.fragment,e),a(S.$$.fragment,e),a(A.$$.fragment,e),a(B.$$.fragment,e),a(z),a(H.$$.fragment,e),a(W.$$.fragment,e),a(I.$$.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(y),a(R.$$.fragment,e),de=!1},d(e){e&&(l(d),l(o),l(k),l(x),l(T),l(K),l(D),l(O),l(ee),l(te),l(ne),l(re),l(ie),l(oe),l(N),l(le),l(ae),l(se),l($e),l(pe),l(me),l(fe),l(ue),l(ce),l(L),l(ge),l(Y)),l(i),g(t,e),g(n,e),g(C,e),g(J,e),g(Z,e),g(q,e),g(j,e),g(U,e),g(S,e),g(A,e),g(B,e),G[h].d(e),g(H,e),g(W,e),g(I,e),g(V,e),g(F,e),g(E,e),g(Q,e),g(X,e),g(v,e),P[_].d(e),g(R,e)}}}const Re='{"title":"章末小测试","local":"章末小测验","sections":[{"title":"1. 语言建模 Pipeline 的顺序是什么？","local":"1-语言建模-pipeline-的顺序是什么","sections":[],"depth":3},{"title":"2. Transformer模型的输出有多少个维度，每个维度分别是什么？","local":"2-transformer模型的输出有多少个维度每个维度分别是什么","sections":[],"depth":3},{"title":"3.下列哪一个是Subword标记(Tokenization)的例子（从分词的颗粒度来划分）？","local":"3下列哪一个是subword标记tokenization的例子从分词的颗粒度来划分","sections":[],"depth":3},{"title":"4.什么是模型的Head层？","local":"4什么是模型的head层","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":"8大多数标记器tokenizer的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(w,i,d){let o="pt";return Ue(()=>{const k=new URLSearchParams(window.location.search);d(0,o=k.get("fw")||"pt")}),[o]}class et extends Se{constructor(i){super(),Ae(this,i,Ge,ve,je,{})}}export{et as component};
