import{s as Ae,o as We}from"../chunks/scheduler.cc52f4b9.js";import{S as Ce,i as Ve,e as we,s as m,c as f,h as Be,a as Me,d as s,b as $,f as Ze,g as c,k as je,l as ve,m as p,n as u,o as l,u as Ue,t as a,p as g,v as Ie}from"../chunks/index.85964560.js";import{C as Qe,H as h,E as Xe}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.4cab8d21.js";import{C as ze}from"../chunks/CodeBlock.b43b1e5c.js";import{C as Ee}from"../chunks/CourseFloatingBanner.d24cbe55.js";import{Q as w}from"../chunks/Question.6fedbbff.js";import{F as Fe}from"../chunks/FrameworkSwitchCourse.17523e75.js";function He(M){let r,d,o,k;return r=new h({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 Re(M){let r,d,o,k;return r=new h({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 Se(M){let r,d,o,k,t,b;return r=new h({props:{title:"10. มีอะไรบางอย่างที่ผิดปกติกับโค้ดต่อไปนี้หรือไม่?",local:"10-มอะไรบางอยางทผดปกตกบโคดตอไปนหรอไม",headingTag:"h3"}}),o=new ze({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(i){c(r.$$.fragment,i),d=$(i),c(o.$$.fragment,i),k=$(i),c(t.$$.fragment,i)},m(i,x){u(r,i,x),p(i,d,x),u(o,i,x),p(i,k,x),u(t,i,x),b=!0},i(i){b||(a(r.$$.fragment,i),a(o.$$.fragment,i),a(t.$$.fragment,i),b=!0)},o(i){l(r.$$.fragment,i),l(o.$$.fragment,i),l(t.$$.fragment,i),b=!1},d(i){i&&(s(d),s(k)),g(r,i),g(o,i),g(t,i)}}}function Ge(M){let r,d,o,k,t,b;return r=new h({props:{title:"10. มีอะไรบางอย่างที่ผิดปกติกับโค้ดต่อไปนี้หรือไม่?",local:"10-มอะไรบางอยางทผดปกตกบโคดตอไปนหรอไม",headingTag:"h3"}}),o=new ze({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(i){c(r.$$.fragment,i),d=$(i),c(o.$$.fragment,i),k=$(i),c(t.$$.fragment,i)},m(i,x){u(r,i,x),p(i,d,x),u(o,i,x),p(i,k,x),u(t,i,x),b=!0},i(i){b||(a(r.$$.fragment,i),a(o.$$.fragment,i),a(t.$$.fragment,i),b=!0)},o(i){l(r.$$.fragment,i),l(o.$$.fragment,i),l(t.$$.fragment,i),b=!1},d(i){i&&(s(d),s(k)),g(r,i),g(o,i),g(t,i)}}}function Pe(M){let r,d,o,k,t,b,i,x,q,K,J,O,Z,ee,j,te,U,ne,I,ie,A,re,W,oe,C,se,V,le,z,y,D,B,ae,v,pe,Q,me,X,$e,E,fe,F,ce,H,ue,R,ge,S,de,_,T,L,G,ke,Y,be;t=new Fe({props:{fw:M[0]}}),i=new Qe({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),q=new h({props:{title:"แบบทดสอบท้ายบท",local:"แบบทดสอบทายบท",headingTag:"h1"}}),J=new Ee({props:{chapter:2,classNames:"absolute z-10 right-0 top-0"}}),Z=new h({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}]}}),U=new h({props:{title:"2. tensor ที่เป็นเอาท์พุตออกมาจากโมเดล Transformer แบบพื้นฐานมีขนาดกี่มิติ และมิติเหล่านั้นเป็นอะไรบ้าง?",local:"2-tensor-ทเปนเอาทพตออกมาจากโมเดล-transformer-แบบพนฐานมขนาดกมต-และมตเหลานนเปนอะไรบาง",headingTag:"h3"}}),I=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}]}}),A=new h({props:{title:"3. ข้อใดต่อไปนี้เป็นตัวอย่างของ tokenization แบบคำย่อย(subword)?",local:"3-ขอใดตอไปนเปนตวอยางของ-tokenization-แบบคำยอยsubword",headingTag:"h3"}}),W=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:"ผิด!"}]}}),C=new h({props:{title:"4. model head คืออะไร?",local:"4-model-head-คออะไร",headingTag:"h3"}}),V=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 ye=[Re,He],P=[];function _e(e,n){return e[0]==="pt"?0:1}z=_e(M),y=P[z]=ye[z](M),B=new h({props:{title:"6. มีเทคนิคอะไรบ้างที่เราต้องคำนึงถึงเมื่อจะต้องทำการจัดประโยคที่มีความยาวแตกต่างกันเข้าเป็นชุดเดียวกัน(batching)?",local:"6-มเทคนคอะไรบางทเราตองคำนงถงเมอจะตองทำการจดประโยคทมความยาวแตกตางกนเขาเปนชดเดยวกนbatching",headingTag:"h3"}}),v=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 h({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}]}}),E=new h({props:{title:"8. วิธีใดที่เป็นหัวใจหลักของ tokenizer API ส่วนใหญ่?",local:"8-วธใดทเปนหวใจหลกของ-tokenizer-api-สวนใหญ",headingTag:"h3"}}),F=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"}]}}),H=new h({props:{title:"9. ตัวแปร result ในตัวอย่างโค้ดนี้มีค่าอะไรอยู่บ้าง?",local:"9-ตวแปร-result-ในตวอยางโคดนมคาอะไรอยบาง",headingTag:"h3"}}),R=new ze({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}}),S=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 Te=[Ge,Se],N=[];function qe(e,n){return e[0]==="pt"?0:1}return _=qe(M),T=N[_]=Te[_](M),G=new Xe({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter2/8.mdx"}}),{c(){r=we("meta"),d=m(),o=we("p"),k=m(),f(t.$$.fragment),b=m(),f(i.$$.fragment),x=m(),f(q.$$.fragment),K=m(),f(J.$$.fragment),O=m(),f(Z.$$.fragment),ee=m(),f(j.$$.fragment),te=m(),f(U.$$.fragment),ne=m(),f(I.$$.fragment),ie=m(),f(A.$$.fragment),re=m(),f(W.$$.fragment),oe=m(),f(C.$$.fragment),se=m(),f(V.$$.fragment),le=m(),y.c(),D=m(),f(B.$$.fragment),ae=m(),f(v.$$.fragment),pe=m(),f(Q.$$.fragment),me=m(),f(X.$$.fragment),$e=m(),f(E.$$.fragment),fe=m(),f(F.$$.fragment),ce=m(),f(H.$$.fragment),ue=m(),f(R.$$.fragment),ge=m(),f(S.$$.fragment),de=m(),T.c(),L=m(),f(G.$$.fragment),ke=m(),Y=we("p"),this.h()},l(e){const n=Be("svelte-u9bgzb",document.head);r=Me(n,"META",{name:!0,content:!0}),n.forEach(s),d=$(e),o=Me(e,"P",{}),Ze(o).forEach(s),k=$(e),c(t.$$.fragment,e),b=$(e),c(i.$$.fragment,e),x=$(e),c(q.$$.fragment,e),K=$(e),c(J.$$.fragment,e),O=$(e),c(Z.$$.fragment,e),ee=$(e),c(j.$$.fragment,e),te=$(e),c(U.$$.fragment,e),ne=$(e),c(I.$$.fragment,e),ie=$(e),c(A.$$.fragment,e),re=$(e),c(W.$$.fragment,e),oe=$(e),c(C.$$.fragment,e),se=$(e),c(V.$$.fragment,e),le=$(e),y.l(e),D=$(e),c(B.$$.fragment,e),ae=$(e),c(v.$$.fragment,e),pe=$(e),c(Q.$$.fragment,e),me=$(e),c(X.$$.fragment,e),$e=$(e),c(E.$$.fragment,e),fe=$(e),c(F.$$.fragment,e),ce=$(e),c(H.$$.fragment,e),ue=$(e),c(R.$$.fragment,e),ge=$(e),c(S.$$.fragment,e),de=$(e),T.l(e),L=$(e),c(G.$$.fragment,e),ke=$(e),Y=Me(e,"P",{}),Ze(Y).forEach(s),this.h()},h(){je(r,"name","hf:doc:metadata"),je(r,"content",Ne)},m(e,n){ve(document.head,r),p(e,d,n),p(e,o,n),p(e,k,n),u(t,e,n),p(e,b,n),u(i,e,n),p(e,x,n),u(q,e,n),p(e,K,n),u(J,e,n),p(e,O,n),u(Z,e,n),p(e,ee,n),u(j,e,n),p(e,te,n),u(U,e,n),p(e,ne,n),u(I,e,n),p(e,ie,n),u(A,e,n),p(e,re,n),u(W,e,n),p(e,oe,n),u(C,e,n),p(e,se,n),u(V,e,n),p(e,le,n),P[z].m(e,n),p(e,D,n),u(B,e,n),p(e,ae,n),u(v,e,n),p(e,pe,n),u(Q,e,n),p(e,me,n),u(X,e,n),p(e,$e,n),u(E,e,n),p(e,fe,n),u(F,e,n),p(e,ce,n),u(H,e,n),p(e,ue,n),u(R,e,n),p(e,ge,n),u(S,e,n),p(e,de,n),N[_].m(e,n),p(e,L,n),u(G,e,n),p(e,ke,n),p(e,Y,n),be=!0},p(e,[n]){const Je={};n&1&&(Je.fw=e[0]),t.$set(Je);let xe=z;z=_e(e),z!==xe&&(Ie(),l(P[xe],1,1,()=>{P[xe]=null}),Ue(),y=P[z],y||(y=P[z]=ye[z](e),y.c()),a(y,1),y.m(D.parentNode,D));let he=_;_=qe(e),_!==he&&(Ie(),l(N[he],1,1,()=>{N[he]=null}),Ue(),T=N[_],T||(T=N[_]=Te[_](e),T.c()),a(T,1),T.m(L.parentNode,L))},i(e){be||(a(t.$$.fragment,e),a(i.$$.fragment,e),a(q.$$.fragment,e),a(J.$$.fragment,e),a(Z.$$.fragment,e),a(j.$$.fragment,e),a(U.$$.fragment,e),a(I.$$.fragment,e),a(A.$$.fragment,e),a(W.$$.fragment,e),a(C.$$.fragment,e),a(V.$$.fragment,e),a(y),a(B.$$.fragment,e),a(v.$$.fragment,e),a(Q.$$.fragment,e),a(X.$$.fragment,e),a(E.$$.fragment,e),a(F.$$.fragment,e),a(H.$$.fragment,e),a(R.$$.fragment,e),a(S.$$.fragment,e),a(T),a(G.$$.fragment,e),be=!0)},o(e){l(t.$$.fragment,e),l(i.$$.fragment,e),l(q.$$.fragment,e),l(J.$$.fragment,e),l(Z.$$.fragment,e),l(j.$$.fragment,e),l(U.$$.fragment,e),l(I.$$.fragment,e),l(A.$$.fragment,e),l(W.$$.fragment,e),l(C.$$.fragment,e),l(V.$$.fragment,e),l(y),l(B.$$.fragment,e),l(v.$$.fragment,e),l(Q.$$.fragment,e),l(X.$$.fragment,e),l(E.$$.fragment,e),l(F.$$.fragment,e),l(H.$$.fragment,e),l(R.$$.fragment,e),l(S.$$.fragment,e),l(T),l(G.$$.fragment,e),be=!1},d(e){e&&(s(d),s(o),s(k),s(b),s(x),s(K),s(O),s(ee),s(te),s(ne),s(ie),s(re),s(oe),s(se),s(le),s(D),s(ae),s(pe),s(me),s($e),s(fe),s(ce),s(ue),s(ge),s(de),s(L),s(ke),s(Y)),s(r),g(t,e),g(i,e),g(q,e),g(J,e),g(Z,e),g(j,e),g(U,e),g(I,e),g(A,e),g(W,e),g(C,e),g(V,e),P[z].d(e),g(B,e),g(v,e),g(Q,e),g(X,e),g(E,e),g(F,e),g(H,e),g(R,e),g(S,e),N[_].d(e),g(G,e)}}}const Ne='{"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 De(M,r,d){let o="pt";return We(()=>{const k=new URLSearchParams(window.location.search);d(0,o=k.get("fw")||"pt")}),[o]}class it extends Ce{constructor(r){super(),Ve(this,r,De,Pe,Ae,{})}}export{it as component};
