Buckets:
| import{s as Ta,n as ha,o as wa}from"../chunks/scheduler.505acc25.js";import{S as xa,i as Ca,e,s as t,c as i,h as ma,a as M,d as n,b as p,f as oa,g as j,j as y,k as g,l as ga,m as a,n as J,t as c,o as r,p as U}from"../chunks/index.17dd9071.js";import{C as Ia,H as kn,E as ba}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.a9278744.js";import{Y as ka}from"../chunks/Youtube.793fe4bf.js";import{C as u}from"../chunks/CodeBlock.350ec16d.js";import{C as fa}from"../chunks/CourseFloatingBanner.01eb9a8d.js";function qa(fn){let o,Ys,Ws,Ks,I,Ps,b,Fs,k,Ls,f,qn="ดั้งเดิมแล้ว Byte-Pair Encoding (BPE) เป็นอัลกอริทึมที่ถูกสร้างเพื่อใช้บีบอัดข้อความให้เล็กลง (compress texts) ภายหลัง OpenAI ได้นำอัลกอริทึมนี้มาใช้ในการตัดคำ ในขั้นตอนเตรียมข้อมูลเพื่อเทรน GPT อัลกอริทึมตัวนี้ยังถูกนำมาใช้อย่างกว้างขวางกับโมเดลประเภท Transformer เช่น GPT, GPT-2, RoBERTa, BART, และ DeBERTa",Os,q,sl,T,dn="<p>💡 บทนี้จะพูดถึง BPE อย่างละเอียด เราจะเจาะลึกถึงไปถึงการ implement อัลกอริทึมนี้ คุณสามารถข้ามไปตอนท้ายได้ ถ้าคุณสนใจเพียงแค่ภาพรวมคร่าวๆเท่านั้น</p>",ll,d,nl,Q,Qn="BPE เริ่มการเทรนด้วยการคำนวณรายการของคำที่อยู่ในคลังข้อมูล (คลังข้อมูลจะต้องผ่านการ normalization และ pre-tokenization มาแล้ว) จากนั้นมันจะเริ่มสร้างชุดคำศัพท์ (vocabulary) จากตัวอักษรที่อยู่ในแต่ละคำ มาดูตัวอย่างง่ายๆกัน เราจะสมมติว่าคลังข้อมูลของเรามีเพียงห้าคำเท่านั้น :",al,A,tl,$,An="vocabulary ตั้งต้นสำหรับชุดข้อมูลนี้คือ <code>["b", "g", "h", "n", "p", "s", "u"]</code> ในการใช้งานจริง vocabulary ตั้งต้นจะประกอบด้วยตัวอักษร ASCII เป็นอย่างต่ำ หรืออาจจะมีตัวอักษร Unicode ได้ด้วย",pl,B,$n="ถ้าข้อความใหม่ที่คุณต้องการจะตัดคำ มีสัญลักษณ์ที่ไม่ได้อยู่ใน training corpus สัญลักษณ์พวกนี้จะถูกแปลงเป็น unknown token นี่เป็นเหตุผลว่าทำไมโมเดล NLP จึงประมวลผลข้อความที่มีอีโมจิได้ไม่ดีนัก",el,h,Bn="<p>Tokenizer ของ GPT-2 และ RoBERTa (ซึ่งค่อนข้างคล้ายกัน) มีวิธีการจัดการกับปัญหานี้ได้อย่างประสิทธิภาพ มันจะไม่มองแต่ละคำเป็น Unicode แต่จะมองว่าเป็น byte การทำแบบนี้ทำให้ vocabulary ตั้งต้น มีขนาดที่เล็ก (256) แต่ยังสามารถบันทึกทุกๆสัญลักษณ์ได้ โดยไม่ต้องแปลงสัญลักษณ์พิเศษต่างๆเป็น unknown token เทคนิคนี้เรียกว่า <em>byte-level BPE</em></p>",Ml,E,En=`หลังจากสร้าง vocabulary ตั้งต้นแล้ว เราจะเพิ่ม token ใหม่ๆ เข้าไปจนว่าจะได้ vocabulary ขนาดใหญ่พอกับที่เราต้องการ โดยเราจะเทรน BPE ให้เรียน กฎที่เรียกว่า <em>merges</em> ซึ่งเป็นกฎสำหรับการรวมสองหน่วยใน vocabulary เข้าด้วยกัน | |
| ตอนช่วงเริ่มต้น กฎ merges พวกนี้จะสร้างคำย่อยที่ประกอบด้วยตัวอักษรสองตัว ระหว่างที่เราเทรนต่อไปเรื่อยๆ คำย่อยที่ได้ก็จะยาวขึ้น | |
| ในแต่ละรอบของการเทรน BPE จะคำนวณหาคู่ของคำย่อยที่พบบ่อยที่สุด (คู่ของคำย่อย ในที่นี้เราหมายถึง token ที่อยู่ติดกัน) | |
| คู่ที่มีความถี่มากที่สุดจะถูกรวมเข้าด้วยกัน จากนั้นโมเดลจะทำแบบเดิมอีกในการเทรนรอบต่อไป`,yl,z,zn="กลับมาที่ตัวอย่างของเรา สมมติว่าแต่ละคำมีความถี่ดังต่อไปนี้ :",il,V,jl,Z,Vn="ซึ่งแปลว่า <code>"hug"</code> พบ 10 ครั้งใน corpus, <code>"pug"</code> พบ 5 ครั้ง, <code>"pun"</code> พบ 12 ครั้ง, <code>"bun"</code> พบ 4 ครั้ง, และ <code>"hugs"</code> พบ 5 ครั้ง",Jl,v,Zn="เราจะเริ่มการเทรน โดยแยกแต่ละคำออกเป็นตัวอักษร (ตัวอักษรจะต้องมาจาก vocabulary ตั้งต้นที่เราสร้างมาก่อนหน้านี้แล้ว) ตอนนี้คุณจะเห็นว่าแต่ละคำถูกแปลงเป็น list ที่ประกอบไปด้วยหลายๆ token",cl,G,rl,S,vn=`จากนั้น เราจะดูทีละคู่ ตัวอย่างเช่น คู่ <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 เดียวด้วย`,Ul,N,Gn="หลังจากขั้นตอนนี้ vocabulary และ corpus จะมีค่าดังนี้ :",ul,_,ol,H,Sn=`ตอนนี้ จะเห็นว่าเรามีคู่ที่เมื่อรวมกันจะได้ token ที่ยาวกว่าสองตัวอักษร ตัวอย่างเช่น คู่ <code>("h", "ug")</code> ซึ่งพบ 15 ครั้งใน corpus | |
| อย่างไรก็ตาม คู่ที่พบบ่อยที่สุดคือ <code>("u", "n")</code> ซึ่งพบ 16 ครั้ง ดังนั้นกฎที่สองก็คือ <code>("u", "n") -> "un"</code> หลังจากที่เราเพิ่มคู่นี้ไปใน vocabulary และ merge token ใน corpus เข้าด้วยกันแล้ว เราจะได้ :`,Tl,X,hl,D,Nn="ตอนนี้ คู่ที่พบบ่อยที่สุดคือ <code>("h", "ug")</code> ดังนั้นกฎที่ได้คือ <code>("h", "ug") -> "hug"</code> ซึ่งจะทำให้เราได้ token ที่มีสามตัวอักษร หลังจากการ merge เราจะได้ :",wl,W,xl,R,_n="เราจะทำแบบนี้ต่อไปเรื่อยๆ จนกว่าจะได้ขนาดของ vocabulary ที่ต้องการ",Cl,w,Hn="<p>✏️ <strong>ตาคุณแล้ว!</strong> คุณคิดว่ากฎ merge ต่อไปคืออะไร</p>",ml,Y,gl,K,Xn="การ tokenization เป็นขั้นตอนหลังจากการเทรน โดย input ใหม่จะถูก tokenize ด้วยขั้นตอนดังต่อไปนี้",Il,P,Dn="<li>Normalization (การปรับข้อความให้เป็นมาตรฐาน)</li> <li>Pre-tokenization (การเตรียมข้อความให้พร้อมสำหรับการ tokenize จริง)</li> <li>แยกคำออกเป็นตัวอักษรเดี่ยว</li> <li>ใช้กฎ merge ที่ได้จากการเทรนเพื่อรวมตัวอักษรที่เราได้จากขั้นตอนก่อนหน้า</li>",bl,F,Wn="มาดูกฎสามตัวที่เราได้จากการเทรนก่อนหน้านี้ :",kl,L,fl,O,Rn=`คำว่า<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> ก็จะถูกรวมเข้าด้วยกัน`,ql,x,Yn="<p>✏️ <strong>ตาคุณแล้ว!</strong> คุณคิดว่าคำว่า <code>"unhug"</code> จะถูกแยกอย่างไร</p>",dl,ss,Ql,ls,Kn="ตอนนี้เราจะมาดูกันว่า คุณจะสามารถ implement อัลกอริทึม BPE ได้อย่างไร สิ่งที่เราจะเรียนต่อไปนี้ไม่ใช่ implementation ที่ดีที่สุด เราเพียงต้องการให้คุณเข้าใจโค้ดและเข้าใจว่า BPE ทำงานอย่างไร",Al,ns,Pn="อันดับแรก เราต้องการ corpus ดังนั้น เราจะสร้าง corpus แบบง่ายๆขึ้นมา โดยประกอบไปด้วยไม่กี่ประโยค :",$l,as,Bl,ts,Fn="จากนั้นเราจะทำการ pre-tokenize corpus นี้ เพื่อแยกข้อความออกเป็นคำๆ เนื่องจากเราจะสร้าง BPE tokenizer ตามตัวที่ใช้ใน GPT-2 เราจึงต้องใช้ <code>gpt2</code> tokenizer ในการ pre-tokenize",El,ps,zl,es,Ln="จากนั้นเราจะคำนวณความถี่ของแต่ละคำ:",Vl,Ms,Zl,ys,vl,is,On="ขั้นตอนต่อไป คือการคำนวณ vocabulary ตั้งต้น ซึ่งสร้างจากแต่ละตัวอักษรใน corpus :",Gl,js,Sl,Js,Nl,cs,sa="เราจะเพิ่ม token พิเศษเข้าไปในข้างหน้า list นี้ด้วย GPT-2 ใช้ token พิเศษคือ <code>"<|endoftext|>"</code> :",_l,rs,Hl,Us,la="จากนั้นเราจะแยกแต่ละคำใน corpus ให้เป็นตัวอักษร เพื่อที่เราจะได้เริ่มการเทรน :",Xl,us,Dl,os,na="ตอนนี้เราก็พร้อมที่จะเทรนแล้ว เราจะเริ่มด้วยการเขียนฟังก์ชันที่คำนวณความถี่ของแต่ละคู่ token :",Wl,Ts,Rl,hs,aa="มาดูส่วนผลลัพธ์ (ซึ่งเป็น dictionary) กัน :",Yl,ws,Kl,xs,Pl,Cs,ta="จากนั้นเราจะหาคู่ที่พบบ่อยที่สุด ซึ่งทำได้ง่ายๆดังนี้ :",Fl,ms,Ll,gs,Ol,Is,pa="ดังนั้น กฎแรกที่เราได้ก็คือ <code>('Ġ', 't') -> 'Ġt'</code> และเราจะต้องเพิ่ม <code>'Ġt'</code> เข้าไปใน vocabulary :",sn,bs,ln,ks,ea="จากนั้น เราจะต้องทำการ merge คำย่อยที่อยู่ใน dictionary <code>splits</code> ด้วย โดยเราจะเขียนฟังก์ชันต่อไปนี้ :",nn,fs,an,qs,Ma="และนี่ก็คือผลลัพธ์จากการ merge ครั้งแรก :",tn,ds,pn,Qs,en,As,ya="ตอนนี้เราก็มีทุกอย่างพร้อมสำหรับการเทรนแล้ว เราจะเทรนจนกว่าขนาดของ vocabulary จะเท่ากับ 50 :",Mn,$s,yn,Bs,ia="ผลลัพธ์ที่ได้คือ tokenizer ของเราได้เรียน 19 กฎ (vocabulary ตั้งต้นมี 31 token ซึ่งมาจากตัวอักษรที่เรามี 30 ตัวและ token พิเศษอีกหนึ่งตัว) :",jn,Es,Jn,zs,cn,Vs,ja="ส่วน vocabulary ที่ได้จะประกอบไปด้วย token พิเศษ, ตัวอักษรตั้งต้น, และผลลัพธ์จากการ merge แต่ละครั้ง :",rn,Zs,Un,vs,un,C,Ja="<p>💡 ถ้าคุณใช้ <code>train_new_from_iterator()</code> กับ corpus เดียวกันนี้ คุณจะไม่ได้ vocabulary เดียวกัน เพราะว่าอาจจะมีหลายคู่ token ที่มีความถี่สูงสุดเท่ากัน ในตัวอย่างของเรา เราเลือกคู่แรกที่โค้ดของเราอ่านเจอ ส่วน 🤗 Tokenizers library เลือกคู่แรกโดยเรียงตาม ID</p>",on,Gs,ca="หากเราต้องการ tokenize ข้อความใดข้อความหนึ่ง สิ่งที่ต้องทำคือ pre-tokenize จากนั้นจึงทำการ tokenize และสุดท้าย apply กฎ merge :",Tn,Ss,hn,Ns,ra="คุณสามารถทดลองโค้ดนี้ได้กับข้อความทุกข้อความ ที่ประกอบไปด้วยตัวอักษรเท่านั้น :",wn,_s,xn,Hs,Cn,m,Ua=`<p>⚠️ การ implementation ในตัวอย่างของเราจะ return error ถ้าโปรแกรมอ่านเจอตัวอักษรที่ไม่มีใน vocabulary นั่นเพราะว่าเราไม่ได้เขียนโค้ดเพื่อจัดการกับกรณีแบบนี้ | |
| ใน GPT-2 ปกติจะไม่มี unknown token แบบนี้ เพราะว่า ถ้าเราใช้ byte-level BPE เราจะไม่มีทางได้ตัวอักษรที่ unknown อย่างไรก็ตามในตัวอย่างของเรา เราไม่ได้ใช้ทุกๆ byte เพื่อสร้าง vocabulary ตั้งต้น | |
| อย่างไรก็ตาม หัวข้อนี้นั้นค่อนข้างลึก เราจึงจะไม่ขอพูดถึงรายละเอียดไปมากกว่านี้</p>`,mn,Xs,ua="นี่ก็คือ อัลกอริทึม BPE ในบทต่อไป เราจะมาดู WordPiece กัน",gn,Ds,In,Rs,bn;return I=new Ia({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),b=new kn({props:{title:"Byte-Pair Encoding tokenization",local:"byte-pair-encoding-tokenization",headingTag:"h1"}}),k=new fa({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 ka({props:{id:"HEikzVL-lZU"}}),d=new kn({props:{title:"อัลกอริทึมที่ใช้ในการเทรน",local:"อลกอรทมทใชในการเทรน",headingTag:"h2"}}),A=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}}),G=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}}),_=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}}),X=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}}),W=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}}),Y=new kn({props:{title:"Tokenization algorithm",local:"tokenization-algorithm",headingTag:"h2"}}),L=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}}),ss=new kn({props:{title:"การสร้าง BPE (Implementing BPE)",local:"การสราง-bpe-implementing-bpe",headingTag:"h2"}}),as=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}}),ps=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}}),Ms=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}}),ys=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}}),js=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}}),rs=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}}),Ts=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}}),ws=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}}),xs=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}}),ms=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}}),gs=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}}),bs=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}}),fs=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}}),ds=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}}),Qs=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}}),$s=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}}),Es=new u({props:{code:"cHJpbnQobWVyZ2VzKQ==",highlighted:'<span class="hljs-built_in">print</span>(merges)',wrap:!1}}),zs=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}}),vs=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}}),Ss=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}}),_s=new u({props:{code:"dG9rZW5pemUoJTIyVGhpcyUyMGlzJTIwbm90JTIwYSUyMHRva2VuLiUyMik=",highlighted:'tokenize(<span class="hljs-string">"This is not a token."</span>)',wrap:!1}}),Hs=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}}),Ds=new ba({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter6/5.mdx"}}),{c(){o=e("meta"),Ys=t(),Ws=e("p"),Ks=t(),i(I.$$.fragment),Ps=t(),i(b.$$.fragment),Fs=t(),i(k.$$.fragment),Ls=t(),f=e("p"),f.textContent=qn,Os=t(),i(q.$$.fragment),sl=t(),T=e("blockquote"),T.innerHTML=dn,ll=t(),i(d.$$.fragment),nl=t(),Q=e("p"),Q.textContent=Qn,al=t(),i(A.$$.fragment),tl=t(),$=e("p"),$.innerHTML=An,pl=t(),B=e("p"),B.textContent=$n,el=t(),h=e("blockquote"),h.innerHTML=Bn,Ml=t(),E=e("p"),E.innerHTML=En,yl=t(),z=e("p"),z.textContent=zn,il=t(),i(V.$$.fragment),jl=t(),Z=e("p"),Z.innerHTML=Vn,Jl=t(),v=e("p"),v.textContent=Zn,cl=t(),i(G.$$.fragment),rl=t(),S=e("p"),S.innerHTML=vn,Ul=t(),N=e("p"),N.textContent=Gn,ul=t(),i(_.$$.fragment),ol=t(),H=e("p"),H.innerHTML=Sn,Tl=t(),i(X.$$.fragment),hl=t(),D=e("p"),D.innerHTML=Nn,wl=t(),i(W.$$.fragment),xl=t(),R=e("p"),R.textContent=_n,Cl=t(),w=e("blockquote"),w.innerHTML=Hn,ml=t(),i(Y.$$.fragment),gl=t(),K=e("p"),K.textContent=Xn,Il=t(),P=e("ol"),P.innerHTML=Dn,bl=t(),F=e("p"),F.textContent=Wn,kl=t(),i(L.$$.fragment),fl=t(),O=e("p"),O.innerHTML=Rn,ql=t(),x=e("blockquote"),x.innerHTML=Yn,dl=t(),i(ss.$$.fragment),Ql=t(),ls=e("p"),ls.textContent=Kn,Al=t(),ns=e("p"),ns.textContent=Pn,$l=t(),i(as.$$.fragment),Bl=t(),ts=e("p"),ts.innerHTML=Fn,El=t(),i(ps.$$.fragment),zl=t(),es=e("p"),es.textContent=Ln,Vl=t(),i(Ms.$$.fragment),Zl=t(),i(ys.$$.fragment),vl=t(),is=e("p"),is.textContent=On,Gl=t(),i(js.$$.fragment),Sl=t(),i(Js.$$.fragment),Nl=t(),cs=e("p"),cs.innerHTML=sa,_l=t(),i(rs.$$.fragment),Hl=t(),Us=e("p"),Us.textContent=la,Xl=t(),i(us.$$.fragment),Dl=t(),os=e("p"),os.textContent=na,Wl=t(),i(Ts.$$.fragment),Rl=t(),hs=e("p"),hs.textContent=aa,Yl=t(),i(ws.$$.fragment),Kl=t(),i(xs.$$.fragment),Pl=t(),Cs=e("p"),Cs.textContent=ta,Fl=t(),i(ms.$$.fragment),Ll=t(),i(gs.$$.fragment),Ol=t(),Is=e("p"),Is.innerHTML=pa,sn=t(),i(bs.$$.fragment),ln=t(),ks=e("p"),ks.innerHTML=ea,nn=t(),i(fs.$$.fragment),an=t(),qs=e("p"),qs.textContent=Ma,tn=t(),i(ds.$$.fragment),pn=t(),i(Qs.$$.fragment),en=t(),As=e("p"),As.textContent=ya,Mn=t(),i($s.$$.fragment),yn=t(),Bs=e("p"),Bs.textContent=ia,jn=t(),i(Es.$$.fragment),Jn=t(),i(zs.$$.fragment),cn=t(),Vs=e("p"),Vs.textContent=ja,rn=t(),i(Zs.$$.fragment),Un=t(),i(vs.$$.fragment),un=t(),C=e("blockquote"),C.innerHTML=Ja,on=t(),Gs=e("p"),Gs.textContent=ca,Tn=t(),i(Ss.$$.fragment),hn=t(),Ns=e("p"),Ns.textContent=ra,wn=t(),i(_s.$$.fragment),xn=t(),i(Hs.$$.fragment),Cn=t(),m=e("blockquote"),m.innerHTML=Ua,mn=t(),Xs=e("p"),Xs.textContent=ua,gn=t(),i(Ds.$$.fragment),In=t(),Rs=e("p"),this.h()},l(s){const l=ma("svelte-u9bgzb",document.head);o=M(l,"META",{name:!0,content:!0}),l.forEach(n),Ys=p(s),Ws=M(s,"P",{}),oa(Ws).forEach(n),Ks=p(s),j(I.$$.fragment,s),Ps=p(s),j(b.$$.fragment,s),Fs=p(s),j(k.$$.fragment,s),Ls=p(s),f=M(s,"P",{"data-svelte-h":!0}),y(f)!=="svelte-12o0prt"&&(f.textContent=qn),Os=p(s),j(q.$$.fragment,s),sl=p(s),T=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(T)!=="svelte-1bjxfe0"&&(T.innerHTML=dn),ll=p(s),j(d.$$.fragment,s),nl=p(s),Q=M(s,"P",{"data-svelte-h":!0}),y(Q)!=="svelte-ui9660"&&(Q.textContent=Qn),al=p(s),j(A.$$.fragment,s),tl=p(s),$=M(s,"P",{"data-svelte-h":!0}),y($)!=="svelte-1mi54up"&&($.innerHTML=An),pl=p(s),B=M(s,"P",{"data-svelte-h":!0}),y(B)!=="svelte-568bhx"&&(B.textContent=$n),el=p(s),h=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(h)!=="svelte-584tqo"&&(h.innerHTML=Bn),Ml=p(s),E=M(s,"P",{"data-svelte-h":!0}),y(E)!=="svelte-19vck82"&&(E.innerHTML=En),yl=p(s),z=M(s,"P",{"data-svelte-h":!0}),y(z)!=="svelte-qclq5r"&&(z.textContent=zn),il=p(s),j(V.$$.fragment,s),jl=p(s),Z=M(s,"P",{"data-svelte-h":!0}),y(Z)!=="svelte-1hblxvc"&&(Z.innerHTML=Vn),Jl=p(s),v=M(s,"P",{"data-svelte-h":!0}),y(v)!=="svelte-14fxlqe"&&(v.textContent=Zn),cl=p(s),j(G.$$.fragment,s),rl=p(s),S=M(s,"P",{"data-svelte-h":!0}),y(S)!=="svelte-bmix0l"&&(S.innerHTML=vn),Ul=p(s),N=M(s,"P",{"data-svelte-h":!0}),y(N)!=="svelte-7b8c15"&&(N.textContent=Gn),ul=p(s),j(_.$$.fragment,s),ol=p(s),H=M(s,"P",{"data-svelte-h":!0}),y(H)!=="svelte-1bqhc5z"&&(H.innerHTML=Sn),Tl=p(s),j(X.$$.fragment,s),hl=p(s),D=M(s,"P",{"data-svelte-h":!0}),y(D)!=="svelte-1g4lab1"&&(D.innerHTML=Nn),wl=p(s),j(W.$$.fragment,s),xl=p(s),R=M(s,"P",{"data-svelte-h":!0}),y(R)!=="svelte-rt06o2"&&(R.textContent=_n),Cl=p(s),w=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(w)!=="svelte-15ejpfh"&&(w.innerHTML=Hn),ml=p(s),j(Y.$$.fragment,s),gl=p(s),K=M(s,"P",{"data-svelte-h":!0}),y(K)!=="svelte-38g5f4"&&(K.textContent=Xn),Il=p(s),P=M(s,"OL",{"data-svelte-h":!0}),y(P)!=="svelte-1dn790a"&&(P.innerHTML=Dn),bl=p(s),F=M(s,"P",{"data-svelte-h":!0}),y(F)!=="svelte-1c2vghc"&&(F.textContent=Wn),kl=p(s),j(L.$$.fragment,s),fl=p(s),O=M(s,"P",{"data-svelte-h":!0}),y(O)!=="svelte-n933xw"&&(O.innerHTML=Rn),ql=p(s),x=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(x)!=="svelte-ikpas4"&&(x.innerHTML=Yn),dl=p(s),j(ss.$$.fragment,s),Ql=p(s),ls=M(s,"P",{"data-svelte-h":!0}),y(ls)!=="svelte-1e93cpt"&&(ls.textContent=Kn),Al=p(s),ns=M(s,"P",{"data-svelte-h":!0}),y(ns)!=="svelte-5w2uhv"&&(ns.textContent=Pn),$l=p(s),j(as.$$.fragment,s),Bl=p(s),ts=M(s,"P",{"data-svelte-h":!0}),y(ts)!=="svelte-1p977ot"&&(ts.innerHTML=Fn),El=p(s),j(ps.$$.fragment,s),zl=p(s),es=M(s,"P",{"data-svelte-h":!0}),y(es)!=="svelte-97lq7n"&&(es.textContent=Ln),Vl=p(s),j(Ms.$$.fragment,s),Zl=p(s),j(ys.$$.fragment,s),vl=p(s),is=M(s,"P",{"data-svelte-h":!0}),y(is)!=="svelte-1ki81xp"&&(is.textContent=On),Gl=p(s),j(js.$$.fragment,s),Sl=p(s),j(Js.$$.fragment,s),Nl=p(s),cs=M(s,"P",{"data-svelte-h":!0}),y(cs)!=="svelte-1ivy2j"&&(cs.innerHTML=sa),_l=p(s),j(rs.$$.fragment,s),Hl=p(s),Us=M(s,"P",{"data-svelte-h":!0}),y(Us)!=="svelte-1d6a2sn"&&(Us.textContent=la),Xl=p(s),j(us.$$.fragment,s),Dl=p(s),os=M(s,"P",{"data-svelte-h":!0}),y(os)!=="svelte-1n9k9s1"&&(os.textContent=na),Wl=p(s),j(Ts.$$.fragment,s),Rl=p(s),hs=M(s,"P",{"data-svelte-h":!0}),y(hs)!=="svelte-1jpkvry"&&(hs.textContent=aa),Yl=p(s),j(ws.$$.fragment,s),Kl=p(s),j(xs.$$.fragment,s),Pl=p(s),Cs=M(s,"P",{"data-svelte-h":!0}),y(Cs)!=="svelte-ytfm66"&&(Cs.textContent=ta),Fl=p(s),j(ms.$$.fragment,s),Ll=p(s),j(gs.$$.fragment,s),Ol=p(s),Is=M(s,"P",{"data-svelte-h":!0}),y(Is)!=="svelte-knui6i"&&(Is.innerHTML=pa),sn=p(s),j(bs.$$.fragment,s),ln=p(s),ks=M(s,"P",{"data-svelte-h":!0}),y(ks)!=="svelte-1gz885v"&&(ks.innerHTML=ea),nn=p(s),j(fs.$$.fragment,s),an=p(s),qs=M(s,"P",{"data-svelte-h":!0}),y(qs)!=="svelte-k9g317"&&(qs.textContent=Ma),tn=p(s),j(ds.$$.fragment,s),pn=p(s),j(Qs.$$.fragment,s),en=p(s),As=M(s,"P",{"data-svelte-h":!0}),y(As)!=="svelte-ch2nw4"&&(As.textContent=ya),Mn=p(s),j($s.$$.fragment,s),yn=p(s),Bs=M(s,"P",{"data-svelte-h":!0}),y(Bs)!=="svelte-1047qda"&&(Bs.textContent=ia),jn=p(s),j(Es.$$.fragment,s),Jn=p(s),j(zs.$$.fragment,s),cn=p(s),Vs=M(s,"P",{"data-svelte-h":!0}),y(Vs)!=="svelte-19ymfzy"&&(Vs.textContent=ja),rn=p(s),j(Zs.$$.fragment,s),Un=p(s),j(vs.$$.fragment,s),un=p(s),C=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(C)!=="svelte-1pgov3q"&&(C.innerHTML=Ja),on=p(s),Gs=M(s,"P",{"data-svelte-h":!0}),y(Gs)!=="svelte-1g50xxw"&&(Gs.textContent=ca),Tn=p(s),j(Ss.$$.fragment,s),hn=p(s),Ns=M(s,"P",{"data-svelte-h":!0}),y(Ns)!=="svelte-1xxndsq"&&(Ns.textContent=ra),wn=p(s),j(_s.$$.fragment,s),xn=p(s),j(Hs.$$.fragment,s),Cn=p(s),m=M(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(m)!=="svelte-esfp8l"&&(m.innerHTML=Ua),mn=p(s),Xs=M(s,"P",{"data-svelte-h":!0}),y(Xs)!=="svelte-zewf2t"&&(Xs.textContent=ua),gn=p(s),j(Ds.$$.fragment,s),In=p(s),Rs=M(s,"P",{}),oa(Rs).forEach(n),this.h()},h(){g(o,"name","hf:doc:metadata"),g(o,"content",da),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){ga(document.head,o),a(s,Ys,l),a(s,Ws,l),a(s,Ks,l),J(I,s,l),a(s,Ps,l),J(b,s,l),a(s,Fs,l),J(k,s,l),a(s,Ls,l),a(s,f,l),a(s,Os,l),J(q,s,l),a(s,sl,l),a(s,T,l),a(s,ll,l),J(d,s,l),a(s,nl,l),a(s,Q,l),a(s,al,l),J(A,s,l),a(s,tl,l),a(s,$,l),a(s,pl,l),a(s,B,l),a(s,el,l),a(s,h,l),a(s,Ml,l),a(s,E,l),a(s,yl,l),a(s,z,l),a(s,il,l),J(V,s,l),a(s,jl,l),a(s,Z,l),a(s,Jl,l),a(s,v,l),a(s,cl,l),J(G,s,l),a(s,rl,l),a(s,S,l),a(s,Ul,l),a(s,N,l),a(s,ul,l),J(_,s,l),a(s,ol,l),a(s,H,l),a(s,Tl,l),J(X,s,l),a(s,hl,l),a(s,D,l),a(s,wl,l),J(W,s,l),a(s,xl,l),a(s,R,l),a(s,Cl,l),a(s,w,l),a(s,ml,l),J(Y,s,l),a(s,gl,l),a(s,K,l),a(s,Il,l),a(s,P,l),a(s,bl,l),a(s,F,l),a(s,kl,l),J(L,s,l),a(s,fl,l),a(s,O,l),a(s,ql,l),a(s,x,l),a(s,dl,l),J(ss,s,l),a(s,Ql,l),a(s,ls,l),a(s,Al,l),a(s,ns,l),a(s,$l,l),J(as,s,l),a(s,Bl,l),a(s,ts,l),a(s,El,l),J(ps,s,l),a(s,zl,l),a(s,es,l),a(s,Vl,l),J(Ms,s,l),a(s,Zl,l),J(ys,s,l),a(s,vl,l),a(s,is,l),a(s,Gl,l),J(js,s,l),a(s,Sl,l),J(Js,s,l),a(s,Nl,l),a(s,cs,l),a(s,_l,l),J(rs,s,l),a(s,Hl,l),a(s,Us,l),a(s,Xl,l),J(us,s,l),a(s,Dl,l),a(s,os,l),a(s,Wl,l),J(Ts,s,l),a(s,Rl,l),a(s,hs,l),a(s,Yl,l),J(ws,s,l),a(s,Kl,l),J(xs,s,l),a(s,Pl,l),a(s,Cs,l),a(s,Fl,l),J(ms,s,l),a(s,Ll,l),J(gs,s,l),a(s,Ol,l),a(s,Is,l),a(s,sn,l),J(bs,s,l),a(s,ln,l),a(s,ks,l),a(s,nn,l),J(fs,s,l),a(s,an,l),a(s,qs,l),a(s,tn,l),J(ds,s,l),a(s,pn,l),J(Qs,s,l),a(s,en,l),a(s,As,l),a(s,Mn,l),J($s,s,l),a(s,yn,l),a(s,Bs,l),a(s,jn,l),J(Es,s,l),a(s,Jn,l),J(zs,s,l),a(s,cn,l),a(s,Vs,l),a(s,rn,l),J(Zs,s,l),a(s,Un,l),J(vs,s,l),a(s,un,l),a(s,C,l),a(s,on,l),a(s,Gs,l),a(s,Tn,l),J(Ss,s,l),a(s,hn,l),a(s,Ns,l),a(s,wn,l),J(_s,s,l),a(s,xn,l),J(Hs,s,l),a(s,Cn,l),a(s,m,l),a(s,mn,l),a(s,Xs,l),a(s,gn,l),J(Ds,s,l),a(s,In,l),a(s,Rs,l),bn=!0},p:ha,i(s){bn||(c(I.$$.fragment,s),c(b.$$.fragment,s),c(k.$$.fragment,s),c(q.$$.fragment,s),c(d.$$.fragment,s),c(A.$$.fragment,s),c(V.$$.fragment,s),c(G.$$.fragment,s),c(_.$$.fragment,s),c(X.$$.fragment,s),c(W.$$.fragment,s),c(Y.$$.fragment,s),c(L.$$.fragment,s),c(ss.$$.fragment,s),c(as.$$.fragment,s),c(ps.$$.fragment,s),c(Ms.$$.fragment,s),c(ys.$$.fragment,s),c(js.$$.fragment,s),c(Js.$$.fragment,s),c(rs.$$.fragment,s),c(us.$$.fragment,s),c(Ts.$$.fragment,s),c(ws.$$.fragment,s),c(xs.$$.fragment,s),c(ms.$$.fragment,s),c(gs.$$.fragment,s),c(bs.$$.fragment,s),c(fs.$$.fragment,s),c(ds.$$.fragment,s),c(Qs.$$.fragment,s),c($s.$$.fragment,s),c(Es.$$.fragment,s),c(zs.$$.fragment,s),c(Zs.$$.fragment,s),c(vs.$$.fragment,s),c(Ss.$$.fragment,s),c(_s.$$.fragment,s),c(Hs.$$.fragment,s),c(Ds.$$.fragment,s),bn=!0)},o(s){r(I.$$.fragment,s),r(b.$$.fragment,s),r(k.$$.fragment,s),r(q.$$.fragment,s),r(d.$$.fragment,s),r(A.$$.fragment,s),r(V.$$.fragment,s),r(G.$$.fragment,s),r(_.$$.fragment,s),r(X.$$.fragment,s),r(W.$$.fragment,s),r(Y.$$.fragment,s),r(L.$$.fragment,s),r(ss.$$.fragment,s),r(as.$$.fragment,s),r(ps.$$.fragment,s),r(Ms.$$.fragment,s),r(ys.$$.fragment,s),r(js.$$.fragment,s),r(Js.$$.fragment,s),r(rs.$$.fragment,s),r(us.$$.fragment,s),r(Ts.$$.fragment,s),r(ws.$$.fragment,s),r(xs.$$.fragment,s),r(ms.$$.fragment,s),r(gs.$$.fragment,s),r(bs.$$.fragment,s),r(fs.$$.fragment,s),r(ds.$$.fragment,s),r(Qs.$$.fragment,s),r($s.$$.fragment,s),r(Es.$$.fragment,s),r(zs.$$.fragment,s),r(Zs.$$.fragment,s),r(vs.$$.fragment,s),r(Ss.$$.fragment,s),r(_s.$$.fragment,s),r(Hs.$$.fragment,s),r(Ds.$$.fragment,s),bn=!1},d(s){s&&(n(Ys),n(Ws),n(Ks),n(Ps),n(Fs),n(Ls),n(f),n(Os),n(sl),n(T),n(ll),n(nl),n(Q),n(al),n(tl),n($),n(pl),n(B),n(el),n(h),n(Ml),n(E),n(yl),n(z),n(il),n(jl),n(Z),n(Jl),n(v),n(cl),n(rl),n(S),n(Ul),n(N),n(ul),n(ol),n(H),n(Tl),n(hl),n(D),n(wl),n(xl),n(R),n(Cl),n(w),n(ml),n(gl),n(K),n(Il),n(P),n(bl),n(F),n(kl),n(fl),n(O),n(ql),n(x),n(dl),n(Ql),n(ls),n(Al),n(ns),n($l),n(Bl),n(ts),n(El),n(zl),n(es),n(Vl),n(Zl),n(vl),n(is),n(Gl),n(Sl),n(Nl),n(cs),n(_l),n(Hl),n(Us),n(Xl),n(Dl),n(os),n(Wl),n(Rl),n(hs),n(Yl),n(Kl),n(Pl),n(Cs),n(Fl),n(Ll),n(Ol),n(Is),n(sn),n(ln),n(ks),n(nn),n(an),n(qs),n(tn),n(pn),n(en),n(As),n(Mn),n(yn),n(Bs),n(jn),n(Jn),n(cn),n(Vs),n(rn),n(Un),n(un),n(C),n(on),n(Gs),n(Tn),n(hn),n(Ns),n(wn),n(xn),n(Cn),n(m),n(mn),n(Xs),n(gn),n(In),n(Rs)),n(o),U(I,s),U(b,s),U(k,s),U(q,s),U(d,s),U(A,s),U(V,s),U(G,s),U(_,s),U(X,s),U(W,s),U(Y,s),U(L,s),U(ss,s),U(as,s),U(ps,s),U(Ms,s),U(ys,s),U(js,s),U(Js,s),U(rs,s),U(us,s),U(Ts,s),U(ws,s),U(xs,s),U(ms,s),U(gs,s),U(bs,s),U(fs,s),U(ds,s),U(Qs,s),U($s,s),U(Es,s),U(zs,s),U(Zs,s),U(vs,s),U(Ss,s),U(_s,s),U(Hs,s),U(Ds,s)}}}const da='{"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(fn){return wa(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Za extends xa{constructor(o){super(),Ca(this,o,Qa,qa,Ta,{})}}export{Za as component}; | |
Xet Storage Details
- Size:
- 72.9 kB
- Xet hash:
- ab9c2e11f80fba41a657a03b49618562cbbec396ebe628b5ceb3f200f32b0287
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.