Buckets:
| import{s as Ul,n as wl,o as hl}from"../chunks/scheduler.505acc25.js";import{S as fl,i as gl,e as p,s as n,c as r,h as dl,a as i,d as e,b as a,f as ml,g as J,j as M,k as ge,l as Cl,m as l,n as y,t as c,o,p as j}from"../chunks/index.17dd9071.js";import{C as bl,H as fe,E as Ql}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.54c4ec8f.js";import{Y as kl}from"../chunks/Youtube.793fe4bf.js";import{C as T}from"../chunks/CodeBlock.81b142cc.js";import{C as $l}from"../chunks/CourseFloatingBanner.9496b79e.js";function Il(de){let x,Ys,Ds,qs,m,Ss,U,Ls,w,Ps,h,Ce=`สมมติว่าคุณต้องการจะใช้ language model ในการทำงานใดงานหนึ่ง แต่ตอนนี้ไม่มีโมเดลในภาษาที่คุณต้องการหรือโมเดลที่มีอยู่นั้นถูกเทรนจากคลังข้อมูลที่แตกต่างจากข้อมูลที่คุณต้องการจะใช้งานมาก | |
| ในกรณีนี้คุณอาจจะจำเป็นต้องเทรน langauge model ขึ้นมาใหม่ เพื่อให้ได้โมเดลที่เหมาะกับการใช้งานของคุณ และในการเทรนนั้นคุณก็ต้องมี tokenizer ที่เหมาะกับข้อมูลของคุณ | |
| แล้ววิธีเทรน tokenizer ขึ้นมาใหม่นั้นทำได้อย่างไร?`,Fs,f,be=`ใน<a href="/course/chapter2">บทที่ 2</a> คุณจะเห็นว่าโมเดล Transformer ส่วนมากใช้เทคนิคการตัดคำที่ใช้หน่วยย่อยของคำ (<em>subword tokenization algorithm</em> ) | |
| ในการตัดคำแบบนี้ ตัวตัดคำจะต้องหาหน่วยย่อยของคำ(subword)ที่เป็นประโยชน์และพบบ่อยในคลังข้อมูล ในกระบวนการหาคำย่อยนี้ tokenizer จะต้องอ่านทุกๆข้อความในคลังข้อมูล ขั้นตอนนี้เราเรียกว่าการ<em>เทรน</em>`,Ks,g,Qe="กฎที่ใช้ในการเทรนนั้นขึ้นกับประเภทของ tokenizer ที่เราเลือกใช้ เราจะพูดถึงกับอัลกอริทึม 3 แบบที่ใช้ในการเทรน tokenizer กันในตอนท้ายของบทนี้",Os,d,st,u,ke=`<p>⚠️ การเทรน tokenize จะไม่เหมือนการกับเทรนโมเดลทั่วไป ในการเทรนโมเดลทั่วไปเราใช้ stochastic gradient descent เพื่อลดค่า loss ในทุก batch กระบวนการนี้มีความ random อยู่ในตัวของมัน (ซึ่งแปลว่า ถ้าคุณเทรนโมเดลสองครั้งแล้วอยากได้ผลลัพธ์ที่เหมือนกัน คุณจะต้องตั้งค่า seed ของการ random ให้เหมือนกันในทุกครั้งที่คุณเทรน) | |
| ส่วนการเทรน tokenize เป็นกระบวนการทางสถิติที่พยายามจะค้นหาคำย่อยที่เหมาะสมที่สุดจากคลังข้อมูลหนึ่ง วิธีในการเลือกค้นหาคำย่อยนี้ก็มีหลากหลายวิธี | |
| ผลลัพธ์ของการเทรนประเภทนี้จะมีความคงที่ (deterministic) ซึ่งแปลว่าคุณจะได้ผลลัพธ์เดิมทุกครั้งหลังจากการเทรน ถ้าหากคุณใช้อัลกอริทึมและข้อมูลเดิมทุกครั้ง</p>`,tt,C,et,b,$e="🤗 Transformers มี API ที่ใช้งานง่าย ที่สามารถใช้เทรน tokenizer ให้มีลักษณะเหมือน tokenizer ตัวอื่นที่เรามีอยู่แล้ว โดยการใช้ <code>AutoTokenizer.train_new_from_iterator()</code>",lt,Q,Ie=`เพื่อให้คุณเห็นภาพชัดเจน เราจะสมมติว่า คุณต้องการเทรนโมเดล GPT-2 ตั้งแต่เริ่มแรก แต่เป็นภาษาอื่นที่ไม่ใช่ภาษาอังกฤษ | |
| สิ่งที่แรกที่คุณต้องทำคือรวบรวมข้อความในภาษานั้นเพื่อสร้างชุดข้อมูลสำหรับการเทรน | |
| ในตัวอย่างต่อไปนี้ เพื่อให้ผู้อ่านทุกคนเข้าใจได้ง่าย เราจะไม่ใช้ภาษารัสเซียหรือภาษาจีนเป็นตัวอย่าง แต่จะใช้ภาษาหนึ่งที่เป็นภาษาอังกฤษแบบพิเศษ นั่นคือ Python code`,nt,k,ze=`เราจะใช้ <a href="https://github.com/huggingface/datasets" rel="nofollow">🤗 Datasets</a> library เพื่อช่วยสร้างคลังข้อมูล | |
| และใช้ฟังก์ชัน <code>load_dataset()</code> เพื่อดาวโหลดและ cache ชุดข้อมูล <a href="https://huggingface.co/datasets/code_search_net" rel="nofollow">CodeSearchNet</a> | |
| ชุดข้อมูลชุดนี้ถูกสร้างขึ้นมาเพื่อใช้ในการแข่งขัน <a href="https://wandb.ai/github/CodeSearchNet/benchmark" rel="nofollow">CodeSearchNet challenge</a> | |
| และประกอบไปด้วยโค้ดของฟังก์ชันจาก open source libraries จาก GitHub ในหลายๆภาษา เราจะดาวโหลดเฉพาะโค้ดที่เป็น Python`,at,$,pt,I,_e="คุณสามารถเช็คดูข้อมูลส่วนที่ใช้เทรนได้โดยรันโค้ดข้างล่างนี้ เพื่อจะได้ดูว่าในชุดข้อมูลมีคอลัมน์อะไรบ้าง",it,z,Mt,_,rt,V,Ve=`เราจะเห็นว่าในชุดข้อมูลนี้ ส่วนที่เป็น docstrings จะถูกแยก ออกจากส่วนที่เป็น code และนอกจากนั้น แต่ละส่วนยังมีอีกคอลัมน์เพื่อเก็บข้อความที่ถูกตัดออกเป็น token แล้วอีกด้วย | |
| เราจะใช้แค่คอลัมน์ <code>whole_func_string</code> ในการเทรน tokenizer ของเรา`,Jt,A,Ae="คุณสามารถสุ่มตัวอย่างของข้อมูลในแต่ละคอลัมน์มาดูได้ดังนี้",yt,B,ct,Z,Be="คำสั่งข้างบนจะ print ผลลัพธ์ข้างล่างนี้ :",ot,v,jt,X,Ze=`หลังจากนั้น เราก็จะต้องแปลงชุดข้อมูลนี้เป็น <em>iterator</em> ของ list ของข้อความ (<em>iterator</em> of lists of texts) ตัวอย่างเช่น list ของ list ของข้อความ (list of list of texts) | |
| การใช้ list ของข้อความแบบนี้ จะทำให้การเทรนเร็วขึ้น เพราะว่าการเทรนเป็น batch จะเร็วกว่าการประมวลผลครั้งละหนึ่งข้อความ และสาเหตุที่ input ควรจะเป็น iterator ก็เพื่อป้องกันไม่ให้ Python อ่านข้อความทั้งหมดเข้าไปเก็บใน memory ของคอมพิวเตอร์ภายในครั้งเดียว | |
| ถ้าชุดข้อมูลของคุณนั้นใหญ่มาก คุณอาจจะลองใช้ 🤗 Datasets เพื่อช่วยจัดการชุดข้อมูล เพราะมันจะไม่อ่านข้อมูลทั้งหมดเข้าไปเก็บใน RAM แต่บันทึกข้อมูลใน disk แทน`,Tt,G,ve="โค้ดข้างล่างนี้จะสร้าง list ของ list ของ 1,000 ข้อความ (list of lists of 1,000 texts) และจะโหลดข้อมูล input ทั้งหมดไปเก็บใน memory:",xt,N,ut,W,Xe="ถ้าหากคุณเปลี่ยนมาใช้ Python generator แทน ก็จะป้องกันไม่ให้ Python โหลดข้อมูลทั้งหมดเข้าไปใน memory ถ้าไม่จำเป็น",mt,H,Ge="วิธีการสร้าง generator ก็ง่ายๆเพียงแค่ แทนที่วงเล็บเหลี่ยม <code>[</code> ด้วยเว็บเล็บธรรมดา <code>(</code> ในโค้ดข้างบน:",Ut,E,wt,D,Ne="โค้ดข้างบนนี้ จะไม่โหลดข้อความจาก <code>raw_datasets</code> ทั้งหมดเข้าไปใน memory แต่จะสร้าง iterator ซึ่งเป็น Python object ที่เป็นเสมือนตัวเก็บข้อมูลชั่วคราว",ht,R,We="การจะเรียกใช้ข้อมูลในนั้น ทำได้โดยใช้ <code>for</code> loop ข้อความใน iterator จะถูกโหลดเข้าไปใน memory ก็ต่อเมื่อคุณจะใช้งานมันเท่านั้น(ซึ่งก็คือ เวลาที่ <code>for</code> loop วนไปถึง item นั้น) ในตัวอย่างของเรา ในแต่ละ loop จะมีเพียงแค่ 1000 ข้อความเท่านั้นที่จะถูกโหลดมาเก็บไว้ใน memory การทำแบบนี้จะช่วยไม่ให้ memory ถูกใช้งานมากเกินไป หากคุณมีชุดข้อมูลที่ใหญ่มาก",ft,Y,He="แต่ข้อเสียของ generator ก็คือเราสามารถใช้มันได้แค่ครั้งเดียว ดูตัวอย่างจากโค้ดข้างล่างนี้",gt,q,dt,S,Ee="เราจะเห็นว่าโค้ดนี้ print ผลลัพธ์แค่ครั้งแรก ส่วนในการสั่ง print ครั้งที่สองเราได้เพียง list เปล่ากลับมา:",Ct,L,bt,P,De="เพื่อแก้ปัญหานี้ เราจะสร้างฟังก์ชันที่ผลิต Python generator เพื่อเอาไว้เก็บชุดข้อมูลแทน:",Qt,F,kt,K,Re="การสร้าง generator ทำได้โดย ใช้ <code>for</code> loop และ <code>yield</code> statement:",$t,O,It,ss,Ye="ฟังก์ชันนี้จะสร้าง generator แบบเดียวกับวิธีการข้างบน แต่ช่วยให้คุณสามารถเขียน logic ที่ซับซ้อนได้มากกว่าการใช้เพียง list comprehension",zt,ts,_t,es,qe="หลังจากเราก็มี iterator ที่แบ่งชุดข้อมูลเป็น batch แล้ว เราก็พร้อมแล้วที่จะเทรน tokenizer สิ่งแรกที่คุณต้องทำคือโหลด tokenizer ที่คุณต้องการจะใช้คู่กับโมเดลหลัก(ในตัวอย่างนี้โมเดลหลักของเราคือ GPT-2)",Vt,ls,At,ns,Se=`ถึงแม้ว่าเป้าหมายของเราคือการเทรน tokenizer ใหม่ เราจะเริ่มต้นด้วยการโหลด tokenizer ที่ถูกเทรนมาแล้ว เพื่อที่เราจะได้ไม่ต้องเริ่มกระบวนการทั้งหมดตั้งแต่แรก | |
| ข้อดีของการทำแบบนี้ก็คือ คุณไม่ต้องเสียเวลาตั้งค่าต่างๆ เช่น ประเภทอัลกอริทึมของ tokenizer หรือ token พิเศษต่างๆ tokenizer ตัวใหม่ของเราจะมีโครงสร้างเหมือนกับตัวที่ใช้ใน GPT-2 สิ่งเดียวที่แตกต่างคือชุดคำศัพท์(vocabulary) ซึ่งจะเปลี่ยนไปตามชุดข้อมูลใหม่ที่เราจะใช้`,Bt,as,Le="ก่อนอื่นมาดูกันว่า tokenizer ที่เราเพิ่งโหลดมา จะแบ่งข้อความตัวอย่างข้างล่างอย่างไร :",Zt,ps,vt,is,Xt,Ms,Pe=`tokenizer นี้มีการใช้สัญลักษณ์พิเศษ เช่น <code>Ġ</code> ซึ่งเอาไว้แทนช่องว่าง (space) และ <code>Ċ</code> ซึ่งแทนการเริ่มบรรทัดใหม่ (newline) | |
| เราจะเห็นว่า ผลลัพธ์ของการตัดคำไม่ค่อยจะดีนัก เพราะว่าช่องว่างที่อยู่ต่อกันนั้น ถูกแบ่งออกเป็นอย่างละ token ซึ่งจริงๆแล้วการแบ่งที่ดีกว่านี้คือ ช่องว่างที่อยู่ติดกันควรจะถูกรวมให้เป็น token เดียว (เพราะว่าการพิมพ์ช่องว่าง 4 หรือ 8 ครั้ง เป็นสิ่งที่พบได้ทั่วไปในการเขียนโค้ด)`,Gt,rs,Fe="นอกจากนั้น tokenizer นี้ยังแบ่งชื่อฟังก์ชันได้ไม่ดีเท่าไหร่ เหมือนกับว่ามันไม่คุ้นเคยกับสัญลักษณ์ <code>_</code> ทำให้ชื่อฟังก์ชันถูกแยกออกเป็นสี่ส่วน",Nt,Js,Ke="เรามาเริ่มเทรน tokenizer ตัวใหม่กัน แล้วดูว่า เราจะแก้ปัญหานี้ได้หรือเปล่า เราจะเริ่มจากการใช้ Python method ชื่อว่า <code>train_new_from_iterator()</code>:",Wt,ys,Ht,cs,Oe="เวลารันคำสั่งนี้ โปรแกรมอาจจะเวลาซักพัก ถ้าคุณใช้ชุดข้อมูลที่ใหญ่มาก แต่สำหรับชุดข้อมูลตัวอย่างของเราที่มีขนาด 1.6 GB การประมวลผลนั้นค่อนข้างเร็ว (ใช้เวลาทั้งหมด 1 นาที 16 วินาที บนซีพียู AMD Ryzen 9 3900X CPU ซึ่งมี 12 cores)",Et,os,sl="สิ่งหนึ่งที่คุณควรรู้คือ <code>AutoTokenizer.train_new_from_iterator()</code> นั้น ใช้งานได้แค่ในกรณีที่ตัวตัดคำเป็นแบบเร็ว",Dt,js,tl=`คุณจะได้เห็นในบทต่อไปว่า 🤗 Transformers library มี tokenizer สองประเภท ประเภทแรกคือตัวที่เขียนด้วย Python ล้วน และประเภทที่สอง(แบบเร็ว)ที่สร้างจาก 🤗 Tokenizers library ซึ่งใช้ภาษา <a href="https://www.rust-lang.org" rel="nofollow">Rust</a> ในการเขียน | |
| แม้ว่า Python จะเป็นภาษาที่ได้รับความนิยมมากที่สุดในงานด้าน data science และ deep learning แต่ถ้าเราต้องการประมวลผลข้อมูลให้รวดเร็วมากขึ้น โดยใช้การประมวลผลแบบ parallel (หมายถึง ประมวลผลหลายๆงานพร้อมๆกัน) เราจำเป็นต้องเขียนโปรแกรมด้วยภาษาอื่น | |
| ตัวอย่างเช่น การคูณเมทริกซ์ ซึ่งถือเป็นการคำนวณหลักในการประมวลผลของโมเดลประเภท neural network โค้ดส่วนนี้จะถูกเขียนด้วยภาษา CUDA ซึ่งเป็น C library ที่ถูกพัฒนาให้เหมาะกับการใช้งานร่วมกับ GPU | |
| หากเราเขียนโปรแกรมสำหรับเทรน tokenizer ด้วย Python อย่างเดียว จะทำให้การคำนวณช้ามาก นี่คือเหตุผลที่ Huggingface สร้าง 🤗 Tokenizers library ขึ้นมา`,Rt,Ts,el="แต่ไม่ต้องกังวลกับส่วนนี้ เพราะคุณไม่จำเป็นต้องรู้ภาษา Rust เพื่อจะใช้งานตัวตัดคำแบบเร็วนี้ เหมือนกับที่คุณไม่จำเป็นต้องรู้ภาษา CUDA เพื่อจะรันโมเดลบน GPU",Yt,xs,ll=`🤗 Tokenizers library มี Python bindings สำหรับ method ที่ต้องเรียกใช้โค้ดจากภาษา Rust | |
| ตัวอย่างเช่น โค้ดส่วนที่ทำให้การเทรน tokenizer เป็นไปแบบ parallel หรือตอนที่เรารัน tokenizer กับ | |
| input แบบ batch <a href="/course/chapter3">Chapter 3</a>`,qt,us,nl=`โมเดล Transformer ส่วนมากรองรับการใช้งานร่วมกับตัวตัดคำแบบเร็ว (แต่มีกรณียกเว้น คุณสามารถเช็คดูได้ที่<a href="https://huggingface.co/transformers/#supported-frameworks" rel="nofollow">นี่</a>) | |
| สำหรับโมเดลที่รองรับการตัดคำแบบเร็ว <code>AutoTokenizer</code> API จะโหลดตัวตัดคำแบบเร็วเป็นค่าเริ่มต้นเสมอ`,St,ms,al="ใน section ถัดไปเราจะเรียนเกี่ยวกับ feature พิเศษต่างๆของตัวตัดคำแบบเร็ว ซึ่งจะมีประโยชน์ในงานประเภท token classification หรือ question answering",Lt,Us,pl="ก่อนที่เราจะไปดูรายละเอียดกัน เรามาดูประสิทธิภาพของ tokenizer ที่เพิ่งเทรนเสร็จแล้วของเรากันดีกว่า เราจะลองใส่ข้อความที่เราใช้ในตัวอย่างด้านบนให้กับ tokenizer ของเราดู",Pt,ws,Ft,hs,Kt,fs,il=`ในผลลัพธ์ของการตัดคำ คุณจะยังเห็นสัญลักษณ์พิเศษ <code>Ġ</code> และ <code>Ċ</code> เหมือนในตัวอย่างก่อนหน้า แต่คุณจะสังเกตว่า ตอนนี้ tokenizer ของเรานั้นได้เรียนรู้และเห็นว่า token บางตัวนั้น โดดเด่นกว่าตัวอื่นๆในชุดข้อมูล | |
| ตัวอย่างเช่น token <code>ĊĠĠĠ</code> แสดงถึงการย่อหน้า(indentation) และ <code>Ġ"""</code> แสดงถึงเครื่องหมายคำพูดสามตัว ที่โปรแกรมเมอร์ใช้เวลาจะเริ่มเขียน docstring | |
| ตัวตัดคำใหม่นี้ ยังแบ่งชื่อฟังก์ชันได้อย่างถูกต้องอีกด้วย โดยแบ่งที่ <code>_</code>`,Ot,gs,Ml="การแบ่งคำแบบนี้ ทำให้สัญลักษณ์หรือตัวอักษรต่างๆถูกรวบให้กระทัดรัดขึ้น หากเทียบกับ tokenizer เก่าที่เทรนจากข้อความภาษาอังกฤษปกติ เราจะเห็นว่า ถ้าเราใช้ทั้งสอง tokenizer เพื่อตัดข้อความ input เดียวกัน tokenizer เก่าจะให้ผลลัพธ์ที่ยาวกว่า tokenizer ตัวใหม่",se,ds,te,Cs,ee,bs,rl="มาดูอีกตัวอย่างกัน :",le,Qs,ne,ks,ae,$s,Jl="ในตัวอย่างนี้ นอกจากเราจะเห็น token ที่แสดงถึงย่อหน้าแล้ว เรายังเห็น token ของ double indentation ซึ่งคือ <code>ĊĠĠĠĠĠĠĠ</code> ส่วนคำที่มีความหมายพิเศษใน Python เช่น <code>class</code>, <code>init</code>, <code>call</code>, <code>self</code> และ <code>return</code> ก็ถูกแบ่งให้เป็นอย่างละ token อย่างถูกต้อง",pe,Is,yl="นอกจากนั้น เราจะยังเห็นด้วยว่า tokenizer จะตัดแบ่งข้อความเวลาที่มันเห็นสัญลักษณ์ <code>_</code> และ <code>.</code> และยังแบ่งข้อความที่เป็น camel-cased ได้อย่างถูกต้อง เช่น <code>LinearLayer</code> ถูกแยกออกเป็น <code>["ĠLinear", "Layer"]</code>",ie,zs,Me,_s,cl="เพื่อที่เราจะสามารถใช้งาน tokenizer ที่เราเทรนเมื่อซักครู่นี้ได้อีกในครั้งหน้า เราจำเป็นจะต้องเก็บบันทึกมันไว้ ในการเซฟเราจะใช้ method ชื่อ <code>save_pretrained()</code>",re,Vs,Je,As,ol=`คำสั่งนี้จะสร้างแฟ้มงาน (folder) ขึ้นมาใหม่ ชื่อว่า <em>code-search-net-tokenizer</em> ซึ่งเอาไว้บันทึกข้อมูลต่างๆของ tokenizer ที่จำเป็นในการเรียกใช้งานอีกครั้ง | |
| ถ้าคุณต้องการจะแชร์ tokenizer นี้กับเพื่อนร่วมงานหรือเพื่อนของคุณ คุณสามารถอัพโหลดมันไปที่ Hub ของ Huggingface ได้ โดยคุณจะต้อง login เข้าบัญชีก่อน | |
| ถ้าคุณทำงานใน notebook (เช่น Jupyter notebook) คุณสามารถใช้ function ข้างล่างนี้ได้เพื่อความสะดวก`,ye,Bs,ce,Zs,jl=`หลังจากคุณรันโค้ดข้างบน คุณจะเห็น widget ให้ล็อกอินเข้าบัญชี Hugging Face | |
| แต่หากคุณไม่ได้ใช้ notebook ให้พิมพ์คำสั่งข้างล่างนี้ใน terminal`,oe,vs,je,Xs,Tl="หลังจากล็อกอินแล้ว คุณจะสามารถ push tokenizer ของคุณไปที่ Hub ได้ โดยใช้คำสั่งข้างล่างนี้",Te,Gs,xe,Ns,xl="คำสั่งนี้จะสร้าง repository ใหม่ในชื่อ <code>code-search-net-tokenizer</code> ใน namespace ของคุณ ซึ่ง repository นี้ก็จะเก็บไฟล์เกี่ยวกับ tokenizer ของคุณไว้ หลังจากนั้น คุณก็จะสามารถดาวน์โหลด tokenizer นี้ได้ ด้วยการใช้ <code>from_pretrained()</code>",ue,Ws,me,Hs,ul='มาถึงตอนนี้คุณก็พร้อมแล้วที่จะเทรน และ fine-tune language model สำหรับงานที่คุณต้องการ เราจะเรียนเรื่องกันนี้ใน<a href="/course/chapter7">บทที่ 7</a> แต่ในบทนี้ เราจะเรียนเกี่ยวกับ fast tokenizer ให้ละเอียดมากขึ้นและมาดูกันว่า เวลาคุณรัน <code>train_new_from_iterator()</code> มีการคำนวณอะไรเกิดขึ้นบ้าง',Ue,Es,we,Rs,he;return m=new bl({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),U=new fe({props:{title:"การเทรน tokenizer จาก tokenizer ที่มีอยู่แล้ว",local:"การเทรน-tokenizer-จาก-tokenizer-ทมอยแลว",headingTag:"h1"}}),w=new $l({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/section2.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter6/section2.ipynb"}]}}),d=new kl({props:{id:"DJimQynXZsQ"}}),C=new fe({props:{title:"การสร้างคลังข้อมูล (Assembling a corpus)",local:"การสรางคลงขอมล-assembling-a-corpus",headingTag:"h2"}}),$=new T({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBJTIzJTIwVGhpcyUyMGNhbiUyMHRha2UlMjBhJTIwZmV3JTIwbWludXRlcyUyMHRvJTIwbG9hZCUyQyUyMHNvJTIwZ3JhYiUyMGElMjBjb2ZmZWUlMjBvciUyMHRlYSUyMHdoaWxlJTIweW91JTIwd2FpdCElMEFyYXdfZGF0YXNldHMlMjAlM0QlMjBsb2FkX2RhdGFzZXQoJTIyY29kZV9zZWFyY2hfbmV0JTIyJTJDJTIwJTIycHl0aG9uJTIyKQ==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| <span class="hljs-comment"># This can take a few minutes to load, so grab a coffee or tea while you wait!</span> | |
| raw_datasets = load_dataset(<span class="hljs-string">"code_search_net"</span>, <span class="hljs-string">"python"</span>)`,wrap:!1}}),z=new T({props:{code:"cmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQ=",highlighted:'raw_datasets[<span class="hljs-string">"train"</span>]',wrap:!1}}),_=new T({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidyZXBvc2l0b3J5X25hbWUnJTJDJTIwJ2Z1bmNfcGF0aF9pbl9yZXBvc2l0b3J5JyUyQyUyMCdmdW5jX25hbWUnJTJDJTIwJ3dob2xlX2Z1bmNfc3RyaW5nJyUyQyUyMCdsYW5ndWFnZSclMkMlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAnZnVuY19jb2RlX3N0cmluZyclMkMlMjAnZnVuY19jb2RlX3Rva2VucyclMkMlMjAnZnVuY19kb2N1bWVudGF0aW9uX3N0cmluZyclMkMlMjAnZnVuY19kb2N1bWVudGF0aW9uX3Rva2VucyclMkMlMjAnc3BsaXRfbmFtZSclMkMlMjAlMEElMjAlMjAlMjAlMjAlMjAlMjAnZnVuY19jb2RlX3VybCclMEElMjAlMjAlMjAlMjAlNUQlMkMlMEElMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDQxMjE3OCUwQSU3RCk=",highlighted:`Dataset({ | |
| features: [<span class="hljs-string">'repository_name'</span>, <span class="hljs-string">'func_path_in_repository'</span>, <span class="hljs-string">'func_name'</span>, <span class="hljs-string">'whole_func_string'</span>, <span class="hljs-string">'language'</span>, | |
| <span class="hljs-string">'func_code_string'</span>, <span class="hljs-string">'func_code_tokens'</span>, <span class="hljs-string">'func_documentation_string'</span>, <span class="hljs-string">'func_documentation_tokens'</span>, <span class="hljs-string">'split_name'</span>, | |
| <span class="hljs-string">'func_code_url'</span> | |
| ], | |
| num_rows: <span class="hljs-number">412178</span> | |
| })`,wrap:!1}}),B=new T({props:{code:"cHJpbnQocmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIxMjM0NTYlNUQlNUIlMjJ3aG9sZV9mdW5jX3N0cmluZyUyMiU1RCk=",highlighted:'<span class="hljs-built_in">print</span>(raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-number">123456</span>][<span class="hljs-string">"whole_func_string"</span>])',wrap:!1}}),v=new T({props:{code:"ZGVmJTIwaGFuZGxlX3NpbXBsZV9yZXNwb25zZXMoJTBBJTIwJTIwJTIwJTIwJTIwJTIwc2VsZiUyQyUyMHRpbWVvdXRfbXMlM0ROb25lJTJDJTIwaW5mb19jYiUzRERFRkFVTFRfTUVTU0FHRV9DQUxMQkFDSyklM0ElMEElMjAlMjAlMjAlMjAlMjIlMjIlMjJBY2NlcHRzJTIwbm9ybWFsJTIwcmVzcG9uc2VzJTIwZnJvbSUyMHRoZSUyMGRldmljZS4lMEElMEElMjAlMjAlMjAlMjBBcmdzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwdGltZW91dF9tcyUzQSUyMFRpbWVvdXQlMjBpbiUyMG1pbGxpc2Vjb25kcyUyMHRvJTIwd2FpdCUyMGZvciUyMGVhY2glMjByZXNwb25zZS4lMEElMjAlMjAlMjAlMjAlMjAlMjBpbmZvX2NiJTNBJTIwT3B0aW9uYWwlMjBjYWxsYmFjayUyMGZvciUyMHRleHQlMjBzZW50JTIwZnJvbSUyMHRoZSUyMGJvb3Rsb2FkZXIuJTBBJTBBJTIwJTIwJTIwJTIwUmV0dXJucyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyME9LQVklMjBwYWNrZXQncyUyMG1lc3NhZ2UuJTBBJTIwJTIwJTIwJTIwJTIyJTIyJTIyJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwc2VsZi5fYWNjZXB0X3Jlc3BvbnNlcygnT0tBWSclMkMlMjBpbmZvX2NiJTJDJTIwdGltZW91dF9tcyUzRHRpbWVvdXRfbXMp",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">handle_simple_responses</span>(<span class="hljs-params"> | |
| self, timeout_ms=<span class="hljs-literal">None</span>, info_cb=DEFAULT_MESSAGE_CALLBACK</span>): | |
| <span class="hljs-string">"""Accepts normal responses from the device. | |
| Args: | |
| timeout_ms: Timeout in milliseconds to wait for each response. | |
| info_cb: Optional callback for text sent from the bootloader. | |
| Returns: | |
| OKAY packet's message. | |
| """</span> | |
| <span class="hljs-keyword">return</span> self._accept_responses(<span class="hljs-string">'OKAY'</span>, info_cb, timeout_ms=timeout_ms)`,wrap:!1}}),N=new T({props:{code:"JTIzJTIwRG9uJ3QlMjB1bmNvbW1lbnQlMjB0aGUlMjBmb2xsb3dpbmclMjBsaW5lJTIwdW5sZXNzJTIweW91ciUyMGRhdGFzZXQlMjBpcyUyMHNtYWxsISUwQSUyMyUyMHRyYWluaW5nX2NvcnB1cyUyMCUzRCUyMCU1QnJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCaSUzQSUyMGklMjAlMkIlMjAxMDAwJTVEJTVCJTIyd2hvbGVfZnVuY19zdHJpbmclMjIlNUQlMjBmb3IlMjBpJTIwaW4lMjByYW5nZSgwJTJDJTIwbGVuKHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEKSUyQyUyMDEwMDApJTVE",highlighted:`<span class="hljs-comment"># Don't uncomment the following line unless your dataset is small!</span> | |
| <span class="hljs-comment"># training_corpus = [raw_datasets["train"][i: i + 1000]["whole_func_string"] for i in range(0, len(raw_datasets["train"]), 1000)]</span>`,wrap:!1}}),E=new T({props:{code:"dHJhaW5pbmdfY29ycHVzJTIwJTNEJTIwKCUwQSUyMCUyMCUyMCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCaSUyMCUzQSUyMGklMjAlMkIlMjAxMDAwJTVEJTVCJTIyd2hvbGVfZnVuY19zdHJpbmclMjIlNUQlMEElMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZSgwJTJDJTIwbGVuKHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEKSUyQyUyMDEwMDApJTBBKQ==",highlighted:`training_corpus = ( | |
| raw_datasets[<span class="hljs-string">"train"</span>][i : i + <span class="hljs-number">1000</span>][<span class="hljs-string">"whole_func_string"</span>] | |
| <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">0</span>, <span class="hljs-built_in">len</span>(raw_datasets[<span class="hljs-string">"train"</span>]), <span class="hljs-number">1000</span>) | |
| )`,wrap:!1}}),q=new T({props:{code:"Z2VuJTIwJTNEJTIwKGklMjBmb3IlMjBpJTIwaW4lMjByYW5nZSgxMCkpJTBBcHJpbnQobGlzdChnZW4pKSUwQXByaW50KGxpc3QoZ2VuKSk=",highlighted:`gen = (i <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">10</span>)) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-built_in">list</span>(gen)) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-built_in">list</span>(gen))`,wrap:!1}}),L=new T({props:{code:"JTVCMCUyQyUyMDElMkMlMjAyJTJDJTIwMyUyQyUyMDQlMkMlMjA1JTJDJTIwNiUyQyUyMDclMkMlMjA4JTJDJTIwOSU1RCUwQSU1QiU1RA==",highlighted:`[<span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">8</span>, <span class="hljs-number">9</span>] | |
| []`,wrap:!1}}),F=new T({props:{code:"ZGVmJTIwZ2V0X3RyYWluaW5nX2NvcnB1cygpJTNBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCaSUyMCUzQSUyMGklMjAlMkIlMjAxMDAwJTVEJTVCJTIyd2hvbGVfZnVuY19zdHJpbmclMjIlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpJTIwaW4lMjByYW5nZSgwJTJDJTIwbGVuKHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEKSUyQyUyMDEwMDApJTBBJTIwJTIwJTIwJTIwKSUwQSUwQSUwQXRyYWluaW5nX2NvcnB1cyUyMCUzRCUyMGdldF90cmFpbmluZ19jb3JwdXMoKQ==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_training_corpus</span>(): | |
| <span class="hljs-keyword">return</span> ( | |
| raw_datasets[<span class="hljs-string">"train"</span>][i : i + <span class="hljs-number">1000</span>][<span class="hljs-string">"whole_func_string"</span>] | |
| <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">0</span>, <span class="hljs-built_in">len</span>(raw_datasets[<span class="hljs-string">"train"</span>]), <span class="hljs-number">1000</span>) | |
| ) | |
| training_corpus = get_training_corpus()`,wrap:!1}}),O=new T({props:{code:"ZGVmJTIwZ2V0X3RyYWluaW5nX2NvcnB1cygpJTNBJTBBJTIwJTIwJTIwJTIwZGF0YXNldCUyMCUzRCUyMHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwc3RhcnRfaWR4JTIwaW4lMjByYW5nZSgwJTJDJTIwbGVuKGRhdGFzZXQpJTJDJTIwMTAwMCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBzYW1wbGVzJTIwJTNEJTIwZGF0YXNldCU1QnN0YXJ0X2lkeCUyMCUzQSUyMHN0YXJ0X2lkeCUyMCUyQiUyMDEwMDAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB5aWVsZCUyMHNhbXBsZXMlNUIlMjJ3aG9sZV9mdW5jX3N0cmluZyUyMiU1RA==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_training_corpus</span>(): | |
| dataset = raw_datasets[<span class="hljs-string">"train"</span>] | |
| <span class="hljs-keyword">for</span> start_idx <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">0</span>, <span class="hljs-built_in">len</span>(dataset), <span class="hljs-number">1000</span>): | |
| samples = dataset[start_idx : start_idx + <span class="hljs-number">1000</span>] | |
| <span class="hljs-keyword">yield</span> samples[<span class="hljs-string">"whole_func_string"</span>]`,wrap:!1}}),ts=new fe({props:{title:"การเทรน tokenizer",local:"การเทรน-tokenizer",headingTag:"h2"}}),ls=new T({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFvbGRfdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoJTIyZ3B0MiUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| old_tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"gpt2"</span>)`,wrap:!1}}),ps=new T({props:{code:"ZXhhbXBsZSUyMCUzRCUyMCcnJ2RlZiUyMGFkZF9udW1iZXJzKGElMkMlMjBiKSUzQSUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMkFkZCUyMHRoZSUyMHR3byUyMG51bWJlcnMlMjAlNjBhJTYwJTIwYW5kJTIwJTYwYiU2MC4lMjIlMjIlMjIlMEElMjAlMjAlMjAlMjByZXR1cm4lMjBhJTIwJTJCJTIwYicnJyUwQSUwQXRva2VucyUyMCUzRCUyMG9sZF90b2tlbml6ZXIudG9rZW5pemUoZXhhbXBsZSklMEF0b2tlbnM=",highlighted:`example = <span class="hljs-string">'''def add_numbers(a, b): | |
| """Add the two numbers \`a\` and \`b\`.""" | |
| return a + b'''</span> | |
| tokens = old_tokenizer.tokenize(example) | |
| tokens`,wrap:!1}}),is=new T({props:{code:"JTVCJ2RlZiclMkMlMjAnJUM0JUEwYWRkJyUyQyUyMCdfJyUyQyUyMCduJyUyQyUyMCd1bWJlcnMnJTJDJTIwJygnJTJDJTIwJ2EnJTJDJTIwJyUyQyclMkMlMjAnJUM0JUEwYiclMkMlMjAnKSUzQSclMkMlMjAnJUM0JThBJyUyQyUyMCclQzQlQTAnJTJDJTIwJyVDNCVBMCclMkMlMjAnJUM0JUEwJyUyQyUyMCclQzQlQTAlMjIlMjIlMjInJTJDJTIwJ0FkZCclMkMlMjAnJUM0JUEwdGhlJyUyQyUyMCclQzQlQTB0d28nJTJDJTBBJTIwJyVDNCVBMG51bWJlcnMnJTJDJTIwJyVDNCVBMCU2MCclMkMlMjAnYSclMkMlMjAnJTYwJyUyQyUyMCclQzQlQTBhbmQnJTJDJTIwJyVDNCVBMCU2MCclMkMlMjAnYiclMkMlMjAnJTYwJyUyQyUyMCcuJTIyJyUyQyUyMCclMjIlMjInJTJDJTIwJyVDNCU4QSclMkMlMjAnJUM0JUEwJyUyQyUyMCclQzQlQTAnJTJDJTIwJyVDNCVBMCclMkMlMjAnJUM0JUEwcmV0dXJuJyUyQyUyMCclQzQlQTBhJyUyQyUyMCclQzQlQTAlMkInJTJDJTIwJyVDNCVBMGInJTVE",highlighted:'[<span class="hljs-string">'def'</span>, <span class="hljs-string">'Ġadd'</span>, <span class="hljs-string">'_'</span>, <span class="hljs-string">'n'</span>, <span class="hljs-string">'umbers'</span>, <span class="hljs-string">'('</span>, <span class="hljs-string">'a'</span>, <span class="hljs-string">','</span>, <span class="hljs-string">'Ġb'</span>, <span class="hljs-string">'):'</span>, <span class="hljs-string">'Ċ'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'Ġ"""'</span>, <span class="hljs-string">'Add'</span>, <span class="hljs-string">'Ġthe'</span>, <span class="hljs-string">'Ġtwo'</span>,\n <span class="hljs-string">'Ġnumbers'</span>, <span class="hljs-string">'Ġ`'</span>, <span class="hljs-string">'a'</span>, <span class="hljs-string">'`'</span>, <span class="hljs-string">'Ġand'</span>, <span class="hljs-string">'Ġ`'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'`'</span>, <span class="hljs-string">'."'</span>, <span class="hljs-string">'""'</span>, <span class="hljs-string">'Ċ'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'Ġ'</span>, <span class="hljs-string">'Ġreturn'</span>, <span class="hljs-string">'Ġa'</span>, <span class="hljs-string">'Ġ+'</span>, <span class="hljs-string">'Ġb'</span>]',wrap:!1}}),ys=new T({props:{code:"dG9rZW5pemVyJTIwJTNEJTIwb2xkX3Rva2VuaXplci50cmFpbl9uZXdfZnJvbV9pdGVyYXRvcih0cmFpbmluZ19jb3JwdXMlMkMlMjA1MjAwMCk=",highlighted:'tokenizer = old_tokenizer.train_new_from_iterator(training_corpus, <span class="hljs-number">52000</span>)',wrap:!1}}),ws=new T({props:{code:"dG9rZW5zJTIwJTNEJTIwdG9rZW5pemVyLnRva2VuaXplKGV4YW1wbGUpJTBBdG9rZW5z",highlighted:`tokens = tokenizer.tokenize(example) | |
| tokens`,wrap:!1}}),hs=new T({props:{code:"JTVCJ2RlZiclMkMlMjAnJUM0JUEwYWRkJyUyQyUyMCdfJyUyQyUyMCdudW1iZXJzJyUyQyUyMCcoJyUyQyUyMCdhJyUyQyUyMCclMkMnJTJDJTIwJyVDNCVBMGInJTJDJTIwJyklM0EnJTJDJTIwJyVDNCU4QSVDNCVBMCVDNCVBMCVDNCVBMCclMkMlMjAnJUM0JUEwJTIyJTIyJTIyJyUyQyUyMCdBZGQnJTJDJTIwJyVDNCVBMHRoZSclMkMlMjAnJUM0JUEwdHdvJyUyQyUyMCclQzQlQTBudW1iZXJzJyUyQyUyMCclQzQlQTAlNjAnJTJDJTBBJTIwJ2EnJTJDJTIwJyU2MCclMkMlMjAnJUM0JUEwYW5kJyUyQyUyMCclQzQlQTAlNjAnJTJDJTIwJ2InJTJDJTIwJyU2MC4lMjIlMjIlMjInJTJDJTIwJyVDNCU4QSVDNCVBMCVDNCVBMCVDNCVBMCclMkMlMjAnJUM0JUEwcmV0dXJuJyUyQyUyMCclQzQlQTBhJyUyQyUyMCclQzQlQTAlMkInJTJDJTIwJyVDNCVBMGInJTVE",highlighted:'[<span class="hljs-string">'def'</span>, <span class="hljs-string">'Ġadd'</span>, <span class="hljs-string">'_'</span>, <span class="hljs-string">'numbers'</span>, <span class="hljs-string">'('</span>, <span class="hljs-string">'a'</span>, <span class="hljs-string">','</span>, <span class="hljs-string">'Ġb'</span>, <span class="hljs-string">'):'</span>, <span class="hljs-string">'ĊĠĠĠ'</span>, <span class="hljs-string">'Ġ"""'</span>, <span class="hljs-string">'Add'</span>, <span class="hljs-string">'Ġthe'</span>, <span class="hljs-string">'Ġtwo'</span>, <span class="hljs-string">'Ġnumbers'</span>, <span class="hljs-string">'Ġ`'</span>,\n <span class="hljs-string">'a'</span>, <span class="hljs-string">'`'</span>, <span class="hljs-string">'Ġand'</span>, <span class="hljs-string">'Ġ`'</span>, <span class="hljs-string">'b'</span>, <span class="hljs-string">'`."""'</span>, <span class="hljs-string">'ĊĠĠĠ'</span>, <span class="hljs-string">'Ġreturn'</span>, <span class="hljs-string">'Ġa'</span>, <span class="hljs-string">'Ġ+'</span>, <span class="hljs-string">'Ġb'</span>]',wrap:!1}}),ds=new T({props:{code:"cHJpbnQobGVuKHRva2VucykpJTBBcHJpbnQobGVuKG9sZF90b2tlbml6ZXIudG9rZW5pemUoZXhhbXBsZSkpKQ==",highlighted:`<span class="hljs-built_in">print</span>(<span class="hljs-built_in">len</span>(tokens)) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-built_in">len</span>(old_tokenizer.tokenize(example)))`,wrap:!1}}),Cs=new T({props:{code:"MjclMEEzNg==",highlighted:`<span class="hljs-number">27</span> | |
| <span class="hljs-number">36</span>`,wrap:!1}}),Qs=new T({props:{code:"ZXhhbXBsZSUyMCUzRCUyMCUyMiUyMiUyMmNsYXNzJTIwTGluZWFyTGF5ZXIoKSUzQSUwQSUyMCUyMCUyMCUyMGRlZiUyMF9faW5pdF9fKHNlbGYlMkMlMjBpbnB1dF9zaXplJTJDJTIwb3V0cHV0X3NpemUpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi53ZWlnaHQlMjAlM0QlMjB0b3JjaC5yYW5kbihpbnB1dF9zaXplJTJDJTIwb3V0cHV0X3NpemUpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwc2VsZi5iaWFzJTIwJTNEJTIwdG9yY2guemVyb3Mob3V0cHV0X3NpemUpJTBBJTBBJTIwJTIwJTIwJTIwZGVmJTIwX19jYWxsX18oc2VsZiUyQyUyMHgpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmV0dXJuJTIweCUyMCU0MCUyMHNlbGYud2VpZ2h0cyUyMCUyQiUyMHNlbGYuYmlhcyUwQSUyMCUyMCUyMCUyMCUyMiUyMiUyMiUwQXRva2VuaXplci50b2tlbml6ZShleGFtcGxlKQ==",highlighted:`example = <span class="hljs-string">"""class LinearLayer(): | |
| def __init__(self, input_size, output_size): | |
| self.weight = torch.randn(input_size, output_size) | |
| self.bias = torch.zeros(output_size) | |
| def __call__(self, x): | |
| return x @ self.weights + self.bias | |
| """</span> | |
| tokenizer.tokenize(example)`,wrap:!1}}),ks=new T({props:{code:"JTVCJ2NsYXNzJyUyQyUyMCclQzQlQTBMaW5lYXInJTJDJTIwJ0xheWVyJyUyQyUyMCcoKSUzQSclMkMlMjAnJUM0JThBJUM0JUEwJUM0JUEwJUM0JUEwJyUyQyUyMCclQzQlQTBkZWYnJTJDJTIwJyVDNCVBMF9fJyUyQyUyMCdpbml0JyUyQyUyMCdfXygnJTJDJTIwJ3NlbGYnJTJDJTIwJyUyQyclMkMlMjAnJUM0JUEwaW5wdXQnJTJDJTIwJ18nJTJDJTIwJ3NpemUnJTJDJTIwJyUyQyclMkMlMEElMjAnJUM0JUEwb3V0cHV0JyUyQyUyMCdfJyUyQyUyMCdzaXplJyUyQyUyMCcpJTNBJyUyQyUyMCclQzQlOEElQzQlQTAlQzQlQTAlQzQlQTAlQzQlQTAlQzQlQTAlQzQlQTAlQzQlQTAnJTJDJTIwJyVDNCVBMHNlbGYnJTJDJTIwJy4nJTJDJTIwJ3dlaWdodCclMkMlMjAnJUM0JUEwJTNEJyUyQyUyMCclQzQlQTB0b3JjaCclMkMlMjAnLiclMkMlMjAncmFuZG4nJTJDJTIwJygnJTJDJTIwJ2lucHV0JyUyQyUyMCdfJyUyQyUwQSUyMCdzaXplJyUyQyUyMCclMkMnJTJDJTIwJyVDNCVBMG91dHB1dCclMkMlMjAnXyclMkMlMjAnc2l6ZSclMkMlMjAnKSclMkMlMjAnJUM0JThBJUM0JUEwJUM0JUEwJUM0JUEwJUM0JUEwJUM0JUEwJUM0JUEwJUM0JUEwJyUyQyUyMCclQzQlQTBzZWxmJyUyQyUyMCcuJyUyQyUyMCdiaWFzJyUyQyUyMCclQzQlQTAlM0QnJTJDJTIwJyVDNCVBMHRvcmNoJyUyQyUyMCcuJyUyQyUyMCd6ZXJvcyclMkMlMjAnKCclMkMlMEElMjAnb3V0cHV0JyUyQyUyMCdfJyUyQyUyMCdzaXplJyUyQyUyMCcpJyUyQyUyMCclQzQlOEElQzQlOEElQzQlQTAlQzQlQTAlQzQlQTAnJTJDJTIwJyVDNCVBMGRlZiclMkMlMjAnJUM0JUEwX18nJTJDJTIwJ2NhbGwnJTJDJTIwJ19fKCclMkMlMjAnc2VsZiclMkMlMjAnJTJDJyUyQyUyMCclQzQlQTB4JyUyQyUyMCcpJTNBJyUyQyUyMCclQzQlOEElQzQlQTAlQzQlQTAlQzQlQTAlQzQlQTAlQzQlQTAlQzQlQTAlQzQlQTAnJTJDJTBBJTIwJyVDNCVBMHJldHVybiclMkMlMjAnJUM0JUEweCclMkMlMjAnJUM0JUEwJTQwJyUyQyUyMCclQzQlQTBzZWxmJyUyQyUyMCcuJyUyQyUyMCd3ZWlnaHRzJyUyQyUyMCclQzQlQTAlMkInJTJDJTIwJyVDNCVBMHNlbGYnJTJDJTIwJy4nJTJDJTIwJ2JpYXMnJTJDJTIwJyVDNCU4QSVDNCVBMCVDNCVBMCVDNCVBMCVDNCVBMCclNUQ=",highlighted:`[<span class="hljs-string">'class'</span>, <span class="hljs-string">'ĠLinear'</span>, <span class="hljs-string">'Layer'</span>, <span class="hljs-string">'():'</span>, <span class="hljs-string">'ĊĠĠĠ'</span>, <span class="hljs-string">'Ġdef'</span>, <span class="hljs-string">'Ġ__'</span>, <span class="hljs-string">'init'</span>, <span class="hljs-string">'__('</span>, <span class="hljs-string">'self'</span>, <span class="hljs-string">','</span>, <span class="hljs-string">'Ġinput'</span>, <span class="hljs-string">'_'</span>, <span class="hljs-string">'size'</span>, <span class="hljs-string">','</span>, | |
| <span class="hljs-string">'Ġoutput'</span>, <span class="hljs-string">'_'</span>, <span class="hljs-string">'size'</span>, <span class="hljs-string">'):'</span>, <span class="hljs-string">'ĊĠĠĠĠĠĠĠ'</span>, <span class="hljs-string">'Ġself'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'weight'</span>, <span class="hljs-string">'Ġ='</span>, <span class="hljs-string">'Ġtorch'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'randn'</span>, <span class="hljs-string">'('</span>, <span class="hljs-string">'input'</span>, <span class="hljs-string">'_'</span>, | |
| <span class="hljs-string">'size'</span>, <span class="hljs-string">','</span>, <span class="hljs-string">'Ġoutput'</span>, <span class="hljs-string">'_'</span>, <span class="hljs-string">'size'</span>, <span class="hljs-string">')'</span>, <span class="hljs-string">'ĊĠĠĠĠĠĠĠ'</span>, <span class="hljs-string">'Ġself'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'bias'</span>, <span class="hljs-string">'Ġ='</span>, <span class="hljs-string">'Ġtorch'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'zeros'</span>, <span class="hljs-string">'('</span>, | |
| <span class="hljs-string">'output'</span>, <span class="hljs-string">'_'</span>, <span class="hljs-string">'size'</span>, <span class="hljs-string">')'</span>, <span class="hljs-string">'ĊĊĠĠĠ'</span>, <span class="hljs-string">'Ġdef'</span>, <span class="hljs-string">'Ġ__'</span>, <span class="hljs-string">'call'</span>, <span class="hljs-string">'__('</span>, <span class="hljs-string">'self'</span>, <span class="hljs-string">','</span>, <span class="hljs-string">'Ġx'</span>, <span class="hljs-string">'):'</span>, <span class="hljs-string">'ĊĠĠĠĠĠĠĠ'</span>, | |
| <span class="hljs-string">'Ġreturn'</span>, <span class="hljs-string">'Ġx'</span>, <span class="hljs-string">'Ġ@'</span>, <span class="hljs-string">'Ġself'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'weights'</span>, <span class="hljs-string">'Ġ+'</span>, <span class="hljs-string">'Ġself'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'bias'</span>, <span class="hljs-string">'ĊĠĠĠĠ'</span>]`,wrap:!1}}),zs=new fe({props:{title:"การบันทึก tokenizer",local:"การบนทก-tokenizer",headingTag:"h2"}}),Vs=new T({props:{code:"dG9rZW5pemVyLnNhdmVfcHJldHJhaW5lZCglMjJjb2RlLXNlYXJjaC1uZXQtdG9rZW5pemVyJTIyKQ==",highlighted:'tokenizer.save_pretrained(<span class="hljs-string">"code-search-net-tokenizer"</span>)',wrap:!1}}),Bs=new T({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login | |
| notebook_login()`,wrap:!1}}),vs=new T({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}}),Gs=new T({props:{code:"dG9rZW5pemVyLnB1c2hfdG9faHViKCUyMmNvZGUtc2VhcmNoLW5ldC10b2tlbml6ZXIlMjIp",highlighted:'tokenizer.push_to_hub(<span class="hljs-string">"code-search-net-tokenizer"</span>)',wrap:!1}}),Ws=new T({props:{code:"JTIzJTIwUmVwbGFjZSUyMCUyMmh1Z2dpbmdmYWNlLWNvdXJzZSUyMiUyMGJlbG93JTIwd2l0aCUyMHlvdXIlMjBhY3R1YWwlMjBuYW1lc3BhY2UlMjB0byUyMHVzZSUyMHlvdXIlMjBvd24lMjB0b2tlbml6ZXIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJodWdnaW5nZmFjZS1jb3Vyc2UlMkZjb2RlLXNlYXJjaC1uZXQtdG9rZW5pemVyJTIyKQ==",highlighted:`<span class="hljs-comment"># Replace "huggingface-course" below with your actual namespace to use your own tokenizer</span> | |
| tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">"huggingface-course/code-search-net-tokenizer"</span>)`,wrap:!1}}),Es=new Ql({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter6/2.mdx"}}),{c(){x=p("meta"),Ys=n(),Ds=p("p"),qs=n(),r(m.$$.fragment),Ss=n(),r(U.$$.fragment),Ls=n(),r(w.$$.fragment),Ps=n(),h=p("p"),h.textContent=Ce,Fs=n(),f=p("p"),f.innerHTML=be,Ks=n(),g=p("p"),g.textContent=Qe,Os=n(),r(d.$$.fragment),st=n(),u=p("blockquote"),u.innerHTML=ke,tt=n(),r(C.$$.fragment),et=n(),b=p("p"),b.innerHTML=$e,lt=n(),Q=p("p"),Q.textContent=Ie,nt=n(),k=p("p"),k.innerHTML=ze,at=n(),r($.$$.fragment),pt=n(),I=p("p"),I.textContent=_e,it=n(),r(z.$$.fragment),Mt=n(),r(_.$$.fragment),rt=n(),V=p("p"),V.innerHTML=Ve,Jt=n(),A=p("p"),A.textContent=Ae,yt=n(),r(B.$$.fragment),ct=n(),Z=p("p"),Z.textContent=Be,ot=n(),r(v.$$.fragment),jt=n(),X=p("p"),X.innerHTML=Ze,Tt=n(),G=p("p"),G.textContent=ve,xt=n(),r(N.$$.fragment),ut=n(),W=p("p"),W.textContent=Xe,mt=n(),H=p("p"),H.innerHTML=Ge,Ut=n(),r(E.$$.fragment),wt=n(),D=p("p"),D.innerHTML=Ne,ht=n(),R=p("p"),R.innerHTML=We,ft=n(),Y=p("p"),Y.textContent=He,gt=n(),r(q.$$.fragment),dt=n(),S=p("p"),S.textContent=Ee,Ct=n(),r(L.$$.fragment),bt=n(),P=p("p"),P.textContent=De,Qt=n(),r(F.$$.fragment),kt=n(),K=p("p"),K.innerHTML=Re,$t=n(),r(O.$$.fragment),It=n(),ss=p("p"),ss.textContent=Ye,zt=n(),r(ts.$$.fragment),_t=n(),es=p("p"),es.textContent=qe,Vt=n(),r(ls.$$.fragment),At=n(),ns=p("p"),ns.textContent=Se,Bt=n(),as=p("p"),as.textContent=Le,Zt=n(),r(ps.$$.fragment),vt=n(),r(is.$$.fragment),Xt=n(),Ms=p("p"),Ms.innerHTML=Pe,Gt=n(),rs=p("p"),rs.innerHTML=Fe,Nt=n(),Js=p("p"),Js.innerHTML=Ke,Wt=n(),r(ys.$$.fragment),Ht=n(),cs=p("p"),cs.textContent=Oe,Et=n(),os=p("p"),os.innerHTML=sl,Dt=n(),js=p("p"),js.innerHTML=tl,Rt=n(),Ts=p("p"),Ts.textContent=el,Yt=n(),xs=p("p"),xs.innerHTML=ll,qt=n(),us=p("p"),us.innerHTML=nl,St=n(),ms=p("p"),ms.textContent=al,Lt=n(),Us=p("p"),Us.textContent=pl,Pt=n(),r(ws.$$.fragment),Ft=n(),r(hs.$$.fragment),Kt=n(),fs=p("p"),fs.innerHTML=il,Ot=n(),gs=p("p"),gs.textContent=Ml,se=n(),r(ds.$$.fragment),te=n(),r(Cs.$$.fragment),ee=n(),bs=p("p"),bs.textContent=rl,le=n(),r(Qs.$$.fragment),ne=n(),r(ks.$$.fragment),ae=n(),$s=p("p"),$s.innerHTML=Jl,pe=n(),Is=p("p"),Is.innerHTML=yl,ie=n(),r(zs.$$.fragment),Me=n(),_s=p("p"),_s.innerHTML=cl,re=n(),r(Vs.$$.fragment),Je=n(),As=p("p"),As.innerHTML=ol,ye=n(),r(Bs.$$.fragment),ce=n(),Zs=p("p"),Zs.textContent=jl,oe=n(),r(vs.$$.fragment),je=n(),Xs=p("p"),Xs.textContent=Tl,Te=n(),r(Gs.$$.fragment),xe=n(),Ns=p("p"),Ns.innerHTML=xl,ue=n(),r(Ws.$$.fragment),me=n(),Hs=p("p"),Hs.innerHTML=ul,Ue=n(),r(Es.$$.fragment),we=n(),Rs=p("p"),this.h()},l(s){const t=dl("svelte-u9bgzb",document.head);x=i(t,"META",{name:!0,content:!0}),t.forEach(e),Ys=a(s),Ds=i(s,"P",{}),ml(Ds).forEach(e),qs=a(s),J(m.$$.fragment,s),Ss=a(s),J(U.$$.fragment,s),Ls=a(s),J(w.$$.fragment,s),Ps=a(s),h=i(s,"P",{"data-svelte-h":!0}),M(h)!=="svelte-a0vfrb"&&(h.textContent=Ce),Fs=a(s),f=i(s,"P",{"data-svelte-h":!0}),M(f)!=="svelte-wmj4iq"&&(f.innerHTML=be),Ks=a(s),g=i(s,"P",{"data-svelte-h":!0}),M(g)!=="svelte-1aqu51c"&&(g.textContent=Qe),Os=a(s),J(d.$$.fragment,s),st=a(s),u=i(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),M(u)!=="svelte-18u2z41"&&(u.innerHTML=ke),tt=a(s),J(C.$$.fragment,s),et=a(s),b=i(s,"P",{"data-svelte-h":!0}),M(b)!=="svelte-1a9akqi"&&(b.innerHTML=$e),lt=a(s),Q=i(s,"P",{"data-svelte-h":!0}),M(Q)!=="svelte-16idyns"&&(Q.textContent=Ie),nt=a(s),k=i(s,"P",{"data-svelte-h":!0}),M(k)!=="svelte-1qz05e8"&&(k.innerHTML=ze),at=a(s),J($.$$.fragment,s),pt=a(s),I=i(s,"P",{"data-svelte-h":!0}),M(I)!=="svelte-1yoper8"&&(I.textContent=_e),it=a(s),J(z.$$.fragment,s),Mt=a(s),J(_.$$.fragment,s),rt=a(s),V=i(s,"P",{"data-svelte-h":!0}),M(V)!=="svelte-9lp8ei"&&(V.innerHTML=Ve),Jt=a(s),A=i(s,"P",{"data-svelte-h":!0}),M(A)!=="svelte-1kvr7s6"&&(A.textContent=Ae),yt=a(s),J(B.$$.fragment,s),ct=a(s),Z=i(s,"P",{"data-svelte-h":!0}),M(Z)!=="svelte-1vxkhh7"&&(Z.textContent=Be),ot=a(s),J(v.$$.fragment,s),jt=a(s),X=i(s,"P",{"data-svelte-h":!0}),M(X)!=="svelte-q6xu6u"&&(X.innerHTML=Ze),Tt=a(s),G=i(s,"P",{"data-svelte-h":!0}),M(G)!=="svelte-1gibedm"&&(G.textContent=ve),xt=a(s),J(N.$$.fragment,s),ut=a(s),W=i(s,"P",{"data-svelte-h":!0}),M(W)!=="svelte-1mun290"&&(W.textContent=Xe),mt=a(s),H=i(s,"P",{"data-svelte-h":!0}),M(H)!=="svelte-xw49j7"&&(H.innerHTML=Ge),Ut=a(s),J(E.$$.fragment,s),wt=a(s),D=i(s,"P",{"data-svelte-h":!0}),M(D)!=="svelte-f8cdcv"&&(D.innerHTML=Ne),ht=a(s),R=i(s,"P",{"data-svelte-h":!0}),M(R)!=="svelte-k9gzay"&&(R.innerHTML=We),ft=a(s),Y=i(s,"P",{"data-svelte-h":!0}),M(Y)!=="svelte-my13vx"&&(Y.textContent=He),gt=a(s),J(q.$$.fragment,s),dt=a(s),S=i(s,"P",{"data-svelte-h":!0}),M(S)!=="svelte-tpogfa"&&(S.textContent=Ee),Ct=a(s),J(L.$$.fragment,s),bt=a(s),P=i(s,"P",{"data-svelte-h":!0}),M(P)!=="svelte-7dj2z8"&&(P.textContent=De),Qt=a(s),J(F.$$.fragment,s),kt=a(s),K=i(s,"P",{"data-svelte-h":!0}),M(K)!=="svelte-c2ih1c"&&(K.innerHTML=Re),$t=a(s),J(O.$$.fragment,s),It=a(s),ss=i(s,"P",{"data-svelte-h":!0}),M(ss)!=="svelte-224zvf"&&(ss.textContent=Ye),zt=a(s),J(ts.$$.fragment,s),_t=a(s),es=i(s,"P",{"data-svelte-h":!0}),M(es)!=="svelte-oanflb"&&(es.textContent=qe),Vt=a(s),J(ls.$$.fragment,s),At=a(s),ns=i(s,"P",{"data-svelte-h":!0}),M(ns)!=="svelte-1g6sg40"&&(ns.textContent=Se),Bt=a(s),as=i(s,"P",{"data-svelte-h":!0}),M(as)!=="svelte-fnojui"&&(as.textContent=Le),Zt=a(s),J(ps.$$.fragment,s),vt=a(s),J(is.$$.fragment,s),Xt=a(s),Ms=i(s,"P",{"data-svelte-h":!0}),M(Ms)!=="svelte-w52enb"&&(Ms.innerHTML=Pe),Gt=a(s),rs=i(s,"P",{"data-svelte-h":!0}),M(rs)!=="svelte-1hlunit"&&(rs.innerHTML=Fe),Nt=a(s),Js=i(s,"P",{"data-svelte-h":!0}),M(Js)!=="svelte-1wxgplq"&&(Js.innerHTML=Ke),Wt=a(s),J(ys.$$.fragment,s),Ht=a(s),cs=i(s,"P",{"data-svelte-h":!0}),M(cs)!=="svelte-1t0cuvj"&&(cs.textContent=Oe),Et=a(s),os=i(s,"P",{"data-svelte-h":!0}),M(os)!=="svelte-qhbqio"&&(os.innerHTML=sl),Dt=a(s),js=i(s,"P",{"data-svelte-h":!0}),M(js)!=="svelte-swdiid"&&(js.innerHTML=tl),Rt=a(s),Ts=i(s,"P",{"data-svelte-h":!0}),M(Ts)!=="svelte-1asmn0x"&&(Ts.textContent=el),Yt=a(s),xs=i(s,"P",{"data-svelte-h":!0}),M(xs)!=="svelte-eipqg"&&(xs.innerHTML=ll),qt=a(s),us=i(s,"P",{"data-svelte-h":!0}),M(us)!=="svelte-fug5uk"&&(us.innerHTML=nl),St=a(s),ms=i(s,"P",{"data-svelte-h":!0}),M(ms)!=="svelte-1swlg4w"&&(ms.textContent=al),Lt=a(s),Us=i(s,"P",{"data-svelte-h":!0}),M(Us)!=="svelte-joi1vn"&&(Us.textContent=pl),Pt=a(s),J(ws.$$.fragment,s),Ft=a(s),J(hs.$$.fragment,s),Kt=a(s),fs=i(s,"P",{"data-svelte-h":!0}),M(fs)!=="svelte-111ndqd"&&(fs.innerHTML=il),Ot=a(s),gs=i(s,"P",{"data-svelte-h":!0}),M(gs)!=="svelte-quzlfg"&&(gs.textContent=Ml),se=a(s),J(ds.$$.fragment,s),te=a(s),J(Cs.$$.fragment,s),ee=a(s),bs=i(s,"P",{"data-svelte-h":!0}),M(bs)!=="svelte-10w04in"&&(bs.textContent=rl),le=a(s),J(Qs.$$.fragment,s),ne=a(s),J(ks.$$.fragment,s),ae=a(s),$s=i(s,"P",{"data-svelte-h":!0}),M($s)!=="svelte-mnqkem"&&($s.innerHTML=Jl),pe=a(s),Is=i(s,"P",{"data-svelte-h":!0}),M(Is)!=="svelte-9kajg0"&&(Is.innerHTML=yl),ie=a(s),J(zs.$$.fragment,s),Me=a(s),_s=i(s,"P",{"data-svelte-h":!0}),M(_s)!=="svelte-3sduq0"&&(_s.innerHTML=cl),re=a(s),J(Vs.$$.fragment,s),Je=a(s),As=i(s,"P",{"data-svelte-h":!0}),M(As)!=="svelte-1r8qr09"&&(As.innerHTML=ol),ye=a(s),J(Bs.$$.fragment,s),ce=a(s),Zs=i(s,"P",{"data-svelte-h":!0}),M(Zs)!=="svelte-52ued4"&&(Zs.textContent=jl),oe=a(s),J(vs.$$.fragment,s),je=a(s),Xs=i(s,"P",{"data-svelte-h":!0}),M(Xs)!=="svelte-188atjl"&&(Xs.textContent=Tl),Te=a(s),J(Gs.$$.fragment,s),xe=a(s),Ns=i(s,"P",{"data-svelte-h":!0}),M(Ns)!=="svelte-j9yxhz"&&(Ns.innerHTML=xl),ue=a(s),J(Ws.$$.fragment,s),me=a(s),Hs=i(s,"P",{"data-svelte-h":!0}),M(Hs)!=="svelte-zgktej"&&(Hs.innerHTML=ul),Ue=a(s),J(Es.$$.fragment,s),we=a(s),Rs=i(s,"P",{}),ml(Rs).forEach(e),this.h()},h(){ge(x,"name","hf:doc:metadata"),ge(x,"content",zl),ge(u,"class","warning")},m(s,t){Cl(document.head,x),l(s,Ys,t),l(s,Ds,t),l(s,qs,t),y(m,s,t),l(s,Ss,t),y(U,s,t),l(s,Ls,t),y(w,s,t),l(s,Ps,t),l(s,h,t),l(s,Fs,t),l(s,f,t),l(s,Ks,t),l(s,g,t),l(s,Os,t),y(d,s,t),l(s,st,t),l(s,u,t),l(s,tt,t),y(C,s,t),l(s,et,t),l(s,b,t),l(s,lt,t),l(s,Q,t),l(s,nt,t),l(s,k,t),l(s,at,t),y($,s,t),l(s,pt,t),l(s,I,t),l(s,it,t),y(z,s,t),l(s,Mt,t),y(_,s,t),l(s,rt,t),l(s,V,t),l(s,Jt,t),l(s,A,t),l(s,yt,t),y(B,s,t),l(s,ct,t),l(s,Z,t),l(s,ot,t),y(v,s,t),l(s,jt,t),l(s,X,t),l(s,Tt,t),l(s,G,t),l(s,xt,t),y(N,s,t),l(s,ut,t),l(s,W,t),l(s,mt,t),l(s,H,t),l(s,Ut,t),y(E,s,t),l(s,wt,t),l(s,D,t),l(s,ht,t),l(s,R,t),l(s,ft,t),l(s,Y,t),l(s,gt,t),y(q,s,t),l(s,dt,t),l(s,S,t),l(s,Ct,t),y(L,s,t),l(s,bt,t),l(s,P,t),l(s,Qt,t),y(F,s,t),l(s,kt,t),l(s,K,t),l(s,$t,t),y(O,s,t),l(s,It,t),l(s,ss,t),l(s,zt,t),y(ts,s,t),l(s,_t,t),l(s,es,t),l(s,Vt,t),y(ls,s,t),l(s,At,t),l(s,ns,t),l(s,Bt,t),l(s,as,t),l(s,Zt,t),y(ps,s,t),l(s,vt,t),y(is,s,t),l(s,Xt,t),l(s,Ms,t),l(s,Gt,t),l(s,rs,t),l(s,Nt,t),l(s,Js,t),l(s,Wt,t),y(ys,s,t),l(s,Ht,t),l(s,cs,t),l(s,Et,t),l(s,os,t),l(s,Dt,t),l(s,js,t),l(s,Rt,t),l(s,Ts,t),l(s,Yt,t),l(s,xs,t),l(s,qt,t),l(s,us,t),l(s,St,t),l(s,ms,t),l(s,Lt,t),l(s,Us,t),l(s,Pt,t),y(ws,s,t),l(s,Ft,t),y(hs,s,t),l(s,Kt,t),l(s,fs,t),l(s,Ot,t),l(s,gs,t),l(s,se,t),y(ds,s,t),l(s,te,t),y(Cs,s,t),l(s,ee,t),l(s,bs,t),l(s,le,t),y(Qs,s,t),l(s,ne,t),y(ks,s,t),l(s,ae,t),l(s,$s,t),l(s,pe,t),l(s,Is,t),l(s,ie,t),y(zs,s,t),l(s,Me,t),l(s,_s,t),l(s,re,t),y(Vs,s,t),l(s,Je,t),l(s,As,t),l(s,ye,t),y(Bs,s,t),l(s,ce,t),l(s,Zs,t),l(s,oe,t),y(vs,s,t),l(s,je,t),l(s,Xs,t),l(s,Te,t),y(Gs,s,t),l(s,xe,t),l(s,Ns,t),l(s,ue,t),y(Ws,s,t),l(s,me,t),l(s,Hs,t),l(s,Ue,t),y(Es,s,t),l(s,we,t),l(s,Rs,t),he=!0},p:wl,i(s){he||(c(m.$$.fragment,s),c(U.$$.fragment,s),c(w.$$.fragment,s),c(d.$$.fragment,s),c(C.$$.fragment,s),c($.$$.fragment,s),c(z.$$.fragment,s),c(_.$$.fragment,s),c(B.$$.fragment,s),c(v.$$.fragment,s),c(N.$$.fragment,s),c(E.$$.fragment,s),c(q.$$.fragment,s),c(L.$$.fragment,s),c(F.$$.fragment,s),c(O.$$.fragment,s),c(ts.$$.fragment,s),c(ls.$$.fragment,s),c(ps.$$.fragment,s),c(is.$$.fragment,s),c(ys.$$.fragment,s),c(ws.$$.fragment,s),c(hs.$$.fragment,s),c(ds.$$.fragment,s),c(Cs.$$.fragment,s),c(Qs.$$.fragment,s),c(ks.$$.fragment,s),c(zs.$$.fragment,s),c(Vs.$$.fragment,s),c(Bs.$$.fragment,s),c(vs.$$.fragment,s),c(Gs.$$.fragment,s),c(Ws.$$.fragment,s),c(Es.$$.fragment,s),he=!0)},o(s){o(m.$$.fragment,s),o(U.$$.fragment,s),o(w.$$.fragment,s),o(d.$$.fragment,s),o(C.$$.fragment,s),o($.$$.fragment,s),o(z.$$.fragment,s),o(_.$$.fragment,s),o(B.$$.fragment,s),o(v.$$.fragment,s),o(N.$$.fragment,s),o(E.$$.fragment,s),o(q.$$.fragment,s),o(L.$$.fragment,s),o(F.$$.fragment,s),o(O.$$.fragment,s),o(ts.$$.fragment,s),o(ls.$$.fragment,s),o(ps.$$.fragment,s),o(is.$$.fragment,s),o(ys.$$.fragment,s),o(ws.$$.fragment,s),o(hs.$$.fragment,s),o(ds.$$.fragment,s),o(Cs.$$.fragment,s),o(Qs.$$.fragment,s),o(ks.$$.fragment,s),o(zs.$$.fragment,s),o(Vs.$$.fragment,s),o(Bs.$$.fragment,s),o(vs.$$.fragment,s),o(Gs.$$.fragment,s),o(Ws.$$.fragment,s),o(Es.$$.fragment,s),he=!1},d(s){s&&(e(Ys),e(Ds),e(qs),e(Ss),e(Ls),e(Ps),e(h),e(Fs),e(f),e(Ks),e(g),e(Os),e(st),e(u),e(tt),e(et),e(b),e(lt),e(Q),e(nt),e(k),e(at),e(pt),e(I),e(it),e(Mt),e(rt),e(V),e(Jt),e(A),e(yt),e(ct),e(Z),e(ot),e(jt),e(X),e(Tt),e(G),e(xt),e(ut),e(W),e(mt),e(H),e(Ut),e(wt),e(D),e(ht),e(R),e(ft),e(Y),e(gt),e(dt),e(S),e(Ct),e(bt),e(P),e(Qt),e(kt),e(K),e($t),e(It),e(ss),e(zt),e(_t),e(es),e(Vt),e(At),e(ns),e(Bt),e(as),e(Zt),e(vt),e(Xt),e(Ms),e(Gt),e(rs),e(Nt),e(Js),e(Wt),e(Ht),e(cs),e(Et),e(os),e(Dt),e(js),e(Rt),e(Ts),e(Yt),e(xs),e(qt),e(us),e(St),e(ms),e(Lt),e(Us),e(Pt),e(Ft),e(Kt),e(fs),e(Ot),e(gs),e(se),e(te),e(ee),e(bs),e(le),e(ne),e(ae),e($s),e(pe),e(Is),e(ie),e(Me),e(_s),e(re),e(Je),e(As),e(ye),e(ce),e(Zs),e(oe),e(je),e(Xs),e(Te),e(xe),e(Ns),e(ue),e(me),e(Hs),e(Ue),e(we),e(Rs)),e(x),j(m,s),j(U,s),j(w,s),j(d,s),j(C,s),j($,s),j(z,s),j(_,s),j(B,s),j(v,s),j(N,s),j(E,s),j(q,s),j(L,s),j(F,s),j(O,s),j(ts,s),j(ls,s),j(ps,s),j(is,s),j(ys,s),j(ws,s),j(hs,s),j(ds,s),j(Cs,s),j(Qs,s),j(ks,s),j(zs,s),j(Vs,s),j(Bs,s),j(vs,s),j(Gs,s),j(Ws,s),j(Es,s)}}}const zl='{"title":"การเทรน tokenizer จาก tokenizer ที่มีอยู่แล้ว","local":"การเทรน-tokenizer-จาก-tokenizer-ทมอยแลว","sections":[{"title":"การสร้างคลังข้อมูล (Assembling a corpus)","local":"การสรางคลงขอมล-assembling-a-corpus","sections":[],"depth":2},{"title":"การเทรน tokenizer","local":"การเทรน-tokenizer","sections":[],"depth":2},{"title":"การบันทึก tokenizer","local":"การบนทก-tokenizer","sections":[],"depth":2}],"depth":1}';function _l(de){return hl(()=>{new URLSearchParams(window.location.search).get("fw")}),[]}class Gl extends fl{constructor(x){super(),gl(this,x,_l,Il,Ul,{})}}export{Gl as component}; | |
Xet Storage Details
- Size:
- 65.1 kB
- Xet hash:
- 57319b2853bee118eda24d3d85126e1745cd5c4529e571804192d8714e452b03
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.