import{s as si,o as li,n as ni}from"../chunks/scheduler.cc52f4b9.js";import{S as pi,i as ai,e as a,s as n,c as M,h as ii,a as i,d as s,b as p,f as ti,g as o,j as r,k as bp,l as ri,m as l,n as c,t as m,o as y,p as J}from"../chunks/index.85964560.js";import{T as Mi}from"../chunks/Tip.72f3abad.js";import{C as oi,H as ds,E as ci}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.4cab8d21.js";import{Y as mi}from"../chunks/Youtube.2feacd03.js";import{C as T}from"../chunks/CodeBlock.b43b1e5c.js";import{C as yi}from"../chunks/CourseFloatingBanner.d24cbe55.js";function Ji($s){let j,d=`<strong>รายละเอียดเพิ่มเติม</strong> ถ้าคุณทดลองใช้งาน normalizer ทั้งสองเวอร์ชันกับข้อความที่มีตัวอักษร unicode <code>u&quot;\\u0085&quot;</code> คุณจะได้ผลลัพธ์ที่แตกต่างกัน
อย่างไรก็ตาม เราไม่อยากทำให้เวอร์ชันที่สร้างจาก <code>normalizers.Sequence</code> ของเรานั้นซับซ้อนเกินไป เราจึงไม่ใช้ Regex ที่ <code>BertNormalizer</code> ใช้เวลาที่ <code>clean_text</code> ถูกตั้งค่าเป็น <code>True</code> ซึ่งเป็นค่าตั้งต้น
แต่คุณไม่ต้องกังวลไป เพราะมันยังมีวิธีที่จะทำให้ผลลัพธ์ออกมาเป็นเหมือนกันโดยที่ไม่ต้องใช้ <code>BertNormalizer</code> นั่นคือโดยการเพิ่ม <code>normalizers.Replace</code> สองครั้ง เข้าไปใน <code>normalizers.Sequence</code>`;return{c(){j=a("p"),j.innerHTML=d},l(u){j=i(u,"P",{"data-svelte-h":!0}),r(j)!=="svelte-6ga296"&&(j.innerHTML=d)},m(u,ks){l(u,j,ks)},p:ni,d(u){u&&s(j)}}}function Ti($s){let j,d,u,ks,$,Us,U,bs,b,ws,w,wp="จากบทก่อนๆ คุณจะเห็นว่า การตัดคำ ประกอบไปด้วยหลายขั้นตอน :",xs,x,xp="<li>Normalization (หรือ การปรับข้อความให้เป็นมาตรฐาน หมายถึงการทำความสะอาดข้อความ เช่น ลบช่องว่างหรือเครื่องหมายเน้นเสียง รวมถึงการทำ Unicode normalization และอื่นๆ)</li> <li>Pre-tokenization (ขั้นตอนก่อนตัดคำ หมายถึง การแยกข้อความออกเป็นคำๆ)</li> <li>ส่ง input เข้าไปในโมเดล (แยกคำที่ได้จากขั้นตอน pre-tokenization ออกเป็นคำย่อยหลายๆคำ)</li> <li>Post-processing (ขั้นตอนปรับแต่งผลลัพธ์ เช่น การใส่ token พิเศษของ tokenizer เข้าไปในผลลัพธ์, การสร้าง attention mask และ token type IDs)</li>",gs,g,gp="เพื่อเป็นการเตือนความจำ มาดูกระบวนการโดยรวมอีกครั้ง :",hs,k,hp='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/tokenization_pipeline.svg" alt="The tokenization pipeline."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/tokenization_pipeline-dark.svg" alt="The tokenization pipeline."/>',zs,h,zp=`🤗 Tokenizers library เป็นเครื่องมือสำหรับช่วยดำเนินการขั้นตอนพวกนี้ โดยคุณสามารถผสมผสานเครื่องมือพวกนี้ตามความต้องการได้
ในบทนี้เราจะมาเรียนวิธีสร้าง tokenizer ขึ้นมาตั้งแต่ต้น แทนที่จะเทรนจากตัวที่ถูก implement แล้วด้วยข้อมูลใหม่เท่านั้น อย่างที่เราได้ลองทำกันใน<a href="/course/chapter6/2">บทที่ 2</a> เมื่อจบบทนี้ คุณจะสามารถสร้าง tokenizer แบบใดก็ได้ตามที่คุณต้องการ`,Is,z,Cs,I,Ip="library นี้ ประกอบด้วยส่วนหลักคือ <code>Tokenizer</code> class ที่มีส่วนประกอบย่อยสำคัญอื่นๆ แบ่งเป็นหลาย submodules",Zs,C,Cp='<li><code>normalizers</code> ประกอบไปด้วย <code>Normalizer</code> หลายประเภทที่คุณสามารถใช้ได้ (รายชื่อทั้งหมดดูได้<a href="https://huggingface.co/docs/tokenizers/api/normalizers" rel="nofollow">ที่นี่</a>).</li> <li><code>pre_tokenizers</code> ประกอบไปด้วย <code>PreTokenizer</code> หลายประเภทที่คุณสามารถใช้ได้ (รายชื่อทั้งหมดดูได้<a href="https://huggingface.co/docs/tokenizers/api/pre-tokenizers" rel="nofollow">ที่นี่</a>).</li> <li><code>models</code> ประกอบไปด้วย <code>Model</code> หลายประเภทที่คุณสามารถใช้ได้ เช่น <code>BPE</code>, <code>WordPiece</code>, และ <code>Unigram</code> (รายชื่อทั้งหมดดูได้<a href="https://huggingface.co/docs/tokenizers/api/models" rel="nofollow">ที่นี่</a>).</li> <li><code>trainers</code> ประกอบไปด้วย <code>Trainer</code> หลายประเภทที่คุณสามารถใช้เพื่อเทรนโมเดลด้วย corpus ที่มีได้ (แต่ละโมเดลจะมีเทรนเนอร์อย่างละตัว; รายชื่อทั้งหมดดูได้<a href="https://huggingface.co/docs/tokenizers/api/trainers" rel="nofollow">ที่นี่</a>).</li> <li><code>post_processors</code> ประกอบไปด้วย <code>PostProcessor</code> หลายประเภทที่คุณสามารถใช้ได้ (รายชื่อทั้งหมดดูได้<a href="https://huggingface.co/docs/tokenizers/api/post-processors" rel="nofollow">ที่นี่</a>)</li> <li><code>decoders</code> ประกอบไปด้วย <code>Decoder</code> หลายประเภทที่ใช้เพื่อ decode ผลลัพธ์จากการ tokenization (รายชื่อทั้งหมดดูได้<a href="https://huggingface.co/docs/tokenizers/components#decoders" rel="nofollow">ที่นี่</a>)</li>',Vs,Z,Zp='คุณสามารถดูรายชื่อของส่วนประกอบสำคัญๆต่างๆได้<a href="https://huggingface.co/docs/tokenizers/components" rel="nofollow">ที่นี่</a>',vs,V,_s,v,Vp=`ในการเทรน tokenizer ตัวใหม่ เราจะใช้ corpus เล็กๆ เพื่อที่การคำนวณจะได้รวดเร็ว
การเรียกใช้งาน corpus จะทำคล้ายๆกับวิธีที่เราใช้ใน<a href="/course/chapter6/2">ตอนต้นของบทนี้</a> แต่ครั้งนี้เราจะใช้ชุดข้อมูลชื่อ <a href="https://huggingface.co/datasets/wikitext" rel="nofollow">WikiText-2</a>`,Qs,_,Bs,Q,vp=`<code>get_training_corpus()</code> เป็น generator ที่จะ yield ข้อมูลในรูปแบบ batch โดยแต่ละ batch ประกอบไปด้วย 1,000 ข้อความ
🤗 Tokenizers สามารถเทรนได้จากไฟล์ข้อความโดยตรง ดังนั้นเราจะสร้างไฟล์ข้อความ ที่ประกอบไปด้วย ข้อความทั้งหมดจาก WikiText-2`,Ws,B,Xs,W,_p=`ต่อไปเราจะพาคุณสร้าง tokenizer แบบ BERT, GPT-2, and XLNet ของคุณเอง ทีละขั้นตอน
ซึ่งคุณก็จะได้ลองใช้งาน tokenization algorithm ต่างๆที่ได้เรียนมาแล้ว เช่น WordPiece, BPE, and Unigram มาเริ่มจาก BERT กัน`,Rs,X,As,R,Qp="ในการสร้าง tokenizer โดยใช้ 🤗 Tokenizers library เราจะเริ่มจากการสร้าง <code>Tokenizer</code> object จาก <code>model</code> และตั้งค่า attribute ต่างๆ ได้แก่ <code>normalizer</code>, <code>pre_tokenizer</code>, <code>post_processor</code>, และ <code>decoder</code> ด้วยค่าที่เราต้องการ",Ns,A,Bp="ในตัวอย่างนี้ เราจะสร้าง <code>Tokenizer</code> ด้วย WordPiece :",Gs,N,Ls,G,Wp=`จากนั้นเราจะตั้งค่า <code>unk_token</code> เพื่อบอกโมเดลว่าให้มัน return ค่าอะไรหากมันเจอตัวอักษรที่มันไม่รู้จัก
ส่วน argument อื่นๆที่เราสามารถตั้งค่าได้ก็คือ <code>vocab</code> (แต่เนื่องจากเราจะเทรนโมเดล ทำให้ตอนนี้เรายังไม่ต้องตั้งค่านี้) และ <code>max_input_chars_per_word</code> ซึ่งหมายถึง ความยาวสูงสุดของแต่ละคำ (คำที่ยาวกว่าค่านี้จะถูกแบ่งเป็นหลายๆส่วน)`,qs,L,Xp="ขั้นตอนแรกคือ normalization เนื่องจาก BERT เป็นโมเดลที่ได้รับความนิยมมาก เราจึงมี <code>BertNormalizer</code> เฉพาะ ซึ่งมี option ต่างๆดังนี้: <code>lowercase</code>, <code>strip_accents</code>, <code>clean_text</code> (ลบ control characters และแทนที่ช่องว่างที่อยู่ต่อกันหลายๆอันด้วยช่องว่างเดียว), และ <code>handle_chinese_chars</code> (เพิ่มช่องว่างในตัวอักษรจีน)",Hs,q,Rp="เราจะมาเลียนแบบ <code>bert-base-uncased</code> tokenizer โดยตั้งค่า normalizer ดังนี้ :",Ds,H,Es,D,Ap="แต่ปกติแล้ว สำหรับ tokenizer ใหม่ คุณอาจจะไม่สามารถใช้ normalizer ที่จาก 🤗 Tokenizers library ได้ ดังนั้นเราจะมาเรียนวิธีการสร้าง BERT normalizer เองกัน",Ss,E,Np="library นี้ มี normalizer เพื่อ <code>Lowercase</code> และเพื่อ <code>StripAccents</code> ซึ่งคุณสามารถรวมทั้งสองตัวได้โดยใช้ <code>Sequence</code> :",Ps,S,Fs,P,Gp="เราจะใช้ <code>NFD</code> Unicode normalizer ด้วย เพื่อที่จะให้ <code>StripAccents</code> สามารถหาสัญลักษณ์ accents ได้ และจะได้ลบพวกมันออก",Ys,F,Lp="เพื่อเช็คผลลัพธ์ของ normalizer เราจะใช้ <code>normalize_str()</code> method จาก <code>normalizer</code> :",Ks,Y,Os,K,el,f,tl,O,qp="ขั้นตอนต่อไปคือ การ pre-tokenization เราจะใช้ <code>BertPreTokenizer</code> ที่ถูกสร้างมาแล้ว :",sl,ee,ll,te,Hp="หรือจะใช้ตัวที่เราสร้างขึ้นมาเองก็ได้ :",nl,se,pl,le,Dp="โปรดทราบว่า <code>Whitespace</code> pre-tokenizer จะตัดข้อความตรงที่มีช่องว่าง และ รวมถึงตัวสัญลักษณ์ที่ไม่ใช้ตัวอักษร ตัวเลข หรือ underscore หรือพูดอีกแบบก็คือ มันจะแบ่งข้อความตรงที่มีช่องว่างและเครื่องหมายวรรคตอน นั่นเอง",al,ne,il,pe,rl,ae,Ep="แต่ถ้าคุณต้องการจะแบ่งข้อความตามช่องว่างเท่านั้น ให้ใช้ <code>WhitespaceSplit</code> pre-tokenizer :",Ml,ie,ol,re,cl,Me,Sp="เหมือนกับใน normalizer เราสามารถใช้ <code>Sequence</code> เพื่อรวมหลายๆ pre-tokenizers เข้าด้วยกัน :",ml,oe,yl,ce,Jl,me,Pp=`ขั้นตอนต่อไปใน tokenization pipeline คือการใส่ input เข้าไปในโมเดล
เราได้สร้างโมเดลขึ้นมาแล้ว แต่เรายังคงต้องเทรนมัน ซึ่งเราจะใช้ <code>WordPieceTrainer</code>`,Tl,ye,Fp="สิ่งสำคัญที่คุณต้องจำคือ เวลาสร้าง (instantiate) trainer ใน 🤗 Tokenizers คุณจะต้องเพิ่ม token พิเศษต่างๆ เข้าไปในเทรนเนอร์เอง ไม่เช่นนั้น มันจะไม่เพิ่ม token พวกนี้เข้าไปใน vocabulary เพราะว่า token พิเศษไม่ได้อยู่ใน training corpus :",jl,Je,ul,Te,Yp="นอกจากเราจะสามารถตั้งค่า <code>vocab_size</code> และ <code>special_tokens</code> แล้ว เรายังสามารถตั้งค่า <code>min_frequency</code> (ความถี่ขั้นต่ำของคำที่ต้องมี เพื่อที่จะได้ถูกเพิ่มลงไปใน vocabulary) หรือ <code>continuing_subword_prefix</code> (ถ้าหากเราต้องการใช้สัญลักษณ์อื่น ที่ไม่ใช่<code>##</code>) ได้อีกด้วย",kl,je,Kp="เราจะเทรนโมเดลโดยรันคำสั่งต่อไปนี้ :",fl,ue,dl,ke,Op="คุณสามารถใช้ไฟล์ข้อความเพื่อเทรนได้ด้วย (แต่ก่อนอื่น คุณจะต้องสร้างโมเดลขึ้นมาใหม่โดยใช้ <code>WordPiece</code> ที่ยังว่างเปล่าอยู่) :",$l,fe,Ul,de,ea="สำหรับทั้งสองกรณี คุณสามารถทดลองใช้ tokenizer กับข้อความได้ โดยเรียกใช้ <code>encode()</code> method :",bl,$e,wl,Ue,xl,be,ta="<code>encoding</code> ที่เราได้คือ <code>Encoding</code> ที่ประกอบไปด้วยข้อมูลจำเป็นต่างๆสำหรับ tokenizer ได้แก่ <code>ids</code>, <code>type_ids</code>, <code>tokens</code>, <code>offsets</code>, <code>attention_mask</code>, <code>special_tokens_mask</code>, และ <code>overflowing</code>",gl,we,sa=`ขั้นตอนสุดท้ายของ pipeline คือ post-processing
เราจะเพิ่ม <code>[CLS]</code> ไว้ที่ตอนต้นของผลลัพธ์จากการ tokenize และ <code>[SEP]</code> ไว้ที่ตอนท้าย หรือหลังสิ้นสุดประโยค ถ้า input ของเรามีสองประโยค`,hl,xe,la="เราจะใช้ <code>TemplateProcessor</code> เพื่อช่วยเราทำ แต่ก่อนอื่นเราต้องหา ID ของ <code>[CLS]</code> และ <code>[SEP]</code> ก่อน :",zl,ge,Il,he,Cl,ze,na=`เราจะมาสร้าง template ให้กับ <code>TemplateProcessor</code> โดยจะต้องกำหนดว่าเราต้องการให้มันประมวลผล input ที่เป็น ประโยคเดี่ยว และ input ที่มีสองประโยคอย่างไร
สำหรับทั้งสองกรณี เราจะต้องกำหนด token พิเศษ เพื่อแทนประโยคขึ้นมา สำหรับประโยคเดี่ยวหรือประโยคแรก เราจะใช้ <code>$A</code> ส่วนสำหรับประโยคที่สอง เราจะใช้ <code>$B</code>
สำหรับ token พิเศษพวกนี้และประโยค เราจะสร้าง token type ID ขึ้นมา โดยจะเขียน ID นี้หลังเครื่องหมาย colon`,Zl,Ie,pa="template ของ BERT มีรายละเอียดดังนี้ :",Vl,Ce,vl,Ze,aa="อย่าลืมว่า เราจะต้องให้ข้อมูลโมเดลเกี่ยวกับ ID ของ token พิเศษด้วย เพื่อที่โมเดลจะได้แปลงมันได้อย่างถูกต้อง",_l,Ve,ia="เราจะกลับมาดูตัวอย่างก่อนหน้ากัน :",Ql,ve,Bl,_e,Wl,Qe,ra="ถ้าเราใส่ input ที่เป็นสองประโยค เราจะได้ :",Xl,Be,Rl,We,Al,Xe,Ma="ขั้นตอนสุดท้าย เราจะเพิ่ม decoder เข้าไปใน pipeline :",Nl,Re,Gl,Ae,oa="มาดูผลลัพธ์ของ <code>encoding</code> กัน :",Ll,Ne,ql,Ge,Hl,Le,ca="เยี่ยมมาก! ตอนนี้เราสามารถบันทึก tokenizer นี้เป็นไฟล์ JSON ได้แล้ว ดังนี้ :",Dl,qe,El,He,ma="คุณสามารถโหลดไฟล์นี้ให้เป็น <code>Tokenizer</code> object ได้โดยใช้ <code>from_file()</code> method :",Sl,De,Pl,Ee,ya=`การจะนำ tokenizer นี้มาใช้ใน 🤗 Transformers เราจะต้อง wrap มันให้เป็น <code>PreTrainedTokenizerFast</code> ก่อน
โดยเราใช้ class ปกติ (ถ้า tokenizer ของเรามีโครงสร้างสอดคล้องกันโมเดลหลักเราที่จะใช้งาน) หรือ class ที่ถูกสร้างขึ้นมาแล้ว เช่น <code>BertTokenizerFast</code>
ในกรณีที่คุณสร้าง tokenizer ขึ้นมาเองอย่างที่เราได้สอนไว้ข้างต้น คุณจะต้องใช้ตัวเลือกแรก`,Fl,Se,Ja=`การจะ wrap tokenizer ของเราให้เป็น <code>PreTrainedTokenizerFast</code> เราจะต้องส่งผ่าน tokenizer ของเราเข้าไปเป็น <code>tokenizer_object</code> หรือ ส่งผ่านไฟล์ของ tokenizer เป็น <code>tokenizer_file</code>
สิ่งสำคัญอีกอย่างคือ คุณจะต้องส่งผ่านข้อมูลเกี่ยวกับ token พิเศษ ต่างๆให้โมเดลเอง เพราะว่า class นี้จะไม่สามารถ infer จาก <code>tokenizer</code> object ได้เอง ว่า token ตัวไหนเป็น mask token เช่น <code>[CLS]</code> :`,Yl,Pe,Kl,Fe,Ta="ถ้าคุณใช้ class ที่เฉพาะเจาะจง เช่น <code>BertTokenizerFast</code> คุณเพียงแค่ต้องเพิ่มข้อมูลเกี่ยวกับ token พิเศษที่ต่างจากตัวที่โมเดลใช้อยู่แล้ว ในตัวอย่างของเรา เราไม่ได้ใช้ token พิเศษอื่น จึงไม่ต้องเพิ่มอะไร :",Ol,Ye,en,Ke,ja="ตอนนี้เราก็สามารถใช้ tokenizer ที่เราได้สร้างขึ้นมาเอง เหมือนกับ tokenizer ตัวอื่นๆจาก 🤗 Transformers ได้แล้ว นอกจากนั้นคุณยังสามารถเซฟมันได้ โดยใช้ <code>save_pretrained()</code> หรืออัพโหลดมันไปที่ Hub โดยใช้ <code>push_to_hub()</code>",tn,Oe,ua="หลังจากที่เราได้ดูกันแล้วว่าจะสร้าง WordPiece tokenizer อย่างไร เราจะมาดูกันว่า จะทำแบบเดียวกันกับ BPE tokenizer ได้อย่างไร เราจะอธิบายคร่าวๆเท่านั้น เพราะคุณได้เรียนรายละเอียดมาแล้ว และจะพูดถึงแค่ข้อแตกต่างเท่านั้น",sn,et,ln,tt,ka="เราจะมาสร้าง GPT-2 tokenizer กัน เช่นเดียวกับตัวอย่างของ BERT tokenizer เราจะเริ่มด้วยกัน initialize <code>Tokenizer</code> ด้วยโมเดล BPE :",nn,st,pn,lt,fa=`เราสามารถสร้างโมเดลนี้ด้วย vocabulary ที่มีอยู่ได้ โดยส่งผ่าน <code>vocab</code> และ <code>merges</code> แต่เราจะเทรนตั้งแต่ต้น แปลว่าเราไม่จำเป็นต้องทำขั้นตอนนี้
เราไม่จำเป็นต้องกำหนด <code>unk_token</code> เพราะ GPT-2 ใช้ byte-level BPE`,an,nt,da="นอกจากนั้น GPT-2 ยังไม่ใช้ normalizer อีกด้วย เราจึงจะข้ามขั้นตอนนี้ไปทำ pre-tokenization เลย :",rn,pt,Mn,at,$a="<code>add_prefix_space=False</code> หมายถึงเราจะไม่เพิ่มช่องว่างตรงต้นประโยค (ค่า default จะมีการเพิ่มช่องว่างนี้)",on,it,Ua="มาดูผลลัพธ์ตัวอย่างของการ pre-tokenization กัน :",cn,rt,mn,Mt,yn,ot,ba="ขั้นตอนต่อไปคือการเทรนโมเดล  สำหรับ GPT-2 มันจะมี token พิเศษตัวเดียวคือ end-of-text token (อยู่ตรงท้ายของข้อความ) :",Jn,ct,Tn,mt,wa="เช่นเดียวกันกับ <code>WordPieceTrainer</code> คุณสามารถกำหนด <code>vocab_size</code>, <code>special_tokens</code>, <code>min_frequency</code> ได้ ถ้าหากคุณใช้ end-of-word suffix (เช่น <code>&lt;/w&gt;</code>) คุณก็สามารถตั้งค่ามันได้ด้วย <code>end_of_word_suffix</code>",jn,yt,xa="คุณสามารถเทรนด้วยไฟล์ข้อความได้ด้วย :",un,Jt,kn,Tt,ga="มาดูผลลัพธ์ของการ tokenize ข้อความตัวอย่างกัน :",fn,jt,dn,ut,$n,kt,ha="เราจะทำการ post-processing แบบ byte-level ให้กับ GPT-2 tokenizer ดังนี้ :",Un,ft,bn,dt,za="<code>trim_offsets = False</code> แปลว่าเราจะไม่เปลี่ยนแปลงค่า offset ของ token ที่ขึ้นต้นด้วย <code>Ġ</code> ซึ่งแปลว่าตำแหน่งเริ่มต้นของ offset จะหมายถึง ช่องว่าง และไม่ใช่ตัวอักษรแรกของ token นั้น",wn,$t,Ia="มาดูผลลัพธ์ของข้อความที่เราเพิ่งจะ encode กันไป ในตัวอย่างนี้ token ในตำแหน่งที่ 4 คือ <code>&#39;Ġtest&#39;</code> :",xn,Ut,gn,bt,hn,wt,Ca="สุดท้ายเราจะเพิ่มส่วนที่เป็น byte-level decoder :",zn,xt,In,gt,Za="เช็คดูอีกทีว่าผลลัพธ์ถูกต้องหรือไม่ :",Cn,ht,Zn,zt,Vn,It,Va="เยี่ยมมาก! ตอนนี้คุณสามารถเซฟโมเดลได้ ส่วนขั้นต่อไปคือ เราจะ wrap tokenizer ของเราให้เป็น <code>PreTrainedTokenizerFast</code> หรือ <code>GPT2TokenizerFast</code> เพื่อจะได้เรียกใช้มันได้ใน 🤗 Transformers",vn,Ct,_n,Zt,va="หรือ :",Qn,Vt,Bn,vt,_a="ต่อไปเราจะสอนวิธีสร้าง Unigram tokenizer บ้าง",Wn,_t,Xn,Qt,Qa="เราจะสร้าง XLNet tokenizer โดยเริ่มจาก initialize <code>Tokenizer</code> ด้วย Unigram model !",Rn,Bt,An,Wt,Ba="คุณสามารถ initialize มันโดยส่งผ่าน vocabulary ที่มีอยู่เข้าไปด้วย",Nn,Xt,Wa="ในขั้นตอน normalization โมเดล XLNet จะมีการแทนที่ตัวอักษรต่างๆ :",Gn,Rt,Ln,At,Xa=`โค้ดข้างบนนี้จะแทนที่ <code>“</code> และ <code>”</code> ด้วย <code>”</code>
และถ้ามีช่องว่างที่อยู่ต่อๆกัน มันจะถูกแปลงให้เป็นช่องว่างเดียว และสุดท้ายมันจะลบสัญลักษณ์ accent ออกด้วย`,qn,Nt,Ra="pre-tokenizer ที่ใช้ใน SentencePiece tokenizer คือ <code>Metaspace</code>  :",Hn,Gt,Dn,Lt,Aa="มาดูผลลัพธ์ของการ pre-tokenization กับข้อความตัวอย่างกัน  :",En,qt,Sn,Ht,Pn,Dt,Na="ขั้นต่อไปคือการเทรน  XLNet มีการใช้ token พิเศษอยู่จำนวนหนึ่ง :",Fn,Et,Yn,St,Ga=`สิ่งสำคัญเวลาใช้ <code>UnigramTrainer</code> คือ อย่าลืมกำหนด argument <code>unk_token</code>
นอกจากนั้นคุณยังสามารถตั้งค่า argument อื่นๆที่ต้องใช้กับ Unigram algorithm ได้ด้วย เช่น <code>shrinking_factor</code> (ค่าเริ่มต้นคือ  0.75) หรือ <code>max_piece_length</code> (ค่าเริ่มต้นคือ 16)`,Kn,Pt,La="เราสามารถเทรนจากไฟล์ข้อความได้ด้วย  :",On,Ft,ep,Yt,qa="ลอง tokenize ตัวอย่างง่ายๆดู  :",tp,Kt,sp,Ot,lp,es,Ha=`XLNet จะเพิ่ม token พิเศษ <code>&lt;cls&gt;</code> ใส่ในตอนท้ายของประโยค และตั้งค่า type ID มันเป็น 2 เพื่อให้มันแตกต่างจาก token อื่น
การทำแบบนี้ถือว่าเป็นการ padding ทางด้ายซ้าย`,np,ts,Da="เพื่อจัดการกับ token พิเศษ เราจะต้องสร้าง template ขึ้นมา ก่อนอื่นเราต้องดูว่า ID ของ <code>&lt;cls&gt;</code> และ <code>&lt;sep&gt;</code> คืออะไร :",pp,ss,ap,ls,ip,ns,Ea="นี่คือตัวอย่างการสร้าง template :",rp,ps,Mp,as,Sa="เราจะทดลองใช้งานมันโดยการ encode ประโยค input สองประโยค :",op,is,cp,rs,mp,Ms,Pa="จากนั้นตั้งค่า decoder เป็น <code>Metaspace</code> :",yp,os,Jp,cs,Fa="ตอนนี้เราก็เสร็จแล้ว คุณสามารถเซฟ tokenizer และ wrap มันให้เป็น <code>PreTrainedTokenizerFast</code> หรือ <code>XLNetTokenizerFast</code> ก็ได้ ถ้าคุณต้องการใช้มันใน 🤗 Transformers",Tp,ms,Ya="สิ่งสำคัญอีกอย่างเวลาใช้ <code>PreTrainedTokenizerFast</code> ก็คือเราจะต้องบอก 🤗 Transformers library ว่าเราได้ทำการ padding ทางซ้าย :",jp,ys,up,Js,Ka="อีกวิธีก็คือ :",kp,Ts,fp,js,Oa="ตอนนี้ คุณก็ได้เรียนรู้ขั้นตอนในการสร้าง tokenizer ขึ้นมาเองแล้ว โดยการใช้เครื่องมือจาก 🤗 Tokenizers library และได้เรียนวิธีการนำ tokenizer ของคุณไปใช้ใน 🤗 Transformers อีกด้วย",dp,us,$p,fs,Up;return $=new oi({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),U=new ds({props:{title:"การสร้าง tokenizer ทีละขั้นตอน",local:"การสราง-tokenizer-ทละขนตอน",headingTag:"h1"}}),b=new yi({props:{chapter:6,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/chapter6/section8.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter6/section8.ipynb"}]}}),z=new mi({props:{id:"MR8tZm5ViWU"}}),V=new ds({props:{title:"การโหลด corpus",local:"การโหลด-corpus",headingTag:"h2"}}),_=new T({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBZGF0YXNldCUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJ3aWtpdGV4dCUyMiUyQyUyMG5hbWUlM0QlMjJ3aWtpdGV4dC0yLXJhdy12MSUyMiUyQyUyMHNwbGl0JTNEJTIydHJhaW4lMjIpJTBBJTBBJTBBZGVmJTIwZ2V0X3RyYWluaW5nX2NvcnB1cygpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwaSUyMGluJTIwcmFuZ2UoMCUyQyUyMGxlbihkYXRhc2V0KSUyQyUyMDEwMDApJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIweWllbGQlMjBkYXRhc2V0JTVCaSUyMCUzQSUyMGklMjAlMkIlMjAxMDAwJTVEJTVCJTIydGV4dCUyMiU1RA==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

dataset = load_dataset(<span class="hljs-string">&quot;wikitext&quot;</span>, name=<span class="hljs-string">&quot;wikitext-2-raw-v1&quot;</span>, split=<span class="hljs-string">&quot;train&quot;</span>)


<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_training_corpus</span>():
    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">0</span>, <span class="hljs-built_in">len</span>(dataset), <span class="hljs-number">1000</span>):
        <span class="hljs-keyword">yield</span> dataset[i : i + <span class="hljs-number">1000</span>][<span class="hljs-string">&quot;text&quot;</span>]`,wrap:!1}}),B=new T({props:{code:"d2l0aCUyMG9wZW4oJTIyd2lraXRleHQtMi50eHQlMjIlMkMlMjAlMjJ3JTIyJTJDJTIwZW5jb2RpbmclM0QlMjJ1dGYtOCUyMiklMjBhcyUyMGYlM0ElMEElMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4oZGF0YXNldCkpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZi53cml0ZShkYXRhc2V0JTVCaSU1RCU1QiUyMnRleHQlMjIlNUQlMjAlMkIlMjAlMjIlNUNuJTIyKQ==",highlighted:`<span class="hljs-keyword">with</span> <span class="hljs-built_in">open</span>(<span class="hljs-string">&quot;wikitext-2.txt&quot;</span>, <span class="hljs-string">&quot;w&quot;</span>, encoding=<span class="hljs-string">&quot;utf-8&quot;</span>) <span class="hljs-keyword">as</span> f:
    <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(dataset)):
        f.write(dataset[i][<span class="hljs-string">&quot;text&quot;</span>] + <span class="hljs-string">&quot;\\n&quot;</span>)`,wrap:!1}}),X=new ds({props:{title:"สร้าง WordPiece tokenizer ตั้งแต่เริ่มต้น",local:"สราง-wordpiece-tokenizer-ตงแตเรมตน",headingTag:"h2"}}),N=new T({props:{code:"ZnJvbSUyMHRva2VuaXplcnMlMjBpbXBvcnQlMjAoJTBBJTIwJTIwJTIwJTIwZGVjb2RlcnMlMkMlMEElMjAlMjAlMjAlMjBtb2RlbHMlMkMlMEElMjAlMjAlMjAlMjBub3JtYWxpemVycyUyQyUwQSUyMCUyMCUyMCUyMHByZV90b2tlbml6ZXJzJTJDJTBBJTIwJTIwJTIwJTIwcHJvY2Vzc29ycyUyQyUwQSUyMCUyMCUyMCUyMHRyYWluZXJzJTJDJTBBJTIwJTIwJTIwJTIwVG9rZW5pemVyJTJDJTBBKSUwQSUwQXRva2VuaXplciUyMCUzRCUyMFRva2VuaXplcihtb2RlbHMuV29yZFBpZWNlKHVua190b2tlbiUzRCUyMiU1QlVOSyU1RCUyMikp",highlighted:`<span class="hljs-keyword">from</span> tokenizers <span class="hljs-keyword">import</span> (
    decoders,
    models,
    normalizers,
    pre_tokenizers,
    processors,
    trainers,
    Tokenizer,
)

tokenizer = Tokenizer(models.WordPiece(unk_token=<span class="hljs-string">&quot;[UNK]&quot;</span>))`,wrap:!1}}),H=new T({props:{code:"dG9rZW5pemVyLm5vcm1hbGl6ZXIlMjAlM0QlMjBub3JtYWxpemVycy5CZXJ0Tm9ybWFsaXplcihsb3dlcmNhc2UlM0RUcnVlKQ==",highlighted:'tokenizer.normalizer = normalizers.BertNormalizer(lowercase=<span class="hljs-literal">True</span>)',wrap:!1}}),S=new T({props:{code:"dG9rZW5pemVyLm5vcm1hbGl6ZXIlMjAlM0QlMjBub3JtYWxpemVycy5TZXF1ZW5jZSglMEElMjAlMjAlMjAlMjAlNUJub3JtYWxpemVycy5ORkQoKSUyQyUyMG5vcm1hbGl6ZXJzLkxvd2VyY2FzZSgpJTJDJTIwbm9ybWFsaXplcnMuU3RyaXBBY2NlbnRzKCklNUQlMEEp",highlighted:`tokenizer.normalizer = normalizers.<span class="hljs-type">Sequence</span>(
    [normalizers.NFD(), normalizers.Lowercase(), normalizers.StripAccents()]
)`,wrap:!1}}),Y=new T({props:{code:"cHJpbnQodG9rZW5pemVyLm5vcm1hbGl6ZXIubm9ybWFsaXplX3N0ciglMjJIJUMzJUE5bGwlQzMlQjIlMjBoJUMzJUI0dyUyMGFyZSUyMCVDMyVCQyUzRiUyMikp",highlighted:'<span class="hljs-built_in">print</span>(tokenizer.normalizer.normalize_str(<span class="hljs-string">&quot;Héllò hôw are ü?&quot;</span>))',wrap:!1}}),K=new T({props:{code:"aGVsbG8lMjBob3clMjBhcmUlMjB1JTNG",highlighted:"hello how are u?",wrap:!1}}),f=new Mi({props:{$$slots:{default:[Ji]},$$scope:{ctx:$s}}}),ee=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIlMjAlM0QlMjBwcmVfdG9rZW5pemVycy5CZXJ0UHJlVG9rZW5pemVyKCk=",highlighted:"tokenizer.pre_tokenizer = pre_tokenizers.BertPreTokenizer()",wrap:!1}}),se=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIlMjAlM0QlMjBwcmVfdG9rZW5pemVycy5XaGl0ZXNwYWNlKCk=",highlighted:"tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()",wrap:!1}}),ne=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIucHJlX3Rva2VuaXplX3N0ciglMjJMZXQncyUyMHRlc3QlMjBteSUyMHByZS10b2tlbml6ZXIuJTIyKQ==",highlighted:'tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Let&#x27;s test my pre-tokenizer.&quot;</span>)',wrap:!1}}),pe=new T({props:{code:"JTVCKCdMZXQnJTJDJTIwKDAlMkMlMjAzKSklMkMlMjAoJTIyJyUyMiUyQyUyMCgzJTJDJTIwNCkpJTJDJTIwKCdzJyUyQyUyMCg0JTJDJTIwNSkpJTJDJTIwKCd0ZXN0JyUyQyUyMCg2JTJDJTIwMTApKSUyQyUyMCgnbXknJTJDJTIwKDExJTJDJTIwMTMpKSUyQyUyMCgncHJlJyUyQyUyMCgxNCUyQyUyMDE3KSklMkMlMEElMjAoJy0nJTJDJTIwKDE3JTJDJTIwMTgpKSUyQyUyMCgndG9rZW5pemVyJyUyQyUyMCgxOCUyQyUyMDI3KSklMkMlMjAoJy4nJTJDJTIwKDI3JTJDJTIwMjgpKSU1RA==",highlighted:`[(<span class="hljs-string">&#x27;Let&#x27;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">3</span>)), (<span class="hljs-string">&quot;&#x27;&quot;</span>, (<span class="hljs-number">3</span>, <span class="hljs-number">4</span>)), (<span class="hljs-string">&#x27;s&#x27;</span>, (<span class="hljs-number">4</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">&#x27;test&#x27;</span>, (<span class="hljs-number">6</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;my&#x27;</span>, (<span class="hljs-number">11</span>, <span class="hljs-number">13</span>)), (<span class="hljs-string">&#x27;pre&#x27;</span>, (<span class="hljs-number">14</span>, <span class="hljs-number">17</span>)),
 (<span class="hljs-string">&#x27;-&#x27;</span>, (<span class="hljs-number">17</span>, <span class="hljs-number">18</span>)), (<span class="hljs-string">&#x27;tokenizer&#x27;</span>, (<span class="hljs-number">18</span>, <span class="hljs-number">27</span>)), (<span class="hljs-string">&#x27;.&#x27;</span>, (<span class="hljs-number">27</span>, <span class="hljs-number">28</span>))]`,wrap:!1}}),ie=new T({props:{code:"cHJlX3Rva2VuaXplciUyMCUzRCUyMHByZV90b2tlbml6ZXJzLldoaXRlc3BhY2VTcGxpdCgpJTBBcHJlX3Rva2VuaXplci5wcmVfdG9rZW5pemVfc3RyKCUyMkxldCdzJTIwdGVzdCUyMG15JTIwcHJlLXRva2VuaXplci4lMjIp",highlighted:`pre_tokenizer = pre_tokenizers.WhitespaceSplit()
pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Let&#x27;s test my pre-tokenizer.&quot;</span>)`,wrap:!1}}),re=new T({props:{code:"JTVCKCUyMkxldCdzJTIyJTJDJTIwKDAlMkMlMjA1KSklMkMlMjAoJ3Rlc3QnJTJDJTIwKDYlMkMlMjAxMCkpJTJDJTIwKCdteSclMkMlMjAoMTElMkMlMjAxMykpJTJDJTIwKCdwcmUtdG9rZW5pemVyLiclMkMlMjAoMTQlMkMlMjAyOCkpJTVE",highlighted:'[(<span class="hljs-string">&quot;Let&#x27;s&quot;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">&#x27;test&#x27;</span>, (<span class="hljs-number">6</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;my&#x27;</span>, (<span class="hljs-number">11</span>, <span class="hljs-number">13</span>)), (<span class="hljs-string">&#x27;pre-tokenizer.&#x27;</span>, (<span class="hljs-number">14</span>, <span class="hljs-number">28</span>))]',wrap:!1}}),oe=new T({props:{code:"cHJlX3Rva2VuaXplciUyMCUzRCUyMHByZV90b2tlbml6ZXJzLlNlcXVlbmNlKCUwQSUyMCUyMCUyMCUyMCU1QnByZV90b2tlbml6ZXJzLldoaXRlc3BhY2VTcGxpdCgpJTJDJTIwcHJlX3Rva2VuaXplcnMuUHVuY3R1YXRpb24oKSU1RCUwQSklMEFwcmVfdG9rZW5pemVyLnByZV90b2tlbml6ZV9zdHIoJTIyTGV0J3MlMjB0ZXN0JTIwbXklMjBwcmUtdG9rZW5pemVyLiUyMik=",highlighted:`pre_tokenizer = pre_tokenizers.<span class="hljs-type">Sequence</span>(
    [pre_tokenizers.WhitespaceSplit(), pre_tokenizers.Punctuation()]
)
pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Let&#x27;s test my pre-tokenizer.&quot;</span>)`,wrap:!1}}),ce=new T({props:{code:"JTVCKCdMZXQnJTJDJTIwKDAlMkMlMjAzKSklMkMlMjAoJTIyJyUyMiUyQyUyMCgzJTJDJTIwNCkpJTJDJTIwKCdzJyUyQyUyMCg0JTJDJTIwNSkpJTJDJTIwKCd0ZXN0JyUyQyUyMCg2JTJDJTIwMTApKSUyQyUyMCgnbXknJTJDJTIwKDExJTJDJTIwMTMpKSUyQyUyMCgncHJlJyUyQyUyMCgxNCUyQyUyMDE3KSklMkMlMEElMjAoJy0nJTJDJTIwKDE3JTJDJTIwMTgpKSUyQyUyMCgndG9rZW5pemVyJyUyQyUyMCgxOCUyQyUyMDI3KSklMkMlMjAoJy4nJTJDJTIwKDI3JTJDJTIwMjgpKSU1RA==",highlighted:`[(<span class="hljs-string">&#x27;Let&#x27;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">3</span>)), (<span class="hljs-string">&quot;&#x27;&quot;</span>, (<span class="hljs-number">3</span>, <span class="hljs-number">4</span>)), (<span class="hljs-string">&#x27;s&#x27;</span>, (<span class="hljs-number">4</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">&#x27;test&#x27;</span>, (<span class="hljs-number">6</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;my&#x27;</span>, (<span class="hljs-number">11</span>, <span class="hljs-number">13</span>)), (<span class="hljs-string">&#x27;pre&#x27;</span>, (<span class="hljs-number">14</span>, <span class="hljs-number">17</span>)),
 (<span class="hljs-string">&#x27;-&#x27;</span>, (<span class="hljs-number">17</span>, <span class="hljs-number">18</span>)), (<span class="hljs-string">&#x27;tokenizer&#x27;</span>, (<span class="hljs-number">18</span>, <span class="hljs-number">27</span>)), (<span class="hljs-string">&#x27;.&#x27;</span>, (<span class="hljs-number">27</span>, <span class="hljs-number">28</span>))]`,wrap:!1}}),Je=new T({props:{code:"c3BlY2lhbF90b2tlbnMlMjAlM0QlMjAlNUIlMjIlNUJVTkslNUQlMjIlMkMlMjAlMjIlNUJQQUQlNUQlMjIlMkMlMjAlMjIlNUJDTFMlNUQlMjIlMkMlMjAlMjIlNUJTRVAlNUQlMjIlMkMlMjAlMjIlNUJNQVNLJTVEJTIyJTVEJTBBdHJhaW5lciUyMCUzRCUyMHRyYWluZXJzLldvcmRQaWVjZVRyYWluZXIodm9jYWJfc2l6ZSUzRDI1MDAwJTJDJTIwc3BlY2lhbF90b2tlbnMlM0RzcGVjaWFsX3Rva2Vucyk=",highlighted:`special_tokens = [<span class="hljs-string">&quot;[UNK]&quot;</span>, <span class="hljs-string">&quot;[PAD]&quot;</span>, <span class="hljs-string">&quot;[CLS]&quot;</span>, <span class="hljs-string">&quot;[SEP]&quot;</span>, <span class="hljs-string">&quot;[MASK]&quot;</span>]
trainer = trainers.WordPieceTrainer(vocab_size=<span class="hljs-number">25000</span>, special_tokens=special_tokens)`,wrap:!1}}),ue=new T({props:{code:"dG9rZW5pemVyLnRyYWluX2Zyb21faXRlcmF0b3IoZ2V0X3RyYWluaW5nX2NvcnB1cygpJTJDJTIwdHJhaW5lciUzRHRyYWluZXIp",highlighted:"tokenizer.train_from_iterator(get_training_corpus(), trainer=trainer)",wrap:!1}}),fe=new T({props:{code:"dG9rZW5pemVyLm1vZGVsJTIwJTNEJTIwbW9kZWxzLldvcmRQaWVjZSh1bmtfdG9rZW4lM0QlMjIlNUJVTkslNUQlMjIpJTBBdG9rZW5pemVyLnRyYWluKCU1QiUyMndpa2l0ZXh0LTIudHh0JTIyJTVEJTJDJTIwdHJhaW5lciUzRHRyYWluZXIp",highlighted:`tokenizer.model = models.WordPiece(unk_token=<span class="hljs-string">&quot;[UNK]&quot;</span>)
tokenizer.train([<span class="hljs-string">&quot;wikitext-2.txt&quot;</span>], trainer=trainer)`,wrap:!1}}),$e=new T({props:{code:"ZW5jb2RpbmclMjAlM0QlMjB0b2tlbml6ZXIuZW5jb2RlKCUyMkxldCdzJTIwdGVzdCUyMHRoaXMlMjB0b2tlbml6ZXIuJTIyKSUwQXByaW50KGVuY29kaW5nLnRva2Vucyk=",highlighted:`encoding = tokenizer.encode(<span class="hljs-string">&quot;Let&#x27;s test this tokenizer.&quot;</span>)
<span class="hljs-built_in">print</span>(encoding.tokens)`,wrap:!1}}),Ue=new T({props:{code:"JTVCJ2xldCclMkMlMjAlMjInJTIyJTJDJTIwJ3MnJTJDJTIwJ3Rlc3QnJTJDJTIwJ3RoaXMnJTJDJTIwJ3RvayclMkMlMjAnJTIzJTIzZW5pJyUyQyUyMCclMjMlMjN6ZXInJTJDJTIwJy4nJTVE",highlighted:'[<span class="hljs-string">&#x27;let&#x27;</span>, <span class="hljs-string">&quot;&#x27;&quot;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;test&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;tok&#x27;</span>, <span class="hljs-string">&#x27;##eni&#x27;</span>, <span class="hljs-string">&#x27;##zer&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>]',wrap:!1}}),ge=new T({props:{code:"Y2xzX3Rva2VuX2lkJTIwJTNEJTIwdG9rZW5pemVyLnRva2VuX3RvX2lkKCUyMiU1QkNMUyU1RCUyMiklMEFzZXBfdG9rZW5faWQlMjAlM0QlMjB0b2tlbml6ZXIudG9rZW5fdG9faWQoJTIyJTVCU0VQJTVEJTIyKSUwQXByaW50KGNsc190b2tlbl9pZCUyQyUyMHNlcF90b2tlbl9pZCk=",highlighted:`cls_token_id = tokenizer.token_to_id(<span class="hljs-string">&quot;[CLS]&quot;</span>)
sep_token_id = tokenizer.token_to_id(<span class="hljs-string">&quot;[SEP]&quot;</span>)
<span class="hljs-built_in">print</span>(cls_token_id, sep_token_id)`,wrap:!1}}),he=new T({props:{code:"KDIlMkMlMjAzKQ==",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>)',wrap:!1}}),Ce=new T({props:{code:"dG9rZW5pemVyLnBvc3RfcHJvY2Vzc29yJTIwJTNEJTIwcHJvY2Vzc29ycy5UZW1wbGF0ZVByb2Nlc3NpbmcoJTBBJTIwJTIwJTIwJTIwc2luZ2xlJTNEZiUyMiU1QkNMUyU1RCUzQTAlMjAlMjRBJTNBMCUyMCU1QlNFUCU1RCUzQTAlMjIlMkMlMEElMjAlMjAlMjAlMjBwYWlyJTNEZiUyMiU1QkNMUyU1RCUzQTAlMjAlMjRBJTNBMCUyMCU1QlNFUCU1RCUzQTAlMjAlMjRCJTNBMSUyMCU1QlNFUCU1RCUzQTElMjIlMkMlMEElMjAlMjAlMjAlMjBzcGVjaWFsX3Rva2VucyUzRCU1QiglMjIlNUJDTFMlNUQlMjIlMkMlMjBjbHNfdG9rZW5faWQpJTJDJTIwKCUyMiU1QlNFUCU1RCUyMiUyQyUyMHNlcF90b2tlbl9pZCklNUQlMkMlMEEp",highlighted:`tokenizer.post_processor = processors.TemplateProcessing(
    single=<span class="hljs-string">f&quot;[CLS]:0 $A:0 [SEP]:0&quot;</span>,
    pair=<span class="hljs-string">f&quot;[CLS]:0 $A:0 [SEP]:0 $B:1 [SEP]:1&quot;</span>,
    special_tokens=[(<span class="hljs-string">&quot;[CLS]&quot;</span>, cls_token_id), (<span class="hljs-string">&quot;[SEP]&quot;</span>, sep_token_id)],
)`,wrap:!1}}),ve=new T({props:{code:"ZW5jb2RpbmclMjAlM0QlMjB0b2tlbml6ZXIuZW5jb2RlKCUyMkxldCdzJTIwdGVzdCUyMHRoaXMlMjB0b2tlbml6ZXIuJTIyKSUwQXByaW50KGVuY29kaW5nLnRva2Vucyk=",highlighted:`encoding = tokenizer.encode(<span class="hljs-string">&quot;Let&#x27;s test this tokenizer.&quot;</span>)
<span class="hljs-built_in">print</span>(encoding.tokens)`,wrap:!1}}),_e=new T({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAnbGV0JyUyQyUyMCUyMiclMjIlMkMlMjAncyclMkMlMjAndGVzdCclMkMlMjAndGhpcyclMkMlMjAndG9rJyUyQyUyMCclMjMlMjNlbmknJTJDJTIwJyUyMyUyM3plciclMkMlMjAnLiclMkMlMjAnJTVCU0VQJTVEJyU1RA==",highlighted:'[<span class="hljs-string">&#x27;[CLS]&#x27;</span>, <span class="hljs-string">&#x27;let&#x27;</span>, <span class="hljs-string">&quot;&#x27;&quot;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;test&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;tok&#x27;</span>, <span class="hljs-string">&#x27;##eni&#x27;</span>, <span class="hljs-string">&#x27;##zer&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>]',wrap:!1}}),Be=new T({props:{code:"ZW5jb2RpbmclMjAlM0QlMjB0b2tlbml6ZXIuZW5jb2RlKCUyMkxldCdzJTIwdGVzdCUyMHRoaXMlMjB0b2tlbml6ZXIuLi4lMjIlMkMlMjAlMjJvbiUyMGElMjBwYWlyJTIwb2YlMjBzZW50ZW5jZXMuJTIyKSUwQXByaW50KGVuY29kaW5nLnRva2VucyklMEFwcmludChlbmNvZGluZy50eXBlX2lkcyk=",highlighted:`encoding = tokenizer.encode(<span class="hljs-string">&quot;Let&#x27;s test this tokenizer...&quot;</span>, <span class="hljs-string">&quot;on a pair of sentences.&quot;</span>)
<span class="hljs-built_in">print</span>(encoding.tokens)
<span class="hljs-built_in">print</span>(encoding.type_ids)`,wrap:!1}}),We=new T({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAnbGV0JyUyQyUyMCUyMiclMjIlMkMlMjAncyclMkMlMjAndGVzdCclMkMlMjAndGhpcyclMkMlMjAndG9rJyUyQyUyMCclMjMlMjNlbmknJTJDJTIwJyUyMyUyM3plciclMkMlMjAnLi4uJyUyQyUyMCclNUJTRVAlNUQnJTJDJTIwJ29uJyUyQyUyMCdhJyUyQyUyMCdwYWlyJyUyQyUyMCdvZiclMkMlMjAnc2VudGVuY2VzJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTVEJTBBJTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVE",highlighted:`[<span class="hljs-string">&#x27;[CLS]&#x27;</span>, <span class="hljs-string">&#x27;let&#x27;</span>, <span class="hljs-string">&quot;&#x27;&quot;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;test&#x27;</span>, <span class="hljs-string">&#x27;this&#x27;</span>, <span class="hljs-string">&#x27;tok&#x27;</span>, <span class="hljs-string">&#x27;##eni&#x27;</span>, <span class="hljs-string">&#x27;##zer&#x27;</span>, <span class="hljs-string">&#x27;...&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>, <span class="hljs-string">&#x27;on&#x27;</span>, <span class="hljs-string">&#x27;a&#x27;</span>, <span class="hljs-string">&#x27;pair&#x27;</span>, <span class="hljs-string">&#x27;of&#x27;</span>, <span class="hljs-string">&#x27;sentences&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#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-number">0</span>, <span class="hljs-number">0</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}}),Re=new T({props:{code:"dG9rZW5pemVyLmRlY29kZXIlMjAlM0QlMjBkZWNvZGVycy5Xb3JkUGllY2UocHJlZml4JTNEJTIyJTIzJTIzJTIyKQ==",highlighted:'tokenizer.decoder = decoders.WordPiece(prefix=<span class="hljs-string">&quot;##&quot;</span>)',wrap:!1}}),Ne=new T({props:{code:"dG9rZW5pemVyLmRlY29kZShlbmNvZGluZy5pZHMp",highlighted:"tokenizer.decode(encoding.ids)",wrap:!1}}),Ge=new T({props:{code:"JTIybGV0J3MlMjB0ZXN0JTIwdGhpcyUyMHRva2VuaXplci4uLiUyMG9uJTIwYSUyMHBhaXIlMjBvZiUyMHNlbnRlbmNlcy4lMjI=",highlighted:'<span class="hljs-string">&quot;let&#x27;s test this tokenizer... on a pair of sentences.&quot;</span>',wrap:!1}}),qe=new T({props:{code:"dG9rZW5pemVyLnNhdmUoJTIydG9rZW5pemVyLmpzb24lMjIp",highlighted:'tokenizer.save(<span class="hljs-string">&quot;tokenizer.json&quot;</span>)',wrap:!1}}),De=new T({props:{code:"bmV3X3Rva2VuaXplciUyMCUzRCUyMFRva2VuaXplci5mcm9tX2ZpbGUoJTIydG9rZW5pemVyLmpzb24lMjIp",highlighted:'new_tokenizer = Tokenizer.from_file(<span class="hljs-string">&quot;tokenizer.json&quot;</span>)',wrap:!1}}),Pe=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFByZVRyYWluZWRUb2tlbml6ZXJGYXN0JTBBJTBBd3JhcHBlZF90b2tlbml6ZXIlMjAlM0QlMjBQcmVUcmFpbmVkVG9rZW5pemVyRmFzdCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZXJfb2JqZWN0JTNEdG9rZW5pemVyJTJDJTBBJTIwJTIwJTIwJTIwJTIzJTIwdG9rZW5pemVyX2ZpbGUlM0QlMjJ0b2tlbml6ZXIuanNvbiUyMiUyQyUyMCUyMyUyMFlvdSUyMGNhbiUyMGxvYWQlMjBmcm9tJTIwdGhlJTIwdG9rZW5pemVyJTIwZmlsZSUyQyUyMGFsdGVybmF0aXZlbHklMEElMjAlMjAlMjAlMjB1bmtfdG9rZW4lM0QlMjIlNUJVTkslNUQlMjIlMkMlMEElMjAlMjAlMjAlMjBwYWRfdG9rZW4lM0QlMjIlNUJQQUQlNUQlMjIlMkMlMEElMjAlMjAlMjAlMjBjbHNfdG9rZW4lM0QlMjIlNUJDTFMlNUQlMjIlMkMlMEElMjAlMjAlMjAlMjBzZXBfdG9rZW4lM0QlMjIlNUJTRVAlNUQlMjIlMkMlMEElMjAlMjAlMjAlMjBtYXNrX3Rva2VuJTNEJTIyJTVCTUFTSyU1RCUyMiUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> PreTrainedTokenizerFast

wrapped_tokenizer = PreTrainedTokenizerFast(
    tokenizer_object=tokenizer,
    <span class="hljs-comment"># tokenizer_file=&quot;tokenizer.json&quot;, # You can load from the tokenizer file, alternatively</span>
    unk_token=<span class="hljs-string">&quot;[UNK]&quot;</span>,
    pad_token=<span class="hljs-string">&quot;[PAD]&quot;</span>,
    cls_token=<span class="hljs-string">&quot;[CLS]&quot;</span>,
    sep_token=<span class="hljs-string">&quot;[SEP]&quot;</span>,
    mask_token=<span class="hljs-string">&quot;[MASK]&quot;</span>,
)`,wrap:!1}}),Ye=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEJlcnRUb2tlbml6ZXJGYXN0JTBBJTBBd3JhcHBlZF90b2tlbml6ZXIlMjAlM0QlMjBCZXJ0VG9rZW5pemVyRmFzdCh0b2tlbml6ZXJfb2JqZWN0JTNEdG9rZW5pemVyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> BertTokenizerFast

wrapped_tokenizer = BertTokenizerFast(tokenizer_object=tokenizer)`,wrap:!1}}),et=new ds({props:{title:"การสร้าง BPE tokenizer ตั้งแต่เริ่มต้น",local:"การสราง-bpe-tokenizer-ตงแตเรมตน",headingTag:"h2"}}),st=new T({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwVG9rZW5pemVyKG1vZGVscy5CUEUoKSk=",highlighted:"tokenizer = Tokenizer(models.BPE())",wrap:!1}}),pt=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIlMjAlM0QlMjBwcmVfdG9rZW5pemVycy5CeXRlTGV2ZWwoYWRkX3ByZWZpeF9zcGFjZSUzREZhbHNlKQ==",highlighted:'tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=<span class="hljs-literal">False</span>)',wrap:!1}}),rt=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIucHJlX3Rva2VuaXplX3N0ciglMjJMZXQncyUyMHRlc3QlMjBwcmUtdG9rZW5pemF0aW9uISUyMik=",highlighted:'tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Let&#x27;s test pre-tokenization!&quot;</span>)',wrap:!1}}),Mt=new T({props:{code:"JTVCKCdMZXQnJTJDJTIwKDAlMkMlMjAzKSklMkMlMjAoJTIyJ3MlMjIlMkMlMjAoMyUyQyUyMDUpKSUyQyUyMCgnJUM0JUEwdGVzdCclMkMlMjAoNSUyQyUyMDEwKSklMkMlMjAoJyVDNCVBMHByZSclMkMlMjAoMTAlMkMlMjAxNCkpJTJDJTIwKCctJyUyQyUyMCgxNCUyQyUyMDE1KSklMkMlMEElMjAoJ3Rva2VuaXphdGlvbiclMkMlMjAoMTUlMkMlMjAyNykpJTJDJTIwKCchJyUyQyUyMCgyNyUyQyUyMDI4KSklNUQ=",highlighted:`[(<span class="hljs-string">&#x27;Let&#x27;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">3</span>)), (<span class="hljs-string">&quot;&#x27;s&quot;</span>, (<span class="hljs-number">3</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">&#x27;Ġtest&#x27;</span>, (<span class="hljs-number">5</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;Ġpre&#x27;</span>, (<span class="hljs-number">10</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">&#x27;-&#x27;</span>, (<span class="hljs-number">14</span>, <span class="hljs-number">15</span>)),
 (<span class="hljs-string">&#x27;tokenization&#x27;</span>, (<span class="hljs-number">15</span>, <span class="hljs-number">27</span>)), (<span class="hljs-string">&#x27;!&#x27;</span>, (<span class="hljs-number">27</span>, <span class="hljs-number">28</span>))]`,wrap:!1}}),ct=new T({props:{code:"dHJhaW5lciUyMCUzRCUyMHRyYWluZXJzLkJwZVRyYWluZXIodm9jYWJfc2l6ZSUzRDI1MDAwJTJDJTIwc3BlY2lhbF90b2tlbnMlM0QlNUIlMjIlM0MlN0NlbmRvZnRleHQlN0MlM0UlMjIlNUQpJTBBdG9rZW5pemVyLnRyYWluX2Zyb21faXRlcmF0b3IoZ2V0X3RyYWluaW5nX2NvcnB1cygpJTJDJTIwdHJhaW5lciUzRHRyYWluZXIp",highlighted:`trainer = trainers.BpeTrainer(vocab_size=<span class="hljs-number">25000</span>, special_tokens=[<span class="hljs-string">&quot;&lt;|endoftext|&gt;&quot;</span>])
tokenizer.train_from_iterator(get_training_corpus(), trainer=trainer)`,wrap:!1}}),Jt=new T({props:{code:"dG9rZW5pemVyLm1vZGVsJTIwJTNEJTIwbW9kZWxzLkJQRSgpJTBBdG9rZW5pemVyLnRyYWluKCU1QiUyMndpa2l0ZXh0LTIudHh0JTIyJTVEJTJDJTIwdHJhaW5lciUzRHRyYWluZXIp",highlighted:`tokenizer.model = models.BPE()
tokenizer.train([<span class="hljs-string">&quot;wikitext-2.txt&quot;</span>], trainer=trainer)`,wrap:!1}}),jt=new T({props:{code:"ZW5jb2RpbmclMjAlM0QlMjB0b2tlbml6ZXIuZW5jb2RlKCUyMkxldCdzJTIwdGVzdCUyMHRoaXMlMjB0b2tlbml6ZXIuJTIyKSUwQXByaW50KGVuY29kaW5nLnRva2Vucyk=",highlighted:`encoding = tokenizer.encode(<span class="hljs-string">&quot;Let&#x27;s test this tokenizer.&quot;</span>)
<span class="hljs-built_in">print</span>(encoding.tokens)`,wrap:!1}}),ut=new T({props:{code:"JTVCJ0wnJTJDJTIwJ2V0JyUyQyUyMCUyMiclMjIlMkMlMjAncyclMkMlMjAnJUM0JUEwdGVzdCclMkMlMjAnJUM0JUEwdGhpcyclMkMlMjAnJUM0JUEwdG8nJTJDJTIwJ2tlbiclMkMlMjAnaXplciclMkMlMjAnLiclNUQ=",highlighted:'[<span class="hljs-string">&#x27;L&#x27;</span>, <span class="hljs-string">&#x27;et&#x27;</span>, <span class="hljs-string">&quot;&#x27;&quot;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;Ġtest&#x27;</span>, <span class="hljs-string">&#x27;Ġthis&#x27;</span>, <span class="hljs-string">&#x27;Ġto&#x27;</span>, <span class="hljs-string">&#x27;ken&#x27;</span>, <span class="hljs-string">&#x27;izer&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>]',wrap:!1}}),ft=new T({props:{code:"dG9rZW5pemVyLnBvc3RfcHJvY2Vzc29yJTIwJTNEJTIwcHJvY2Vzc29ycy5CeXRlTGV2ZWwodHJpbV9vZmZzZXRzJTNERmFsc2Up",highlighted:'tokenizer.post_processor = processors.ByteLevel(trim_offsets=<span class="hljs-literal">False</span>)',wrap:!1}}),Ut=new T({props:{code:"c2VudGVuY2UlMjAlM0QlMjAlMjJMZXQncyUyMHRlc3QlMjB0aGlzJTIwdG9rZW5pemVyLiUyMiUwQWVuY29kaW5nJTIwJTNEJTIwdG9rZW5pemVyLmVuY29kZShzZW50ZW5jZSklMEFzdGFydCUyQyUyMGVuZCUyMCUzRCUyMGVuY29kaW5nLm9mZnNldHMlNUI0JTVEJTBBc2VudGVuY2UlNUJzdGFydCUzQWVuZCU1RA==",highlighted:`sentence = <span class="hljs-string">&quot;Let&#x27;s test this tokenizer.&quot;</span>
encoding = tokenizer.encode(sentence)
start, end = encoding.offsets[<span class="hljs-number">4</span>]
sentence[start:end]`,wrap:!1}}),bt=new T({props:{code:"JyUyMHRlc3Qn",highlighted:'<span class="hljs-string">&#x27; test&#x27;</span>',wrap:!1}}),xt=new T({props:{code:"dG9rZW5pemVyLmRlY29kZXIlMjAlM0QlMjBkZWNvZGVycy5CeXRlTGV2ZWwoKQ==",highlighted:"tokenizer.decoder = decoders.ByteLevel()",wrap:!1}}),ht=new T({props:{code:"dG9rZW5pemVyLmRlY29kZShlbmNvZGluZy5pZHMp",highlighted:"tokenizer.decode(encoding.ids)",wrap:!1}}),zt=new T({props:{code:"JTIyTGV0J3MlMjB0ZXN0JTIwdGhpcyUyMHRva2VuaXplci4lMjI=",highlighted:'<span class="hljs-string">&quot;Let&#x27;s test this tokenizer.&quot;</span>',wrap:!1}}),Ct=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFByZVRyYWluZWRUb2tlbml6ZXJGYXN0JTBBJTBBd3JhcHBlZF90b2tlbml6ZXIlMjAlM0QlMjBQcmVUcmFpbmVkVG9rZW5pemVyRmFzdCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZXJfb2JqZWN0JTNEdG9rZW5pemVyJTJDJTBBJTIwJTIwJTIwJTIwYm9zX3Rva2VuJTNEJTIyJTNDJTdDZW5kb2Z0ZXh0JTdDJTNFJTIyJTJDJTBBJTIwJTIwJTIwJTIwZW9zX3Rva2VuJTNEJTIyJTNDJTdDZW5kb2Z0ZXh0JTdDJTNFJTIyJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> PreTrainedTokenizerFast

wrapped_tokenizer = PreTrainedTokenizerFast(
    tokenizer_object=tokenizer,
    bos_token=<span class="hljs-string">&quot;&lt;|endoftext|&gt;&quot;</span>,
    eos_token=<span class="hljs-string">&quot;&lt;|endoftext|&gt;&quot;</span>,
)`,wrap:!1}}),Vt=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEdQVDJUb2tlbml6ZXJGYXN0JTBBJTBBd3JhcHBlZF90b2tlbml6ZXIlMjAlM0QlMjBHUFQyVG9rZW5pemVyRmFzdCh0b2tlbml6ZXJfb2JqZWN0JTNEdG9rZW5pemVyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> GPT2TokenizerFast

