import{s as je,o as Ue}from"../chunks/scheduler.37c15a92.js";import{S as Se,i as Ae,g as Te,s as $,r as f,A as We,h as be,f as l,c as m,j as Ce,u,k as Je,y as Be,a as p,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.4e987730.js";import{C as He}from"../chunks/CourseFloatingBanner.9ff4c771.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/getInferenceSnippets.97e75ee2.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/autonlp'>AutoNLP</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=$(),f(o.$$.fragment)},l(t){u(i.$$.fragment,t),d=m(t),u(o.$$.fragment,t)},m(t,x){c(i,t,x),p(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/autonlp'>AutoNLP</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=$(),f(o.$$.fragment)},l(t){u(i.$$.fragment,t),d=m(t),u(o.$$.fragment,t)},m(t,x){c(i,t,x),p(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=$(),f(o.$$.fragment),k=$(),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),p(n,d,T),c(o,n,T),p(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=$(),f(o.$$.fragment),k=$(),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),p(n,d,T),c(o,n,T),p(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,W,oe,h,z,N,B,le,H,ae,I,se,V,pe,F,$e,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 He({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:"兩個維度，分別是: 序列長度(Sequence Length)和批次大小(Batch Size)",explain:"錯! 該模型的張量輸出還具有第三個維度: 隱藏層大小(Hidden Size)。"},{text:"兩個維度，分別是: 序列長度(Sequence Length)和隱藏層大小(Hidden Size)",explain:"錯! 所有Transformer模型都批量進行計算，即使是單個序列; 那麼批次大小(Batch Size)為1！"},{text:"三個維度，分別是: 序列長度(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"}}),W=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),B=new b({props:{title:"6.當將不同長度的序列批處理在一起時，需要進行哪些處理？",local:"6當將不同長度的序列批處理在一起時需要進行哪些處理",headingTag:"h3"}}),H=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-TW/chapter2/8.mdx"}}),{c(){i=Te("meta"),d=$(),o=Te("p"),k=$(),f(t.$$.fragment),x=$(),f(n.$$.fragment),T=$(),f(C.$$.fragment),K=$(),f(J.$$.fragment),D=$(),f(Z.$$.fragment),O=$(),f(q.$$.fragment),ee=$(),f(j.$$.fragment),te=$(),f(U.$$.fragment),ne=$(),f(S.$$.fragment),re=$(),f(A.$$.fragment),ie=$(),f(W.$$.fragment),oe=$(),z.c(),N=$(),f(B.$$.fragment),le=$(),f(H.$$.fragment),ae=$(),f(I.$$.fragment),se=$(),f(V.$$.fragment),pe=$(),f(F.$$.fragment),$e=$(),f(E.$$.fragment),me=$(),f(Q.$$.fragment),fe=$(),f(X.$$.fragment),ue=$(),f(v.$$.fragment),ce=$(),y.c(),L=$(),f(R.$$.fragment),ge=$(),Y=Te("p"),this.h()},l(e){const r=We("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(W.$$.fragment,e),oe=m(e),z.l(e),N=m(e),u(B.$$.fragment,e),le=m(e),u(H.$$.fragment,e),ae=m(e),u(I.$$.fragment,e),se=m(e),u(V.$$.fragment,e),pe=m(e),u(F.$$.fragment,e),$e=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){Be(document.head,i),p(e,d,r),p(e,o,r),p(e,k,r),c(t,e,r),p(e,x,r),c(n,e,r),p(e,T,r),c(C,e,r),p(e,K,r),c(J,e,r),p(e,D,r),c(Z,e,r),p(e,O,r),c(q,e,r),p(e,ee,r),c(j,e,r),p(e,te,r),c(U,e,r),p(e,ne,r),c(S,e,r),p(e,re,r),c(A,e,r),p(e,ie,r),c(W,e,r),p(e,oe,r),G[h].m(e,r),p(e,N,r),c(B,e,r),p(e,le,r),c(H,e,r),p(e,ae,r),c(I,e,r),p(e,se,r),c(V,e,r),p(e,pe,r),c(F,e,r),p(e,$e,r),c(E,e,r),p(e,me,r),c(Q,e,r),p(e,fe,r),c(X,e,r),p(e,ue,r),c(v,e,r),p(e,ce,r),P[_].m(e,r),p(e,L,r),c(R,e,r),p(e,ge,r),p(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(W.$$.fragment,e),s(z),s(B.$$.fragment,e),s(H.$$.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(W.$$.fragment,e),a(z),a(B.$$.fragment,e),a(H.$$.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(pe),l($e),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(W,e),G[h].d(e),g(B,e),g(H,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};
