Buckets:
| import{s as Cn,o as xn,n as Ks}from"../chunks/scheduler.37c15a92.js";import{S as bn,i as dn,g as M,s as t,r as i,m as fn,H as kn,A as qn,h as y,f as a,c as p,j as Aa,u as j,x as U,n as $n,E as An,k as wn,y as In,a as n,v as r,d as c,t as J,w as o}from"../chunks/index.2bf4358c.js";import{T as Ls}from"../chunks/Tip.363c041f.js";import{Y as zn}from"../chunks/Youtube.1e50a667.js";import{C as T}from"../chunks/CodeBlock.4e987730.js";import{C as Qn}from"../chunks/CourseFloatingBanner.6add7356.js";import{H as qa,E as Bn}from"../chunks/getInferenceSnippets.ebf8be91.js";function vn(w){let e,u="💡 บทนี้จะพูดถึง WordPiece อย่างละเอียด เราจะเจาะลึกถึงไปถึงการ implement อัลกอริทึมนี้ คุณสามารถข้ามไปตอนท้ายได้ ถ้าคุณสนใจเพียงแค่ภาพรวมคร่าวๆเท่านั้น";return{c(){e=M("p"),e.textContent=u},l(m){e=y(m,"P",{"data-svelte-h":!0}),U(e)!=="svelte-ndt3rq"&&(e.textContent=u)},m(m,h){n(m,e,h)},p:Ks,d(m){m&&a(e)}}}function Zn(w){let e,u="⚠️ เนื่องจาก Google ไม่เปิดเผยโค้ดสำหรับการเทรน WordPiece ดังนั้นโค้ดที่เราจะสอนคุณต่อจากนี้ มาจากการพยายามทำตามข้อมูลที่บอกไว้ใน paper แปลว่าโค้ดอาจจะไม่แม่นยำ 100%";return{c(){e=M("p"),e.textContent=u},l(m){e=y(m,"P",{"data-svelte-h":!0}),U(e)!=="svelte-gt28yt"&&(e.textContent=u)},m(m,h){n(m,e,h)},p:Ks,d(m){m&&a(e)}}}function Nn(w){let e,u="✏️ <strong>ตาคุณบ้างแล้ว!</strong> กฎ merge ต่อไปคืออะไร";return{c(){e=M("p"),e.innerHTML=u},l(m){e=y(m,"P",{"data-svelte-h":!0}),U(e)!=="svelte-qdffzs"&&(e.innerHTML=u)},m(m,h){n(m,e,h)},p:Ks,d(m){m&&a(e)}}}function _n(w){let e,u="✏️ <strong>ถึงตาคุณแล้ว!</strong> คำว่า <code>"pugs"</code> จะถูก tokenize อย่างไร?";return{c(){e=M("p"),e.innerHTML=u},l(m){e=y(m,"P",{"data-svelte-h":!0}),U(e)!=="svelte-5m52ga"&&(e.innerHTML=u)},m(m,h){n(m,e,h)},p:Ks,d(m){m&&a(e)}}}function En(w){let e,u="💡 ถ้าคุณใช้ <code>train_new_from_iterator()</code> กับ corpus ตัวอย่างนี้ คุณอาจจะไม่ได้ vocabulary เดียวกัน นั่นก็เพราะ 🤗 Tokenizers library ไม่ได้ใช้ WordPiece ในการเทรน แต่เราใช้ BPE";return{c(){e=M("p"),e.innerHTML=u},l(m){e=y(m,"P",{"data-svelte-h":!0}),U(e)!=="svelte-1cne6h1"&&(e.innerHTML=u)},m(m,h){n(m,e,h)},p:Ks,d(m){m&&a(e)}}}function Sn(w){let e,u,m,h,d,Os,f,sl,k,za="WordPiece เป็นอัลกอริทึมสำหรับ tokenization ที่สร้างโดย Google เพื่อ pretrain โมเดล BERT หลังจากนั้นมันได้ถูกนำมาใช้กับโมเดลประเภท Transformer หลายตัวที่เป็นประเภทเดียวกับ BERT เช่น DistilBERT, MobileBERT, Funnel Transformers, และ MPNET",ll,q,Qa="WordPiece มีความคล้ายกับ BPE ในวิธีการเทรน แต่วิธีการแยกคำนั้นแตกต่างกัน",al,$,nl,I,tl,A,pl,g,el,z,Ba=`เช่นเดียวกับ BPE อัลกอริทึม WordPiece เริ่มจาก vocabulary ขนาดเล็ก ที่ประกอบไปด้วย token พิเศษที่โมเดลใช้ และตัวอักษรตั้งต้น | |
| เพื่อที่โมเดลจะได้รู้ว่าคำไหนเป็นคำย่อย มันจะเขียน prefix เช่น <code>##</code> (ใช้ใน BERT) ไว้ข้างหน้าของแต่ละคำย่อย ในขั้นตอนแรก แต่ละคำจะถูกแบ่งออกเป็นตัวอักษร โดยตัวอักษรที่ไม่ใช่ตัวแรกจะมี prefix นี้`,Ml,Q,va="ตัวอย่างเช่น คำว่า <code>"word"</code> จะถูกแบ่งดังนี้ :",yl,B,il,v,Za="ดังนั้น vocabulary ตั้งต้น จะประกอบไปด้วยทุกๆตัวอักษรที่อยู่เริ่มต้นของแต่ละคำ และตัวอักษรอื่นๆที่อยู่ข้างในคำนั้น ซึ่งนำหน้าด้วย prefix พิเศษ",jl,Z,$a,rl,gn='<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">c</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">e</mi></mrow><mo>=</mo><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">f</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">q</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">f</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">r</mi></mrow><mo stretchy="false">)</mo><mi mathvariant="normal">/</mi><mo stretchy="false">(</mo><mrow><mi mathvariant="normal">f</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">q</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">f</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">f</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">m</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">t</mi></mrow><mo>×</mo><mrow><mi mathvariant="normal">f</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">q</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">f</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">s</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">c</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">m</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">t</mi></mrow><mo stretchy="false">)</mo></mrow><annotation encoding="application/x-tex">\\mathrm{score} = (\\mathrm{freq\\_of\\_pair}) / (\\mathrm{freq\\_of\\_first\\_element} \\times \\mathrm{freq\\_of\\_second\\_element})</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.4306em;"></span><span class="mord"><span class="mord mathrm">score</span></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mopen">(</span><span class="mord"><span class="mord mathrm">freq_of_pair</span></span><span class="mclose">)</span><span class="mord">/</span><span class="mopen">(</span><span class="mord"><span class="mord mathrm">freq_of_first_element</span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">freq_of_second_element</span></span><span class="mclose">)</span></span></span></span></span>',cl,N,Na=`การที่เราหารความถี่ของคู่ token ด้วยผลคูณของความถี่ของแต่ละ token ในคู่ จะทำให้อัลกอริทึมให้คะแนนคู่ ที่แต่ละ token มีความถี่ไม่สูง | |
| ตัวอย่างเช่น เราไม่จำเป็นจำต้อง merge <code>("un", "##able")</code> ถึงแม้ว่าคู่นี้จะมีจำนวนมากที่สุดใน vocabulary เพราะว่าทั้ง <code>"un"</code> และ <code>"##able"</code> ต่างพบได้กับคำอื่นๆด้วย และแต่ละตัวก็มีจำนวนค่อนข้างสูง | |
| ตรงกันข้ามกับ คู่เช่น <code>("hu", "##gging")</code> ซึ่งอาจจะถูกรวมเร็วกว่า (ในกรณีที่ “hugging” มีจำนวนสูงใน vocabulary ) เพราะว่า ทั้ง<code>"hu"</code> และ \`“##gging” ต่างก็พบได้ไม่บ่อย`,Jl,_,_a="เราจะใช้ตัวอย่าง เดียวกันกับที่เราใช้ใน BPE :",ol,E,Ul,S,Ea="หลังจากการแยกแต่ละคำ เราจะได้ :",ml,G,Tl,V,Sa=`ดังนั้น vocabulary ตั้งต้น คือ <code>["b", "h", "p", "##g", "##n", "##s", "##u"]</code> (เราขอละไม่พูดถึง token พิเศษในที่นี้) | |
| คู่ที่พบบ่อยที่สุดคือ <code>("##u", "##g")</code> ซึ่งพบ 20 ครั้ง แต่ว่าถ้านับจำนวนของแต่ละ token <code>"##u"</code> จะมีจำนวนค่อนข้างสูง ทำให้ score ของคู่นี้ไม่ได้สูงที่สุด (1 / 36) | |
| ทุกๆคู่ที่ประกอบด้วย <code>"##u"</code> จะได้ score เดียวกันซึ่งคือ (1 / 36) ดังนั้น score ที่สูงที่สุดจึงมาจากคู่ <code>("##g", "##s")</code> เพราะว่ามันไม่มี <code>"##u"</code> ซึ่งมี score เป็น 1 / 20 และกฎแรกที่เราได้ก็คือ <code>("##g", "##s") -> ("##gs")</code>`,ul,H,Ga="โปรดสังเกตว่า เวลาที่เรา merge เราจะลบ ตัว <code>##</code> ออกระหว่าง token สองตัวที่เราต้องการจะ merge แปลว่าเราจะได้ <code>"##gs"</code> และเราจะเพิ่ม token นี้เข้าไปใน vocabulary จากนั้นเราก็จะใช้กฎนี้กับทุกๆคำใน corpus ด้วย :",hl,X,wl,W,Va="ตอนนี้ <code>"##u"</code> มีอยู่ในทุกๆคู่ แปลว่า ทุกคู่จะมี score เท่ากัน",Il,R,Ha="ในกรณีนี้ เราจะเลือกกฎใดกฎหนึ่งเพื่อ merge ต่อไป เราจะเลือก <code>("h", "##u") -> "hu"</code> และได้ผลลัพธ์ต่อไปนี้ :",gl,Y,Cl,D,Xa="ตอนนี้คู่ที่มี score สูงที่สุดคือ <code>("hu", "##g")</code> และ <code>("hu", "##gs")</code> ซึ่งทั้งสองมี score เท่ากับ 1/15 (ส่วนตัวอื่นๆที่เหลือ มี score เท่ากับ 1/21) เราจะเลือกคู่แรกใน list มาใช้ เพื่อ merge :",xl,P,bl,F,Wa="เราจะทำแบบนี้จนกว่าจะได้ vocabulary ที่มีขนาดใหญ่มากพอ",dl,C,fl,L,kl,K,Ra=`การ tokenization ใน WordPiece แตกต่างจาก BPE ตรงที่ WordPiece จะบันทึกเฉพาะ vocabulary สุดท้ายเท่านั้น และไม่ได้บันทึก กฎ merge | |
| หากเราจะ tokenize คำใดคำหนึ่ง WordPiece จะหาคำย่อยที่ยาวที่สุด ที่พบใน vocabulary จากนั้นจะแยกคำออกตามนั้น | |
| ตัวอย่างเช่น ถ้าเราใช้ vocabulary ที่เทรนแล้วจากตัวอย่างด้านบน และต้องการ tokenize คำว่า <code>"hugs"</code> คำย่อยที่ยาวที่สุดก็คือ <code>"hug"</code> ดังนั้น เราจะแบ่งมันออกเป็น <code>["hug", "##s"]</code> | |
| จากนั้นเราก็จะดูที่ <code>"##s"</code> เราพบว่าเป็น token ที่อยู่ใน vocabulary ดังนั้น เราจึงได้ <code>["hug", "##s"]</code> | |
| ถ้าเราใช้ BPE เราจะใช้กฎที่เทรนมาตามลำดับ ซึ่งมันจะ tokenize ตัวอย่างของเราออกเป็น <code>["hu", "##gs"]</code>`,ql,O,Ya=`มาดูอีกตัวอย่างกัน เช่นคำว่า <code>"bugs"</code> | |
| เราจะเริ่มอ่านจากข้างหน้าของคำไปข้างหลัง คุณจะเห็นว่า <code>"b"</code> เป็นคำย่อยที่ยาวที่สุดที่พบใน vocabulary ดังนั้น เราจะแยกคำตรงนี้ และเราจะได้ <code>["b", "##ugs"]</code> | |
| จากนั้นเราจะดูคำว่า <code>"##ugs"</code> สำหรับคำนี้เราพบว่า <code>"##u"</code> คือคำย่อยที่ยาวที่สุดที่พบใน vocabulary ดังนั้น เราจึงจะแยกคำตรงนี้ และได้ผลลัพธ์เป็น <code>["b", "##u, "##gs"]</code> | |
| สุดท้ายเราจะดูที่คำว่า <code>"##gs"</code> ซึ่งเราพบว่า มันอยู่ใน vocabulary แล้ว ดังนั้นเราไม่ต้องแบ่งมันอีก`,$l,ss,Da=`ในกรณีที่เราไม่สามารถหาคำย่อยที่อยู่ใน vocabulary ได้เลย คำหลักที่เรากำลังอ่านนั้นจะถูกแปลงเป็นคำ unknown | |
| ตัวอย่างเช่นคำว่า <code>"mug"</code> จะถูก tokenize ให้เป็น <code>["[UNK]"]</code> เช่นเดียวกันกับคำว่า <code>"bum"</code> ถึงแม้ว่าเราจะเจอ <code>"b"</code> และ <code>"##u"</code> ใน vocabulary แต่ว่า <code>"##m"</code> ไม่ได้อยู่ใน vocabulary เราจะแปลงทั้งคำเป็น <code>["[UNK]"]</code> และจะไม่แยกมันเป็น <code>["b", "##u", "[UNK]"]</code> | |
| นี่เป็นสิ่งหนึ่งที่แตกต่างจาก BPE โดย BPE จะดูที่แต่ละตัวอักษร และถ้าตัวไหนไม่พบใน vocabulary ก็จะถูกคัดว่าเป็น unknown`,Al,x,zl,ls,Ql,as,Pa=`มาดูกันว่า เราจะ implement อัลกอริทึม WordPiece ได้อย่างไร | |
| เช่นเดียวกับตอนที่เราสอนเรื่อง BPE สิ่งที่เราจะสอนต่อไปนี้เป็นเพียงตัวอย่าง เพื่อให้คุณเข้าใจการทำงานของอัลกอริทึม โค้ดที่ได้อาจจะไม่สามารถใช้ได้กับ corpus ใหญ่ๆ | |
| เราจะใช้ corpus ตัวอย่างเดียวกับที่ใช้ในบท BPE :`,Bl,ns,vl,ts,Fa="ก่อนอื่นคุณจะต้อง pre-tokenize corpus เพื่อแยกข้อความเป็นคำๆ เนื่องจากเราจะจำลองการทำงานของ WordPiece tokenizer (เช่น BERT) เราจะใช้ <code>bert-base-cased</code> tokenizer ในการ pre-tokenize",Zl,ps,Nl,es,La="จากนั้นคำนวณความถี่ของแต่ละคำใน corpus :",_l,Ms,El,ys,Sl,is,Ka="เราจะมาสร้างเซ็ตของ alphabet กัน ซึ่งคือเซ็ตที่ประกอบไปด้วยตัวอักษรแรกของแต่ละคำ และอักษรอื่นๆที่ไม่ใช่ตัวแรกจะมีการใส่ <code>##</code> ไว้ข้างหน้า :",Gl,js,Vl,rs,Hl,cs,Oa="เราจะเพิ่ม token พิเศษ เข้าไปด้านหน้าของ list นี้ด้วย สำหรับ BERT คือ <code>["[PAD]", "[UNK]", "[CLS]", "[SEP]", "[MASK]"]</code> :",Xl,Js,Wl,os,sn="จากนั้น เราจะทำการแยกแต่ละคำกัน โดยแยกตัวอักษรแรกออกมา และตัวที่เหลือจะเพิ่ม <code>##</code> ไว้ข้างหน้า :",Rl,Us,Yl,ms,ln="ตอนนี้เราก็พร้อมที่จะเทรนแล้ว เราจะมาเขียนฟังก์ชันเพื่อคำนวณ score ให้แต่ละคู่ tokenกัน :",Dl,Ts,Pl,us,an="มาดูกันว่าผลลัพธ์ที่ได้หลังจากการรันครั้งแรกเป็นอย่างไร :",Fl,hs,Ll,ws,Kl,Is,nn="จากนั้น เราจะหาคู่ที่มี score สูงที่สุด โดยใช้ loop ง่ายๆ ดังนี้ :",Ol,gs,sa,Cs,la,xs,tn="กฎที่ได้จากการเทรนครั้งแรกคือ <code>('a', '##b') -> 'ab'</code> ดังนั้นเราจะเพิ่ม <code>'ab'</code> เข้าไปใน vocabulary :",aa,bs,na,ds,pn="ก่อนที่จะทำต่อ เราจะต้องเพิ่มตัวที่ถูก merge เข้าไปใน dictionary <code>splits</code> ก่อน โดยเราจะเขียนฟังก์ชันเพื่อการคำนวณนี้ :",ta,fs,pa,ks,en="นี่คือผลลัพธ์ของการ merge ครั้งแรก :",ea,qs,Ma,$s,ya,As,Mn="ตอนนี้เราก็มีทุกฟังก์ชันที่จำเป็นสำหรับการเทรนแล้ว เราจะเทรนจนกว่า tokenizer ได้เรียนเกี่ยวกับทุกๆ merge ที่เราต้องการ เราจะตั้งค่าขนาด vocabulary เป็น 70 สำหรับตัวอย่างนี้ :",ia,zs,ja,Qs,yn="มาดูผลลัพธ์ของ vocabulary กัน :",ra,Bs,ca,vs,Ja,Zs,jn="ถ้าเทียบกับ BPE คุณจะเห็นว่า tokenizer ตัวนี้สามารถเรียนเกี่ยวกับคำย่อยได้เร็วกว่านิดหน่อย",oa,b,Ua,Ns,rn=`เมื่อคุณต้องการ tokenize ข้อความใหม่ คุณจะต้องทำการ pre-tokenize ข้อความแล้วจากนั้นจึง tokenize แต่ละคำ ตามหลักการของอัลกอริทึมนี้ | |
| เราจะมองหาคำย่อยที่ยาวที่สุด โดยอ่านจากข้างหน้าคำไปข้างหลัง จากนั้นเราจะแยกคำหลักออกตรงคำย่อยนี้ จากนั้นทำขั้นตอนนี้ซ้ำกับส่วนต่อๆไปของคำนั้น แล้วทำเช่นเดียวกันกับคำต่อไป`,ma,_s,Ta,Es,cn="มาทดลอง tokenize คำที่มีใน vocabulary และอีกคำที่ไม่ได้อยู่ใน vocabulary กัน :",ua,Ss,ha,Gs,wa,Vs,Jn="ตอนนี้เราจะต้องเขียนฟังก์ชันเพื่อ tokenize ข้อความกัน :",Ia,Hs,ga,Xs,on="ทดลองฟังก์ชันของเรากับประโยคตัวอย่าง :",Ca,Ws,xa,Rs,ba,Ys,Un="นี่คือทั้งหมดเกี่ยวกับ WordPiece ในบทถัดไปเราจะมาเรียนเกี่ยวกับ Unigram กัน",da,Ds,fa,Fs,ka;return d=new qa({props:{title:"WordPiece tokenization",local:"wordpiece-tokenization",headingTag:"h1"}}),f=new Qn({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/section6.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter6/section6.ipynb"}]}}),$=new zn({props:{id:"qpv6ms_t_1A"}}),I=new Ls({props:{$$slots:{default:[vn]},$$scope:{ctx:w}}}),A=new qa({props:{title:"Training algorithm",local:"training-algorithm",headingTag:"h2"}}),g=new Ls({props:{warning:!0,$$slots:{default:[Zn]},$$scope:{ctx:w}}}),B=new T({props:{code:"dyUyMCUyMyUyM28lMjAlMjMlMjNyJTIwJTIzJTIzZA==",highlighted:"w ##o ##r ##d",wrap:!1}}),E=new T({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 T({props:{code:"KCUyMmglMjIlMjAlMjIlMjMlMjN1JTIyJTIwJTIyJTIzJTIzZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM2clMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM24lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNuJTIyJTJDJTIwNCklMkMlMjAoJTIyaCUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNnJTIyJTIwJTIyJTIzJTIzcyUyMiUyQyUyMDUp",highlighted:'(<span class="hljs-string">"h"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"h"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#s</span>"</span>, <span class="hljs-number">5</span>)',wrap:!1}}),X=new T({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJoJTIyJTJDJTIwJTIycCUyMiUyQyUyMCUyMiUyMyUyM2clMjIlMkMlMjAlMjIlMjMlMjNuJTIyJTJDJTIwJTIyJTIzJTIzcyUyMiUyQyUyMCUyMiUyMyUyM3UlMjIlMkMlMjAlMjIlMjMlMjNncyUyMiU1RCUwQUNvcnB1cyUzQSUyMCglMjJoJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM2clMjIlMkMlMjAxMCklMkMlMjAoJTIycCUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNnJTIyJTJDJTIwNSklMkMlMjAoJTIycCUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNuJTIyJTJDJTIwMTIpJTJDJTIwKCUyMmIlMjIlMjAlMjIlMjMlMjN1JTIyJTIwJTIyJTIzJTIzbiUyMiUyQyUyMDQpJTJDJTIwKCUyMmglMjIlMjAlMjIlMjMlMjN1JTIyJTIwJTIyJTIzJTIzZ3MlMjIlMkMlMjA1KQ==",highlighted:`Vocabulary: [<span class="hljs-string">"b"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#s</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#gs</span>"</span>] | |
| Corpus: (<span class="hljs-string">"h"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"h"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#gs</span>"</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),Y=new T({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJoJTIyJTJDJTIwJTIycCUyMiUyQyUyMCUyMiUyMyUyM2clMjIlMkMlMjAlMjIlMjMlMjNuJTIyJTJDJTIwJTIyJTIzJTIzcyUyMiUyQyUyMCUyMiUyMyUyM3UlMjIlMkMlMjAlMjIlMjMlMjNncyUyMiUyQyUyMCUyMmh1JTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmh1JTIyJTIwJTIyJTIzJTIzZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM2clMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM24lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHUlMjIlMjAlMjIlMjMlMjNncyUyMiUyQyUyMDUp",highlighted:`Vocabulary: [<span class="hljs-string">"b"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#s</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#gs</span>"</span>, <span class="hljs-string">"hu"</span>] | |
| Corpus: (<span class="hljs-string">"hu"</span> <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"hu"</span> <span class="hljs-string">"#<span class="hljs-subst">#gs</span>"</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),P=new T({props:{code:"Vm9jYWJ1bGFyeSUzQSUyMCU1QiUyMmIlMjIlMkMlMjAlMjJoJTIyJTJDJTIwJTIycCUyMiUyQyUyMCUyMiUyMyUyM2clMjIlMkMlMjAlMjIlMjMlMjNuJTIyJTJDJTIwJTIyJTIzJTIzcyUyMiUyQyUyMCUyMiUyMyUyM3UlMjIlMkMlMjAlMjIlMjMlMjNncyUyMiUyQyUyMCUyMmh1JTIyJTJDJTIwJTIyaHVnJTIyJTVEJTBBQ29ycHVzJTNBJTIwKCUyMmh1ZyUyMiUyQyUyMDEwKSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM2clMjIlMkMlMjA1KSUyQyUyMCglMjJwJTIyJTIwJTIyJTIzJTIzdSUyMiUyMCUyMiUyMyUyM24lMjIlMkMlMjAxMiklMkMlMjAoJTIyYiUyMiUyMCUyMiUyMyUyM3UlMjIlMjAlMjIlMjMlMjNuJTIyJTJDJTIwNCklMkMlMjAoJTIyaHUlMjIlMjAlMjIlMjMlMjNncyUyMiUyQyUyMDUp",highlighted:`Vocabulary: [<span class="hljs-string">"b"</span>, <span class="hljs-string">"h"</span>, <span class="hljs-string">"p"</span>, <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#s</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span>, <span class="hljs-string">"#<span class="hljs-subst">#gs</span>"</span>, <span class="hljs-string">"hu"</span>, <span class="hljs-string">"hug"</span>] | |
| Corpus: (<span class="hljs-string">"hug"</span>, <span class="hljs-number">10</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#g</span>"</span>, <span class="hljs-number">5</span>), (<span class="hljs-string">"p"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-number">12</span>), (<span class="hljs-string">"b"</span> <span class="hljs-string">"#<span class="hljs-subst">#u</span>"</span> <span class="hljs-string">"#<span class="hljs-subst">#n</span>"</span>, <span class="hljs-number">4</span>), (<span class="hljs-string">"hu"</span> <span class="hljs-string">"#<span class="hljs-subst">#gs</span>"</span>, <span class="hljs-number">5</span>)`,wrap:!1}}),C=new Ls({props:{$$slots:{default:[Nn]},$$scope:{ctx:w}}}),L=new qa({props:{title:"Tokenization algorithm",local:"tokenization-algorithm",headingTag:"h2"}}),x=new Ls({props:{$$slots:{default:[_n]},$$scope:{ctx:w}}}),ls=new qa({props:{title:"Implementing WordPiece",local:"implementing-wordpiece",headingTag:"h2"}}),ns=new T({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 T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"bert-base-cased"</span>)`,wrap:!1}}),Ms=new T({props:{code:"ZnJvbSUyMGNvbGxlY3Rpb25zJTIwaW1wb3J0JTIwZGVmYXVsdGRpY3QlMEElMEF3b3JkX2ZyZXFzJTIwJTNEJTIwZGVmYXVsdGRpY3QoaW50KSUwQWZvciUyMHRleHQlMjBpbiUyMGNvcnB1cyUzQSUwQSUyMCUyMCUyMCUyMHdvcmRzX3dpdGhfb2Zmc2V0cyUyMCUzRCUyMHRva2VuaXplci5iYWNrZW5kX3Rva2VuaXplci5wcmVfdG9rZW5pemVyLnByZV90b2tlbml6ZV9zdHIodGV4dCklMEElMjAlMjAlMjAlMjBuZXdfd29yZHMlMjAlM0QlMjAlNUJ3b3JkJTIwZm9yJTIwd29yZCUyQyUyMG9mZnNldCUyMGluJTIwd29yZHNfd2l0aF9vZmZzZXRzJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwd29yZCUyMGluJTIwbmV3X3dvcmRzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd29yZF9mcmVxcyU1QndvcmQlNUQlMjAlMkIlM0QlMjAxJTBBJTBBd29yZF9mcmVxcw==",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> | |
| word_freqs`,wrap:!1}}),ys=new T({props:{code:"ZGVmYXVsdGRpY3QoJTBBJTIwJTIwJTIwJTIwaW50JTJDJTIwJTdCJ1RoaXMnJTNBJTIwMyUyQyUyMCdpcyclM0ElMjAyJTJDJTIwJ3RoZSclM0ElMjAxJTJDJTIwJ0h1Z2dpbmcnJTNBJTIwMSUyQyUyMCdGYWNlJyUzQSUyMDElMkMlMjAnQ291cnNlJyUzQSUyMDElMkMlMjAnLiclM0ElMjA0JTJDJTIwJ2NoYXB0ZXInJTNBJTIwMSUyQyUyMCdhYm91dCclM0ElMjAxJTJDJTBBJTIwJTIwJTIwJTIwJ3Rva2VuaXphdGlvbiclM0ElMjAxJTJDJTIwJ3NlY3Rpb24nJTNBJTIwMSUyQyUyMCdzaG93cyclM0ElMjAxJTJDJTIwJ3NldmVyYWwnJTNBJTIwMSUyQyUyMCd0b2tlbml6ZXInJTNBJTIwMSUyQyUyMCdhbGdvcml0aG1zJyUzQSUyMDElMkMlMjAnSG9wZWZ1bGx5JyUzQSUyMDElMkMlMEElMjAlMjAlMjAlMjAnJTJDJyUzQSUyMDElMkMlMjAneW91JyUzQSUyMDElMkMlMjAnd2lsbCclM0ElMjAxJTJDJTIwJ2JlJyUzQSUyMDElMkMlMjAnYWJsZSclM0ElMjAxJTJDJTIwJ3RvJyUzQSUyMDElMkMlMjAndW5kZXJzdGFuZCclM0ElMjAxJTJDJTIwJ2hvdyclM0ElMjAxJTJDJTIwJ3RoZXknJTNBJTIwMSUyQyUyMCdhcmUnJTNBJTIwMSUyQyUwQSUyMCUyMCUyMCUyMCd0cmFpbmVkJyUzQSUyMDElMkMlMjAnYW5kJyUzQSUyMDElMkMlMjAnZ2VuZXJhdGUnJTNBJTIwMSUyQyUyMCd0b2tlbnMnJTNBJTIwMSU3RCk=",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 T({props:{code:"YWxwaGFiZXQlMjAlM0QlMjAlNUIlNUQlMEFmb3IlMjB3b3JkJTIwaW4lMjB3b3JkX2ZyZXFzLmtleXMoKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwd29yZCU1QjAlNUQlMjBub3QlMjBpbiUyMGFscGhhYmV0JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWxwaGFiZXQuYXBwZW5kKHdvcmQlNUIwJTVEKSUwQSUyMCUyMCUyMCUyMGZvciUyMGxldHRlciUyMGluJTIwd29yZCU1QjElM0ElNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGYlMjIlMjMlMjMlN0JsZXR0ZXIlN0QlMjIlMjBub3QlMjBpbiUyMGFscGhhYmV0JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWxwaGFiZXQuYXBwZW5kKGYlMjIlMjMlMjMlN0JsZXR0ZXIlN0QlMjIpJTBBJTBBYWxwaGFiZXQuc29ydCgpJTBBYWxwaGFiZXQlMEElMEFwcmludChhbHBoYWJldCk=",highlighted:`alphabet = [] | |
| <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs.keys(): | |
| <span class="hljs-keyword">if</span> word[<span class="hljs-number">0</span>] <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> alphabet: | |
| alphabet.append(word[<span class="hljs-number">0</span>]) | |
| <span class="hljs-keyword">for</span> letter <span class="hljs-keyword">in</span> word[<span class="hljs-number">1</span>:]: | |
| <span class="hljs-keyword">if</span> <span class="hljs-string">f"##<span class="hljs-subst">{letter}</span>"</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> alphabet: | |
| alphabet.append(<span class="hljs-string">f"##<span class="hljs-subst">{letter}</span>"</span>) | |
| alphabet.sort() | |
| alphabet | |
| <span class="hljs-built_in">print</span>(alphabet)`,wrap:!1}}),rs=new T({props:{code:"JTVCJyUyMyUyM2EnJTJDJTIwJyUyMyUyM2InJTJDJTIwJyUyMyUyM2MnJTJDJTIwJyUyMyUyM2QnJTJDJTIwJyUyMyUyM2UnJTJDJTIwJyUyMyUyM2YnJTJDJTIwJyUyMyUyM2cnJTJDJTIwJyUyMyUyM2gnJTJDJTIwJyUyMyUyM2knJTJDJTIwJyUyMyUyM2snJTJDJTIwJyUyMyUyM2wnJTJDJTIwJyUyMyUyM20nJTJDJTIwJyUyMyUyM24nJTJDJTIwJyUyMyUyM28nJTJDJTIwJyUyMyUyM3AnJTJDJTIwJyUyMyUyM3InJTJDJTIwJyUyMyUyM3MnJTJDJTBBJTIwJyUyMyUyM3QnJTJDJTIwJyUyMyUyM3UnJTJDJTIwJyUyMyUyM3YnJTJDJTIwJyUyMyUyM3cnJTJDJTIwJyUyMyUyM3knJTJDJTIwJyUyMyUyM3onJTJDJTIwJyUyQyclMkMlMjAnLiclMkMlMjAnQyclMkMlMjAnRiclMkMlMjAnSCclMkMlMjAnVCclMkMlMjAnYSclMkMlMjAnYiclMkMlMjAnYyclMkMlMjAnZyclMkMlMjAnaCclMkMlMjAnaSclMkMlMjAncyclMkMlMjAndCclMkMlMjAndSclMkMlMEElMjAndyclMkMlMjAneSclNUQ=",highlighted:`[<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">'.'</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">'g'</span>, <span class="hljs-string">'h'</span>, <span class="hljs-string">'i'</span>, <span class="hljs-string">'s'</span>, <span class="hljs-string">'t'</span>, <span class="hljs-string">'u'</span>, | |
| <span class="hljs-string">'w'</span>, <span class="hljs-string">'y'</span>]`,wrap:!1}}),Js=new T({props:{code:"dm9jYWIlMjAlM0QlMjAlNUIlMjIlNUJQQUQlNUQlMjIlMkMlMjAlMjIlNUJVTkslNUQlMjIlMkMlMjAlMjIlNUJDTFMlNUQlMjIlMkMlMjAlMjIlNUJTRVAlNUQlMjIlMkMlMjAlMjIlNUJNQVNLJTVEJTIyJTVEJTIwJTJCJTIwYWxwaGFiZXQuY29weSgp",highlighted:'vocab = [<span class="hljs-string">"[PAD]"</span>, <span class="hljs-string">"[UNK]"</span>, <span class="hljs-string">"[CLS]"</span>, <span class="hljs-string">"[SEP]"</span>, <span class="hljs-string">"[MASK]"</span>] + alphabet.copy()',wrap:!1}}),Us=new T({props:{code:"c3BsaXRzJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwd29yZCUzQSUyMCU1QmMlMjBpZiUyMGklMjAlM0QlM0QlMjAwJTIwZWxzZSUyMGYlMjIlMjMlMjMlN0JjJTdEJTIyJTIwZm9yJTIwaSUyQyUyMGMlMjBpbiUyMGVudW1lcmF0ZSh3b3JkKSU1RCUwQSUyMCUyMCUyMCUyMGZvciUyMHdvcmQlMjBpbiUyMHdvcmRfZnJlcXMua2V5cygpJTBBJTdE",highlighted:`splits = { | |
| word: [c <span class="hljs-keyword">if</span> i == <span class="hljs-number">0</span> <span class="hljs-keyword">else</span> <span class="hljs-string">f"##<span class="hljs-subst">{c}</span>"</span> <span class="hljs-keyword">for</span> i, c <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(word)] | |
| <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> word_freqs.keys() | |
| }`,wrap:!1}}),Ts=new T({props:{code:"ZGVmJTIwY29tcHV0ZV9wYWlyX3Njb3JlcyhzcGxpdHMpJTNBJTBBJTIwJTIwJTIwJTIwbGV0dGVyX2ZyZXFzJTIwJTNEJTIwZGVmYXVsdGRpY3QoaW50KSUwQSUyMCUyMCUyMCUyMHBhaXJfZnJlcXMlMjAlM0QlMjBkZWZhdWx0ZGljdChpbnQpJTBBJTIwJTIwJTIwJTIwZm9yJTIwd29yZCUyQyUyMGZyZXElMjBpbiUyMHdvcmRfZnJlcXMuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNwbGl0JTIwJTNEJTIwc3BsaXRzJTVCd29yZCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGVuKHNwbGl0KSUyMCUzRCUzRCUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsZXR0ZXJfZnJlcXMlNUJzcGxpdCU1QjAlNUQlNUQlMjAlMkIlM0QlMjBmcmVxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4oc3BsaXQpJTIwLSUyMDEpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcGFpciUyMCUzRCUyMChzcGxpdCU1QmklNUQlMkMlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxldHRlcl9mcmVxcyU1QnNwbGl0JTVCaSU1RCU1RCUyMCUyQiUzRCUyMGZyZXElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwYWlyX2ZyZXFzJTVCcGFpciU1RCUyMCUyQiUzRCUyMGZyZXElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsZXR0ZXJfZnJlcXMlNUJzcGxpdCU1Qi0xJTVEJTVEJTIwJTJCJTNEJTIwZnJlcSUwQSUwQSUyMCUyMCUyMCUyMHNjb3JlcyUyMCUzRCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHBhaXIlM0ElMjBmcmVxJTIwJTJGJTIwKGxldHRlcl9mcmVxcyU1QnBhaXIlNUIwJTVEJTVEJTIwKiUyMGxldHRlcl9mcmVxcyU1QnBhaXIlNUIxJTVEJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMHBhaXIlMkMlMjBmcmVxJTIwaW4lMjBwYWlyX2ZyZXFzLml0ZW1zKCklMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBzY29yZXM=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_pair_scores</span>(<span class="hljs-params">splits</span>): | |
| letter_freqs = defaultdict(<span class="hljs-built_in">int</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>: | |
| letter_freqs[split[<span class="hljs-number">0</span>]] += freq | |
| <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>]) | |
| letter_freqs[split[i]] += freq | |
| pair_freqs[pair] += freq | |
| letter_freqs[split[-<span class="hljs-number">1</span>]] += freq | |
| scores = { | |
| pair: freq / (letter_freqs[pair[<span class="hljs-number">0</span>]] * letter_freqs[pair[<span class="hljs-number">1</span>]]) | |
| <span class="hljs-keyword">for</span> pair, freq <span class="hljs-keyword">in</span> pair_freqs.items() | |
| } | |
| <span class="hljs-keyword">return</span> scores`,wrap:!1}}),hs=new T({props:{code:"cGFpcl9zY29yZXMlMjAlM0QlMjBjb21wdXRlX3BhaXJfc2NvcmVzKHNwbGl0cyklMEFmb3IlMjBpJTJDJTIwa2V5JTIwaW4lMjBlbnVtZXJhdGUocGFpcl9zY29yZXMua2V5cygpKSUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlN0JrZXklN0QlM0ElMjAlN0JwYWlyX3Njb3JlcyU1QmtleSU1RCU3RCUyMiklMEElMjAlMjAlMjAlMjBpZiUyMGklMjAlM0UlM0QlMjA1JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYnJlYWs=",highlighted:`pair_scores = compute_pair_scores(splits) | |
| <span class="hljs-keyword">for</span> i, key <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(pair_scores.keys()): | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">f"<span class="hljs-subst">{key}</span>: <span class="hljs-subst">{pair_scores[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 T({props:{code:"KCdUJyUyQyUyMCclMjMlMjNoJyklM0ElMjAwLjEyNSUwQSgnJTIzJTIzaCclMkMlMjAnJTIzJTIzaScpJTNBJTIwMC4wMzQwOTA5MDkwOTA5MDkwOSUwQSgnJTIzJTIzaSclMkMlMjAnJTIzJTIzcycpJTNBJTIwMC4wMjcyNzI3MjcyNzI3MjcyNyUwQSgnaSclMkMlMjAnJTIzJTIzcycpJTNBJTIwMC4xJTBBKCd0JyUyQyUyMCclMjMlMjNoJyklM0ElMjAwLjAzNTcxNDI4NTcxNDI4NTcxJTBBKCclMjMlMjNoJyUyQyUyMCclMjMlMjNlJyklM0ElMjAwLjAxMTkwNDc2MTkwNDc2MTkwNA==",highlighted:`(<span class="hljs-string">'T'</span>, <span class="hljs-string">'##h'</span>): <span class="hljs-number">0.125</span> | |
| (<span class="hljs-string">'##h'</span>, <span class="hljs-string">'##i'</span>): <span class="hljs-number">0.03409090909090909</span> | |
| (<span class="hljs-string">'##i'</span>, <span class="hljs-string">'##s'</span>): <span class="hljs-number">0.02727272727272727</span> | |
| (<span class="hljs-string">'i'</span>, <span class="hljs-string">'##s'</span>): <span class="hljs-number">0.1</span> | |
| (<span class="hljs-string">'t'</span>, <span class="hljs-string">'##h'</span>): <span class="hljs-number">0.03571428571428571</span> | |
| (<span class="hljs-string">'##h'</span>, <span class="hljs-string">'##e'</span>): <span class="hljs-number">0.011904761904761904</span>`,wrap:!1}}),gs=new T({props:{code:"YmVzdF9wYWlyJTIwJTNEJTIwJTIyJTIyJTBBbWF4X3Njb3JlJTIwJTNEJTIwTm9uZSUwQWZvciUyMHBhaXIlMkMlMjBzY29yZSUyMGluJTIwcGFpcl9zY29yZXMuaXRlbXMoKSUzQSUwQSUyMCUyMCUyMCUyMGlmJTIwbWF4X3Njb3JlJTIwaXMlMjBOb25lJTIwb3IlMjBtYXhfc2NvcmUlMjAlM0MlMjBzY29yZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGJlc3RfcGFpciUyMCUzRCUyMHBhaXIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXhfc2NvcmUlMjAlM0QlMjBzY29yZSUwQSUwQXByaW50KGJlc3RfcGFpciUyQyUyMG1heF9zY29yZSk=",highlighted:`best_pair = <span class="hljs-string">""</span> | |
| max_score = <span class="hljs-literal">None</span> | |
| <span class="hljs-keyword">for</span> pair, score <span class="hljs-keyword">in</span> pair_scores.items(): | |
| <span class="hljs-keyword">if</span> max_score <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> max_score < score: | |
| best_pair = pair | |
| max_score = score | |
| <span class="hljs-built_in">print</span>(best_pair, max_score)`,wrap:!1}}),Cs=new T({props:{code:"KCdhJyUyQyUyMCclMjMlMjNiJyklMjAwLjI=",highlighted:'(<span class="hljs-string">'a'</span>, <span class="hljs-string">'##b'</span>) <span class="hljs-number">0.2</span>',wrap:!1}}),bs=new T({props:{code:"dm9jYWIuYXBwZW5kKCUyMmFiJTIyKQ==",highlighted:'vocab.append(<span class="hljs-string">"ab"</span>)',wrap:!1}}),fs=new T({props:{code:"ZGVmJTIwbWVyZ2VfcGFpcihhJTJDJTIwYiUyQyUyMHNwbGl0cyklM0ElMEElMjAlMjAlMjAlMjBmb3IlMjB3b3JkJTIwaW4lMjB3b3JkX2ZyZXFzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3BsaXQlMjAlM0QlMjBzcGxpdHMlNUJ3b3JkJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsZW4oc3BsaXQpJTIwJTNEJTNEJTIwMSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbnRpbnVlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaSUyMCUzRCUyMDAlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3aGlsZSUyMGklMjAlM0MlMjBsZW4oc3BsaXQpJTIwLSUyMDElM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHNwbGl0JTVCaSU1RCUyMCUzRCUzRCUyMGElMjBhbmQlMjBzcGxpdCU1QmklMjAlMkIlMjAxJTVEJTIwJTNEJTNEJTIwYiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1lcmdlJTIwJTNEJTIwYSUyMCUyQiUyMGIlNUIyJTNBJTVEJTIwaWYlMjBiLnN0YXJ0c3dpdGgoJTIyJTIzJTIzJTIyKSUyMGVsc2UlMjBhJTIwJTJCJTIwYiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHNwbGl0JTIwJTNEJTIwc3BsaXQlNUIlM0FpJTVEJTIwJTJCJTIwJTVCbWVyZ2UlNUQlMjAlMkIlMjBzcGxpdCU1QmklMjAlMkIlMjAyJTIwJTNBJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGklMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc3BsaXRzJTVCd29yZCU1RCUyMCUzRCUyMHNwbGl0JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwc3BsaXRz",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: | |
| merge = a + b[<span class="hljs-number">2</span>:] <span class="hljs-keyword">if</span> b.startswith(<span class="hljs-string">"##"</span>) <span class="hljs-keyword">else</span> a + b | |
| 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[word] = split | |
| <span class="hljs-keyword">return</span> splits`,wrap:!1}}),qs=new T({props:{code:"c3BsaXRzJTIwJTNEJTIwbWVyZ2VfcGFpciglMjJhJTIyJTJDJTIwJTIyJTIzJTIzYiUyMiUyQyUyMHNwbGl0cyklMEFzcGxpdHMlNUIlMjJhYm91dCUyMiU1RA==",highlighted:`splits = merge_pair(<span class="hljs-string">"a"</span>, <span class="hljs-string">"##b"</span>, splits) | |
| splits[<span class="hljs-string">"about"</span>]`,wrap:!1}}),$s=new T({props:{code:"JTVCJ2FiJyUyQyUyMCclMjMlMjNvJyUyQyUyMCclMjMlMjN1JyUyQyUyMCclMjMlMjN0JyU1RA==",highlighted:'[<span class="hljs-string">'ab'</span>, <span class="hljs-string">'##o'</span>, <span class="hljs-string">'##u'</span>, <span class="hljs-string">'##t'</span>]',wrap:!1}}),zs=new T({props:{code:"dm9jYWJfc2l6ZSUyMCUzRCUyMDcwJTBBd2hpbGUlMjBsZW4odm9jYWIpJTIwJTNDJTIwdm9jYWJfc2l6ZSUzQSUwQSUyMCUyMCUyMCUyMHNjb3JlcyUyMCUzRCUyMGNvbXB1dGVfcGFpcl9zY29yZXMoc3BsaXRzKSUwQSUyMCUyMCUyMCUyMGJlc3RfcGFpciUyQyUyMG1heF9zY29yZSUyMCUzRCUyMCUyMiUyMiUyQyUyME5vbmUlMEElMjAlMjAlMjAlMjBmb3IlMjBwYWlyJTJDJTIwc2NvcmUlMjBpbiUyMHNjb3Jlcy5pdGVtcygpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBtYXhfc2NvcmUlMjBpcyUyME5vbmUlMjBvciUyMG1heF9zY29yZSUyMCUzQyUyMHNjb3JlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYmVzdF9wYWlyJTIwJTNEJTIwcGFpciUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1heF9zY29yZSUyMCUzRCUyMHNjb3JlJTBBJTIwJTIwJTIwJTIwc3BsaXRzJTIwJTNEJTIwbWVyZ2VfcGFpcigqYmVzdF9wYWlyJTJDJTIwc3BsaXRzKSUwQSUyMCUyMCUyMCUyMG5ld190b2tlbiUyMCUzRCUyMCglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBiZXN0X3BhaXIlNUIwJTVEJTIwJTJCJTIwYmVzdF9wYWlyJTVCMSU1RCU1QjIlM0ElNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMGJlc3RfcGFpciU1QjElNUQuc3RhcnRzd2l0aCglMjIlMjMlMjMlMjIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZWxzZSUyMGJlc3RfcGFpciU1QjAlNUQlMjAlMkIlMjBiZXN0X3BhaXIlNUIxJTVEJTBBJTIwJTIwJTIwJTIwKSUwQSUyMCUyMCUyMCUyMHZvY2FiLmFwcGVuZChuZXdfdG9rZW4p",highlighted:`vocab_size = <span class="hljs-number">70</span> | |
| <span class="hljs-keyword">while</span> <span class="hljs-built_in">len</span>(vocab) < vocab_size: | |
| scores = compute_pair_scores(splits) | |
| best_pair, max_score = <span class="hljs-string">""</span>, <span class="hljs-literal">None</span> | |
| <span class="hljs-keyword">for</span> pair, score <span class="hljs-keyword">in</span> scores.items(): | |
| <span class="hljs-keyword">if</span> max_score <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">or</span> max_score < score: | |
| best_pair = pair | |
| max_score = score | |
| splits = merge_pair(*best_pair, splits) | |
| new_token = ( | |
| best_pair[<span class="hljs-number">0</span>] + best_pair[<span class="hljs-number">1</span>][<span class="hljs-number">2</span>:] | |
| <span class="hljs-keyword">if</span> best_pair[<span class="hljs-number">1</span>].startswith(<span class="hljs-string">"##"</span>) | |
| <span class="hljs-keyword">else</span> best_pair[<span class="hljs-number">0</span>] + best_pair[<span class="hljs-number">1</span>] | |
| ) | |
| vocab.append(new_token)`,wrap:!1}}),Bs=new T({props:{code:"cHJpbnQodm9jYWIp",highlighted:'<span class="hljs-built_in">print</span>(vocab)',wrap:!1}}),vs=new T({props:{code:"JTVCJyU1QlBBRCU1RCclMkMlMjAnJTVCVU5LJTVEJyUyQyUyMCclNUJDTFMlNUQnJTJDJTIwJyU1QlNFUCU1RCclMkMlMjAnJTVCTUFTSyU1RCclMkMlMjAnJTIzJTIzYSclMkMlMjAnJTIzJTIzYiclMkMlMjAnJTIzJTIzYyclMkMlMjAnJTIzJTIzZCclMkMlMjAnJTIzJTIzZSclMkMlMjAnJTIzJTIzZiclMkMlMjAnJTIzJTIzZyclMkMlMjAnJTIzJTIzaCclMkMlMjAnJTIzJTIzaSclMkMlMjAnJTIzJTIzayclMkMlMEElMjAnJTIzJTIzbCclMkMlMjAnJTIzJTIzbSclMkMlMjAnJTIzJTIzbiclMkMlMjAnJTIzJTIzbyclMkMlMjAnJTIzJTIzcCclMkMlMjAnJTIzJTIzciclMkMlMjAnJTIzJTIzcyclMkMlMjAnJTIzJTIzdCclMkMlMjAnJTIzJTIzdSclMkMlMjAnJTIzJTIzdiclMkMlMjAnJTIzJTIzdyclMkMlMjAnJTIzJTIzeSclMkMlMjAnJTIzJTIzeiclMkMlMjAnJTJDJyUyQyUyMCcuJyUyQyUyMCdDJyUyQyUyMCdGJyUyQyUyMCdIJyUyQyUwQSUyMCdUJyUyQyUyMCdhJyUyQyUyMCdiJyUyQyUyMCdjJyUyQyUyMCdnJyUyQyUyMCdoJyUyQyUyMCdpJyUyQyUyMCdzJyUyQyUyMCd0JyUyQyUyMCd1JyUyQyUyMCd3JyUyQyUyMCd5JyUyQyUyMCclMjMlMjNmdSclMkMlMjAnRmEnJTJDJTIwJ0ZhYyclMkMlMjAnJTIzJTIzY3QnJTJDJTIwJyUyMyUyM2Z1bCclMkMlMjAnJTIzJTIzZnVsbCclMkMlMjAnJTIzJTIzZnVsbHknJTJDJTBBJTIwJ1RoJyUyQyUyMCdjaCclMkMlMjAnJTIzJTIzaG0nJTJDJTIwJ2NoYSclMkMlMjAnY2hhcCclMkMlMjAnY2hhcHQnJTJDJTIwJyUyMyUyM3RobSclMkMlMjAnSHUnJTJDJTIwJ0h1ZyclMkMlMjAnSHVnZyclMkMlMjAnc2gnJTJDJTIwJ3RoJyUyQyUyMCdpcyclMkMlMjAnJTIzJTIzdGhtcyclMkMlMjAnJTIzJTIzemEnJTJDJTIwJyUyMyUyM3phdCclMkMlMEElMjAnJTIzJTIzdXQnJTVE",highlighted:`[<span class="hljs-string">'[PAD]'</span>, <span class="hljs-string">'[UNK]'</span>, <span class="hljs-string">'[CLS]'</span>, <span class="hljs-string">'[SEP]'</span>, <span class="hljs-string">'[MASK]'</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">'.'</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">'g'</span>, <span class="hljs-string">'h'</span>, <span class="hljs-string">'i'</span>, <span class="hljs-string">'s'</span>, <span class="hljs-string">'t'</span>, <span class="hljs-string">'u'</span>, <span class="hljs-string">'w'</span>, <span class="hljs-string">'y'</span>, <span class="hljs-string">'##fu'</span>, <span class="hljs-string">'Fa'</span>, <span class="hljs-string">'Fac'</span>, <span class="hljs-string">'##ct'</span>, <span class="hljs-string">'##ful'</span>, <span class="hljs-string">'##full'</span>, <span class="hljs-string">'##fully'</span>, | |
| <span class="hljs-string">'Th'</span>, <span class="hljs-string">'ch'</span>, <span class="hljs-string">'##hm'</span>, <span class="hljs-string">'cha'</span>, <span class="hljs-string">'chap'</span>, <span class="hljs-string">'chapt'</span>, <span class="hljs-string">'##thm'</span>, <span class="hljs-string">'Hu'</span>, <span class="hljs-string">'Hug'</span>, <span class="hljs-string">'Hugg'</span>, <span class="hljs-string">'sh'</span>, <span class="hljs-string">'th'</span>, <span class="hljs-string">'is'</span>, <span class="hljs-string">'##thms'</span>, <span class="hljs-string">'##za'</span>, <span class="hljs-string">'##zat'</span>, | |
| <span class="hljs-string">'##ut'</span>]`,wrap:!1}}),b=new Ls({props:{$$slots:{default:[En]},$$scope:{ctx:w}}}),_s=new T({props:{code:"ZGVmJTIwZW5jb2RlX3dvcmQod29yZCklM0ElMEElMjAlMjAlMjAlMjB0b2tlbnMlMjAlM0QlMjAlNUIlNUQlMEElMjAlMjAlMjAlMjB3aGlsZSUyMGxlbih3b3JkKSUyMCUzRSUyMDAlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpJTIwJTNEJTIwbGVuKHdvcmQpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2hpbGUlMjBpJTIwJTNFJTIwMCUyMGFuZCUyMHdvcmQlNUIlM0FpJTVEJTIwbm90JTIwaW4lMjB2b2NhYiUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGklMjAtJTNEJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwaSUyMCUzRCUzRCUyMDAlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXR1cm4lMjAlNUIlMjIlNUJVTkslNUQlMjIlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0b2tlbnMuYXBwZW5kKHdvcmQlNUIlM0FpJTVEKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdvcmQlMjAlM0QlMjB3b3JkJTVCaSUzQSU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwbGVuKHdvcmQpJTIwJTNFJTIwMCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdvcmQlMjAlM0QlMjBmJTIyJTIzJTIzJTdCd29yZCU3RCUyMiUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHRva2Vucw==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">encode_word</span>(<span class="hljs-params">word</span>): | |
| tokens = [] | |
| <span class="hljs-keyword">while</span> <span class="hljs-built_in">len</span>(word) > <span class="hljs-number">0</span>: | |
| i = <span class="hljs-built_in">len</span>(word) | |
| <span class="hljs-keyword">while</span> i > <span class="hljs-number">0</span> <span class="hljs-keyword">and</span> word[:i] <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> vocab: | |
| i -= <span class="hljs-number">1</span> | |
| <span class="hljs-keyword">if</span> i == <span class="hljs-number">0</span>: | |
| <span class="hljs-keyword">return</span> [<span class="hljs-string">"[UNK]"</span>] | |
| tokens.append(word[:i]) | |
| word = word[i:] | |
| <span class="hljs-keyword">if</span> <span class="hljs-built_in">len</span>(word) > <span class="hljs-number">0</span>: | |
| word = <span class="hljs-string">f"##<span class="hljs-subst">{word}</span>"</span> | |
| <span class="hljs-keyword">return</span> tokens`,wrap:!1}}),Ss=new T({props:{code:"cHJpbnQoZW5jb2RlX3dvcmQoJTIySHVnZ2luZyUyMikpJTBBcHJpbnQoZW5jb2RlX3dvcmQoJTIySE9nZ2luZyUyMikp",highlighted:`<span class="hljs-built_in">print</span>(encode_word(<span class="hljs-string">"Hugging"</span>)) | |
| <span class="hljs-built_in">print</span>(encode_word(<span class="hljs-string">"HOgging"</span>))`,wrap:!1}}),Gs=new T({props:{code:"JTVCJ0h1Z2cnJTJDJTIwJyUyMyUyM2knJTJDJTIwJyUyMyUyM24nJTJDJTIwJyUyMyUyM2cnJTVEJTBBJTVCJyU1QlVOSyU1RCclNUQ=",highlighted:`[<span class="hljs-string">'Hugg'</span>, <span class="hljs-string">'##i'</span>, <span class="hljs-string">'##n'</span>, <span class="hljs-string">'##g'</span>] | |
| [<span class="hljs-string">'[UNK]'</span>]`,wrap:!1}}),Hs=new T({props:{code:"ZGVmJTIwdG9rZW5pemUodGV4dCklM0ElMEElMjAlMjAlMjAlMjBwcmVfdG9rZW5pemVfcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyLl90b2tlbml6ZXIucHJlX3Rva2VuaXplci5wcmVfdG9rZW5pemVfc3RyKHRleHQpJTBBJTIwJTIwJTIwJTIwcHJlX3Rva2VuaXplZF90ZXh0JTIwJTNEJTIwJTVCd29yZCUyMGZvciUyMHdvcmQlMkMlMjBvZmZzZXQlMjBpbiUyMHByZV90b2tlbml6ZV9yZXN1bHQlNUQlMEElMjAlMjAlMjAlMjBlbmNvZGVkX3dvcmRzJTIwJTNEJTIwJTVCZW5jb2RlX3dvcmQod29yZCklMjBmb3IlMjB3b3JkJTIwaW4lMjBwcmVfdG9rZW5pemVkX3RleHQlNUQlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBzdW0oZW5jb2RlZF93b3JkcyUyQyUyMCU1QiU1RCk=",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] | |
| encoded_words = [encode_word(word) <span class="hljs-keyword">for</span> word <span class="hljs-keyword">in</span> pre_tokenized_text] | |
| <span class="hljs-keyword">return</span> <span class="hljs-built_in">sum</span>(encoded_words, [])`,wrap:!1}}),Ws=new T({props:{code:"dG9rZW5pemUoJTIyVGhpcyUyMGlzJTIwdGhlJTIwSHVnZ2luZyUyMEZhY2UlMjBjb3Vyc2UhJTIyKQ==",highlighted:'tokenize(<span class="hljs-string">"This is the Hugging Face course!"</span>)',wrap:!1}}),Rs=new T({props:{code:"JTVCJ1RoJyUyQyUyMCclMjMlMjNpJyUyQyUyMCclMjMlMjNzJyUyQyUyMCdpcyclMkMlMjAndGgnJTJDJTIwJyUyMyUyM2UnJTJDJTIwJ0h1Z2cnJTJDJTIwJyUyMyUyM2knJTJDJTIwJyUyMyUyM24nJTJDJTIwJyUyMyUyM2cnJTJDJTIwJ0ZhYyclMkMlMjAnJTIzJTIzZSclMkMlMjAnYyclMkMlMjAnJTIzJTIzbyclMkMlMjAnJTIzJTIzdSclMkMlMjAnJTIzJTIzciclMkMlMjAnJTIzJTIzcyclMkMlMEElMjAnJTIzJTIzZSclMkMlMjAnJTVCVU5LJTVEJyU1RA==",highlighted:`[<span class="hljs-string">'Th'</span>, <span class="hljs-string">'##i'</span>, <span class="hljs-string">'##s'</span>, <span class="hljs-string">'is'</span>, <span class="hljs-string">'th'</span>, <span class="hljs-string">'##e'</span>, <span class="hljs-string">'Hugg'</span>, <span class="hljs-string">'##i'</span>, <span class="hljs-string">'##n'</span>, <span class="hljs-string">'##g'</span>, <span class="hljs-string">'Fac'</span>, <span class="hljs-string">'##e'</span>, <span class="hljs-string">'c'</span>, <span class="hljs-string">'##o'</span>, <span class="hljs-string">'##u'</span>, <span class="hljs-string">'##r'</span>, <span class="hljs-string">'##s'</span>, | |
| <span class="hljs-string">'##e'</span>, <span class="hljs-string">'[UNK]'</span>]`,wrap:!1}}),Ds=new Bn({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter6/6.mdx"}}),{c(){e=M("meta"),u=t(),m=M("p"),h=t(),i(d.$$.fragment),Os=t(),i(f.$$.fragment),sl=t(),k=M("p"),k.textContent=za,ll=t(),q=M("p"),q.textContent=Qa,al=t(),i($.$$.fragment),nl=t(),i(I.$$.fragment),tl=t(),i(A.$$.fragment),pl=t(),i(g.$$.fragment),el=t(),z=M("p"),z.innerHTML=Ba,Ml=t(),Q=M("p"),Q.innerHTML=va,yl=t(),i(B.$$.fragment),il=t(),v=M("p"),v.textContent=Za,jl=t(),Z=M("p"),$a=fn(`เช่นเดียวกันกับ BPE เป้าหมายในการเทรน WordPiece คือเรียนกฎเพื่อการ merge แต่ความแตกต่างคือหลักการในการเลือกคู่ token ที่จะนำมา merge แทนที่จะเลือกคู่ที่พบบ่อยที่สุด WordPiece จะคำนวณ score ให้แต่ละคู่ โดยใช้สูตรต่อไปนี้ | |
| `),rl=new kn(!1),cl=t(),N=M("p"),N.innerHTML=Na,Jl=t(),_=M("p"),_.textContent=_a,ol=t(),i(E.$$.fragment),Ul=t(),S=M("p"),S.textContent=Ea,ml=t(),i(G.$$.fragment),Tl=t(),V=M("p"),V.innerHTML=Sa,ul=t(),H=M("p"),H.innerHTML=Ga,hl=t(),i(X.$$.fragment),wl=t(),W=M("p"),W.innerHTML=Va,Il=t(),R=M("p"),R.innerHTML=Ha,gl=t(),i(Y.$$.fragment),Cl=t(),D=M("p"),D.innerHTML=Xa,xl=t(),i(P.$$.fragment),bl=t(),F=M("p"),F.textContent=Wa,dl=t(),i(C.$$.fragment),fl=t(),i(L.$$.fragment),kl=t(),K=M("p"),K.innerHTML=Ra,ql=t(),O=M("p"),O.innerHTML=Ya,$l=t(),ss=M("p"),ss.innerHTML=Da,Al=t(),i(x.$$.fragment),zl=t(),i(ls.$$.fragment),Ql=t(),as=M("p"),as.textContent=Pa,Bl=t(),i(ns.$$.fragment),vl=t(),ts=M("p"),ts.innerHTML=Fa,Zl=t(),i(ps.$$.fragment),Nl=t(),es=M("p"),es.textContent=La,_l=t(),i(Ms.$$.fragment),El=t(),i(ys.$$.fragment),Sl=t(),is=M("p"),is.innerHTML=Ka,Gl=t(),i(js.$$.fragment),Vl=t(),i(rs.$$.fragment),Hl=t(),cs=M("p"),cs.innerHTML=Oa,Xl=t(),i(Js.$$.fragment),Wl=t(),os=M("p"),os.innerHTML=sn,Rl=t(),i(Us.$$.fragment),Yl=t(),ms=M("p"),ms.textContent=ln,Dl=t(),i(Ts.$$.fragment),Pl=t(),us=M("p"),us.textContent=an,Fl=t(),i(hs.$$.fragment),Ll=t(),i(ws.$$.fragment),Kl=t(),Is=M("p"),Is.textContent=nn,Ol=t(),i(gs.$$.fragment),sa=t(),i(Cs.$$.fragment),la=t(),xs=M("p"),xs.innerHTML=tn,aa=t(),i(bs.$$.fragment),na=t(),ds=M("p"),ds.innerHTML=pn,ta=t(),i(fs.$$.fragment),pa=t(),ks=M("p"),ks.textContent=en,ea=t(),i(qs.$$.fragment),Ma=t(),i($s.$$.fragment),ya=t(),As=M("p"),As.textContent=Mn,ia=t(),i(zs.$$.fragment),ja=t(),Qs=M("p"),Qs.textContent=yn,ra=t(),i(Bs.$$.fragment),ca=t(),i(vs.$$.fragment),Ja=t(),Zs=M("p"),Zs.textContent=jn,oa=t(),i(b.$$.fragment),Ua=t(),Ns=M("p"),Ns.textContent=rn,ma=t(),i(_s.$$.fragment),Ta=t(),Es=M("p"),Es.textContent=cn,ua=t(),i(Ss.$$.fragment),ha=t(),i(Gs.$$.fragment),wa=t(),Vs=M("p"),Vs.textContent=Jn,Ia=t(),i(Hs.$$.fragment),ga=t(),Xs=M("p"),Xs.textContent=on,Ca=t(),i(Ws.$$.fragment),xa=t(),i(Rs.$$.fragment),ba=t(),Ys=M("p"),Ys.textContent=Un,da=t(),i(Ds.$$.fragment),fa=t(),Fs=M("p"),this.h()},l(s){const l=qn("svelte-u9bgzb",document.head);e=y(l,"META",{name:!0,content:!0}),l.forEach(a),u=p(s),m=y(s,"P",{}),Aa(m).forEach(a),h=p(s),j(d.$$.fragment,s),Os=p(s),j(f.$$.fragment,s),sl=p(s),k=y(s,"P",{"data-svelte-h":!0}),U(k)!=="svelte-s8wvje"&&(k.textContent=za),ll=p(s),q=y(s,"P",{"data-svelte-h":!0}),U(q)!=="svelte-ssh6vl"&&(q.textContent=Qa),al=p(s),j($.$$.fragment,s),nl=p(s),j(I.$$.fragment,s),tl=p(s),j(A.$$.fragment,s),pl=p(s),j(g.$$.fragment,s),el=p(s),z=y(s,"P",{"data-svelte-h":!0}),U(z)!=="svelte-1xzcaw9"&&(z.innerHTML=Ba),Ml=p(s),Q=y(s,"P",{"data-svelte-h":!0}),U(Q)!=="svelte-18px92m"&&(Q.innerHTML=va),yl=p(s),j(B.$$.fragment,s),il=p(s),v=y(s,"P",{"data-svelte-h":!0}),U(v)!=="svelte-1b9hozx"&&(v.textContent=Za),jl=p(s),Z=y(s,"P",{});var Ps=Aa(Z);$a=$n(Ps,`เช่นเดียวกันกับ BPE เป้าหมายในการเทรน WordPiece คือเรียนกฎเพื่อการ merge แต่ความแตกต่างคือหลักการในการเลือกคู่ token ที่จะนำมา merge แทนที่จะเลือกคู่ที่พบบ่อยที่สุด WordPiece จะคำนวณ score ให้แต่ละคู่ โดยใช้สูตรต่อไปนี้ | |
| `),rl=An(Ps,!1),Ps.forEach(a),cl=p(s),N=y(s,"P",{"data-svelte-h":!0}),U(N)!=="svelte-g0e99l"&&(N.innerHTML=Na),Jl=p(s),_=y(s,"P",{"data-svelte-h":!0}),U(_)!=="svelte-1ywco0h"&&(_.textContent=_a),ol=p(s),j(E.$$.fragment,s),Ul=p(s),S=y(s,"P",{"data-svelte-h":!0}),U(S)!=="svelte-6hyjif"&&(S.textContent=Ea),ml=p(s),j(G.$$.fragment,s),Tl=p(s),V=y(s,"P",{"data-svelte-h":!0}),U(V)!=="svelte-10hsbw2"&&(V.innerHTML=Sa),ul=p(s),H=y(s,"P",{"data-svelte-h":!0}),U(H)!=="svelte-1uqyw2y"&&(H.innerHTML=Ga),hl=p(s),j(X.$$.fragment,s),wl=p(s),W=y(s,"P",{"data-svelte-h":!0}),U(W)!=="svelte-1xgh5rw"&&(W.innerHTML=Va),Il=p(s),R=y(s,"P",{"data-svelte-h":!0}),U(R)!=="svelte-1kgvvw9"&&(R.innerHTML=Ha),gl=p(s),j(Y.$$.fragment,s),Cl=p(s),D=y(s,"P",{"data-svelte-h":!0}),U(D)!=="svelte-1bf7daq"&&(D.innerHTML=Xa),xl=p(s),j(P.$$.fragment,s),bl=p(s),F=y(s,"P",{"data-svelte-h":!0}),U(F)!=="svelte-rselkw"&&(F.textContent=Wa),dl=p(s),j(C.$$.fragment,s),fl=p(s),j(L.$$.fragment,s),kl=p(s),K=y(s,"P",{"data-svelte-h":!0}),U(K)!=="svelte-1ergz1y"&&(K.innerHTML=Ra),ql=p(s),O=y(s,"P",{"data-svelte-h":!0}),U(O)!=="svelte-oxstdp"&&(O.innerHTML=Ya),$l=p(s),ss=y(s,"P",{"data-svelte-h":!0}),U(ss)!=="svelte-akd6a0"&&(ss.innerHTML=Da),Al=p(s),j(x.$$.fragment,s),zl=p(s),j(ls.$$.fragment,s),Ql=p(s),as=y(s,"P",{"data-svelte-h":!0}),U(as)!=="svelte-rd9398"&&(as.textContent=Pa),Bl=p(s),j(ns.$$.fragment,s),vl=p(s),ts=y(s,"P",{"data-svelte-h":!0}),U(ts)!=="svelte-1e3v7ug"&&(ts.innerHTML=Fa),Zl=p(s),j(ps.$$.fragment,s),Nl=p(s),es=y(s,"P",{"data-svelte-h":!0}),U(es)!=="svelte-96qu0m"&&(es.textContent=La),_l=p(s),j(Ms.$$.fragment,s),El=p(s),j(ys.$$.fragment,s),Sl=p(s),is=y(s,"P",{"data-svelte-h":!0}),U(is)!=="svelte-7js4ic"&&(is.innerHTML=Ka),Gl=p(s),j(js.$$.fragment,s),Vl=p(s),j(rs.$$.fragment,s),Hl=p(s),cs=y(s,"P",{"data-svelte-h":!0}),U(cs)!=="svelte-1203ni3"&&(cs.innerHTML=Oa),Xl=p(s),j(Js.$$.fragment,s),Wl=p(s),os=y(s,"P",{"data-svelte-h":!0}),U(os)!=="svelte-18t34je"&&(os.innerHTML=sn),Rl=p(s),j(Us.$$.fragment,s),Yl=p(s),ms=y(s,"P",{"data-svelte-h":!0}),U(ms)!=="svelte-162ij5l"&&(ms.textContent=ln),Dl=p(s),j(Ts.$$.fragment,s),Pl=p(s),us=y(s,"P",{"data-svelte-h":!0}),U(us)!=="svelte-14bnpwr"&&(us.textContent=an),Fl=p(s),j(hs.$$.fragment,s),Ll=p(s),j(ws.$$.fragment,s),Kl=p(s),Is=y(s,"P",{"data-svelte-h":!0}),U(Is)!=="svelte-7ry0n2"&&(Is.textContent=nn),Ol=p(s),j(gs.$$.fragment,s),sa=p(s),j(Cs.$$.fragment,s),la=p(s),xs=y(s,"P",{"data-svelte-h":!0}),U(xs)!=="svelte-1mxdgvs"&&(xs.innerHTML=tn),aa=p(s),j(bs.$$.fragment,s),na=p(s),ds=y(s,"P",{"data-svelte-h":!0}),U(ds)!=="svelte-1a55hu1"&&(ds.innerHTML=pn),ta=p(s),j(fs.$$.fragment,s),pa=p(s),ks=y(s,"P",{"data-svelte-h":!0}),U(ks)!=="svelte-13vg1su"&&(ks.textContent=en),ea=p(s),j(qs.$$.fragment,s),Ma=p(s),j($s.$$.fragment,s),ya=p(s),As=y(s,"P",{"data-svelte-h":!0}),U(As)!=="svelte-1swaphm"&&(As.textContent=Mn),ia=p(s),j(zs.$$.fragment,s),ja=p(s),Qs=y(s,"P",{"data-svelte-h":!0}),U(Qs)!=="svelte-bss46k"&&(Qs.textContent=yn),ra=p(s),j(Bs.$$.fragment,s),ca=p(s),j(vs.$$.fragment,s),Ja=p(s),Zs=y(s,"P",{"data-svelte-h":!0}),U(Zs)!=="svelte-jcpg6w"&&(Zs.textContent=jn),oa=p(s),j(b.$$.fragment,s),Ua=p(s),Ns=y(s,"P",{"data-svelte-h":!0}),U(Ns)!=="svelte-1ly7aaz"&&(Ns.textContent=rn),ma=p(s),j(_s.$$.fragment,s),Ta=p(s),Es=y(s,"P",{"data-svelte-h":!0}),U(Es)!=="svelte-1w7dq7q"&&(Es.textContent=cn),ua=p(s),j(Ss.$$.fragment,s),ha=p(s),j(Gs.$$.fragment,s),wa=p(s),Vs=y(s,"P",{"data-svelte-h":!0}),U(Vs)!=="svelte-129ztod"&&(Vs.textContent=Jn),Ia=p(s),j(Hs.$$.fragment,s),ga=p(s),Xs=y(s,"P",{"data-svelte-h":!0}),U(Xs)!=="svelte-vjr41s"&&(Xs.textContent=on),Ca=p(s),j(Ws.$$.fragment,s),xa=p(s),j(Rs.$$.fragment,s),ba=p(s),Ys=y(s,"P",{"data-svelte-h":!0}),U(Ys)!=="svelte-15tnoli"&&(Ys.textContent=Un),da=p(s),j(Ds.$$.fragment,s),fa=p(s),Fs=y(s,"P",{}),Aa(Fs).forEach(a),this.h()},h(){wn(e,"name","hf:doc:metadata"),wn(e,"content",Gn),rl.a=null},m(s,l){In(document.head,e),n(s,u,l),n(s,m,l),n(s,h,l),r(d,s,l),n(s,Os,l),r(f,s,l),n(s,sl,l),n(s,k,l),n(s,ll,l),n(s,q,l),n(s,al,l),r($,s,l),n(s,nl,l),r(I,s,l),n(s,tl,l),r(A,s,l),n(s,pl,l),r(g,s,l),n(s,el,l),n(s,z,l),n(s,Ml,l),n(s,Q,l),n(s,yl,l),r(B,s,l),n(s,il,l),n(s,v,l),n(s,jl,l),n(s,Z,l),In(Z,$a),rl.m(gn,Z),n(s,cl,l),n(s,N,l),n(s,Jl,l),n(s,_,l),n(s,ol,l),r(E,s,l),n(s,Ul,l),n(s,S,l),n(s,ml,l),r(G,s,l),n(s,Tl,l),n(s,V,l),n(s,ul,l),n(s,H,l),n(s,hl,l),r(X,s,l),n(s,wl,l),n(s,W,l),n(s,Il,l),n(s,R,l),n(s,gl,l),r(Y,s,l),n(s,Cl,l),n(s,D,l),n(s,xl,l),r(P,s,l),n(s,bl,l),n(s,F,l),n(s,dl,l),r(C,s,l),n(s,fl,l),r(L,s,l),n(s,kl,l),n(s,K,l),n(s,ql,l),n(s,O,l),n(s,$l,l),n(s,ss,l),n(s,Al,l),r(x,s,l),n(s,zl,l),r(ls,s,l),n(s,Ql,l),n(s,as,l),n(s,Bl,l),r(ns,s,l),n(s,vl,l),n(s,ts,l),n(s,Zl,l),r(ps,s,l),n(s,Nl,l),n(s,es,l),n(s,_l,l),r(Ms,s,l),n(s,El,l),r(ys,s,l),n(s,Sl,l),n(s,is,l),n(s,Gl,l),r(js,s,l),n(s,Vl,l),r(rs,s,l),n(s,Hl,l),n(s,cs,l),n(s,Xl,l),r(Js,s,l),n(s,Wl,l),n(s,os,l),n(s,Rl,l),r(Us,s,l),n(s,Yl,l),n(s,ms,l),n(s,Dl,l),r(Ts,s,l),n(s,Pl,l),n(s,us,l),n(s,Fl,l),r(hs,s,l),n(s,Ll,l),r(ws,s,l),n(s,Kl,l),n(s,Is,l),n(s,Ol,l),r(gs,s,l),n(s,sa,l),r(Cs,s,l),n(s,la,l),n(s,xs,l),n(s,aa,l),r(bs,s,l),n(s,na,l),n(s,ds,l),n(s,ta,l),r(fs,s,l),n(s,pa,l),n(s,ks,l),n(s,ea,l),r(qs,s,l),n(s,Ma,l),r($s,s,l),n(s,ya,l),n(s,As,l),n(s,ia,l),r(zs,s,l),n(s,ja,l),n(s,Qs,l),n(s,ra,l),r(Bs,s,l),n(s,ca,l),r(vs,s,l),n(s,Ja,l),n(s,Zs,l),n(s,oa,l),r(b,s,l),n(s,Ua,l),n(s,Ns,l),n(s,ma,l),r(_s,s,l),n(s,Ta,l),n(s,Es,l),n(s,ua,l),r(Ss,s,l),n(s,ha,l),r(Gs,s,l),n(s,wa,l),n(s,Vs,l),n(s,Ia,l),r(Hs,s,l),n(s,ga,l),n(s,Xs,l),n(s,Ca,l),r(Ws,s,l),n(s,xa,l),r(Rs,s,l),n(s,ba,l),n(s,Ys,l),n(s,da,l),r(Ds,s,l),n(s,fa,l),n(s,Fs,l),ka=!0},p(s,[l]){const Ps={};l&2&&(Ps.$$scope={dirty:l,ctx:s}),I.$set(Ps);const mn={};l&2&&(mn.$$scope={dirty:l,ctx:s}),g.$set(mn);const Tn={};l&2&&(Tn.$$scope={dirty:l,ctx:s}),C.$set(Tn);const un={};l&2&&(un.$$scope={dirty:l,ctx:s}),x.$set(un);const hn={};l&2&&(hn.$$scope={dirty:l,ctx:s}),b.$set(hn)},i(s){ka||(c(d.$$.fragment,s),c(f.$$.fragment,s),c($.$$.fragment,s),c(I.$$.fragment,s),c(A.$$.fragment,s),c(g.$$.fragment,s),c(B.$$.fragment,s),c(E.$$.fragment,s),c(G.$$.fragment,s),c(X.$$.fragment,s),c(Y.$$.fragment,s),c(P.$$.fragment,s),c(C.$$.fragment,s),c(L.$$.fragment,s),c(x.$$.fragment,s),c(ls.$$.fragment,s),c(ns.$$.fragment,s),c(ps.$$.fragment,s),c(Ms.$$.fragment,s),c(ys.$$.fragment,s),c(js.$$.fragment,s),c(rs.$$.fragment,s),c(Js.$$.fragment,s),c(Us.$$.fragment,s),c(Ts.$$.fragment,s),c(hs.$$.fragment,s),c(ws.$$.fragment,s),c(gs.$$.fragment,s),c(Cs.$$.fragment,s),c(bs.$$.fragment,s),c(fs.$$.fragment,s),c(qs.$$.fragment,s),c($s.$$.fragment,s),c(zs.$$.fragment,s),c(Bs.$$.fragment,s),c(vs.$$.fragment,s),c(b.$$.fragment,s),c(_s.$$.fragment,s),c(Ss.$$.fragment,s),c(Gs.$$.fragment,s),c(Hs.$$.fragment,s),c(Ws.$$.fragment,s),c(Rs.$$.fragment,s),c(Ds.$$.fragment,s),ka=!0)},o(s){J(d.$$.fragment,s),J(f.$$.fragment,s),J($.$$.fragment,s),J(I.$$.fragment,s),J(A.$$.fragment,s),J(g.$$.fragment,s),J(B.$$.fragment,s),J(E.$$.fragment,s),J(G.$$.fragment,s),J(X.$$.fragment,s),J(Y.$$.fragment,s),J(P.$$.fragment,s),J(C.$$.fragment,s),J(L.$$.fragment,s),J(x.$$.fragment,s),J(ls.$$.fragment,s),J(ns.$$.fragment,s),J(ps.$$.fragment,s),J(Ms.$$.fragment,s),J(ys.$$.fragment,s),J(js.$$.fragment,s),J(rs.$$.fragment,s),J(Js.$$.fragment,s),J(Us.$$.fragment,s),J(Ts.$$.fragment,s),J(hs.$$.fragment,s),J(ws.$$.fragment,s),J(gs.$$.fragment,s),J(Cs.$$.fragment,s),J(bs.$$.fragment,s),J(fs.$$.fragment,s),J(qs.$$.fragment,s),J($s.$$.fragment,s),J(zs.$$.fragment,s),J(Bs.$$.fragment,s),J(vs.$$.fragment,s),J(b.$$.fragment,s),J(_s.$$.fragment,s),J(Ss.$$.fragment,s),J(Gs.$$.fragment,s),J(Hs.$$.fragment,s),J(Ws.$$.fragment,s),J(Rs.$$.fragment,s),J(Ds.$$.fragment,s),ka=!1},d(s){s&&(a(u),a(m),a(h),a(Os),a(sl),a(k),a(ll),a(q),a(al),a(nl),a(tl),a(pl),a(el),a(z),a(Ml),a(Q),a(yl),a(il),a(v),a(jl),a(Z),a(cl),a(N),a(Jl),a(_),a(ol),a(Ul),a(S),a(ml),a(Tl),a(V),a(ul),a(H),a(hl),a(wl),a(W),a(Il),a(R),a(gl),a(Cl),a(D),a(xl),a(bl),a(F),a(dl),a(fl),a(kl),a(K),a(ql),a(O),a($l),a(ss),a(Al),a(zl),a(Ql),a(as),a(Bl),a(vl),a(ts),a(Zl),a(Nl),a(es),a(_l),a(El),a(Sl),a(is),a(Gl),a(Vl),a(Hl),a(cs),a(Xl),a(Wl),a(os),a(Rl),a(Yl),a(ms),a(Dl),a(Pl),a(us),a(Fl),a(Ll),a(Kl),a(Is),a(Ol),a(sa),a(la),a(xs),a(aa),a(na),a(ds),a(ta),a(pa),a(ks),a(ea),a(Ma),a(ya),a(As),a(ia),a(ja),a(Qs),a(ra),a(ca),a(Ja),a(Zs),a(oa),a(Ua),a(Ns),a(ma),a(Ta),a(Es),a(ua),a(ha),a(wa),a(Vs),a(Ia),a(ga),a(Xs),a(Ca),a(xa),a(ba),a(Ys),a(da),a(fa),a(Fs)),a(e),o(d,s),o(f,s),o($,s),o(I,s),o(A,s),o(g,s),o(B,s),o(E,s),o(G,s),o(X,s),o(Y,s),o(P,s),o(C,s),o(L,s),o(x,s),o(ls,s),o(ns,s),o(ps,s),o(Ms,s),o(ys,s),o(js,s),o(rs,s),o(Js,s),o(Us,s),o(Ts,s),o(hs,s),o(ws,s),o(gs,s),o(Cs,s),o(bs,s),o(fs,s),o(qs,s),o($s,s),o(zs,s),o(Bs,s),o(vs,s),o(b,s),o(_s,s),o(Ss,s),o(Gs,s),o(Hs,s),o(Ws,s),o(Rs,s),o(Ds,s)}}}const Gn='{"title":"WordPiece tokenization","local":"wordpiece-tokenization","sections":[{"title":"Training algorithm","local":"training-algorithm","sections":[],"depth":2},{"title":"Tokenization algorithm","local":"tokenization-algorithm","sections":[],"depth":2},{"title":"Implementing WordPiece","local":"implementing-wordpiece","sections":[],"depth":2}],"depth":1}';function Vn(w){return xn(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Fn extends bn{constructor(e){super(),dn(this,e,Vn,Sn,Cn,{})}}export{Fn as component}; | |
Xet Storage Details
- Size:
- 82.2 kB
- Xet hash:
- 666783dea1d0661fd32cf7b5255a60f149914801837fe4f220b594fd99d2386f
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.