Buckets:

rtrm's picture
download
raw
47.3 kB
import{s as Sn,n as Fn,o as Kn}from"../chunks/scheduler.37c15a92.js";import{S as On,i as Qn,g as r,s as i,r as f,A as Wn,h as a,f as n,c as s,j as Yn,u as o,x as m,k as d,y as Xn,a as l,v as u,d as p,t as g,w as c}from"../chunks/index.2bf4358c.js";import{Y as St}from"../chunks/Youtube.1e50a667.js";import{C as Zn}from"../chunks/CourseFloatingBanner.6add7356.js";import{H as v,E as Jn}from"../chunks/getInferenceSnippets.ebf8be91.js";function el(Ft){let h,Ee,we,qe,M,Ae,y,je,w,Kt="ในส่วนนี้เราจะมาดูกันว่าสถาปัตยกรรมของโมเดล Transformer ทำงานกันยังไง",Be,P,Re,E,Ot="รูปด้านล่างแสดงรายชื่อของโมเดล Transformer ตามแต่ละช่วงเวลา:",ze,x,Qt='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_chrono.svg" alt="A brief chronology of Transformers models."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_chrono-dark.svg" alt="A brief chronology of Transformers models."/>',De,q,Wt='<a href="https://arxiv.org/abs/1706.03762" rel="nofollow">สถาปัตยกรรม Transformer</a> ถูกสร้างขึ้นเมื่อปี 2017 เป้าหมายในการสร้างโมเดลก็เพื่องานในการแปลภาษา หลังจากนั้นก็มีโมเดลที่ได้รับแรงบันดาลใจต่อ ๆ มา เช่น',Ie,A,Xt='<li><p><strong>มิถุนายน 2018</strong>: <a href="https://cdn.openai.com/research-covers/language-unsupervised/language_understanding_paper.pdf" rel="nofollow">GPT</a>, โมเดล Transformer ตัวแรก ที่มาพร้อมกับพร้อมกับโมเดลที่เทรนมาแล้ว ใช้ในการ fine-tune งานทางด้าน NLP ได้หลายงานและได้ผลลัพธ์ที่เทียบเท่างานวิจัยล่าสุด</p></li> <li><p><strong>ตุลาคม 2018</strong>: <a href="https://arxiv.org/abs/1810.04805" rel="nofollow">BERT</a>, โมเดลขนาดใหญ่อีกตัวหนึ่งที่ผ่านการเทรนมาแล้ว ซึ่งออกแบบมาสำหรับงานในการสรุปความ (อ่านต่อได้ในบทถัดไป)</p></li> <li><p><strong>กุมภาพันธ์ 2019</strong>: <a href="https://cdn.openai.com/better-language-models/language_models_are_unsupervised_multitask_learners.pdf" rel="nofollow">GPT-2</a>, โมเดล GPT รุ่นพัฒนาที่ดีขึ้น(และใหญ่ขึ้นด้วย) แต่ว่าไม่ได้เปิดให้ใช้สาธารณะในทันทีเนื่องจากอาจมีการนำไปใช้ในด้านไม่ดี</p></li> <li><p><strong>ตุลาคม 2019</strong>: <a href="https://arxiv.org/abs/1910.01108" rel="nofollow">DistilBERT</a>, โมเดล BERT ขนาดย่อ ซึ่งเร็วกว่า 60% และใช้หน่วยความจำลดลง 40% แต่ยังคงประสิทธิภาพไว้ที่ 97% ของโมเดล BERT ปกติ</p></li> <li><p><strong>ตุลาคม 2019</strong>: <a href="https://arxiv.org/abs/1910.13461" rel="nofollow">BART</a> และ <a href="https://arxiv.org/abs/1910.10683" rel="nofollow">T5</a>, โมเดลที่ผ่านการเทรนมาแล้วทั้งสองตัวที่ใช้สถาปัตยกรรมเดียวกันกับโมเดล Transformer ต้นฉบับ (โมเดลแรกที่ทำแบบนี้)</p></li> <li><p><strong>พฤษภาคม 2020</strong>, <a href="https://arxiv.org/abs/2005.14165" rel="nofollow">GPT-3</a>, โมเดล GPT-2 ที่ใหญ่ขึ้นไปอีกซึ่งสามารถทำงานได้หลายอย่างโดยไม่ต้องการการ fine-tune (หรือเรียกว่า <em>zero-shot learning</em>)</p></li>',Ge,j,Zt="ที่จริงแล้วยังมีโมเดลอื่น ๆ อีกมากนอกเหนือจากรายชื่อที่กล่าวไป ในที่นี้ต้องการที่จะเน้นย้ำอีกครั้งในส่วนของประเภทของโมเดล Transformer ซึ่งสามารถแบ่งได้ดังนี้:",Ve,B,Jt="<li>กลุ่ม GPT (หรือเรียกว่า โมเดล Transformer แบบ <em>auto-regressive</em>)</li> <li>กลุ่ม BERT (หรือเรียกว่า โมเดล Transformer แบบ <em>auto-encoding</em>)</li> <li>กลุ่ม BART/T5 (หรือเรียกว่า โมเดล Transformer แบบ <em>sequence-to-sequence</em>)</li>",Ue,R,en="โดยเราจะกล่าวถึงแต่ละกลุ่มในรายละเอียดกันภายหลัง",Ne,z,Ye,D,tn="โมเดล Transformer ที่กล่าวไปด้านบนทั้งหมด (GPT, BERT, BART, T5 เป็นต้น) ถูกเทรนให้เป็น<em>โมเดลบริบททางภาษา</em> (หรือเรียกว่า language model) นั่นคือโมเดลเหล่านี้ถูกเทรนผ่านข้อความดิบขนาดใหญ่เรียนรู้ด้วยตนเอง (หรือเรียกว่า self-supervised) การ self-supervised นั้นคือการเทรนแบบหนึ่งซึ่งเป้าหมายในการเทรนจะถูกคำนวณออกมาอัตโนมัติจาก input ที่ใส่เข้าไป ดังนั้นการเทรนแบบนี้จึงไม่จำเป็นต้อง label ข้อมูลเลย!",Se,I,nn="โมเดลประเภทนี้จะเข้าในภาษาที่ถูกเทรนมาในเชิงสถิติ แต่ในการใช้งานจริงอาจไม่มีประโยชน์เท่าไหร่ ดังนั้นโมเดลที่ผ่านการเทรนแบบนี้มาจึงถูกนำไปใช้ในกระบวนการ <em>transfer learning</em> ซึ่งก็คือโมเดลนี้จะถูกนำไป fine-tune ต่อในงานอื่นที่มี label จากมนุษย์",Fe,G,ln="ตัวอย่างงานดังกล่าวได้แก่ การเดาคำต่อไปหลังจากอ่านคำในประโยค <em>n</em> คำ สิ่งนี้เรียกว่า <em>causal language model</em> เนื่องจาก output ขึ้นอยู่กับ input ในอดีตและปัจจุบันเท่านั้น",Ke,T,sn='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/causal_modeling.svg" alt="Example of causal language modeling in which the next word from a sentence is predicted."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/causal_modeling-dark.svg" alt="Example of causal language modeling in which the next word from a sentence is predicted."/>',Oe,V,rn="อีกตัวอย่างหนึ่งได้แก่ การเติมคำในช่องว่าง (หรือเรียกว่า <em>masked language modeling</em>) เป็นการเดาคำที่เว้นว่างไว้ในประโยค โดยในที่นี้จะใช้คำว่า <code>[MASK]</code> แทนการเว้นว่าง",Qe,$,an='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/masked_modeling.svg" alt="Example of masked language modeling in which a masked word from a sentence is predicted."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/masked_modeling-dark.svg" alt="Example of masked language modeling in which a masked word from a sentence is predicted."/>',We,U,Xe,N,mn="ถ้าไม่นับพวกโมเดลแปลก ๆ อย่าง DistilBERT การจะได้มาซึ่งผลลัพธ์ที่ดีขึ้นก็ต้องเพิ่มขนาดโมเดลและขนาดข้อมูลที่นำมาเทรนโมเดล",Ze,C,fn='<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/model_parameters.png" alt="Number of parameters of recent Transformers models" width="90%"/>',Je,Y,on="ซึ่งในการเทรนโมเดลโดยเฉพาะโมเดลขนาดใหญ่ต้องการข้อมูลในการเทรนจำนวนมาก ดังนั้นการเทรนแต่ละครั้งจึงกินทั้งทรัพยากรเวลาและทรัพยากรในการคำนวณมากขึ้นไปอีก ซึ่งหมายถึงผลกระทบต่อสิ่งแวดล้อมดังแสดงในภาพด้านล่าง",et,_,un='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/carbon_footprint.svg" alt="The carbon footprint of a large language model."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/carbon_footprint-dark.svg" alt="The carbon footprint of a large language model."/>',tt,S,nt,F,pn="รูปภาพทำขึ้นเพื่อจะสื่อสารไปยังทีมพัฒนาต่าง ๆ ให้เห็นถึงผลกระทบต่อสิ่งแวดล้อมในการเทรนโมเดลขนาดใหญ่(มาก ๆ) และหากต้องการจะทดลองเพื่อหา hyperparameter ที่ดีสุด ผลกระทบย่อมเพิ่มขึ้นอีกเป็นเงาตามตัว",lt,K,gn="ลองนึกสภาพว่าหากแต่ละทีมวิจัย, กลุ่มการศึกษา, หรือบริษัทเอกชนใด ๆ ต้องการเทรนโมเดลซักโมเดลหนึ่ง โดยเริ่มต้นมาจากศูนย์ทุกครั้ง จะก่อให้เกิดค่าใช้จ่ายที่ไม่จำเป็นอย่างใหญ่หลวงมาก",it,O,cn="เพราะฉะนั้นการแบ่งปันโมเดลที่เทรนไว้แล้วจึงเป็นเรื่องสำคัญอย่างมาก การแบ่งปัน weight ของโมเดลและสร้างสิ่งต่าง ๆ ผ่าน weight ที่มีคนทำมาแล้วจะช่วยลดค่าใช้จ่ายและลดค่า carbon footprint โดยทั่วกัน",st,Q,rt,W,at,X,dn="<em>Pretraining</em> เป็นการเทรนโมเดลจากศูนย์ ซึ่งก็คือ weight ในโมเดลเริ่มต้นจากค่าสุ่ม และเริ่มเทรนโดยไม่มีความรู้อะไรเลย",mt,k,vn='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/pretraining.svg" alt="The pretraining of a language model is costly in both time and money."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/pretraining-dark.svg" alt="The pretraining of a language model is costly in both time and money."/>',ft,Z,hn="โดยมากแล้วการ pretrain จะใช้ข้อมูลขนาดใหญ่มาก ๆ ดังนั้นจึงต้องการข้อมูลภาษาขนาดใหญ่และใช้เวลาเทรนหลายสัปดาห์",ot,J,xn="<em>Fine-tuning</em> เป็นการเทรนโมเดล<strong>หลังจาก</strong>การ pretrain ซึ่งก็คือ นำ language model ที่ผ่านการ pretrain แล้ว มาเทรนเพิ่มเติมด้วยชุดข้อมูลที่เฉพาะเจาะจงในงานที่ต้องการ ว่าแต่ ทำไมไม่เทรนโมเดลสำหรับงานสุดท้ายไปทีเดียวเลยล่ะ? มันมีเหตุผลอยู่ ดังนี้:",ut,ee,Tn="<li>โมเดลที่ผ่านการ pretrain มาแล้วมีความเข้าใจความเหมือนบางอย่างในชุดข้อมูลที่นำมา fine-tune ดังนั้น การ fine-tune จึงสามารถนำความรู้ที่ได้จากการ pretrain มาใช้ประโยชน์ได้ทันที (เช่น โมเดลที่ pretrain มาแล้วทางด้าน NLP พอจะมีเข้าใจเบื้องต้นเกี่ยวกับภาษาที่เรากำลังใช้อยู่ในเชิงสถิติ)</li> <li>เนื่องจากโมเดลที่ผ่านการ pretrain มาแล้วนั้นถูกเทรนด้วยข้อมูลขนาดใหญ่มาก การใช้ข้อมูลเพียงเล็กน้อยในการ fine-tune ก็สามารถให้ผลเป็นที่พึงพอใจได้</li> <li>และด้วยเหตุผลเดียวกันนี้ เวลาและทรัพยากรที่ใช้เพื่อให้ได้ผลลัพธ์ที่ดีก็น้อยกว่าเช่นกัน</li>",pt,te,$n="ตัวอย่างเช่น เราสามารถใช้โมเดล pretrain ในภาษาอังกฤษและ fine-tune ด้วยข้อมูลภาษาจากใน arXiv (แหล่งข้อมูลค้นคว้าวิจัยทางด้านวิทยาศาสตร์) ทำให้ได้โมเดลที่เก่งทางด้านวิทยาศาสตร์และการวิจัย การ fine-tune นี้ต้องการข้อมูลเพียงเล็กน้อยเท่านั้น ความรู้ความเข้าใจทางภาษาของโมเดลถูกส่งต่อมาจากโมเดล pretrain ดังนั้นกระบวนการนี้จึงเรียกว่า <em>transfer learning</em>",gt,L,Cn='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/finetuning.svg" alt="The fine-tuning of a language model is cheaper than pretraining in both time and money."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/finetuning-dark.svg" alt="The fine-tuning of a language model is cheaper than pretraining in both time and money."/>',ct,ne,_n="ด้วยเหตุนี้การ fine-tune จึงใช้เวลา ข้อมูล ค่าใช้จ่าย และผลกระทบต่อสิ่งแวดล้อมน้อยกว่า รวมถึงว่าเราสามารถทดลองรูปแบบการ fine-tune ต่าง ๆ ได้ง่ายกว่าและเร็วกว่าอีกด้วย เนื่องจากการเทรนแบบนี้มีเงื่อนไขต่ำกว่าการเทรนเต็มรูปแบบ",dt,le,kn="กระบวนการดังกล่าวนี้ยังให้ผลลัพธ์ที่ดีกว่าการเทรนทุกอย่างจากศูนย์อีกด้วย(เว้นแต่ว่าคุณจะมีข้อมูลเยอะมากจริง ๆ) และนี่ก็เป็นอีกสาเหตุหนึ่งที่คุณควรใช้โมเดล pretrain ที่ใกล้เคียงกับงานที่คุณต้องการทำที่สุดและแค่ fine-tune มันออกมา",vt,ie,ht,se,Ln="ในส่วนนี้เราจะพูดถึงสถาปัตยกรรมทั่วไปของโมเดล Transformer ไม่ต้องกังวลไปหากคุณไม่เข้าใจเนื้อหาบางส่วนตอนนี้ เนื้อหาในส่วนหลังจะอธิบานเรื่องเหล่านี้ในรายละเอียดเพิ่มเติมให้",xt,re,Tt,ae,$t,me,bn="โมเดล Transformer ประกอบด้วยส่วนใหญ่ ๆ สองส่วน ได้แก่:",Ct,fe,Hn="<li><strong>ส่วนเข้ารหัส (หรือเรียกว่า Encoder) (ซ้าย)</strong>: encoder รับ input เข้ามาและสร้างตัวแทน input เหล่านั้น โดยตัวแทนเหล่านี้เรียกว่า feature นั่นหมายความว่าโมเดลจะปรับแต่งตัวเองให้เข้าใจ input ได้ในส่วนนี้</li> <li><strong>ส่วนถอดรหัส (หรือเรียกว่า Decoder) (ขวา)</strong>: decoder สร้าง output ออกมาเป็นข้อมูลลำดับ (หรือเรียกว่า sequence) โดยอาศัย feature และ input อื่น ๆ นั่นหมายถึงโมเดลปรับแต่งตัวเองให้สร้าง output ได้ในส่วนนี้</li>",_t,b,Mn='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_blocks.svg" alt="Architecture of a Transformers models"/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers_blocks-dark.svg" alt="Architecture of a Transformers models"/>',kt,oe,yn="แต่ละส่วนดังกล่าวสามารถแยกใช้อิสระต่อกันได้ ขึ้นอยู่กับว่าใช้ในงานอะไร เช่น:",Lt,ue,wn="<li><strong>โมเดลที่ใช้ encoder อย่างเดียว</strong>: สำหรับงานที่ต้องการให้เข้าใจ input เช่น การแยกหมวดหมู่ประโยคและการระบุชนิดของคำในประโยค</li> <li><strong>โมเดลที่ใช้ decoder อย่างเดียว</strong>: สำหรับงานในการสร้าง output ออกมา เช่น การสร้างข้อความ</li> <li><strong>โมเดลที่ใช้ทั้ง encoder และ decoder</strong> หรือ <strong>โมเดล sequence-to-sequence</strong> สำหรับงานในการสร้าง output ที่ต้องการ input เข้ามาด้วย เช่น การแปลภาษาหรือการสรุปความ</li>",bt,pe,Pn="ซึ่งเราจะเจาะลงไปในรายละเอียดของแต่ละสถาปัตยกรรมกันต่อในภายหลัง",Ht,ge,Mt,ce,En='ฟีเจอร์สำคัญของโมเดล Transformer ก็คือโมเดลนี้ถูกสร้างขึ้นมาจาก layer พิเศษที่ชื่อว่า <em>attention layer</em> ซึ่งเป็นสาเหตุที่ชื่อของงานวิจัยที่พูดถึงสถาปัตยกรรม Transformer เป็นครั้งแรกถูกตั้งชื่อว่า <a href="https://arxiv.org/abs/1706.03762" rel="nofollow">“Attention Is All You Need”</a> (Attention เป็นทุกอย่างให้เธอแล้ว) เราจะมาอธิบายเกี่ยวกับ attention layer ในรายละเอียดกันในช่วงหลังของคอร์สนี้ แต่สำหรับตอนนี้ คุณแค่เข้าใจว่า attention layer ทำหน้าที่บอกให้โมเดลให้ความสนใจ(attend)กับคำที่ตำแหน่งใดเป็นพิเศษจากประโยคส่งให้(รวมถึงบอกให้มองข้ามคำที่ตำแหน่งอื่นด้วย)เมื่อต้องการอธิบายความหมายของคำใด ๆ',yt,de,qn="เพื่อให้เห็นภาพมากขึ้น ลองนึกถึงงานในการแปลข้อความจากภาษาอังกฤษเป็นภาษาฝรั่งเศส ตัวอย่างเช่นประโยค “You like this course” โมเดลแปลภาษาต้องสนใจไปที่คำว่า “You” เพื่อให้ได้คำแปลของคำว่า “like” ที่เหมาะสม เนื่องจากในภาษาฝรั่งเศสคำว่า “like” นั้นเปลี่ยนรูปไปตามประธานในประโยค คำอื่น ๆ ที่เหลือในประโยคไม่ได้ส่งผลต่อการแปลคำว่า “like” เลย ในลักษณะเดียวกัน การแปลคำว่า “this” โมเดลต้องสนใจไปที่คำว่า “course” เนื่องจากคำว่า “this” ในภาษาฝรั่งเศสจะแปลออกมาว่าอย่างไรขึ้นอยู่กับว่าคำนั้นเป็นเพศชายหรือหญิง(ในบางภาษาคำแต่ละคำจะมีเพศกำกับไว้แม้ว่าจะไม่ได้เป็นสิ่งมีชีวิตที่มีเพศจริง ๆ ก็ตาม โดยไวยากรณ์ของภาษานั้น ๆ จะผันตามเพศของคำ) และแน่นอนคำอื่น ๆ ในประโยคไม่ได้ส่งผลต่อการแปลว่าคำว่า “this” เลย และเมื่อประโยคซับซ้อนมากยิ่งขึ้น(ส่งผลให้กฎไวยากรณ์ซับซ้อนมากยิ่งขึ้น) โมเดลยิ่งต้องให้ความสนใจไปยังคำที่ไกลออกไปในประโยคเพื่อแปลคำแต่ละคำให้เหมาะสม",wt,ve,An="แนวคิดเดียวกันนี้ใช้ได้กับงาน NLP อื่น ๆ นั่นคือ คำแต่ละคำมีความหมายในตัวมันเอง โดยความหมายเหล่านี้ส่งผลมาจากบริบทของคำ ซึ่งก็คือคำอื่นที่อยู่รอบ ๆ คำนั้น ๆ",Pt,he,jn="ตอนนี้คุณก็พอจะเข้าใจแล้วว่า attention layer คืออะไร ลองมาดูรายละเอียดของสถาปัตยกรรม Transformer กัน",Et,xe,qt,Te,Bn="ในตอนแรก Transformer ออกแบบมาเพื่องานแปลภาษา ระหว่างการเทรน ตัว encoder รับ input เป็นประโยคในภาษาหนึ่ง ในขณะที่ decoder เองก็รับประโยคเดียวกันในภาษาเป้าหมาย โดย attention layer ใน encoder สามารถใช้คำทั้งหมดในประโยคได้(เนื่องจากการแปลคำใด ๆ ขึ้นอยู่กับคำที่อาจจะอยู่ข้างหน้าหรือข้างหลังคำนั้น ๆ ก็ได้) ในขณะที่ decoder ต้องสร้างคำเป็นลำดับออกมาทีละคำ นั่นคือ decoder สามารถสนใจคำที่แปลออกมาก่อนได้เท่านั้น ตัวอย่างเช่น เมื่อเราแปลคำในภาษาเป้าหมายไป 3 คำแรก เราก็จะเอา 3 คำนี้ส่งไปยัง decoder รวมกับ input อื่นจาก encoder เพื่อทำนายคำที่ 4 ออกมา",At,$e,Rn="เพื่อให้กระบวนการเทรนเร็วมากขึ้น(เมื่อโมเดลเข้าถึงประโยคในภาษาเป้าหมายได้) decoder จะรับประโยคในภาษาเป้าหมายไปทั้งประโยค แต่แค่ไม่อนุญาตให้เข้าถึงคำที่กำลังจะแปลในอนาคต(ลองคิดดูว่าถ้ากำลังทำนายคำในประโยคเป้าหมายตำแหน่งที่ 2 แล้วโมเดลก็เข้าถึงคำในตำแหน่งที่ 2 ในประโยคเป้าหมายได้ ปัญหามันก็ดูจะแก้ได้ง่ายเกินไปแหละ) หรืออีกนัยหนึ่งคือ ขณะที่กำลังทำนายคำที่ 4 ในประโยค ตัว attention layer จะเข้าถึงได้แค่คำที่ตำแหน่ง 1 ถึง 3 เท่านั้น",jt,Ce,zn="รูปด้านล่างแสดงสถาปัตยกรรม Transformer โดย encoder อยู่ด้านซ้ายและ decoder อยู่ด้านขวา:",Bt,H,Dn='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers.svg" alt="Architecture of a Transformers models"/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter1/transformers-dark.svg" alt="Architecture of a Transformers models"/>',Rt,_e,In="หมายเหตุไว้หน่อยว่า attention layer แรกใน decoder สนใจไปที่ input (ในอดีต)ทั้งหมดของ decoder แต่ attention layer ที่สองใช้ output ของ encoder ด้วย นั่นคือ มันสามารถเข้าถึงประโยค input ทั้งหมดเพื่อทำนายคำในปัจจุบันได้ ส่วนนี้มีประโยชน์มากเนื่องจากแต่ละภาษาก็มีหลักไวยากรณ์ในการวางตำแหน่งคำที่ต่างกัน หรือบริบทที่ถูกกล่าวถึงทีหลังในประโยคอาจส่งผลต่อการหาคำแปลที่เหมาะสมของคำในปัจจุบัน",zt,ke,Gn="<em>attention mask</em> เป็นอีกส่วนประกอบที่ใช้ได้กับทั้ง encoder และ decoder เพื่อป้องกันไม่ให้โมเดลสนใจไปยังคำบางคำ ตัวอย่างเช่น คำพิเศษบางคำที่เอามาเติมในประโยคให้ประโยคใน input ที่ความยาวเท่ากับเวลาประมวลผลประโยคพร้อมกัน",Dt,Le,It,be,Vn="ดังที่เราได้เรียนรู้โมเดล Transformer มาในคอร์สนี้ คุณจะเห็นคำที่ความหมายคล้าย ๆ กัน อย่างเช่น <em>architecture</em> และ <em>checkpoint</em> รวมถึง <em>model</em> อย่างไรก็ตาม คำแหล่านี้มีความหมายแตกต่างกันเล็กน้อย ดังนี้:",Gt,He,Un="<li><strong>Architecture</strong>: เป็นโครงสร้างของโมเดล นั่นคือ เป็นการกำหนดนิยามของ layer (เช่น บอกว่า มีทั้งหมดกี่ layer และ layer แต่ละ layer เป็นประเภทใด) รวมถึงบอกว่า layer นั้น ๆ จะมีกระบวนการการทำอะไรบ้าง</li> <li><strong>Checkpoints</strong>: เป็นเพียงการเซฟ weight หรือค่าคงที่ของ parameter ในแต่ละ layer ที่จะเอาไปใช้ใน architecture ที่กำหนดได้</li> <li><strong>Model</strong>: เป็นคำกว้าง ๆ ไม่ได้ระบุความหมายเฉพาะเจาะจงเหมือนคำว่า “architecture” หรือ “checkpoint” ซึ่งจริง ๆ อาจจะหมายถึงคำใดก็ได้ แต่ในคอร์สนี้จะใช้คำว่า <em>architecture</em> หรือ <em>checkpoint</em> ไปเลยเพื่อหลีกเลี่ยงความสับสน</li>",Vt,Me,Nn="ยกตัวอย่างง่าย ๆ เช่น BERT เป็น architecture ในขณะที่ <code>bert-base-cased</code> เป็น checkpoint ที่เซฟ weight จากการเทรน BERT ที่ทีม Google ปล่อยออกมาตอนเปิดให้ใช้งานครั้งแรก โดยเราสามารถเรียกสิ่งเหล่านี้ว่า”โมเดล BERT” หรือ “โมเดล <code>bert-base-cased</code>” ก็ถือว่าถูกต้องทั้งคู่",Ut,ye,Nt,Pe,Yt;return M=new v({props:{title:"Transformer ทำงานยังไง?",local:"transformer-ทำงานยงไง",headingTag:"h1"}}),y=new Zn({props:{chapter:1,classNames:"absolute z-10 right-0 top-0"}}),P=new v({props:{title:"ประวัติของ Transformer เบื้องต้น",local:"ประวตของ-transformer-เบองตน",headingTag:"h2"}}),z=new v({props:{title:"Transformers ก็คือโมเดลบริบททางภาษาแบบหนึ่งนั่นแหละ",local:"transformers-กคอโมเดลบรบททางภาษาแบบหนงนนแหละ",headingTag:"h2"}}),U=new v({props:{title:"Transformers มัน ใหญ่ มาก",local:"transformers-มน-ใหญ-มาก",headingTag:"h2"}}),S=new St({props:{id:"ftWlj4FBHTg"}}),Q=new v({props:{title:"Transfer Learning",local:"transfer-learning",headingTag:"h2"}}),W=new St({props:{id:"BqqfQnyjmgg"}}),ie=new v({props:{title:"สถาปัตยกรรมทั่วไป",local:"สถาปตยกรรมทวไป",headingTag:"h2"}}),re=new St({props:{id:"H39Z_720T5s"}}),ae=new v({props:{title:"เริ่มต้น",local:"เรมตน",headingTag:"h2"}}),ge=new v({props:{title:"Attention layers",local:"attention-layers",headingTag:"h2"}}),xe=new v({props:{title:"สถาปัตยกรรมต้นฉบับ",local:"สถาปตยกรรมตนฉบบ",headingTag:"h2"}}),Le=new v({props:{title:"สถาปัตยกรรม(หรือเรียกว่า Architecture) vs. จุดเซฟ(หรือเรียกว่า checkpoints)",local:"สถาปตยกรรมหรอเรยกวา-architecture-vs-จดเซฟหรอเรยกวา-checkpoints",headingTag:"h2"}}),ye=new Jn({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter1/4.mdx"}}),{c(){h=r("meta"),Ee=i(),we=r("p"),qe=i(),f(M.$$.fragment),Ae=i(),f(y.$$.fragment),je=i(),w=r("p"),w.textContent=Kt,Be=i(),f(P.$$.fragment),Re=i(),E=r("p"),E.textContent=Ot,ze=i(),x=r("div"),x.innerHTML=Qt,De=i(),q=r("p"),q.innerHTML=Wt,Ie=i(),A=r("ul"),A.innerHTML=Xt,Ge=i(),j=r("p"),j.textContent=Zt,Ve=i(),B=r("ul"),B.innerHTML=Jt,Ue=i(),R=r("p"),R.textContent=en,Ne=i(),f(z.$$.fragment),Ye=i(),D=r("p"),D.innerHTML=tn,Se=i(),I=r("p"),I.innerHTML=nn,Fe=i(),G=r("p"),G.innerHTML=ln,Ke=i(),T=r("div"),T.innerHTML=sn,Oe=i(),V=r("p"),V.innerHTML=rn,Qe=i(),$=r("div"),$.innerHTML=an,We=i(),f(U.$$.fragment),Xe=i(),N=r("p"),N.textContent=mn,Ze=i(),C=r("div"),C.innerHTML=fn,Je=i(),Y=r("p"),Y.textContent=on,et=i(),_=r("div"),_.innerHTML=un,tt=i(),f(S.$$.fragment),nt=i(),F=r("p"),F.textContent=pn,lt=i(),K=r("p"),K.textContent=gn,it=i(),O=r("p"),O.textContent=cn,st=i(),f(Q.$$.fragment),rt=i(),f(W.$$.fragment),at=i(),X=r("p"),X.innerHTML=dn,mt=i(),k=r("div"),k.innerHTML=vn,ft=i(),Z=r("p"),Z.textContent=hn,ot=i(),J=r("p"),J.innerHTML=xn,ut=i(),ee=r("ul"),ee.innerHTML=Tn,pt=i(),te=r("p"),te.innerHTML=$n,gt=i(),L=r("div"),L.innerHTML=Cn,ct=i(),ne=r("p"),ne.textContent=_n,dt=i(),le=r("p"),le.textContent=kn,vt=i(),f(ie.$$.fragment),ht=i(),se=r("p"),se.textContent=Ln,xt=i(),f(re.$$.fragment),Tt=i(),f(ae.$$.fragment),$t=i(),me=r("p"),me.textContent=bn,Ct=i(),fe=r("ul"),fe.innerHTML=Hn,_t=i(),b=r("div"),b.innerHTML=Mn,kt=i(),oe=r("p"),oe.textContent=yn,Lt=i(),ue=r("ul"),ue.innerHTML=wn,bt=i(),pe=r("p"),pe.textContent=Pn,Ht=i(),f(ge.$$.fragment),Mt=i(),ce=r("p"),ce.innerHTML=En,yt=i(),de=r("p"),de.textContent=qn,wt=i(),ve=r("p"),ve.textContent=An,Pt=i(),he=r("p"),he.textContent=jn,Et=i(),f(xe.$$.fragment),qt=i(),Te=r("p"),Te.textContent=Bn,At=i(),$e=r("p"),$e.textContent=Rn,jt=i(),Ce=r("p"),Ce.textContent=zn,Bt=i(),H=r("div"),H.innerHTML=Dn,Rt=i(),_e=r("p"),_e.textContent=In,zt=i(),ke=r("p"),ke.innerHTML=Gn,Dt=i(),f(Le.$$.fragment),It=i(),be=r("p"),be.innerHTML=Vn,Gt=i(),He=r("ul"),He.innerHTML=Un,Vt=i(),Me=r("p"),Me.innerHTML=Nn,Ut=i(),f(ye.$$.fragment),Nt=i(),Pe=r("p"),this.h()},l(e){const t=Wn("svelte-u9bgzb",document.head);h=a(t,"META",{name:!0,content:!0}),t.forEach(n),Ee=s(e),we=a(e,"P",{}),Yn(we).forEach(n),qe=s(e),o(M.$$.fragment,e),Ae=s(e),o(y.$$.fragment,e),je=s(e),w=a(e,"P",{"data-svelte-h":!0}),m(w)!=="svelte-18eolf6"&&(w.textContent=Kt),Be=s(e),o(P.$$.fragment,e),Re=s(e),E=a(e,"P",{"data-svelte-h":!0}),m(E)!=="svelte-u0u6wy"&&(E.textContent=Ot),ze=s(e),x=a(e,"DIV",{class:!0,"data-svelte-h":!0}),m(x)!=="svelte-u8zu2n"&&(x.innerHTML=Qt),De=s(e),q=a(e,"P",{"data-svelte-h":!0}),m(q)!=="svelte-wrx2xq"&&(q.innerHTML=Wt),Ie=s(e),A=a(e,"UL",{"data-svelte-h":!0}),m(A)!=="svelte-qmj6tv"&&(A.innerHTML=Xt),Ge=s(e),j=a(e,"P",{"data-svelte-h":!0}),m(j)!=="svelte-ubqyjc"&&(j.textContent=Zt),Ve=s(e),B=a(e,"UL",{"data-svelte-h":!0}),m(B)!=="svelte-e05puu"&&(B.innerHTML=Jt),Ue=s(e),R=a(e,"P",{"data-svelte-h":!0}),m(R)!=="svelte-k1gz4c"&&(R.textContent=en),Ne=s(e),o(z.$$.fragment,e),Ye=s(e),D=a(e,"P",{"data-svelte-h":!0}),m(D)!=="svelte-mq3zc2"&&(D.innerHTML=tn),Se=s(e),I=a(e,"P",{"data-svelte-h":!0}),m(I)!=="svelte-14n4qcx"&&(I.innerHTML=nn),Fe=s(e),G=a(e,"P",{"data-svelte-h":!0}),m(G)!=="svelte-wjecrm"&&(G.innerHTML=ln),Ke=s(e),T=a(e,"DIV",{class:!0,"data-svelte-h":!0}),m(T)!=="svelte-lvew4p"&&(T.innerHTML=sn),Oe=s(e),V=a(e,"P",{"data-svelte-h":!0}),m(V)!=="svelte-mrx81q"&&(V.innerHTML=rn),Qe=s(e),$=a(e,"DIV",{class:!0,"data-svelte-h":!0}),m($)!=="svelte-1r8x2dd"&&($.innerHTML=an),We=s(e),o(U.$$.fragment,e),Xe=s(e),N=a(e,"P",{"data-svelte-h":!0}),m(N)!=="svelte-5g5nqw"&&(N.textContent=mn),Ze=s(e),C=a(e,"DIV",{class:!0,"data-svelte-h":!0}),m(C)!=="svelte-5uz5bp"&&(C.innerHTML=fn),Je=s(e),Y=a(e,"P",{"data-svelte-h":!0}),m(Y)!=="svelte-1qd3bh5"&&(Y.textContent=on),et=s(e),_=a(e,"DIV",{class:!0,"data-svelte-h":!0}),m(_)!=="svelte-1a8euan"&&(_.innerHTML=un),tt=s(e),o(S.$$.fragment,e),nt=s(e),F=a(e,"P",{"data-svelte-h":!0}),m(F)!=="svelte-zp2mp2"&&(F.textContent=pn),lt=s(e),K=a(e,"P",{"data-svelte-h":!0}),m(K)!=="svelte-1i8mvn"&&(K.textContent=gn),it=s(e),O=a(e,"P",{"data-svelte-h":!0}),m(O)!=="svelte-jkn7i"&&(O.textContent=cn),st=s(e),o(Q.$$.fragment,e),rt=s(e),o(W.$$.fragment,e),at=s(e),X=a(e,"P",{"data-svelte-h":!0}),m(X)!=="svelte-1i06tx6"&&(X.innerHTML=dn),mt=s(e),k=a(e,"DIV",{class:!0,"data-svelte-h":!0}),m(k)!=="svelte-152v0kx"&&(k.innerHTML=vn),ft=s(e),Z=a(e,"P",{"data-svelte-h":!0}),m(Z)!=="svelte-vpye13"&&(Z.textContent=hn),ot=s(e),J=a(e,"P",{"data-svelte-h":!0}),m(J)!=="svelte-19cj7by"&&(J.innerHTML=xn),ut=s(e),ee=a(e,"UL",{"data-svelte-h":!0}),m(ee)!=="svelte-1lttv5z"&&(ee.innerHTML=Tn),pt=s(e),te=a(e,"P",{"data-svelte-h":!0}),m(te)!=="svelte-84wsy2"&&(te.innerHTML=$n),gt=s(e),L=a(e,"DIV",{class:!0,"data-svelte-h":!0}),m(L)!=="svelte-1ngyuh1"&&(L.innerHTML=Cn),ct=s(e),ne=a(e,"P",{"data-svelte-h":!0}),m(ne)!=="svelte-16vp9t9"&&(ne.textContent=_n),dt=s(e),le=a(e,"P",{"data-svelte-h":!0}),m(le)!=="svelte-76xw0z"&&(le.textContent=kn),vt=s(e),o(ie.$$.fragment,e),ht=s(e),se=a(e,"P",{"data-svelte-h":!0}),m(se)!=="svelte-kkml71"&&(se.textContent=Ln),xt=s(e),o(re.$$.fragment,e),Tt=s(e),o(ae.$$.fragment,e),$t=s(e),me=a(e,"P",{"data-svelte-h":!0}),m(me)!=="svelte-1f02pun"&&(me.textContent=bn),Ct=s(e),fe=a(e,"UL",{"data-svelte-h":!0}),m(fe)!=="svelte-82aa3p"&&(fe.innerHTML=Hn),_t=s(e),b=a(e,"DIV",{class:!0,"data-svelte-h":!0}),m(b)!=="svelte-l70qs1"&&(b.innerHTML=Mn),kt=s(e),oe=a(e,"P",{"data-svelte-h":!0}),m(oe)!=="svelte-1t0gel4"&&(oe.textContent=yn),Lt=s(e),ue=a(e,"UL",{"data-svelte-h":!0}),m(ue)!=="svelte-1veud0o"&&(ue.innerHTML=wn),bt=s(e),pe=a(e,"P",{"data-svelte-h":!0}),m(pe)!=="svelte-1jfyyk9"&&(pe.textContent=Pn),Ht=s(e),o(ge.$$.fragment,e),Mt=s(e),ce=a(e,"P",{"data-svelte-h":!0}),m(ce)!=="svelte-18x2ctb"&&(ce.innerHTML=En),yt=s(e),de=a(e,"P",{"data-svelte-h":!0}),m(de)!=="svelte-rm83wc"&&(de.textContent=qn),wt=s(e),ve=a(e,"P",{"data-svelte-h":!0}),m(ve)!=="svelte-68uhfs"&&(ve.textContent=An),Pt=s(e),he=a(e,"P",{"data-svelte-h":!0}),m(he)!=="svelte-gigsds"&&(he.textContent=jn),Et=s(e),o(xe.$$.fragment,e),qt=s(e),Te=a(e,"P",{"data-svelte-h":!0}),m(Te)!=="svelte-7fuvnb"&&(Te.textContent=Bn),At=s(e),$e=a(e,"P",{"data-svelte-h":!0}),m($e)!=="svelte-fkupd0"&&($e.textContent=Rn),jt=s(e),Ce=a(e,"P",{"data-svelte-h":!0}),m(Ce)!=="svelte-1czeppo"&&(Ce.textContent=zn),Bt=s(e),H=a(e,"DIV",{class:!0,"data-svelte-h":!0}),m(H)!=="svelte-14wvpqf"&&(H.innerHTML=Dn),Rt=s(e),_e=a(e,"P",{"data-svelte-h":!0}),m(_e)!=="svelte-i7r50x"&&(_e.textContent=In),zt=s(e),ke=a(e,"P",{"data-svelte-h":!0}),m(ke)!=="svelte-1q8est3"&&(ke.innerHTML=Gn),Dt=s(e),o(Le.$$.fragment,e),It=s(e),be=a(e,"P",{"data-svelte-h":!0}),m(be)!=="svelte-zbic8e"&&(be.innerHTML=Vn),Gt=s(e),He=a(e,"UL",{"data-svelte-h":!0}),m(He)!=="svelte-1i3jq28"&&(He.innerHTML=Un),Vt=s(e),Me=a(e,"P",{"data-svelte-h":!0}),m(Me)!=="svelte-19mi9u8"&&(Me.innerHTML=Nn),Ut=s(e),o(ye.$$.fragment,e),Nt=s(e),Pe=a(e,"P",{}),Yn(Pe).forEach(n),this.h()},h(){d(h,"name","hf:doc:metadata"),d(h,"content",tl),d(x,"class","flex justify-center"),d(T,"class","flex justify-center"),d($,"class","flex justify-center"),d(C,"class","flex justify-center"),d(_,"class","flex justify-center"),d(k,"class","flex justify-center"),d(L,"class","flex justify-center"),d(b,"class","flex justify-center"),d(H,"class","flex justify-center")},m(e,t){Xn(document.head,h),l(e,Ee,t),l(e,we,t),l(e,qe,t),u(M,e,t),l(e,Ae,t),u(y,e,t),l(e,je,t),l(e,w,t),l(e,Be,t),u(P,e,t),l(e,Re,t),l(e,E,t),l(e,ze,t),l(e,x,t),l(e,De,t),l(e,q,t),l(e,Ie,t),l(e,A,t),l(e,Ge,t),l(e,j,t),l(e,Ve,t),l(e,B,t),l(e,Ue,t),l(e,R,t),l(e,Ne,t),u(z,e,t),l(e,Ye,t),l(e,D,t),l(e,Se,t),l(e,I,t),l(e,Fe,t),l(e,G,t),l(e,Ke,t),l(e,T,t),l(e,Oe,t),l(e,V,t),l(e,Qe,t),l(e,$,t),l(e,We,t),u(U,e,t),l(e,Xe,t),l(e,N,t),l(e,Ze,t),l(e,C,t),l(e,Je,t),l(e,Y,t),l(e,et,t),l(e,_,t),l(e,tt,t),u(S,e,t),l(e,nt,t),l(e,F,t),l(e,lt,t),l(e,K,t),l(e,it,t),l(e,O,t),l(e,st,t),u(Q,e,t),l(e,rt,t),u(W,e,t),l(e,at,t),l(e,X,t),l(e,mt,t),l(e,k,t),l(e,ft,t),l(e,Z,t),l(e,ot,t),l(e,J,t),l(e,ut,t),l(e,ee,t),l(e,pt,t),l(e,te,t),l(e,gt,t),l(e,L,t),l(e,ct,t),l(e,ne,t),l(e,dt,t),l(e,le,t),l(e,vt,t),u(ie,e,t),l(e,ht,t),l(e,se,t),l(e,xt,t),u(re,e,t),l(e,Tt,t),u(ae,e,t),l(e,$t,t),l(e,me,t),l(e,Ct,t),l(e,fe,t),l(e,_t,t),l(e,b,t),l(e,kt,t),l(e,oe,t),l(e,Lt,t),l(e,ue,t),l(e,bt,t),l(e,pe,t),l(e,Ht,t),u(ge,e,t),l(e,Mt,t),l(e,ce,t),l(e,yt,t),l(e,de,t),l(e,wt,t),l(e,ve,t),l(e,Pt,t),l(e,he,t),l(e,Et,t),u(xe,e,t),l(e,qt,t),l(e,Te,t),l(e,At,t),l(e,$e,t),l(e,jt,t),l(e,Ce,t),l(e,Bt,t),l(e,H,t),l(e,Rt,t),l(e,_e,t),l(e,zt,t),l(e,ke,t),l(e,Dt,t),u(Le,e,t),l(e,It,t),l(e,be,t),l(e,Gt,t),l(e,He,t),l(e,Vt,t),l(e,Me,t),l(e,Ut,t),u(ye,e,t),l(e,Nt,t),l(e,Pe,t),Yt=!0},p:Fn,i(e){Yt||(p(M.$$.fragment,e),p(y.$$.fragment,e),p(P.$$.fragment,e),p(z.$$.fragment,e),p(U.$$.fragment,e),p(S.$$.fragment,e),p(Q.$$.fragment,e),p(W.$$.fragment,e),p(ie.$$.fragment,e),p(re.$$.fragment,e),p(ae.$$.fragment,e),p(ge.$$.fragment,e),p(xe.$$.fragment,e),p(Le.$$.fragment,e),p(ye.$$.fragment,e),Yt=!0)},o(e){g(M.$$.fragment,e),g(y.$$.fragment,e),g(P.$$.fragment,e),g(z.$$.fragment,e),g(U.$$.fragment,e),g(S.$$.fragment,e),g(Q.$$.fragment,e),g(W.$$.fragment,e),g(ie.$$.fragment,e),g(re.$$.fragment,e),g(ae.$$.fragment,e),g(ge.$$.fragment,e),g(xe.$$.fragment,e),g(Le.$$.fragment,e),g(ye.$$.fragment,e),Yt=!1},d(e){e&&(n(Ee),n(we),n(qe),n(Ae),n(je),n(w),n(Be),n(Re),n(E),n(ze),n(x),n(De),n(q),n(Ie),n(A),n(Ge),n(j),n(Ve),n(B),n(Ue),n(R),n(Ne),n(Ye),n(D),n(Se),n(I),n(Fe),n(G),n(Ke),n(T),n(Oe),n(V),n(Qe),n($),n(We),n(Xe),n(N),n(Ze),n(C),n(Je),n(Y),n(et),n(_),n(tt),n(nt),n(F),n(lt),n(K),n(it),n(O),n(st),n(rt),n(at),n(X),n(mt),n(k),n(ft),n(Z),n(ot),n(J),n(ut),n(ee),n(pt),n(te),n(gt),n(L),n(ct),n(ne),n(dt),n(le),n(vt),n(ht),n(se),n(xt),n(Tt),n($t),n(me),n(Ct),n(fe),n(_t),n(b),n(kt),n(oe),n(Lt),n(ue),n(bt),n(pe),n(Ht),n(Mt),n(ce),n(yt),n(de),n(wt),n(ve),n(Pt),n(he),n(Et),n(qt),n(Te),n(At),n($e),n(jt),n(Ce),n(Bt),n(H),n(Rt),n(_e),n(zt),n(ke),n(Dt),n(It),n(be),n(Gt),n(He),n(Vt),n(Me),n(Ut),n(Nt),n(Pe)),n(h),c(M,e),c(y,e),c(P,e),c(z,e),c(U,e),c(S,e),c(Q,e),c(W,e),c(ie,e),c(re,e),c(ae,e),c(ge,e),c(xe,e),c(Le,e),c(ye,e)}}}const tl='{"title":"Transformer ทำงานยังไง?","local":"transformer-ทำงานยงไง","sections":[{"title":"ประวัติของ Transformer เบื้องต้น","local":"ประวตของ-transformer-เบองตน","sections":[],"depth":2},{"title":"Transformers ก็คือโมเดลบริบททางภาษาแบบหนึ่งนั่นแหละ","local":"transformers-กคอโมเดลบรบททางภาษาแบบหนงนนแหละ","sections":[],"depth":2},{"title":"Transformers มัน ใหญ่ มาก","local":"transformers-มน-ใหญ-มาก","sections":[],"depth":2},{"title":"Transfer Learning","local":"transfer-learning","sections":[],"depth":2},{"title":"สถาปัตยกรรมทั่วไป","local":"สถาปตยกรรมทวไป","sections":[],"depth":2},{"title":"เริ่มต้น","local":"เรมตน","sections":[],"depth":2},{"title":"Attention layers","local":"attention-layers","sections":[],"depth":2},{"title":"สถาปัตยกรรมต้นฉบับ","local":"สถาปตยกรรมตนฉบบ","sections":[],"depth":2},{"title":"สถาปัตยกรรม(หรือเรียกว่า Architecture) vs. จุดเซฟ(หรือเรียกว่า checkpoints)","local":"สถาปตยกรรมหรอเรยกวา-architecture-vs-จดเซฟหรอเรยกวา-checkpoints","sections":[],"depth":2}],"depth":1}';function nl(Ft){return Kn(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class ml extends On{constructor(h){super(),Qn(this,h,nl,el,Sn,{})}}export{ml as component};

Xet Storage Details

Size:
47.3 kB
·
Xet hash:
7542f251b07c2ba0aaea38c09022a00adc5da2ddacd5fde66e2cf8e11a17aebc

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.