import{s as Se,o as We}from"../chunks/scheduler.cc52f4b9.js";import{S as Ae,i as Be,e as Me,s as p,c as f,h as He,a as we,d as o,b as m,f as Ze,g as u,k as qe,l as Ie,m as $,n as c,o as a,u as Ue,t as s,p as g,v as je}from"../chunks/index.9480bb2b.js";import{C as Ve,H as b,E as Fe}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.52103c90.js";import{C as he}from"../chunks/CodeBlock.c5404643.js";import{C as ve}from"../chunks/CourseFloatingBanner.78fb31df.js";import{Q as M}from"../chunks/Question.38e3fd1e.js";import{F as Ee}from"../chunks/FrameworkSwitchCourse.42d12053.js";function Qe(w){let i,d,l,k;return i=new b({props:{title:"5.什麼是 TFAutoModel？",local:"5什麼是-tfautomodel",headingTag:"h3"}}),l=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=p(),f(l.$$.fragment)},l(t){u(i.$$.fragment,t),d=m(t),u(l.$$.fragment,t)},m(t,x){c(i,t,x),$(t,d,x),c(l,t,x),k=!0},i(t){k||(s(i.$$.fragment,t),s(l.$$.fragment,t),k=!0)},o(t){a(i.$$.fragment,t),a(l.$$.fragment,t),k=!1},d(t){t&&o(d),g(i,t),g(l,t)}}}function Xe(w){let i,d,l,k;return i=new b({props:{title:"5.什麼是AutoModel？",local:"5什麼是automodel",headingTag:"h3"}}),l=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=p(),f(l.$$.fragment)},l(t){u(i.$$.fragment,t),d=m(t),u(l.$$.fragment,t)},m(t,x){c(i,t,x),$(t,d,x),c(l,t,x),k=!0},i(t){k||(s(i.$$.fragment,t),s(l.$$.fragment,t),k=!0)},o(t){a(i.$$.fragment,t),a(l.$$.fragment,t),k=!1},d(t){t&&o(d),g(i,t),g(l,t)}}}function Re(w){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 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(l.$$.fragment),k=p(),f(t.$$.fragment)},l(r){u(i.$$.fragment,r),d=m(r),u(l.$$.fragment,r),k=m(r),u(t.$$.fragment,r)},m(r,T){c(i,r,T),$(r,d,T),c(l,r,T),$(r,k,T),c(t,r,T),x=!0},i(r){x||(s(i.$$.fragment,r),s(l.$$.fragment,r),s(t.$$.fragment,r),x=!0)},o(r){a(i.$$.fragment,r),a(l.$$.fragment,r),a(t.$$.fragment,r),x=!1},d(r){r&&(o(d),o(k)),g(i,r),g(l,r),g(t,r)}}}function Ge(w){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 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(l.$$.fragment),k=p(),f(t.$$.fragment)},l(r){u(i.$$.fragment,r),d=m(r),u(l.$$.fragment,r),k=m(r),u(t.$$.fragment,r)},m(r,T){c(i,r,T),$(r,d,T),c(l,r,T),$(r,k,T),c(t,r,T),x=!0},i(r){x||(s(i.$$.fragment,r),s(l.$$.fragment,r),s(t.$$.fragment,r),x=!0)},o(r){a(i.$$.fragment,r),a(l.$$.fragment,r),a(t.$$.fragment,r),x=!1},d(r){r&&(o(d),o(k)),g(i,r),g(l,r),g(t,r)}}}function Pe(w){let i,d,l,k,t,x,r,T,C,D,J,O,Z,ee,q,te,U,ne,j,re,S,ie,W,le,A,oe,B,ae,h,y,N,H,se,I,$e,V,pe,F,me,v,fe,E,ue,Q,ce,X,ge,R,de,z,_,Y,G,ke,K,xe;t=new Ee({props:{fw:w[0]}}),r=new Ve({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),C=new b({props:{title:"章末小測試",local:"章末小測試",headingTag:"h1"}}),J=new ve({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),Z=new b({props:{title:"1. 語言建模 Pipeline 的順序是什麼？",local:"1-語言建模-pipeline-的順序是什麼",headingTag:"h3"}}),q=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}]}}),U=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}]}}),S=new b({props:{title:"3.下列哪一個是Subword標記(Tokenization)的例子（從分詞的顆粒度來劃分）？",local:"3下列哪一個是subword標記tokenization的例子從分詞的顆粒度來劃分",headingTag:"h3"}}),W=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 ye=[Xe,Qe],P=[];function ze(e,n){return e[0]==="pt"?0:1}h=ze(w),y=P[h]=ye[h](w),H=new b({props:{title:"6.當將不同長度的序列批處理在一起時，需要進行哪些處理？",local:"6當將不同長度的序列批處理在一起時需要進行哪些處理",headingTag:"h3"}}),I=new M({props:{choices:[{text:"截短",explain:"是的，截斷是一個正確的方式，可以將他們轉化為一個固定長度的矩形序列。這是唯一的一個答案嗎？",correct:!0},{text:"返回Tensors",explain:"雖然其他技術允許返回矩形張量，但在批處理序列時不可以直接返回長度不一致的Tensors。(序列必須是固定長度)"},{text:"填充",explain:"是的，填充是一個正確的方式，可以將他們轉化為一個固定長度的矩形序列。這是唯一的一個答案嗎？",correct:!0},{text:"注意力遮蔽(Attention masking)",explain:"當然！當處理不同長度的序列時，注意力遮蔽是最重要的。然而，這並不是唯一需要進行的處理。",correct:!0}]}}),V=new b({props:{title:"7.將 SoftMax激活函數應用於序列分類(Sequence Classification)模型的 logits 輸出有什麼意義？",local:"7將-softmax激活函數應用於序列分類sequence-classification模型的-logits-輸出有什麼意義",headingTag:"h3"}}),F=new M({props:{choices:[{text:"它軟化了logits輸出，使結果更可靠。",explain:"不， SoftMax激活函數不會影響結果的可靠性。"},{text:"它限定了上下界，使模型的輸出結果可以被解釋。",explain:"正確！結果值被壓縮到了0和1之間。不過，這並不是我們使用SoftMax激活函數的唯一原因。",correct:!0},{text:"輸出的和是1，從而產生一個可能的概率解釋。",explain:"沒錯，但這並不是我們使用SoftMax激活函數的唯一原因。",correct:!0}]}}),v=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 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}}),R=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 _e=[Ge,Re],L=[];function Ce(e,n){return e[0]==="pt"?0:1}return z=Ce(w),_=L[z]=_e[z](w),G=new Fe({props:{source:"https://github.com/huggingface/course/blob/main/chapters/zh-TW/chapter2/8.mdx"}}),{c(){i=Me("meta"),d=p(),l=Me("p"),k=p(),f(t.$$.fragment),x=p(),f(r.$$.fragment),T=p(),f(C.$$.fragment),D=p(),f(J.$$.fragment),O=p(),f(Z.$$.fragment),ee=p(),f(q.$$.fragment),te=p(),f(U.$$.fragment),ne=p(),f(j.$$.fragment),re=p(),f(S.$$.fragment),ie=p(),f(W.$$.fragment),le=p(),f(A.$$.fragment),oe=p(),f(B.$$.fragment),ae=p(),y.c(),N=p(),f(H.$$.fragment),se=p(),f(I.$$.fragment),$e=p(),f(V.$$.fragment),pe=p(),f(F.$$.fragment),me=p(),f(v.$$.fragment),fe=p(),f(E.$$.fragment),ue=p(),f(Q.$$.fragment),ce=p(),f(X.$$.fragment),ge=p(),f(R.$$.fragment),de=p(),_.c(),Y=p(),f(G.$$.fragment),ke=p(),K=Me("p"),this.h()},l(e){const n=He("svelte-u9bgzb",document.head);i=we(n,"META",{name:!0,content:!0}),n.forEach(o),d=m(e),l=we(e,"P",{}),Ze(l).forEach(o),k=m(e),u(t.$$.fragment,e),x=m(e),u(r.$$.fragment,e),T=m(e),u(C.$$.fragment,e),D=m(e),u(J.$$.fragment,e),O=m(e),u(Z.$$.fragment,e),ee=m(e),u(q.$$.fragment,e),te=m(e),u(U.$$.fragment,e),ne=m(e),u(j.$$.fragment,e),re=m(e),u(S.$$.fragment,e),ie=m(e),u(W.$$.fragment,e),le=m(e),u(A.$$.fragment,e),oe=m(e),u(B.$$.fragment,e),ae=m(e),y.l(e),N=m(e),u(H.$$.fragment,e),se=m(e),u(I.$$.fragment,e),$e=m(e),u(V.$$.fragment,e),pe=m(e),u(F.$$.fragment,e),me=m(e),u(v.$$.fragment,e),fe=m(e),u(E.$$.fragment,e),ue=m(e),u(Q.$$.fragment,e),ce=m(e),u(X.$$.fragment,e),ge=m(e),u(R.$$.fragment,e),de=m(e),_.l(e),Y=m(e),u(G.$$.fragment,e),ke=m(e),K=we(e,"P",{}),Ze(K).forEach(o),this.h()},h(){qe(i,"name","hf:doc:metadata"),qe(i,"content",Le)},m(e,n){Ie(document.head,i),$(e,d,n),$(e,l,n),$(e,k,n),c(t,e,n),$(e,x,n),c(r,e,n),$(e,T,n),c(C,e,n),$(e,D,n),c(J,e,n),$(e,O,n),c(Z,e,n),$(e,ee,n),c(q,e,n),$(e,te,n),c(U,e,n),$(e,ne,n),c(j,e,n),$(e,re,n),c(S,e,n),$(e,ie,n),c(W,e,n),$(e,le,n),c(A,e,n),$(e,oe,n),c(B,e,n),$(e,ae,n),P[h].m(e,n),$(e,N,n),c(H,e,n),$(e,se,n),c(I,e,n),$(e,$e,n),c(V,e,n),$(e,pe,n),c(F,e,n),$(e,me,n),c(v,e,n),$(e,fe,n),c(E,e,n),$(e,ue,n),c(Q,e,n),$(e,ce,n),c(X,e,n),$(e,ge,n),c(R,e,n),$(e,de,n),L[z].m(e,n),$(e,Y,n),c(G,e,n),$(e,ke,n),$(e,K,n),xe=!0},p(e,[n]){const Je={};n&1&&(Je.fw=e[0]),t.$set(Je);let Te=h;h=ze(e),h!==Te&&(je(),a(P[Te],1,1,()=>{P[Te]=null}),Ue(),y=P[h],y||(y=P[h]=ye[h](e),y.c()),s(y,1),y.m(N.parentNode,N));let be=z;z=Ce(e),z!==be&&(je(),a(L[be],1,1,()=>{L[be]=null}),Ue(),_=L[z],_||(_=L[z]=_e[z](e),_.c()),s(_,1),_.m(Y.parentNode,Y))},i(e){xe||(s(t.$$.fragment,e),s(r.$$.fragment,e),s(C.$$.fragment,e),s(J.$$.fragment,e),s(Z.$$.fragment,e),s(q.$$.fragment,e),s(U.$$.fragment,e),s(j.$$.fragment,e),s(S.$$.fragment,e),s(W.$$.fragment,e),s(A.$$.fragment,e),s(B.$$.fragment,e),s(y),s(H.$$.fragment,e),s(I.$$.fragment,e),s(V.$$.fragment,e),s(F.$$.fragment,e),s(v.$$.fragment,e),s(E.$$.fragment,e),s(Q.$$.fragment,e),s(X.$$.fragment,e),s(R.$$.fragment,e),s(_),s(G.$$.fragment,e),xe=!0)},o(e){a(t.$$.fragment,e),a(r.$$.fragment,e),a(C.$$.fragment,e),a(J.$$.fragment,e),a(Z.$$.fragment,e),a(q.$$.fragment,e),a(U.$$.fragment,e),a(j.$$.fragment,e),a(S.$$.fragment,e),a(W.$$.fragment,e),a(A.$$.fragment,e),a(B.$$.fragment,e),a(y),a(H.$$.fragment,e),a(I.$$.fragment,e),a(V.$$.fragment,e),a(F.$$.fragment,e),a(v.$$.fragment,e),a(E.$$.fragment,e),a(Q.$$.fragment,e),a(X.$$.fragment,e),a(R.$$.fragment,e),a(_),a(G.$$.fragment,e),xe=!1},d(e){e&&(o(d),o(l),o(k),o(x),o(T),o(D),o(O),o(ee),o(te),o(ne),o(re),o(ie),o(le),o(oe),o(ae),o(N),o(se),o($e),o(pe),o(me),o(fe),o(ue),o(ce),o(ge),o(de),o(Y),o(ke),o(K)),o(i),g(t,e),g(r,e),g(C,e),g(J,e),g(Z,e),g(q,e),g(U,e),g(j,e),g(S,e),g(W,e),g(A,e),g(B,e),P[h].d(e),g(H,e),g(I,e),g(V,e),g(F,e),g(v,e),g(E,e),g(Q,e),g(X,e),g(R,e),L[z].d(e),g(G,e)}}}const Le='{"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 Ne(w,i,d){let l="pt";return We(()=>{const k=new URLSearchParams(window.location.search);d(0,l=k.get("fw")||"pt")}),[l]}class rt extends Ae{constructor(i){super(),Be(this,i,Ne,Pe,Se,{})}}export{rt as component};
