import{s as Jl,o as dl}from"../chunks/scheduler.37c15a92.js";import{S as Cl,i as $l,g as M,s as c,r as J,A as Ul,h as b,f as r,c as p,j as ul,u as d,x as _,k as Ml,y as yl,a as i,v as C,t as f,b as ge,d as m,w as $,p as he}from"../chunks/index.2bf4358c.js";import{Y as bl}from"../chunks/Youtube.1e50a667.js";import{C as w}from"../chunks/CodeBlock.4e987730.js";import{C as _l}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as wl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Fe,E as kl}from"../chunks/getInferenceSnippets.80a69898.js";function Tl(u){let l,s;return l=new _l({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/th/chapter2/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter2/section3_tf.ipynb"}]}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function gl(u){let l,s;return l=new _l({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/th/chapter2/section3_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter2/section3_pt.ipynb"}]}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function hl(u){let l,s;return l=new bl({props:{id:"d3JVgghSOew"}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function Vl(u){let l,s;return l=new bl({props:{id:"AhChOFRegn4"}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function jl(u){let l,s="ใน section นี้เราจะมาดูวิธีการสร้างและการใช้งานโมเดล เราจะใช้คลาส <code>TFAutoModel</code> ซึ่งเป็นประโยชน์มากหากเราต้องการสร้างโมเดลใดๆ จาก checkpoint หนึ่งๆ",t,o,U="คลาส <code>TFAutoModel</code> และส่วนประกอบของมันทั้งหมดนั้น จริงๆแล้วก็เป็นเพียง wrapper ของโมเดลต่างๆที่มีอยู่ใน library มันเป็น wrapper ที่ฉลาดโดยที่มันสามารถเดาสถาปัตยกรรมของโมเดลที่เหมาะสมสำหรับ checkpoint ของคุณได้ และสร้างโมเดลด้วยสถาปัตยกรรมนั้น";return{c(){l=M("p"),l.innerHTML=s,t=c(),o=M("p"),o.innerHTML=U},l(a){l=b(a,"P",{"data-svelte-h":!0}),_(l)!=="svelte-fk2xs6"&&(l.innerHTML=s),t=p(a),o=b(a,"P",{"data-svelte-h":!0}),_(o)!=="svelte-1eu6r0e"&&(o.innerHTML=U)},m(a,y){i(a,l,y),i(a,t,y),i(a,o,y)},d(a){a&&(r(l),r(t),r(o))}}}function vl(u){let l,s="ใน section นี้ เราจะมาดูวิธีการสร้างและการใช้งานโมเดล เราจะใช้คลาส <code>AutoModel</code> ซึ่งเป็นประโยชน์มากหากเราต้องการสร้างโมเดลใดๆ จาก checkpoint หนึ่งๆ",t,o,U="คลาส <code>AutoModel</code> และส่วนประกอบของมันทั้งหมดนั้น จริงๆแล้วก็เป็นเพียง wrapper ของโมเดลต่างๆที่มีอยู่ใน library มันเป็น wrapper ที่ฉลาดโดยที่มันสามารถเดาสถาปัตยกรรมของโมเดลที่เหมาะสมสำหรับ checkpoint ของคุณได้ และสร้างโมเดลด้วยสถาปัตยกรรมนั้น";return{c(){l=M("p"),l.innerHTML=s,t=c(),o=M("p"),o.innerHTML=U},l(a){l=b(a,"P",{"data-svelte-h":!0}),_(l)!=="svelte-tm8gzo"&&(l.innerHTML=s),t=p(a),o=b(a,"P",{"data-svelte-h":!0}),_(o)!=="svelte-fxdzdo"&&(o.innerHTML=U)},m(a,y){i(a,l,y),i(a,t,y),i(a,o,y)},d(a){a&&(r(l),r(t),r(o))}}}function Il(u){let l,s;return l=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQSUyMyUyMEJ1aWxkaW5nJTIwdGhlJTIwY29uZmlnJTBBY29uZmlnJTIwJTNEJTIwQmVydENvbmZpZygpJTBBJTBBJTIzJTIwQnVpbGRpbmclMjB0aGUlMjBtb2RlbCUyMGZyb20lMjB0aGUlMjBjb25maWclMEFtb2RlbCUyMCUzRCUyMFRGQmVydE1vZGVsKGNvbmZpZyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

<span class="hljs-comment"># Building the config</span>
config = BertConfig()

<span class="hljs-comment"># Building the model from the config</span>
model = TFBertModel(config)`,wrap:!1}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function Bl(u){let l,s;return l=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEElMjMlMjBCdWlsZGluZyUyMHRoZSUyMGNvbmZpZyUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQSUwQSUyMyUyMEJ1aWxkaW5nJTIwdGhlJTIwbW9kZWwlMjBmcm9tJTIwdGhlJTIwY29uZmlnJTBBbW9kZWwlMjAlM0QlMjBCZXJ0TW9kZWwoY29uZmlnKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

<span class="hljs-comment"># Building the config</span>
config = BertConfig()

<span class="hljs-comment"># Building the model from the config</span>
model = BertModel(config)`,wrap:!1}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function Zl(u){let l,s;return l=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBURkJlcnRNb2RlbCUwQSUwQWNvbmZpZyUyMCUzRCUyMEJlcnRDb25maWcoKSUwQW1vZGVsJTIwJTNEJTIwVEZCZXJ0TW9kZWwoY29uZmlnKSUwQSUwQSUyMyUyMCVFMCVCOSU4MiVFMCVCOCVBMSVFMCVCOSU4MCVFMCVCOCU5NCVFMCVCOCVBNSVFMCVCOCU5NiVFMCVCOCVCOSVFMCVCOCU4MSVFMCVCOCU4MSVFMCVCOCVCMyVFMCVCOCVBQiVFMCVCOCU5OSVFMCVCOCU5NCVFMCVCOCU4NCVFMCVCOSU4OCVFMCVCOCVCMiVFMCVCOSU4MCVFMCVCOCVBMyVFMCVCOCVCNCVFMCVCOSU4OCVFMCVCOCVBMSVFMCVCOCU5NSVFMCVCOSU4OSVFMCVCOCU5OSVFMCVCOCU5NCVFMCVCOSU4OSVFMCVCOCVBNyVFMCVCOCVBMiVFMCVCOCU4MSVFMCVCOCVCMiVFMCVCOCVBMyVFMCVCOCVBQSVFMCVCOCVCOCVFMCVCOSU4OCVFMCVCOCVBMSE=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, TFBertModel

config = BertConfig()
model = TFBertModel(config)

<span class="hljs-comment"># โมเดลถูกกำหนดค่าเริ่มต้นด้วยการสุ่ม!</span>`,wrap:!1}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function El(u){let l,s;return l=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRDb25maWclMkMlMjBCZXJ0TW9kZWwlMEElMEFjb25maWclMjAlM0QlMjBCZXJ0Q29uZmlnKCklMEFtb2RlbCUyMCUzRCUyMEJlcnRNb2RlbChjb25maWcpJTBBJTBBJTIzJTIwJUUwJUI5JTgyJUUwJUI4JUExJUUwJUI5JTgwJUUwJUI4JTk0JUUwJUI4JUE1JUUwJUI4JTk2JUUwJUI4JUI5JUUwJUI4JTgxJUUwJUI4JTgxJUUwJUI4JUIzJUUwJUI4JUFCJUUwJUI4JTk5JUUwJUI4JTk0JUUwJUI4JTg0JUUwJUI5JTg4JUUwJUI4JUIyJUUwJUI5JTgwJUUwJUI4JUEzJUUwJUI4JUI0JUUwJUI5JTg4JUUwJUI4JUExJUUwJUI4JTk1JUUwJUI5JTg5JUUwJUI4JTk5JUUwJUI4JTk0JUUwJUI5JTg5JUUwJUI4JUE3JUUwJUI4JUEyJUUwJUI4JTgxJUUwJUI4JUIyJUUwJUI4JUEzJUUwJUI4JUFBJUUwJUI4JUI4JUUwJUI5JTg4JUUwJUI4JUExIQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertConfig, BertModel

config = BertConfig()
model = BertModel(config)

<span class="hljs-comment"># โมเดลถูกกำหนดค่าเริ่มต้นด้วยการสุ่ม!</span>`,wrap:!1}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function Wl(u){let l,s,t,o="เหมือนที่คุณเห็นก่อนหน้านี้ เราสามารถที่จะแทนค่า <code>TFBertModel</code> ด้วยคลาส <code>TFAutoModel</code> ที่คล้ายคลึงกัน จากนี้ไปเราจะใช้วิธีการนี้เพื่อเป็นการสร้างโค้ด checkpoint-agnostic; ถ้าโค้ดของคุณสามารถใช้งานได้กับหนึ่ง checkpoint มันก็ควรที่จะสามารถใช้กับอันอื่นได้ด้วย ซึ่งก็รวมถึง ไม่ว่าสถาปัตยกรรมจะแตกต่างกัน ตราบใดที่ checkpoint นั้นถูกเทรนมาสำหรับงานที่เหมือนกันก็ควรใช้ได้เหมือนกัน (ยกตัวอย่างเช่น งาน sentiment analysis)",U;return l=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQmVydE1vZGVsJTBBJTBBbW9kZWwlMjAlM0QlMjBURkJlcnRNb2RlbC5mcm9tX3ByZXRyYWluZWQoJTIyYmVydC1iYXNlLWNhc2VkJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFBertModel

model = TFBertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){J(l.$$.fragment),s=c(),t=M("p"),t.innerHTML=o},l(a){d(l.$$.fragment,a),s=p(a),t=b(a,"P",{"data-svelte-h":!0}),_(t)!=="svelte-nyx661"&&(t.innerHTML=o)},m(a,y){C(l,a,y),i(a,s,y),i(a,t,y),U=!0},i(a){U||(m(l.$$.fragment,a),U=!0)},o(a){f(l.$$.fragment,a),U=!1},d(a){a&&(r(s),r(t)),$(l,a)}}}function xl(u){let l,s,t,o="เหมือนที่คุณเห็นก่อนหน้านี้ เราสามารถที่จะแทนค่า <code>BertModel</code> ด้วยคลาส AutoModel` ที่คล้ายคลึงกัน จากนี้ไปเราจะใช้วิธีการนี้เพื่อเป็นการสร้างโค้ด checkpoint-agnostic; ถ้าโค้ดของคุณสามารถใช้งานได้กับหนึ่ง checkpoint มันก็ควรที่จะสามารถใช้กับอันอื่นได้ด้วย ซึ่งก็รวมถึง ไม่ว่าสถาปัตยกรรมจะแตกต่างกัน ตราบใดที่ checkpoint นั้นถูกเทรนมาสำหรับงานที่เหมือนกันก็ควรใช้ได้เหมือนกัน (ยกตัวอย่างเช่น งาน sentiment analysis)",U;return l=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRNb2RlbCUwQSUwQW1vZGVsJTIwJTNEJTIwQmVydE1vZGVsLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertModel

model = BertModel.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}}),{c(){J(l.$$.fragment),s=c(),t=M("p"),t.innerHTML=o},l(a){d(l.$$.fragment,a),s=p(a),t=b(a,"P",{"data-svelte-h":!0}),_(t)!=="svelte-o3ioay"&&(t.innerHTML=o)},m(a,y){C(l,a,y),i(a,s,y),i(a,t,y),U=!0},i(a){U||(m(l.$$.fragment,a),U=!0)},o(a){f(l.$$.fragment,a),U=!1},d(a){a&&(r(s),r(t)),$(l,a)}}}function Fl(u){let l,s;return l=new w({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMHRmX21vZGVsLmg1",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>tf_model.h5`,wrap:!1}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function Rl(u){let l,s;return l=new w({props:{code:"bHMlMjBkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMEElMEFjb25maWcuanNvbiUyMG1vZGVsLnNhZmV0ZW5zb3Jz",highlighted:`ls <span class="hljs-keyword">directory_on_my_computer
</span>
<span class="hljs-built_in">config</span>.<span class="hljs-keyword">json </span>model.safetensors`,wrap:!1}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function Hl(u){let l,s="ไฟล์ <em>tf_model.h5</em> เป็นที่รู้จักในนาม <em>state dictionary</em>; มันประกอบด้วย weights ทัั้งหมดของโมเดลคุณ  สองไฟล์ที่มีความเชื่อมโยงกัน ไฟล์ configuration จำเป็นที่จะต้องรู้สถาปัตยกรรมของโมเดลของคุณ ในขณะที่ weights ของโมเดลคุณ ก็คือ ตัวแปร(parameters) ของโมเดลคุณ";return{c(){l=M("p"),l.innerHTML=s},l(t){l=b(t,"P",{"data-svelte-h":!0}),_(l)!=="svelte-18aat1m"&&(l.innerHTML=s)},m(t,o){i(t,l,o)},d(t){t&&r(l)}}}function Nl(u){let l,s="ไฟล์ <em>model.safetensors</em> เป็นที่รู้จักในนาม <em>state dictionary</em>; มันประกอบด้วย weights ทัั้งหมดของโมเดลคุณ  สองไฟล์ที่มีความเชื่อมโยงกัน ไฟล์ configuration จำเป็นที่จะต้องรู้สถาปัตยกรรมของโมเดลของคุณ ในขณะที่ weights ของโมเดลคุณ ก็คือ ตัวแปร(parameters) ของโมเดลคุณ";return{c(){l=M("p"),l.innerHTML=s},l(t){l=b(t,"P",{"data-svelte-h":!0}),_(l)!=="svelte-4z4mbj"&&(l.innerHTML=s)},m(t,o){i(t,l,o)},d(t){t&&r(l)}}}function Ol(u){let l,s;return l=new w({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0Zi5jb25zdGFudChlbmNvZGVkX3NlcXVlbmNlcyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

model_inputs = tf.constant(encoded_sequences)`,wrap:!1}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function Sl(u){let l,s;return l=new w({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFtb2RlbF9pbnB1dHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoZW5jb2RlZF9zZXF1ZW5jZXMp",highlighted:`<span class="hljs-keyword">import</span> torch

model_inputs = torch.tensor(encoded_sequences)`,wrap:!1}}),{c(){J(l.$$.fragment)},l(t){d(l.$$.fragment,t)},m(t,o){C(l,t,o),s=!0},i(t){s||(m(l.$$.fragment,t),s=!0)},o(t){f(l.$$.fragment,t),s=!1},d(t){$(l,t)}}}function Gl(u){let l,s,t,o,U,a,y,He,k,T,Ve,g,h,je,ve,N,jt="แต่อย่างไรก็ตาม ถ้าคุณรู้ว่าคุณต้องการใช้โมเดลประเภทใด คุณสามารถใช้คลาสที่นิยามสถาปัตยกรรมนั้นได้โดยตรง เรามาดูกันว่ามันทำงานยังไงกับโมเดล BERT",Ne,O,Oe,S,vt="สิ่งแรกที่เราจำเป็นต้องทำในการเริ่มสร้างโมเดล BERT นั้นก็คือการโหลดวัตถุกำหนดค่า(configuration object):",Se,V,j,Ie,G,It="ใน configuration นั้นประกอบด้วยค่าของคุณสมบัติ(attributes) หลายอย่างๆ ที่ใช้สำหรับสร้างโมเดล:",Ge,z,ze,Q,Qe,L,Bt="ในขณะที่คุณยังไม่เห็นว่าคุณสมบัติต่างๆ เหล่าทำอะไรบ้าง คุณน่าจะพอจำบางส่วนได้: <code>hidden_size</code> ที่นิยามขนาดของเวคเตอร์ <code>hidden_states</code>, และ <code>num_hidden_layers</code> ที่นิยามจำนวนของเลเยอร์ที่โมเดล Transformer มี",Le,A,Ae,P,Zt="สร้างโมเดลจาก configuration พื้นฐาน และตั้งค่าเริ่มต้นด้วยค่าสุ่ม(random values):",Pe,v,I,Be,q,Et='โมเดลสามารถอยู่ในสถานะนี้ได้ แต่มันจะให้ผลลัพธ์ที่แย่ออกมา; มันจำเป็นต้องผ่านการเรียนรู้ก่อน เราสามารถเทรนโมเดลจากโมเดลเปล่าๆ กับงานที่เรามีได้ แต่อย่างที่คุณเห็นใน <a href="/course/chapter1">Chapter 1</a>, มันใช้เวลานานและข้อมูลจำนวนมาก โดยที่ไม่ได้มีประโยชน์อะไรเพิ่มขึ้นมาก เพื่อลดขึ้นตอนที่ไม่จำเป็นต่างๆ มันสำคัญอย่างยิ่งที่เราจะสามารถแชร์และนำโมเดลที่ผ่านการเทรนมาแล้วมาใช้ใหม่',qe,X,Wt="การโหลดโมเดล Transformer ที่ผ่านการเทรนมาแล้วนั้นง่ายมาก เราสามารถเรียกใช้ <code>from_pretrained()</code>:",Xe,B,Z,Ze,Y,xt='ในตัวอย่างโค้ดด้านบน เราไม่ได้ใช้ <code>BertConfig</code>, แต่ใช้งานโมเดลที่ผ่านการเทรนมาแล้ว(pretrained) ผ่าน <code>bert-base-cased</code> identifier ซึ่งนี่เป็น checkpoint ของโมเดลที่โดนเทรนด้วยผู้ที่ประดิษฐ์ BERT เอง; คุณสามารถดูรายละเอียดเพิ่มเติมได้ที่ <a href="https://huggingface.co/bert-base-cased" rel="nofollow">model card</a>.',Ye,D,Ft="ถึงตอนนี้โมเดลนี้ได้ถูกสร้างและมีค่าตั้งต้นเท่ากับ weights ของ checkpoint มันสามารถถูกนำไปใช้สำหรับการอนุมาน(inference)ได้ทันทีกับงานที่มันถูกเทรนมา และมันสามารถถูกนำมาปรับจูนเพิ่มเติมให้เข้ากับงานใหม่ได้ การเทรนโมเดลที่ใช้ weights ของโมเดลที่ผ่านการเทรนมาแล้ว แทนที่การเทรนจากไม่มีอะไรเลยนั้น ทำให้เราได้ผลลัพธ์ที่ดีในเวลาอันรวดเร็ว",De,K,Rt="weights ได้ถูกดาวน์โหลด และ เก็บไว้ในโฟลเดอร์ cache(เมื่อเราทำการเรียกใช้งาน <code>from_pretrained()</code> อีกในอนาคต weights เหล่านี้จะไม่ถูกดาวน์โหลดซ้ำอีก) โดยโฟลเดอร์มีค่าเริ่มต้น(default) อยู่ที่ <em>~/.cache/huggingface/transformers</em> คุณสามารถปรับเปลี่ยนโฟลเดอร์ cache ได้โดยตั้งค่า <code>HF_HOME</code> ใน environment variable",Ke,ee,Ht='identifier ที่ใช้สำหรับโหลดโมเดลสามารถใช้ identifier ของโมเดลใดก็ได้บน Model Hub ตราบใดที่มันเข้ากันได้กับสถาปัตยกรรม BERT ลิสท์ของ BERT checkpoints ทั้งหมดที่มีอยู่สามารถดูได้จาก <a href="https://huggingface.co/models?filter=bert" rel="nofollow">ที่นี่</a>.',et,te,tt,le,Nt="การบันทึกโมเดลนั้นเป็นอะไรง่ายพอๆกับการโหลด - เราใช้ <code>save_pretrained()</code> ซึ่งก็เปรียบเสมือนกับ <code>from_pretrained()</code>:",lt,ne,nt,se,Ot="นี่เป็นการบันทึกสองไฟล์ลงไปที่ฮาร์ดดิสของคุณ:",st,E,W,Ee,re,St="ุุ้ถ้าคุณไปดูที่ไฟล์ <em>config.json</em> คุณจะพอนึกออกถึงคุณสมบัติ(attributes) ที่จำเป็นในการสร้างสถาปัตยกรรมของโมเดล ไฟล์นี้ประกอบด้วย metadata เช่น checkpoint เกิดมาจากที่ใด และ 🤗 Transformers เวอร์ชันใดที่คุณใช้ในการบันทึก checkpoint ล่าสุด",rt,We,ie,it,oe,Gt="ุถึงตรงนี้คุณรู้วิธีการโหลดและบันทึกโมเดลแล้ว งั้นมาลองใช้มันทำนายอะไรบางอย่างดูกัน โมดล Transformer นั้นสามารถประมวลผลตัวเลขได้อย่างเดียว ซึ่งตัวเลขเหล่านี้ก็ได้มาจากการสร้างขึ้นมาโดยใช้ tokenizer แต่ก่อนที่เราจะไปอธิบายกันถึง tokenizer เรามาลองค้นหากันดูว่าอินพุตแบบไหนที่สามารถใส่เข้าไปในโมเดลได้บ้าง",ot,ae,zt="Tokenizers นั้นสามารถที่จะแปลงอินพุตไปเป็น tensors ที่เหมาะสมสำหรับ framework นั้นๆ แต่เพื่อช่วยให้คุณเข้าใจสิ่งที่เกิดขึ้น เราจะมาดูกันว่าอะไรที่จำเป็นต้องทำก่อนที่เราจะส่งอินพุตเข้าไปในโมเดล",at,ce,Qt="สมมติว่าเรามีคำ สอง สาม คำ:",ct,pe,pt,fe,Lt="tokenizer จะทำการแปลงคำเหล่านี้ไปเป็นดัชนีคำศัพท์(vocabulary indices) ซึ่งปกติจะเรียกว่า <em>input IDs</em> โดยตอนนี้แต่ละคำกลายเป็นลิสท์ของตัวเลข ผลลัพธ์ที่ได้ก็คือ:",ft,me,mt,ue,At="นี่เป็นลิสท์ของคำที่ผ่านการเข้ารหัส(encoded): a list of lists, Tensors สามารถมีขนาดเป็นสี่เหลี่ยมจตุรัสเท่านั้น(ลองนึกถึงแมทริกซ์), “array” นี้มีขนาดเป็นสี่เหลี่ยมจตุรัสอยู่แล้ว ดังนั้นการแปลงมันไปเป็น tensor นั้นง่ายมาก:",ut,x,F,xe,Me,Mt,be,Pt="การใช้งาน tensor กับโมเดลนั้นง่ายมากๆ - เราก็แค่เรียกโมเดลพร้อมกับใส่อินพุต:",bt,_e,_t,Je,qt=`ในขณะที่โมเดลสามารถรับตัวแปร(arguments) ต่างๆได้มากมาย แค่ input IDs เท่านั้นที่จำเป็น เดี๋ยวเราจะอธิบายกันอีกทีว่าตัวแปรตัวอื่นๆเอาไว้ทำอะไร และจำเป็นต้องใช้เมื่อไหร่,
แต่ขั้นแรกเราต้องเข้าใจ Tokenizers ที่ใช้สร้างอินพุตที่โมเดล Transformer สามารถเข้าใจได้ก่อน`,Jt,de,dt,Re,Ct;U=new wl({props:{fw:u[0]}}),y=new Fe({props:{title:"โมเดล",local:"โมเดล",headingTag:"h1"}});const Xt=[gl,Tl],Ce=[];function Yt(e,n){return e[0]==="pt"?0:1}k=Yt(u),T=Ce[k]=Xt[k](u);const Dt=[Vl,hl],$e=[];function Kt(e,n){return e[0]==="pt"?0:1}g=Kt(u),h=$e[g]=Dt[g](u);function el(e,n){return e[0]==="pt"?vl:jl}let $t=el(u),R=$t(u);O=new Fe({props:{title:"สร้าง Transformer",local:"สราง-transformer",headingTag:"h2"}});const tl=[Bl,Il],Ue=[];function ll(e,n){return e[0]==="pt"?0:1}V=ll(u),j=Ue[V]=tl[V](u),z=new w({props:{code:"cHJpbnQoY29uZmlnKQ==",highlighted:'<span class="hljs-built_in">print</span>(config)',wrap:!1}}),Q=new w({props:{code:"QmVydENvbmZpZyUyMCU3QiUwQSUyMCUyMCU1Qi4uLiU1RCUwQSUyMCUyMCUyMmhpZGRlbl9zaXplJTIyJTNBJTIwNzY4JTJDJTBBJTIwJTIwJTIyaW50ZXJtZWRpYXRlX3NpemUlMjIlM0ElMjAzMDcyJTJDJTBBJTIwJTIwJTIybWF4X3Bvc2l0aW9uX2VtYmVkZGluZ3MlMjIlM0ElMjA1MTIlMkMlMEElMjAlMjAlMjJudW1fYXR0ZW50aW9uX2hlYWRzJTIyJTNBJTIwMTIlMkMlMEElMjAlMjAlMjJudW1faGlkZGVuX2xheWVycyUyMiUzQSUyMDEyJTJDJTBBJTIwJTIwJTVCLi4uJTVEJTBBJTdE",highlighted:`BertConfig {
  [...]
  <span class="hljs-string">&quot;hidden_size&quot;</span>: <span class="hljs-number">768</span>,
  <span class="hljs-string">&quot;intermediate_size&quot;</span>: <span class="hljs-number">3072</span>,
  <span class="hljs-string">&quot;max_position_embeddings&quot;</span>: <span class="hljs-number">512</span>,
  <span class="hljs-string">&quot;num_attention_heads&quot;</span>: <span class="hljs-number">12</span>,
  <span class="hljs-string">&quot;num_hidden_layers&quot;</span>: <span class="hljs-number">12</span>,
  [...]
}`,wrap:!1}}),A=new Fe({props:{title:"วิธีการต่างๆในการโหลด",local:"วธการตางๆในการโหลด",headingTag:"h3"}});const nl=[El,Zl],ye=[];function sl(e,n){return e[0]==="pt"?0:1}v=sl(u),I=ye[v]=nl[v](u);const rl=[xl,Wl],we=[];function il(e,n){return e[0]==="pt"?0:1}B=il(u),Z=we[B]=rl[B](u),te=new Fe({props:{title:"วิธีสำหรับการบันทึก",local:"วธสำหรบการบนทก",headingTag:"h3"}}),ne=new w({props:{code:"bW9kZWwuc2F2ZV9wcmV0cmFpbmVkKCUyMmRpcmVjdG9yeV9vbl9teV9jb21wdXRlciUyMik=",highlighted:'model.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}});const ol=[Rl,Fl],ke=[];function al(e,n){return e[0]==="pt"?0:1}E=al(u),W=ke[E]=ol[E](u);function cl(e,n){return e[0]==="pt"?Nl:Hl}let Ut=cl(u),H=Ut(u);ie=new Fe({props:{title:"ใชโมเดล Transformer สำหรับการอนุมาน(inference)",local:"ใชโมเดล-transformer-สำหรบการอนมานinference",headingTag:"h2"}}),pe=new w({props:{code:"c2VxdWVuY2VzJTIwJTNEJTIwJTVCJTIySGVsbG8hJTIyJTJDJTIwJTIyQ29vbC4lMjIlMkMlMjAlMjJOaWNlISUyMiU1RA==",highlighted:'sequences = [<span class="hljs-string">&quot;Hello!&quot;</span>, <span class="hljs-string">&quot;Cool.&quot;</span>, <span class="hljs-string">&quot;Nice!&quot;</span>]',wrap:!1}}),me=new w({props:{code:"ZW5jb2RlZF9zZXF1ZW5jZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjA3NTkyJTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTVCMTAxJTJDJTIwNDY1OCUyQyUyMDEwMTIlMkMlMjAxMDIlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIxMDElMkMlMjAzODM1JTJDJTIwOTk5JTJDJTIwMTAyJTVEJTJDJTBBJTVE",highlighted:`encoded_sequences = [
    [<span class="hljs-number">101</span>, <span class="hljs-number">7592</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">4658</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>],
    [<span class="hljs-number">101</span>, <span class="hljs-number">3835</span>, <span class="hljs-number">999</span>, <span class="hljs-number">102</span>],
]`,wrap:!1}});const pl=[Sl,Ol],Te=[];function fl(e,n){return e[0]==="pt"?0:1}return x=fl(u),F=Te[x]=pl[x](u),Me=new Fe({props:{title:"ใช้ tensors เป็นอินพุตเข้าไปยังโมเดล",local:"ใช-tensors-เปนอนพตเขาไปยงโมเดล",headingTag:"h3"}}),_e=new w({props:{code:"b3V0cHV0JTIwJTNEJTIwbW9kZWwobW9kZWxfaW5wdXRzKQ==",highlighted:"output = model(model_inputs)",wrap:!1}}),de=new kl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter2/3.mdx"}}),{c(){l=M("meta"),s=c(),t=M("p"),o=c(),J(U.$$.fragment),a=c(),J(y.$$.fragment),He=c(),T.c(),Ve=c(),h.c(),je=c(),R.c(),ve=c(),N=M("p"),N.textContent=jt,Ne=c(),J(O.$$.fragment),Oe=c(),S=M("p"),S.textContent=vt,Se=c(),j.c(),Ie=c(),G=M("p"),G.textContent=It,Ge=c(),J(z.$$.fragment),ze=c(),J(Q.$$.fragment),Qe=c(),L=M("p"),L.innerHTML=Bt,Le=c(),J(A.$$.fragment),Ae=c(),P=M("p"),P.textContent=Zt,Pe=c(),I.c(),Be=c(),q=M("p"),q.innerHTML=Et,qe=c(),X=M("p"),X.innerHTML=Wt,Xe=c(),Z.c(),Ze=c(),Y=M("p"),Y.innerHTML=xt,Ye=c(),D=M("p"),D.textContent=Ft,De=c(),K=M("p"),K.innerHTML=Rt,Ke=c(),ee=M("p"),ee.innerHTML=Ht,et=c(),J(te.$$.fragment),tt=c(),le=M("p"),le.innerHTML=Nt,lt=c(),J(ne.$$.fragment),nt=c(),se=M("p"),se.textContent=Ot,st=c(),W.c(),Ee=c(),re=M("p"),re.innerHTML=St,rt=c(),H.c(),We=c(),J(ie.$$.fragment),it=c(),oe=M("p"),oe.textContent=Gt,ot=c(),ae=M("p"),ae.textContent=zt,at=c(),ce=M("p"),ce.textContent=Qt,ct=c(),J(pe.$$.fragment),pt=c(),fe=M("p"),fe.innerHTML=Lt,ft=c(),J(me.$$.fragment),mt=c(),ue=M("p"),ue.textContent=At,ut=c(),F.c(),xe=c(),J(Me.$$.fragment),Mt=c(),be=M("p"),be.textContent=Pt,bt=c(),J(_e.$$.fragment),_t=c(),Je=M("p"),Je.textContent=qt,Jt=c(),J(de.$$.fragment),dt=c(),Re=M("p"),this.h()},l(e){const n=Ul("svelte-u9bgzb",document.head);l=b(n,"META",{name:!0,content:!0}),n.forEach(r),s=p(e),t=b(e,"P",{}),ul(t).forEach(r),o=p(e),d(U.$$.fragment,e),a=p(e),d(y.$$.fragment,e),He=p(e),T.l(e),Ve=p(e),h.l(e),je=p(e),R.l(e),ve=p(e),N=b(e,"P",{"data-svelte-h":!0}),_(N)!=="svelte-1umt4q3"&&(N.textContent=jt),Ne=p(e),d(O.$$.fragment,e),Oe=p(e),S=b(e,"P",{"data-svelte-h":!0}),_(S)!=="svelte-1mcwioc"&&(S.textContent=vt),Se=p(e),j.l(e),Ie=p(e),G=b(e,"P",{"data-svelte-h":!0}),_(G)!=="svelte-1ddii7r"&&(G.textContent=It),Ge=p(e),d(z.$$.fragment,e),ze=p(e),d(Q.$$.fragment,e),Qe=p(e),L=b(e,"P",{"data-svelte-h":!0}),_(L)!=="svelte-1mefga2"&&(L.innerHTML=Bt),Le=p(e),d(A.$$.fragment,e),Ae=p(e),P=b(e,"P",{"data-svelte-h":!0}),_(P)!=="svelte-ef9ays"&&(P.textContent=Zt),Pe=p(e),I.l(e),Be=p(e),q=b(e,"P",{"data-svelte-h":!0}),_(q)!=="svelte-llg1g8"&&(q.innerHTML=Et),qe=p(e),X=b(e,"P",{"data-svelte-h":!0}),_(X)!=="svelte-w49kl2"&&(X.innerHTML=Wt),Xe=p(e),Z.l(e),Ze=p(e),Y=b(e,"P",{"data-svelte-h":!0}),_(Y)!=="svelte-oiqscb"&&(Y.innerHTML=xt),Ye=p(e),D=b(e,"P",{"data-svelte-h":!0}),_(D)!=="svelte-31hwgr"&&(D.textContent=Ft),De=p(e),K=b(e,"P",{"data-svelte-h":!0}),_(K)!=="svelte-1m85ixk"&&(K.innerHTML=Rt),Ke=p(e),ee=b(e,"P",{"data-svelte-h":!0}),_(ee)!=="svelte-kqv3sx"&&(ee.innerHTML=Ht),et=p(e),d(te.$$.fragment,e),tt=p(e),le=b(e,"P",{"data-svelte-h":!0}),_(le)!=="svelte-1xapuix"&&(le.innerHTML=Nt),lt=p(e),d(ne.$$.fragment,e),nt=p(e),se=b(e,"P",{"data-svelte-h":!0}),_(se)!=="svelte-9izvk0"&&(se.textContent=Ot),st=p(e),W.l(e),Ee=p(e),re=b(e,"P",{"data-svelte-h":!0}),_(re)!=="svelte-c255j6"&&(re.innerHTML=St),rt=p(e),H.l(e),We=p(e),d(ie.$$.fragment,e),it=p(e),oe=b(e,"P",{"data-svelte-h":!0}),_(oe)!=="svelte-1ctaqwt"&&(oe.textContent=Gt),ot=p(e),ae=b(e,"P",{"data-svelte-h":!0}),_(ae)!=="svelte-4me1kk"&&(ae.textContent=zt),at=p(e),ce=b(e,"P",{"data-svelte-h":!0}),_(ce)!=="svelte-1o8yqy2"&&(ce.textContent=Qt),ct=p(e),d(pe.$$.fragment,e),pt=p(e),fe=b(e,"P",{"data-svelte-h":!0}),_(fe)!=="svelte-1lfjhco"&&(fe.innerHTML=Lt),ft=p(e),d(me.$$.fragment,e),mt=p(e),ue=b(e,"P",{"data-svelte-h":!0}),_(ue)!=="svelte-19qbd7p"&&(ue.textContent=At),ut=p(e),F.l(e),xe=p(e),d(Me.$$.fragment,e),Mt=p(e),be=b(e,"P",{"data-svelte-h":!0}),_(be)!=="svelte-12zpsmu"&&(be.textContent=Pt),bt=p(e),d(_e.$$.fragment,e),_t=p(e),Je=b(e,"P",{"data-svelte-h":!0}),_(Je)!=="svelte-1x2oj54"&&(Je.textContent=qt),Jt=p(e),d(de.$$.fragment,e),dt=p(e),Re=b(e,"P",{}),ul(Re).forEach(r),this.h()},h(){Ml(l,"name","hf:doc:metadata"),Ml(l,"content",zl)},m(e,n){yl(document.head,l),i(e,s,n),i(e,t,n),i(e,o,n),C(U,e,n),i(e,a,n),C(y,e,n),i(e,He,n),Ce[k].m(e,n),i(e,Ve,n),$e[g].m(e,n),i(e,je,n),R.m(e,n),i(e,ve,n),i(e,N,n),i(e,Ne,n),C(O,e,n),i(e,Oe,n),i(e,S,n),i(e,Se,n),Ue[V].m(e,n),i(e,Ie,n),i(e,G,n),i(e,Ge,n),C(z,e,n),i(e,ze,n),C(Q,e,n),i(e,Qe,n),i(e,L,n),i(e,Le,n),C(A,e,n),i(e,Ae,n),i(e,P,n),i(e,Pe,n),ye[v].m(e,n),i(e,Be,n),i(e,q,n),i(e,qe,n),i(e,X,n),i(e,Xe,n),we[B].m(e,n),i(e,Ze,n),i(e,Y,n),i(e,Ye,n),i(e,D,n),i(e,De,n),i(e,K,n),i(e,Ke,n),i(e,ee,n),i(e,et,n),C(te,e,n),i(e,tt,n),i(e,le,n),i(e,lt,n),C(ne,e,n),i(e,nt,n),i(e,se,n),i(e,st,n),ke[E].m(e,n),i(e,Ee,n),i(e,re,n),i(e,rt,n),H.m(e,n),i(e,We,n),C(ie,e,n),i(e,it,n),i(e,oe,n),i(e,ot,n),i(e,ae,n),i(e,at,n),i(e,ce,n),i(e,ct,n),C(pe,e,n),i(e,pt,n),i(e,fe,n),i(e,ft,n),C(me,e,n),i(e,mt,n),i(e,ue,n),i(e,ut,n),Te[x].m(e,n),i(e,xe,n),C(Me,e,n),i(e,Mt,n),i(e,be,n),i(e,bt,n),C(_e,e,n),i(e,_t,n),i(e,Je,n),i(e,Jt,n),C(de,e,n),i(e,dt,n),i(e,Re,n),Ct=!0},p(e,[n]){const ml={};n&1&&(ml.fw=e[0]),U.$set(ml);let yt=k;k=Yt(e),k!==yt&&(he(),f(Ce[yt],1,1,()=>{Ce[yt]=null}),ge(),T=Ce[k],T||(T=Ce[k]=Xt[k](e),T.c()),m(T,1),T.m(Ve.parentNode,Ve));let wt=g;g=Kt(e),g!==wt&&(he(),f($e[wt],1,1,()=>{$e[wt]=null}),ge(),h=$e[g],h||(h=$e[g]=Dt[g](e),h.c()),m(h,1),h.m(je.parentNode,je)),$t!==($t=el(e))&&(R.d(1),R=$t(e),R&&(R.c(),R.m(ve.parentNode,ve)));let kt=V;V=ll(e),V!==kt&&(he(),f(Ue[kt],1,1,()=>{Ue[kt]=null}),ge(),j=Ue[V],j||(j=Ue[V]=tl[V](e),j.c()),m(j,1),j.m(Ie.parentNode,Ie));let Tt=v;v=sl(e),v!==Tt&&(he(),f(ye[Tt],1,1,()=>{ye[Tt]=null}),ge(),I=ye[v],I||(I=ye[v]=nl[v](e),I.c()),m(I,1),I.m(Be.parentNode,Be));let gt=B;B=il(e),B!==gt&&(he(),f(we[gt],1,1,()=>{we[gt]=null}),ge(),Z=we[B],Z||(Z=we[B]=rl[B](e),Z.c()),m(Z,1),Z.m(Ze.parentNode,Ze));let ht=E;E=al(e),E!==ht&&(he(),f(ke[ht],1,1,()=>{ke[ht]=null}),ge(),W=ke[E],W||(W=ke[E]=ol[E](e),W.c()),m(W,1),W.m(Ee.parentNode,Ee)),Ut!==(Ut=cl(e))&&(H.d(1),H=Ut(e),H&&(H.c(),H.m(We.parentNode,We)));let Vt=x;x=fl(e),x!==Vt&&(he(),f(Te[Vt],1,1,()=>{Te[Vt]=null}),ge(),F=Te[x],F||(F=Te[x]=pl[x](e),F.c()),m(F,1),F.m(xe.parentNode,xe))},i(e){Ct||(m(U.$$.fragment,e),m(y.$$.fragment,e),m(T),m(h),m(O.$$.fragment,e),m(j),m(z.$$.fragment,e),m(Q.$$.fragment,e),m(A.$$.fragment,e),m(I),m(Z),m(te.$$.fragment,e),m(ne.$$.fragment,e),m(W),m(ie.$$.fragment,e),m(pe.$$.fragment,e),m(me.$$.fragment,e),m(F),m(Me.$$.fragment,e),m(_e.$$.fragment,e),m(de.$$.fragment,e),Ct=!0)},o(e){f(U.$$.fragment,e),f(y.$$.fragment,e),f(T),f(h),f(O.$$.fragment,e),f(j),f(z.$$.fragment,e),f(Q.$$.fragment,e),f(A.$$.fragment,e),f(I),f(Z),f(te.$$.fragment,e),f(ne.$$.fragment,e),f(W),f(ie.$$.fragment,e),f(pe.$$.fragment,e),f(me.$$.fragment,e),f(F),f(Me.$$.fragment,e),f(_e.$$.fragment,e),f(de.$$.fragment,e),Ct=!1},d(e){e&&(r(s),r(t),r(o),r(a),r(He),r(Ve),r(je),r(ve),r(N),r(Ne),r(Oe),r(S),r(Se),r(Ie),r(G),r(Ge),r(ze),r(Qe),r(L),r(Le),r(Ae),r(P),r(Pe),r(Be),r(q),r(qe),r(X),r(Xe),r(Ze),r(Y),r(Ye),r(D),r(De),r(K),r(Ke),r(ee),r(et),r(tt),r(le),r(lt),r(nt),r(se),r(st),r(Ee),r(re),r(rt),r(We),r(it),r(oe),r(ot),r(ae),r(at),r(ce),r(ct),r(pt),r(fe),r(ft),r(mt),r(ue),r(ut),r(xe),r(Mt),r(be),r(bt),r(_t),r(Je),r(Jt),r(dt),r(Re)),r(l),$(U,e),$(y,e),Ce[k].d(e),$e[g].d(e),R.d(e),$(O,e),Ue[V].d(e),$(z,e),$(Q,e),$(A,e),ye[v].d(e),we[B].d(e),$(te,e),$(ne,e),ke[E].d(e),H.d(e),$(ie,e),$(pe,e),$(me,e),Te[x].d(e),$(Me,e),$(_e,e),$(de,e)}}}const zl='{"title":"โมเดล","local":"โมเดล","sections":[{"title":"สร้าง Transformer","local":"สราง-transformer","sections":[{"title":"วิธีการต่างๆในการโหลด","local":"วธการตางๆในการโหลด","sections":[],"depth":3},{"title":"วิธีสำหรับการบันทึก","local":"วธสำหรบการบนทก","sections":[],"depth":3}],"depth":2},{"title":"ใชโมเดล Transformer สำหรับการอนุมาน(inference)","local":"ใชโมเดล-transformer-สำหรบการอนมานinference","sections":[{"title":"ใช้ tensors เป็นอินพุตเข้าไปยังโมเดล","local":"ใช-tensors-เปนอนพตเขาไปยงโมเดล","sections":[],"depth":3}],"depth":2}],"depth":1}';function Ql(u,l,s){let t="pt";return dl(()=>{const o=new URLSearchParams(window.location.search);s(0,t=o.get("fw")||"pt")}),[t]}class Kl extends Cl{constructor(l){super(),$l(this,l,Ql,Gl,Jl,{})}}export{Kl as component};
