Buckets:
| import{s as ua,n as oa,o as Ta}from"../chunks/scheduler.ef843396.js";import{S as ha,i as wa,e,s as t,c as i,h as xa,a as M,d as n,b as p,f as Ua,g as j,j as y,k as g,l as Ca,m as a,n as J,t as c,o as r,p as U}from"../chunks/index.e046a64d.js";import{Y as ma}from"../chunks/Youtube.5dc4ef22.js";import{C as u}from"../chunks/CodeBlock.655932ae.js";import{C as ga}from"../chunks/CourseFloatingBanner.42872f72.js";import{H as In,E as Ia}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.7d4805dc.js";function ba(bn){let o,Rs,Ds,Ys,I,Ks,b,Ps,k,kn="ดั้งเดิมแล้ว Byte-Pair Encoding (BPE) เป็นอัลกอริทึมที่ถูกสร้างเพื่อใช้บีบอัดข้อความให้เล็กลง (compress texts) ภายหลัง OpenAI ได้นำอัลกอริทึมนี้มาใช้ในการตัดคำ ในขั้นตอนเตรียมข้อมูลเพื่อเทรน GPT อัลกอริทึมตัวนี้ยังถูกนำมาใช้อย่างกว้างขวางกับโมเดลประเภท Transformer เช่น GPT, GPT-2, RoBERTa, BART, และ DeBERTa",Fs,q,Ls,T,qn="<p>💡 บทนี้จะพูดถึง BPE อย่างละเอียด เราจะเจาะลึกถึงไปถึงการ implement อัลกอริทึมนี้ คุณสามารถข้ามไปตอนท้ายได้ ถ้าคุณสนใจเพียงแค่ภาพรวมคร่าวๆเท่านั้น</p>",Os,f,sl,d,fn="BPE เริ่มการเทรนด้วยการคำนวณรายการของคำที่อยู่ในคลังข้อมูล (คลังข้อมูลจะต้องผ่านการ normalization และ pre-tokenization มาแล้ว) จากนั้นมันจะเริ่มสร้างชุดคำศัพท์ (vocabulary) จากตัวอักษรที่อยู่ในแต่ละคำ มาดูตัวอย่างง่ายๆกัน เราจะสมมติว่าคลังข้อมูลของเรามีเพียงห้าคำเท่านั้น :",ll,Q,nl,A,dn="vocabulary ตั้งต้นสำหรับชุดข้อมูลนี้คือ <code>["b", "g", "h", "n", "p", "s", "u"]</code> ในการใช้งานจริง vocabulary ตั้งต้นจะประกอบด้วยตัวอักษร ASCII เป็นอย่างต่ำ หรืออาจจะมีตัวอักษร Unicode ได้ด้วย",al,$,Qn="ถ้าข้อความใหม่ที่คุณต้องการจะตัดคำ มีสัญลักษณ์ที่ไม่ได้อยู่ใน training corpus สัญลักษณ์พวกนี้จะถูกแปลงเป็น unknown token นี่เป็นเหตุผลว่าทำไมโมเดล NLP จึงประมวลผลข้อความที่มีอีโมจิได้ไม่ดีนัก",tl,h,An="<p>Tokenizer ของ GPT-2 และ RoBERTa (ซึ่งค่อนข้างคล้ายกัน) มีวิธีการจัดการกับปัญหานี้ได้อย่างประสิทธิภาพ มันจะไม่มองแต่ละคำเป็น Unicode แต่จะมองว่าเป็น byte การทำแบบนี้ทำให้ vocabulary ตั้งต้น มีขนาดที่เล็ก (256) แต่ยังสามารถบันทึกทุกๆสัญลักษณ์ได้ โดยไม่ต้องแปลงสัญลักษณ์พิเศษต่างๆเป็น unknown token เทคนิคนี้เรียกว่า <em>byte-level BPE</em></p>",pl,B,$n=`หลังจากสร้าง vocabulary ตั้งต้นแล้ว เราจะเพิ่ม token ใหม่ๆ เข้าไปจนว่าจะได้ vocabulary ขนาดใหญ่พอกับที่เราต้องการ โดยเราจะเทรน BPE ให้เรียน กฎที่เรียกว่า <em>merges</em> ซึ่งเป็นกฎสำหรับการรวมสองหน่วยใน vocabulary เข้าด้วยกัน | |
| ตอนช่วงเริ่มต้น กฎ merges พวกนี้จะสร้างคำย่อยที่ประกอบด้วยตัวอักษรสองตัว ระหว่างที่เราเทรนต่อไปเรื่อยๆ คำย่อยที่ได้ก็จะยาวขึ้น | |
| ในแต่ละรอบของการเทรน BPE จะคำนวณหาคู่ของคำย่อยที่พบบ่อยที่สุด (คู่ของคำย่อย ในที่นี้เราหมายถึง token ที่อยู่ติดกัน) | |
| คู่ที่มีความถี่มากที่สุดจะถูกรวมเข้าด้วยกัน จากนั้นโมเดลจะทำแบบเดิมอีกในการเทรนรอบต่อไป`,el,E,Bn="กลับมาที่ตัวอย่างของเรา สมมติว่าแต่ละคำมีความถี่ดังต่อไปนี้ :",Ml,V,yl,z,En="ซึ่งแปลว่า <code>"hug"</code> พบ 10 ครั้งใน corpus, <code>"pug"</code> พบ 5 ครั้ง, <code>"pun"</code> พบ 12 ครั้ง, <code>"bun"</code> พบ 4 ครั้ง, และ <code>"hugs"</code> พบ 5 ครั้ง",il,Z,Vn="เราจะเริ่มการเทรน โดยแยกแต่ละคำออกเป็นตัวอักษร (ตัวอักษรจะต้องมาจาก vocabulary ตั้งต้นที่เราสร้างมาก่อนหน้านี้แล้ว) ตอนนี้คุณจะเห็นว่าแต่ละคำถูกแปลงเป็น list ที่ประกอบไปด้วยหลายๆ token",jl,v,Jl,G,zn=`จากนั้น เราจะดูทีละคู่ ตัวอย่างเช่น คู่ <code>("h", "u")</code> ซึ่งมาจากคำว่า <code>"hug"</code> และ <code>"hugs"</code> และพบ 15 ครั้งใน corpus | |
| อย่างไรก็ตาม คู่นี้ไม่ใช่คู่ที่พบบ่อยที่สุด คู่ที่พบบ่อยที่สุดคือ <code>("u", "g")</code> ซึ่งพบใน คำว่า <code>"hug"</code>, <code>"pug"</code>, และ <code>"hugs"</code> ซึ่งความถี่รวมของมันคือ 20 ครั้ง | |
| ดังนั้น กฎแรกของการ merge ที่ tokenizer เรียนคือ <code>("u", "g") -> "ug"</code> แปลว่ามันจะเพิ่ม <code>"ug"</code> เข้าไปใน vocabulary และใน corpus คู่นี้ก็จะถูกรวมเป็น token เดียวด้วย`,cl,S,Zn="หลังจากขั้นตอนนี้ vocabulary และ corpus จะมีค่าดังนี้ :",rl,N,Ul,_,vn=`ตอนนี้ จะเห็นว่าเรามีคู่ที่เมื่อรวมกันจะได้ token ที่ยาวกว่าสองตัวอักษร ตัวอย่างเช่น คู่ <code>("h", "ug")</code> ซึ่งพบ 15 ครั้งใน corpus | |
| อย่างไรก็ตาม คู่ที่พบบ่อยที่สุดคือ <code>("u", "n")</code> ซึ่งพบ 16 ครั้ง ดังนั้นกฎที่สองก็คือ <code>("u", "n") -> "un"</code> หลังจากที่เราเพิ่มคู่นี้ไปใน vocabulary และ merge token ใน corpus เข้าด้วยกันแล้ว เราจะได้ :`,ul,H,ol,X,Gn="ตอนนี้ คู่ที่พบบ่อยที่สุดคือ <code>("h", "ug")</code> ดังนั้นกฎที่ได้คือ <code>("h", "ug") -> "hug"</code> ซึ่งจะทำให้เราได้ token ที่มีสามตัวอักษร หลังจากการ merge เราจะได้ :",Tl,D,hl,W,Sn="เราจะทำแบบนี้ต่อไปเรื่อยๆ จนกว่าจะได้ขนาดของ vocabulary ที่ต้องการ",wl,w,Nn="<p>✏️ <strong>ตาคุณแล้ว!</strong> คุณคิดว่ากฎ merge ต่อไปคืออะไร</p>",xl,R,Cl,Y,_n="การ tokenization เป็นขั้นตอนหลังจากการเทรน โดย input ใหม่จะถูก tokenize ด้วยขั้นตอนดังต่อไปนี้",ml,K,Hn="<li>Normalization (การปรับข้อความให้เป็นมาตรฐาน)</li> <li>Pre-tokenization (การเตรียมข้อความให้พร้อมสำหรับการ tokenize จริง)</li> <li>แยกคำออกเป็นตัวอักษรเดี่ยว</li> <li>ใช้กฎ merge ที่ได้จากการเทรนเพื่อรวมตัวอักษรที่เราได้จากขั้นตอนก่อนหน้า</li>",gl,P,Xn="มาดูกฎสามตัวที่เราได้จากการเทรนก่อนหน้านี้ :",Il,F,bl,L,Dn=`คำว่า<code>"bug"</code> จะถูกแยกเป็น <code>["b", "ug"]</code> ส่วนคำว่า <code>"mug"</code> จะถูกแยกเป็น <code>["[UNK]", "ug"]</code> เพราะว่า <code>"m"</code> ไม่ได้อยู่ใน vocabulary ของเรา | |
| ้เช่นเดียวกัน คำว่า <code>"thug"</code> จะถูกแยกเป็น <code>["[UNK]", "hug"]</code> เพราะว่า <code>"t"</code> ไม่ได้อยู่ใน vocabulary กฎแรกจะรวม <code>"u"</code> และ <code>"g"</code> เข้าด้วยกัน จากนั้น <code>"hu"</code> และ <code>"g"</code> ก็จะถูกรวมเข้าด้วยกัน`,kl,x,Wn="<p>✏️ <strong>ตาคุณแล้ว!</strong> คุณคิดว่าคำว่า <code>"unhug"</code> จะถูกแยกอย่างไร</p>",ql,O,fl,ss,Rn="ตอนนี้เราจะมาดูกันว่า คุณจะสามารถ implement อัลกอริทึม BPE ได้อย่างไร สิ่งที่เราจะเรียนต่อไปนี้ไม่ใช่ implementation ที่ดีที่สุด เราเพียงต้องการให้คุณเข้าใจโค้ดและเข้าใจว่า BPE ทำงานอย่างไร",dl,ls,Yn="อันดับแรก เราต้องการ corpus ดังนั้น เราจะสร้าง corpus แบบง่ายๆขึ้นมา โดยประกอบไปด้วยไม่กี่ประโยค :",Ql,ns,Al,as,Kn="จากนั้นเราจะทำการ pre-tokenize corpus นี้ เพื่อแยกข้อความออกเป็นคำๆ เนื่องจากเราจะสร้าง BPE tokenizer ตามตัวที่ใช้ใน GPT-2 เราจึงต้องใช้ <code>gpt2</code> tokenizer ในการ pre-tokenize",$l,ts,Bl,ps,Pn="จากนั้นเราจะคำนวณความถี่ของแต่ละคำ:",El,es,Vl,Ms,zl,ys,Fn="ขั้นตอนต่อไป คือการคำนวณ vocabulary ตั้งต้น ซึ่งสร้างจากแต่ละตัวอักษรใน corpus :",Zl,is,vl,js,Gl,Js,Ln="เราจะเพิ่ม token พิเศษเข้าไปในข้างหน้า list นี้ด้วย GPT-2 ใช้ token พิเศษคือ <code>"<|endoftext|>"</code> :",Sl,cs,Nl,rs,On="จากนั้นเราจะแยกแต่ละคำใน corpus ให้เป็นตัวอักษร เพื่อที่เราจะได้เริ่มการเทรน :",_l,Us,Hl,us,sa="ตอนนี้เราก็พร้อมที่จะเทรนแล้ว เราจะเริ่มด้วยการเขียนฟังก์ชันที่คำนวณความถี่ของแต่ละคู่ token :",Xl,os,Dl,Ts,la="มาดูส่วนผลลัพธ์ (ซึ่งเป็น dictionary) กัน :",Wl,hs,Rl,ws,Yl,xs,na="จากนั้นเราจะหาคู่ที่พบบ่อยที่สุด ซึ่งทำได้ง่ายๆดังนี้ :",Kl,Cs,Pl,ms,Fl,gs,aa="ดังนั้น กฎแรกที่เราได้ก็คือ <code>('Ġ', 't') -> 'Ġt'</code> และเราจะต้องเพิ่ม <code>'Ġt'</code> เข้าไปใน vocabulary :",Ll,Is,Ol,bs,ta="จากนั้น เราจะต้องทำการ merge คำย่อยที่อยู่ใน dictionary <code>splits</code> ด้วย โดยเราจะเขียนฟังก์ชันต่อไปนี้ :",sn,ks,ln,qs,pa="และนี่ก็คือผลลัพธ์จากการ merge ครั้งแรก :",nn,fs,an,ds,tn,Qs,ea="ตอนนี้เราก็มีทุกอย่างพร้อมสำหรับการเทรนแล้ว เราจะเทรนจนกว่าขนาดของ vocabulary จะเท่ากับ 50 :",pn,As,en,$s,Ma="ผลลัพธ์ที่ได้คือ tokenizer ของเราได้เรียน 19 กฎ (vocabulary ตั้งต้นมี 31 token ซึ่งมาจากตัวอักษรที่เรามี 30 ตัวและ token พิเศษอีกหนึ่งตัว) :",Mn,Bs,yn,Es,jn,Vs,ya="ส่วน vocabulary ที่ได้จะประกอบไปด้วย token พิเศษ, ตัวอักษรตั้งต้น, และผลลัพธ์จากการ merge แต่ละครั้ง :",Jn,zs,cn,Zs,rn,C,ia="<p>💡 ถ้าคุณใช้ <code>train_new_from_iterator()</code> กับ corpus เดียวกันนี้ คุณจะไม่ได้ vocabulary เดียวกัน เพราะว่าอาจจะมีหลายคู่ token ที่มีความถี่สูงสุดเท่ากัน ในตัวอย่างของเรา เราเลือกคู่แรกที่โค้ดของเราอ่านเจอ ส่วน 🤗 Tokenizers library เลือกคู่แรกโดยเรียงตาม ID</p>",Un,vs,ja="หากเราต้องการ tokenize ข้อความใดข้อความหนึ่ง สิ่งที่ต้องทำคือ pre-tokenize จากนั้นจึงทำการ tokenize และสุดท้าย apply กฎ merge :",un,Gs,on,Ss,Ja="คุณสามารถทดลองโค้ดนี้ได้กับข้อความทุกข้อความ ที่ประกอบไปด้วยตัวอักษรเท่านั้น :",Tn,Ns,hn,_s,wn,m,ca=`<p>⚠️ การ implementation ในตัวอย่างของเราจะ return error ถ้าโปรแกรมอ่านเจอตัวอักษรที่ไม่มีใน vocabulary นั่นเพราะว่าเราไม่ได้เขียนโค้ดเพื่อจัดการกับกรณีแบบนี้ | |
| ใน GPT-2 ปกติจะไม่มี unknown token แบบนี้ เพราะว่า ถ้าเราใช้ byte-level BPE เราจะไม่มีทางได้ตัวอักษรที่ unknown อย่างไรก็ตามในตัวอย่างของเรา เราไม่ได้ใช้ทุกๆ byte เพื่อสร้าง vocabulary ตั้งต้น | |
| อย่างไรก็ตาม หัวข้อนี้นั้นค่อนข้างลึก เราจึงจะไม่ขอพูดถึงรายละเอียดไปมากกว่านี้</p>`,xn,Hs,ra="นี่ก็คือ อัลกอริทึม BPE ในบทต่อไป เราจะมาดู WordPiece กัน",Cn,Xs,mn,Ws,gn;return I=new In({props:{title:"Byte-Pair Encoding tokenization",local:"byte-pair-encoding-tokenization",headingTag:"h1"}}),b=new ga({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/section5.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter6/section5.ipynb"}]}}),q=new ma({props:{id:"HEikzVL-lZU"}}),f=new In({props:{title:"อัลกอริทึมที่ใช้ในการเทรน",local:"อลกอรทมทใชในการเทรน",headingTag:"h2"}}),Q=new u({props:{code:"JTIyaHVnJTIyJTJDJTIwJTIycHVnJTIyJTJDJTIwJTIycHVuJTIyJTJDJTIwJTIyYnVuJTIyJTJDJTIwJTIyaHVncyUyMg==",highlighted:'<span class="hljs-string">"hug"</span>, <span class="hljs-string">"pug"</span>, <span class="hljs-string">"pun"</span>, <span class="hljs-string">"bun"</span>, <span class="hljs-string">"hugs"</span>',wrap:!1}}),V=new u({props:{code:"KCUyMmh1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwdWclMjIlMkMlMjA1KSUyQyUyMCglMjJwdW4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYnVuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHVncyUyMiUyQyUyMDUp",highlighted:'(<span class="hljs-string">"hug"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">10</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"pug"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"pun"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">12</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"bun"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">4</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"hugs"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)',wrap:!1}}),v=new u({props:{code:"KCUyMmglMjIlMjAlMjJ1JTIyJTIwJTIyZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIydSUyMiUyMCUyMmclMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIydSUyMiUyMCUyMm4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMnUlMjIlMjAlMjJuJTIyJTJDJTIwNCklMkMlMjAoJTIyaCUyMiUyMCUyMnUlMjIlMjAlMjJnJTIyJTIwJTIycyUyMiUyQyUyMDUp",highlighted:'(<span class="hljs-string">"h"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"g"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">10</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"p"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"g"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"p"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"n"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">12</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"b"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"n"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">4</span>)<span class="hljs-punctuation">,</span> (<span class="hljs-string">"h"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"g"</span> <span class="hljs-string">"s"</span><span class="hljs-punctuation">,</span> <span class="hljs-number">5</span>)',wrap:!1}}),N=new u({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJnJTIyJTJDJTIwJTIyaCUyMiUyQyUyMCUyMm4lMjIlMkMlMjAlMjJwJTIyJTJDJTIwJTIycyUyMiUyQyUyMCUyMnUlMjIlMkMlMjAlMjJ1ZyUyMiU1RCUwQUNvcnB1cyUzQSUyMCglMjJoJTIyJTIwJTIydWclMjIlMkMlMjAxMCklMkMlMjAoJTIycCUyMiUyMCUyMnVnJTIyJTJDJTIwNSklMkMlMjAoJTIycCUyMiUyMCUyMnUlMjIlMjAlMjJuJTIyJTJDJTIwMTIpJTJDJTIwKCUyMmIlMjIlMjAlMjJ1JTIyJTIwJTIybiUyMiUyQyUyMDQpJTJDJTIwKCUyMmglMjIlMjAlMjJ1ZyUyMiUyMCUyMnMlMjIlMkMlMjA1KQ==",highlighted:`<span class="hljs-symbol">Vocabulary:</span> [<span class="hljs-string">"b"</span>, <span class="hljs-string">"g"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"n"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"s"</span>, <span class="hljs-string">"u"</span>, <span class="hljs-string">"ug"</span>] | |
| <span class="hljs-symbol">Corpus:</span> (<span class="hljs-string">"h"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"n"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"u"</span> <span class="hljs-string">"n"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"h"</span> <span class="hljs-string">"ug"</span> <span class="hljs-string">"s"</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),H=new u({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJnJTIyJTJDJTIwJTIyaCUyMiUyQyUyMCUyMm4lMjIlMkMlMjAlMjJwJTIyJTJDJTIwJTIycyUyMiUyQyUyMCUyMnUlMjIlMkMlMjAlMjJ1ZyUyMiUyQyUyMCUyMnVuJTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmglMjIlMjAlMjJ1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIydWclMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIydW4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMnVuJTIyJTJDJTIwNCklMkMlMjAoJTIyaCUyMiUyMCUyMnVnJTIyJTIwJTIycyUyMiUyQyUyMDUp",highlighted:`<span class="hljs-symbol">Vocabulary:</span> [<span class="hljs-string">"b"</span>, <span class="hljs-string">"g"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"n"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"s"</span>, <span class="hljs-string">"u"</span>, <span class="hljs-string">"ug"</span>, <span class="hljs-string">"un"</span>] | |
| <span class="hljs-symbol">Corpus:</span> (<span class="hljs-string">"h"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"un"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"un"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"h"</span> <span class="hljs-string">"ug"</span> <span class="hljs-string">"s"</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),D=new u({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJnJTIyJTJDJTIwJTIyaCUyMiUyQyUyMCUyMm4lMjIlMkMlMjAlMjJwJTIyJTJDJTIwJTIycyUyMiUyQyUyMCUyMnUlMjIlMkMlMjAlMjJ1ZyUyMiUyQyUyMCUyMnVuJTIyJTJDJTIwJTIyaHVnJTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmh1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIydWclMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIydW4lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMnVuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHVnJTIyJTIwJTIycyUyMiUyQyUyMDUp",highlighted:`<span class="hljs-symbol">Vocabulary:</span> [<span class="hljs-string">"b"</span>, <span class="hljs-string">"g"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"n"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"s"</span>, <span class="hljs-string">"u"</span>, <span class="hljs-string">"ug"</span>, <span class="hljs-string">"un"</span>, <span class="hljs-string">"hug"</span>] | |
| <span class="hljs-symbol">Corpus:</span> (<span class="hljs-string">"hug"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"ug"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"un"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"un"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"hug"</span> <span class="hljs-string">"s"</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),R=new In({props:{title:"Tokenization algorithm",local:"tokenization-algorithm",headingTag:"h2"}}),F=new u({props:{code:"KCUyMnUlMjIlMkMlMjAlMjJnJTIyKSUyMC0lM0UlMjAlMjJ1ZyUyMiUwQSglMjJ1JTIyJTJDJTIwJTIybiUyMiklMjAtJTNFJTIwJTIydW4lMjIlMEEoJTIyaCUyMiUyQyUyMCUyMnVnJTIyKSUyMC0lM0UlMjAlMjJodWclMjI=",highlighted:`<span class="hljs-function"><span class="hljs-params">(<span class="hljs-string">"u"</span>, <span class="hljs-string">"g"</span>)</span> -></span> <span class="hljs-string">"ug"</span> | |
| <span class="hljs-function"><span class="hljs-params">(<span class="hljs-string">"u"</span>, <span class="hljs-string">"n"</span>)</span> -></span> <span class="hljs-string">"un"</span> | |
| <span class="hljs-function"><span class="hljs-params">(<span class="hljs-string">"h"</span>, <span class="hljs-string">"ug"</span>)</span> -></span> <span class="hljs-string">"hug"</span>`,wrap:!1}}),O=new In({props:{title:"การสร้าง BPE (Implementing BPE)",local:"การสราง-bpe-implementing-bpe",headingTag:"h2"}}),ns=new u({props:{code:"Y29ycHVzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGlzJTIwdGhlJTIwSHVnZ2luZyUyMEZhY2UlMjBjb3Vyc2UuJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGNoYXB0ZXIlMjBpcyUyMGFib3V0JTIwdG9rZW5pemF0aW9uLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMlRoaXMlMjBzZWN0aW9uJTIwc2hvd3MlMjBzZXZlcmFsJTIwdG9rZW5pemVyJTIwYWxnb3JpdGhtcy4lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJIb3BlZnVsbHklMkMlMjB5b3UlMjB3aWxsJTIwYmUlMjBhYmxlJTIwdG8lMjB1bmRlcnN0YW5kJTIwaG93JTIwdGhleSUyMGFyZSUyMHRyYWluZWQlMjBhbmQlMjBnZW5lcmF0ZSUyMHRva2Vucy4lMjIlMkMlMEElNUQ=",highlighted:`corpus = [ | |
| <span class="hljs-string">"This is the Hugging Face course."</span>, | |
| <span class="hljs-string">"This chapter is about tokenization."</span>, | |
| <span class="hljs-string">"This section shows several tokenizer algorithms."</span>, | |
| <span class="hljs-string">"Hopefully, you will be able to understand how they are trained and generate tokens."</span>, | |
| ]`,wrap:!1}}),ts=new u({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJncHQyJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"gpt2"</span>)`,wrap:!1}}),es=new u({props:{code:"ZnJvbSUyMGNvbGxlY3Rpb25zJTIwaW1wb3J0JTIwZGVmYXVsdGRpY3QlMEElMEF3b3JkX2ZyZXFzJTIwJTNEJTIwZGVmYXVsdGRpY3QoaW50KSUwQSUwQWZvciUyMHRleHQlMjBpbiUyMGNvcnB1cyUzQSUwQSUyMCUyMCUyMCUyMHdvcmRzX3dpdGhfb2Zmc2V0cyUyMCUzRCUyMHRva2VuaXplci5iYWNrZW5kX3Rva2VuaXplci5wcmVfdG9rZW5pemVyLnByZV90b2tlbml6ZV9zdHIodGV4dCklMEElMjAlMjAlMjAlMjBuZXdfd29yZHMlMjAlM0QlMjAlNUJ3b3JkJTIwZm9yJTIwd29yZCUyQyUyMG9mZnNldCUyMGluJTIwd29yZHNfd2l0aF9vZmZzZXRzJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwd29yZCUyMGluJTIwbmV3X3dvcmRzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd29yZF9mcmVxcyU1QndvcmQlNUQlMjAlMkIlM0QlMjAxJTBBJTBBcHJpbnQod29yZF9mcmVxcyk=",highlighted:`<span class="hljs-keyword">from</span> collections <span class="hljs-keyword">import</span> defaultdict | |
| word_freqs = defaultdict(<span class="hljs-built_in">int</span>) | |
| <span class="hljs-keyword">for</span> text <span class="hljs-keyword">in</span> corpus: | |
| words_with_offsets = tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(text) | |
| new_words = [word <span class="hljs-keyword">for</span> word, offset <span class="hljs-keyword">in</span> words_with_offsets] | |
| <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> new_words: | |
| word_freqs[word] += <span class="hljs-number">1</span> | |
| <span class="hljs-built_in">print</span>(word_freqs)`,wrap:!1}}),Ms=new u({props:{code:"ZGVmYXVsdGRpY3QoaW50JTJDJTIwJTdCJ1RoaXMnJTNBJTIwMyUyQyUyMCclQzQlQTBpcyclM0ElMjAyJTJDJTIwJyVDNCVBMHRoZSclM0ElMjAxJTJDJTIwJyVDNCVBMEh1Z2dpbmcnJTNBJTIwMSUyQyUyMCclQzQlQTBGYWNlJyUzQSUyMDElMkMlMjAnJUM0JUEwQ291cnNlJyUzQSUyMDElMkMlMjAnLiclM0ElMjA0JTJDJTIwJyVDNCVBMGNoYXB0ZXInJTNBJTIwMSUyQyUwQSUyMCUyMCUyMCUyMCclQzQlQTBhYm91dCclM0ElMjAxJTJDJTIwJyVDNCVBMHRva2VuaXphdGlvbiclM0ElMjAxJTJDJTIwJyVDNCVBMHNlY3Rpb24nJTNBJTIwMSUyQyUyMCclQzQlQTBzaG93cyclM0ElMjAxJTJDJTIwJyVDNCVBMHNldmVyYWwnJTNBJTIwMSUyQyUyMCclQzQlQTB0b2tlbml6ZXInJTNBJTIwMSUyQyUyMCclQzQlQTBhbGdvcml0aG1zJyUzQSUyMDElMkMlMEElMjAlMjAlMjAlMjAnSG9wZWZ1bGx5JyUzQSUyMDElMkMlMjAnJTJDJyUzQSUyMDElMkMlMjAnJUM0JUEweW91JyUzQSUyMDElMkMlMjAnJUM0JUEwd2lsbCclM0ElMjAxJTJDJTIwJyVDNCVBMGJlJyUzQSUyMDElMkMlMjAnJUM0JUEwYWJsZSclM0ElMjAxJTJDJTIwJyVDNCVBMHRvJyUzQSUyMDElMkMlMjAnJUM0JUEwdW5kZXJzdGFuZCclM0ElMjAxJTJDJTIwJyVDNCVBMGhvdyclM0ElMjAxJTJDJTBBJTIwJTIwJTIwJTIwJyVDNCVBMHRoZXknJTNBJTIwMSUyQyUyMCclQzQlQTBhcmUnJTNBJTIwMSUyQyUyMCclQzQlQTB0cmFpbmVkJyUzQSUyMDElMkMlMjAnJUM0JUEwYW5kJyUzQSUyMDElMkMlMjAnJUM0JUEwZ2VuZXJhdGUnJTNBJTIwMSUyQyUyMCclQzQlQTB0b2tlbnMnJTNBJTIwMSU3RCk=",highlighted:`defaultdict(<span class="hljs-built_in">int</span>, {<span class="hljs-string">'This'</span>: <span class="hljs-number">3</span>, <span class="hljs-string">'Ġis'</span>: <span class="hljs-number">2</span>, <span class="hljs-string">'Ġthe'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'ĠHugging'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'ĠFace'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'ĠCourse'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'.'</span>: <span class="hljs-number">4</span>, <span class="hljs-string">'Ġchapter'</span>: <span class="hljs-number">1</span>, | |
| <span class="hljs-string">'Ġabout'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġtokenization'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġsection'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġshows'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġseveral'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġtokenizer'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġalgorithms'</span>: <span class="hljs-number">1</span>, | |
| <span class="hljs-string">'Hopefully'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">','</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġyou'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġwill'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġbe'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġable'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġto'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġunderstand'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġhow'</span>: <span class="hljs-number">1</span>, | |
| <span class="hljs-string">'Ġthey'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġare'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġtrained'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġand'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġgenerate'</span>: <span class="hljs-number">1</span>, <span class="hljs-string">'Ġtokens'</span>: <span class="hljs-number">1</span>})`,wrap:!1}}),is=new u({props:{code:"YWxwaGFiZXQlMjAlM0QlMjAlNUIlNUQlMEElMEFmb3IlMjB3b3JkJTIwaW4lMjB3b3JkX2ZyZXFzLmtleXMoKSUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGxldHRlciUyMGluJTIwd29yZCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGV0dGVyJTIwbm90JTIwaW4lMjBhbHBoYWJldCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGFscGhhYmV0LmFwcGVuZChsZXR0ZXIpJTBBYWxwaGFiZXQuc29ydCgpJTBBJTBBcHJpbnQoYWxwaGFiZXQp",highlighted:`alphabet = [] | |
| <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs.keys(): | |
| <span class="hljs-keyword">for</span> letter <span class="hljs-keyword">in</span> word: | |
| <span class="hljs-keyword">if</span> letter <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> alphabet: | |
| alphabet.append(letter) | |
| alphabet.sort() | |
| <span class="hljs-built_in">print</span>(alphabet)`,wrap:!1}}),js=new u({props:{code:"JTVCJTIwJyUyQyclMkMlMjAnLiclMkMlMjAnQyclMkMlMjAnRiclMkMlMjAnSCclMkMlMjAnVCclMkMlMjAnYSclMkMlMjAnYiclMkMlMjAnYyclMkMlMjAnZCclMkMlMjAnZSclMkMlMjAnZiclMkMlMjAnZyclMkMlMjAnaCclMkMlMjAnaSclMkMlMjAnayclMkMlMjAnbCclMkMlMjAnbSclMkMlMjAnbiclMkMlMjAnbyclMkMlMjAncCclMkMlMjAnciclMkMlMjAncyclMkMlMEElMjAlMjAndCclMkMlMjAndSclMkMlMjAndiclMkMlMjAndyclMkMlMjAneSclMkMlMjAneiclMkMlMjAnJUM0JUEwJyU1RA==",highlighted:`[ <span class="hljs-string">','</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'C'</span>, <span class="hljs-string">'F'</span>, <span class="hljs-string">'H'</span>, <span class="hljs-string">'T'</span>, <span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>, <span class="hljs-string">'d'</span>, <span class="hljs-string">'e'</span>, <span class="hljs-string">'f'</span>, <span class="hljs-string">'g'</span>, <span class="hljs-string">'h'</span>, <span class="hljs-string">'i'</span>, <span class="hljs-string">'k'</span>, <span class="hljs-string">'l'</span>, <span class="hljs-string">'m'</span>, <span class="hljs-string">'n'</span>, <span class="hljs-string">'o'</span>, <span class="hljs-string">'p'</span>, <span class="hljs-string">'r'</span>, <span class="hljs-string">'s'</span>, | |
| <span class="hljs-string">'t'</span>, <span class="hljs-string">'u'</span>, <span class="hljs-string">'v'</span>, <span class="hljs-string">'w'</span>, <span class="hljs-string">'y'</span>, <span class="hljs-string">'z'</span>, <span class="hljs-string">'Ġ'</span>]`,wrap:!1}}),cs=new u({props:{code:"dm9jYWIlMjAlM0QlMjAlNUIlMjIlM0MlN0NlbmRvZnRleHQlN0MlM0UlMjIlNUQlMjAlMkIlMjBhbHBoYWJldC5jb3B5KCk=",highlighted:'vocab = [<span class="hljs-string">"<|endoftext|>"</span>] + alphabet.copy()',wrap:!1}}),Us=new u({props:{code:"c3BsaXRzJTIwJTNEJTIwJTdCd29yZCUzQSUyMCU1QmMlMjBmb3IlMjBjJTIwaW4lMjB3b3JkJTVEJTIwZm9yJTIwd29yZCUyMGluJTIwd29yZF9mcmVxcy5rZXlzKCklN0Q=",highlighted:'splits = {word: [c <span class="hljs-keyword">for</span> c <span class="hljs-keyword">in</span> word] <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs.keys()}',wrap:!1}}),os=new u({props:{code:"ZGVmJTIwY29tcHV0ZV9wYWlyX2ZyZXFzKHNwbGl0cyklM0ElMEElMjAlMjAlMjAlMjBwYWlyX2ZyZXFzJTIwJTNEJTIwZGVmYXVsdGRpY3QoaW50KSUwQSUyMCUyMCUyMCUyMGZvciUyMHdvcmQlMkMlMjBmcmVxJTIwaW4lMjB3b3JkX2ZyZXFzLml0ZW1zKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzcGxpdCUyMCUzRCUyMHNwbGl0cyU1QndvcmQlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGxlbihzcGxpdCklMjAlM0QlM0QlMjAxJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4oc3BsaXQpJTIwLSUyMDEpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcGFpciUyMCUzRCUyMChzcGxpdCU1QmklNUQlMkMlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhaXJfZnJlcXMlNUJwYWlyJTVEJTIwJTJCJTNEJTIwZnJlcSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHBhaXJfZnJlcXM=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_pair_freqs</span>(<span class="hljs-params">splits</span>): | |
| pair_freqs = defaultdict(<span class="hljs-built_in">int</span>) | |
| <span class="hljs-keyword">for</span> word, freq <span class="hljs-keyword">in</span> word_freqs.items(): | |
| split = splits[word] | |
| <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(split) == <span class="hljs-number">1</span>: | |
| <span class="hljs-keyword">continue</span> | |
| <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>(split) - <span class="hljs-number">1</span>): | |
| pair = (split[i], split[i + <span class="hljs-number">1</span>]) | |
| pair_freqs[pair] += freq | |
| <span class="hljs-keyword">return</span> pair_freqs`,wrap:!1}}),hs=new u({props:{code:"cGFpcl9mcmVxcyUyMCUzRCUyMGNvbXB1dGVfcGFpcl9mcmVxcyhzcGxpdHMpJTBBJTBBZm9yJTIwaSUyQyUyMGtleSUyMGluJTIwZW51bWVyYXRlKHBhaXJfZnJlcXMua2V5cygpKSUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JrZXklN0QlM0ElMjAlN0JwYWlyX2ZyZXFzJTVCa2V5JTVEJTdEJTIyKSUwQSUyMCUyMCUyMCUyMGlmJTIwaSUyMCUzRSUzRCUyMDUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBicmVhaw==",highlighted:`pair_freqs = compute_pair_freqs(splits) | |
| <span class="hljs-keyword">for</span> i, key <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(pair_freqs.keys()): | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"<span class="hljs-subst">{key}</span>: <span class="hljs-subst">{pair_freqs[key]}</span>"</span>) | |
| <span class="hljs-keyword">if</span> i >= <span class="hljs-number">5</span>: | |
| <span class="hljs-keyword">break</span>`,wrap:!1}}),ws=new u({props:{code:"KCdUJyUyQyUyMCdoJyklM0ElMjAzJTBBKCdoJyUyQyUyMCdpJyklM0ElMjAzJTBBKCdpJyUyQyUyMCdzJyklM0ElMjA1JTBBKCclQzQlQTAnJTJDJTIwJ2knKSUzQSUyMDIlMEEoJyVDNCVBMCclMkMlMjAndCcpJTNBJTIwNyUwQSgndCclMkMlMjAnaCcpJTNBJTIwMw==",highlighted:`(<span class="hljs-string">'T'</span>, <span class="hljs-string">'h'</span>): <span class="hljs-number">3</span> | |
| (<span class="hljs-string">'h'</span>, <span class="hljs-string">'i'</span>): <span class="hljs-number">3</span> | |
| (<span class="hljs-string">'i'</span>, <span class="hljs-string">'s'</span>): <span class="hljs-number">5</span> | |
| (<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'i'</span>): <span class="hljs-number">2</span> | |
| (<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'t'</span>): <span class="hljs-number">7</span> | |
| (<span class="hljs-string">'t'</span>, <span class="hljs-string">'h'</span>): <span class="hljs-number">3</span>`,wrap:!1}}),Cs=new u({props:{code:"YmVzdF9wYWlyJTIwJTNEJTIwJTIyJTIyJTBBbWF4X2ZyZXElMjAlM0QlMjBOb25lJTBBJTBBZm9yJTIwcGFpciUyQyUyMGZyZXElMjBpbiUyMHBhaXJfZnJlcXMuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwbWF4X2ZyZXElMjBpcyUyME5vbmUlMjBvciUyMG1heF9mcmVxJTIwJTNDJTIwZnJlcSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlc3RfcGFpciUyMCUzRCUyMHBhaXIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfZnJlcSUyMCUzRCUyMGZyZXElMEElMEFwcmludChiZXN0X3BhaXIlMkMlMjBtYXhfZnJlcSk=",highlighted:`best_pair = <span class="hljs-string">""</span> | |
| max_freq = <span class="hljs-literal">None</span> | |
| <span class="hljs-keyword">for</span> pair, freq <span class="hljs-keyword">in</span> pair_freqs.items(): | |
| <span class="hljs-keyword">if</span> max_freq <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> max_freq < freq: | |
| best_pair = pair | |
| max_freq = freq | |
| <span class="hljs-built_in">print</span>(best_pair, max_freq)`,wrap:!1}}),ms=new u({props:{code:"KCclQzQlQTAnJTJDJTIwJ3QnKSUyMDc=",highlighted:'(<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'t'</span>) <span class="hljs-number">7</span>',wrap:!1}}),Is=new u({props:{code:"bWVyZ2VzJTIwJTNEJTIwJTdCKCUyMiVDNCVBMCUyMiUyQyUyMCUyMnQlMjIpJTNBJTIwJTIyJUM0JUEwdCUyMiU3RCUwQXZvY2FiLmFwcGVuZCglMjIlQzQlQTB0JTIyKQ==",highlighted:`merges = {(<span class="hljs-string">"Ġ"</span>, <span class="hljs-string">"t"</span>): <span class="hljs-string">"Ġt"</span>} | |
| vocab.append(<span class="hljs-string">"Ġt"</span>)`,wrap:!1}}),ks=new u({props:{code:"ZGVmJTIwbWVyZ2VfcGFpcihhJTJDJTIwYiUyQyUyMHNwbGl0cyklM0ElMEElMjAlMjAlMjAlMjBmb3IlMjB3b3JkJTIwaW4lMjB3b3JkX2ZyZXFzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3BsaXQlMjAlM0QlMjBzcGxpdHMlNUJ3b3JkJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsZW4oc3BsaXQpJTIwJTNEJTNEJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRpbnVlJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaSUyMCUzRCUyMDAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aGlsZSUyMGklMjAlM0MlMjBsZW4oc3BsaXQpJTIwLSUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHNwbGl0JTVCaSU1RCUyMCUzRCUzRCUyMGElMjBhbmQlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEJTIwJTNEJTNEJTIwYiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNwbGl0JTIwJTNEJTIwc3BsaXQlNUIlM0FpJTVEJTIwJTJCJTIwJTVCYSUyMCUyQiUyMGIlNUQlMjAlMkIlMjBzcGxpdCU1QmklMjAlMkIlMjAyJTIwJTNBJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGklMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3BsaXRzJTVCd29yZCU1RCUyMCUzRCUyMHNwbGl0JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwc3BsaXRz",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">merge_pair</span>(<span class="hljs-params">a, b, splits</span>): | |
| <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs: | |
| split = splits[word] | |
| <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(split) == <span class="hljs-number">1</span>: | |
| <span class="hljs-keyword">continue</span> | |
| i = <span class="hljs-number">0</span> | |
| <span class="hljs-keyword">while</span> i < <span class="hljs-built_in">len</span>(split) - <span class="hljs-number">1</span>: | |
| <span class="hljs-keyword">if</span> split[i] == a <span class="hljs-keyword">and</span> split[i + <span class="hljs-number">1</span>] == b: | |
| split = split[:i] + [a + b] + split[i + <span class="hljs-number">2</span> :] | |
| <span class="hljs-keyword">else</span>: | |
| i += <span class="hljs-number">1</span> | |
| splits[word] = split | |
| <span class="hljs-keyword">return</span> splits`,wrap:!1}}),fs=new u({props:{code:"c3BsaXRzJTIwJTNEJTIwbWVyZ2VfcGFpciglMjIlQzQlQTAlMjIlMkMlMjAlMjJ0JTIyJTJDJTIwc3BsaXRzKSUwQXByaW50KHNwbGl0cyU1QiUyMiVDNCVBMHRyYWluZWQlMjIlNUQp",highlighted:`splits = merge_pair(<span class="hljs-string">"Ġ"</span>, <span class="hljs-string">"t"</span>, splits) | |
| <span class="hljs-built_in">print</span>(splits[<span class="hljs-string">"Ġtrained"</span>])`,wrap:!1}}),ds=new u({props:{code:"JTVCJyVDNCVBMHQnJTJDJTIwJ3InJTJDJTIwJ2EnJTJDJTIwJ2knJTJDJTIwJ24nJTJDJTIwJ2UnJTJDJTIwJ2QnJTVE",highlighted:'[<span class="hljs-string">'Ġt'</span>, <span class="hljs-string">'r'</span>, <span class="hljs-string">'a'</span>, <span class="hljs-string">'i'</span>, <span class="hljs-string">'n'</span>, <span class="hljs-string">'e'</span>, <span class="hljs-string">'d'</span>]',wrap:!1}}),As=new u({props:{code:"dm9jYWJfc2l6ZSUyMCUzRCUyMDUwJTBBJTBBd2hpbGUlMjBsZW4odm9jYWIpJTIwJTNDJTIwdm9jYWJfc2l6ZSUzQSUwQSUyMCUyMCUyMCUyMHBhaXJfZnJlcXMlMjAlM0QlMjBjb21wdXRlX3BhaXJfZnJlcXMoc3BsaXRzKSUwQSUyMCUyMCUyMCUyMGJlc3RfcGFpciUyMCUzRCUyMCUyMiUyMiUwQSUyMCUyMCUyMCUyMG1heF9mcmVxJTIwJTNEJTIwTm9uZSUwQSUyMCUyMCUyMCUyMGZvciUyMHBhaXIlMkMlMjBmcmVxJTIwaW4lMjBwYWlyX2ZyZXFzLml0ZW1zKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMG1heF9mcmVxJTIwaXMlMjBOb25lJTIwb3IlMjBtYXhfZnJlcSUyMCUzQyUyMGZyZXElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiZXN0X3BhaXIlMjAlM0QlMjBwYWlyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWF4X2ZyZXElMjAlM0QlMjBmcmVxJTBBJTIwJTIwJTIwJTIwc3BsaXRzJTIwJTNEJTIwbWVyZ2VfcGFpcigqYmVzdF9wYWlyJTJDJTIwc3BsaXRzKSUwQSUyMCUyMCUyMCUyMG1lcmdlcyU1QmJlc3RfcGFpciU1RCUyMCUzRCUyMGJlc3RfcGFpciU1QjAlNUQlMjAlMkIlMjBiZXN0X3BhaXIlNUIxJTVEJTBBJTIwJTIwJTIwJTIwdm9jYWIuYXBwZW5kKGJlc3RfcGFpciU1QjAlNUQlMjAlMkIlMjBiZXN0X3BhaXIlNUIxJTVEKQ==",highlighted:`vocab_size = <span class="hljs-number">50</span> | |
| <span class="hljs-keyword">while</span> <span class="hljs-built_in">len</span>(vocab) < vocab_size: | |
| pair_freqs = compute_pair_freqs(splits) | |
| best_pair = <span class="hljs-string">""</span> | |
| max_freq = <span class="hljs-literal">None</span> | |
| <span class="hljs-keyword">for</span> pair, freq <span class="hljs-keyword">in</span> pair_freqs.items(): | |
| <span class="hljs-keyword">if</span> max_freq <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> max_freq < freq: | |
| best_pair = pair | |
| max_freq = freq | |
| splits = merge_pair(*best_pair, splits) | |
| merges[best_pair] = best_pair[<span class="hljs-number">0</span>] + best_pair[<span class="hljs-number">1</span>] | |
| vocab.append(best_pair[<span class="hljs-number">0</span>] + best_pair[<span class="hljs-number">1</span>])`,wrap:!1}}),Bs=new u({props:{code:"cHJpbnQobWVyZ2VzKQ==",highlighted:'<span class="hljs-built_in">print</span>(merges)',wrap:!1}}),Es=new u({props:{code:"JTdCKCclQzQlQTAnJTJDJTIwJ3QnKSUzQSUyMCclQzQlQTB0JyUyQyUyMCgnaSclMkMlMjAncycpJTNBJTIwJ2lzJyUyQyUyMCgnZSclMkMlMjAncicpJTNBJTIwJ2VyJyUyQyUyMCgnJUM0JUEwJyUyQyUyMCdhJyklM0ElMjAnJUM0JUEwYSclMkMlMjAoJyVDNCVBMHQnJTJDJTIwJ28nKSUzQSUyMCclQzQlQTB0byclMkMlMjAoJ2UnJTJDJTIwJ24nKSUzQSUyMCdlbiclMkMlMEElMjAoJ1QnJTJDJTIwJ2gnKSUzQSUyMCdUaCclMkMlMjAoJ1RoJyUyQyUyMCdpcycpJTNBJTIwJ1RoaXMnJTJDJTIwKCdvJyUyQyUyMCd1JyklM0ElMjAnb3UnJTJDJTIwKCdzJyUyQyUyMCdlJyklM0ElMjAnc2UnJTJDJTIwKCclQzQlQTB0byclMkMlMjAnaycpJTNBJTIwJyVDNCVBMHRvayclMkMlMEElMjAoJyVDNCVBMHRvayclMkMlMjAnZW4nKSUzQSUyMCclQzQlQTB0b2tlbiclMkMlMjAoJ24nJTJDJTIwJ2QnKSUzQSUyMCduZCclMkMlMjAoJyVDNCVBMCclMkMlMjAnaXMnKSUzQSUyMCclQzQlQTBpcyclMkMlMjAoJyVDNCVBMHQnJTJDJTIwJ2gnKSUzQSUyMCclQzQlQTB0aCclMkMlMjAoJyVDNCVBMHRoJyUyQyUyMCdlJyklM0ElMjAnJUM0JUEwdGhlJyUyQyUwQSUyMCgnaSclMkMlMjAnbicpJTNBJTIwJ2luJyUyQyUyMCgnJUM0JUEwYSclMkMlMjAnYicpJTNBJTIwJyVDNCVBMGFiJyUyQyUyMCgnJUM0JUEwdG9rZW4nJTJDJTIwJ2knKSUzQSUyMCclQzQlQTB0b2tlbmknJTdE",highlighted:`{(<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'t'</span>): <span class="hljs-string">'Ġt'</span>, (<span class="hljs-string">'i'</span>, <span class="hljs-string">'s'</span>): <span class="hljs-string">'is'</span>, (<span class="hljs-string">'e'</span>, <span class="hljs-string">'r'</span>): <span class="hljs-string">'er'</span>, (<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'a'</span>): <span class="hljs-string">'Ġa'</span>, (<span class="hljs-string">'Ġt'</span>, <span class="hljs-string">'o'</span>): <span class="hljs-string">'Ġto'</span>, (<span class="hljs-string">'e'</span>, <span class="hljs-string">'n'</span>): <span class="hljs-string">'en'</span>, | |
| (<span class="hljs-string">'T'</span>, <span class="hljs-string">'h'</span>): <span class="hljs-string">'Th'</span>, (<span class="hljs-string">'Th'</span>, <span class="hljs-string">'is'</span>): <span class="hljs-string">'This'</span>, (<span class="hljs-string">'o'</span>, <span class="hljs-string">'u'</span>): <span class="hljs-string">'ou'</span>, (<span class="hljs-string">'s'</span>, <span class="hljs-string">'e'</span>): <span class="hljs-string">'se'</span>, (<span class="hljs-string">'Ġto'</span>, <span class="hljs-string">'k'</span>): <span class="hljs-string">'Ġtok'</span>, | |
| (<span class="hljs-string">'Ġtok'</span>, <span class="hljs-string">'en'</span>): <span class="hljs-string">'Ġtoken'</span>, (<span class="hljs-string">'n'</span>, <span class="hljs-string">'d'</span>): <span class="hljs-string">'nd'</span>, (<span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'is'</span>): <span class="hljs-string">'Ġis'</span>, (<span class="hljs-string">'Ġt'</span>, <span class="hljs-string">'h'</span>): <span class="hljs-string">'Ġth'</span>, (<span class="hljs-string">'Ġth'</span>, <span class="hljs-string">'e'</span>): <span class="hljs-string">'Ġthe'</span>, | |
| (<span class="hljs-string">'i'</span>, <span class="hljs-string">'n'</span>): <span class="hljs-string">'in'</span>, (<span class="hljs-string">'Ġa'</span>, <span class="hljs-string">'b'</span>): <span class="hljs-string">'Ġab'</span>, (<span class="hljs-string">'Ġtoken'</span>, <span class="hljs-string">'i'</span>): <span class="hljs-string">'Ġtokeni'</span>}`,wrap:!1}}),zs=new u({props:{code:"cHJpbnQodm9jYWIp",highlighted:'<span class="hljs-built_in">print</span>(vocab)',wrap:!1}}),Zs=new u({props:{code:"JTVCJyUzQyU3Q2VuZG9mdGV4dCU3QyUzRSclMkMlMjAnJTJDJyUyQyUyMCcuJyUyQyUyMCdDJyUyQyUyMCdGJyUyQyUyMCdIJyUyQyUyMCdUJyUyQyUyMCdhJyUyQyUyMCdiJyUyQyUyMCdjJyUyQyUyMCdkJyUyQyUyMCdlJyUyQyUyMCdmJyUyQyUyMCdnJyUyQyUyMCdoJyUyQyUyMCdpJyUyQyUyMCdrJyUyQyUyMCdsJyUyQyUyMCdtJyUyQyUyMCduJyUyQyUyMCdvJyUyQyUwQSUyMCdwJyUyQyUyMCdyJyUyQyUyMCdzJyUyQyUyMCd0JyUyQyUyMCd1JyUyQyUyMCd2JyUyQyUyMCd3JyUyQyUyMCd5JyUyQyUyMCd6JyUyQyUyMCclQzQlQTAnJTJDJTIwJyVDNCVBMHQnJTJDJTIwJ2lzJyUyQyUyMCdlciclMkMlMjAnJUM0JUEwYSclMkMlMjAnJUM0JUEwdG8nJTJDJTIwJ2VuJyUyQyUyMCdUaCclMkMlMjAnVGhpcyclMkMlMjAnb3UnJTJDJTIwJ3NlJyUyQyUwQSUyMCclQzQlQTB0b2snJTJDJTIwJyVDNCVBMHRva2VuJyUyQyUyMCduZCclMkMlMjAnJUM0JUEwaXMnJTJDJTIwJyVDNCVBMHRoJyUyQyUyMCclQzQlQTB0aGUnJTJDJTIwJ2luJyUyQyUyMCclQzQlQTBhYiclMkMlMjAnJUM0JUEwdG9rZW5pJyU1RA==",highlighted:`[<span class="hljs-string">'<|endoftext|>'</span>, <span class="hljs-string">','</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'C'</span>, <span class="hljs-string">'F'</span>, <span class="hljs-string">'H'</span>, <span class="hljs-string">'T'</span>, <span class="hljs-string">'a'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'c'</span>, <span class="hljs-string">'d'</span>, <span class="hljs-string">'e'</span>, <span class="hljs-string">'f'</span>, <span class="hljs-string">'g'</span>, <span class="hljs-string">'h'</span>, <span class="hljs-string">'i'</span>, <span class="hljs-string">'k'</span>, <span class="hljs-string">'l'</span>, <span class="hljs-string">'m'</span>, <span class="hljs-string">'n'</span>, <span class="hljs-string">'o'</span>, | |
| <span class="hljs-string">'p'</span>, <span class="hljs-string">'r'</span>, <span class="hljs-string">'s'</span>, <span class="hljs-string">'t'</span>, <span class="hljs-string">'u'</span>, <span class="hljs-string">'v'</span>, <span class="hljs-string">'w'</span>, <span class="hljs-string">'y'</span>, <span class="hljs-string">'z'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'Ġt'</span>, <span class="hljs-string">'is'</span>, <span class="hljs-string">'er'</span>, <span class="hljs-string">'Ġa'</span>, <span class="hljs-string">'Ġto'</span>, <span class="hljs-string">'en'</span>, <span class="hljs-string">'Th'</span>, <span class="hljs-string">'This'</span>, <span class="hljs-string">'ou'</span>, <span class="hljs-string">'se'</span>, | |
| <span class="hljs-string">'Ġtok'</span>, <span class="hljs-string">'Ġtoken'</span>, <span class="hljs-string">'nd'</span>, <span class="hljs-string">'Ġis'</span>, <span class="hljs-string">'Ġth'</span>, <span class="hljs-string">'Ġthe'</span>, <span class="hljs-string">'in'</span>, <span class="hljs-string">'Ġab'</span>, <span class="hljs-string">'Ġtokeni'</span>]`,wrap:!1}}),Gs=new u({props:{code:"ZGVmJTIwdG9rZW5pemUodGV4dCklM0ElMEElMjAlMjAlMjAlMjBwcmVfdG9rZW5pemVfcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyLl90b2tlbml6ZXIucHJlX3Rva2VuaXplci5wcmVfdG9rZW5pemVfc3RyKHRleHQpJTBBJTIwJTIwJTIwJTIwcHJlX3Rva2VuaXplZF90ZXh0JTIwJTNEJTIwJTVCd29yZCUyMGZvciUyMHdvcmQlMkMlMjBvZmZzZXQlMjBpbiUyMHByZV90b2tlbml6ZV9yZXN1bHQlNUQlMEElMjAlMjAlMjAlMjBzcGxpdHMlMjAlM0QlMjAlNUIlNUJsJTIwZm9yJTIwbCUyMGluJTIwd29yZCU1RCUyMGZvciUyMHdvcmQlMjBpbiUyMHByZV90b2tlbml6ZWRfdGV4dCU1RCUwQSUyMCUyMCUyMCUyMGZvciUyMHBhaXIlMkMlMjBtZXJnZSUyMGluJTIwbWVyZ2VzLml0ZW1zKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpZHglMkMlMjBzcGxpdCUyMGluJTIwZW51bWVyYXRlKHNwbGl0cyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpJTIwJTNEJTIwMCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdoaWxlJTIwaSUyMCUzQyUyMGxlbihzcGxpdCklMjAtJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwc3BsaXQlNUJpJTVEJTIwJTNEJTNEJTIwcGFpciU1QjAlNUQlMjBhbmQlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEJTIwJTNEJTNEJTIwcGFpciU1QjElNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzcGxpdCUyMCUzRCUyMHNwbGl0JTVCJTNBaSU1RCUyMCUyQiUyMCU1Qm1lcmdlJTVEJTIwJTJCJTIwc3BsaXQlNUJpJTIwJTJCJTIwMiUyMCUzQSU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVsc2UlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpJTIwJTJCJTNEJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNwbGl0cyU1QmlkeCU1RCUyMCUzRCUyMHNwbGl0JTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwc3VtKHNwbGl0cyUyQyUyMCU1QiU1RCk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize</span>(<span class="hljs-params">text</span>): | |
| pre_tokenize_result = tokenizer._tokenizer.pre_tokenizer.pre_tokenize_str(text) | |
| pre_tokenized_text = [word <span class="hljs-keyword">for</span> word, offset <span class="hljs-keyword">in</span> pre_tokenize_result] | |
| splits = [[l <span class="hljs-keyword">for</span> l <span class="hljs-keyword">in</span> word] <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> pre_tokenized_text] | |
| <span class="hljs-keyword">for</span> pair, merge <span class="hljs-keyword">in</span> merges.items(): | |
| <span class="hljs-keyword">for</span> idx, split <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(splits): | |
| i = <span class="hljs-number">0</span> | |
| <span class="hljs-keyword">while</span> i < <span class="hljs-built_in">len</span>(split) - <span class="hljs-number">1</span>: | |
| <span class="hljs-keyword">if</span> split[i] == pair[<span class="hljs-number">0</span>] <span class="hljs-keyword">and</span> split[i + <span class="hljs-number">1</span>] == pair[<span class="hljs-number">1</span>]: | |
| split = split[:i] + [merge] + split[i + <span class="hljs-number">2</span> :] | |
| <span class="hljs-keyword">else</span>: | |
| i += <span class="hljs-number">1</span> | |
| splits[idx] = split | |
| <span class="hljs-keyword">return</span> <span class="hljs-built_in">sum</span>(splits, [])`,wrap:!1}}),Ns=new u({props:{code:"dG9rZW5pemUoJTIyVGhpcyUyMGlzJTIwbm90JTIwYSUyMHRva2VuLiUyMik=",highlighted:'tokenize(<span class="hljs-string">"This is not a token."</span>)',wrap:!1}}),_s=new u({props:{code:"JTVCJ1RoaXMnJTJDJTIwJyVDNCVBMGlzJyUyQyUyMCclQzQlQTAnJTJDJTIwJ24nJTJDJTIwJ28nJTJDJTIwJ3QnJTJDJTIwJyVDNCVBMGEnJTJDJTIwJyVDNCVBMHRva2VuJyUyQyUyMCcuJyU1RA==",highlighted:'[<span class="hljs-string">'This'</span>, <span class="hljs-string">'Ġis'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'n'</span>, <span class="hljs-string">'o'</span>, <span class="hljs-string">'t'</span>, <span class="hljs-string">'Ġa'</span>, <span class="hljs-string">'Ġtoken'</span>, <span class="hljs-string">'.'</span>]',wrap:!1}}),Xs=new Ia({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter6/5.mdx"}}),{c(){o=e("meta"),Rs=t(),Ds=e("p"),Ys=t(),i(I.$$.fragment),Ks=t(),i(b.$$.fragment),Ps=t(),k=e("p"),k.textContent=kn,Fs=t(),i(q.$$.fragment),Ls=t(),T=e("blockquote"),T.innerHTML=qn,Os=t(),i(f.$$.fragment),sl=t(),d=e("p"),d.textContent=fn,ll=t(),i(Q.$$.fragment),nl=t(),A=e("p"),A.innerHTML=dn,al=t(),$=e("p"),$.textContent=Qn,tl=t(),h=e("blockquote"),h.innerHTML=An,pl=t(),B=e("p"),B.innerHTML=$n,el=t(),E=e("p"),E.textContent=Bn,Ml=t(),i(V.$$.fragment),yl=t(),z=e("p"),z.innerHTML=En,il=t(),Z=e("p"),Z.textContent=Vn,jl=t(),i(v.$$.fragment),Jl=t(),G=e("p"),G.innerHTML=zn,cl=t(),S=e("p"),S.textContent=Zn,rl=t(),i(N.$$.fragment),Ul=t(),_=e("p"),_.innerHTML=vn,ul=t(),i(H.$$.fragment),ol=t(),X=e("p"),X.innerHTML=Gn,Tl=t(),i(D.$$.fragment),hl=t(),W=e("p"),W.textContent=Sn,wl=t(),w=e("blockquote"),w.innerHTML=Nn,xl=t(),i(R.$$.fragment),Cl=t(),Y=e("p"),Y.textContent=_n,ml=t(),K=e("ol"),K.innerHTML=Hn,gl=t(),P=e("p"),P.textContent=Xn,Il=t(),i(F.$$.fragment),bl=t(),L=e("p"),L.innerHTML=Dn,kl=t(),x=e("blockquote"),x.innerHTML=Wn,ql=t(),i(O.$$.fragment),fl=t(),ss=e("p"),ss.textContent=Rn,dl=t(),ls=e("p"),ls.textContent=Yn,Ql=t(),i(ns.$$.fragment),Al=t(),as=e("p"),as.innerHTML=Kn,$l=t(),i(ts.$$.fragment),Bl=t(),ps=e("p"),ps.textContent=Pn,El=t(),i(es.$$.fragment),Vl=t(),i(Ms.$$.fragment),zl=t(),ys=e("p"),ys.textContent=Fn,Zl=t(),i(is.$$.fragment),vl=t(),i(js.$$.fragment),Gl=t(),Js=e("p"),Js.innerHTML=Ln,Sl=t(),i(cs.$$.fragment),Nl=t(),rs=e("p"),rs.textContent=On,_l=t(),i(Us.$$.fragment),Hl=t(),us=e("p"),us.textContent=sa,Xl=t(),i(os.$$.fragment),Dl=t(),Ts=e("p"),Ts.textContent=la,Wl=t(),i(hs.$$.fragment),Rl=t(),i(ws.$$.fragment),Yl=t(),xs=e("p"),xs.textContent=na,Kl=t(),i(Cs.$$.fragment),Pl=t(),i(ms.$$.fragment),Fl=t(),gs=e("p"),gs.innerHTML=aa,Ll=t(),i(Is.$$.fragment),Ol=t(),bs=e("p"),bs.innerHTML=ta,sn=t(),i(ks.$$.fragment),ln=t(),qs=e("p"),qs.textContent=pa,nn=t(),i(fs.$$.fragment),an=t(),i(ds.$$.fragment),tn=t(),Qs=e("p"),Qs.textContent=ea,pn=t(),i(As.$$.fragment),en=t(),$s=e("p"),$s.textContent=Ma,Mn=t(),i(Bs.$$.fragment),yn=t(),i(Es.$$.fragment),jn=t(),Vs=e("p"),Vs.textContent=ya,Jn=t(),i(zs.$$.fragment),cn=t(),i(Zs.$$.fragment),rn=t(),C=e("blockquote"),C.innerHTML=ia,Un=t(),vs=e("p"),vs.textContent=ja,un=t(),i(Gs.$$.fragment),on=t(),Ss=e("p"),Ss.textContent=Ja,Tn=t(),i(Ns.$$.fragment),hn=t(),i(_s.$$.fragment),wn=t(),m=e("blockquote"),m.innerHTML=ca,xn=t(),Hs=e("p"),Hs.textContent=ra,Cn=t(),i(Xs.$$.fragment),mn=t(),Ws=e("p"),this.h()},l(s){const l=xa("svelte-u9bgzb",document.head);o=M(l,"META",{name:!0,content:!0}),l.forEach(n),Rs=p(s),Ds=M(s,"P",{}),Ua(Ds).forEach(n),Ys=p(s),j(I.$$.fragment,s),Ks=p(s),j(b.$$.fragment,s),Ps=p(s),k=M(s,"P",{"data-svelte-h":!0}),y(k)!=="svelte-12o0prt"&&(k.textContent=kn),Fs=p(s),j(q.$$.fragment,s),Ls=p(s),T=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(T)!=="svelte-1bjxfe0"&&(T.innerHTML=qn),Os=p(s),j(f.$$.fragment,s),sl=p(s),d=M(s,"P",{"data-svelte-h":!0}),y(d)!=="svelte-ui9660"&&(d.textContent=fn),ll=p(s),j(Q.$$.fragment,s),nl=p(s),A=M(s,"P",{"data-svelte-h":!0}),y(A)!=="svelte-1mi54up"&&(A.innerHTML=dn),al=p(s),$=M(s,"P",{"data-svelte-h":!0}),y($)!=="svelte-568bhx"&&($.textContent=Qn),tl=p(s),h=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(h)!=="svelte-584tqo"&&(h.innerHTML=An),pl=p(s),B=M(s,"P",{"data-svelte-h":!0}),y(B)!=="svelte-19vck82"&&(B.innerHTML=$n),el=p(s),E=M(s,"P",{"data-svelte-h":!0}),y(E)!=="svelte-qclq5r"&&(E.textContent=Bn),Ml=p(s),j(V.$$.fragment,s),yl=p(s),z=M(s,"P",{"data-svelte-h":!0}),y(z)!=="svelte-1hblxvc"&&(z.innerHTML=En),il=p(s),Z=M(s,"P",{"data-svelte-h":!0}),y(Z)!=="svelte-14fxlqe"&&(Z.textContent=Vn),jl=p(s),j(v.$$.fragment,s),Jl=p(s),G=M(s,"P",{"data-svelte-h":!0}),y(G)!=="svelte-bmix0l"&&(G.innerHTML=zn),cl=p(s),S=M(s,"P",{"data-svelte-h":!0}),y(S)!=="svelte-7b8c15"&&(S.textContent=Zn),rl=p(s),j(N.$$.fragment,s),Ul=p(s),_=M(s,"P",{"data-svelte-h":!0}),y(_)!=="svelte-1bqhc5z"&&(_.innerHTML=vn),ul=p(s),j(H.$$.fragment,s),ol=p(s),X=M(s,"P",{"data-svelte-h":!0}),y(X)!=="svelte-1g4lab1"&&(X.innerHTML=Gn),Tl=p(s),j(D.$$.fragment,s),hl=p(s),W=M(s,"P",{"data-svelte-h":!0}),y(W)!=="svelte-rt06o2"&&(W.textContent=Sn),wl=p(s),w=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(w)!=="svelte-15ejpfh"&&(w.innerHTML=Nn),xl=p(s),j(R.$$.fragment,s),Cl=p(s),Y=M(s,"P",{"data-svelte-h":!0}),y(Y)!=="svelte-38g5f4"&&(Y.textContent=_n),ml=p(s),K=M(s,"OL",{"data-svelte-h":!0}),y(K)!=="svelte-1dn790a"&&(K.innerHTML=Hn),gl=p(s),P=M(s,"P",{"data-svelte-h":!0}),y(P)!=="svelte-1c2vghc"&&(P.textContent=Xn),Il=p(s),j(F.$$.fragment,s),bl=p(s),L=M(s,"P",{"data-svelte-h":!0}),y(L)!=="svelte-n933xw"&&(L.innerHTML=Dn),kl=p(s),x=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(x)!=="svelte-ikpas4"&&(x.innerHTML=Wn),ql=p(s),j(O.$$.fragment,s),fl=p(s),ss=M(s,"P",{"data-svelte-h":!0}),y(ss)!=="svelte-1e93cpt"&&(ss.textContent=Rn),dl=p(s),ls=M(s,"P",{"data-svelte-h":!0}),y(ls)!=="svelte-5w2uhv"&&(ls.textContent=Yn),Ql=p(s),j(ns.$$.fragment,s),Al=p(s),as=M(s,"P",{"data-svelte-h":!0}),y(as)!=="svelte-1p977ot"&&(as.innerHTML=Kn),$l=p(s),j(ts.$$.fragment,s),Bl=p(s),ps=M(s,"P",{"data-svelte-h":!0}),y(ps)!=="svelte-97lq7n"&&(ps.textContent=Pn),El=p(s),j(es.$$.fragment,s),Vl=p(s),j(Ms.$$.fragment,s),zl=p(s),ys=M(s,"P",{"data-svelte-h":!0}),y(ys)!=="svelte-1ki81xp"&&(ys.textContent=Fn),Zl=p(s),j(is.$$.fragment,s),vl=p(s),j(js.$$.fragment,s),Gl=p(s),Js=M(s,"P",{"data-svelte-h":!0}),y(Js)!=="svelte-1ivy2j"&&(Js.innerHTML=Ln),Sl=p(s),j(cs.$$.fragment,s),Nl=p(s),rs=M(s,"P",{"data-svelte-h":!0}),y(rs)!=="svelte-1d6a2sn"&&(rs.textContent=On),_l=p(s),j(Us.$$.fragment,s),Hl=p(s),us=M(s,"P",{"data-svelte-h":!0}),y(us)!=="svelte-1n9k9s1"&&(us.textContent=sa),Xl=p(s),j(os.$$.fragment,s),Dl=p(s),Ts=M(s,"P",{"data-svelte-h":!0}),y(Ts)!=="svelte-1jpkvry"&&(Ts.textContent=la),Wl=p(s),j(hs.$$.fragment,s),Rl=p(s),j(ws.$$.fragment,s),Yl=p(s),xs=M(s,"P",{"data-svelte-h":!0}),y(xs)!=="svelte-ytfm66"&&(xs.textContent=na),Kl=p(s),j(Cs.$$.fragment,s),Pl=p(s),j(ms.$$.fragment,s),Fl=p(s),gs=M(s,"P",{"data-svelte-h":!0}),y(gs)!=="svelte-knui6i"&&(gs.innerHTML=aa),Ll=p(s),j(Is.$$.fragment,s),Ol=p(s),bs=M(s,"P",{"data-svelte-h":!0}),y(bs)!=="svelte-1gz885v"&&(bs.innerHTML=ta),sn=p(s),j(ks.$$.fragment,s),ln=p(s),qs=M(s,"P",{"data-svelte-h":!0}),y(qs)!=="svelte-k9g317"&&(qs.textContent=pa),nn=p(s),j(fs.$$.fragment,s),an=p(s),j(ds.$$.fragment,s),tn=p(s),Qs=M(s,"P",{"data-svelte-h":!0}),y(Qs)!=="svelte-ch2nw4"&&(Qs.textContent=ea),pn=p(s),j(As.$$.fragment,s),en=p(s),$s=M(s,"P",{"data-svelte-h":!0}),y($s)!=="svelte-1047qda"&&($s.textContent=Ma),Mn=p(s),j(Bs.$$.fragment,s),yn=p(s),j(Es.$$.fragment,s),jn=p(s),Vs=M(s,"P",{"data-svelte-h":!0}),y(Vs)!=="svelte-19ymfzy"&&(Vs.textContent=ya),Jn=p(s),j(zs.$$.fragment,s),cn=p(s),j(Zs.$$.fragment,s),rn=p(s),C=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(C)!=="svelte-1pgov3q"&&(C.innerHTML=ia),Un=p(s),vs=M(s,"P",{"data-svelte-h":!0}),y(vs)!=="svelte-1g50xxw"&&(vs.textContent=ja),un=p(s),j(Gs.$$.fragment,s),on=p(s),Ss=M(s,"P",{"data-svelte-h":!0}),y(Ss)!=="svelte-1xxndsq"&&(Ss.textContent=Ja),Tn=p(s),j(Ns.$$.fragment,s),hn=p(s),j(_s.$$.fragment,s),wn=p(s),m=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(m)!=="svelte-esfp8l"&&(m.innerHTML=ca),xn=p(s),Hs=M(s,"P",{"data-svelte-h":!0}),y(Hs)!=="svelte-zewf2t"&&(Hs.textContent=ra),Cn=p(s),j(Xs.$$.fragment,s),mn=p(s),Ws=M(s,"P",{}),Ua(Ws).forEach(n),this.h()},h(){g(o,"name","hf:doc:metadata"),g(o,"content",ka),g(T,"class","tip"),g(h,"class","tip"),g(w,"class","tip"),g(x,"class","tip"),g(C,"class","tip"),g(m,"class","warning")},m(s,l){Ca(document.head,o),a(s,Rs,l),a(s,Ds,l),a(s,Ys,l),J(I,s,l),a(s,Ks,l),J(b,s,l),a(s,Ps,l),a(s,k,l),a(s,Fs,l),J(q,s,l),a(s,Ls,l),a(s,T,l),a(s,Os,l),J(f,s,l),a(s,sl,l),a(s,d,l),a(s,ll,l),J(Q,s,l),a(s,nl,l),a(s,A,l),a(s,al,l),a(s,$,l),a(s,tl,l),a(s,h,l),a(s,pl,l),a(s,B,l),a(s,el,l),a(s,E,l),a(s,Ml,l),J(V,s,l),a(s,yl,l),a(s,z,l),a(s,il,l),a(s,Z,l),a(s,jl,l),J(v,s,l),a(s,Jl,l),a(s,G,l),a(s,cl,l),a(s,S,l),a(s,rl,l),J(N,s,l),a(s,Ul,l),a(s,_,l),a(s,ul,l),J(H,s,l),a(s,ol,l),a(s,X,l),a(s,Tl,l),J(D,s,l),a(s,hl,l),a(s,W,l),a(s,wl,l),a(s,w,l),a(s,xl,l),J(R,s,l),a(s,Cl,l),a(s,Y,l),a(s,ml,l),a(s,K,l),a(s,gl,l),a(s,P,l),a(s,Il,l),J(F,s,l),a(s,bl,l),a(s,L,l),a(s,kl,l),a(s,x,l),a(s,ql,l),J(O,s,l),a(s,fl,l),a(s,ss,l),a(s,dl,l),a(s,ls,l),a(s,Ql,l),J(ns,s,l),a(s,Al,l),a(s,as,l),a(s,$l,l),J(ts,s,l),a(s,Bl,l),a(s,ps,l),a(s,El,l),J(es,s,l),a(s,Vl,l),J(Ms,s,l),a(s,zl,l),a(s,ys,l),a(s,Zl,l),J(is,s,l),a(s,vl,l),J(js,s,l),a(s,Gl,l),a(s,Js,l),a(s,Sl,l),J(cs,s,l),a(s,Nl,l),a(s,rs,l),a(s,_l,l),J(Us,s,l),a(s,Hl,l),a(s,us,l),a(s,Xl,l),J(os,s,l),a(s,Dl,l),a(s,Ts,l),a(s,Wl,l),J(hs,s,l),a(s,Rl,l),J(ws,s,l),a(s,Yl,l),a(s,xs,l),a(s,Kl,l),J(Cs,s,l),a(s,Pl,l),J(ms,s,l),a(s,Fl,l),a(s,gs,l),a(s,Ll,l),J(Is,s,l),a(s,Ol,l),a(s,bs,l),a(s,sn,l),J(ks,s,l),a(s,ln,l),a(s,qs,l),a(s,nn,l),J(fs,s,l),a(s,an,l),J(ds,s,l),a(s,tn,l),a(s,Qs,l),a(s,pn,l),J(As,s,l),a(s,en,l),a(s,$s,l),a(s,Mn,l),J(Bs,s,l),a(s,yn,l),J(Es,s,l),a(s,jn,l),a(s,Vs,l),a(s,Jn,l),J(zs,s,l),a(s,cn,l),J(Zs,s,l),a(s,rn,l),a(s,C,l),a(s,Un,l),a(s,vs,l),a(s,un,l),J(Gs,s,l),a(s,on,l),a(s,Ss,l),a(s,Tn,l),J(Ns,s,l),a(s,hn,l),J(_s,s,l),a(s,wn,l),a(s,m,l),a(s,xn,l),a(s,Hs,l),a(s,Cn,l),J(Xs,s,l),a(s,mn,l),a(s,Ws,l),gn=!0},p:oa,i(s){gn||(c(I.$$.fragment,s),c(b.$$.fragment,s),c(q.$$.fragment,s),c(f.$$.fragment,s),c(Q.$$.fragment,s),c(V.$$.fragment,s),c(v.$$.fragment,s),c(N.$$.fragment,s),c(H.$$.fragment,s),c(D.$$.fragment,s),c(R.$$.fragment,s),c(F.$$.fragment,s),c(O.$$.fragment,s),c(ns.$$.fragment,s),c(ts.$$.fragment,s),c(es.$$.fragment,s),c(Ms.$$.fragment,s),c(is.$$.fragment,s),c(js.$$.fragment,s),c(cs.$$.fragment,s),c(Us.$$.fragment,s),c(os.$$.fragment,s),c(hs.$$.fragment,s),c(ws.$$.fragment,s),c(Cs.$$.fragment,s),c(ms.$$.fragment,s),c(Is.$$.fragment,s),c(ks.$$.fragment,s),c(fs.$$.fragment,s),c(ds.$$.fragment,s),c(As.$$.fragment,s),c(Bs.$$.fragment,s),c(Es.$$.fragment,s),c(zs.$$.fragment,s),c(Zs.$$.fragment,s),c(Gs.$$.fragment,s),c(Ns.$$.fragment,s),c(_s.$$.fragment,s),c(Xs.$$.fragment,s),gn=!0)},o(s){r(I.$$.fragment,s),r(b.$$.fragment,s),r(q.$$.fragment,s),r(f.$$.fragment,s),r(Q.$$.fragment,s),r(V.$$.fragment,s),r(v.$$.fragment,s),r(N.$$.fragment,s),r(H.$$.fragment,s),r(D.$$.fragment,s),r(R.$$.fragment,s),r(F.$$.fragment,s),r(O.$$.fragment,s),r(ns.$$.fragment,s),r(ts.$$.fragment,s),r(es.$$.fragment,s),r(Ms.$$.fragment,s),r(is.$$.fragment,s),r(js.$$.fragment,s),r(cs.$$.fragment,s),r(Us.$$.fragment,s),r(os.$$.fragment,s),r(hs.$$.fragment,s),r(ws.$$.fragment,s),r(Cs.$$.fragment,s),r(ms.$$.fragment,s),r(Is.$$.fragment,s),r(ks.$$.fragment,s),r(fs.$$.fragment,s),r(ds.$$.fragment,s),r(As.$$.fragment,s),r(Bs.$$.fragment,s),r(Es.$$.fragment,s),r(zs.$$.fragment,s),r(Zs.$$.fragment,s),r(Gs.$$.fragment,s),r(Ns.$$.fragment,s),r(_s.$$.fragment,s),r(Xs.$$.fragment,s),gn=!1},d(s){s&&(n(Rs),n(Ds),n(Ys),n(Ks),n(Ps),n(k),n(Fs),n(Ls),n(T),n(Os),n(sl),n(d),n(ll),n(nl),n(A),n(al),n($),n(tl),n(h),n(pl),n(B),n(el),n(E),n(Ml),n(yl),n(z),n(il),n(Z),n(jl),n(Jl),n(G),n(cl),n(S),n(rl),n(Ul),n(_),n(ul),n(ol),n(X),n(Tl),n(hl),n(W),n(wl),n(w),n(xl),n(Cl),n(Y),n(ml),n(K),n(gl),n(P),n(Il),n(bl),n(L),n(kl),n(x),n(ql),n(fl),n(ss),n(dl),n(ls),n(Ql),n(Al),n(as),n($l),n(Bl),n(ps),n(El),n(Vl),n(zl),n(ys),n(Zl),n(vl),n(Gl),n(Js),n(Sl),n(Nl),n(rs),n(_l),n(Hl),n(us),n(Xl),n(Dl),n(Ts),n(Wl),n(Rl),n(Yl),n(xs),n(Kl),n(Pl),n(Fl),n(gs),n(Ll),n(Ol),n(bs),n(sn),n(ln),n(qs),n(nn),n(an),n(tn),n(Qs),n(pn),n(en),n($s),n(Mn),n(yn),n(jn),n(Vs),n(Jn),n(cn),n(rn),n(C),n(Un),n(vs),n(un),n(on),n(Ss),n(Tn),n(hn),n(wn),n(m),n(xn),n(Hs),n(Cn),n(mn),n(Ws)),n(o),U(I,s),U(b,s),U(q,s),U(f,s),U(Q,s),U(V,s),U(v,s),U(N,s),U(H,s),U(D,s),U(R,s),U(F,s),U(O,s),U(ns,s),U(ts,s),U(es,s),U(Ms,s),U(is,s),U(js,s),U(cs,s),U(Us,s),U(os,s),U(hs,s),U(ws,s),U(Cs,s),U(ms,s),U(Is,s),U(ks,s),U(fs,s),U(ds,s),U(As,s),U(Bs,s),U(Es,s),U(zs,s),U(Zs,s),U(Gs,s),U(Ns,s),U(_s,s),U(Xs,s)}}}const ka='{"title":"Byte-Pair Encoding tokenization","local":"byte-pair-encoding-tokenization","sections":[{"title":"อัลกอริทึมที่ใช้ในการเทรน","local":"อลกอรทมทใชในการเทรน","sections":[],"depth":2},{"title":"Tokenization algorithm","local":"tokenization-algorithm","sections":[],"depth":2},{"title":"การสร้าง BPE (Implementing BPE)","local":"การสราง-bpe-implementing-bpe","sections":[],"depth":2}],"depth":1}';function qa(bn){return Ta(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Ea extends ha{constructor(o){super(),wa(this,o,qa,ba,ua,{})}}export{Ea as component}; | |
Xet Storage Details
- Size:
- 72.6 kB
- Xet hash:
- 3c2615146ac29cd1b4d675ae3e9067414b8bee8e9b148b29ebd134836bd29c7f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.