wrapped_tokenizer = GPT2TokenizerFast(tokenizer_object=tokenizer)`,wrap:!1}}),_t=new ds({props:{title:"การสร้าง Unigram tokenizer ตั้งแต่เริ่มต้น",local:"การสราง-unigram-tokenizer-ตงแตเรมตน",headingTag:"h2"}}),Bt=new T({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwVG9rZW5pemVyKG1vZGVscy5VbmlncmFtKCkp",highlighted:"tokenizer = Tokenizer(models.Unigram())",wrap:!1}}),Rt=new T({props:{code:"ZnJvbSUyMHRva2VuaXplcnMlMjBpbXBvcnQlMjBSZWdleCUwQSUwQXRva2VuaXplci5ub3JtYWxpemVyJTIwJTNEJTIwbm9ybWFsaXplcnMuU2VxdWVuY2UoJTBBJTIwJTIwJTIwJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbm9ybWFsaXplcnMuUmVwbGFjZSglMjIlNjAlNjAlMjIlMkMlMjAnJTIyJyklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBub3JtYWxpemVycy5SZXBsYWNlKCUyMicnJTIyJTJDJTIwJyUyMicpJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbm9ybWFsaXplcnMuTkZLRCgpJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbm9ybWFsaXplcnMuU3RyaXBBY2NlbnRzKCklMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBub3JtYWxpemVycy5SZXBsYWNlKFJlZ2V4KCUyMiUyMCU3QjIlMkMlN0QlMjIpJTJDJTIwJTIyJTIwJTIyKSUyQyUwQSUyMCUyMCUyMCUyMCU1RCUwQSk=",highlighted:`<span class="hljs-keyword">from</span> tokenizers <span class="hljs-keyword">import</span> Regex

