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