Buckets:
| import{s as Ut,o as Ct,n as _t}from"../chunks/scheduler.37c15a92.js";import{S as It,i as Ht,g as i,s as l,r as o,A as Pt,h as p,f as n,c as a,j as vt,u as m,x as r,k as nt,y as Zt,a as s,v as c,d as u,t as f,w as y}from"../chunks/index.2bf4358c.js";import{T as Lt}from"../chunks/Tip.363c041f.js";import{Y as wt}from"../chunks/Youtube.1e50a667.js";import{C as b}from"../chunks/CodeBlock.4e987730.js";import{C as Qt}from"../chunks/CourseFloatingBanner.6add7356.js";import{H as me,E as Vt}from"../chunks/getInferenceSnippets.24b50994.js";function Xt(ce){let $,g="✏️ <strong>ลองดูสิ!</strong> โหลด tokenizer จาก checkpoint <code>bert-base-cased</code> และใช้มันกับ input เดียวกันกับข้างบนนี้ แล้วดูว่าผลลัพธ์ต่างกันอย่างไร ระหว่าง tokenizer เวอร์ชัน cased และ uncased";return{c(){$=i("p"),$.innerHTML=g},l(k){$=p(k,"P",{"data-svelte-h":!0}),r($)!=="svelte-jxvpv7"&&($.innerHTML=g)},m(k,re){s(k,$,re)},p:_t,d(k){k&&n($)}}}function Dt(ce){let $,g,k,re,h,ue,T,fe,J,st=`ก่อนที่เราจะเจาะลึกเกี่ยวกับอัลกอริทึม 3 แบบ ของ subword tokenization ที่ใช้กับโมเดล Transformer (Byte-Pair Encoding [BPE], WordPiece, และ Unigram) | |
| อันดับแรก เราจะมาเรียนเกี่ยวกับขั้นตอน preprocessing ที่ tokenizer ใช้เพื่อจัดแต่งข้อความก่อนการ tokenize หลักกันก่อน`,ye,z,lt="บทนี้จะเป็นภาพรวมระดับสูงของขั้นตอนต่างๆในไปป์ไลน์ tokenization:",$e,M,at='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/tokenization_pipeline.svg" alt="The tokenization pipeline."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/tokenization_pipeline-dark.svg" alt="The tokenization pipeline."/>',ke,x,it="ก่อนแยกข้อความออกเป็น subtokens ตัว tokenizer จะดำเนินการสองขั้นตอน คือ <em>normalization</em> และ <em>pre-tokenization</em>",be,j,Me,v,de,w,pt='ขั้นตอน normalization เกี่ยวข้องกับทำความสะอาดข้อมูลทั่วไป เช่น การลบช่องว่างที่ไม่จำเป็นแปลงข้อความเป็นตัวพิมพ์เล็ก และ/หรือ การลบเครื่องหมายเน้นเสียงออก (accents) หากคุณคุ้นเคยกับ <a href="http://www.unicode.org/reports/tr15/" rel="nofollow">Unicode normalization</a> (เช่น NFC หรือ NFKC) นี่ก็เป็นสิ่งที่ tokenizer อาจใช้เช่นกัน',ge,U,rt="🤗 Transformers <code>tokenizer</code> มี attribute ที่เรียกว่า <code>backend_tokenizer</code> ที่เราสามารถเรียกใช้ได้ เพื่อเข้าถึง tokenizer พื้นฐานของ 🤗 Tokenizers library:",he,C,Te,_,Je,I,ot="attribute ชื่อ <code>normalizer</code> ของ <code>tokenizer</code> object มี method ชื่อ <code>normalize_str()</code> ที่เราสามารถใช้เพื่อดูผลลัพธ์ของการ normalization ได้:",ze,H,xe,P,je,Z,mt="ในตัวอย่างนี้ เนื่องจากเราเลือกใช้ checkpoint <code>bert-base-uncased</code> การ normalization จึงแปลงข้อความเป็นตัวพิมพ์เล็กและลบเครื่องหมายเน้นเสียงออก",ve,d,we,L,Ue,Q,Ce,V,ct='ในหัวข้อถัดไปคุณจะได้เรียนรู้ว่า เราไม่สามารถเทรน tokenizer จาก raw text โดยตรงได้ ก่อนอื่นเราจะต้องแยกข้อความเป็น entity เล็กๆ เช่นแยกออกเป็น คำ ขั้นตอนพวกนี้คือการ pre-tokenization ดังที่คุณเห็นใน<a href="/course/chapter2">บทที่ 2</a> tokenizer แบบ word-based จะแบ่งข้อความเป็นคำ โดยการแบ่งตรงช่องว่าง และ เครื่องหมายวรรคตอน คำที่ได้จะถูกนำมาใช้เป็นขอบเขตของ subtokens ที่ tokenizer เอาไว้ใช้ในการเทรน',_e,X,ut="สำหรับ fast tokenizer ถ้าหากเราอยากจะดูว่ามันทำอะไรบ้างในขั้นตอน pre-tokenization เราจะใช้ method ชื่อ <code>pre_tokenize_str()</code> ของ attribute ชื่อ <code>pre_tokenizer</code> จาก <code>tokenizer</code> object:",Ie,D,He,E,Pe,G,ft="คุณจะเห็นว่าตัว tokenizer มีการเก็บข้อมูลเกี่ยวกับ offsets ด้วย ซึ่งทำให้มันสามารถสร้าง offsets mapping ให้เราได้อย่างที่เห็นในบทที่แล้ว สำหรับข้อความ input ในตัวอย่างนี้ ช่องว่างสองช่อง(หลังคำว่า are) ถูกแทนที่ด้วยหนึ่งช่องว่างเท่านั้น แต่เราจะเห็นว่าค่า offsets ยังนับช่องว่างพวกนี้อยู่ สังเกตค่า offsets ตรง <code>are</code> และ <code>you</code>",Ze,W,yt="เนื่องจากเราใช้ BERT tokenizer ขั้นตอน pre-tokenization คือการตัดข้อความตรงช่องว่างและเครื่องหมายวรรคตอนเท่านั้น ส่วน tokenizer อื่นๆ อาจจะมีการหลักการตัดคำแบบอื่นได้ ตัวอย่างเช่น ถ้าเราใช้ tokenizer ของ GPT-2:",Le,S,Qe,A,$t="มันจะแบ่งข้อความตรงช่องว่างและเครื่องหมายวรรคตอนเช่นเดียวกัน แต่มันจะยังเก็บข้อมูลเกี่ยวกับช่องว่างไว้และใช้เครื่องหมาย <code>Ġ</code> เพื่อแทนช่องว่างพวกนี้ การทำแบบนี้ทำให้เราสามารถกู้คืนช่องว่างพวกนี้ได้ตอนที่เรา decode token เหล่านี้",Ve,B,Xe,R,kt="สังเกตว่า ช่องว่างสองช่องจะไม่ถูกรวมเป็นหนึ่งช่องแบบใน BERT tokenizer",De,K,bt="ในตัวอย่างสุดท้ายนี้ เราจะมาดู T5 tokenizer กัน ซึ่งใช้อัลกอริทึมที่ชื่อ SentencePiece :",Ee,N,Ge,Y,We,q,Mt=`คล้ายกับใน GPT-2 tokenizer T5 tokenizer จะเก็บข้อมูลเกี่ยวกับช่องว่าง และแทนที่พวกมันด้วยเครื่องหมายพิเศษ (<code>_</code>) แต่มันจะแบ่งตรงช่องว่างเท่านั้น และจะไม่แบ่งตรงเครื่องหมายวรรคตอน | |
| สังเกตว่า มันจะเพิ่มช่องว่างตรงต้นประโยคด้วย (ก่อนคำว่า <code>Hello</code>) และมันจะไม่นับช่องว่างสองช่องที่อยู่ระหว่าง <code>are</code> และ <code>you</code>`,Se,F,dt="คุณได้เห็นแล้วว่า tokenizers ต่างๆ ประมวลผลข้อความอย่างไร ตอนนี้เราจะมาดูอัลกอริทึมต่างๆกัน เริ่มที่ SentencePiece ซึ่งเป็นอัลกอริทึมที่ถูกนำมาใช้อย่างกว้างขวาง จากนั้นในอีกสามหัวข้อต่อไป เราจะมาดูเกี่ยวกับอัลกอริทึม 3 แบบ ของ subword tokenization",Ae,O,Be,ee,gt='<a href="https://github.com/google/sentencepiece" rel="nofollow">SentencePiece</a> คืออัลกอริทึมสำหรับการ preprocessing ข้อความ เพื่อนำข้อความพวกนี้ไปใช้ในโมเดลต่างๆที่คุณจะได้เรียนในอีกสามบทถัดจากนี้ จะมันมองข้อความเป็นอักขระ Unicode และแทนที่ช่องว่างด้วยสัญลักษณ์พิเศษ <code>▁</code> ถ้าใช้งานร่วมกับ Unigram algorithm (ดู<a href="/course/chapter7/7">บทที่ 7</a>) มันจะไม่จำเป็นต้องทำขั้นตอน pre-tokenization เลยด้วย ซึ่งมีประโยชน์สำหรับภาษาที่ไม่ได้ใช้ช่องว่างในการแบ่งคำเช่น ภาษาจีนหรือญี่ปุ่น',Re,te,ht="ความสามารถหลักอีกอย่างของ SentencePiece คือ <em>reversible tokenization</em> (การตัดคำที่แปลงกลับได้): เนื่องจากมันไม่ได้ treat พวกช่องว่างแบบพิเศษ เวลา decode ประโยคที่ตัดแล้วกลับคืน เราสามารถเชื่อม (concatenate)แต่ละ token ได้เลยและ และแทนที่ <code>_</code> ด้วยช่องว่าง ผลลัพธ์ก็คือ ข้อความที่ ถูก normalized",Ke,ne,Tt="อย่างที่คุณได้เห็นก่อนหน้านี้ BERT tokenizer จะลบช่องว่างที่ต่อกันออก ทำให้ตอนรวม token กลับ เราจะไม่ได้ข้อความแบบเดิม",Ne,se,Ye,le,Jt=`ในบทถัดไป เราจะมาเรียนรู้อย่างละเอียด เกี่ยวกับอัลกอริทึมสามแบบ สำหรับ subword tokenization ได้แก่ BPE (ใช้กับ GPT-2 และ โมเดลอื่นๆ), WordPiece (ใช้กับ BERT), และ Unigram (ใช้กับ T5 และโมเดลอื่นๆ) | |
| ก่อนที่จะไปเริ่มกัน เรามาดูภาพรวมของแต่ละอัลกอริทึมกันก่อน คุณสามารถกลับมาดูตารางนี้ใหม่ได้หลังจากที่อ่านบทถัดไปแล้ว เพื่อจะได้เข้าใจมากขึ้น`,qe,ae,zt='<thead><tr><th align="center">โมเดล</th> <th align="center">BPE</th> <th align="center">WordPiece</th> <th align="center">Unigram</th></tr></thead> <tbody><tr><td align="center">การเทรน</td> <td align="center">เริ่มจาก vocabulary ขนาดเล็ก และเรียนกฎในการรวม token เข้าด้วยกัน</td> <td align="center">เริ่มจาก vocabulary ขนาดเล็ก และเรียนกฎในการรวม token เข้าด้วยกัน</td> <td align="center">เริ่มจาก vocabulary ขนาดใหญ่ เรียนกฎเพื่อลบ token ออกจาก vocabulary</td></tr> <tr><td align="center">ขั้นตอนการเทรน</td> <td align="center">รวม token ถ้ามันเป็นคู่ที่พบบ่อย</td> <td align="center">รวม token ถ้ามันเป็นคู่ที่มี score ที่ดีที่สุด โดย score คำนวณจากความถี่ของคู่ token นั้น และให้คะแนนสูงถ้าแต่ละ token มีความถี่ต่ำ</td> <td align="center">ลบ token ออกจาก vocabulary เพื่อทำให้ค่า loss ลดลง โดยที่ค่า loss คำนวณจาก training corpus</td></tr> <tr><td align="center">สิ่งที่เรียน</td> <td align="center">กฎในการรวม token (merge rules) และ vocabulary</td> <td align="center">เรียนแค่ vocabulary</td> <td align="center">เรียน vocabulary และ score ของแต่ละ token</td></tr> <tr><td align="center">Encoding</td> <td align="center">แยกคำออกเป็นตัวอักษร และทำการรวมโดยใช้กฎที่เรียนระหว่างการเทรน</td> <td align="center">หาคำย่อยที่ยาวที่สุดที่อยู่ใน vocabulary เริ่มจากต้นคำและทำต่อไปเรื่อยๆจนหมดคำ</td> <td align="center">หาการแบ่งคำที่เหมาะสมที่สุดโดยใช้ score ที่เรียนระหว่างการเทรน</td></tr></tbody>',Fe,ie,xt="ในบทต่อไปเรามาเรียนเกี่ยวกับ BPE อย่างละเอียดกัน!",Oe,pe,et,oe,tt;return h=new me({props:{title:"Normalization และ pre-tokenization",local:"normalization-และ-pre-tokenization",headingTag:"h1"}}),T=new Qt({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/section4.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter6/section4.ipynb"}]}}),j=new me({props:{title:"Normalization",local:"normalization",headingTag:"h2"}}),v=new wt({props:{id:"4IIC2jI9CaU"}}),C=new b({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtdW5jYXNlZCUyMiklMEFwcmludCh0eXBlKHRva2VuaXplci5iYWNrZW5kX3Rva2VuaXplcikp",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-uncased"</span>) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-built_in">type</span>(tokenizer.backend_tokenizer))`,wrap:!1}}),_=new b({props:{code:"JTNDY2xhc3MlMjAndG9rZW5pemVycy5Ub2tlbml6ZXInJTNF",highlighted:'<<span class="hljs-keyword">class</span> <span class="hljs-string">'tokenizers.Tokenizer'</span>>',wrap:!1}}),H=new b({props:{code:"cHJpbnQodG9rZW5pemVyLmJhY2tlbmRfdG9rZW5pemVyLm5vcm1hbGl6ZXIubm9ybWFsaXplX3N0ciglMjJIJUMzJUE5bGwlQzMlQjIlMjBoJUMzJUI0dyUyMGFyZSUyMCVDMyVCQyUzRiUyMikp",highlighted:'<span class="hljs-built_in">print</span>(tokenizer.backend_tokenizer.normalizer.normalize_str(<span class="hljs-string">"Héllò hôw are ü?"</span>))',wrap:!1}}),P=new b({props:{code:"J2hlbGxvJTIwaG93JTIwYXJlJTIwdSUzRic=",highlighted:'<span class="hljs-string">'hello how are u?'</span>',wrap:!1}}),d=new Lt({props:{$$slots:{default:[Xt]},$$scope:{ctx:ce}}}),L=new me({props:{title:"Pre-tokenization",local:"pre-tokenization",headingTag:"h2"}}),Q=new wt({props:{id:"grlLV8AIXug"}}),D=new b({props:{code:"dG9rZW5pemVyLmJhY2tlbmRfdG9rZW5pemVyLnByZV90b2tlbml6ZXIucHJlX3Rva2VuaXplX3N0ciglMjJIZWxsbyUyQyUyMGhvdyUyMGFyZSUyMCUyMHlvdSUzRiUyMik=",highlighted:'tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">"Hello, how are you?"</span>)',wrap:!1}}),E=new b({props:{code:"JTVCKCdIZWxsbyclMkMlMjAoMCUyQyUyMDUpKSUyQyUyMCgnJTJDJyUyQyUyMCg1JTJDJTIwNikpJTJDJTIwKCdob3cnJTJDJTIwKDclMkMlMjAxMCkpJTJDJTIwKCdhcmUnJTJDJTIwKDExJTJDJTIwMTQpKSUyQyUyMCgneW91JyUyQyUyMCgxNiUyQyUyMDE5KSklMkMlMjAoJyUzRiclMkMlMjAoMTklMkMlMjAyMCkpJTVE",highlighted:'[(<span class="hljs-string">'Hello'</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">','</span>, (<span class="hljs-number">5</span>, <span class="hljs-number">6</span>)), (<span class="hljs-string">'how'</span>, (<span class="hljs-number">7</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">'are'</span>, (<span class="hljs-number">11</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">'you'</span>, (<span class="hljs-number">16</span>, <span class="hljs-number">19</span>)), (<span class="hljs-string">'?'</span>, (<span class="hljs-number">19</span>, <span class="hljs-number">20</span>))]',wrap:!1}}),S=new b({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIyZ3B0MiUyMiklMEF0b2tlbml6ZXIuYmFja2VuZF90b2tlbml6ZXIucHJlX3Rva2VuaXplci5wcmVfdG9rZW5pemVfc3RyKCUyMkhlbGxvJTJDJTIwaG93JTIwYXJlJTIwJTIweW91JTNGJTIyKQ==",highlighted:`tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"gpt2"</span>) | |
| tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">"Hello, how are you?"</span>)`,wrap:!1}}),B=new b({props:{code:"JTVCKCdIZWxsbyclMkMlMjAoMCUyQyUyMDUpKSUyQyUyMCgnJTJDJyUyQyUyMCg1JTJDJTIwNikpJTJDJTIwKCclQzQlQTBob3cnJTJDJTIwKDYlMkMlMjAxMCkpJTJDJTIwKCclQzQlQTBhcmUnJTJDJTIwKDEwJTJDJTIwMTQpKSUyQyUyMCgnJUM0JUEwJyUyQyUyMCgxNCUyQyUyMDE1KSklMkMlMjAoJyVDNCVBMHlvdSclMkMlMjAoMTUlMkMlMjAxOSkpJTJDJTBBJTIwKCclM0YnJTJDJTIwKDE5JTJDJTIwMjApKSU1RA==",highlighted:`[(<span class="hljs-string">'Hello'</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">','</span>, (<span class="hljs-number">5</span>, <span class="hljs-number">6</span>)), (<span class="hljs-string">'Ġhow'</span>, (<span class="hljs-number">6</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">'Ġare'</span>, (<span class="hljs-number">10</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">'Ġ'</span>, (<span class="hljs-number">14</span>, <span class="hljs-number">15</span>)), (<span class="hljs-string">'Ġyou'</span>, (<span class="hljs-number">15</span>, <span class="hljs-number">19</span>)), | |
| (<span class="hljs-string">'?'</span>, (<span class="hljs-number">19</span>, <span class="hljs-number">20</span>))]`,wrap:!1}}),N=new b({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIydDUtc21hbGwlMjIpJTBBdG9rZW5pemVyLmJhY2tlbmRfdG9rZW5pemVyLnByZV90b2tlbml6ZXIucHJlX3Rva2VuaXplX3N0ciglMjJIZWxsbyUyQyUyMGhvdyUyMGFyZSUyMCUyMHlvdSUzRiUyMik=",highlighted:`tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"t5-small"</span>) | |
| tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">"Hello, how are you?"</span>)`,wrap:!1}}),Y=new b({props:{code:"JTVCKCclRTIlOTYlODFIZWxsbyUyQyclMkMlMjAoMCUyQyUyMDYpKSUyQyUyMCgnJUUyJTk2JTgxaG93JyUyQyUyMCg3JTJDJTIwMTApKSUyQyUyMCgnJUUyJTk2JTgxYXJlJyUyQyUyMCgxMSUyQyUyMDE0KSklMkMlMjAoJyVFMiU5NiU4MXlvdSUzRiclMkMlMjAoMTYlMkMlMjAyMCkpJTVE",highlighted:'[(<span class="hljs-string">'▁Hello,'</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">6</span>)), (<span class="hljs-string">'▁how'</span>, (<span class="hljs-number">7</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">'▁are'</span>, (<span class="hljs-number">11</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">'▁you?'</span>, (<span class="hljs-number">16</span>, <span class="hljs-number">20</span>))]',wrap:!1}}),O=new me({props:{title:"SentencePiece",local:"sentencepiece",headingTag:"h2"}}),se=new me({props:{title:"ภาพรวมของแต่ละอัลกอริทึม",local:"ภาพรวมของแตละอลกอรทม",headingTag:"h2"}}),pe=new Vt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter6/4.mdx"}}),{c(){$=i("meta"),g=l(),k=i("p"),re=l(),o(h.$$.fragment),ue=l(),o(T.$$.fragment),fe=l(),J=i("p"),J.textContent=st,ye=l(),z=i("p"),z.textContent=lt,$e=l(),M=i("div"),M.innerHTML=at,ke=l(),x=i("p"),x.innerHTML=it,be=l(),o(j.$$.fragment),Me=l(),o(v.$$.fragment),de=l(),w=i("p"),w.innerHTML=pt,ge=l(),U=i("p"),U.innerHTML=rt,he=l(),o(C.$$.fragment),Te=l(),o(_.$$.fragment),Je=l(),I=i("p"),I.innerHTML=ot,ze=l(),o(H.$$.fragment),xe=l(),o(P.$$.fragment),je=l(),Z=i("p"),Z.innerHTML=mt,ve=l(),o(d.$$.fragment),we=l(),o(L.$$.fragment),Ue=l(),o(Q.$$.fragment),Ce=l(),V=i("p"),V.innerHTML=ct,_e=l(),X=i("p"),X.innerHTML=ut,Ie=l(),o(D.$$.fragment),He=l(),o(E.$$.fragment),Pe=l(),G=i("p"),G.innerHTML=ft,Ze=l(),W=i("p"),W.textContent=yt,Le=l(),o(S.$$.fragment),Qe=l(),A=i("p"),A.innerHTML=$t,Ve=l(),o(B.$$.fragment),Xe=l(),R=i("p"),R.textContent=kt,De=l(),K=i("p"),K.textContent=bt,Ee=l(),o(N.$$.fragment),Ge=l(),o(Y.$$.fragment),We=l(),q=i("p"),q.innerHTML=Mt,Se=l(),F=i("p"),F.textContent=dt,Ae=l(),o(O.$$.fragment),Be=l(),ee=i("p"),ee.innerHTML=gt,Re=l(),te=i("p"),te.innerHTML=ht,Ke=l(),ne=i("p"),ne.textContent=Tt,Ne=l(),o(se.$$.fragment),Ye=l(),le=i("p"),le.textContent=Jt,qe=l(),ae=i("table"),ae.innerHTML=zt,Fe=l(),ie=i("p"),ie.textContent=xt,Oe=l(),o(pe.$$.fragment),et=l(),oe=i("p"),this.h()},l(e){const t=Pt("svelte-u9bgzb",document.head);$=p(t,"META",{name:!0,content:!0}),t.forEach(n),g=a(e),k=p(e,"P",{}),vt(k).forEach(n),re=a(e),m(h.$$.fragment,e),ue=a(e),m(T.$$.fragment,e),fe=a(e),J=p(e,"P",{"data-svelte-h":!0}),r(J)!=="svelte-5vlo60"&&(J.textContent=st),ye=a(e),z=p(e,"P",{"data-svelte-h":!0}),r(z)!=="svelte-2fazkv"&&(z.textContent=lt),$e=a(e),M=p(e,"DIV",{class:!0,"data-svelte-h":!0}),r(M)!=="svelte-oxfng3"&&(M.innerHTML=at),ke=a(e),x=p(e,"P",{"data-svelte-h":!0}),r(x)!=="svelte-sg3zrk"&&(x.innerHTML=it),be=a(e),m(j.$$.fragment,e),Me=a(e),m(v.$$.fragment,e),de=a(e),w=p(e,"P",{"data-svelte-h":!0}),r(w)!=="svelte-1uv1l65"&&(w.innerHTML=pt),ge=a(e),U=p(e,"P",{"data-svelte-h":!0}),r(U)!=="svelte-e7ho8"&&(U.innerHTML=rt),he=a(e),m(C.$$.fragment,e),Te=a(e),m(_.$$.fragment,e),Je=a(e),I=p(e,"P",{"data-svelte-h":!0}),r(I)!=="svelte-10kqmbe"&&(I.innerHTML=ot),ze=a(e),m(H.$$.fragment,e),xe=a(e),m(P.$$.fragment,e),je=a(e),Z=p(e,"P",{"data-svelte-h":!0}),r(Z)!=="svelte-17w43j1"&&(Z.innerHTML=mt),ve=a(e),m(d.$$.fragment,e),we=a(e),m(L.$$.fragment,e),Ue=a(e),m(Q.$$.fragment,e),Ce=a(e),V=p(e,"P",{"data-svelte-h":!0}),r(V)!=="svelte-9lafcs"&&(V.innerHTML=ct),_e=a(e),X=p(e,"P",{"data-svelte-h":!0}),r(X)!=="svelte-aoq8v4"&&(X.innerHTML=ut),Ie=a(e),m(D.$$.fragment,e),He=a(e),m(E.$$.fragment,e),Pe=a(e),G=p(e,"P",{"data-svelte-h":!0}),r(G)!=="svelte-6d29o9"&&(G.innerHTML=ft),Ze=a(e),W=p(e,"P",{"data-svelte-h":!0}),r(W)!=="svelte-w9v2tz"&&(W.textContent=yt),Le=a(e),m(S.$$.fragment,e),Qe=a(e),A=p(e,"P",{"data-svelte-h":!0}),r(A)!=="svelte-1ulrvw9"&&(A.innerHTML=$t),Ve=a(e),m(B.$$.fragment,e),Xe=a(e),R=p(e,"P",{"data-svelte-h":!0}),r(R)!=="svelte-18zjqy8"&&(R.textContent=kt),De=a(e),K=p(e,"P",{"data-svelte-h":!0}),r(K)!=="svelte-12nsiq9"&&(K.textContent=bt),Ee=a(e),m(N.$$.fragment,e),Ge=a(e),m(Y.$$.fragment,e),We=a(e),q=p(e,"P",{"data-svelte-h":!0}),r(q)!=="svelte-1udpawf"&&(q.innerHTML=Mt),Se=a(e),F=p(e,"P",{"data-svelte-h":!0}),r(F)!=="svelte-yzh3de"&&(F.textContent=dt),Ae=a(e),m(O.$$.fragment,e),Be=a(e),ee=p(e,"P",{"data-svelte-h":!0}),r(ee)!=="svelte-z4dp1a"&&(ee.innerHTML=gt),Re=a(e),te=p(e,"P",{"data-svelte-h":!0}),r(te)!=="svelte-1vgpntp"&&(te.innerHTML=ht),Ke=a(e),ne=p(e,"P",{"data-svelte-h":!0}),r(ne)!=="svelte-apkayl"&&(ne.textContent=Tt),Ne=a(e),m(se.$$.fragment,e),Ye=a(e),le=p(e,"P",{"data-svelte-h":!0}),r(le)!=="svelte-cjb2w3"&&(le.textContent=Jt),qe=a(e),ae=p(e,"TABLE",{"data-svelte-h":!0}),r(ae)!=="svelte-1n44egn"&&(ae.innerHTML=zt),Fe=a(e),ie=p(e,"P",{"data-svelte-h":!0}),r(ie)!=="svelte-afguos"&&(ie.textContent=xt),Oe=a(e),m(pe.$$.fragment,e),et=a(e),oe=p(e,"P",{}),vt(oe).forEach(n),this.h()},h(){nt($,"name","hf:doc:metadata"),nt($,"content",Et),nt(M,"class","flex justify-center")},m(e,t){Zt(document.head,$),s(e,g,t),s(e,k,t),s(e,re,t),c(h,e,t),s(e,ue,t),c(T,e,t),s(e,fe,t),s(e,J,t),s(e,ye,t),s(e,z,t),s(e,$e,t),s(e,M,t),s(e,ke,t),s(e,x,t),s(e,be,t),c(j,e,t),s(e,Me,t),c(v,e,t),s(e,de,t),s(e,w,t),s(e,ge,t),s(e,U,t),s(e,he,t),c(C,e,t),s(e,Te,t),c(_,e,t),s(e,Je,t),s(e,I,t),s(e,ze,t),c(H,e,t),s(e,xe,t),c(P,e,t),s(e,je,t),s(e,Z,t),s(e,ve,t),c(d,e,t),s(e,we,t),c(L,e,t),s(e,Ue,t),c(Q,e,t),s(e,Ce,t),s(e,V,t),s(e,_e,t),s(e,X,t),s(e,Ie,t),c(D,e,t),s(e,He,t),c(E,e,t),s(e,Pe,t),s(e,G,t),s(e,Ze,t),s(e,W,t),s(e,Le,t),c(S,e,t),s(e,Qe,t),s(e,A,t),s(e,Ve,t),c(B,e,t),s(e,Xe,t),s(e,R,t),s(e,De,t),s(e,K,t),s(e,Ee,t),c(N,e,t),s(e,Ge,t),c(Y,e,t),s(e,We,t),s(e,q,t),s(e,Se,t),s(e,F,t),s(e,Ae,t),c(O,e,t),s(e,Be,t),s(e,ee,t),s(e,Re,t),s(e,te,t),s(e,Ke,t),s(e,ne,t),s(e,Ne,t),c(se,e,t),s(e,Ye,t),s(e,le,t),s(e,qe,t),s(e,ae,t),s(e,Fe,t),s(e,ie,t),s(e,Oe,t),c(pe,e,t),s(e,et,t),s(e,oe,t),tt=!0},p(e,[t]){const jt={};t&2&&(jt.$$scope={dirty:t,ctx:e}),d.$set(jt)},i(e){tt||(u(h.$$.fragment,e),u(T.$$.fragment,e),u(j.$$.fragment,e),u(v.$$.fragment,e),u(C.$$.fragment,e),u(_.$$.fragment,e),u(H.$$.fragment,e),u(P.$$.fragment,e),u(d.$$.fragment,e),u(L.$$.fragment,e),u(Q.$$.fragment,e),u(D.$$.fragment,e),u(E.$$.fragment,e),u(S.$$.fragment,e),u(B.$$.fragment,e),u(N.$$.fragment,e),u(Y.$$.fragment,e),u(O.$$.fragment,e),u(se.$$.fragment,e),u(pe.$$.fragment,e),tt=!0)},o(e){f(h.$$.fragment,e),f(T.$$.fragment,e),f(j.$$.fragment,e),f(v.$$.fragment,e),f(C.$$.fragment,e),f(_.$$.fragment,e),f(H.$$.fragment,e),f(P.$$.fragment,e),f(d.$$.fragment,e),f(L.$$.fragment,e),f(Q.$$.fragment,e),f(D.$$.fragment,e),f(E.$$.fragment,e),f(S.$$.fragment,e),f(B.$$.fragment,e),f(N.$$.fragment,e),f(Y.$$.fragment,e),f(O.$$.fragment,e),f(se.$$.fragment,e),f(pe.$$.fragment,e),tt=!1},d(e){e&&(n(g),n(k),n(re),n(ue),n(fe),n(J),n(ye),n(z),n($e),n(M),n(ke),n(x),n(be),n(Me),n(de),n(w),n(ge),n(U),n(he),n(Te),n(Je),n(I),n(ze),n(xe),n(je),n(Z),n(ve),n(we),n(Ue),n(Ce),n(V),n(_e),n(X),n(Ie),n(He),n(Pe),n(G),n(Ze),n(W),n(Le),n(Qe),n(A),n(Ve),n(Xe),n(R),n(De),n(K),n(Ee),n(Ge),n(We),n(q),n(Se),n(F),n(Ae),n(Be),n(ee),n(Re),n(te),n(Ke),n(ne),n(Ne),n(Ye),n(le),n(qe),n(ae),n(Fe),n(ie),n(Oe),n(et),n(oe)),n($),y(h,e),y(T,e),y(j,e),y(v,e),y(C,e),y(_,e),y(H,e),y(P,e),y(d,e),y(L,e),y(Q,e),y(D,e),y(E,e),y(S,e),y(B,e),y(N,e),y(Y,e),y(O,e),y(se,e),y(pe,e)}}}const Et='{"title":"Normalization และ pre-tokenization","local":"normalization-และ-pre-tokenization","sections":[{"title":"Normalization","local":"normalization","sections":[],"depth":2},{"title":"Pre-tokenization","local":"pre-tokenization","sections":[],"depth":2},{"title":"SentencePiece","local":"sentencepiece","sections":[],"depth":2},{"title":"ภาพรวมของแต่ละอัลกอริทึม","local":"ภาพรวมของแตละอลกอรทม","sections":[],"depth":2}],"depth":1}';function Gt(ce){return Ct(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Yt extends It{constructor($){super(),Ht(this,$,Gt,Dt,Ut,{})}}export{Yt as component}; | |
Xet Storage Details
- Size:
- 29.1 kB
- Xet hash:
- b1e0fb7085cefd01897df7838e84b59457c2d6addc6a0d9ef703e0c897e9f424
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.