tokenizer.normalizer = normalizers.<span class="hljs-type">Sequence</span>(
    [
        normalizers.Replace(<span class="hljs-string">&quot;\`\`&quot;</span>, <span class="hljs-string">&#x27;&quot;&#x27;</span>),
        normalizers.Replace(<span class="hljs-string">&quot;&#x27;&#x27;&quot;</span>, <span class="hljs-string">&#x27;&quot;&#x27;</span>),
        normalizers.NFKD(),
        normalizers.StripAccents(),
        normalizers.Replace(Regex(<span class="hljs-string">&quot; {2,}&quot;</span>), <span class="hljs-string">&quot; &quot;</span>),
    ]
)`,wrap:!1}}),Gt=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIlMjAlM0QlMjBwcmVfdG9rZW5pemVycy5NZXRhc3BhY2UoKQ==",highlighted:"tokenizer.pre_tokenizer = pre_tokenizers.Metaspace()",wrap:!1}}),qt=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIucHJlX3Rva2VuaXplX3N0ciglMjJMZXQncyUyMHRlc3QlMjB0aGUlMjBwcmUtdG9rZW5pemVyISUyMik=",highlighted:'tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Let&#x27;s test the pre-tokenizer!&quot;</span>)',wrap:!1}}),Ht=new T({props:{code:"JTVCKCUyMiVFMiU5NiU4MUxldCdzJTIyJTJDJTIwKDAlMkMlMjA1KSklMkMlMjAoJyVFMiU5NiU4MXRlc3QnJTJDJTIwKDUlMkMlMjAxMCkpJTJDJTIwKCclRTIlOTYlODF0aGUnJTJDJTIwKDEwJTJDJTIwMTQpKSUyQyUyMCgnJUUyJTk2JTgxcHJlLXRva2VuaXplciEnJTJDJTIwKDE0JTJDJTIwMjkpKSU1RA==",highlighted:'[(<span class="hljs-string">&quot;▁Let&#x27;s&quot;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">&#x27;▁test&#x27;</span>, (<span class="hljs-number">5</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;▁the&#x27;</span>, (<span class="hljs-number">10</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">&#x27;▁pre-tokenizer!&#x27;</span>, (<span class="hljs-number">14</span>, <span class="hljs-number">29</span>))]',wrap:!1}}),Et=new T({props:{code:"c3BlY2lhbF90b2tlbnMlMjAlM0QlMjAlNUIlMjIlM0NjbHMlM0UlMjIlMkMlMjAlMjIlM0NzZXAlM0UlMjIlMkMlMjAlMjIlM0N1bmslM0UlMjIlMkMlMjAlMjIlM0NwYWQlM0UlMjIlMkMlMjAlMjIlM0NtYXNrJTNFJTIyJTJDJTIwJTIyJTNDcyUzRSUyMiUyQyUyMCUyMiUzQyUyRnMlM0UlMjIlNUQlMEF0cmFpbmVyJTIwJTNEJTIwdHJhaW5lcnMuVW5pZ3JhbVRyYWluZXIoJTBBJTIwJTIwJTIwJTIwdm9jYWJfc2l6ZSUzRDI1MDAwJTJDJTIwc3BlY2lhbF90b2tlbnMlM0RzcGVjaWFsX3Rva2VucyUyQyUyMHVua190b2tlbiUzRCUyMiUzQ3VuayUzRSUyMiUwQSklMEF0b2tlbml6ZXIudHJhaW5fZnJvbV9pdGVyYXRvcihnZXRfdHJhaW5pbmdfY29ycHVzKCklMkMlMjB0cmFpbmVyJTNEdHJhaW5lcik=",highlighted:`special_tokens = [<span class="hljs-string">&quot;&lt;cls&gt;&quot;</span>, <span class="hljs-string">&quot;&lt;sep&gt;&quot;</span>, <span class="hljs-string">&quot;&lt;unk&gt;&quot;</span>, <span class="hljs-string">&quot;&lt;pad&gt;&quot;</span>, <span class="hljs-string">&quot;&lt;mask&gt;&quot;</span>, <span class="hljs-string">&quot;&lt;s&gt;&quot;</span>, <span class="hljs-string">&quot;&lt;/s&gt;&quot;</span>]
trainer = trainers.UnigramTrainer(
    vocab_size=<span class="hljs-number">25000</span>, special_tokens=special_tokens, unk_token=<span class="hljs-string">&quot;&lt;unk&gt;&quot;</span>
)
tokenizer.train_from_iterator(get_training_corpus(), trainer=trainer)`,wrap:!1}}),Ft=new T({props:{code:"dG9rZW5pemVyLm1vZGVsJTIwJTNEJTIwbW9kZWxzLlVuaWdyYW0oKSUwQXRva2VuaXplci50cmFpbiglNUIlMjJ3aWtpdGV4dC0yLnR4dCUyMiU1RCUyQyUyMHRyYWluZXIlM0R0cmFpbmVyKQ==",highlighted:`tokenizer.model = models.Unigram()
tokenizer.train([<span class="hljs-string">&quot;wikitext-2.txt&quot;</span>], trainer=trainer)`,wrap:!1}}),Kt=new T({props:{code:"ZW5jb2RpbmclMjAlM0QlMjB0b2tlbml6ZXIuZW5jb2RlKCUyMkxldCdzJTIwdGVzdCUyMHRoaXMlMjB0b2tlbml6ZXIuJTIyKSUwQXByaW50KGVuY29kaW5nLnRva2Vucyk=",highlighted:`encoding = tokenizer.encode(<span class="hljs-string">&quot;Let&#x27;s test this tokenizer.&quot;</span>)
<span class="hljs-built_in">print</span>(encoding.tokens)`,wrap:!1}}),Ot=new T({props:{code:"JTVCJyVFMiU5NiU4MUxldCclMkMlMjAlMjInJTIyJTJDJTIwJ3MnJTJDJTIwJyVFMiU5NiU4MXRlc3QnJTJDJTIwJyVFMiU5NiU4MXRoaXMnJTJDJTIwJyVFMiU5NiU4MXRvJyUyQyUyMCdrZW4nJTJDJTIwJ2l6ZXInJTJDJTIwJy4nJTVE",highlighted:'[<span class="hljs-string">&#x27;▁Let&#x27;</span>, <span class="hljs-string">&quot;&#x27;&quot;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;▁test&#x27;</span>, <span class="hljs-string">&#x27;▁this&#x27;</span>, <span class="hljs-string">&#x27;▁to&#x27;</span>, <span class="hljs-string">&#x27;ken&#x27;</span>, <span class="hljs-string">&#x27;izer&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>]',wrap:!1}}),ss=new T({props:{code:"Y2xzX3Rva2VuX2lkJTIwJTNEJTIwdG9rZW5pemVyLnRva2VuX3RvX2lkKCUyMiUzQ2NscyUzRSUyMiklMEFzZXBfdG9rZW5faWQlMjAlM0QlMjB0b2tlbml6ZXIudG9rZW5fdG9faWQoJTIyJTNDc2VwJTNFJTIyKSUwQXByaW50KGNsc190b2tlbl9pZCUyQyUyMHNlcF90b2tlbl9pZCk=",highlighted:`cls_token_id = tokenizer.token_to_id(<span class="hljs-string">&quot;&lt;cls&gt;&quot;</span>)
sep_token_id = tokenizer.token_to_id(<span class="hljs-string">&quot;&lt;sep&gt;&quot;</span>)
<span class="hljs-built_in">print</span>(cls_token_id, sep_token_id)`,wrap:!1}}),ls=new T({props:{code:"MCUyMDE=",highlighted:'<span class="hljs-number">0</span> <span class="hljs-number">1</span>',wrap:!1}}),ps=new T({props:{code:"dG9rZW5pemVyLnBvc3RfcHJvY2Vzc29yJTIwJTNEJTIwcHJvY2Vzc29ycy5UZW1wbGF0ZVByb2Nlc3NpbmcoJTBBJTIwJTIwJTIwJTIwc2luZ2xlJTNEJTIyJTI0QSUzQTAlMjAlM0NzZXAlM0UlM0EwJTIwJTNDY2xzJTNFJTNBMiUyMiUyQyUwQSUyMCUyMCUyMCUyMHBhaXIlM0QlMjIlMjRBJTNBMCUyMCUzQ3NlcCUzRSUzQTAlMjAlMjRCJTNBMSUyMCUzQ3NlcCUzRSUzQTElMjAlM0NjbHMlM0UlM0EyJTIyJTJDJTBBJTIwJTIwJTIwJTIwc3BlY2lhbF90b2tlbnMlM0QlNUIoJTIyJTNDc2VwJTNFJTIyJTJDJTIwc2VwX3Rva2VuX2lkKSUyQyUyMCglMjIlM0NjbHMlM0UlMjIlMkMlMjBjbHNfdG9rZW5faWQpJTVEJTJDJTBBKQ==",highlighted:`tokenizer.post_processor = processors.TemplateProcessing(
    single=<span class="hljs-string">&quot;$A:0 &lt;sep&gt;:0 &lt;cls&gt;:2&quot;</span>,
    pair=<span class="hljs-string">&quot;$A:0 &lt;sep&gt;:0 $B:1 &lt;sep&gt;:1 &lt;cls&gt;:2&quot;</span>,
    special_tokens=[(<span class="hljs-string">&quot;&lt;sep&gt;&quot;</span>, sep_token_id), (<span class="hljs-string">&quot;&lt;cls&gt;&quot;</span>, cls_token_id)],
)`,wrap:!1}}),is=new T({props:{code:"ZW5jb2RpbmclMjAlM0QlMjB0b2tlbml6ZXIuZW5jb2RlKCUyMkxldCdzJTIwdGVzdCUyMHRoaXMlMjB0b2tlbml6ZXIuLi4lMjIlMkMlMjAlMjJvbiUyMGElMjBwYWlyJTIwb2YlMjBzZW50ZW5jZXMhJTIyKSUwQXByaW50KGVuY29kaW5nLnRva2VucyklMEFwcmludChlbmNvZGluZy50eXBlX2lkcyk=",highlighted:`encoding = tokenizer.encode(<span class="hljs-string">&quot;Let&#x27;s test this tokenizer...&quot;</span>, <span class="hljs-string">&quot;on a pair of sentences!&quot;</span>)
<span class="hljs-built_in">print</span>(encoding.tokens)
<span class="hljs-built_in">print</span>(encoding.type_ids)`,wrap:!1}}),rs=new T({props:{code:"JTVCJyVFMiU5NiU4MUxldCclMkMlMjAlMjInJTIyJTJDJTIwJ3MnJTJDJTIwJyVFMiU5NiU4MXRlc3QnJTJDJTIwJyVFMiU5NiU4MXRoaXMnJTJDJTIwJyVFMiU5NiU4MXRvJyUyQyUyMCdrZW4nJTJDJTIwJ2l6ZXInJTJDJTIwJy4nJTJDJTIwJy4nJTJDJTIwJy4nJTJDJTIwJyUzQ3NlcCUzRSclMkMlMjAnJUUyJTk2JTgxJyUyQyUyMCdvbiclMkMlMjAnJUUyJTk2JTgxJyUyQyUyMCdhJyUyQyUyMCclRTIlOTYlODFwYWlyJyUyQyUwQSUyMCUyMCclRTIlOTYlODFvZiclMkMlMjAnJUUyJTk2JTgxc2VudGVuY2UnJTJDJTIwJ3MnJTJDJTIwJyEnJTJDJTIwJyUzQ3NlcCUzRSclMkMlMjAnJTNDY2xzJTNFJyU1RCUwQSU1QjAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAyJTVE",highlighted:`[<span class="hljs-string">&#x27;▁Let&#x27;</span>, <span class="hljs-string">&quot;&#x27;&quot;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;▁test&#x27;</span>, <span class="hljs-string">&#x27;▁this&#x27;</span>, <span class="hljs-string">&#x27;▁to&#x27;</span>, <span class="hljs-string">&#x27;ken&#x27;</span>, <span class="hljs-string">&#x27;izer&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;&lt;sep&gt;&#x27;</span>, <span class="hljs-string">&#x27;▁&#x27;</span>, <span class="hljs-string">&#x27;on&#x27;</span>, <span class="hljs-string">&#x27;▁&#x27;</span>, <span class="hljs-string">&#x27;a&#x27;</span>, <span class="hljs-string">&#x27;▁pair&#x27;</span>,
  <span class="hljs-string">&#x27;▁of&#x27;</span>, <span class="hljs-string">&#x27;▁sentence&#x27;</span>, <span class="hljs-string">&#x27;s&#x27;</span>, <span class="hljs-string">&#x27;!&#x27;</span>, <span class="hljs-string">&#x27;&lt;sep&gt;&#x27;</span>, <span class="hljs-string">&#x27;&lt;cls&gt;&#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-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</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>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>]`,wrap:!1}}),os=new T({props:{code:"dG9rZW5pemVyLmRlY29kZXIlMjAlM0QlMjBkZWNvZGVycy5NZXRhc3BhY2UoKQ==",highlighted:"tokenizer.decoder = decoders.Metaspace()",wrap:!1}}),ys=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFByZVRyYWluZWRUb2tlbml6ZXJGYXN0JTBBJTBBd3JhcHBlZF90b2tlbml6ZXIlMjAlM0QlMjBQcmVUcmFpbmVkVG9rZW5pemVyRmFzdCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZXJfb2JqZWN0JTNEdG9rZW5pemVyJTJDJTBBJTIwJTIwJTIwJTIwYm9zX3Rva2VuJTNEJTIyJTNDcyUzRSUyMiUyQyUwQSUyMCUyMCUyMCUyMGVvc190b2tlbiUzRCUyMiUzQyUyRnMlM0UlMjIlMkMlMEElMjAlMjAlMjAlMjB1bmtfdG9rZW4lM0QlMjIlM0N1bmslM0UlMjIlMkMlMEElMjAlMjAlMjAlMjBwYWRfdG9rZW4lM0QlMjIlM0NwYWQlM0UlMjIlMkMlMEElMjAlMjAlMjAlMjBjbHNfdG9rZW4lM0QlMjIlM0NjbHMlM0UlMjIlMkMlMEElMjAlMjAlMjAlMjBzZXBfdG9rZW4lM0QlMjIlM0NzZXAlM0UlMjIlMkMlMEElMjAlMjAlMjAlMjBtYXNrX3Rva2VuJTNEJTIyJTNDbWFzayUzRSUyMiUyQyUwQSUyMCUyMCUyMCUyMHBhZGRpbmdfc2lkZSUzRCUyMmxlZnQlMjIlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> PreTrainedTokenizerFast

