import{s as ei,o as ti,n as si}from"../chunks/scheduler.37c15a92.js";import{S as li,i as ni,g as a,s as n,r as M,A as pi,h as i,f as s,c as p,j as Oa,u as o,x as r,k as $p,y as ai,a as l,v as c,d as m,t as J,w as y}from"../chunks/index.2bf4358c.js";import{T as ii}from"../chunks/Tip.363c041f.js";import{Y as ri}from"../chunks/Youtube.1e50a667.js";import{C as T}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as Mi}from"../chunks/CourseFloatingBanner.15ba07e6.js";import{H as fs,E as oi}from"../chunks/EditOnGithub.8916dc7c.js";function ci(ds){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,us){l(u,j,us)},p:si,d(u){u&&s(j)}}}function mi(ds){let j,d,u,us,$,$s,U,Us,b,Up="จากบทก่อนๆ คุณจะเห็นว่า การตัดคำ ประกอบไปด้วยหลายขั้นตอน :",bs,w,bp="<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>",ws,x,wp="เพื่อเป็นการเตือนความจำ มาดูกระบวนการโดยรวมอีกครั้ง :",xs,k,xp='<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."/>',gs,g,gp=`🤗 Tokenizers library เป็นเครื่องมือสำหรับช่วยดำเนินการขั้นตอนพวกนี้ โดยคุณสามารถผสมผสานเครื่องมือพวกนี้ตามความต้องการได้
ในบทนี้เราจะมาเรียนวิธีสร้าง tokenizer ขึ้นมาตั้งแต่ต้น แทนที่จะเทรนจากตัวที่ถูก implement แล้วด้วยข้อมูลใหม่เท่านั้น อย่างที่เราได้ลองทำกันใน<a href="/course/chapter6/2">บทที่ 2</a> เมื่อจบบทนี้ คุณจะสามารถสร้าง tokenizer แบบใดก็ได้ตามที่คุณต้องการ`,hs,h,zs,z,hp="library นี้ ประกอบด้วยส่วนหลักคือ <code>Tokenizer</code> class ที่มีส่วนประกอบย่อยสำคัญอื่นๆ แบ่งเป็นหลาย submodules",Is,I,zp='<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>',Cs,C,Ip='คุณสามารถดูรายชื่อของส่วนประกอบสำคัญๆต่างๆได้<a href="https://huggingface.co/docs/tokenizers/components" rel="nofollow">ที่นี่</a>',Zs,Z,Vs,V,Cp=`ในการเทรน tokenizer ตัวใหม่ เราจะใช้ corpus เล็กๆ เพื่อที่การคำนวณจะได้รวดเร็ว
การเรียกใช้งาน corpus จะทำคล้ายๆกับวิธีที่เราใช้ใน<a href="/course/chapter6/2">ตอนต้นของบทนี้</a> แต่ครั้งนี้เราจะใช้ชุดข้อมูลชื่อ <a href="https://huggingface.co/datasets/wikitext" rel="nofollow">WikiText-2</a>`,vs,v,_s,_,Zp=`<code>get_training_corpus()</code> เป็น generator ที่จะ yield ข้อมูลในรูปแบบ batch โดยแต่ละ batch ประกอบไปด้วย 1,000 ข้อความ
🤗 Tokenizers สามารถเทรนได้จากไฟล์ข้อความโดยตรง ดังนั้นเราจะสร้างไฟล์ข้อความ ที่ประกอบไปด้วย ข้อความทั้งหมดจาก WikiText-2`,Qs,Q,Bs,B,Vp=`ต่อไปเราจะพาคุณสร้าง tokenizer แบบ BERT, GPT-2, and XLNet ของคุณเอง ทีละขั้นตอน
ซึ่งคุณก็จะได้ลองใช้งาน tokenization algorithm ต่างๆที่ได้เรียนมาแล้ว เช่น WordPiece, BPE, and Unigram มาเริ่มจาก BERT กัน`,Ws,W,Xs,X,vp="ในการสร้าง 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> ด้วยค่าที่เราต้องการ",Rs,R,_p="ในตัวอย่างนี้ เราจะสร้าง <code>Tokenizer</code> ด้วย WordPiece :",As,A,Ns,N,Qp=`จากนั้นเราจะตั้งค่า <code>unk_token</code> เพื่อบอกโมเดลว่าให้มัน return ค่าอะไรหากมันเจอตัวอักษรที่มันไม่รู้จัก
ส่วน argument อื่นๆที่เราสามารถตั้งค่าได้ก็คือ <code>vocab</code> (แต่เนื่องจากเราจะเทรนโมเดล ทำให้ตอนนี้เรายังไม่ต้องตั้งค่านี้) และ <code>max_input_chars_per_word</code> ซึ่งหมายถึง ความยาวสูงสุดของแต่ละคำ (คำที่ยาวกว่าค่านี้จะถูกแบ่งเป็นหลายๆส่วน)`,Gs,G,Bp="ขั้นตอนแรกคือ normalization เนื่องจาก BERT เป็นโมเดลที่ได้รับความนิยมมาก เราจึงมี <code>BertNormalizer</code> เฉพาะ ซึ่งมี option ต่างๆดังนี้: <code>lowercase</code>, <code>strip_accents</code>, <code>clean_text</code> (ลบ control characters และแทนที่ช่องว่างที่อยู่ต่อกันหลายๆอันด้วยช่องว่างเดียว), และ <code>handle_chinese_chars</code> (เพิ่มช่องว่างในตัวอักษรจีน)",qs,q,Wp="เราจะมาเลียนแบบ <code>bert-base-uncased</code> tokenizer โดยตั้งค่า normalizer ดังนี้ :",Ls,L,Hs,H,Xp="แต่ปกติแล้ว สำหรับ tokenizer ใหม่ คุณอาจจะไม่สามารถใช้ normalizer ที่จาก 🤗 Tokenizers library ได้ ดังนั้นเราจะมาเรียนวิธีการสร้าง BERT normalizer เองกัน",Ds,D,Rp="library นี้ มี normalizer เพื่อ <code>Lowercase</code> และเพื่อ <code>StripAccents</code> ซึ่งคุณสามารถรวมทั้งสองตัวได้โดยใช้ <code>Sequence</code> :",Es,E,Ss,S,Ap="เราจะใช้ <code>NFD</code> Unicode normalizer ด้วย เพื่อที่จะให้ <code>StripAccents</code> สามารถหาสัญลักษณ์ accents ได้ และจะได้ลบพวกมันออก",Ps,P,Np="เพื่อเช็คผลลัพธ์ของ normalizer เราจะใช้ <code>normalize_str()</code> method จาก <code>normalizer</code> :",Fs,F,Ys,Y,Ks,f,Os,K,Gp="ขั้นตอนต่อไปคือ การ pre-tokenization เราจะใช้ <code>BertPreTokenizer</code> ที่ถูกสร้างมาแล้ว :",el,O,tl,ee,qp="หรือจะใช้ตัวที่เราสร้างขึ้นมาเองก็ได้ :",sl,te,ll,se,Lp="โปรดทราบว่า <code>Whitespace</code> pre-tokenizer จะตัดข้อความตรงที่มีช่องว่าง และ รวมถึงตัวสัญลักษณ์ที่ไม่ใช้ตัวอักษร ตัวเลข หรือ underscore หรือพูดอีกแบบก็คือ มันจะแบ่งข้อความตรงที่มีช่องว่างและเครื่องหมายวรรคตอน นั่นเอง",nl,le,pl,ne,al,pe,Hp="แต่ถ้าคุณต้องการจะแบ่งข้อความตามช่องว่างเท่านั้น ให้ใช้ <code>WhitespaceSplit</code> pre-tokenizer :",il,ae,rl,ie,Ml,re,Dp="เหมือนกับใน normalizer เราสามารถใช้ <code>Sequence</code> เพื่อรวมหลายๆ pre-tokenizers เข้าด้วยกัน :",ol,Me,cl,oe,ml,ce,Ep=`ขั้นตอนต่อไปใน tokenization pipeline คือการใส่ input เข้าไปในโมเดล
เราได้สร้างโมเดลขึ้นมาแล้ว แต่เรายังคงต้องเทรนมัน ซึ่งเราจะใช้ <code>WordPieceTrainer</code>`,Jl,me,Sp="สิ่งสำคัญที่คุณต้องจำคือ เวลาสร้าง (instantiate) trainer ใน 🤗 Tokenizers คุณจะต้องเพิ่ม token พิเศษต่างๆ เข้าไปในเทรนเนอร์เอง ไม่เช่นนั้น มันจะไม่เพิ่ม token พวกนี้เข้าไปใน vocabulary เพราะว่า token พิเศษไม่ได้อยู่ใน training corpus :",yl,Je,Tl,ye,Pp="นอกจากเราจะสามารถตั้งค่า <code>vocab_size</code> และ <code>special_tokens</code> แล้ว เรายังสามารถตั้งค่า <code>min_frequency</code> (ความถี่ขั้นต่ำของคำที่ต้องมี เพื่อที่จะได้ถูกเพิ่มลงไปใน vocabulary) หรือ <code>continuing_subword_prefix</code> (ถ้าหากเราต้องการใช้สัญลักษณ์อื่น ที่ไม่ใช่<code>##</code>) ได้อีกด้วย",jl,Te,Fp="เราจะเทรนโมเดลโดยรันคำสั่งต่อไปนี้ :",ul,je,kl,ue,Yp="คุณสามารถใช้ไฟล์ข้อความเพื่อเทรนได้ด้วย (แต่ก่อนอื่น คุณจะต้องสร้างโมเดลขึ้นมาใหม่โดยใช้ <code>WordPiece</code> ที่ยังว่างเปล่าอยู่) :",fl,ke,dl,fe,Kp="สำหรับทั้งสองกรณี คุณสามารถทดลองใช้ tokenizer กับข้อความได้ โดยเรียกใช้ <code>encode()</code> method :",$l,de,Ul,$e,bl,Ue,Op="<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>",wl,be,ea=`ขั้นตอนสุดท้ายของ pipeline คือ post-processing
เราจะเพิ่ม <code>[CLS]</code> ไว้ที่ตอนต้นของผลลัพธ์จากการ tokenize และ <code>[SEP]</code> ไว้ที่ตอนท้าย หรือหลังสิ้นสุดประโยค ถ้า input ของเรามีสองประโยค`,xl,we,ta="เราจะใช้ <code>TemplateProcessor</code> เพื่อช่วยเราทำ แต่ก่อนอื่นเราต้องหา ID ของ <code>[CLS]</code> และ <code>[SEP]</code> ก่อน :",gl,xe,hl,ge,zl,he,sa=`เราจะมาสร้าง template ให้กับ <code>TemplateProcessor</code> โดยจะต้องกำหนดว่าเราต้องการให้มันประมวลผล input ที่เป็น ประโยคเดี่ยว และ input ที่มีสองประโยคอย่างไร
สำหรับทั้งสองกรณี เราจะต้องกำหนด token พิเศษ เพื่อแทนประโยคขึ้นมา สำหรับประโยคเดี่ยวหรือประโยคแรก เราจะใช้ <code>$A</code> ส่วนสำหรับประโยคที่สอง เราจะใช้ <code>$B</code>
สำหรับ token พิเศษพวกนี้และประโยค เราจะสร้าง token type ID ขึ้นมา โดยจะเขียน ID นี้หลังเครื่องหมาย colon`,Il,ze,la="template ของ BERT มีรายละเอียดดังนี้ :",Cl,Ie,Zl,Ce,na="อย่าลืมว่า เราจะต้องให้ข้อมูลโมเดลเกี่ยวกับ ID ของ token พิเศษด้วย เพื่อที่โมเดลจะได้แปลงมันได้อย่างถูกต้อง",Vl,Ze,pa="เราจะกลับมาดูตัวอย่างก่อนหน้ากัน :",vl,Ve,_l,ve,Ql,_e,aa="ถ้าเราใส่ input ที่เป็นสองประโยค เราจะได้ :",Bl,Qe,Wl,Be,Xl,We,ia="ขั้นตอนสุดท้าย เราจะเพิ่ม decoder เข้าไปใน pipeline :",Rl,Xe,Al,Re,ra="มาดูผลลัพธ์ของ <code>encoding</code> กัน :",Nl,Ae,Gl,Ne,ql,Ge,Ma="เยี่ยมมาก! ตอนนี้เราสามารถบันทึก tokenizer นี้เป็นไฟล์ JSON ได้แล้ว ดังนี้ :",Ll,qe,Hl,Le,oa="คุณสามารถโหลดไฟล์นี้ให้เป็น <code>Tokenizer</code> object ได้โดยใช้ <code>from_file()</code> method :",Dl,He,El,De,ca=`การจะนำ tokenizer นี้มาใช้ใน 🤗 Transformers เราจะต้อง wrap มันให้เป็น <code>PreTrainedTokenizerFast</code> ก่อน
โดยเราใช้ class ปกติ (ถ้า tokenizer ของเรามีโครงสร้างสอดคล้องกันโมเดลหลักเราที่จะใช้งาน) หรือ class ที่ถูกสร้างขึ้นมาแล้ว เช่น <code>BertTokenizerFast</code>
ในกรณีที่คุณสร้าง tokenizer ขึ้นมาเองอย่างที่เราได้สอนไว้ข้างต้น คุณจะต้องใช้ตัวเลือกแรก`,Sl,Ee,ma=`การจะ 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> :`,Pl,Se,Fl,Pe,Ja="ถ้าคุณใช้ class ที่เฉพาะเจาะจง เช่น <code>BertTokenizerFast</code> คุณเพียงแค่ต้องเพิ่มข้อมูลเกี่ยวกับ token พิเศษที่ต่างจากตัวที่โมเดลใช้อยู่แล้ว ในตัวอย่างของเรา เราไม่ได้ใช้ token พิเศษอื่น จึงไม่ต้องเพิ่มอะไร :",Yl,Fe,Kl,Ye,ya="ตอนนี้เราก็สามารถใช้ tokenizer ที่เราได้สร้างขึ้นมาเอง เหมือนกับ tokenizer ตัวอื่นๆจาก 🤗 Transformers ได้แล้ว นอกจากนั้นคุณยังสามารถเซฟมันได้ โดยใช้ <code>save_pretrained()</code> หรืออัพโหลดมันไปที่ Hub โดยใช้ <code>push_to_hub()</code>",Ol,Ke,Ta="หลังจากที่เราได้ดูกันแล้วว่าจะสร้าง WordPiece tokenizer อย่างไร เราจะมาดูกันว่า จะทำแบบเดียวกันกับ BPE tokenizer ได้อย่างไร เราจะอธิบายคร่าวๆเท่านั้น เพราะคุณได้เรียนรายละเอียดมาแล้ว และจะพูดถึงแค่ข้อแตกต่างเท่านั้น",en,Oe,tn,et,ja="เราจะมาสร้าง GPT-2 tokenizer กัน เช่นเดียวกับตัวอย่างของ BERT tokenizer เราจะเริ่มด้วยกัน initialize <code>Tokenizer</code> ด้วยโมเดล BPE :",sn,tt,ln,st,ua=`เราสามารถสร้างโมเดลนี้ด้วย vocabulary ที่มีอยู่ได้ โดยส่งผ่าน <code>vocab</code> และ <code>merges</code> แต่เราจะเทรนตั้งแต่ต้น แปลว่าเราไม่จำเป็นต้องทำขั้นตอนนี้
เราไม่จำเป็นต้องกำหนด <code>unk_token</code> เพราะ GPT-2 ใช้ byte-level BPE`,nn,lt,ka="นอกจากนั้น GPT-2 ยังไม่ใช้ normalizer อีกด้วย เราจึงจะข้ามขั้นตอนนี้ไปทำ pre-tokenization เลย :",pn,nt,an,pt,fa="<code>add_prefix_space=False</code> หมายถึงเราจะไม่เพิ่มช่องว่างตรงต้นประโยค (ค่า default จะมีการเพิ่มช่องว่างนี้)",rn,at,da="มาดูผลลัพธ์ตัวอย่างของการ pre-tokenization กัน :",Mn,it,on,rt,cn,Mt,$a="ขั้นตอนต่อไปคือการเทรนโมเดล  สำหรับ GPT-2 มันจะมี token พิเศษตัวเดียวคือ end-of-text token (อยู่ตรงท้ายของข้อความ) :",mn,ot,Jn,ct,Ua="เช่นเดียวกันกับ <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>",yn,mt,ba="คุณสามารถเทรนด้วยไฟล์ข้อความได้ด้วย :",Tn,Jt,jn,yt,wa="มาดูผลลัพธ์ของการ tokenize ข้อความตัวอย่างกัน :",un,Tt,kn,jt,fn,ut,xa="เราจะทำการ post-processing แบบ byte-level ให้กับ GPT-2 tokenizer ดังนี้ :",dn,kt,$n,ft,ga="<code>trim_offsets = False</code> แปลว่าเราจะไม่เปลี่ยนแปลงค่า offset ของ token ที่ขึ้นต้นด้วย <code>Ġ</code> ซึ่งแปลว่าตำแหน่งเริ่มต้นของ offset จะหมายถึง ช่องว่าง และไม่ใช่ตัวอักษรแรกของ token นั้น",Un,dt,ha="มาดูผลลัพธ์ของข้อความที่เราเพิ่งจะ encode กันไป ในตัวอย่างนี้ token ในตำแหน่งที่ 4 คือ <code>&#39;Ġtest&#39;</code> :",bn,$t,wn,Ut,xn,bt,za="สุดท้ายเราจะเพิ่มส่วนที่เป็น byte-level decoder :",gn,wt,hn,xt,Ia="เช็คดูอีกทีว่าผลลัพธ์ถูกต้องหรือไม่ :",zn,gt,In,ht,Cn,zt,Ca="เยี่ยมมาก! ตอนนี้คุณสามารถเซฟโมเดลได้ ส่วนขั้นต่อไปคือ เราจะ wrap tokenizer ของเราให้เป็น <code>PreTrainedTokenizerFast</code> หรือ <code>GPT2TokenizerFast</code> เพื่อจะได้เรียกใช้มันได้ใน 🤗 Transformers",Zn,It,Vn,Ct,Za="หรือ :",vn,Zt,_n,Vt,Va="ต่อไปเราจะสอนวิธีสร้าง Unigram tokenizer บ้าง",Qn,vt,Bn,_t,va="เราจะสร้าง XLNet tokenizer โดยเริ่มจาก initialize <code>Tokenizer</code> ด้วย Unigram model !",Wn,Qt,Xn,Bt,_a="คุณสามารถ initialize มันโดยส่งผ่าน vocabulary ที่มีอยู่เข้าไปด้วย",Rn,Wt,Qa="ในขั้นตอน normalization โมเดล XLNet จะมีการแทนที่ตัวอักษรต่างๆ :",An,Xt,Nn,Rt,Ba=`โค้ดข้างบนนี้จะแทนที่ <code>“</code> และ <code>”</code> ด้วย <code>”</code>
และถ้ามีช่องว่างที่อยู่ต่อๆกัน มันจะถูกแปลงให้เป็นช่องว่างเดียว และสุดท้ายมันจะลบสัญลักษณ์ accent ออกด้วย`,Gn,At,Wa="pre-tokenizer ที่ใช้ใน SentencePiece tokenizer คือ <code>Metaspace</code>  :",qn,Nt,Ln,Gt,Xa="มาดูผลลัพธ์ของการ pre-tokenization กับข้อความตัวอย่างกัน  :",Hn,qt,Dn,Lt,En,Ht,Ra="ขั้นต่อไปคือการเทรน  XLNet มีการใช้ token พิเศษอยู่จำนวนหนึ่ง :",Sn,Dt,Pn,Et,Aa=`สิ่งสำคัญเวลาใช้ <code>UnigramTrainer</code> คือ อย่าลืมกำหนด argument <code>unk_token</code>
นอกจากนั้นคุณยังสามารถตั้งค่า argument อื่นๆที่ต้องใช้กับ Unigram algorithm ได้ด้วย เช่น <code>shrinking_factor</code> (ค่าเริ่มต้นคือ  0.75) หรือ <code>max_piece_length</code> (ค่าเริ่มต้นคือ 16)`,Fn,St,Na="เราสามารถเทรนจากไฟล์ข้อความได้ด้วย  :",Yn,Pt,Kn,Ft,Ga="ลอง tokenize ตัวอย่างง่ายๆดู  :",On,Yt,ep,Kt,tp,Ot,qa=`XLNet จะเพิ่ม token พิเศษ <code>&lt;cls&gt;</code> ใส่ในตอนท้ายของประโยค และตั้งค่า type ID มันเป็น 2 เพื่อให้มันแตกต่างจาก token อื่น
การทำแบบนี้ถือว่าเป็นการ padding ทางด้ายซ้าย`,sp,es,La="เพื่อจัดการกับ token พิเศษ เราจะต้องสร้าง template ขึ้นมา ก่อนอื่นเราต้องดูว่า ID ของ <code>&lt;cls&gt;</code> และ <code>&lt;sep&gt;</code> คืออะไร :",lp,ts,np,ss,pp,ls,Ha="นี่คือตัวอย่างการสร้าง template :",ap,ns,ip,ps,Da="เราจะทดลองใช้งานมันโดยการ encode ประโยค input สองประโยค :",rp,as,Mp,is,op,rs,Ea="จากนั้นตั้งค่า decoder เป็น <code>Metaspace</code> :",cp,Ms,mp,os,Sa="ตอนนี้เราก็เสร็จแล้ว คุณสามารถเซฟ tokenizer และ wrap มันให้เป็น <code>PreTrainedTokenizerFast</code> หรือ <code>XLNetTokenizerFast</code> ก็ได้ ถ้าคุณต้องการใช้มันใน 🤗 Transformers",Jp,cs,Pa="สิ่งสำคัญอีกอย่างเวลาใช้ <code>PreTrainedTokenizerFast</code> ก็คือเราจะต้องบอก 🤗 Transformers library ว่าเราได้ทำการ padding ทางซ้าย :",yp,ms,Tp,Js,Fa="อีกวิธีก็คือ :",jp,ys,up,Ts,Ya="ตอนนี้ คุณก็ได้เรียนรู้ขั้นตอนในการสร้าง tokenizer ขึ้นมาเองแล้ว โดยการใช้เครื่องมือจาก 🤗 Tokenizers library และได้เรียนวิธีการนำ tokenizer ของคุณไปใช้ใน 🤗 Transformers อีกด้วย",kp,js,fp,ks,dp;return $=new fs({props:{title:"การสร้าง tokenizer ทีละขั้นตอน",local:"การสราง-tokenizer-ทละขนตอน",headingTag:"h1"}}),U=new Mi({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"}]}}),h=new ri({props:{id:"MR8tZm5ViWU"}}),Z=new fs({props:{title:"การโหลด corpus",local:"การโหลด-corpus",headingTag:"h2"}}),v=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}}),Q=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}}),W=new fs({props:{title:"สร้าง WordPiece tokenizer ตั้งแต่เริ่มต้น",local:"สราง-wordpiece-tokenizer-ตงแตเรมตน",headingTag:"h2"}}),A=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}}),L=new T({props:{code:"dG9rZW5pemVyLm5vcm1hbGl6ZXIlMjAlM0QlMjBub3JtYWxpemVycy5CZXJ0Tm9ybWFsaXplcihsb3dlcmNhc2UlM0RUcnVlKQ==",highlighted:'tokenizer.normalizer = normalizers.BertNormalizer(lowercase=<span class="hljs-literal">True</span>)',wrap:!1}}),E=new T({props:{code:"dG9rZW5pemVyLm5vcm1hbGl6ZXIlMjAlM0QlMjBub3JtYWxpemVycy5TZXF1ZW5jZSglMEElMjAlMjAlMjAlMjAlNUJub3JtYWxpemVycy5ORkQoKSUyQyUyMG5vcm1hbGl6ZXJzLkxvd2VyY2FzZSgpJTJDJTIwbm9ybWFsaXplcnMuU3RyaXBBY2NlbnRzKCklNUQlMEEp",highlighted:`tokenizer.normalizer = normalizers.<span class="hljs-type">Sequence</span>(
    [normalizers.NFD(), normalizers.Lowercase(), normalizers.StripAccents()]
)`,wrap:!1}}),F=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}}),Y=new T({props:{code:"aGVsbG8lMjBob3clMjBhcmUlMjB1JTNG",highlighted:"hello how are u?",wrap:!1}}),f=new ii({props:{$$slots:{default:[ci]},$$scope:{ctx:ds}}}),O=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIlMjAlM0QlMjBwcmVfdG9rZW5pemVycy5CZXJ0UHJlVG9rZW5pemVyKCk=",highlighted:"tokenizer.pre_tokenizer = pre_tokenizers.BertPreTokenizer()",wrap:!1}}),te=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIlMjAlM0QlMjBwcmVfdG9rZW5pemVycy5XaGl0ZXNwYWNlKCk=",highlighted:"tokenizer.pre_tokenizer = pre_tokenizers.Whitespace()",wrap:!1}}),le=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}}),ne=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}}),ae=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}}),ie=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}}),Me=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}}),oe=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}}),je=new T({props:{code:"dG9rZW5pemVyLnRyYWluX2Zyb21faXRlcmF0b3IoZ2V0X3RyYWluaW5nX2NvcnB1cygpJTJDJTIwdHJhaW5lciUzRHRyYWluZXIp",highlighted:"tokenizer.train_from_iterator(get_training_corpus(), trainer=trainer)",wrap:!1}}),ke=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}}),de=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:"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}}),xe=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}}),ge=new T({props:{code:"KDIlMkMlMjAzKQ==",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">3</span>)',wrap:!1}}),Ie=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}}),ve=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}}),Qe=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}}),Be=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}}),Xe=new T({props:{code:"dG9rZW5pemVyLmRlY29kZXIlMjAlM0QlMjBkZWNvZGVycy5Xb3JkUGllY2UocHJlZml4JTNEJTIyJTIzJTIzJTIyKQ==",highlighted:'tokenizer.decoder = decoders.WordPiece(prefix=<span class="hljs-string">&quot;##&quot;</span>)',wrap:!1}}),Ae=new T({props:{code:"dG9rZW5pemVyLmRlY29kZShlbmNvZGluZy5pZHMp",highlighted:"tokenizer.decode(encoding.ids)",wrap:!1}}),Ne=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}}),He=new T({props:{code:"bmV3X3Rva2VuaXplciUyMCUzRCUyMFRva2VuaXplci5mcm9tX2ZpbGUoJTIydG9rZW5pemVyLmpzb24lMjIp",highlighted:'new_tokenizer = Tokenizer.from_file(<span class="hljs-string">&quot;tokenizer.json&quot;</span>)',wrap:!1}}),Se=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}}),Fe=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}}),Oe=new fs({props:{title:"การสร้าง BPE tokenizer ตั้งแต่เริ่มต้น",local:"การสราง-bpe-tokenizer-ตงแตเรมตน",headingTag:"h2"}}),tt=new T({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwVG9rZW5pemVyKG1vZGVscy5CUEUoKSk=",highlighted:"tokenizer = Tokenizer(models.BPE())",wrap:!1}}),nt=new T({props:{code:"dG9rZW5pemVyLnByZV90b2tlbml6ZXIlMjAlM0QlMjBwcmVfdG9rZW5pemVycy5CeXRlTGV2ZWwoYWRkX3ByZWZpeF9zcGFjZSUzREZhbHNlKQ==",highlighted:'tokenizer.pre_tokenizer = pre_tokenizers.ByteLevel(add_prefix_space=<span class="hljs-literal">False</span>)',wrap:!1}}),it=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}}),rt=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}}),ot=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}}),Tt=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}}),jt=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}}),kt=new T({props:{code:"dG9rZW5pemVyLnBvc3RfcHJvY2Vzc29yJTIwJTNEJTIwcHJvY2Vzc29ycy5CeXRlTGV2ZWwodHJpbV9vZmZzZXRzJTNERmFsc2Up",highlighted:'tokenizer.post_processor = processors.ByteLevel(trim_offsets=<span class="hljs-literal">False</span>)',wrap:!1}}),$t=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}}),Ut=new T({props:{code:"JyUyMHRlc3Qn",highlighted:'<span class="hljs-string">&#x27; test&#x27;</span>',wrap:!1}}),wt=new T({props:{code:"dG9rZW5pemVyLmRlY29kZXIlMjAlM0QlMjBkZWNvZGVycy5CeXRlTGV2ZWwoKQ==",highlighted:"tokenizer.decoder = decoders.ByteLevel()",wrap:!1}}),gt=new T({props:{code:"dG9rZW5pemVyLmRlY29kZShlbmNvZGluZy5pZHMp",highlighted:"tokenizer.decode(encoding.ids)",wrap:!1}}),ht=new T({props:{code:"JTIyTGV0J3MlMjB0ZXN0JTIwdGhpcyUyMHRva2VuaXplci4lMjI=",highlighted:'<span class="hljs-string">&quot;Let&#x27;s test this tokenizer.&quot;</span>',wrap:!1}}),It=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}}),Zt=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}}),vt=new fs({props:{title:"การสร้าง Unigram tokenizer ตั้งแต่เริ่มต้น",local:"การสราง-unigram-tokenizer-ตงแตเรมตน",headingTag:"h2"}}),Qt=new T({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwVG9rZW5pemVyKG1vZGVscy5VbmlncmFtKCkp",highlighted:"tokenizer = Tokenizer(models.Unigram())",wrap:!1}}),Xt=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}}),Nt=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}}),Lt=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}}),Dt=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}}),Pt=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}}),Yt=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}}),Kt=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}}),ts=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}}),ss=new T({props:{code:"MCUyMDE=",highlighted:'<span class="hljs-number">0</span> <span class="hljs-number">1</span>',wrap:!1}}),ns=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}}),as=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}}),is=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}}),Ms=new T({props:{code:"dG9rZW5pemVyLmRlY29kZXIlMjAlM0QlMjBkZWNvZGVycy5NZXRhc3BhY2UoKQ==",highlighted:"tokenizer.decoder = decoders.Metaspace()",wrap:!1}}),ms=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}}),ys=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}}),js=new oi({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter6/8.mdx"}}),{c(){j=a("meta"),d=n(),u=a("p"),us=n(),M($.$$.fragment),$s=n(),M(U.$$.fragment),Us=n(),b=a("p"),b.textContent=Up,bs=n(),w=a("ul"),w.innerHTML=bp,ws=n(),x=a("p"),x.textContent=wp,xs=n(),k=a("div"),k.innerHTML=xp,gs=n(),g=a("p"),g.innerHTML=gp,hs=n(),M(h.$$.fragment),zs=n(),z=a("p"),z.innerHTML=hp,Is=n(),I=a("ul"),I.innerHTML=zp,Cs=n(),C=a("p"),C.innerHTML=Ip,Zs=n(),M(Z.$$.fragment),Vs=n(),V=a("p"),V.innerHTML=Cp,vs=n(),M(v.$$.fragment),_s=n(),_=a("p"),_.innerHTML=Zp,Qs=n(),M(Q.$$.fragment),Bs=n(),B=a("p"),B.textContent=Vp,Ws=n(),M(W.$$.fragment),Xs=n(),X=a("p"),X.innerHTML=vp,Rs=n(),R=a("p"),R.innerHTML=_p,As=n(),M(A.$$.fragment),Ns=n(),N=a("p"),N.innerHTML=Qp,Gs=n(),G=a("p"),G.innerHTML=Bp,qs=n(),q=a("p"),q.innerHTML=Wp,Ls=n(),M(L.$$.fragment),Hs=n(),H=a("p"),H.textContent=Xp,Ds=n(),D=a("p"),D.innerHTML=Rp,Es=n(),M(E.$$.fragment),Ss=n(),S=a("p"),S.innerHTML=Ap,Ps=n(),P=a("p"),P.innerHTML=Np,Fs=n(),M(F.$$.fragment),Ys=n(),M(Y.$$.fragment),Ks=n(),M(f.$$.fragment),Os=n(),K=a("p"),K.innerHTML=Gp,el=n(),M(O.$$.fragment),tl=n(),ee=a("p"),ee.textContent=qp,sl=n(),M(te.$$.fragment),ll=n(),se=a("p"),se.innerHTML=Lp,nl=n(),M(le.$$.fragment),pl=n(),M(ne.$$.fragment),al=n(),pe=a("p"),pe.innerHTML=Hp,il=n(),M(ae.$$.fragment),rl=n(),M(ie.$$.fragment),Ml=n(),re=a("p"),re.innerHTML=Dp,ol=n(),M(Me.$$.fragment),cl=n(),M(oe.$$.fragment),ml=n(),ce=a("p"),ce.innerHTML=Ep,Jl=n(),me=a("p"),me.textContent=Sp,yl=n(),M(Je.$$.fragment),Tl=n(),ye=a("p"),ye.innerHTML=Pp,jl=n(),Te=a("p"),Te.textContent=Fp,ul=n(),M(je.$$.fragment),kl=n(),ue=a("p"),ue.innerHTML=Yp,fl=n(),M(ke.$$.fragment),dl=n(),fe=a("p"),fe.innerHTML=Kp,$l=n(),M(de.$$.fragment),Ul=n(),M($e.$$.fragment),bl=n(),Ue=a("p"),Ue.innerHTML=Op,wl=n(),be=a("p"),be.innerHTML=ea,xl=n(),we=a("p"),we.innerHTML=ta,gl=n(),M(xe.$$.fragment),hl=n(),M(ge.$$.fragment),zl=n(),he=a("p"),he.innerHTML=sa,Il=n(),ze=a("p"),ze.textContent=la,Cl=n(),M(Ie.$$.fragment),Zl=n(),Ce=a("p"),Ce.textContent=na,Vl=n(),Ze=a("p"),Ze.textContent=pa,vl=n(),M(Ve.$$.fragment),_l=n(),M(ve.$$.fragment),Ql=n(),_e=a("p"),_e.textContent=aa,Bl=n(),M(Qe.$$.fragment),Wl=n(),M(Be.$$.fragment),Xl=n(),We=a("p"),We.textContent=ia,Rl=n(),M(Xe.$$.fragment),Al=n(),Re=a("p"),Re.innerHTML=ra,Nl=n(),M(Ae.$$.fragment),Gl=n(),M(Ne.$$.fragment),ql=n(),Ge=a("p"),Ge.textContent=Ma,Ll=n(),M(qe.$$.fragment),Hl=n(),Le=a("p"),Le.innerHTML=oa,Dl=n(),M(He.$$.fragment),El=n(),De=a("p"),De.innerHTML=ca,Sl=n(),Ee=a("p"),Ee.innerHTML=ma,Pl=n(),M(Se.$$.fragment),Fl=n(),Pe=a("p"),Pe.innerHTML=Ja,Yl=n(),M(Fe.$$.fragment),Kl=n(),Ye=a("p"),Ye.innerHTML=ya,Ol=n(),Ke=a("p"),Ke.textContent=Ta,en=n(),M(Oe.$$.fragment),tn=n(),et=a("p"),et.innerHTML=ja,sn=n(),M(tt.$$.fragment),ln=n(),st=a("p"),st.innerHTML=ua,nn=n(),lt=a("p"),lt.textContent=ka,pn=n(),M(nt.$$.fragment),an=n(),pt=a("p"),pt.innerHTML=fa,rn=n(),at=a("p"),at.textContent=da,Mn=n(),M(it.$$.fragment),on=n(),M(rt.$$.fragment),cn=n(),Mt=a("p"),Mt.textContent=$a,mn=n(),M(ot.$$.fragment),Jn=n(),ct=a("p"),ct.innerHTML=Ua,yn=n(),mt=a("p"),mt.textContent=ba,Tn=n(),M(Jt.$$.fragment),jn=n(),yt=a("p"),yt.textContent=wa,un=n(),M(Tt.$$.fragment),kn=n(),M(jt.$$.fragment),fn=n(),ut=a("p"),ut.textContent=xa,dn=n(),M(kt.$$.fragment),$n=n(),ft=a("p"),ft.innerHTML=ga,Un=n(),dt=a("p"),dt.innerHTML=ha,bn=n(),M($t.$$.fragment),wn=n(),M(Ut.$$.fragment),xn=n(),bt=a("p"),bt.textContent=za,gn=n(),M(wt.$$.fragment),hn=n(),xt=a("p"),xt.textContent=Ia,zn=n(),M(gt.$$.fragment),In=n(),M(ht.$$.fragment),Cn=n(),zt=a("p"),zt.innerHTML=Ca,Zn=n(),M(It.$$.fragment),Vn=n(),Ct=a("p"),Ct.textContent=Za,vn=n(),M(Zt.$$.fragment),_n=n(),Vt=a("p"),Vt.textContent=Va,Qn=n(),M(vt.$$.fragment),Bn=n(),_t=a("p"),_t.innerHTML=va,Wn=n(),M(Qt.$$.fragment),Xn=n(),Bt=a("p"),Bt.textContent=_a,Rn=n(),Wt=a("p"),Wt.textContent=Qa,An=n(),M(Xt.$$.fragment),Nn=n(),Rt=a("p"),Rt.innerHTML=Ba,Gn=n(),At=a("p"),At.innerHTML=Wa,qn=n(),M(Nt.$$.fragment),Ln=n(),Gt=a("p"),Gt.textContent=Xa,Hn=n(),M(qt.$$.fragment),Dn=n(),M(Lt.$$.fragment),En=n(),Ht=a("p"),Ht.textContent=Ra,Sn=n(),M(Dt.$$.fragment),Pn=n(),Et=a("p"),Et.innerHTML=Aa,Fn=n(),St=a("p"),St.textContent=Na,Yn=n(),M(Pt.$$.fragment),Kn=n(),Ft=a("p"),Ft.textContent=Ga,On=n(),M(Yt.$$.fragment),ep=n(),M(Kt.$$.fragment),tp=n(),Ot=a("p"),Ot.innerHTML=qa,sp=n(),es=a("p"),es.innerHTML=La,lp=n(),M(ts.$$.fragment),np=n(),M(ss.$$.fragment),pp=n(),ls=a("p"),ls.textContent=Ha,ap=n(),M(ns.$$.fragment),ip=n(),ps=a("p"),ps.textContent=Da,rp=n(),M(as.$$.fragment),Mp=n(),M(is.$$.fragment),op=n(),rs=a("p"),rs.innerHTML=Ea,cp=n(),M(Ms.$$.fragment),mp=n(),os=a("p"),os.innerHTML=Sa,Jp=n(),cs=a("p"),cs.innerHTML=Pa,yp=n(),M(ms.$$.fragment),Tp=n(),Js=a("p"),Js.textContent=Fa,jp=n(),M(ys.$$.fragment),up=n(),Ts=a("p"),Ts.textContent=Ya,kp=n(),M(js.$$.fragment),fp=n(),ks=a("p"),this.h()},l(e){const t=pi("svelte-u9bgzb",document.head);j=i(t,"META",{name:!0,content:!0}),t.forEach(s),d=p(e),u=i(e,"P",{}),Oa(u).forEach(s),us=p(e),o($.$$.fragment,e),$s=p(e),o(U.$$.fragment,e),Us=p(e),b=i(e,"P",{"data-svelte-h":!0}),r(b)!=="svelte-18ftb0e"&&(b.textContent=Up),bs=p(e),w=i(e,"UL",{"data-svelte-h":!0}),r(w)!=="svelte-15gli7q"&&(w.innerHTML=bp),ws=p(e),x=i(e,"P",{"data-svelte-h":!0}),r(x)!=="svelte-291axk"&&(x.textContent=wp),xs=p(e),k=i(e,"DIV",{class:!0,"data-svelte-h":!0}),r(k)!=="svelte-oxfng3"&&(k.innerHTML=xp),gs=p(e),g=i(e,"P",{"data-svelte-h":!0}),r(g)!=="svelte-1ff2jlx"&&(g.innerHTML=gp),hs=p(e),o(h.$$.fragment,e),zs=p(e),z=i(e,"P",{"data-svelte-h":!0}),r(z)!=="svelte-1vvih7n"&&(z.innerHTML=hp),Is=p(e),I=i(e,"UL",{"data-svelte-h":!0}),r(I)!=="svelte-dvvqv1"&&(I.innerHTML=zp),Cs=p(e),C=i(e,"P",{"data-svelte-h":!0}),r(C)!=="svelte-1jsf4sz"&&(C.innerHTML=Ip),Zs=p(e),o(Z.$$.fragment,e),Vs=p(e),V=i(e,"P",{"data-svelte-h":!0}),r(V)!=="svelte-pr4y9f"&&(V.innerHTML=Cp),vs=p(e),o(v.$$.fragment,e),_s=p(e),_=i(e,"P",{"data-svelte-h":!0}),r(_)!=="svelte-pc5dys"&&(_.innerHTML=Zp),Qs=p(e),o(Q.$$.fragment,e),Bs=p(e),B=i(e,"P",{"data-svelte-h":!0}),r(B)!=="svelte-1x7ry89"&&(B.textContent=Vp),Ws=p(e),o(W.$$.fragment,e),Xs=p(e),X=i(e,"P",{"data-svelte-h":!0}),r(X)!=="svelte-ajstz2"&&(X.innerHTML=vp),Rs=p(e),R=i(e,"P",{"data-svelte-h":!0}),r(R)!=="svelte-i9hqdc"&&(R.innerHTML=_p),As=p(e),o(A.$$.fragment,e),Ns=p(e),N=i(e,"P",{"data-svelte-h":!0}),r(N)!=="svelte-147b2pp"&&(N.innerHTML=Qp),Gs=p(e),G=i(e,"P",{"data-svelte-h":!0}),r(G)!=="svelte-1plpyqu"&&(G.innerHTML=Bp),qs=p(e),q=i(e,"P",{"data-svelte-h":!0}),r(q)!=="svelte-opz6hj"&&(q.innerHTML=Wp),Ls=p(e),o(L.$$.fragment,e),Hs=p(e),H=i(e,"P",{"data-svelte-h":!0}),r(H)!=="svelte-1jdycpm"&&(H.textContent=Xp),Ds=p(e),D=i(e,"P",{"data-svelte-h":!0}),r(D)!=="svelte-1dc9u8n"&&(D.innerHTML=Rp),Es=p(e),o(E.$$.fragment,e),Ss=p(e),S=i(e,"P",{"data-svelte-h":!0}),r(S)!=="svelte-1nx0kml"&&(S.innerHTML=Ap),Ps=p(e),P=i(e,"P",{"data-svelte-h":!0}),r(P)!=="svelte-1x5k2nx"&&(P.innerHTML=Np),Fs=p(e),o(F.$$.fragment,e),Ys=p(e),o(Y.$$.fragment,e),Ks=p(e),o(f.$$.fragment,e),Os=p(e),K=i(e,"P",{"data-svelte-h":!0}),r(K)!=="svelte-1a46515"&&(K.innerHTML=Gp),el=p(e),o(O.$$.fragment,e),tl=p(e),ee=i(e,"P",{"data-svelte-h":!0}),r(ee)!=="svelte-1iw9935"&&(ee.textContent=qp),sl=p(e),o(te.$$.fragment,e),ll=p(e),se=i(e,"P",{"data-svelte-h":!0}),r(se)!=="svelte-t7karu"&&(se.innerHTML=Lp),nl=p(e),o(le.$$.fragment,e),pl=p(e),o(ne.$$.fragment,e),al=p(e),pe=i(e,"P",{"data-svelte-h":!0}),r(pe)!=="svelte-ug9wut"&&(pe.innerHTML=Hp),il=p(e),o(ae.$$.fragment,e),rl=p(e),o(ie.$$.fragment,e),Ml=p(e),re=i(e,"P",{"data-svelte-h":!0}),r(re)!=="svelte-1msgn8m"&&(re.innerHTML=Dp),ol=p(e),o(Me.$$.fragment,e),cl=p(e),o(oe.$$.fragment,e),ml=p(e),ce=i(e,"P",{"data-svelte-h":!0}),r(ce)!=="svelte-1j4lxpk"&&(ce.innerHTML=Ep),Jl=p(e),me=i(e,"P",{"data-svelte-h":!0}),r(me)!=="svelte-fi088p"&&(me.textContent=Sp),yl=p(e),o(Je.$$.fragment,e),Tl=p(e),ye=i(e,"P",{"data-svelte-h":!0}),r(ye)!=="svelte-1m6h0xb"&&(ye.innerHTML=Pp),jl=p(e),Te=i(e,"P",{"data-svelte-h":!0}),r(Te)!=="svelte-88oi4e"&&(Te.textContent=Fp),ul=p(e),o(je.$$.fragment,e),kl=p(e),ue=i(e,"P",{"data-svelte-h":!0}),r(ue)!=="svelte-1n29fvp"&&(ue.innerHTML=Yp),fl=p(e),o(ke.$$.fragment,e),dl=p(e),fe=i(e,"P",{"data-svelte-h":!0}),r(fe)!=="svelte-1s00y6r"&&(fe.innerHTML=Kp),$l=p(e),o(de.$$.fragment,e),Ul=p(e),o($e.$$.fragment,e),bl=p(e),Ue=i(e,"P",{"data-svelte-h":!0}),r(Ue)!=="svelte-1796xa2"&&(Ue.innerHTML=Op),wl=p(e),be=i(e,"P",{"data-svelte-h":!0}),r(be)!=="svelte-b7z3yo"&&(be.innerHTML=ea),xl=p(e),we=i(e,"P",{"data-svelte-h":!0}),r(we)!=="svelte-1mw3npm"&&(we.innerHTML=ta),gl=p(e),o(xe.$$.fragment,e),hl=p(e),o(ge.$$.fragment,e),zl=p(e),he=i(e,"P",{"data-svelte-h":!0}),r(he)!=="svelte-kmlurl"&&(he.innerHTML=sa),Il=p(e),ze=i(e,"P",{"data-svelte-h":!0}),r(ze)!=="svelte-w89tpo"&&(ze.textContent=la),Cl=p(e),o(Ie.$$.fragment,e),Zl=p(e),Ce=i(e,"P",{"data-svelte-h":!0}),r(Ce)!=="svelte-wmhscv"&&(Ce.textContent=na),Vl=p(e),Ze=i(e,"P",{"data-svelte-h":!0}),r(Ze)!=="svelte-1b5gm3a"&&(Ze.textContent=pa),vl=p(e),o(Ve.$$.fragment,e),_l=p(e),o(ve.$$.fragment,e),Ql=p(e),_e=i(e,"P",{"data-svelte-h":!0}),r(_e)!=="svelte-11afg1q"&&(_e.textContent=aa),Bl=p(e),o(Qe.$$.fragment,e),Wl=p(e),o(Be.$$.fragment,e),Xl=p(e),We=i(e,"P",{"data-svelte-h":!0}),r(We)!=="svelte-1rxlcm4"&&(We.textContent=ia),Rl=p(e),o(Xe.$$.fragment,e),Al=p(e),Re=i(e,"P",{"data-svelte-h":!0}),r(Re)!=="svelte-11om3og"&&(Re.innerHTML=ra),Nl=p(e),o(Ae.$$.fragment,e),Gl=p(e),o(Ne.$$.fragment,e),ql=p(e),Ge=i(e,"P",{"data-svelte-h":!0}),r(Ge)!=="svelte-xl2cm3"&&(Ge.textContent=Ma),Ll=p(e),o(qe.$$.fragment,e),Hl=p(e),Le=i(e,"P",{"data-svelte-h":!0}),r(Le)!=="svelte-1ufmnts"&&(Le.innerHTML=oa),Dl=p(e),o(He.$$.fragment,e),El=p(e),De=i(e,"P",{"data-svelte-h":!0}),r(De)!=="svelte-1nmxiy7"&&(De.innerHTML=ca),Sl=p(e),Ee=i(e,"P",{"data-svelte-h":!0}),r(Ee)!=="svelte-fxvkaq"&&(Ee.innerHTML=ma),Pl=p(e),o(Se.$$.fragment,e),Fl=p(e),Pe=i(e,"P",{"data-svelte-h":!0}),r(Pe)!=="svelte-1we7610"&&(Pe.innerHTML=Ja),Yl=p(e),o(Fe.$$.fragment,e),Kl=p(e),Ye=i(e,"P",{"data-svelte-h":!0}),r(Ye)!=="svelte-qr5eef"&&(Ye.innerHTML=ya),Ol=p(e),Ke=i(e,"P",{"data-svelte-h":!0}),r(Ke)!=="svelte-1y0zlzn"&&(Ke.textContent=Ta),en=p(e),o(Oe.$$.fragment,e),tn=p(e),et=i(e,"P",{"data-svelte-h":!0}),r(et)!=="svelte-1s4prcg"&&(et.innerHTML=ja),sn=p(e),o(tt.$$.fragment,e),ln=p(e),st=i(e,"P",{"data-svelte-h":!0}),r(st)!=="svelte-27o3j0"&&(st.innerHTML=ua),nn=p(e),lt=i(e,"P",{"data-svelte-h":!0}),r(lt)!=="svelte-1defrwn"&&(lt.textContent=ka),pn=p(e),o(nt.$$.fragment,e),an=p(e),pt=i(e,"P",{"data-svelte-h":!0}),r(pt)!=="svelte-1rzo02i"&&(pt.innerHTML=fa),rn=p(e),at=i(e,"P",{"data-svelte-h":!0}),r(at)!=="svelte-1eicimw"&&(at.textContent=da),Mn=p(e),o(it.$$.fragment,e),on=p(e),o(rt.$$.fragment,e),cn=p(e),Mt=i(e,"P",{"data-svelte-h":!0}),r(Mt)!=="svelte-ne1ona"&&(Mt.textContent=$a),mn=p(e),o(ot.$$.fragment,e),Jn=p(e),ct=i(e,"P",{"data-svelte-h":!0}),r(ct)!=="svelte-1csmvaq"&&(ct.innerHTML=Ua),yn=p(e),mt=i(e,"P",{"data-svelte-h":!0}),r(mt)!=="svelte-27mvab"&&(mt.textContent=ba),Tn=p(e),o(Jt.$$.fragment,e),jn=p(e),yt=i(e,"P",{"data-svelte-h":!0}),r(yt)!=="svelte-1820may"&&(yt.textContent=wa),un=p(e),o(Tt.$$.fragment,e),kn=p(e),o(jt.$$.fragment,e),fn=p(e),ut=i(e,"P",{"data-svelte-h":!0}),r(ut)!=="svelte-12j9c7e"&&(ut.textContent=xa),dn=p(e),o(kt.$$.fragment,e),$n=p(e),ft=i(e,"P",{"data-svelte-h":!0}),r(ft)!=="svelte-192e8el"&&(ft.innerHTML=ga),Un=p(e),dt=i(e,"P",{"data-svelte-h":!0}),r(dt)!=="svelte-s763fn"&&(dt.innerHTML=ha),bn=p(e),o($t.$$.fragment,e),wn=p(e),o(Ut.$$.fragment,e),xn=p(e),bt=i(e,"P",{"data-svelte-h":!0}),r(bt)!=="svelte-9u7vle"&&(bt.textContent=za),gn=p(e),o(wt.$$.fragment,e),hn=p(e),xt=i(e,"P",{"data-svelte-h":!0}),r(xt)!=="svelte-161fk3k"&&(xt.textContent=Ia),zn=p(e),o(gt.$$.fragment,e),In=p(e),o(ht.$$.fragment,e),Cn=p(e),zt=i(e,"P",{"data-svelte-h":!0}),r(zt)!=="svelte-vfiyqu"&&(zt.innerHTML=Ca),Zn=p(e),o(It.$$.fragment,e),Vn=p(e),Ct=i(e,"P",{"data-svelte-h":!0}),r(Ct)!=="svelte-99692o"&&(Ct.textContent=Za),vn=p(e),o(Zt.$$.fragment,e),_n=p(e),Vt=i(e,"P",{"data-svelte-h":!0}),r(Vt)!=="svelte-js49zn"&&(Vt.textContent=Va),Qn=p(e),o(vt.$$.fragment,e),Bn=p(e),_t=i(e,"P",{"data-svelte-h":!0}),r(_t)!=="svelte-15f8gr4"&&(_t.innerHTML=va),Wn=p(e),o(Qt.$$.fragment,e),Xn=p(e),Bt=i(e,"P",{"data-svelte-h":!0}),r(Bt)!=="svelte-bnnqdu"&&(Bt.textContent=_a),Rn=p(e),Wt=i(e,"P",{"data-svelte-h":!0}),r(Wt)!=="svelte-1l9whg7"&&(Wt.textContent=Qa),An=p(e),o(Xt.$$.fragment,e),Nn=p(e),Rt=i(e,"P",{"data-svelte-h":!0}),r(Rt)!=="svelte-7k226e"&&(Rt.innerHTML=Ba),Gn=p(e),At=i(e,"P",{"data-svelte-h":!0}),r(At)!=="svelte-12u7soz"&&(At.innerHTML=Wa),qn=p(e),o(Nt.$$.fragment,e),Ln=p(e),Gt=i(e,"P",{"data-svelte-h":!0}),r(Gt)!=="svelte-3k86to"&&(Gt.textContent=Xa),Hn=p(e),o(qt.$$.fragment,e),Dn=p(e),o(Lt.$$.fragment,e),En=p(e),Ht=i(e,"P",{"data-svelte-h":!0}),r(Ht)!=="svelte-efo75"&&(Ht.textContent=Ra),Sn=p(e),o(Dt.$$.fragment,e),Pn=p(e),Et=i(e,"P",{"data-svelte-h":!0}),r(Et)!=="svelte-jkoe6i"&&(Et.innerHTML=Aa),Fn=p(e),St=i(e,"P",{"data-svelte-h":!0}),r(St)!=="svelte-a1nslg"&&(St.textContent=Na),Yn=p(e),o(Pt.$$.fragment,e),Kn=p(e),Ft=i(e,"P",{"data-svelte-h":!0}),r(Ft)!=="svelte-lbdgvd"&&(Ft.textContent=Ga),On=p(e),o(Yt.$$.fragment,e),ep=p(e),o(Kt.$$.fragment,e),tp=p(e),Ot=i(e,"P",{"data-svelte-h":!0}),r(Ot)!=="svelte-13dsx6z"&&(Ot.innerHTML=qa),sp=p(e),es=i(e,"P",{"data-svelte-h":!0}),r(es)!=="svelte-1qep19e"&&(es.innerHTML=La),lp=p(e),o(ts.$$.fragment,e),np=p(e),o(ss.$$.fragment,e),pp=p(e),ls=i(e,"P",{"data-svelte-h":!0}),r(ls)!=="svelte-1tujl3o"&&(ls.textContent=Ha),ap=p(e),o(ns.$$.fragment,e),ip=p(e),ps=i(e,"P",{"data-svelte-h":!0}),r(ps)!=="svelte-kqopcc"&&(ps.textContent=Da),rp=p(e),o(as.$$.fragment,e),Mp=p(e),o(is.$$.fragment,e),op=p(e),rs=i(e,"P",{"data-svelte-h":!0}),r(rs)!=="svelte-uyuyqi"&&(rs.innerHTML=Ea),cp=p(e),o(Ms.$$.fragment,e),mp=p(e),os=i(e,"P",{"data-svelte-h":!0}),r(os)!=="svelte-1lgl7hm"&&(os.innerHTML=Sa),Jp=p(e),cs=i(e,"P",{"data-svelte-h":!0}),r(cs)!=="svelte-1yukk2q"&&(cs.innerHTML=Pa),yp=p(e),o(ms.$$.fragment,e),Tp=p(e),Js=i(e,"P",{"data-svelte-h":!0}),r(Js)!=="svelte-m9h857"&&(Js.textContent=Fa),jp=p(e),o(ys.$$.fragment,e),up=p(e),Ts=i(e,"P",{"data-svelte-h":!0}),r(Ts)!=="svelte-1hiamoq"&&(Ts.textContent=Ya),kp=p(e),o(js.$$.fragment,e),fp=p(e),ks=i(e,"P",{}),Oa(ks).forEach(s),this.h()},h(){$p(j,"name","hf:doc:metadata"),$p(j,"content",Ji),$p(k,"class","flex justify-center")},m(e,t){ai(document.head,j),l(e,d,t),l(e,u,t),l(e,us,t),c($,e,t),l(e,$s,t),c(U,e,t),l(e,Us,t),l(e,b,t),l(e,bs,t),l(e,w,t),l(e,ws,t),l(e,x,t),l(e,xs,t),l(e,k,t),l(e,gs,t),l(e,g,t),l(e,hs,t),c(h,e,t),l(e,zs,t),l(e,z,t),l(e,Is,t),l(e,I,t),l(e,Cs,t),l(e,C,t),l(e,Zs,t),c(Z,e,t),l(e,Vs,t),l(e,V,t),l(e,vs,t),c(v,e,t),l(e,_s,t),l(e,_,t),l(e,Qs,t),c(Q,e,t),l(e,Bs,t),l(e,B,t),l(e,Ws,t),c(W,e,t),l(e,Xs,t),l(e,X,t),l(e,Rs,t),l(e,R,t),l(e,As,t),c(A,e,t),l(e,Ns,t),l(e,N,t),l(e,Gs,t),l(e,G,t),l(e,qs,t),l(e,q,t),l(e,Ls,t),c(L,e,t),l(e,Hs,t),l(e,H,t),l(e,Ds,t),l(e,D,t),l(e,Es,t),c(E,e,t),l(e,Ss,t),l(e,S,t),l(e,Ps,t),l(e,P,t),l(e,Fs,t),c(F,e,t),l(e,Ys,t),c(Y,e,t),l(e,Ks,t),c(f,e,t),l(e,Os,t),l(e,K,t),l(e,el,t),c(O,e,t),l(e,tl,t),l(e,ee,t),l(e,sl,t),c(te,e,t),l(e,ll,t),l(e,se,t),l(e,nl,t),c(le,e,t),l(e,pl,t),c(ne,e,t),l(e,al,t),l(e,pe,t),l(e,il,t),c(ae,e,t),l(e,rl,t),c(ie,e,t),l(e,Ml,t),l(e,re,t),l(e,ol,t),c(Me,e,t),l(e,cl,t),c(oe,e,t),l(e,ml,t),l(e,ce,t),l(e,Jl,t),l(e,me,t),l(e,yl,t),c(Je,e,t),l(e,Tl,t),l(e,ye,t),l(e,jl,t),l(e,Te,t),l(e,ul,t),c(je,e,t),l(e,kl,t),l(e,ue,t),l(e,fl,t),c(ke,e,t),l(e,dl,t),l(e,fe,t),l(e,$l,t),c(de,e,t),l(e,Ul,t),c($e,e,t),l(e,bl,t),l(e,Ue,t),l(e,wl,t),l(e,be,t),l(e,xl,t),l(e,we,t),l(e,gl,t),c(xe,e,t),l(e,hl,t),c(ge,e,t),l(e,zl,t),l(e,he,t),l(e,Il,t),l(e,ze,t),l(e,Cl,t),c(Ie,e,t),l(e,Zl,t),l(e,Ce,t),l(e,Vl,t),l(e,Ze,t),l(e,vl,t),c(Ve,e,t),l(e,_l,t),c(ve,e,t),l(e,Ql,t),l(e,_e,t),l(e,Bl,t),c(Qe,e,t),l(e,Wl,t),c(Be,e,t),l(e,Xl,t),l(e,We,t),l(e,Rl,t),c(Xe,e,t),l(e,Al,t),l(e,Re,t),l(e,Nl,t),c(Ae,e,t),l(e,Gl,t),c(Ne,e,t),l(e,ql,t),l(e,Ge,t),l(e,Ll,t),c(qe,e,t),l(e,Hl,t),l(e,Le,t),l(e,Dl,t),c(He,e,t),l(e,El,t),l(e,De,t),l(e,Sl,t),l(e,Ee,t),l(e,Pl,t),c(Se,e,t),l(e,Fl,t),l(e,Pe,t),l(e,Yl,t),c(Fe,e,t),l(e,Kl,t),l(e,Ye,t),l(e,Ol,t),l(e,Ke,t),l(e,en,t),c(Oe,e,t),l(e,tn,t),l(e,et,t),l(e,sn,t),c(tt,e,t),l(e,ln,t),l(e,st,t),l(e,nn,t),l(e,lt,t),l(e,pn,t),c(nt,e,t),l(e,an,t),l(e,pt,t),l(e,rn,t),l(e,at,t),l(e,Mn,t),c(it,e,t),l(e,on,t),c(rt,e,t),l(e,cn,t),l(e,Mt,t),l(e,mn,t),c(ot,e,t),l(e,Jn,t),l(e,ct,t),l(e,yn,t),l(e,mt,t),l(e,Tn,t),c(Jt,e,t),l(e,jn,t),l(e,yt,t),l(e,un,t),c(Tt,e,t),l(e,kn,t),c(jt,e,t),l(e,fn,t),l(e,ut,t),l(e,dn,t),c(kt,e,t),l(e,$n,t),l(e,ft,t),l(e,Un,t),l(e,dt,t),l(e,bn,t),c($t,e,t),l(e,wn,t),c(Ut,e,t),l(e,xn,t),l(e,bt,t),l(e,gn,t),c(wt,e,t),l(e,hn,t),l(e,xt,t),l(e,zn,t),c(gt,e,t),l(e,In,t),c(ht,e,t),l(e,Cn,t),l(e,zt,t),l(e,Zn,t),c(It,e,t),l(e,Vn,t),l(e,Ct,t),l(e,vn,t),c(Zt,e,t),l(e,_n,t),l(e,Vt,t),l(e,Qn,t),c(vt,e,t),l(e,Bn,t),l(e,_t,t),l(e,Wn,t),c(Qt,e,t),l(e,Xn,t),l(e,Bt,t),l(e,Rn,t),l(e,Wt,t),l(e,An,t),c(Xt,e,t),l(e,Nn,t),l(e,Rt,t),l(e,Gn,t),l(e,At,t),l(e,qn,t),c(Nt,e,t),l(e,Ln,t),l(e,Gt,t),l(e,Hn,t),c(qt,e,t),l(e,Dn,t),c(Lt,e,t),l(e,En,t),l(e,Ht,t),l(e,Sn,t),c(Dt,e,t),l(e,Pn,t),l(e,Et,t),l(e,Fn,t),l(e,St,t),l(e,Yn,t),c(Pt,e,t),l(e,Kn,t),l(e,Ft,t),l(e,On,t),c(Yt,e,t),l(e,ep,t),c(Kt,e,t),l(e,tp,t),l(e,Ot,t),l(e,sp,t),l(e,es,t),l(e,lp,t),c(ts,e,t),l(e,np,t),c(ss,e,t),l(e,pp,t),l(e,ls,t),l(e,ap,t),c(ns,e,t),l(e,ip,t),l(e,ps,t),l(e,rp,t),c(as,e,t),l(e,Mp,t),c(is,e,t),l(e,op,t),l(e,rs,t),l(e,cp,t),c(Ms,e,t),l(e,mp,t),l(e,os,t),l(e,Jp,t),l(e,cs,t),l(e,yp,t),c(ms,e,t),l(e,Tp,t),l(e,Js,t),l(e,jp,t),c(ys,e,t),l(e,up,t),l(e,Ts,t),l(e,kp,t),c(js,e,t),l(e,fp,t),l(e,ks,t),dp=!0},p(e,[t]){const Ka={};t&2&&(Ka.$$scope={dirty:t,ctx:e}),f.$set(Ka)},i(e){dp||(m($.$$.fragment,e),m(U.$$.fragment,e),m(h.$$.fragment,e),m(Z.$$.fragment,e),m(v.$$.fragment,e),m(Q.$$.fragment,e),m(W.$$.fragment,e),m(A.$$.fragment,e),m(L.$$.fragment,e),m(E.$$.fragment,e),m(F.$$.fragment,e),m(Y.$$.fragment,e),m(f.$$.fragment,e),m(O.$$.fragment,e),m(te.$$.fragment,e),m(le.$$.fragment,e),m(ne.$$.fragment,e),m(ae.$$.fragment,e),m(ie.$$.fragment,e),m(Me.$$.fragment,e),m(oe.$$.fragment,e),m(Je.$$.fragment,e),m(je.$$.fragment,e),m(ke.$$.fragment,e),m(de.$$.fragment,e),m($e.$$.fragment,e),m(xe.$$.fragment,e),m(ge.$$.fragment,e),m(Ie.$$.fragment,e),m(Ve.$$.fragment,e),m(ve.$$.fragment,e),m(Qe.$$.fragment,e),m(Be.$$.fragment,e),m(Xe.$$.fragment,e),m(Ae.$$.fragment,e),m(Ne.$$.fragment,e),m(qe.$$.fragment,e),m(He.$$.fragment,e),m(Se.$$.fragment,e),m(Fe.$$.fragment,e),m(Oe.$$.fragment,e),m(tt.$$.fragment,e),m(nt.$$.fragment,e),m(it.$$.fragment,e),m(rt.$$.fragment,e),m(ot.$$.fragment,e),m(Jt.$$.fragment,e),m(Tt.$$.fragment,e),m(jt.$$.fragment,e),m(kt.$$.fragment,e),m($t.$$.fragment,e),m(Ut.$$.fragment,e),m(wt.$$.fragment,e),m(gt.$$.fragment,e),m(ht.$$.fragment,e),m(It.$$.fragment,e),m(Zt.$$.fragment,e),m(vt.$$.fragment,e),m(Qt.$$.fragment,e),m(Xt.$$.fragment,e),m(Nt.$$.fragment,e),m(qt.$$.fragment,e),m(Lt.$$.fragment,e),m(Dt.$$.fragment,e),m(Pt.$$.fragment,e),m(Yt.$$.fragment,e),m(Kt.$$.fragment,e),m(ts.$$.fragment,e),m(ss.$$.fragment,e),m(ns.$$.fragment,e),m(as.$$.fragment,e),m(is.$$.fragment,e),m(Ms.$$.fragment,e),m(ms.$$.fragment,e),m(ys.$$.fragment,e),m(js.$$.fragment,e),dp=!0)},o(e){J($.$$.fragment,e),J(U.$$.fragment,e),J(h.$$.fragment,e),J(Z.$$.fragment,e),J(v.$$.fragment,e),J(Q.$$.fragment,e),J(W.$$.fragment,e),J(A.$$.fragment,e),J(L.$$.fragment,e),J(E.$$.fragment,e),J(F.$$.fragment,e),J(Y.$$.fragment,e),J(f.$$.fragment,e),J(O.$$.fragment,e),J(te.$$.fragment,e),J(le.$$.fragment,e),J(ne.$$.fragment,e),J(ae.$$.fragment,e),J(ie.$$.fragment,e),J(Me.$$.fragment,e),J(oe.$$.fragment,e),J(Je.$$.fragment,e),J(je.$$.fragment,e),J(ke.$$.fragment,e),J(de.$$.fragment,e),J($e.$$.fragment,e),J(xe.$$.fragment,e),J(ge.$$.fragment,e),J(Ie.$$.fragment,e),J(Ve.$$.fragment,e),J(ve.$$.fragment,e),J(Qe.$$.fragment,e),J(Be.$$.fragment,e),J(Xe.$$.fragment,e),J(Ae.$$.fragment,e),J(Ne.$$.fragment,e),J(qe.$$.fragment,e),J(He.$$.fragment,e),J(Se.$$.fragment,e),J(Fe.$$.fragment,e),J(Oe.$$.fragment,e),J(tt.$$.fragment,e),J(nt.$$.fragment,e),J(it.$$.fragment,e),J(rt.$$.fragment,e),J(ot.$$.fragment,e),J(Jt.$$.fragment,e),J(Tt.$$.fragment,e),J(jt.$$.fragment,e),J(kt.$$.fragment,e),J($t.$$.fragment,e),J(Ut.$$.fragment,e),J(wt.$$.fragment,e),J(gt.$$.fragment,e),J(ht.$$.fragment,e),J(It.$$.fragment,e),J(Zt.$$.fragment,e),J(vt.$$.fragment,e),J(Qt.$$.fragment,e),J(Xt.$$.fragment,e),J(Nt.$$.fragment,e),J(qt.$$.fragment,e),J(Lt.$$.fragment,e),J(Dt.$$.fragment,e),J(Pt.$$.fragment,e),J(Yt.$$.fragment,e),J(Kt.$$.fragment,e),J(ts.$$.fragment,e),J(ss.$$.fragment,e),J(ns.$$.fragment,e),J(as.$$.fragment,e),J(is.$$.fragment,e),J(Ms.$$.fragment,e),J(ms.$$.fragment,e),J(ys.$$.fragment,e),J(js.$$.fragment,e),dp=!1},d(e){e&&(s(d),s(u),s(us),s($s),s(Us),s(b),s(bs),s(w),s(ws),s(x),s(xs),s(k),s(gs),s(g),s(hs),s(zs),s(z),s(Is),s(I),s(Cs),s(C),s(Zs),s(Vs),s(V),s(vs),s(_s),s(_),s(Qs),s(Bs),s(B),s(Ws),s(Xs),s(X),s(Rs),s(R),s(As),s(Ns),s(N),s(Gs),s(G),s(qs),s(q),s(Ls),s(Hs),s(H),s(Ds),s(D),s(Es),s(Ss),s(S),s(Ps),s(P),s(Fs),s(Ys),s(Ks),s(Os),s(K),s(el),s(tl),s(ee),s(sl),s(ll),s(se),s(nl),s(pl),s(al),s(pe),s(il),s(rl),s(Ml),s(re),s(ol),s(cl),s(ml),s(ce),s(Jl),s(me),s(yl),s(Tl),s(ye),s(jl),s(Te),s(ul),s(kl),s(ue),s(fl),s(dl),s(fe),s($l),s(Ul),s(bl),s(Ue),s(wl),s(be),s(xl),s(we),s(gl),s(hl),s(zl),s(he),s(Il),s(ze),s(Cl),s(Zl),s(Ce),s(Vl),s(Ze),s(vl),s(_l),s(Ql),s(_e),s(Bl),s(Wl),s(Xl),s(We),s(Rl),s(Al),s(Re),s(Nl),s(Gl),s(ql),s(Ge),s(Ll),s(Hl),s(Le),s(Dl),s(El),s(De),s(Sl),s(Ee),s(Pl),s(Fl),s(Pe),s(Yl),s(Kl),s(Ye),s(Ol),s(Ke),s(en),s(tn),s(et),s(sn),s(ln),s(st),s(nn),s(lt),s(pn),s(an),s(pt),s(rn),s(at),s(Mn),s(on),s(cn),s(Mt),s(mn),s(Jn),s(ct),s(yn),s(mt),s(Tn),s(jn),s(yt),s(un),s(kn),s(fn),s(ut),s(dn),s($n),s(ft),s(Un),s(dt),s(bn),s(wn),s(xn),s(bt),s(gn),s(hn),s(xt),s(zn),s(In),s(Cn),s(zt),s(Zn),s(Vn),s(Ct),s(vn),s(_n),s(Vt),s(Qn),s(Bn),s(_t),s(Wn),s(Xn),s(Bt),s(Rn),s(Wt),s(An),s(Nn),s(Rt),s(Gn),s(At),s(qn),s(Ln),s(Gt),s(Hn),s(Dn),s(En),s(Ht),s(Sn),s(Pn),s(Et),s(Fn),s(St),s(Yn),s(Kn),s(Ft),s(On),s(ep),s(tp),s(Ot),s(sp),s(es),s(lp),s(np),s(pp),s(ls),s(ap),s(ip),s(ps),s(rp),s(Mp),s(op),s(rs),s(cp),s(mp),s(os),s(Jp),s(cs),s(yp),s(Tp),s(Js),s(jp),s(up),s(Ts),s(kp),s(fp),s(ks)),s(j),y($,e),y(U,e),y(h,e),y(Z,e),y(v,e),y(Q,e),y(W,e),y(A,e),y(L,e),y(E,e),y(F,e),y(Y,e),y(f,e),y(O,e),y(te,e),y(le,e),y(ne,e),y(ae,e),y(ie,e),y(Me,e),y(oe,e),y(Je,e),y(je,e),y(ke,e),y(de,e),y($e,e),y(xe,e),y(ge,e),y(Ie,e),y(Ve,e),y(ve,e),y(Qe,e),y(Be,e),y(Xe,e),y(Ae,e),y(Ne,e),y(qe,e),y(He,e),y(Se,e),y(Fe,e),y(Oe,e),y(tt,e),y(nt,e),y(it,e),y(rt,e),y(ot,e),y(Jt,e),y(Tt,e),y(jt,e),y(kt,e),y($t,e),y(Ut,e),y(wt,e),y(gt,e),y(ht,e),y(It,e),y(Zt,e),y(vt,e),y(Qt,e),y(Xt,e),y(Nt,e),y(qt,e),y(Lt,e),y(Dt,e),y(Pt,e),y(Yt,e),y(Kt,e),y(ts,e),y(ss,e),y(ns,e),y(as,e),y(is,e),y(Ms,e),y(ms,e),y(ys,e),y(js,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 yi(ds){return ti(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ui extends li{constructor(j){super(),ni(this,j,yi,mi,ei,{})}}export{Ui as component};
