import{s as Ue,o as Ie}from"../chunks/scheduler.37c15a92.js";import{S as Ae,i as We,g as he,s as m,r as f,A as Ce,h as xe,f as s,c as $,j as je,u as c,k as qe,y as Ve,a as p,v as u,t as l,b as Je,d as a,w as g,p as Ze}from"../chunks/index.2bf4358c.js";import{C as we}from"../chunks/CodeBlock.4e987730.js";import{C as Be}from"../chunks/CourseFloatingBanner.6add7356.js";import{Q as w}from"../chunks/Question.668688bc.js";import{F as Qe}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as x,E as Xe}from"../chunks/getInferenceSnippets.ebf8be91.js";function ve(M){let r,d,o,k;return r=new x({props:{title:"5. TFAutoModel คืออะไร?",local:"5-tfautomodel-คออะไร",headingTag:"h3"}}),o=new w({props:{choices:[{text:"โมเดลที่เทรนด้วยข้อมูลของคุณแบบอัตโนมัติ",explain:"ผิด คุณสับสนกับผลิตภัณฑ์ <a href='https://huggingface.co/autonlp'>AutoNLP</a> ของเราหรือเปล่า?"},{text:"เป็น object ที่ให้สถาปัตยกรรมที่ถูกต้องสำหรับ checkpoint นั้นๆออกมา",explain:"ถูกต้อง: <code>AutoModel</code> จำเป็นต้องรู้เพียงแค่ว่า checkpoint ใดที่จะใช้ในการสร้างโมเดลและให้สถาปัตยกรรมที่ถูกต้องกลับมา",correct:!0},{text:"โมเดลที่ตรวจหาภาษาที่ใช้สำหรับเป็นอินพุตของมันโดยอัตโนมัติเพื่อที่จะโหลด weights ที่ถูกต้อง",explain:"ผิด; ในขณะที่บาง checkpoints และโมเดล นั้นสามารถประมวลผลได้หลายภาษา, แต่ไม่มีเครื่องมือแบบ built-in สำหรับเลือก checkpoint ที่ตรงกับภาษาแบบอัตโนมัติเลย คุณลองไปดูที่ <a href='https://huggingface.co/models'>Model Hub</a> เพื่อหา checkpoint ที่ดีที่สุดสำหรับงานของคุณ!"}]}}),{c(){f(r.$$.fragment),d=m(),f(o.$$.fragment)},l(t){c(r.$$.fragment,t),d=$(t),c(o.$$.fragment,t)},m(t,b){u(r,t,b),p(t,d,b),u(o,t,b),k=!0},i(t){k||(a(r.$$.fragment,t),a(o.$$.fragment,t),k=!0)},o(t){l(r.$$.fragment,t),l(o.$$.fragment,t),k=!1},d(t){t&&s(d),g(r,t),g(o,t)}}}function Ee(M){let r,d,o,k;return r=new x({props:{title:"5. AutoModel คืออะไร?",local:"5-automodel-คออะไร",headingTag:"h3"}}),o=new w({props:{choices:[{text:"โมเดลที่เทรนด้วยข้อมูลของคุณแบบอัตโนมัติ",explain:"ผิด คุณสับสนกับผลิตภัณฑ์ <a href='https://huggingface.co/autonlp'>AutoNLP</a> ของเราหรือเปล่า?"},{text:"เป็น object ที่ให้สถาปัตยกรรมที่ถูกต้องสำหรับ checkpoint นั้นๆออกมา",explain:"ถูกต้อง: <code>AutoModel</code> จำเป็นต้องรู้เพียงแค่ว่า checkpoint ใดที่จะใช้ในการสร้างโมเดลและให้สถาปัตยกรรมที่ถูกต้องกลับมา",correct:!0},{text:"โมเดลที่ตรวจหาภาษาที่ใช้สำหรับเป็นอินพุตของมันโดยอัตโนมัติเพื่อที่จะโหลด weights ที่ถูกต้อง",explain:"ผิด; ในขณะที่บาง checkpoints และโมเดล นั้นสามารถประมวลผลได้หลายภาษา, แต่ไม่มีเครื่องมือแบบ built-in สำหรับเลือก checkpoint ที่ตรงกับภาษาแบบอัตโนมัติเลย คุณลองไปดูที่ <a href='https://huggingface.co/models'>Model Hub</a> เพื่อหา checkpoint ที่ดีที่สุดสำหรับงานของคุณ!"}]}}),{c(){f(r.$$.fragment),d=m(),f(o.$$.fragment)},l(t){c(r.$$.fragment,t),d=$(t),c(o.$$.fragment,t)},m(t,b){u(r,t,b),p(t,d,b),u(o,t,b),k=!0},i(t){k||(a(r.$$.fragment,t),a(o.$$.fragment,t),k=!0)},o(t){l(r.$$.fragment,t),l(o.$$.fragment,t),k=!1},d(t){t&&s(d),g(r,t),g(o,t)}}}function Fe(M){let r,d,o,k,t,b;return r=new x({props:{title:"10. มีอะไรบางอย่างที่ผิดปกติกับโค้ดต่อไปนี้หรือไม่?",local:"10-มอะไรบางอยางทผดปกตกบโคดตอไปนหรอไม",headingTag:"h3"}}),o=new we({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbCUwQSUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKCUyMmJlcnQtYmFzZS1jYXNlZCUyMiklMEFtb2RlbCUyMCUzRCUyMFRGQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZCglMjJncHQyJTIyKSUwQSUwQWVuY29kZWQlMjAlM0QlMjB0b2tlbml6ZXIoJTIySGV5ISUyMiUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwbW9kZWwoKiplbmNvZGVkKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModel

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
model = TFAutoModel.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)

encoded = tokenizer(<span class="hljs-string">&quot;Hey!&quot;</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
result = model(**encoded)`,wrap:!1}}),t=new w({props:{choices:[{text:"ไม่ ดูเหมือนว่ามันจะปกติ",explain:"โชคไม่ดีเลย, การต่อโมเดลกับ tokenizer ที่ผ่านการเทรนที่มาจาก checkpoint ที่แตกต่างกันนั้นเป็นไอเดียที่ไม่ค่อยดีเท่าไหร่ โมเดลไม่ได้ถูกเทรนมาให้สามารถเข้าใจผลลัพท์ที่ได้จาก tokenizer นี้ ดังนั้นผลลัพท์ของโมเดล(ถ้ามันสามารถรันได้!)ก็จะดูไม่เป็นเหตุเป็นผลซักเท่าไหร่"},{text:"tokenizer และโมเดลควรจะมาจาก checkpoint เดียวกันเสมอ",explain:"ถูกต้อง!",correct:!0},{text:"มันเป็นสิ่งที่ดีในการเติม(pad) และ ตัด(truncate) โดยใช้ tokenizer ซึ่งทุกอินพุดก็เป็นชุดของข้อมูลอยู่แล้ว",explain:"ถูกต้องที่ว่าทุกอินพุตของโมเดลจำเป็นต้องอยู่ในรูปแบบของชุด(batch) แต่อย่างไรก็ตาม การตัด(truncating) หรือ การเติม(padding) ประโยคนี้อาจจะไม่สมเหตุสมผล เนื่องจากมันมีแค่ประโยคเดียวและเทคนิคเหล่านั้นเป็นเทคนิคสำหรับการรวมกลุ่มประโยค(a list of sentences)เข้าด้วยกันให้เป็นชุดๆ(batch)"}]}}),{c(){f(r.$$.fragment),d=m(),f(o.$$.fragment),k=m(),f(t.$$.fragment)},l(n){c(r.$$.fragment,n),d=$(n),c(o.$$.fragment,n),k=$(n),c(t.$$.fragment,n)},m(n,h){u(r,n,h),p(n,d,h),u(o,n,h),p(n,k,h),u(t,n,h),b=!0},i(n){b||(a(r.$$.fragment,n),a(o.$$.fragment,n),a(t.$$.fragment,n),b=!0)},o(n){l(r.$$.fragment,n),l(o.$$.fragment,n),l(t.$$.fragment,n),b=!1},d(n){n&&(s(d),s(k)),g(r,n),g(o,n),g(t,n)}}}function He(M){let r,d,o,k,t,b;return r=new x({props:{title:"10. มีอะไรบางอย่างที่ผิดปกติกับโค้ดต่อไปนี้หรือไม่?",local:"10-มอะไรบางอยางทผดปกตกบโคดตอไปนหรอไม",headingTag:"h3"}}),o=new we({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWwlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWwuZnJvbV9wcmV0cmFpbmVkKCUyMmdwdDIlMjIpJTBBJTBBZW5jb2RlZCUyMCUzRCUyMHRva2VuaXplciglMjJIZXkhJTIyJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJwdCUyMiklMEFyZXN1bHQlMjAlM0QlMjBtb2RlbCgqKmVuY29kZWQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModel

tokenizer = AutoTokenizer.from_pretrained(<span class="hljs-string">&quot;bert-base-cased&quot;</span>)
model = AutoModel.from_pretrained(<span class="hljs-string">&quot;gpt2&quot;</span>)

encoded = tokenizer(<span class="hljs-string">&quot;Hey!&quot;</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
result = model(**encoded)`,wrap:!1}}),t=new w({props:{choices:[{text:"ไม่ ดูเหมือนว่ามันจะปกติ",explain:"โชคไม่ดีเลย, การต่อโมเดลกับ tokenizer ที่ผ่านการเทรนที่มาจาก checkpoint ที่แตกต่างกันนั้นเป็นไอเดียที่ไม่ค่อยดีเท่าไหร่ โมเดลไม่ได้ถูกเทรนมาให้สามารถเข้าใจผลลัพท์ที่ได้จาก tokenizer นี้ ดังนั้นผลลัพท์ของโมเดล(ถ้ามันสามารถรันได้!)ก็จะดูไม่เป็นเหตุเป็นผลซักเท่าไหร่"},{text:"tokenizer และโมเดลควรจะมาจาก checkpoint เดียวกันเสมอ",explain:"ถูกต้อง!",correct:!0},{text:"มันเป็นสิ่งที่ดีในการเติม(pad) และ ตัด(truncate) โดยใช้ tokenizer ซึ่งทุกอินพุดก็เป็นชุดของข้อมูลอยู่แล้ว",explain:"ถูกต้องที่ว่าทุกอินพุตของโมเดลจำเป็นต้องอยู่ในรูปแบบของชุด(batch) แต่อย่างไรก็ตาม การตัด(truncating) หรือ การเติม(padding) ประโยคนี้อาจจะไม่สมเหตุสมผล เนื่องจากมันมีแค่ประโยคเดียวและเทคนิคเหล่านั้นเป็นเทคนิคสำหรับการรวมกลุ่มประโยค(a list of sentences)เข้าด้วยกันให้เป็นชุดๆ(batch)"}]}}),{c(){f(r.$$.fragment),d=m(),f(o.$$.fragment),k=m(),f(t.$$.fragment)},l(n){c(r.$$.fragment,n),d=$(n),c(o.$$.fragment,n),k=$(n),c(t.$$.fragment,n)},m(n,h){u(r,n,h),p(n,d,h),u(o,n,h),p(n,k,h),u(t,n,h),b=!0},i(n){b||(a(r.$$.fragment,n),a(o.$$.fragment,n),a(t.$$.fragment,n),b=!0)},o(n){l(r.$$.fragment,n),l(o.$$.fragment,n),l(t.$$.fragment,n),b=!1},d(n){n&&(s(d),s(k)),g(r,n),g(o,n),g(t,n)}}}function Re(M){let r,d,o,k,t,b,n,h,j,Y,q,K,J,O,Z,ee,U,te,I,ne,A,ie,W,re,C,oe,z,_,N,V,se,B,le,Q,ae,X,pe,v,me,E,$e,F,fe,H,ce,R,ue,y,T,D,G,ge,L,de;t=new Qe({props:{fw:M[0]}}),n=new x({props:{title:"แบบทดสอบท้ายบท",local:"แบบทดสอบทายบท",headingTag:"h1"}}),j=new Be({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),q=new x({props:{title:"1. ลำดับขั้นตอนใน pipeline ของการทำโมเดลด้านภาษา(language modeling)เป็นอย่างไร ?",local:"1-ลำดบขนตอนใน-pipeline-ของการทำโมเดลดานภาษาlanguage-modelingเปนอยางไร-",headingTag:"h3"}}),J=new w({props:{choices:[{text:"ขั้นตอนแรก โมเดลจะทำการประมวลผลข้อความและให้ผลการทำนายออกมา หลังจากนั้น tokenizer จะทำการวิเคราะห์ผลการทำนายเหล่านี้และแปลงมันกลับมาเป็นข้อความเมื่อจำเป็น",explain:"โมเดลไม่สามารถเข้าใจข้อความได้! tokenizer จำเป็นต้องทำการ tokenize ข้อความก่อนและแปลงมันไปเป็น IDs ที่โมเดลสามารถเข้าใจมันได้"},{text:"ขั้นตอนแรก tokenizer จะประมวลผลข้อความและให้ IDs ออกมา หลังจากนั้นโมเดลจะประมวลผล IDs เหล่านี้และให้ผลการทำนายออกมา ซึ่งอาจจะเป็นข้อความบางอย่าง",explain:"ผลการทำนายของโมเดลไม่สามารถเป็นข้อความออกมาได้โดยตรง tokenizer จำเป็นต้องถูกใช้สำหรับการแปลงผลการทำนายกลับไปเป็นข้อความ!"},{text:"tokenizer ประมวลผลข้อความและให้ IDs ออกมา หลังจากนั้นโมเดลจะประมวลผล IDs เหล่านี้และให้ผลการทำนายออกมา จากนั้น tokenizer จะถูกใช้อีกครั้งในการแปลงผลการทำนายเหล่านี้กลับไปเป็นข้อความ",explain:"ถูกต้อง! tokenizer สามารถถูกใช้สำหรับทั้งการแปลงข้อความไปเป็น IDs (tokenizing) และการแปลงผลการทำนายกลับไปเป็นข้อความ(de-tokenizing)",correct:!0}]}}),Z=new x({props:{title:"2. tensor ที่เป็นเอาท์พุตออกมาจากโมเดล Transformer แบบพื้นฐานมีขนาดกี่มิติ และมิติเหล่านั้นเป็นอะไรบ้าง?",local:"2-tensor-ทเปนเอาทพตออกมาจากโมเดล-transformer-แบบพนฐานมขนาดกมต-และมตเหลานนเปนอะไรบาง",headingTag:"h3"}}),U=new w({props:{choices:[{text:"2: ความยาวของประโยค(sequence length) และขนาดของชุดข้อมูล(batch size)",explain:"ผิด! tensor ที่ออกมาจากโมเดลมีมิติที่สามด้วย: ขนาดของเลเยอร์ภายใน(hidden size)"},{text:"2: ความยาวของประโยค(sequence length) และขนาดของเลเยอร์ภายใน(hidden size)",explain:"ผิด! โมเดล Transformer ทุกโมเดลจะรับข้อมูลแบบชุด(batch), ถึงแม้จะมีประโยคเพียงประโยคเดียว; ขนาดของชุด(batch size) ก็เป็น 1!"},{text:"3: ความยาวของประโยค(sequence length) ขนาดของชุดข้อมูล(batch size) และขนาดของเลเยอร์ภายใน(hidden size)",explain:"ถูกต้อง!",correct:!0}]}}),I=new x({props:{title:"3. ข้อใดต่อไปนี้เป็นตัวอย่างของ tokenization แบบคำย่อย(subword)?",local:"3-ขอใดตอไปนเปนตวอยางของ-tokenization-แบบคำยอยsubword",headingTag:"h3"}}),A=new w({props:{choices:[{text:"WordPiece",explain:"ถูกต้อง, ข้อนี้เป็นตัวอย่างหนึ่งของ tokenization แบบคำย่อย(subword)!",correct:!0},{text:"tokenization ที่เน้นที่ตัวอักษร(Character-based)",explain:"tokenization ที่เน้นที่ตัวอักษร(Character-based) ไม่ได้เป็นประเภทของ tokenization แบบคำย่อย(subword)"},{text:"Splitting on whitespace and punctuation",explain:"อันนี้เป็น tokenization ประเภทเน้นคำ(word-based)!"},{text:"BPE",explain:"ถูกต้อง, ข้อนี้เป็นตัวอย่างหนึ่งของ tokenization แบบคำย่อย(subword)!",correct:!0},{text:"Unigram",explain:"ถูกต้อง, ข้อนี้เป็นตัวอย่างหนึ่งของ tokenization แบบคำย่อย(subword)!",correct:!0},{text:"ไม่มีคำตอบที่ถูกต้อง",explain:"ผิด!"}]}}),W=new x({props:{title:"4. model head คืออะไร?",local:"4-model-head-คออะไร",headingTag:"h3"}}),C=new w({props:{choices:[{text:"ส่วนประกอบหนึ่งของโมเดล Transformer พื้นฐาน ที่ส่งต่อ tensor ไปยังเลเยอร์ที่ถูกต้องของมัน",explain:"ผิด! ไม่มีส่วนประกอบแบบนั้น."},{text:"มันถูกเรียกอีกอย่างหนึ่งว่าเป็นกระบวนการ self-attention, มันดัดแปลงตัวแทน(representation) ของ token หนึ่งๆ เทียบกับ tokens อื่นๆ ในประโยค",explain:'ผิด! เลเยอร์ self-attention นั้นมี attention "heads," แต่มันไม่ใช่ตัวที่เอาไว้ดัดแปลงข้อมูล(not adaptation heads)'},{text:"เป็นส่วนประกอบเสริม ที่ประกอบด้วยเลเยอร์อย่างน้อยหนึ่งเลเยอร์ ใช้สำหรับแปลงผลการทำนายของ transformer ไปเป็นผลลัพท์เฉพาะสำหรับงานหนึ่งๆ",explain:"ถูกต้อง. Adaptation heads เรียกง่ายๆ ก็คือ heads, มีหลากหลายรูปแบบ:  heads สำหรับโมเดลด้านภาษา(language modeling), heads สำหรับการตอบคำถาม(question answering), heads สำหรับการจำแนกประโยค(sequence classification) ... ",correct:!0}]}});const Me=[Ee,ve],S=[];function ze(e,i){return e[0]==="pt"?0:1}z=ze(M),_=S[z]=Me[z](M),V=new x({props:{title:"6. มีเทคนิคอะไรบ้างที่เราต้องคำนึงถึงเมื่อจะต้องทำการจัดประโยคที่มีความยาวแตกต่างกันเข้าเป็นชุดเดียวกัน(batching)?",local:"6-มเทคนคอะไรบางทเราตองคำนงถงเมอจะตองทำการจดประโยคทมความยาวแตกตางกนเขาเปนชดเดยวกนbatching",headingTag:"h3"}}),B=new w({props:{choices:[{text:"การตัด(Truncating)",explain:"ถูกต้อง, การตัด(truncation) เป็นวิธีที่ถูกต้องในการทำให้ประโยคนั้นมีความยาวเท่ากันเพื่อให้สามารถใส่เข้าไปแล้วชุดข้อมูลมีขนาดเป็นจตุรัส แต่มันมีเพียงแค่เทคนิคนี้เทคนิคเดียวหรือเปล่า?",correct:!0},{text:"ให้ผลลัพท์ที่เป็น tensors ออกมา",explain:"ในขณะที่ใช้เทคนิคอื่นๆ นั้น คุณสามารถได้ผลลัพท์ที่เป็น tensors แบบจตุรัสได้, ดังนั้นการให้ผลลัพท์ที่เป็นเพียง tensor นั้นไม่ได้เป็นประโยชน์เมื่อทำการรวมประโยคเข้าเป็นชุดเดียวกัน"},{text:"การเติม(Padding)",explain:"ถูกต้อง, การเติม(padding) เป็นวิธีที่ถูกต้องในการทำให้ประโยคนั้นมีความยาวเท่ากันเพื่อให้สามารถใส่เข้าไปแล้วชุดข้อมูลมีขนาดเป็นจตุรัส แต่มันมีเพียงแค่เทคนิคนี้เทคนิคเดียวหรือเปล่า?",correct:!0},{text:"Attention masking",explain:"ถูกต้องเลย! Attention masks เป็นกระบวนการที่สำคัญมากในการจัดการประโยคที่มีความยาวแตกต่างกัน แต่นั้นก็ไม่ใช่เพียงวิธีเดียว",correct:!0}]}}),Q=new x({props:{title:"7. อะไรคือจุดประสงค์ของการใช้ฟังก์ชัน SoftMax กับผลลัพท์ที่เป็น logits ที่ได้จากโมเดลสำหรับจำแนกประโยค (sequence classification model)?",local:"7-อะไรคอจดประสงคของการใชฟงกชน-softmax-กบผลลพททเปน-logits-ทไดจากโมเดลสำหรบจำแนกประโยค-sequence-classification-model",headingTag:"h3"}}),X=new w({props:{choices:[{text:"มันจะช่วยลดค่าของ logits ลงทำให้มันมีความน่าเชื่อถือมากขึ้น",explain:"ผิด, ฟังก์ชัน SoftMax ไม่ได้ส่งผลอะไรกับความน่าเชื่อถือของผลลัพท์"},{text:"มันกำหนดขอบเขตค่าบนและล่าง เพื่อทำให้ค่าที่ได้สามารถเป็นที่เข้าใจได้",explain:"ถูกต้อง! ค่าผลลัพท์ที่ได้มีขอบเขตระหว่าง 0 และ 1 แต่นี่ก็ไม่ได้เป็นเพียงเหตุผลเดียวที่เราใช้ฟังก์ชัน SoftMax",correct:!0},{text:"ผลรวมของผลลัพท์เท่ากับ 1 ส่งผลให้สามารถแปลความหมายทางสถิติได้",explain:"ถูกต้อง! แต่นี่ก็ไม่ได้เป็นเพียงเหตุผลเดียวที่เราใช้ฟังก์ชัน SoftMax",correct:!0}]}}),v=new x({props:{title:"8. วิธีใดที่เป็นหัวใจหลักของ tokenizer API ส่วนใหญ่?",local:"8-วธใดทเปนหวใจหลกของ-tokenizer-api-สวนใหญ",headingTag:"h3"}}),E=new w({props:{choices:[{text:"<code>encode</code>, เพราะมันสามารถเข้ารหัสข้อความไปเป็น IDs และ IDs ไปเป็นคำทำนายได้",explain:"ผิด! ในขณะที่วิธีการ <code>encode</code> นั้นไม่มีอยู่ใน tokenizers, มันก็ไม่มีอยู่ในโมเดลเช่นเดียวกัน"},{text:"การเรียก tokenizer object โดยตรง",explain:"ถูกต้อง! วิธี <code>__call__</code> ของ tokenizer เป็นวิธีการที่ทรงพลังมากที่สามารถจัดการได้เกือบทุกอย่าง และมันก็เป็นวิธีการที่ถูกใช้ในการเอาผลการทำนายออกมาจากโมเดลด้วย",correct:!0},{text:"<code>pad</code>",explain:"ผิด! การเติม(Padding) เป็นประโยชน์มาก แต่มันก็เป็นแค่ส่วนหนึ่งของ tokenizer API"},{text:"<code>tokenize</code>",explain:"วิธี <code>tokenize</code> เป็นหนึ่งวิธีที่มีประโยชน์มากแต่มันก็ไม่ใช่หัวใจหลักของ tokenizer API"}]}}),F=new x({props:{title:"9. ตัวแปร result ในตัวอย่างโค้ดนี้มีค่าอะไรอยู่บ้าง?",local:"9-ตวแปร-result-ในตวอยางโคดนมคาอะไรอยบาง",headingTag:"h3"}}),H=new we({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZCglMjJiZXJ0LWJhc2UtY2FzZWQlMjIpJTBBcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyLnRva2VuaXplKCUyMkhlbGxvISUyMik=",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-cased&quot;</span>)
result = tokenizer.tokenize(<span class="hljs-string">&quot;Hello!&quot;</span>)`,wrap:!1}}),R=new w({props:{choices:[{text:"ลิสท์ของกลุ่มตัวอักษร(A list of strings), โดยที่แต่ละ string นั้นเป็น token",explain:"ถูกต้อง! แปลง token ไปเป็น IDs และส่งเข้าไปยังโมเดล!",correct:!0},{text:"ลิสท์ของ IDs",explain:"ไม่ถูกต้อง; นั้นเป็นหน้าที่ของ <code>__call__</code> หรือ <code>convert_tokens_to_ids</code>!"},{text:"string ที่ประกอบด้วย tokens ทั้งหมด",explain:"นั้นอาจจะไม่ใช่วิธีที่ดีที่สุด, เมื่อเป้าหมายคือการแบ่ง string ออกเป็นหลายๆ tokens "}]}});const _e=[He,Fe],P=[];function ye(e,i){return e[0]==="pt"?0:1}return y=ye(M),T=P[y]=_e[y](M),G=new Xe({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter2/8.mdx"}}),{c(){r=he("meta"),d=m(),o=he("p"),k=m(),f(t.$$.fragment),b=m(),f(n.$$.fragment),h=m(),f(j.$$.fragment),Y=m(),f(q.$$.fragment),K=m(),f(J.$$.fragment),O=m(),f(Z.$$.fragment),ee=m(),f(U.$$.fragment),te=m(),f(I.$$.fragment),ne=m(),f(A.$$.fragment),ie=m(),f(W.$$.fragment),re=m(),f(C.$$.fragment),oe=m(),_.c(),N=m(),f(V.$$.fragment),se=m(),f(B.$$.fragment),le=m(),f(Q.$$.fragment),ae=m(),f(X.$$.fragment),pe=m(),f(v.$$.fragment),me=m(),f(E.$$.fragment),$e=m(),f(F.$$.fragment),fe=m(),f(H.$$.fragment),ce=m(),f(R.$$.fragment),ue=m(),T.c(),D=m(),f(G.$$.fragment),ge=m(),L=he("p"),this.h()},l(e){const i=Ce("svelte-u9bgzb",document.head);r=xe(i,"META",{name:!0,content:!0}),i.forEach(s),d=$(e),o=xe(e,"P",{}),je(o).forEach(s),k=$(e),c(t.$$.fragment,e),b=$(e),c(n.$$.fragment,e),h=$(e),c(j.$$.fragment,e),Y=$(e),c(q.$$.fragment,e),K=$(e),c(J.$$.fragment,e),O=$(e),c(Z.$$.fragment,e),ee=$(e),c(U.$$.fragment,e),te=$(e),c(I.$$.fragment,e),ne=$(e),c(A.$$.fragment,e),ie=$(e),c(W.$$.fragment,e),re=$(e),c(C.$$.fragment,e),oe=$(e),_.l(e),N=$(e),c(V.$$.fragment,e),se=$(e),c(B.$$.fragment,e),le=$(e),c(Q.$$.fragment,e),ae=$(e),c(X.$$.fragment,e),pe=$(e),c(v.$$.fragment,e),me=$(e),c(E.$$.fragment,e),$e=$(e),c(F.$$.fragment,e),fe=$(e),c(H.$$.fragment,e),ce=$(e),c(R.$$.fragment,e),ue=$(e),T.l(e),D=$(e),c(G.$$.fragment,e),ge=$(e),L=xe(e,"P",{}),je(L).forEach(s),this.h()},h(){qe(r,"name","hf:doc:metadata"),qe(r,"content",Ge)},m(e,i){Ve(document.head,r),p(e,d,i),p(e,o,i),p(e,k,i),u(t,e,i),p(e,b,i),u(n,e,i),p(e,h,i),u(j,e,i),p(e,Y,i),u(q,e,i),p(e,K,i),u(J,e,i),p(e,O,i),u(Z,e,i),p(e,ee,i),u(U,e,i),p(e,te,i),u(I,e,i),p(e,ne,i),u(A,e,i),p(e,ie,i),u(W,e,i),p(e,re,i),u(C,e,i),p(e,oe,i),S[z].m(e,i),p(e,N,i),u(V,e,i),p(e,se,i),u(B,e,i),p(e,le,i),u(Q,e,i),p(e,ae,i),u(X,e,i),p(e,pe,i),u(v,e,i),p(e,me,i),u(E,e,i),p(e,$e,i),u(F,e,i),p(e,fe,i),u(H,e,i),p(e,ce,i),u(R,e,i),p(e,ue,i),P[y].m(e,i),p(e,D,i),u(G,e,i),p(e,ge,i),p(e,L,i),de=!0},p(e,[i]){const Te={};i&1&&(Te.fw=e[0]),t.$set(Te);let ke=z;z=ze(e),z!==ke&&(Ze(),l(S[ke],1,1,()=>{S[ke]=null}),Je(),_=S[z],_||(_=S[z]=Me[z](e),_.c()),a(_,1),_.m(N.parentNode,N));let be=y;y=ye(e),y!==be&&(Ze(),l(P[be],1,1,()=>{P[be]=null}),Je(),T=P[y],T||(T=P[y]=_e[y](e),T.c()),a(T,1),T.m(D.parentNode,D))},i(e){de||(a(t.$$.fragment,e),a(n.$$.fragment,e),a(j.$$.fragment,e),a(q.$$.fragment,e),a(J.$$.fragment,e),a(Z.$$.fragment,e),a(U.$$.fragment,e),a(I.$$.fragment,e),a(A.$$.fragment,e),a(W.$$.fragment,e),a(C.$$.fragment,e),a(_),a(V.$$.fragment,e),a(B.$$.fragment,e),a(Q.$$.fragment,e),a(X.$$.fragment,e),a(v.$$.fragment,e),a(E.$$.fragment,e),a(F.$$.fragment,e),a(H.$$.fragment,e),a(R.$$.fragment,e),a(T),a(G.$$.fragment,e),de=!0)},o(e){l(t.$$.fragment,e),l(n.$$.fragment,e),l(j.$$.fragment,e),l(q.$$.fragment,e),l(J.$$.fragment,e),l(Z.$$.fragment,e),l(U.$$.fragment,e),l(I.$$.fragment,e),l(A.$$.fragment,e),l(W.$$.fragment,e),l(C.$$.fragment,e),l(_),l(V.$$.fragment,e),l(B.$$.fragment,e),l(Q.$$.fragment,e),l(X.$$.fragment,e),l(v.$$.fragment,e),l(E.$$.fragment,e),l(F.$$.fragment,e),l(H.$$.fragment,e),l(R.$$.fragment,e),l(T),l(G.$$.fragment,e),de=!1},d(e){e&&(s(d),s(o),s(k),s(b),s(h),s(Y),s(K),s(O),s(ee),s(te),s(ne),s(ie),s(re),s(oe),s(N),s(se),s(le),s(ae),s(pe),s(me),s($e),s(fe),s(ce),s(ue),s(D),s(ge),s(L)),s(r),g(t,e),g(n,e),g(j,e),g(q,e),g(J,e),g(Z,e),g(U,e),g(I,e),g(A,e),g(W,e),g(C,e),S[z].d(e),g(V,e),g(B,e),g(Q,e),g(X,e),g(v,e),g(E,e),g(F,e),g(H,e),g(R,e),P[y].d(e),g(G,e)}}}const Ge='{"title":"แบบทดสอบท้ายบท","local":"แบบทดสอบทายบท","sections":[{"title":"1. ลำดับขั้นตอนใน pipeline ของการทำโมเดลด้านภาษา(language modeling)เป็นอย่างไร ?","local":"1-ลำดบขนตอนใน-pipeline-ของการทำโมเดลดานภาษาlanguage-modelingเปนอยางไร-","sections":[],"depth":3},{"title":"2. tensor ที่เป็นเอาท์พุตออกมาจากโมเดล Transformer แบบพื้นฐานมีขนาดกี่มิติ และมิติเหล่านั้นเป็นอะไรบ้าง?","local":"2-tensor-ทเปนเอาทพตออกมาจากโมเดล-transformer-แบบพนฐานมขนาดกมต-และมตเหลานนเปนอะไรบาง","sections":[],"depth":3},{"title":"3. ข้อใดต่อไปนี้เป็นตัวอย่างของ tokenization แบบคำย่อย(subword)?","local":"3-ขอใดตอไปนเปนตวอยางของ-tokenization-แบบคำยอยsubword","sections":[],"depth":3},{"title":"4. model head คืออะไร?","local":"4-model-head-คออะไร","sections":[],"depth":3},{"title":"5. AutoModel คืออะไร?","local":"5-automodel-คออะไร","sections":[],"depth":3},{"title":"5. TFAutoModel คืออะไร?","local":"5-tfautomodel-คออะไร","sections":[],"depth":3},{"title":"6. มีเทคนิคอะไรบ้างที่เราต้องคำนึงถึงเมื่อจะต้องทำการจัดประโยคที่มีความยาวแตกต่างกันเข้าเป็นชุดเดียวกัน(batching)?","local":"6-มเทคนคอะไรบางทเราตองคำนงถงเมอจะตองทำการจดประโยคทมความยาวแตกตางกนเขาเปนชดเดยวกนbatching","sections":[],"depth":3},{"title":"7. อะไรคือจุดประสงค์ของการใช้ฟังก์ชัน SoftMax กับผลลัพท์ที่เป็น logits ที่ได้จากโมเดลสำหรับจำแนกประโยค (sequence classification model)?","local":"7-อะไรคอจดประสงคของการใชฟงกชน-softmax-กบผลลพททเปน-logits-ทไดจากโมเดลสำหรบจำแนกประโยค-sequence-classification-model","sections":[],"depth":3},{"title":"8. วิธีใดที่เป็นหัวใจหลักของ tokenizer API ส่วนใหญ่?","local":"8-วธใดทเปนหวใจหลกของ-tokenizer-api-สวนใหญ","sections":[],"depth":3},{"title":"9. ตัวแปร result ในตัวอย่างโค้ดนี้มีค่าอะไรอยู่บ้าง?","local":"9-ตวแปร-result-ในตวอยางโคดนมคาอะไรอยบาง","sections":[],"depth":3},{"title":"10. มีอะไรบางอย่างที่ผิดปกติกับโค้ดต่อไปนี้หรือไม่?","local":"10-มอะไรบางอยางทผดปกตกบโคดตอไปนหรอไม","sections":[],"depth":3},{"title":"10. มีอะไรบางอย่างที่ผิดปกติกับโค้ดต่อไปนี้หรือไม่?","local":"10-มอะไรบางอยางทผดปกตกบโคดตอไปนหรอไม","sections":[],"depth":3}],"depth":1}';function Se(M,r,d){let o="pt";return Ie(()=>{const k=new URLSearchParams(window.location.search);d(0,o=k.get("fw")||"pt")}),[o]}class et extends Ae{constructor(r){super(),We(this,r,Se,Re,Ue,{})}}export{et as component};
