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