Buckets:

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

Xet Storage Details

Size:
49 kB
·
Xet hash:
ae27f6ef98c0e71ff0dd4b47d21ac5c14a13b1027b70c57dde4c76c1fcb44782

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