Buckets:

rtrm's picture
download
raw
49 kB
import{s as vs,o as Cs,n as js}from"../chunks/scheduler.37c15a92.js";import{S as _s,i as zs,g as a,s as l,r as $,A as Js,h as p,f as n,c as i,j as hs,u as c,x as o,k as Ke,y as Us,a as s,v as b,t as u,b as Hs,d as f,w as k,p as Is}from"../chunks/index.2bf4358c.js";import{T as Ls}from"../chunks/Tip.363c041f.js";import{Y as Oe}from"../chunks/Youtube.1e50a667.js";import{C as y}from"../chunks/CodeBlock.4e987730.js";import{C as Ts}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as As}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as h,E as Ps}from"../chunks/getInferenceSnippets.39afd8fb.js";function Zs(g){let r,M;return r=new Ts({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/section4_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter2/section4_tf.ipynb"}]}}),{c(){$(r.$$.fragment)},l(m){c(r.$$.fragment,m)},m(m,d){b(r,m,d),M=!0},i(m){M||(f(r.$$.fragment,m),M=!0)},o(m){u(r.$$.fragment,m),M=!1},d(m){k(r,m)}}}function Ds(g){let r,M;return r=new Ts({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/section4_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter2/section4_pt.ipynb"}]}}),{c(){$(r.$$.fragment)},l(m){c(r.$$.fragment,m)},m(m,d){b(r,m,d),M=!0},i(m){M||(f(r.$$.fragment,m),M=!0)},o(m){u(r.$$.fragment,m),M=!1},d(m){k(r,m)}}}function Vs(g){let r,M="เหมือนกับ <code>TFAutoModel, </code>AutoTokenizer` จะทำการดึงเอาคลาส tokenizer ที่เหมาะสมที่อยู่ใน library โดยอ้างอิงกับชื่อของ checkpoint และสามารถใช้กับ checkpoint ใดก็ได้:";return{c(){r=a("p"),r.innerHTML=M},l(m){r=p(m,"P",{"data-svelte-h":!0}),o(r)!=="svelte-18aoyab"&&(r.innerHTML=M)},m(m,d){s(m,r,d)},d(m){m&&n(r)}}}function Es(g){let r,M="เหมือนกับ <code>AutoModel, </code>AutoTokenizer` จะทำการดึงเอาคลาส tokenizer ที่เหมาะสมที่อยู่ใน library โดยอ้างอิงกับชื่อของ checkpoint และสามารถใช้กับ checkpoint ใดก็ได้:";return{c(){r=a("p"),r.innerHTML=M},l(m){r=p(m,"P",{"data-svelte-h":!0}),o(r)!=="svelte-1u997bp"&&(r.innerHTML=M)},m(m,d){s(m,r,d)},d(m){m&&n(r)}}}function Ws(g){let r,M="✏️ <strong>ลองดูสิ!</strong> ทำซ้ำสองขั้นตอนสุดท้าย(tokenization และแปลงไปเป็น input IDs) กับข้อความที่เราใช้เป็นอินพุตใน section 2 (“I’ve been waiting for a HuggingFace course my whole life.” และ “I hate this so much!“) และลองดูว่าคุณได้ input IDs เดียวกันกับที่เราได้ก่อนหน้านี้ไหม!";return{c(){r=a("p"),r.innerHTML=M},l(m){r=p(m,"P",{"data-svelte-h":!0}),o(r)!=="svelte-hwtvwk"&&(r.innerHTML=M)},m(m,d){s(m,r,d)},p:js,d(m){m&&n(r)}}}function Qs(g){let r,M,m,d,v,et,J,tt,x,w,qe,U,nt,H,jn="Tokenizers เป็นหนึ่งในส่วนประกอบหลักของ NLP pipeline โดยมีจุดประสงค์เดียวคือ เพื่อแปลงข้อความไปเป็นข้อมูลที่โมเดลสามารถประมวลผลได้ โมเดลสามารถประมวผลได้เพียงแค่ตัวเลขเท่านั้น ดังนั้น tokenizers จึงจำเป็นต้องแปลงข้อความของเราไปเป็นข้อมูลตัวเลข ใน section นี้ เราจะมาลองดูกันว่ามีเกิดอะไรขึ้นบ้างใน tokenization pipeline",st,I,_n="ในงาน NLP ข้อมูลโดยทั่วไปแล้วจะเป็นข้อความ นี่เป็นตัวอย่างของข้อความดังกล่าว:",lt,L,it,A,zn="แต่อย่างไรก็ตาม โมเดลสามารถประมวผลได้เพียงแค่ตัวเลขเท่านั้น ดังนั้นเราจำเป็นต้องหาทางแปลงข้อความดิบไปเป็นตัวเลข นั่นคือสิ่งที่ tokenizer ทำ และก็มีหลายวิธีมากในการทำ เป้าหมายก็คือ หาตัวแทน(representation)ที่มีความหมายที่สุด - หมายความว่า สิ่งที่โมเดลจะเข้าใจได้มากที่สุด - และ ถ้าเป็นไปได้ เป็นตัวแทนที่มีขนาดเล็กที่สุด",at,P,Jn="ลองมาดูตัวอย่างของ tokenization algorithms และพยายามตอบคำถามบางคำถามที่คุณอาจจะมีเกี่ยวกับ tokenization",pt,Z,rt,D,ot,V,Un="Tokenizer ประเภทแรกที่เรานึกถึงคือ <em>word-based</em> มันติดตั้งและใช้งานง่ายมากโดยมีกฏเพียงไม่กี่ข้อและมันก็ให้ผลลัพธ์ที่ดีทีเดียว ยกตัวอย่างเช่น ในรูปภาพด้านล่างนี้ เป้าหมายก็คือการแยกข้อความออกเป็นคำๆ และหาตัวแทนที่เป็นตัวเลขของแต่ละคำ:",mt,C,Hn='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/word_based_tokenization.svg" alt="An example of word-based tokenization."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/word_based_tokenization-dark.svg" alt="An example of word-based tokenization."/>',ut,E,In="วิธีการในการแยกข้อความนั้นมีหลายวิธีแตกต่างกันไป ยกตัวอย่างเช่น เราสามารถใช้ ช่องว่าง(whitespace) ในการแยกข้อความขอเป็นคำๆ โดยใช้ฟังก์ชัน <code>split()</code> ของ Python:",ft,W,$t,Q,ct,B,Ln="แล้วก็มี tokenizers สำหรับแยกคำอีกหลายแบบที่มีกฏเพิ่มเติมสำหรับ เครื่องหมายวรรคตอน(punctuation) ถ้าเราใช้ tokenizer ประเภทนี้ เราจะได้กลุ่มของคำศัพท์(“vocabularies”) ที่ค่อนข้างใหญ่มาก ซึ่งคำศัพท์จะถูกนิยามโดยจำนวน tokens อิสระทั้งหมดที่เรามีในคลังข้อมูล(corpus) ของเรา",bt,G,An="แต่ละคำจะได้ ID โดยเริ่มจาก 0 และเพิ่มขึ้นเท่ากับขนาดของคำศัพท์ โดยโมเดลจะใช้ IDs เหล่านี้ในการระบุตัวตนของแต่ละคำ",kt,R,Pn="ถ้าเราต้องการที่จะให้ครอบคลุมคำทั้งหมดในหนึ่งภาษาด้วย word-based tokenizer เราจำเป็นต้องมีตัวระบุตัวตนสำหรับแต่ละคำในภาษาๆนั้นๆ ซึ่งจะทำให้มีการสร้าง tokens จำนวนมหาศาล ยกตัวอย่างเช่น ในภาษาอังกฤษมีคำทั้งหมด 500,000 คำ ดังนั้นการที่จะสร้างความเชื่อมโยงระหว่างแต่ละคำกับ ID เราจำเป็นที่จะต้องจำ ID ทั้งหลายเหล่านั้น นอกจากนี้แล้ว คำอย่างเช่น “dog” จะมีค่าที่ต่างจากคำเช่น “dogs” และโมเดลจะไม่มีทางรู้เลยว่าค่าว่า “dog” และ “dogs” นั้นคล้ายคลึงกัน: มันจะจำแนกสองคำนี้เป็นคำที่ไม่มีความเกี่ยวข้องกัน และคำอื่นๆก็จะเป็นเช่นเดียวกัน เช่นคำว่า “run” และ “running” ซึ่งโมเดลก็จะไม่มองว่าเป็นคำคล้ายๆกัน",Mt,S,Zn="สุดท้ายแล้ว เราจำเป็นต้องมี Token เฉพาะสำหรับแทนค่าคำต่างๆที่ไม่อยู่กลุ่มคำศัพท์ของเรา ซึ่งสิ่งนี้เรียกว่า “unknown” token ที่โดยทั่วไปแล้วจะมีค่าเป็น ”[UNK]” หรือ ”<unk>” และมันจะเป็นสัญญาณที่ไม่ดีเท่าไหร่ถ้าคุณเห็น tokenizer ผลิต tokens เหล่านี้ออกมาเยอะๆ เนื่องจากมันไม่สามารถที่จะหาค่าที่สมเหตุสมผลมาแทนคำๆนั้นได้และคุณก็จะสูญเสียข้อมูลไปตามรายทางเรื่อยๆ เป้าหมายเมื่อเราสร้างกลุ่มคำศัพท์ คือ ทำยังไงก็ได้ให้ Tokenizers สร้าง unknown token ให้น้อยที่สุด",dt,X,Dn="วิธีการหนึ่งที่จะลดจำนวนของ unknown tokens ได้ก็คือ การลงลึกไปอีกหนึ่งขั้น โดยใช้ <em>character-based</em> tokenizer",yt,F,gt,q,xt,N,Vn="Character-based tokenizers จะแบ่งข้อความออกเป็นตัวอักษร แทนการแบ่งเป็นคำ โดยมีประโยชน์หลักๆ สอง อย่าง:",wt,Y,En="<li>กลุ่มของคำศัพท์จะเล็กกว่ามาก</li> <li>มี tokens ที่อยู่นอกกลุ่มคำศัพท์(unknown) น้อยกว่ามาก เนื่องจากคำทุกคำสามารถสร้างได้จากกลุ่มของตัวอักษร</li>",ht,K,Wn="แต่ก็มีคำถามเกี่ยวกับ ช่องว่าง(spaces) และ เครื่องหมายวรรคตอน(punctuation):",Tt,j,Qn='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/character_based_tokenization.svg" alt="An example of character-based tokenization."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/character_based_tokenization-dark.svg" alt="An example of character-based tokenization."/>',vt,O,Bn="วิธีการนี้ก็ไม่ใช่วิธีการที่ดีทีสุดเช่นกัน เนื่องจากค่าที่ได้จะขึ้นอยู่กับตัวอักษรแทนที่จะเป็นคำ บางคนอาจจะบอกว่า มันไม่บ่งบอกความหมาย: แต่ละตัวอักษรไม่ได้มีความหมายอะไรมากมายในตัวมันเอง แต่กลับกันคำกลับบ่งบอกความหมายมากกว่า แต่อย่างไรก็ตามมันก็ขึ้นอยู่กับแต่ละภาษา; เช่น แต่ละตัวอักษรในภาษาจีนนั้นมีความหมายมากกว่าตัวอักษรในภาษาละติน",Ct,ee,Gn="อีกหนึ่งสิ่งที่ควรพิจารณาก็คือเราจะได้ tokens จำนวนมหาศาลที่โมเดลของเราจะต้องประมวลผล: แต่ในทางตรงกันข้าม คำหนึ่งคำจะมีแค่หนึ่ง token ถ้าใช้ word-based tokenizer แต่มันจะกลายเป็น 10 หรือมากกว่านั้นเมื่อเราแปลงเป็นตัวอักษร",jt,te,Rn="เพื่อให้ได้สิ่งที่เป็นประโยชน์ที่สุดจากทั้งสองแบบ เราสามารถสร้างเทคนิคที่สามที่รวมเอาสองวิธีเข้าด้วยกัน: <em>subword tokenization</em>",_t,ne,zt,se,Jt,le,Sn="อัลกอลิธึม Subword tokenization อยู่บนแนวคิดที่ว่า คำที่ใช้บ่อย ไม่ควรที่จะถูกแบ่งออกเป็นคำย่อยเล็กๆ แต่คำที่ไม่ค่อยได้ใช้ควรที่จะถูกแบ่งออกเป็นคำย่อยๆ ที่มีความหมาย",Ut,ie,Xn="ยกตัวอย่างเช่น “annoyingly” อาจจะเป็นคำที่ไม่ค่อยถูกใช้บ่อยนัก ดังนั้นมันสามารถที่จะถูกแบ่งย่อยเป็น “annoying” และ “ly” สองคำนี้มีความเป็นไปได้ที่เจอได้บ่อยเมื่อมันเป็นคำย่อยเดี่ยวๆ ในขณะเดียวกัน ความหมายของ “annoyingly” ก็ยังคงอยู่ โดยเป็นความหมายร่วมของ “annoying” และ “ly”",Ht,ae,Fn="ตัวอย่างนี้แสดงวิธีการที่อัลกอลิธึม subword tokenization ทำการแปลงประโยค “Let’s do tokenization!” ว่าทำอย่างไร:",It,_,qn='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/bpe_subword.svg" alt="A subword tokenization algorithm."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/bpe_subword-dark.svg" alt="A subword tokenization algorithm."/>',Lt,pe,Nn="ท้ายที่สุดแล้ว คำย่อยเหล่านี้จะให้ความหมายเชิงความหมาย(semantic meaning) มากกว่า, ในตัวอย่างข้างต้น “tokenization” ถูกแบ่งออกเป็น “token” และ “ization”, เป็น สอง tokens ที่มีความหมายเชิงความหมายพร้อมทั้งทำให้ประหยัดเนื้อที่ (มีแค่ 2 tokens เท่านั้นที่จะใช้แทนค่าคำยาวๆ) นี่จะทำให้เราสามารถครอบคลุมคำต่างๆได้ด้วยกลุ่มของคำศัพท์เล็กๆเท่านั้น และแทบไม่มี unknown tokens",At,re,Yn="วิธีการนี้เป็นประโยชน์อย่างยิ่งในภาษารูปคำติดต่อ(agglutinative languages) อย่างเช่น ภาษาตุรกี(Turkish) ที่คุณสามารถสร้างคำที่ยาวและซับซ้อนได้ด้วยการต่อคำย่อยๆหลายคำๆเข้าด้วยกัน",Pt,oe,Zt,me,Kn="ไม่น่าแปลกใจเลยที่จะมีอีกหลากหลายเทคนิค ถ้าจะเอ่ยบางชื่อ:",Dt,ue,On="<li>Byte-level BPE, เหมือนที่ใช้ใน GPT-2</li> <li>WordPiece, เหมือนที่ใช้ใน BERT</li> <li>SentencePiece or Unigram, เหมือนที่ใช้ในหลายๆโมเดลที่เป็นโมเดลสำหรับหลายๆ ภาษา(multilingual models)</li>",Vt,fe,es="ถึงตรงนี้คุณน่าจะมีความรู้เพียงพอว่า tokenizers ทำงานอย่างไร เพื่อเริ่มใช้งาน API",Et,$e,Wt,ce,ts="การโหลดและการบันทึก tokenizers นั้นง่ายพอๆกับการโหลดและการบันทึกโมเดล โดยทั่วไปแล้วมันจะใช้สองวิธี: <code>from_pretrained()</code> และ <code>save_pretrained()</code> สองวิธีการนี้จะโหลด หรือ บันทึกอัลกอลิธึมที่ใช้โดย tokenizer (คล้ายๆกับ <em>สถาปัตยกรรม</em> ของโมเดล) และ กลุ่มคำศัพท์ของมัน (คล้ายๆ กับ <em>weights</em> ของโมเดล)",Qt,be,ns="โหลด BERT tokenizer ที่ผ่านการเทรนมาแล้วด้วย checkpoint เดียวกันกับ BERT สามารถทำได้เหมือนกับการโหลดโมเดล ยกเว้น เราใช้คลาส <code>BertTokenizer</code>:",Bt,ke,Gt,Ne,Me,Rt,de,ss="ตอนนี้เราสามารถใช้ tokenizer เหมือนที่แสดงใน section ที่แล้ว:",St,ye,Xt,ge,Ft,xe,ls="การบันทึก tokenizer ก็เหมือนกับการบันทึกโมเดล:",qt,we,Nt,he,is='เราจะพูดเพิ่มเติมเกี่ยวกับ <code>token_type_ids</code> ใน <a href="/course/chapter3">Chapter 3</a>, และจะอธิบายเกี่ยวกับ <code>attention_mask</code> ในภายหลัง ในขั้นแรกนี้เรามาดูกันว่า <code>input_ids</code> นั้นถูกสร้างขึ้นมาอย่างไร ซึ่งการที่จะทำเช่นนี้ เราจำเป็นที่จะต้องดูวิธีระหว่างกลางของ tokenizer',Yt,Te,Kt,ve,Ot,Ce,as="การแปลงข้อความไปเป็นตัวเลขนั้นเรียกอีกอย่างว่า <em>encoding</em> การเข้ารหัส(Encoding) นั้นสามารถทำได้ด้วยกระบวนการที่ประกอบด้วย 2 ขั้นตอน: tokenization และตามด้วยการแปลงไปเป็น input IDs",en,je,ps="อย่างที่เราเห็นมาก่อนหน้านี้ ขั้นตอนแรกก็คือการแบ่งข้อความออกเป็นคำ (หรือส่วนของคำ, เครื่องหมายวรรคตอน เป็นต้น) เหล่านี้ปกติจะถูกเรียกว่า <em>tokens</em> มีหลายกฏเกณฑ์ที่ใช้ในการควบคุมกระบวนนี้ ซึ่งนั้นก็เป็นเหตุผลว่าทำไมเราถึงจำเป็นต้องสร้าง tokenizer โดยใช้ชื่อของโมเดล ก็เพื่อให้มั่นใจว่าเราใช้กฏเกณฑ์เดียวกันกับที่เราใช้ตอนที่โมเดลนั้นผ่านการเทรนมาก่อนหน้านี้",tn,_e,rs="ขั้นตอนที่สองก็คือการแปลง tokens เหล่านั้นไปเป็นตัวเลข ซึ่งเราจึงจะสามารถสร้าง tensor จากมันได้และใส่เข้าไปยังโมเดลได้ ในการทำเช่นนี้ tokenizer จะมี <em>vocabulary</em> ซึ่งเป็นส่วนที่เราดาวน์โหลดมาแล้วตอนที่เราสร้าง tokenizer ด้วยวิธีการ <code>from_pretrained()</code> เช่นเดียวกัน เราจำเป็นต้องใช้คำศัพท์เหมือนกับที่ใช้ตอนโมเดลนั้นเทรนมา",nn,ze,os="เพื่อให้เข้าใจสองขั้นตอนนี้มากยิ่งขึ้น เราจะมาดูแต่ละขั้นตอนแยกกัน เราจะใช้วิธีการบางวิธีที่ทำบางส่วนของ tokenization pipeline แยกกันเพื่อที่จะแสดงให้คุณดูว่าผลลัพธ์ระหว่างกลาง(intermediate) ของทั้งสองขั้นตอนนั้นเป็นอย่างไร แต่ในทางปฏิบัติ คุณควรจะประมวลผลข้อมูลอินพุตของคุณโดยเรียกใช้ tokenizer ตรงๆ(เหมือนที่แสดงใน section 2)",sn,Je,ln,Ue,ms="กระบวนการ tokenization นั้นทำได้โดยใช้ <code>tokenize()</code> ของ tokenizer:",an,He,pn,Ie,us="ผลลัพธ์ของวิธีนี้ คือ ลิสท์ของกลุ่มของตัวอักษร(strings) หรือ tokens:",rn,Le,on,Ae,fs="tokenizer นี้คือ subword tokenizer: มันจะแบ่งคำไปเรื่อยๆจนกว่าจะได้ tokens ที่สามารถแทนค่าได้ด้วยคำศัพท์(vocabulary) ของมันเอง ซึ่งนั้นก็เหมือนกับกรณีที่คำว่า <code>transformer</code>ถูกแบ่งออกเป็น 2 tokens: <code>transform</code> และ <code>##er</code>",mn,Pe,un,Ze,$s="การแปลงไปเป็น input IDs นั้นจะถูกจัดการโดย <code>convert_tokens_to_ids()</code> ที่เป็นเมธอดของ tokenizer:",fn,De,$n,Ve,cn,Ee,cs="ผลลัพธ์เหล่านี้ เมื่อทำการแปลงไปเป็น tensor ที่เหมาะสมของ framework นั้นๆ แล้ว มันสามารถถูกนำไปใช้เป็นอินพุตของโมเดลเหมือนที่เราเห็นก่อนหน้าในนี้ในบทนี้",bn,z,kn,We,Mn,Qe,bs="<em>การถอดรหัส(Decoding)</em> ก็จะเป็นกระบวนการในทางตรงกันข้าม จากดัชนีคำศัพท์(vocabulary indices) เราต้องการที่จะได้กลุ่มของตัวอักษร(string) ซึ่งสามารถทำได้ด้วยวิธี <code>decode()</code> ดังนี้:",dn,Be,yn,Ge,gn,Re,ks="วิธี <code>decode</code> ไม่ได้ทำแค่การแปลงดัชนี(indices) ไปเป็น token เท่านั้น แต่ยังทำการรวม tokens ต่างๆที่เป็นส่วนหนึ่งของคำเดียวกันเพื่อสร้างประโยคที่สามารถอ่านได้ กระบวนการเช่นนี้จะเป็นประโยชน์อย่างมากเมื่อเราใช้โมเดลสำหรับทำนายข้อความใหม่(ไม่ว่าจะเป็นข้อความที่สร้างจาก prompt หรือปัญหาประเภท sequence-to-sequence เช่น การแปล(translation) หรือ การสรุปใจความสำคัญ(summarization))",xn,Se,Ms="ถึงตรงนี้คุณน่าจะเข้าใจกระบวนการเล็กๆ น้อยๆ ต่างๆ ที่ tokenizer สามารถทำได้: tokenization, การแปลงไปเป็น IDs, และการแปลง IDs กลับมาเป็นคำ แต่อย่างไรก็ตาม เราก็แค่เพิ่งจะขุดแค่ปลายของภูเขาน้ำแข็ง ใน section ต่อไป เราจะใช้วิธีการของเราไปจนถึงลิมิตของมันและดูว่าเราจะแก้ปัญหาอย่างไร",wn,Xe,hn,Ye,Tn;v=new As({props:{fw:g[0]}}),J=new h({props:{title:"Tokenizers",local:"tokenizers",headingTag:"h1"}});const ds=[Ds,Zs],Fe=[];function ys(e,t){return e[0]==="pt"?0:1}x=ys(g),w=Fe[x]=ds[x](g),U=new Oe({props:{id:"VFp38yj8h3A"}}),L=new y({props:{code:"SmltJTIwSGVuc29uJTIwd2FzJTIwYSUyMHB1cHBldGVlcg==",highlighted:'Jim Henson was <span class="hljs-selector-tag">a</span> puppeteer',wrap:!1}}),Z=new h({props:{title:"เน้นที่คำ (Word-based)",local:"เนนทคำ-word-based",headingTag:"h2"}}),D=new Oe({props:{id:"nhJxYji1aho"}}),W=new y({props:{code:"dG9rZW5pemVkX3RleHQlMjAlM0QlMjAlMjJKaW0lMjBIZW5zb24lMjB3YXMlMjBhJTIwcHVwcGV0ZWVyJTIyLnNwbGl0KCklMEFwcmludCh0b2tlbml6ZWRfdGV4dCk=",highlighted:`tokenized_text = <span class="hljs-string">&quot;Jim Henson was a puppeteer&quot;</span>.split()
<span class="hljs-built_in">print</span>(tokenized_text)`,wrap:!1}}),Q=new y({props:{code:"JTVCJ0ppbSclMkMlMjAnSGVuc29uJyUyQyUyMCd3YXMnJTJDJTIwJ2EnJTJDJTIwJ3B1cHBldGVlciclNUQ=",highlighted:'[<span class="hljs-string">&#x27;Jim&#x27;</span>, <span class="hljs-string">&#x27;Henson&#x27;</span>, <span class="hljs-string">&#x27;was&#x27;</span>, <span class="hljs-string">&#x27;a&#x27;</span>, <span class="hljs-string">&#x27;puppeteer&#x27;</span>]',wrap:!1}}),F=new h({props:{title:"เน้นที่ตัวอักษร(Character-based)",local:"เนนทตวอกษรcharacter-based",headingTag:"h2"}}),q=new Oe({props:{id:"ssLq_EK2jLE"}}),ne=new h({props:{title:"คำย่อย(Subword) tokenization",local:"คำยอยsubword-tokenization",headingTag:"h2"}}),se=new Oe({props:{id:"zHvTiHr506c"}}),oe=new h({props:{title:"และอื่นๆ !",local:"และอนๆ-",headingTag:"h3"}}),$e=new h({props:{title:"การโหลดและการบันทึก",local:"การโหลดและการบนทก",headingTag:"h2"}}),ke=new y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRUb2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBCZXJ0VG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertTokenizer
tokenizer = BertTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)`,wrap:!1}});function gs(e,t){return e[0]==="pt"?Es:Vs}let vn=gs(g),T=vn(g);return Me=new y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",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>)`,wrap:!1}}),ye=new y({props:{code:"dG9rZW5pemVyKCUyMlVzaW5nJTIwYSUyMFRyYW5zZm9ybWVyJTIwbmV0d29yayUyMGlzJTIwc2ltcGxlJTIyKQ==",highlighted:'tokenizer(<span class="hljs-string">&quot;Using a Transformer network is simple&quot;</span>)',wrap:!1}}),ge=new y({props:{code:"JTdCJ2lucHV0X2lkcyclM0ElMjAlNUIxMDElMkMlMjA3OTkzJTJDJTIwMTcwJTJDJTIwMTEzMDMlMkMlMjAxMjAwJTJDJTIwMjQ0MyUyQyUyMDExMTAlMkMlMjAzMDE0JTJDJTIwMTAyJTVEJTJDJTBBJTIwJ3Rva2VuX3R5cGVfaWRzJyUzQSUyMCU1QjAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RCUyQyUwQSUyMCdhdHRlbnRpb25fbWFzayclM0ElMjAlNUIxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElNUQlN0Q=",highlighted:`{<span class="hljs-string">&#x27;input_ids&#x27;</span>: [<span class="hljs-number">101</span>, <span class="hljs-number">7993</span>, <span class="hljs-number">170</span>, <span class="hljs-number">11303</span>, <span class="hljs-number">1200</span>, <span class="hljs-number">2443</span>, <span class="hljs-number">1110</span>, <span class="hljs-number">3014</span>, <span class="hljs-number">102</span>],
<span class="hljs-string">&#x27;token_type_ids&#x27;</span>: [<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>],
<span class="hljs-string">&#x27;attention_mask&#x27;</span>: [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>]}`,wrap:!1}}),we=new y({props:{code:"dG9rZW5pemVyLnNhdmVfcHJldHJhaW5lZCglMjJkaXJlY3Rvcnlfb25fbXlfY29tcHV0ZXIlMjIp",highlighted:'tokenizer.save_pretrained(<span class="hljs-string">&quot;directory_on_my_computer&quot;</span>)',wrap:!1}}),Te=new h({props:{title:"การเข้ารหัส(Encoding)",local:"การเขารหสencoding",headingTag:"h2"}}),ve=new Oe({props:{id:"Yffk5aydLzg"}}),Je=new h({props:{title:"Tokenization",local:"tokenization",headingTag:"h3"}}),He=new y({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBJTBBc2VxdWVuY2UlMjAlM0QlMjAlMjJVc2luZyUyMGElMjBUcmFuc2Zvcm1lciUyMG5ldHdvcmslMjBpcyUyMHNpbXBsZSUyMiUwQXRva2VucyUyMCUzRCUyMHRva2VuaXplci50b2tlbml6ZShzZXF1ZW5jZSklMEElMEFwcmludCh0b2tlbnMp",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>)
sequence = <span class="hljs-string">&quot;Using a Transformer network is simple&quot;</span>
tokens = tokenizer.tokenize(sequence)
<span class="hljs-built_in">print</span>(tokens)`,wrap:!1}}),Le=new y({props:{code:"JTVCJ1VzaW5nJyUyQyUyMCdhJyUyQyUyMCd0cmFuc2Zvcm0nJTJDJTIwJyUyMyUyM2VyJyUyQyUyMCduZXR3b3JrJyUyQyUyMCdpcyclMkMlMjAnc2ltcGxlJyU1RA==",highlighted:'[<span class="hljs-string">&#x27;Using&#x27;</span>, <span class="hljs-string">&#x27;a&#x27;</span>, <span class="hljs-string">&#x27;transform&#x27;</span>, <span class="hljs-string">&#x27;##er&#x27;</span>, <span class="hljs-string">&#x27;network&#x27;</span>, <span class="hljs-string">&#x27;is&#x27;</span>, <span class="hljs-string">&#x27;simple&#x27;</span>]',wrap:!1}}),Pe=new h({props:{title:"จาก tokens ไปเป็น input IDs",local:"จาก-tokens-ไปเปน-input-ids",headingTag:"h3"}}),De=new y({props:{code:"aWRzJTIwJTNEJTIwdG9rZW5pemVyLmNvbnZlcnRfdG9rZW5zX3RvX2lkcyh0b2tlbnMpJTBBJTBBcHJpbnQoaWRzKQ==",highlighted:`ids = tokenizer.convert_tokens_to_ids(tokens)
<span class="hljs-built_in">print</span>(ids)`,wrap:!1}}),Ve=new y({props:{code:"JTVCNzk5MyUyQyUyMDE3MCUyQyUyMDExMzAzJTJDJTIwMTIwMCUyQyUyMDI0NDMlMkMlMjAxMTEwJTJDJTIwMzAxNCU1RA==",highlighted:'[<span class="hljs-number">7993</span>, <span class="hljs-number">170</span>, <span class="hljs-number">11303</span>, <span class="hljs-number">1200</span>, <span class="hljs-number">2443</span>, <span class="hljs-number">1110</span>, <span class="hljs-number">3014</span>]',wrap:!1}}),z=new Ls({props:{$$slots:{default:[Ws]},$$scope:{ctx:g}}}),We=new h({props:{title:"การถอดรหัส(Decoding)",local:"การถอดรหสdecoding",headingTag:"h2"}}),Be=new y({props:{code:"ZGVjb2RlZF9zdHJpbmclMjAlM0QlMjB0b2tlbml6ZXIuZGVjb2RlKCU1Qjc5OTMlMkMlMjAxNzAlMkMlMjAxMTMwMyUyQyUyMDEyMDAlMkMlMjAyNDQzJTJDJTIwMTExMCUyQyUyMDMwMTQlNUQpJTBBcHJpbnQoZGVjb2RlZF9zdHJpbmcp",highlighted:`decoded_string = tokenizer.decode([<span class="hljs-number">7993</span>, <span class="hljs-number">170</span>, <span class="hljs-number">11303</span>, <span class="hljs-number">1200</span>, <span class="hljs-number">2443</span>, <span class="hljs-number">1110</span>, <span class="hljs-number">3014</span>])
<span class="hljs-built_in">print</span>(decoded_string)`,wrap:!1}}),Ge=new y({props:{code:"J1VzaW5nJTIwYSUyMFRyYW5zZm9ybWVyJTIwbmV0d29yayUyMGlzJTIwc2ltcGxlJw==",highlighted:'<span class="hljs-string">&#x27;Using a Transformer network is simple&#x27;</span>',wrap:!1}}),Xe=new Ps({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter2/4.mdx"}}),{c(){r=a("meta"),M=l(),m=a("p"),d=l(),$(v.$$.fragment),et=l(),$(J.$$.fragment),tt=l(),w.c(),qe=l(),$(U.$$.fragment),nt=l(),H=a("p"),H.textContent=jn,st=l(),I=a("p"),I.textContent=_n,lt=l(),$(L.$$.fragment),it=l(),A=a("p"),A.textContent=zn,at=l(),P=a("p"),P.textContent=Jn,pt=l(),$(Z.$$.fragment),rt=l(),$(D.$$.fragment),ot=l(),V=a("p"),V.innerHTML=Un,mt=l(),C=a("div"),C.innerHTML=Hn,ut=l(),E=a("p"),E.innerHTML=In,ft=l(),$(W.$$.fragment),$t=l(),$(Q.$$.fragment),ct=l(),B=a("p"),B.textContent=Ln,bt=l(),G=a("p"),G.textContent=An,kt=l(),R=a("p"),R.textContent=Pn,Mt=l(),S=a("p"),S.textContent=Zn,dt=l(),X=a("p"),X.innerHTML=Dn,yt=l(),$(F.$$.fragment),gt=l(),$(q.$$.fragment),xt=l(),N=a("p"),N.textContent=Vn,wt=l(),Y=a("ul"),Y.innerHTML=En,ht=l(),K=a("p"),K.textContent=Wn,Tt=l(),j=a("div"),j.innerHTML=Qn,vt=l(),O=a("p"),O.textContent=Bn,Ct=l(),ee=a("p"),ee.textContent=Gn,jt=l(),te=a("p"),te.innerHTML=Rn,_t=l(),$(ne.$$.fragment),zt=l(),$(se.$$.fragment),Jt=l(),le=a("p"),le.textContent=Sn,Ut=l(),ie=a("p"),ie.textContent=Xn,Ht=l(),ae=a("p"),ae.textContent=Fn,It=l(),_=a("div"),_.innerHTML=qn,Lt=l(),pe=a("p"),pe.textContent=Nn,At=l(),re=a("p"),re.textContent=Yn,Pt=l(),$(oe.$$.fragment),Zt=l(),me=a("p"),me.textContent=Kn,Dt=l(),ue=a("ul"),ue.innerHTML=On,Vt=l(),fe=a("p"),fe.textContent=es,Et=l(),$($e.$$.fragment),Wt=l(),ce=a("p"),ce.innerHTML=ts,Qt=l(),be=a("p"),be.innerHTML=ns,Bt=l(),$(ke.$$.fragment),Gt=l(),T.c(),Ne=l(),$(Me.$$.fragment),Rt=l(),de=a("p"),de.textContent=ss,St=l(),$(ye.$$.fragment),Xt=l(),$(ge.$$.fragment),Ft=l(),xe=a("p"),xe.textContent=ls,qt=l(),$(we.$$.fragment),Nt=l(),he=a("p"),he.innerHTML=is,Yt=l(),$(Te.$$.fragment),Kt=l(),$(ve.$$.fragment),Ot=l(),Ce=a("p"),Ce.innerHTML=as,en=l(),je=a("p"),je.innerHTML=ps,tn=l(),_e=a("p"),_e.innerHTML=rs,nn=l(),ze=a("p"),ze.textContent=os,sn=l(),$(Je.$$.fragment),ln=l(),Ue=a("p"),Ue.innerHTML=ms,an=l(),$(He.$$.fragment),pn=l(),Ie=a("p"),Ie.textContent=us,rn=l(),$(Le.$$.fragment),on=l(),Ae=a("p"),Ae.innerHTML=fs,mn=l(),$(Pe.$$.fragment),un=l(),Ze=a("p"),Ze.innerHTML=$s,fn=l(),$(De.$$.fragment),$n=l(),$(Ve.$$.fragment),cn=l(),Ee=a("p"),Ee.textContent=cs,bn=l(),$(z.$$.fragment),kn=l(),$(We.$$.fragment),Mn=l(),Qe=a("p"),Qe.innerHTML=bs,dn=l(),$(Be.$$.fragment),yn=l(),$(Ge.$$.fragment),gn=l(),Re=a("p"),Re.innerHTML=ks,xn=l(),Se=a("p"),Se.textContent=Ms,wn=l(),$(Xe.$$.fragment),hn=l(),Ye=a("p"),this.h()},l(e){const t=Js("svelte-u9bgzb",document.head);r=p(t,"META",{name:!0,content:!0}),t.forEach(n),M=i(e),m=p(e,"P",{}),hs(m).forEach(n),d=i(e),c(v.$$.fragment,e),et=i(e),c(J.$$.fragment,e),tt=i(e),w.l(e),qe=i(e),c(U.$$.fragment,e),nt=i(e),H=p(e,"P",{"data-svelte-h":!0}),o(H)!=="svelte-13fr7rw"&&(H.textContent=jn),st=i(e),I=p(e,"P",{"data-svelte-h":!0}),o(I)!=="svelte-1yklrv5"&&(I.textContent=_n),lt=i(e),c(L.$$.fragment,e),it=i(e),A=p(e,"P",{"data-svelte-h":!0}),o(A)!=="svelte-vaiscf"&&(A.textContent=zn),at=i(e),P=p(e,"P",{"data-svelte-h":!0}),o(P)!=="svelte-7a8dxh"&&(P.textContent=Jn),pt=i(e),c(Z.$$.fragment,e),rt=i(e),c(D.$$.fragment,e),ot=i(e),V=p(e,"P",{"data-svelte-h":!0}),o(V)!=="svelte-1t37dd2"&&(V.innerHTML=Un),mt=i(e),C=p(e,"DIV",{class:!0,"data-svelte-h":!0}),o(C)!=="svelte-1qoje79"&&(C.innerHTML=Hn),ut=i(e),E=p(e,"P",{"data-svelte-h":!0}),o(E)!=="svelte-1bg4410"&&(E.innerHTML=In),ft=i(e),c(W.$$.fragment,e),$t=i(e),c(Q.$$.fragment,e),ct=i(e),B=p(e,"P",{"data-svelte-h":!0}),o(B)!=="svelte-14p8z8h"&&(B.textContent=Ln),bt=i(e),G=p(e,"P",{"data-svelte-h":!0}),o(G)!=="svelte-1quuufy"&&(G.textContent=An),kt=i(e),R=p(e,"P",{"data-svelte-h":!0}),o(R)!=="svelte-1p3s3ht"&&(R.textContent=Pn),Mt=i(e),S=p(e,"P",{"data-svelte-h":!0}),o(S)!=="svelte-fn0u8m"&&(S.textContent=Zn),dt=i(e),X=p(e,"P",{"data-svelte-h":!0}),o(X)!=="svelte-jooiyk"&&(X.innerHTML=Dn),yt=i(e),c(F.$$.fragment,e),gt=i(e),c(q.$$.fragment,e),xt=i(e),N=p(e,"P",{"data-svelte-h":!0}),o(N)!=="svelte-oyjlaf"&&(N.textContent=Vn),wt=i(e),Y=p(e,"UL",{"data-svelte-h":!0}),o(Y)!=="svelte-1ahrro1"&&(Y.innerHTML=En),ht=i(e),K=p(e,"P",{"data-svelte-h":!0}),o(K)!=="svelte-xjbn0i"&&(K.textContent=Wn),Tt=i(e),j=p(e,"DIV",{class:!0,"data-svelte-h":!0}),o(j)!=="svelte-cwc099"&&(j.innerHTML=Qn),vt=i(e),O=p(e,"P",{"data-svelte-h":!0}),o(O)!=="svelte-ul7kat"&&(O.textContent=Bn),Ct=i(e),ee=p(e,"P",{"data-svelte-h":!0}),o(ee)!=="svelte-vbxf79"&&(ee.textContent=Gn),jt=i(e),te=p(e,"P",{"data-svelte-h":!0}),o(te)!=="svelte-2z6o16"&&(te.innerHTML=Rn),_t=i(e),c(ne.$$.fragment,e),zt=i(e),c(se.$$.fragment,e),Jt=i(e),le=p(e,"P",{"data-svelte-h":!0}),o(le)!=="svelte-1x0fmc7"&&(le.textContent=Sn),Ut=i(e),ie=p(e,"P",{"data-svelte-h":!0}),o(ie)!=="svelte-1vcibwj"&&(ie.textContent=Xn),Ht=i(e),ae=p(e,"P",{"data-svelte-h":!0}),o(ae)!=="svelte-1q11mcr"&&(ae.textContent=Fn),It=i(e),_=p(e,"DIV",{class:!0,"data-svelte-h":!0}),o(_)!=="svelte-l1uqeh"&&(_.innerHTML=qn),Lt=i(e),pe=p(e,"P",{"data-svelte-h":!0}),o(pe)!=="svelte-ibsu0i"&&(pe.textContent=Nn),At=i(e),re=p(e,"P",{"data-svelte-h":!0}),o(re)!=="svelte-y49ml1"&&(re.textContent=Yn),Pt=i(e),c(oe.$$.fragment,e),Zt=i(e),me=p(e,"P",{"data-svelte-h":!0}),o(me)!=="svelte-6mkdeh"&&(me.textContent=Kn),Dt=i(e),ue=p(e,"UL",{"data-svelte-h":!0}),o(ue)!=="svelte-1u3kg1e"&&(ue.innerHTML=On),Vt=i(e),fe=p(e,"P",{"data-svelte-h":!0}),o(fe)!=="svelte-10xog8x"&&(fe.textContent=es),Et=i(e),c($e.$$.fragment,e),Wt=i(e),ce=p(e,"P",{"data-svelte-h":!0}),o(ce)!=="svelte-1sfaw74"&&(ce.innerHTML=ts),Qt=i(e),be=p(e,"P",{"data-svelte-h":!0}),o(be)!=="svelte-1g19tdo"&&(be.innerHTML=ns),Bt=i(e),c(ke.$$.fragment,e),Gt=i(e),T.l(e),Ne=i(e),c(Me.$$.fragment,e),Rt=i(e),de=p(e,"P",{"data-svelte-h":!0}),o(de)!=="svelte-tog4ia"&&(de.textContent=ss),St=i(e),c(ye.$$.fragment,e),Xt=i(e),c(ge.$$.fragment,e),Ft=i(e),xe=p(e,"P",{"data-svelte-h":!0}),o(xe)!=="svelte-egajpu"&&(xe.textContent=ls),qt=i(e),c(we.$$.fragment,e),Nt=i(e),he=p(e,"P",{"data-svelte-h":!0}),o(he)!=="svelte-ixrv53"&&(he.innerHTML=is),Yt=i(e),c(Te.$$.fragment,e),Kt=i(e),c(ve.$$.fragment,e),Ot=i(e),Ce=p(e,"P",{"data-svelte-h":!0}),o(Ce)!=="svelte-6rc5i3"&&(Ce.innerHTML=as),en=i(e),je=p(e,"P",{"data-svelte-h":!0}),o(je)!=="svelte-1oud93s"&&(je.innerHTML=ps),tn=i(e),_e=p(e,"P",{"data-svelte-h":!0}),o(_e)!=="svelte-52d4mb"&&(_e.innerHTML=rs),nn=i(e),ze=p(e,"P",{"data-svelte-h":!0}),o(ze)!=="svelte-1c6iup7"&&(ze.textContent=os),sn=i(e),c(Je.$$.fragment,e),ln=i(e),Ue=p(e,"P",{"data-svelte-h":!0}),o(Ue)!=="svelte-1l5eegm"&&(Ue.innerHTML=ms),an=i(e),c(He.$$.fragment,e),pn=i(e),Ie=p(e,"P",{"data-svelte-h":!0}),o(Ie)!=="svelte-t4a02y"&&(Ie.textContent=us),rn=i(e),c(Le.$$.fragment,e),on=i(e),Ae=p(e,"P",{"data-svelte-h":!0}),o(Ae)!=="svelte-1oc0p1i"&&(Ae.innerHTML=fs),mn=i(e),c(Pe.$$.fragment,e),un=i(e),Ze=p(e,"P",{"data-svelte-h":!0}),o(Ze)!=="svelte-1khdmh6"&&(Ze.innerHTML=$s),fn=i(e),c(De.$$.fragment,e),$n=i(e),c(Ve.$$.fragment,e),cn=i(e),Ee=p(e,"P",{"data-svelte-h":!0}),o(Ee)!=="svelte-xkyo9j"&&(Ee.textContent=cs),bn=i(e),c(z.$$.fragment,e),kn=i(e),c(We.$$.fragment,e),Mn=i(e),Qe=p(e,"P",{"data-svelte-h":!0}),o(Qe)!=="svelte-1o6i9gy"&&(Qe.innerHTML=bs),dn=i(e),c(Be.$$.fragment,e),yn=i(e),c(Ge.$$.fragment,e),gn=i(e),Re=p(e,"P",{"data-svelte-h":!0}),o(Re)!=="svelte-1a5jlrs"&&(Re.innerHTML=ks),xn=i(e),Se=p(e,"P",{"data-svelte-h":!0}),o(Se)!=="svelte-9fhem0"&&(Se.textContent=Ms),wn=i(e),c(Xe.$$.fragment,e),hn=i(e),Ye=p(e,"P",{}),hs(Ye).forEach(n),this.h()},h(){Ke(r,"name","hf:doc:metadata"),Ke(r,"content",Bs),Ke(C,"class","flex justify-center"),Ke(j,"class","flex justify-center"),Ke(_,"class","flex justify-center")},m(e,t){Us(document.head,r),s(e,M,t),s(e,m,t),s(e,d,t),b(v,e,t),s(e,et,t),b(J,e,t),s(e,tt,t),Fe[x].m(e,t),s(e,qe,t),b(U,e,t),s(e,nt,t),s(e,H,t),s(e,st,t),s(e,I,t),s(e,lt,t),b(L,e,t),s(e,it,t),s(e,A,t),s(e,at,t),s(e,P,t),s(e,pt,t),b(Z,e,t),s(e,rt,t),b(D,e,t),s(e,ot,t),s(e,V,t),s(e,mt,t),s(e,C,t),s(e,ut,t),s(e,E,t),s(e,ft,t),b(W,e,t),s(e,$t,t),b(Q,e,t),s(e,ct,t),s(e,B,t),s(e,bt,t),s(e,G,t),s(e,kt,t),s(e,R,t),s(e,Mt,t),s(e,S,t),s(e,dt,t),s(e,X,t),s(e,yt,t),b(F,e,t),s(e,gt,t),b(q,e,t),s(e,xt,t),s(e,N,t),s(e,wt,t),s(e,Y,t),s(e,ht,t),s(e,K,t),s(e,Tt,t),s(e,j,t),s(e,vt,t),s(e,O,t),s(e,Ct,t),s(e,ee,t),s(e,jt,t),s(e,te,t),s(e,_t,t),b(ne,e,t),s(e,zt,t),b(se,e,t),s(e,Jt,t),s(e,le,t),s(e,Ut,t),s(e,ie,t),s(e,Ht,t),s(e,ae,t),s(e,It,t),s(e,_,t),s(e,Lt,t),s(e,pe,t),s(e,At,t),s(e,re,t),s(e,Pt,t),b(oe,e,t),s(e,Zt,t),s(e,me,t),s(e,Dt,t),s(e,ue,t),s(e,Vt,t),s(e,fe,t),s(e,Et,t),b($e,e,t),s(e,Wt,t),s(e,ce,t),s(e,Qt,t),s(e,be,t),s(e,Bt,t),b(ke,e,t),s(e,Gt,t),T.m(e,t),s(e,Ne,t),b(Me,e,t),s(e,Rt,t),s(e,de,t),s(e,St,t),b(ye,e,t),s(e,Xt,t),b(ge,e,t),s(e,Ft,t),s(e,xe,t),s(e,qt,t),b(we,e,t),s(e,Nt,t),s(e,he,t),s(e,Yt,t),b(Te,e,t),s(e,Kt,t),b(ve,e,t),s(e,Ot,t),s(e,Ce,t),s(e,en,t),s(e,je,t),s(e,tn,t),s(e,_e,t),s(e,nn,t),s(e,ze,t),s(e,sn,t),b(Je,e,t),s(e,ln,t),s(e,Ue,t),s(e,an,t),b(He,e,t),s(e,pn,t),s(e,Ie,t),s(e,rn,t),b(Le,e,t),s(e,on,t),s(e,Ae,t),s(e,mn,t),b(Pe,e,t),s(e,un,t),s(e,Ze,t),s(e,fn,t),b(De,e,t),s(e,$n,t),b(Ve,e,t),s(e,cn,t),s(e,Ee,t),s(e,bn,t),b(z,e,t),s(e,kn,t),b(We,e,t),s(e,Mn,t),s(e,Qe,t),s(e,dn,t),b(Be,e,t),s(e,yn,t),b(Ge,e,t),s(e,gn,t),s(e,Re,t),s(e,xn,t),s(e,Se,t),s(e,wn,t),b(Xe,e,t),s(e,hn,t),s(e,Ye,t),Tn=!0},p(e,[t]){const xs={};t&1&&(xs.fw=e[0]),v.$set(xs);let Cn=x;x=ys(e),x!==Cn&&(Is(),u(Fe[Cn],1,1,()=>{Fe[Cn]=null}),Hs(),w=Fe[x],w||(w=Fe[x]=ds[x](e),w.c()),f(w,1),w.m(qe.parentNode,qe)),vn!==(vn=gs(e))&&(T.d(1),T=vn(e),T&&(T.c(),T.m(Ne.parentNode,Ne)));const ws={};t&2&&(ws.$$scope={dirty:t,ctx:e}),z.$set(ws)},i(e){Tn||(f(v.$$.fragment,e),f(J.$$.fragment,e),f(w),f(U.$$.fragment,e),f(L.$$.fragment,e),f(Z.$$.fragment,e),f(D.$$.fragment,e),f(W.$$.fragment,e),f(Q.$$.fragment,e),f(F.$$.fragment,e),f(q.$$.fragment,e),f(ne.$$.fragment,e),f(se.$$.fragment,e),f(oe.$$.fragment,e),f($e.$$.fragment,e),f(ke.$$.fragment,e),f(Me.$$.fragment,e),f(ye.$$.fragment,e),f(ge.$$.fragment,e),f(we.$$.fragment,e),f(Te.$$.fragment,e),f(ve.$$.fragment,e),f(Je.$$.fragment,e),f(He.$$.fragment,e),f(Le.$$.fragment,e),f(Pe.$$.fragment,e),f(De.$$.fragment,e),f(Ve.$$.fragment,e),f(z.$$.fragment,e),f(We.$$.fragment,e),f(Be.$$.fragment,e),f(Ge.$$.fragment,e),f(Xe.$$.fragment,e),Tn=!0)},o(e){u(v.$$.fragment,e),u(J.$$.fragment,e),u(w),u(U.$$.fragment,e),u(L.$$.fragment,e),u(Z.$$.fragment,e),u(D.$$.fragment,e),u(W.$$.fragment,e),u(Q.$$.fragment,e),u(F.$$.fragment,e),u(q.$$.fragment,e),u(ne.$$.fragment,e),u(se.$$.fragment,e),u(oe.$$.fragment,e),u($e.$$.fragment,e),u(ke.$$.fragment,e),u(Me.$$.fragment,e),u(ye.$$.fragment,e),u(ge.$$.fragment,e),u(we.$$.fragment,e),u(Te.$$.fragment,e),u(ve.$$.fragment,e),u(Je.$$.fragment,e),u(He.$$.fragment,e),u(Le.$$.fragment,e),u(Pe.$$.fragment,e),u(De.$$.fragment,e),u(Ve.$$.fragment,e),u(z.$$.fragment,e),u(We.$$.fragment,e),u(Be.$$.fragment,e),u(Ge.$$.fragment,e),u(Xe.$$.fragment,e),Tn=!1},d(e){e&&(n(M),n(m),n(d),n(et),n(tt),n(qe),n(nt),n(H),n(st),n(I),n(lt),n(it),n(A),n(at),n(P),n(pt),n(rt),n(ot),n(V),n(mt),n(C),n(ut),n(E),n(ft),n($t),n(ct),n(B),n(bt),n(G),n(kt),n(R),n(Mt),n(S),n(dt),n(X),n(yt),n(gt),n(xt),n(N),n(wt),n(Y),n(ht),n(K),n(Tt),n(j),n(vt),n(O),n(Ct),n(ee),n(jt),n(te),n(_t),n(zt),n(Jt),n(le),n(Ut),n(ie),n(Ht),n(ae),n(It),n(_),n(Lt),n(pe),n(At),n(re),n(Pt),n(Zt),n(me),n(Dt),n(ue),n(Vt),n(fe),n(Et),n(Wt),n(ce),n(Qt),n(be),n(Bt),n(Gt),n(Ne),n(Rt),n(de),n(St),n(Xt),n(Ft),n(xe),n(qt),n(Nt),n(he),n(Yt),n(Kt),n(Ot),n(Ce),n(en),n(je),n(tn),n(_e),n(nn),n(ze),n(sn),n(ln),n(Ue),n(an),n(pn),n(Ie),n(rn),n(on),n(Ae),n(mn),n(un),n(Ze),n(fn),n($n),n(cn),n(Ee),n(bn),n(kn),n(Mn),n(Qe),n(dn),n(yn),n(gn),n(Re),n(xn),n(Se),n(wn),n(hn),n(Ye)),n(r),k(v,e),k(J,e),Fe[x].d(e),k(U,e),k(L,e),k(Z,e),k(D,e),k(W,e),k(Q,e),k(F,e),k(q,e),k(ne,e),k(se,e),k(oe,e),k($e,e),k(ke,e),T.d(e),k(Me,e),k(ye,e),k(ge,e),k(we,e),k(Te,e),k(ve,e),k(Je,e),k(He,e),k(Le,e),k(Pe,e),k(De,e),k(Ve,e),k(z,e),k(We,e),k(Be,e),k(Ge,e),k(Xe,e)}}}const Bs='{"title":"Tokenizers","local":"tokenizers","sections":[{"title":"เน้นที่คำ (Word-based)","local":"เนนทคำ-word-based","sections":[],"depth":2},{"title":"เน้นที่ตัวอักษร(Character-based)","local":"เนนทตวอกษรcharacter-based","sections":[],"depth":2},{"title":"คำย่อย(Subword) tokenization","local":"คำยอยsubword-tokenization","sections":[{"title":"และอื่นๆ !","local":"และอนๆ-","sections":[],"depth":3}],"depth":2},{"title":"การโหลดและการบันทึก","local":"การโหลดและการบนทก","sections":[],"depth":2},{"title":"การเข้ารหัส(Encoding)","local":"การเขารหสencoding","sections":[{"title":"Tokenization","local":"tokenization","sections":[],"depth":3},{"title":"จาก tokens ไปเป็น input IDs","local":"จาก-tokens-ไปเปน-input-ids","sections":[],"depth":3}],"depth":2},{"title":"การถอดรหัส(Decoding)","local":"การถอดรหสdecoding","sections":[],"depth":2}],"depth":1}';function Gs(g,r,M){let m="pt";return Cs(()=>{const d=new URLSearchParams(window.location.search);M(0,m=d.get("fw")||"pt")}),[m]}class Os extends _s{constructor(r){super(),zs(this,r,Gs,Qs,vs,{})}}export{Os as component};

Xet Storage Details

Size:
49 kB
·
Xet hash:
0e2c394905f01fc2905f3bd411fd11498ab4baec783ae29e35b17459470402cc

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