Buckets:

rtrm's picture
download
raw
29.1 kB
import{s as _t,n as It,o as Ht}from"../chunks/scheduler.505acc25.js";import{S as Pt,i as Lt,e as i,s as l,c as o,h as Zt,a as p,d as n,b as a,f as Ct,g as m,j as r,k as st,l as Qt,m as s,n as c,t as u,o as f,p as y}from"../chunks/index.17dd9071.js";import{C as Vt,H as oe,E as Xt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.0a8d2c6b.js";import{Y as Ut}from"../chunks/Youtube.793fe4bf.js";import{C as k}from"../chunks/CodeBlock.924229ce.js";import{C as Dt}from"../chunks/CourseFloatingBanner.9496b79e.js";function Et(lt){let $,me,pe,ce,d,ue,g,fe,h,ye,T,at=`ก่อนที่เราจะเจาะลึกเกี่ยวกับอัลกอริทึม 3 แบบ ของ subword tokenization ที่ใช้กับโมเดล Transformer (Byte-Pair Encoding [BPE], WordPiece, และ Unigram)
อันดับแรก เราจะมาเรียนเกี่ยวกับขั้นตอน preprocessing ที่ tokenizer ใช้เพื่อจัดแต่งข้อความก่อนการ tokenize หลักกันก่อน`,ke,J,it="บทนี้จะเป็นภาพรวมระดับสูงของขั้นตอนต่างๆในไปป์ไลน์ tokenization:",$e,b,pt='<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."/>',be,z,rt="ก่อนแยกข้อความออกเป็น subtokens ตัว tokenizer จะดำเนินการสองขั้นตอน คือ <em>normalization</em> และ <em>pre-tokenization</em>",Me,x,de,j,ge,v,ot='ขั้นตอน normalization เกี่ยวข้องกับทำความสะอาดข้อมูลทั่วไป เช่น การลบช่องว่างที่ไม่จำเป็นแปลงข้อความเป็นตัวพิมพ์เล็ก และ/หรือ การลบเครื่องหมายเน้นเสียงออก (accents) หากคุณคุ้นเคยกับ <a href="http://www.unicode.org/reports/tr15/" rel="nofollow">Unicode normalization</a> (เช่น NFC หรือ NFKC) นี่ก็เป็นสิ่งที่ tokenizer อาจใช้เช่นกัน',he,w,mt="🤗 Transformers <code>tokenizer</code> มี attribute ที่เรียกว่า <code>backend_tokenizer</code> ที่เราสามารถเรียกใช้ได้ เพื่อเข้าถึง tokenizer พื้นฐานของ 🤗 Tokenizers library:",Te,C,Je,U,ze,_,ct="attribute ชื่อ <code>normalizer</code> ของ <code>tokenizer</code> object มี method ชื่อ <code>normalize_str()</code> ที่เราสามารถใช้เพื่อดูผลลัพธ์ของการ normalization ได้:",xe,I,je,H,ve,P,ut="ในตัวอย่างนี้ เนื่องจากเราเลือกใช้ checkpoint <code>bert-base-uncased</code> การ normalization จึงแปลงข้อความเป็นตัวพิมพ์เล็กและลบเครื่องหมายเน้นเสียงออก",we,M,ft="<p>✏️ <strong>ลองดูสิ!</strong> โหลด tokenizer จาก checkpoint <code>bert-base-cased</code> และใช้มันกับ input เดียวกันกับข้างบนนี้ แล้วดูว่าผลลัพธ์ต่างกันอย่างไร ระหว่าง tokenizer เวอร์ชัน cased และ uncased</p>",Ce,L,Ue,Z,_e,Q,yt='ในหัวข้อถัดไปคุณจะได้เรียนรู้ว่า เราไม่สามารถเทรน tokenizer จาก raw text โดยตรงได้ ก่อนอื่นเราจะต้องแยกข้อความเป็น entity เล็กๆ เช่นแยกออกเป็น คำ ขั้นตอนพวกนี้คือการ pre-tokenization ดังที่คุณเห็นใน<a href="/course/chapter2">บทที่ 2</a> tokenizer แบบ word-based จะแบ่งข้อความเป็นคำ โดยการแบ่งตรงช่องว่าง และ เครื่องหมายวรรคตอน คำที่ได้จะถูกนำมาใช้เป็นขอบเขตของ subtokens ที่ tokenizer เอาไว้ใช้ในการเทรน',Ie,V,kt="สำหรับ fast tokenizer ถ้าหากเราอยากจะดูว่ามันทำอะไรบ้างในขั้นตอน pre-tokenization เราจะใช้ method ชื่อ <code>pre_tokenize_str()</code> ของ attribute ชื่อ <code>pre_tokenizer</code> จาก <code>tokenizer</code> object:",He,X,Pe,D,Le,E,$t="คุณจะเห็นว่าตัว tokenizer มีการเก็บข้อมูลเกี่ยวกับ offsets ด้วย ซึ่งทำให้มันสามารถสร้าง offsets mapping ให้เราได้อย่างที่เห็นในบทที่แล้ว สำหรับข้อความ input ในตัวอย่างนี้ ช่องว่างสองช่อง(หลังคำว่า are) ถูกแทนที่ด้วยหนึ่งช่องว่างเท่านั้น แต่เราจะเห็นว่าค่า offsets ยังนับช่องว่างพวกนี้อยู่ สังเกตค่า offsets ตรง <code>are</code> และ <code>you</code>",Ze,G,bt="เนื่องจากเราใช้ BERT tokenizer ขั้นตอน pre-tokenization คือการตัดข้อความตรงช่องว่างและเครื่องหมายวรรคตอนเท่านั้น ส่วน tokenizer อื่นๆ อาจจะมีการหลักการตัดคำแบบอื่นได้ ตัวอย่างเช่น ถ้าเราใช้ tokenizer ของ GPT-2:",Qe,W,Ve,S,Mt="มันจะแบ่งข้อความตรงช่องว่างและเครื่องหมายวรรคตอนเช่นเดียวกัน แต่มันจะยังเก็บข้อมูลเกี่ยวกับช่องว่างไว้และใช้เครื่องหมาย <code>Ġ</code> เพื่อแทนช่องว่างพวกนี้ การทำแบบนี้ทำให้เราสามารถกู้คืนช่องว่างพวกนี้ได้ตอนที่เรา decode token เหล่านี้",Xe,B,De,K,dt="สังเกตว่า ช่องว่างสองช่องจะไม่ถูกรวมเป็นหนึ่งช่องแบบใน BERT tokenizer",Ee,R,gt="ในตัวอย่างสุดท้ายนี้ เราจะมาดู T5 tokenizer กัน ซึ่งใช้อัลกอริทึมที่ชื่อ SentencePiece :",Ge,A,We,N,Se,q,ht=`คล้ายกับใน GPT-2 tokenizer T5 tokenizer จะเก็บข้อมูลเกี่ยวกับช่องว่าง และแทนที่พวกมันด้วยเครื่องหมายพิเศษ (<code>_</code>) แต่มันจะแบ่งตรงช่องว่างเท่านั้น และจะไม่แบ่งตรงเครื่องหมายวรรคตอน
สังเกตว่า มันจะเพิ่มช่องว่างตรงต้นประโยคด้วย (ก่อนคำว่า <code>Hello</code>) และมันจะไม่นับช่องว่างสองช่องที่อยู่ระหว่าง <code>are</code> และ <code>you</code>`,Be,Y,Tt="คุณได้เห็นแล้วว่า tokenizers ต่างๆ ประมวลผลข้อความอย่างไร ตอนนี้เราจะมาดูอัลกอริทึมต่างๆกัน เริ่มที่ SentencePiece ซึ่งเป็นอัลกอริทึมที่ถูกนำมาใช้อย่างกว้างขวาง จากนั้นในอีกสามหัวข้อต่อไป เราจะมาดูเกี่ยวกับอัลกอริทึม 3 แบบ ของ subword tokenization",Ke,F,Re,O,Jt='<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 เลยด้วย ซึ่งมีประโยชน์สำหรับภาษาที่ไม่ได้ใช้ช่องว่างในการแบ่งคำเช่น ภาษาจีนหรือญี่ปุ่น',Ae,ee,zt="ความสามารถหลักอีกอย่างของ SentencePiece คือ <em>reversible tokenization</em> (การตัดคำที่แปลงกลับได้): เนื่องจากมันไม่ได้ treat พวกช่องว่างแบบพิเศษ เวลา decode ประโยคที่ตัดแล้วกลับคืน เราสามารถเชื่อม (concatenate)แต่ละ token ได้เลยและ และแทนที่ <code>_</code> ด้วยช่องว่าง ผลลัพธ์ก็คือ ข้อความที่ ถูก normalized",Ne,te,xt="อย่างที่คุณได้เห็นก่อนหน้านี้ BERT tokenizer จะลบช่องว่างที่ต่อกันออก ทำให้ตอนรวม token กลับ เราจะไม่ได้ข้อความแบบเดิม",qe,ne,Ye,se,jt=`ในบทถัดไป เราจะมาเรียนรู้อย่างละเอียด เกี่ยวกับอัลกอริทึมสามแบบ สำหรับ subword tokenization ได้แก่ BPE (ใช้กับ GPT-2 และ โมเดลอื่นๆ), WordPiece (ใช้กับ BERT), และ Unigram (ใช้กับ T5 และโมเดลอื่นๆ)
ก่อนที่จะไปเริ่มกัน เรามาดูภาพรวมของแต่ละอัลกอริทึมกันก่อน คุณสามารถกลับมาดูตารางนี้ใหม่ได้หลังจากที่อ่านบทถัดไปแล้ว เพื่อจะได้เข้าใจมากขึ้น`,Fe,le,vt='<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>',Oe,ae,wt="ในบทต่อไปเรามาเรียนเกี่ยวกับ BPE อย่างละเอียดกัน!",et,ie,tt,re,nt;return d=new Vt({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),g=new oe({props:{title:"Normalization และ pre-tokenization",local:"normalization-และ-pre-tokenization",headingTag:"h1"}}),h=new Dt({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"}]}}),x=new oe({props:{title:"Normalization",local:"normalization",headingTag:"h2"}}),j=new Ut({props:{id:"4IIC2jI9CaU"}}),C=new k({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">&quot;bert-base-uncased&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-built_in">type</span>(tokenizer.backend_tokenizer))`,wrap:!1}}),U=new k({props:{code:"JTNDY2xhc3MlMjAndG9rZW5pemVycy5Ub2tlbml6ZXInJTNF",highlighted:'&lt;<span class="hljs-keyword">class</span> <span class="hljs-string">&#x27;tokenizers.Tokenizer&#x27;</span>&gt;',wrap:!1}}),I=new k({props:{code:"cHJpbnQodG9rZW5pemVyLmJhY2tlbmRfdG9rZW5pemVyLm5vcm1hbGl6ZXIubm9ybWFsaXplX3N0ciglMjJIJUMzJUE5bGwlQzMlQjIlMjBoJUMzJUI0dyUyMGFyZSUyMCVDMyVCQyUzRiUyMikp",highlighted:'<span class="hljs-built_in">print</span>(tokenizer.backend_tokenizer.normalizer.normalize_str(<span class="hljs-string">&quot;Héllò hôw are ü?&quot;</span>))',wrap:!1}}),H=new k({props:{code:"J2hlbGxvJTIwaG93JTIwYXJlJTIwdSUzRic=",highlighted:'<span class="hljs-string">&#x27;hello how are u?&#x27;</span>',wrap:!1}}),L=new oe({props:{title:"Pre-tokenization",local:"pre-tokenization",headingTag:"h2"}}),Z=new Ut({props:{id:"grlLV8AIXug"}}),X=new k({props:{code:"dG9rZW5pemVyLmJhY2tlbmRfdG9rZW5pemVyLnByZV90b2tlbml6ZXIucHJlX3Rva2VuaXplX3N0ciglMjJIZWxsbyUyQyUyMGhvdyUyMGFyZSUyMCUyMHlvdSUzRiUyMik=",highlighted:'tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Hello, how are you?&quot;</span>)',wrap:!1}}),D=new k({props:{code:"JTVCKCdIZWxsbyclMkMlMjAoMCUyQyUyMDUpKSUyQyUyMCgnJTJDJyUyQyUyMCg1JTJDJTIwNikpJTJDJTIwKCdob3cnJTJDJTIwKDclMkMlMjAxMCkpJTJDJTIwKCdhcmUnJTJDJTIwKDExJTJDJTIwMTQpKSUyQyUyMCgneW91JyUyQyUyMCgxNiUyQyUyMDE5KSklMkMlMjAoJyUzRiclMkMlMjAoMTklMkMlMjAyMCkpJTVE",highlighted:'[(<span class="hljs-string">&#x27;Hello&#x27;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">&#x27;,&#x27;</span>, (<span class="hljs-number">5</span>, <span class="hljs-number">6</span>)), (<span class="hljs-string">&#x27;how&#x27;</span>, (<span class="hljs-number">7</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;are&#x27;</span>, (<span class="hljs-number">11</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">&#x27;you&#x27;</span>, (<span class="hljs-number">16</span>, <span class="hljs-number">19</span>)), (<span class="hljs-string">&#x27;?&#x27;</span>, (<span class="hljs-number">19</span>, <span class="hljs-number">20</span>))]',wrap:!1}}),W=new k({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIyZ3B0MiUyMiklMEF0b2tlbml6ZXIuYmFja2VuZF90b2tlbml6ZXIucHJlX3Rva2VuaXplci5wcmVfdG9rZW5pemVfc3RyKCUyMkhlbGxvJTJDJTIwaG93JTIwYXJlJTIwJTIweW91JTNGJTIyKQ==",highlighted:`tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)
tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Hello, how are you?&quot;</span>)`,wrap:!1}}),B=new k({props:{code:"JTVCKCdIZWxsbyclMkMlMjAoMCUyQyUyMDUpKSUyQyUyMCgnJTJDJyUyQyUyMCg1JTJDJTIwNikpJTJDJTIwKCclQzQlQTBob3cnJTJDJTIwKDYlMkMlMjAxMCkpJTJDJTIwKCclQzQlQTBhcmUnJTJDJTIwKDEwJTJDJTIwMTQpKSUyQyUyMCgnJUM0JUEwJyUyQyUyMCgxNCUyQyUyMDE1KSklMkMlMjAoJyVDNCVBMHlvdSclMkMlMjAoMTUlMkMlMjAxOSkpJTJDJTBBJTIwKCclM0YnJTJDJTIwKDE5JTJDJTIwMjApKSU1RA==",highlighted:`[(<span class="hljs-string">&#x27;Hello&#x27;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">5</span>)), (<span class="hljs-string">&#x27;,&#x27;</span>, (<span class="hljs-number">5</span>, <span class="hljs-number">6</span>)), (<span class="hljs-string">&#x27;Ġhow&#x27;</span>, (<span class="hljs-number">6</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;Ġare&#x27;</span>, (<span class="hljs-number">10</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">&#x27;Ġ&#x27;</span>, (<span class="hljs-number">14</span>, <span class="hljs-number">15</span>)), (<span class="hljs-string">&#x27;Ġyou&#x27;</span>, (<span class="hljs-number">15</span>, <span class="hljs-number">19</span>)),
(<span class="hljs-string">&#x27;?&#x27;</span>, (<span class="hljs-number">19</span>, <span class="hljs-number">20</span>))]`,wrap:!1}}),A=new k({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIydDUtc21hbGwlMjIpJTBBdG9rZW5pemVyLmJhY2tlbmRfdG9rZW5pemVyLnByZV90b2tlbml6ZXIucHJlX3Rva2VuaXplX3N0ciglMjJIZWxsbyUyQyUyMGhvdyUyMGFyZSUyMCUyMHlvdSUzRiUyMik=",highlighted:`tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;t5-small&quot;</span>)
tokenizer.backend_tokenizer.pre_tokenizer.pre_tokenize_str(<span class="hljs-string">&quot;Hello, how are you?&quot;</span>)`,wrap:!1}}),N=new k({props:{code:"JTVCKCclRTIlOTYlODFIZWxsbyUyQyclMkMlMjAoMCUyQyUyMDYpKSUyQyUyMCgnJUUyJTk2JTgxaG93JyUyQyUyMCg3JTJDJTIwMTApKSUyQyUyMCgnJUUyJTk2JTgxYXJlJyUyQyUyMCgxMSUyQyUyMDE0KSklMkMlMjAoJyVFMiU5NiU4MXlvdSUzRiclMkMlMjAoMTYlMkMlMjAyMCkpJTVE",highlighted:'[(<span class="hljs-string">&#x27;▁Hello,&#x27;</span>, (<span class="hljs-number">0</span>, <span class="hljs-number">6</span>)), (<span class="hljs-string">&#x27;▁how&#x27;</span>, (<span class="hljs-number">7</span>, <span class="hljs-number">10</span>)), (<span class="hljs-string">&#x27;▁are&#x27;</span>, (<span class="hljs-number">11</span>, <span class="hljs-number">14</span>)), (<span class="hljs-string">&#x27;▁you?&#x27;</span>, (<span class="hljs-number">16</span>, <span class="hljs-number">20</span>))]',wrap:!1}}),F=new oe({props:{title:"SentencePiece",local:"sentencepiece",headingTag:"h2"}}),ne=new oe({props:{title:"ภาพรวมของแต่ละอัลกอริทึม",local:"ภาพรวมของแตละอลกอรทม",headingTag:"h2"}}),ie=new Xt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter6/4.mdx"}}),{c(){$=i("meta"),me=l(),pe=i("p"),ce=l(),o(d.$$.fragment),ue=l(),o(g.$$.fragment),fe=l(),o(h.$$.fragment),ye=l(),T=i("p"),T.textContent=at,ke=l(),J=i("p"),J.textContent=it,$e=l(),b=i("div"),b.innerHTML=pt,be=l(),z=i("p"),z.innerHTML=rt,Me=l(),o(x.$$.fragment),de=l(),o(j.$$.fragment),ge=l(),v=i("p"),v.innerHTML=ot,he=l(),w=i("p"),w.innerHTML=mt,Te=l(),o(C.$$.fragment),Je=l(),o(U.$$.fragment),ze=l(),_=i("p"),_.innerHTML=ct,xe=l(),o(I.$$.fragment),je=l(),o(H.$$.fragment),ve=l(),P=i("p"),P.innerHTML=ut,we=l(),M=i("blockquote"),M.innerHTML=ft,Ce=l(),o(L.$$.fragment),Ue=l(),o(Z.$$.fragment),_e=l(),Q=i("p"),Q.innerHTML=yt,Ie=l(),V=i("p"),V.innerHTML=kt,He=l(),o(X.$$.fragment),Pe=l(),o(D.$$.fragment),Le=l(),E=i("p"),E.innerHTML=$t,Ze=l(),G=i("p"),G.textContent=bt,Qe=l(),o(W.$$.fragment),Ve=l(),S=i("p"),S.innerHTML=Mt,Xe=l(),o(B.$$.fragment),De=l(),K=i("p"),K.textContent=dt,Ee=l(),R=i("p"),R.textContent=gt,Ge=l(),o(A.$$.fragment),We=l(),o(N.$$.fragment),Se=l(),q=i("p"),q.innerHTML=ht,Be=l(),Y=i("p"),Y.textContent=Tt,Ke=l(),o(F.$$.fragment),Re=l(),O=i("p"),O.innerHTML=Jt,Ae=l(),ee=i("p"),ee.innerHTML=zt,Ne=l(),te=i("p"),te.textContent=xt,qe=l(),o(ne.$$.fragment),Ye=l(),se=i("p"),se.textContent=jt,Fe=l(),le=i("table"),le.innerHTML=vt,Oe=l(),ae=i("p"),ae.textContent=wt,et=l(),o(ie.$$.fragment),tt=l(),re=i("p"),this.h()},l(e){const t=Zt("svelte-u9bgzb",document.head);$=p(t,"META",{name:!0,content:!0}),t.forEach(n),me=a(e),pe=p(e,"P",{}),Ct(pe).forEach(n),ce=a(e),m(d.$$.fragment,e),ue=a(e),m(g.$$.fragment,e),fe=a(e),m(h.$$.fragment,e),ye=a(e),T=p(e,"P",{"data-svelte-h":!0}),r(T)!=="svelte-5vlo60"&&(T.textContent=at),ke=a(e),J=p(e,"P",{"data-svelte-h":!0}),r(J)!=="svelte-2fazkv"&&(J.textContent=it),$e=a(e),b=p(e,"DIV",{class:!0,"data-svelte-h":!0}),r(b)!=="svelte-oxfng3"&&(b.innerHTML=pt),be=a(e),z=p(e,"P",{"data-svelte-h":!0}),r(z)!=="svelte-sg3zrk"&&(z.innerHTML=rt),Me=a(e),m(x.$$.fragment,e),de=a(e),m(j.$$.fragment,e),ge=a(e),v=p(e,"P",{"data-svelte-h":!0}),r(v)!=="svelte-1uv1l65"&&(v.innerHTML=ot),he=a(e),w=p(e,"P",{"data-svelte-h":!0}),r(w)!=="svelte-e7ho8"&&(w.innerHTML=mt),Te=a(e),m(C.$$.fragment,e),Je=a(e),m(U.$$.fragment,e),ze=a(e),_=p(e,"P",{"data-svelte-h":!0}),r(_)!=="svelte-10kqmbe"&&(_.innerHTML=ct),xe=a(e),m(I.$$.fragment,e),je=a(e),m(H.$$.fragment,e),ve=a(e),P=p(e,"P",{"data-svelte-h":!0}),r(P)!=="svelte-17w43j1"&&(P.innerHTML=ut),we=a(e),M=p(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),r(M)!=="svelte-ovwaog"&&(M.innerHTML=ft),Ce=a(e),m(L.$$.fragment,e),Ue=a(e),m(Z.$$.fragment,e),_e=a(e),Q=p(e,"P",{"data-svelte-h":!0}),r(Q)!=="svelte-9lafcs"&&(Q.innerHTML=yt),Ie=a(e),V=p(e,"P",{"data-svelte-h":!0}),r(V)!=="svelte-aoq8v4"&&(V.innerHTML=kt),He=a(e),m(X.$$.fragment,e),Pe=a(e),m(D.$$.fragment,e),Le=a(e),E=p(e,"P",{"data-svelte-h":!0}),r(E)!=="svelte-6d29o9"&&(E.innerHTML=$t),Ze=a(e),G=p(e,"P",{"data-svelte-h":!0}),r(G)!=="svelte-w9v2tz"&&(G.textContent=bt),Qe=a(e),m(W.$$.fragment,e),Ve=a(e),S=p(e,"P",{"data-svelte-h":!0}),r(S)!=="svelte-1ulrvw9"&&(S.innerHTML=Mt),Xe=a(e),m(B.$$.fragment,e),De=a(e),K=p(e,"P",{"data-svelte-h":!0}),r(K)!=="svelte-18zjqy8"&&(K.textContent=dt),Ee=a(e),R=p(e,"P",{"data-svelte-h":!0}),r(R)!=="svelte-12nsiq9"&&(R.textContent=gt),Ge=a(e),m(A.$$.fragment,e),We=a(e),m(N.$$.fragment,e),Se=a(e),q=p(e,"P",{"data-svelte-h":!0}),r(q)!=="svelte-1udpawf"&&(q.innerHTML=ht),Be=a(e),Y=p(e,"P",{"data-svelte-h":!0}),r(Y)!=="svelte-yzh3de"&&(Y.textContent=Tt),Ke=a(e),m(F.$$.fragment,e),Re=a(e),O=p(e,"P",{"data-svelte-h":!0}),r(O)!=="svelte-z4dp1a"&&(O.innerHTML=Jt),Ae=a(e),ee=p(e,"P",{"data-svelte-h":!0}),r(ee)!=="svelte-1vgpntp"&&(ee.innerHTML=zt),Ne=a(e),te=p(e,"P",{"data-svelte-h":!0}),r(te)!=="svelte-apkayl"&&(te.textContent=xt),qe=a(e),m(ne.$$.fragment,e),Ye=a(e),se=p(e,"P",{"data-svelte-h":!0}),r(se)!=="svelte-cjb2w3"&&(se.textContent=jt),Fe=a(e),le=p(e,"TABLE",{"data-svelte-h":!0}),r(le)!=="svelte-1n44egn"&&(le.innerHTML=vt),Oe=a(e),ae=p(e,"P",{"data-svelte-h":!0}),r(ae)!=="svelte-afguos"&&(ae.textContent=wt),et=a(e),m(ie.$$.fragment,e),tt=a(e),re=p(e,"P",{}),Ct(re).forEach(n),this.h()},h(){st($,"name","hf:doc:metadata"),st($,"content",Gt),st(b,"class","flex justify-center"),st(M,"class","tip")},m(e,t){Qt(document.head,$),s(e,me,t),s(e,pe,t),s(e,ce,t),c(d,e,t),s(e,ue,t),c(g,e,t),s(e,fe,t),c(h,e,t),s(e,ye,t),s(e,T,t),s(e,ke,t),s(e,J,t),s(e,$e,t),s(e,b,t),s(e,be,t),s(e,z,t),s(e,Me,t),c(x,e,t),s(e,de,t),c(j,e,t),s(e,ge,t),s(e,v,t),s(e,he,t),s(e,w,t),s(e,Te,t),c(C,e,t),s(e,Je,t),c(U,e,t),s(e,ze,t),s(e,_,t),s(e,xe,t),c(I,e,t),s(e,je,t),c(H,e,t),s(e,ve,t),s(e,P,t),s(e,we,t),s(e,M,t),s(e,Ce,t),c(L,e,t),s(e,Ue,t),c(Z,e,t),s(e,_e,t),s(e,Q,t),s(e,Ie,t),s(e,V,t),s(e,He,t),c(X,e,t),s(e,Pe,t),c(D,e,t),s(e,Le,t),s(e,E,t),s(e,Ze,t),s(e,G,t),s(e,Qe,t),c(W,e,t),s(e,Ve,t),s(e,S,t),s(e,Xe,t),c(B,e,t),s(e,De,t),s(e,K,t),s(e,Ee,t),s(e,R,t),s(e,Ge,t),c(A,e,t),s(e,We,t),c(N,e,t),s(e,Se,t),s(e,q,t),s(e,Be,t),s(e,Y,t),s(e,Ke,t),c(F,e,t),s(e,Re,t),s(e,O,t),s(e,Ae,t),s(e,ee,t),s(e,Ne,t),s(e,te,t),s(e,qe,t),c(ne,e,t),s(e,Ye,t),s(e,se,t),s(e,Fe,t),s(e,le,t),s(e,Oe,t),s(e,ae,t),s(e,et,t),c(ie,e,t),s(e,tt,t),s(e,re,t),nt=!0},p:It,i(e){nt||(u(d.$$.fragment,e),u(g.$$.fragment,e),u(h.$$.fragment,e),u(x.$$.fragment,e),u(j.$$.fragment,e),u(C.$$.fragment,e),u(U.$$.fragment,e),u(I.$$.fragment,e),u(H.$$.fragment,e),u(L.$$.fragment,e),u(Z.$$.fragment,e),u(X.$$.fragment,e),u(D.$$.fragment,e),u(W.$$.fragment,e),u(B.$$.fragment,e),u(A.$$.fragment,e),u(N.$$.fragment,e),u(F.$$.fragment,e),u(ne.$$.fragment,e),u(ie.$$.fragment,e),nt=!0)},o(e){f(d.$$.fragment,e),f(g.$$.fragment,e),f(h.$$.fragment,e),f(x.$$.fragment,e),f(j.$$.fragment,e),f(C.$$.fragment,e),f(U.$$.fragment,e),f(I.$$.fragment,e),f(H.$$.fragment,e),f(L.$$.fragment,e),f(Z.$$.fragment,e),f(X.$$.fragment,e),f(D.$$.fragment,e),f(W.$$.fragment,e),f(B.$$.fragment,e),f(A.$$.fragment,e),f(N.$$.fragment,e),f(F.$$.fragment,e),f(ne.$$.fragment,e),f(ie.$$.fragment,e),nt=!1},d(e){e&&(n(me),n(pe),n(ce),n(ue),n(fe),n(ye),n(T),n(ke),n(J),n($e),n(b),n(be),n(z),n(Me),n(de),n(ge),n(v),n(he),n(w),n(Te),n(Je),n(ze),n(_),n(xe),n(je),n(ve),n(P),n(we),n(M),n(Ce),n(Ue),n(_e),n(Q),n(Ie),n(V),n(He),n(Pe),n(Le),n(E),n(Ze),n(G),n(Qe),n(Ve),n(S),n(Xe),n(De),n(K),n(Ee),n(R),n(Ge),n(We),n(Se),n(q),n(Be),n(Y),n(Ke),n(Re),n(O),n(Ae),n(ee),n(Ne),n(te),n(qe),n(Ye),n(se),n(Fe),n(le),n(Oe),n(ae),n(et),n(tt),n(re)),n($),y(d,e),y(g,e),y(h,e),y(x,e),y(j,e),y(C,e),y(U,e),y(I,e),y(H,e),y(L,e),y(Z,e),y(X,e),y(D,e),y(W,e),y(B,e),y(A,e),y(N,e),y(F,e),y(ne,e),y(ie,e)}}}const Gt='{"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 Wt(lt){return Ht(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class qt extends Pt{constructor($){super(),Lt(this,$,Wt,Et,_t,{})}}export{qt as component};

Xet Storage Details

Size:
29.1 kB
·
Xet hash:
c506ef5d95e7f2646f6549bc67acf462d07ee45940a6f9221286d065525c62aa

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.