wrapped_tokenizer = PreTrainedTokenizerFast(
    tokenizer_object=tokenizer,
    bos_token=<span class="hljs-string">&quot;&lt;s&gt;&quot;</span>,
    eos_token=<span class="hljs-string">&quot;&lt;/s&gt;&quot;</span>,
    unk_token=<span class="hljs-string">&quot;&lt;unk&gt;&quot;</span>,
    pad_token=<span class="hljs-string">&quot;&lt;pad&gt;&quot;</span>,
    cls_token=<span class="hljs-string">&quot;&lt;cls&gt;&quot;</span>,
    sep_token=<span class="hljs-string">&quot;&lt;sep&gt;&quot;</span>,
    mask_token=<span class="hljs-string">&quot;&lt;mask&gt;&quot;</span>,
    padding_side=<span class="hljs-string">&quot;left&quot;</span>,
)`,wrap:!1}}),Ts=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFhMTmV0VG9rZW5pemVyRmFzdCUwQSUwQXdyYXBwZWRfdG9rZW5pemVyJTIwJTNEJTIwWExOZXRUb2tlbml6ZXJGYXN0KHRva2VuaXplcl9vYmplY3QlM0R0b2tlbml6ZXIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> XLNetTokenizerFast

wrapped_tokenizer = XLNetTokenizerFast(tokenizer_object=tokenizer)`,wrap:!1}}),us=new ci({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter6/8.mdx"}}),{c(){j=a("meta"),d=n(),u=a("p"),ks=n(),M($.$$.fragment),Us=n(),M(U.$$.fragment),bs=n(),M(b.$$.fragment),ws=n(),w=a("p"),w.textContent=wp,xs=n(),x=a("ul"),x.innerHTML=xp,gs=n(),g=a("p"),g.textContent=gp,hs=n(),k=a("div"),k.innerHTML=hp,zs=n(),h=a("p"),h.innerHTML=zp,Is=n(),M(z.$$.fragment),Cs=n(),I=a("p"),I.innerHTML=Ip,Zs=n(),C=a("ul"),C.innerHTML=Cp,Vs=n(),Z=a("p"),Z.innerHTML=Zp,vs=n(),M(V.$$.fragment),_s=n(),v=a("p"),v.innerHTML=Vp,Qs=n(),M(_.$$.fragment),Bs=n(),Q=a("p"),Q.innerHTML=vp,Ws=n(),M(B.$$.fragment),Xs=n(),W=a("p"),W.textContent=_p,Rs=n(),M(X.$$.fragment),As=n(),R=a("p"),R.innerHTML=Qp,Ns=n(),A=a("p"),A.innerHTML=Bp,Gs=n(),M(N.$$.fragment),Ls=n(),G=a("p"),G.innerHTML=Wp,qs=n(),L=a("p"),L.innerHTML=Xp,Hs=n(),q=a("p"),q.innerHTML=Rp,Ds=n(),M(H.$$.fragment),Es=n(),D=a("p"),D.textContent=Ap,Ss=n(),E=a("p"),E.innerHTML=Np,Ps=n(),M(S.$$.fragment),Fs=n(),P=a("p"),P.innerHTML=Gp,Ys=n(),F=a("p"),F.innerHTML=Lp,Ks=n(),M(Y.$$.fragment),Os=n(),M(K.$$.fragment),el=n(),M(f.$$.fragment),tl=n(),O=a("p"),O.innerHTML=qp,sl=n(),M(ee.$$.fragment),ll=n(),te=a("p"),te.textContent=Hp,nl=n(),M(se.$$.fragment),pl=n(),le=a("p"),le.innerHTML=Dp,al=n(),M(ne.$$.fragment),il=n(),M(pe.$$.fragment),rl=n(),ae=a("p"),ae.innerHTML=Ep,Ml=n(),M(ie.$$.fragment),ol=n(),M(re.$$.fragment),cl=n(),Me=a("p"),Me.innerHTML=Sp,ml=n(),M(oe.$$.fragment),yl=n(),M(ce.$$.fragment),Jl=n(),me=a("p"),me.innerHTML=Pp,Tl=n(),ye=a("p"),ye.textContent=Fp,jl=n(),M(Je.$$.fragment),ul=n(),Te=a("p"),Te.innerHTML=Yp,kl=n(),je=a("p"),je.textContent=Kp,fl=n(),M(ue.$$.fragment),dl=n(),ke=a("p"),ke.innerHTML=Op,$l=n(),M(fe.$$.fragment),Ul=n(),de=a("p"),de.innerHTML=ea,bl=n(),M($e.$$.fragment),wl=n(),M(Ue.$$.fragment),xl=n(),be=a("p"),be.innerHTML=ta,gl=n(),we=a("p"),we.innerHTML=sa,hl=n(),xe=a("p"),xe.innerHTML=la,zl=n(),M(ge.$$.fragment),Il=n(),M(he.$$.fragment),Cl=n(),ze=a("p"),ze.innerHTML=na,Zl=n(),Ie=a("p"),Ie.textContent=pa,Vl=n(),M(Ce.$$.fragment),vl=n(),Ze=a("p"),Ze.textContent=aa,_l=n(),Ve=a("p"),Ve.textContent=ia,Ql=n(),M(ve.$$.fragment),Bl=n(),M(_e.$$.fragment),Wl=n(),Qe=a("p"),Qe.textContent=ra,Xl=n(),M(Be.$$.fragment),Rl=n(),M(We.$$.fragment),Al=n(),Xe=a("p"),Xe.textContent=Ma,Nl=n(),M(Re.$$.fragment),Gl=n(),Ae=a("p"),Ae.innerHTML=oa,Ll=n(),M(Ne.$$.fragment),ql=n(),M(Ge.$$.fragment),Hl=n(),Le=a("p"),Le.textContent=ca,Dl=n(),M(qe.$$.fragment),El=n(),He=a("p"),He.innerHTML=ma,Sl=n(),M(De.$$.fragment),Pl=n(),Ee=a("p"),Ee.innerHTML=ya,Fl=n(),Se=a("p"),Se.innerHTML=Ja,Yl=n(),M(Pe.$$.fragment),Kl=n(),Fe=a("p"),Fe.innerHTML=Ta,Ol=n(),M(Ye.$$.fragment),en=n(),Ke=a("p"),Ke.innerHTML=ja,tn=n(),Oe=a("p"),Oe.textContent=ua,sn=n(),M(et.$$.fragment),ln=n(),tt=a("p"),tt.innerHTML=ka,nn=n(),M(st.$$.fragment),pn=n(),lt=a("p"),lt.innerHTML=fa,an=n(),nt=a("p"),nt.textContent=da,rn=n(),M(pt.$$.fragment),Mn=n(),at=a("p"),at.innerHTML=$a,on=n(),it=a("p"),it.textContent=Ua,cn=n(),M(rt.$$.fragment),mn=n(),M(Mt.$$.fragment),yn=n(),ot=a("p"),ot.textContent=ba,Jn=n(),M(ct.$$.fragment),Tn=n(),mt=a("p"),mt.innerHTML=wa,jn=n(),yt=a("p"),yt.textContent=xa,un=n(),M(Jt.$$.fragment),kn=n(),Tt=a("p"),Tt.textContent=ga,fn=n(),M(jt.$$.fragment),dn=n(),M(ut.$$.fragment),$n=n(),kt=a("p"),kt.textContent=ha,Un=n(),M(ft.$$.fragment),bn=n(),dt=a("p"),dt.innerHTML=za,wn=n(),$t=a("p"),$t.innerHTML=Ia,xn=n(),M(Ut.$$.fragment),gn=n(),M(bt.$$.fragment),hn=n(),wt=a("p"),wt.textContent=Ca,zn=n(),M(xt.$$.fragment),In=n(),gt=a("p"),gt.textContent=Za,Cn=n(),M(ht.$$.fragment),Zn=n(),M(zt.$$.fragment),Vn=n(),It=a("p"),It.innerHTML=Va,vn=n(),M(Ct.$$.fragment),_n=n(),Zt=a("p"),Zt.textContent=va,Qn=n(),M(Vt.$$.fragment),Bn=n(),vt=a("p"),vt.textContent=_a,Wn=n(),M(_t.$$.fragment),Xn=n(),Qt=a("p"),Qt.innerHTML=Qa,Rn=n(),M(Bt.$$.fragment),An=n(),Wt=a("p"),Wt.textContent=Ba,Nn=n(),Xt=a("p"),Xt.textContent=Wa,Gn=n(),M(Rt.$$.fragment),Ln=n(),At=a("p"),At.innerHTML=Xa,qn=n(),Nt=a("p"),Nt.innerHTML=Ra,Hn=n(),M(Gt.$$.fragment),Dn=n(),Lt=a("p"),Lt.textContent=Aa,En=n(),M(qt.$$.fragment),Sn=n(),M(Ht.$$.fragment),Pn=n(),Dt=a("p"),Dt.textContent=Na,Fn=n(),M(Et.$$.fragment),Yn=n(),St=a("p"),St.innerHTML=Ga,Kn=n(),Pt=a("p"),Pt.textContent=La,On=n(),M(Ft.$$.fragment),ep=n(),Yt=a("p"),Yt.textContent=qa,tp=n(),M(Kt.$$.fragment),sp=n(),M(Ot.$$.fragment),lp=n(),es=a("p"),es.innerHTML=Ha,np=n(),ts=a("p"),ts.innerHTML=Da,pp=n(),M(ss.$$.fragment),ap=n(),M(ls.$$.fragment),ip=n(),ns=a("p"),ns.textContent=Ea,rp=n(),M(ps.$$.fragment),Mp=n(),as=a("p"),as.textContent=Sa,op=n(),M(is.$$.fragment),cp=n(),M(rs.$$.fragment),mp=n(),Ms=a("p"),Ms.innerHTML=Pa,yp=n(),M(os.$$.fragment),Jp=n(),cs=a("p"),cs.innerHTML=Fa,Tp=n(),ms=a("p"),ms.innerHTML=Ya,jp=n(),M(ys.$$.fragment),up=n(),Js=a("p"),Js.textContent=Ka,kp=n(),M(Ts.$$.fragment),fp=n(),js=a("p"),js.textContent=Oa,dp=n(),M(us.$$.fragment),$p=n(),fs=a("p"),this.h()},l(e){const t=ii("svelte-u9bgzb",document.head);j=i(t,"META",{name:!0,content:!0}),t.forEach(s),d=p(e),u=i(e,"P",{}),ti(u).forEach(s),ks=p(e),o($.$$.fragment,e),Us=p(e),o(U.$$.fragment,e),bs=p(e),o(b.$$.fragment,e),ws=p(e),w=i(e,"P",{"data-svelte-h":!0}),r(w)!=="svelte-18ftb0e"&&(w.textContent=wp),xs=p(e),x=i(e,"UL",{"data-svelte-h":!0}),r(x)!=="svelte-15gli7q"&&(x.innerHTML=xp),gs=p(e),g=i(e,"P",{"data-svelte-h":!0}),r(g)!=="svelte-291axk"&&(g.textContent=gp),hs=p(e),k=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(k)!=="svelte-oxfng3"&&(k.innerHTML=hp),zs=p(e),h=i(e,"P",{"data-svelte-h":!0}),r(h)!=="svelte-1ff2jlx"&&(h.innerHTML=zp),Is=p(e),o(z.$$.fragment,e),Cs=p(e),I=i(e,"P",{"data-svelte-h":!0}),r(I)!=="svelte-1vvih7n"&&(I.innerHTML=Ip),Zs=p(e),C=i(e,"UL",{"data-svelte-h":!0}),r(C)!=="svelte-dvvqv1"&&(C.innerHTML=Cp),Vs=p(e),Z=i(e,"P",{"data-svelte-h":!0}),r(Z)!=="svelte-1jsf4sz"&&(Z.innerHTML=Zp),vs=p(e),o(V.$$.fragment,e),_s=p(e),v=i(e,"P",{"data-svelte-h":!0}),r(v)!=="svelte-pr4y9f"&&(v.innerHTML=Vp),Qs=p(e),o(_.$$.fragment,e),Bs=p(e),Q=i(e,"P",{"data-svelte-h":!0}),r(Q)!=="svelte-pc5dys"&&(Q.innerHTML=vp),Ws=p(e),o(B.$$.fragment,e),Xs=p(e),W=i(e,"P",{"data-svelte-h":!0}),r(W)!=="svelte-1x7ry89"&&(W.textContent=_p),Rs=p(e),o(X.$$.fragment,e),As=p(e),R=i(e,"P",{"data-svelte-h":!0}),r(R)!=="svelte-ajstz2"&&(R.innerHTML=Qp),Ns=p(e),A=i(e,"P",{"data-svelte-h":!0}),r(A)!=="svelte-i9hqdc"&&(A.innerHTML=Bp),Gs=p(e),o(N.$$.fragment,e),Ls=p(e),G=i(e,"P",{"data-svelte-h":!0}),r(G)!=="svelte-147b2pp"&&(G.innerHTML=Wp),qs=p(e),L=i(e,"P",{"data-svelte-h":!0}),r(L)!=="svelte-1plpyqu"&&(L.innerHTML=Xp),Hs=p(e),q=i(e,"P",{"data-svelte-h":!0}),r(q)!=="svelte-opz6hj"&&(q.innerHTML=Rp),Ds=p(e),o(H.$$.fragment,e),Es=p(e),D=i(e,"P",{"data-svelte-h":!0}),r(D)!=="svelte-1jdycpm"&&(D.textContent=Ap),Ss=p(e),E=i(e,"P",{"data-svelte-h":!0}),r(E)!=="svelte-1dc9u8n"&&(E.innerHTML=Np),Ps=p(e),o(S.$$.fragment,e),Fs=p(e),P=i(e,"P",{"data-svelte-h":!0}),r(P)!=="svelte-1nx0kml"&&(P.innerHTML=Gp),Ys=p(e),F=i(e,"P",{"data-svelte-h":!0}),r(F)!=="svelte-1x5k2nx"&&(F.innerHTML=Lp),Ks=p(e),o(Y.$$.fragment,e),Os=p(e),o(K.$$.fragment,e),el=p(e),o(f.$$.fragment,e),tl=p(e),O=i(e,"P",{"data-svelte-h":!0}),r(O)!=="svelte-1a46515"&&(O.innerHTML=qp),sl=p(e),o(ee.$$.fragment,e),ll=p(e),te=i(e,"P",{"data-svelte-h":!0}),r(te)!=="svelte-1iw9935"&&(te.textContent=Hp),nl=p(e),o(se.$$.fragment,e),pl=p(e),le=i(e,"P",{"data-svelte-h":!0}),r(le)!=="svelte-t7karu"&&(le.innerHTML=Dp),al=p(e),o(ne.$$.fragment,e),il=p(e),o(pe.$$.fragment,e),rl=p(e),ae=i(e,"P",{"data-svelte-h":!0}),r(ae)!=="svelte-ug9wut"&&(ae.innerHTML=Ep),Ml=p(e),o(ie.$$.fragment,e),ol=p(e),o(re.$$.fragment,e),cl=p(e),Me=i(e,"P",{"data-svelte-h":!0}),r(Me)!=="svelte-1msgn8m"&&(Me.innerHTML=Sp),ml=p(e),o(oe.$$.fragment,e),yl=p(e),o(ce.$$.fragment,e),Jl=p(e),me=i(e,"P",{"data-svelte-h":!0}),r(me)!=="svelte-1j4lxpk"&&(me.innerHTML=Pp),Tl=p(e),ye=i(e,"P",{"data-svelte-h":!0}),r(ye)!=="svelte-fi088p"&&(ye.textContent=Fp),jl=p(e),o(Je.$$.fragment,e),ul=p(e),Te=i(e,"P",{"data-svelte-h":!0}),r(Te)!=="svelte-1kv5si3"&&(Te.innerHTML=Yp),kl=p(e),je=i(e,"P",{"data-svelte-h":!0}),r(je)!=="svelte-88oi4e"&&(je.textContent=Kp),fl=p(e),o(ue.$$.fragment,e),dl=p(e),ke=i(e,"P",{"data-svelte-h":!0}),r(ke)!=="svelte-1n29fvp"&&(ke.innerHTML=Op),$l=p(e),o(fe.$$.fragment,e),Ul=p(e),de=i(e,"P",{"data-svelte-h":!0}),r(de)!=="svelte-1s00y6r"&&(de.innerHTML=ea),bl=p(e),o($e.$$.fragment,e),wl=p(e),o(Ue.$$.fragment,e),xl=p(e),be=i(e,"P",{"data-svelte-h":!0}),r(be)!=="svelte-1796xa2"&&(be.innerHTML=ta),gl=p(e),we=i(e,"P",{"data-svelte-h":!0}),r(we)!=="svelte-b7z3yo"&&(we.innerHTML=sa),hl=p(e),xe=i(e,"P",{"data-svelte-h":!0}),r(xe)!=="svelte-1mw3npm"&&(xe.innerHTML=la),zl=p(e),o(ge.$$.fragment,e),Il=p(e),o(he.$$.fragment,e),Cl=p(e),ze=i(e,"P",{"data-svelte-h":!0}),r(ze)!=="svelte-kmlurl"&&(ze.innerHTML=na),Zl=p(e),Ie=i(e,"P",{"data-svelte-h":!0}),r(Ie)!=="svelte-w89tpo"&&(Ie.textContent=pa),Vl=p(e),o(Ce.$$.fragment,e),vl=p(e),Ze=i(e,"P",{"data-svelte-h":!0}),r(Ze)!=="svelte-wmhscv"&&(Ze.textContent=aa),_l=p(e),Ve=i(e,"P",{"data-svelte-h":!0}),r(Ve)!=="svelte-1b5gm3a"&&(Ve.textContent=ia),Ql=p(e),o(ve.$$.fragment,e),Bl=p(e),o(_e.$$.fragment,e),Wl=p(e),Qe=i(e,"P",{"data-svelte-h":!0}),r(Qe)!=="svelte-11afg1q"&&(Qe.textContent=ra),Xl=p(e),o(Be.$$.fragment,e),Rl=p(e),o(We.$$.fragment,e),Al=p(e),Xe=i(e,"P",{"data-svelte-h":!0}),r(Xe)!=="svelte-1rxlcm4"&&(Xe.textContent=Ma),Nl=p(e),o(Re.$$.fragment,e),Gl=p(e),Ae=i(e,"P",{"data-svelte-h":!0}),r(Ae)!=="svelte-11om3og"&&(Ae.innerHTML=oa),Ll=p(e),o(Ne.$$.fragment,e),ql=p(e),o(Ge.$$.fragment,e),Hl=p(e),Le=i(e,"P",{"data-svelte-h":!0}),r(Le)!=="svelte-xl2cm3"&&(Le.textContent=ca),Dl=p(e),o(qe.$$.fragment,e),El=p(e),He=i(e,"P",{"data-svelte-h":!0}),r(He)!=="svelte-1ufmnts"&&(He.innerHTML=ma),Sl=p(e),o(De.$$.fragment,e),Pl=p(e),Ee=i(e,"P",{"data-svelte-h":!0}),r(Ee)!=="svelte-1nmxiy7"&&(Ee.innerHTML=ya),Fl=p(e),Se=i(e,"P",{"data-svelte-h":!0}),r(Se)!=="svelte-fxvkaq"&&(Se.innerHTML=Ja),Yl=p(e),o(Pe.$$.fragment,e),Kl=p(e),Fe=i(e,"P",{"data-svelte-h":!0}),r(Fe)!=="svelte-1we7610"&&(Fe.innerHTML=Ta),Ol=p(e),o(Ye.$$.fragment,e),en=p(e),Ke=i(e,"P",{"data-svelte-h":!0}),r(Ke)!=="svelte-qr5eef"&&(Ke.innerHTML=ja),tn=p(e),Oe=i(e,"P",{"data-svelte-h":!0}),r(Oe)!=="svelte-1y0zlzn"&&(Oe.textContent=ua),sn=p(e),o(et.$$.fragment,e),ln=p(e),tt=i(e,"P",{"data-svelte-h":!0}),r(tt)!=="svelte-1s4prcg"&&(tt.innerHTML=ka),nn=p(e),o(st.$$.fragment,e),pn=p(e),lt=i(e,"P",{"data-svelte-h":!0}),r(lt)!=="svelte-27o3j0"&&(lt.innerHTML=fa),an=p(e),nt=i(e,"P",{"data-svelte-h":!0}),r(nt)!=="svelte-1defrwn"&&(nt.textContent=da),rn=p(e),o(pt.$$.fragment,e),Mn=p(e),at=i(e,"P",{"data-svelte-h":!0}),r(at)!=="svelte-1rzo02i"&&(at.innerHTML=$a),on=p(e),it=i(e,"P",{"data-svelte-h":!0}),r(it)!=="svelte-1eicimw"&&(it.textContent=Ua),cn=p(e),o(rt.$$.fragment,e),mn=p(e),o(Mt.$$.fragment,e),yn=p(e),ot=i(e,"P",{"data-svelte-h":!0}),r(ot)!=="svelte-ne1ona"&&(ot.textContent=ba),Jn=p(e),o(ct.$$.fragment,e),Tn=p(e),mt=i(e,"P",{"data-svelte-h":!0}),r(mt)!=="svelte-1csmvaq"&&(mt.innerHTML=wa),jn=p(e),yt=i(e,"P",{"data-svelte-h":!0}),r(yt)!=="svelte-27mvab"&&(yt.textContent=xa),un=p(e),o(Jt.$$.fragment,e),kn=p(e),Tt=i(e,"P",{"data-svelte-h":!0}),r(Tt)!=="svelte-1820may"&&(Tt.textContent=ga),fn=p(e),o(jt.$$.fragment,e),dn=p(e),o(ut.$$.fragment,e),$n=p(e),kt=i(e,"P",{"data-svelte-h":!0}),r(kt)!=="svelte-12j9c7e"&&(kt.textContent=ha),Un=p(e),o(ft.$$.fragment,e),bn=p(e),dt=i(e,"P",{"data-svelte-h":!0}),r(dt)!=="svelte-192e8el"&&(dt.innerHTML=za),wn=p(e),$t=i(e,"P",{"data-svelte-h":!0}),r($t)!=="svelte-s763fn"&&($t.innerHTML=Ia),xn=p(e),o(Ut.$$.fragment,e),gn=p(e),o(bt.$$.fragment,e),hn=p(e),wt=i(e,"P",{"data-svelte-h":!0}),r(wt)!=="svelte-9u7vle"&&(wt.textContent=Ca),zn=p(e),o(xt.$$.fragment,e),In=p(e),gt=i(e,"P",{"data-svelte-h":!0}),r(gt)!=="svelte-161fk3k"&&(gt.textContent=Za),Cn=p(e),o(ht.$$.fragment,e),Zn=p(e),o(zt.$$.fragment,e),Vn=p(e),It=i(e,"P",{"data-svelte-h":!0}),r(It)!=="svelte-vfiyqu"&&(It.innerHTML=Va),vn=p(e),o(Ct.$$.fragment,e),_n=p(e),Zt=i(e,"P",{"data-svelte-h":!0}),r(Zt)!=="svelte-99692o"&&(Zt.textContent=va),Qn=p(e),o(Vt.$$.fragment,e),Bn=p(e),vt=i(e,"P",{"data-svelte-h":!0}),r(vt)!=="svelte-js49zn"&&(vt.textContent=_a),Wn=p(e),o(_t.$$.fragment,e),Xn=p(e),Qt=i(e,"P",{"data-svelte-h":!0}),r(Qt)!=="svelte-15f8gr4"&&(Qt.innerHTML=Qa),Rn=p(e),o(Bt.$$.fragment,e),An=p(e),Wt=i(e,"P",{"data-svelte-h":!0}),r(Wt)!=="svelte-bnnqdu"&&(Wt.textContent=Ba),Nn=p(e),Xt=i(e,"P",{"data-svelte-h":!0}),r(Xt)!=="svelte-1l9whg7"&&(Xt.textContent=Wa),Gn=p(e),o(Rt.$$.fragment,e),Ln=p(e),At=i(e,"P",{"data-svelte-h":!0}),r(At)!=="svelte-7k226e"&&(At.innerHTML=Xa),qn=p(e),Nt=i(e,"P",{"data-svelte-h":!0}),r(Nt)!=="svelte-12u7soz"&&(Nt.innerHTML=Ra),Hn=p(e),o(Gt.$$.fragment,e),Dn=p(e),Lt=i(e,"P",{"data-svelte-h":!0}),r(Lt)!=="svelte-3k86to"&&(Lt.textContent=Aa),En=p(e),o(qt.$$.fragment,e),Sn=p(e),o(Ht.$$.fragment,e),Pn=p(e),Dt=i(e,"P",{"data-svelte-h":!0}),r(Dt)!=="svelte-efo75"&&(Dt.textContent=Na),Fn=p(e),o(Et.$$.fragment,e),Yn=p(e),St=i(e,"P",{"data-svelte-h":!0}),r(St)!=="svelte-jkoe6i"&&(St.innerHTML=Ga),Kn=p(e),Pt=i(e,"P",{"data-svelte-h":!0}),r(Pt)!=="svelte-a1nslg"&&(Pt.textContent=La),On=p(e),o(Ft.$$.fragment,e),ep=p(e),Yt=i(e,"P",{"data-svelte-h":!0}),r(Yt)!=="svelte-lbdgvd"&&(Yt.textContent=qa),tp=p(e),o(Kt.$$.fragment,e),sp=p(e),o(Ot.$$.fragment,e),lp=p(e),es=i(e,"P",{"data-svelte-h":!0}),r(es)!=="svelte-13dsx6z"&&(es.innerHTML=Ha),np=p(e),ts=i(e,"P",{"data-svelte-h":!0}),r(ts)!=="svelte-1qep19e"&&(ts.innerHTML=Da),pp=p(e),o(ss.$$.fragment,e),ap=p(e),o(ls.$$.fragment,e),ip=p(e),ns=i(e,"P",{"data-svelte-h":!0}),r(ns)!=="svelte-1tujl3o"&&(ns.textContent=Ea),rp=p(e),o(ps.$$.fragment,e),Mp=p(e),as=i(e,"P",{"data-svelte-h":!0}),r(as)!=="svelte-kqopcc"&&(as.textContent=Sa),op=p(e),o(is.$$.fragment,e),cp=p(e),o(rs.$$.fragment,e),mp=p(e),Ms=i(e,"P",{"data-svelte-h":!0}),r(Ms)!=="svelte-uyuyqi"&&(Ms.innerHTML=Pa),yp=p(e),o(os.$$.fragment,e),Jp=p(e),cs=i(e,"P",{"data-svelte-h":!0}),r(cs)!=="svelte-1lgl7hm"&&(cs.innerHTML=Fa),Tp=p(e),ms=i(e,"P",{"data-svelte-h":!0}),r(ms)!=="svelte-1yukk2q"&&(ms.innerHTML=Ya),jp=p(e),o(ys.$$.fragment,e),up=p(e),Js=i(e,"P",{"data-svelte-h":!0}),r(Js)!=="svelte-m9h857"&&(Js.textContent=Ka),kp=p(e),o(Ts.$$.fragment,e),fp=p(e),js=i(e,"P",{"data-svelte-h":!0}),r(js)!=="svelte-1hiamoq"&&(js.textContent=Oa),dp=p(e),o(us.$$.fragment,e),$p=p(e),fs=i(e,"P",{}),ti(fs).forEach(s),this.h()},h(){bp(j,"name","hf:doc:metadata"),bp(j,"content",ji),bp(k,"class","flex justify-center")},m(e,t){ri(document.head,j),l(e,d,t),l(e,u,t),l(e,ks,t),c($,e,t),l(e,Us,t),c(U,e,t),l(e,bs,t),c(b,e,t),l(e,ws,t),l(e,w,t),l(e,xs,t),l(e,x,t),l(e,gs,t),l(e,g,t),l(e,hs,t),l(e,k,t),l(e,zs,t),l(e,h,t),l(e,Is,t),c(z,e,t),l(e,Cs,t),l(e,I,t),l(e,Zs,t),l(e,C,t),l(e,Vs,t),l(e,Z,t),l(e,vs,t),c(V,e,t),l(e,_s,t),l(e,v,t),l(e,Qs,t),c(_,e,t),l(e,Bs,t),l(e,Q,t),l(e,Ws,t),c(B,e,t),l(e,Xs,t),l(e,W,t),l(e,Rs,t),c(X,e,t),l(e,As,t),l(e,R,t),l(e,Ns,t),l(e,A,t),l(e,Gs,t),c(N,e,t),l(e,Ls,t),l(e,G,t),l(e,qs,t),l(e,L,t),l(e,Hs,t),l(e,q,t),l(e,Ds,t),c(H,e,t),l(e,Es,t),l(e,D,t),l(e,Ss,t),l(e,E,t),l(e,Ps,t),c(S,e,t),l(e,Fs,t),l(e,P,t),l(e,Ys,t),l(e,F,t),l(e,Ks,t),c(Y,e,t),l(e,Os,t),c(K,e,t),l(e,el,t),c(f,e,t),l(e,tl,t),l(e,O,t),l(e,sl,t),c(ee,e,t),l(e,ll,t),l(e,te,t),l(e,nl,t),c(se,e,t),l(e,pl,t),l(e,le,t),l(e,al,t),c(ne,e,t),l(e,il,t),c(pe,e,t),l(e,rl,t),l(e,ae,t),l(e,Ml,t),c(ie,e,t),l(e,ol,t),c(re,e,t),l(e,cl,t),l(e,Me,t),l(e,ml,t),c(oe,e,t),l(e,yl,t),c(ce,e,t),l(e,Jl,t),l(e,me,t),l(e,Tl,t),l(e,ye,t),l(e,jl,t),c(Je,e,t),l(e,ul,t),l(e,Te,t),l(e,kl,t),l(e,je,t),l(e,fl,t),c(ue,e,t),l(e,dl,t),l(e,ke,t),l(e,$l,t),c(fe,e,t),l(e,Ul,t),l(e,de,t),l(e,bl,t),c($e,e,t),l(e,wl,t),c(Ue,e,t),l(e,xl,t),l(e,be,t),l(e,gl,t),l(e,we,t),l(e,hl,t),l(e,xe,t),l(e,zl,t),c(ge,e,t),l(e,Il,t),c(he,e,t),l(e,Cl,t),l(e,ze,t),l(e,Zl,t),l(e,Ie,t),l(e,Vl,t),c(Ce,e,t),l(e,vl,t),l(e,Ze,t),l(e,_l,t),l(e,Ve,t),l(e,Ql,t),c(ve,e,t),l(e,Bl,t),c(_e,e,t),l(e,Wl,t),l(e,Qe,t),l(e,Xl,t),c(Be,e,t),l(e,Rl,t),c(We,e,t),l(e,Al,t),l(e,Xe,t),l(e,Nl,t),c(Re,e,t),l(e,Gl,t),l(e,Ae,t),l(e,Ll,t),c(Ne,e,t),l(e,ql,t),c(Ge,e,t),l(e,Hl,t),l(e,Le,t),l(e,Dl,t),c(qe,e,t),l(e,El,t),l(e,He,t),l(e,Sl,t),c(De,e,t),l(e,Pl,t),l(e,Ee,t),l(e,Fl,t),l(e,Se,t),l(e,Yl,t),c(Pe,e,t),l(e,Kl,t),l(e,Fe,t),l(e,Ol,t),c(Ye,e,t),l(e,en,t),l(e,Ke,t),l(e,tn,t),l(e,Oe,t),l(e,sn,t),c(et,e,t),l(e,ln,t),l(e,tt,t),l(e,nn,t),c(st,e,t),l(e,pn,t),l(e,lt,t),l(e,an,t),l(e,nt,t),l(e,rn,t),c(pt,e,t),l(e,Mn,t),l(e,at,t),l(e,on,t),l(e,it,t),l(e,cn,t),c(rt,e,t),l(e,mn,t),c(Mt,e,t),l(e,yn,t),l(e,ot,t),l(e,Jn,t),c(ct,e,t),l(e,Tn,t),l(e,mt,t),l(e,jn,t),l(e,yt,t),l(e,un,t),c(Jt,e,t),l(e,kn,t),l(e,Tt,t),l(e,fn,t),c(jt,e,t),l(e,dn,t),c(ut,e,t),l(e,$n,t),l(e,kt,t),l(e,Un,t),c(ft,e,t),l(e,bn,t),l(e,dt,t),l(e,wn,t),l(e,$t,t),l(e,xn,t),c(Ut,e,t),l(e,gn,t),c(bt,e,t),l(e,hn,t),l(e,wt,t),l(e,zn,t),c(xt,e,t),l(e,In,t),l(e,gt,t),l(e,Cn,t),c(ht,e,t),l(e,Zn,t),c(zt,e,t),l(e,Vn,t),l(e,It,t),l(e,vn,t),c(Ct,e,t),l(e,_n,t),l(e,Zt,t),l(e,Qn,t),c(Vt,e,t),l(e,Bn,t),l(e,vt,t),l(e,Wn,t),c(_t,e,t),l(e,Xn,t),l(e,Qt,t),l(e,Rn,t),c(Bt,e,t),l(e,An,t),l(e,Wt,t),l(e,Nn,t),l(e,Xt,t),l(e,Gn,t),c(Rt,e,t),l(e,Ln,t),l(e,At,t),l(e,qn,t),l(e,Nt,t),l(e,Hn,t),c(Gt,e,t),l(e,Dn,t),l(e,Lt,t),l(e,En,t),c(qt,e,t),l(e,Sn,t),c(Ht,e,t),l(e,Pn,t),l(e,Dt,t),l(e,Fn,t),c(Et,e,t),l(e,Yn,t),l(e,St,t),l(e,Kn,t),l(e,Pt,t),l(e,On,t),c(Ft,e,t),l(e,ep,t),l(e,Yt,t),l(e,tp,t),c(Kt,e,t),l(e,sp,t),c(Ot,e,t),l(e,lp,t),l(e,es,t),l(e,np,t),l(e,ts,t),l(e,pp,t),c(ss,e,t),l(e,ap,t),c(ls,e,t),l(e,ip,t),l(e,ns,t),l(e,rp,t),c(ps,e,t),l(e,Mp,t),l(e,as,t),l(e,op,t),c(is,e,t),l(e,cp,t),c(rs,e,t),l(e,mp,t),l(e,Ms,t),l(e,yp,t),c(os,e,t),l(e,Jp,t),l(e,cs,t),l(e,Tp,t),l(e,ms,t),l(e,jp,t),c(ys,e,t),l(e,up,t),l(e,Js,t),l(e,kp,t),c(Ts,e,t),l(e,fp,t),l(e,js,t),l(e,dp,t),c(us,e,t),l(e,$p,t),l(e,fs,t),Up=!0},p(e,[t]){const ei={};t&2&&(ei.$$scope={dirty:t,ctx:e}),f.$set(ei)},i(e){Up||(m($.$$.fragment,e),m(U.$$.fragment,e),m(b.$$.fragment,e),m(z.$$.fragment,e),m(V.$$.fragment,e),m(_.$$.fragment,e),m(B.$$.fragment,e),m(X.$$.fragment,e),m(N.$$.fragment,e),m(H.$$.fragment,e),m(S.$$.fragment,e),m(Y.$$.fragment,e),m(K.$$.fragment,e),m(f.$$.fragment,e),m(ee.$$.fragment,e),m(se.$$.fragment,e),m(ne.$$.fragment,e),m(pe.$$.fragment,e),m(ie.$$.fragment,e),m(re.$$.fragment,e),m(oe.$$.fragment,e),m(ce.$$.fragment,e),m(Je.$$.fragment,e),m(ue.$$.fragment,e),m(fe.$$.fragment,e),m($e.$$.fragment,e),m(Ue.$$.fragment,e),m(ge.$$.fragment,e),m(he.$$.fragment,e),m(Ce.$$.fragment,e),m(ve.$$.fragment,e),m(_e.$$.fragment,e),m(Be.$$.fragment,e),m(We.$$.fragment,e),m(Re.$$.fragment,e),m(Ne.$$.fragment,e),m(Ge.$$.fragment,e),m(qe.$$.fragment,e),m(De.$$.fragment,e),m(Pe.$$.fragment,e),m(Ye.$$.fragment,e),m(et.$$.fragment,e),m(st.$$.fragment,e),m(pt.$$.fragment,e),m(rt.$$.fragment,e),m(Mt.$$.fragment,e),m(ct.$$.fragment,e),m(Jt.$$.fragment,e),m(jt.$$.fragment,e),m(ut.$$.fragment,e),m(ft.$$.fragment,e),m(Ut.$$.fragment,e),m(bt.$$.fragment,e),m(xt.$$.fragment,e),m(ht.$$.fragment,e),m(zt.$$.fragment,e),m(Ct.$$.fragment,e),m(Vt.$$.fragment,e),m(_t.$$.fragment,e),m(Bt.$$.fragment,e),m(Rt.$$.fragment,e),m(Gt.$$.fragment,e),m(qt.$$.fragment,e),m(Ht.$$.fragment,e),m(Et.$$.fragment,e),m(Ft.$$.fragment,e),m(Kt.$$.fragment,e),m(Ot.$$.fragment,e),m(ss.$$.fragment,e),m(ls.$$.fragment,e),m(ps.$$.fragment,e),m(is.$$.fragment,e),m(rs.$$.fragment,e),m(os.$$.fragment,e),m(ys.$$.fragment,e),m(Ts.$$.fragment,e),m(us.$$.fragment,e),Up=!0)},o(e){y($.$$.fragment,e),y(U.$$.fragment,e),y(b.$$.fragment,e),y(z.$$.fragment,e),y(V.$$.fragment,e),y(_.$$.fragment,e),y(B.$$.fragment,e),y(X.$$.fragment,e),y(N.$$.fragment,e),y(H.$$.fragment,e),y(S.$$.fragment,e),y(Y.$$.fragment,e),y(K.$$.fragment,e),y(f.$$.fragment,e),y(ee.$$.fragment,e),y(se.$$.fragment,e),y(ne.$$.fragment,e),y(pe.$$.fragment,e),y(ie.$$.fragment,e),y(re.$$.fragment,e),y(oe.$$.fragment,e),y(ce.$$.fragment,e),y(Je.$$.fragment,e),y(ue.$$.fragment,e),y(fe.$$.fragment,e),y($e.$$.fragment,e),y(Ue.$$.fragment,e),y(ge.$$.fragment,e),y(he.$$.fragment,e),y(Ce.$$.fragment,e),y(ve.$$.fragment,e),y(_e.$$.fragment,e),y(Be.$$.fragment,e),y(We.$$.fragment,e),y(Re.$$.fragment,e),y(Ne.$$.fragment,e),y(Ge.$$.fragment,e),y(qe.$$.fragment,e),y(De.$$.fragment,e),y(Pe.$$.fragment,e),y(Ye.$$.fragment,e),y(et.$$.fragment,e),y(st.$$.fragment,e),y(pt.$$.fragment,e),y(rt.$$.fragment,e),y(Mt.$$.fragment,e),y(ct.$$.fragment,e),y(Jt.$$.fragment,e),y(jt.$$.fragment,e),y(ut.$$.fragment,e),y(ft.$$.fragment,e),y(Ut.$$.fragment,e),y(bt.$$.fragment,e),y(xt.$$.fragment,e),y(ht.$$.fragment,e),y(zt.$$.fragment,e),y(Ct.$$.fragment,e),y(Vt.$$.fragment,e),y(_t.$$.fragment,e),y(Bt.$$.fragment,e),y(Rt.$$.fragment,e),y(Gt.$$.fragment,e),y(qt.$$.fragment,e),y(Ht.$$.fragment,e),y(Et.$$.fragment,e),y(Ft.$$.fragment,e),y(Kt.$$.fragment,e),y(Ot.$$.fragment,e),y(ss.$$.fragment,e),y(ls.$$.fragment,e),y(ps.$$.fragment,e),y(is.$$.fragment,e),y(rs.$$.fragment,e),y(os.$$.fragment,e),y(ys.$$.fragment,e),y(Ts.$$.fragment,e),y(us.$$.fragment,e),Up=!1},d(e){e&&(s(d),s(u),s(ks),s(Us),s(bs),s(ws),s(w),s(xs),s(x),s(gs),s(g),s(hs),s(k),s(zs),s(h),s(Is),s(Cs),s(I),s(Zs),s(C),s(Vs),s(Z),s(vs),s(_s),s(v),s(Qs),s(Bs),s(Q),s(Ws),s(Xs),s(W),s(Rs),s(As),s(R),s(Ns),s(A),s(Gs),s(Ls),s(G),s(qs),s(L),s(Hs),s(q),s(Ds),s(Es),s(D),s(Ss),s(E),s(Ps),s(Fs),s(P),s(Ys),s(F),s(Ks),s(Os),s(el),s(tl),s(O),s(sl),s(ll),s(te),s(nl),s(pl),s(le),s(al),s(il),s(rl),s(ae),s(Ml),s(ol),s(cl),s(Me),s(ml),s(yl),s(Jl),s(me),s(Tl),s(ye),s(jl),s(ul),s(Te),s(kl),s(je),s(fl),s(dl),s(ke),s($l),s(Ul),s(de),s(bl),s(wl),s(xl),s(be),s(gl),s(we),s(hl),s(xe),s(zl),s(Il),s(Cl),s(ze),s(Zl),s(Ie),s(Vl),s(vl),s(Ze),s(_l),s(Ve),s(Ql),s(Bl),s(Wl),s(Qe),s(Xl),s(Rl),s(Al),s(Xe),s(Nl),s(Gl),s(Ae),s(Ll),s(ql),s(Hl),s(Le),s(Dl),s(El),s(He),s(Sl),s(Pl),s(Ee),s(Fl),s(Se),s(Yl),s(Kl),s(Fe),s(Ol),s(en),s(Ke),s(tn),s(Oe),s(sn),s(ln),s(tt),s(nn),s(pn),s(lt),s(an),s(nt),s(rn),s(Mn),s(at),s(on),s(it),s(cn),s(mn),s(yn),s(ot),s(Jn),s(Tn),s(mt),s(jn),s(yt),s(un),s(kn),s(Tt),s(fn),s(dn),s($n),s(kt),s(Un),s(bn),s(dt),s(wn),s($t),s(xn),s(gn),s(hn),s(wt),s(zn),s(In),s(gt),s(Cn),s(Zn),s(Vn),s(It),s(vn),s(_n),s(Zt),s(Qn),s(Bn),s(vt),s(Wn),s(Xn),s(Qt),s(Rn),s(An),s(Wt),s(Nn),s(Xt),s(Gn),s(Ln),s(At),s(qn),s(Nt),s(Hn),s(Dn),s(Lt),s(En),s(Sn),s(Pn),s(Dt),s(Fn),s(Yn),s(St),s(Kn),s(Pt),s(On),s(ep),s(Yt),s(tp),s(sp),s(lp),s(es),s(np),s(ts),s(pp),s(ap),s(ip),s(ns),s(rp),s(Mp),s(as),s(op),s(cp),s(mp),s(Ms),s(yp),s(Jp),s(cs),s(Tp),s(ms),s(jp),s(up),s(Js),s(kp),s(fp),s(js),s(dp),s($p),s(fs)),s(j),J($,e),J(U,e),J(b,e),J(z,e),J(V,e),J(_,e),J(B,e),J(X,e),J(N,e),J(H,e),J(S,e),J(Y,e),J(K,e),J(f,e),J(ee,e),J(se,e),J(ne,e),J(pe,e),J(ie,e),J(re,e),J(oe,e),J(ce,e),J(Je,e),J(ue,e),J(fe,e),J($e,e),J(Ue,e),J(ge,e),J(he,e),J(Ce,e),J(ve,e),J(_e,e),J(Be,e),J(We,e),J(Re,e),J(Ne,e),J(Ge,e),J(qe,e),J(De,e),J(Pe,e),J(Ye,e),J(et,e),J(st,e),J(pt,e),J(rt,e),J(Mt,e),J(ct,e),J(Jt,e),J(jt,e),J(ut,e),J(ft,e),J(Ut,e),J(bt,e),J(xt,e),J(ht,e),J(zt,e),J(Ct,e),J(Vt,e),J(_t,e),J(Bt,e),J(Rt,e),J(Gt,e),J(qt,e),J(Ht,e),J(Et,e),J(Ft,e),J(Kt,e),J(Ot,e),J(ss,e),J(ls,e),J(ps,e),J(is,e),J(rs,e),J(os,e),J(ys,e),J(Ts,e),J(us,e)}}}const ji='{"title":"การสร้าง tokenizer ทีละขั้นตอน","local":"การสราง-tokenizer-ทละขนตอน","sections":[{"title":"การโหลด corpus","local":"การโหลด-corpus","sections":[],"depth":2},{"title":"สร้าง WordPiece tokenizer ตั้งแต่เริ่มต้น","local":"สราง-wordpiece-tokenizer-ตงแตเรมตน","sections":[],"depth":2},{"title":"การสร้าง BPE tokenizer ตั้งแต่เริ่มต้น","local":"การสราง-bpe-tokenizer-ตงแตเรมตน","sections":[],"depth":2},{"title":"การสร้าง Unigram tokenizer ตั้งแต่เริ่มต้น","local":"การสราง-unigram-tokenizer-ตงแตเรมตน","sections":[],"depth":2}],"depth":1}';function ui($s){return li(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class xi extends pi{constructor(j){super(),ai(this,j,ui,Ti,si,{})}}export{xi as component};
