import{s as Ht,o as St,n as Rt}from"../chunks/scheduler.37c15a92.js";import{S as Wt,i as Bt,g as f,s as c,r as d,A as Lt,h as T,f as n,c as o,j as Gt,u as J,x as b,k as Tl,y as Ft,a,v as U,t as u,b as L,d as m,w as h,m as Xt,n as Pt,p as F}from"../chunks/index.2bf4358c.js";import{T as Vt}from"../chunks/Tip.363c041f.js";import{Y as Zt}from"../chunks/Youtube.1e50a667.js";import{C as w}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as zt}from"../chunks/CourseFloatingBanner.15ba07e6.js";import{F as Yt}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as ys}from"../chunks/Heading.8ada512a.js";function qt(y){let l,r;return l=new zt({props:{chapter:2,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/chapter2/section2_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter2/section2_tf.ipynb"}]}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function Kt(y){let l,r;return l=new zt({props:{chapter:2,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/chapter2/section2_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter2/section2_pt.ipynb"}]}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function Ot(y){let l;return{c(){l=Xt("Section นี้จะเป็น Section แรกที่เนื้อหาจะค่อนข้างแตกต่างกันขึ้นอยู่กับว่าคุณใช้ PyTorch หรือ TensorFlow คุณสามารถเลือก plateform ที่คุณต้องการได้จากปุ่มที่อยู่ด้านบนของชื่อหัวข้อ!")},l(r){l=Pt(r,"Section นี้จะเป็น Section แรกที่เนื้อหาจะค่อนข้างแตกต่างกันขึ้นอยู่กับว่าคุณใช้ PyTorch หรือ TensorFlow คุณสามารถเลือก plateform ที่คุณต้องการได้จากปุ่มที่อยู่ด้านบนของชื่อหัวข้อ!")},m(r,s){a(r,l,s)},d(r){r&&n(l)}}}function en(y){let l,r;return l=new Zt({props:{id:"wVN12smEvqg"}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function sn(y){let l,r;return l=new Zt({props:{id:"1pedAIvTWXk"}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function ln(y){let l,r;return l=new w({props:{code:"cmF3X2lucHV0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMEElNUQlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIocmF3X2lucHV0cyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKSUwQXByaW50KGlucHV0cyk=",highlighted:`raw_inputs = [
    <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
    <span class="hljs-string">&quot;I hate this so much!&quot;</span>,
]
inputs = tokenizer(raw_inputs, padding=<span class="hljs-literal">True</span>, truncation=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>)
<span class="hljs-built_in">print</span>(inputs)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function tn(y){let l,r;return l=new w({props:{code:"cmF3X2lucHV0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMEElNUQlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIocmF3X2lucHV0cyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKSUwQXByaW50KGlucHV0cyk=",highlighted:`raw_inputs = [
    <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
    <span class="hljs-string">&quot;I hate this so much!&quot;</span>,
]
inputs = tokenizer(raw_inputs, padding=<span class="hljs-literal">True</span>, truncation=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
<span class="hljs-built_in">print</span>(inputs)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function nn(y){let l,r="ผลลัพธ์ที่เป็น tensor ของ PyTorch ก็จะหน้าตาประมาณนี้",s,i,M;return i=new w({props:{code:"JTdCJTBBJTIwJTIwJTIwJTIwJ2lucHV0X2lkcyclM0ElMjAlM0N0Zi5UZW5zb3IlM0ElMjBzaGFwZSUzRCgyJTJDJTIwMTYpJTJDJTIwZHR5cGUlM0RpbnQzMiUyQyUyMG51bXB5JTNEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXJyYXkoJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwJTIwMTAxJTJDJTIwJTIwMTA0NSUyQyUyMCUyMDEwMDUlMkMlMjAlMjAyMzEwJTJDJTIwJTIwMjA0MiUyQyUyMCUyMDM0MDMlMkMlMjAlMjAyMDA1JTJDJTIwJTIwMTAzNyUyQyUyMDE3NjYyJTJDJTIwMTIxNzIlMkMlMjAlMjAyNjA3JTJDJTIwJTIwMjAyNiUyQyUyMCUyMDI4NzglMkMlMjAlMjAyMTY2JTJDJTIwJTIwMTAxMiUyQyUyMCUyMCUyMDEwMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QiUyMCUyMDEwMSUyQyUyMCUyMDEwNDUlMkMlMjAlMjA1MjIzJTJDJTIwJTIwMjAyMyUyQyUyMCUyMDIwNjElMkMlMjAlMjAyMTcyJTJDJTIwJTIwJTIwOTk5JTJDJTIwJTIwJTIwMTAyJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMkMlMjBkdHlwZSUzRGludDMyKSUzRSUyQyUyMCUwQSUyMCUyMCUyMCUyMCdhdHRlbnRpb25fbWFzayclM0ElMjAlM0N0Zi5UZW5zb3IlM0ElMjBzaGFwZSUzRCgyJTJDJTIwMTYpJTJDJTIwZHR5cGUlM0RpbnQzMiUyQyUyMG51bXB5JTNEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXJyYXkoJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QjElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMkMlMjBkdHlwZSUzRGludDMyKSUzRSUwQSU3RA==",highlighted:`{
    <span class="hljs-string">&#x27;input_ids&#x27;</span>: &lt;tf.Tensor: shape=(<span class="hljs-number">2</span>, <span class="hljs-number">16</span>), dtype=int32, numpy=
        array([
            [  <span class="hljs-number">101</span>,  <span class="hljs-number">1045</span>,  <span class="hljs-number">1005</span>,  <span class="hljs-number">2310</span>,  <span class="hljs-number">2042</span>,  <span class="hljs-number">3403</span>,  <span class="hljs-number">2005</span>,  <span class="hljs-number">1037</span>, <span class="hljs-number">17662</span>, <span class="hljs-number">12172</span>,  <span class="hljs-number">2607</span>,  <span class="hljs-number">2026</span>,  <span class="hljs-number">2878</span>,  <span class="hljs-number">2166</span>,  <span class="hljs-number">1012</span>,   <span class="hljs-number">102</span>],
            [  <span class="hljs-number">101</span>,  <span class="hljs-number">1045</span>,  <span class="hljs-number">5223</span>,  <span class="hljs-number">2023</span>,  <span class="hljs-number">2061</span>,  <span class="hljs-number">2172</span>,   <span class="hljs-number">999</span>,   <span class="hljs-number">102</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>]
        ], dtype=int32)&gt;, 
    <span class="hljs-string">&#x27;attention_mask&#x27;</span>: &lt;tf.Tensor: shape=(<span class="hljs-number">2</span>, <span class="hljs-number">16</span>), dtype=int32, numpy=
        array([
            [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>],
            [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]
        ], dtype=int32)&gt;
}`,wrap:!1}}),{c(){l=f("p"),l.textContent=r,s=c(),d(i.$$.fragment)},l(p){l=T(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-1hr7kqh"&&(l.textContent=r),s=o(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),M=!0},i(p){M||(m(i.$$.fragment,p),M=!0)},o(p){u(i.$$.fragment,p),M=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function an(y){let l,r="ผลลัพธ์ที่เป็น tensor ของ PyTorch ก็จะหน้าตาประมาณนี้",s,i,M;return i=new w({props:{code:"JTdCJTBBJTIwJTIwJTIwJTIwJ2lucHV0X2lkcyclM0ElMjB0ZW5zb3IoJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwJTIwMTAxJTJDJTIwJTIwMTA0NSUyQyUyMCUyMDEwMDUlMkMlMjAlMjAyMzEwJTJDJTIwJTIwMjA0MiUyQyUyMCUyMDM0MDMlMkMlMjAlMjAyMDA1JTJDJTIwJTIwMTAzNyUyQyUyMDE3NjYyJTJDJTIwMTIxNzIlMkMlMjAyNjA3JTJDJTIwJTIwMjAyNiUyQyUyMCUyMDI4NzglMkMlMjAlMjAyMTY2JTJDJTIwJTIwMTAxMiUyQyUyMCUyMCUyMDEwMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QiUyMCUyMDEwMSUyQyUyMCUyMDEwNDUlMkMlMjAlMjA1MjIzJTJDJTIwJTIwMjAyMyUyQyUyMCUyMDIwNjElMkMlMjAlMjAyMTcyJTJDJTIwJTIwJTIwOTk5JTJDJTIwJTIwJTIwMTAyJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlNUQlMEElMjAlMjAlMjAlMjAlNUQpJTJDJTIwJTBBJTIwJTIwJTIwJTIwJ2F0dGVudGlvbl9tYXNrJyUzQSUyMHRlbnNvciglNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RCUwQSUyMCUyMCUyMCUyMCU1RCklMEElN0Q=",highlighted:`{
    <span class="hljs-string">&#x27;input_ids&#x27;</span>: tensor([
        [  <span class="hljs-number">101</span>,  <span class="hljs-number">1045</span>,  <span class="hljs-number">1005</span>,  <span class="hljs-number">2310</span>,  <span class="hljs-number">2042</span>,  <span class="hljs-number">3403</span>,  <span class="hljs-number">2005</span>,  <span class="hljs-number">1037</span>, <span class="hljs-number">17662</span>, <span class="hljs-number">12172</span>, <span class="hljs-number">2607</span>,  <span class="hljs-number">2026</span>,  <span class="hljs-number">2878</span>,  <span class="hljs-number">2166</span>,  <span class="hljs-number">1012</span>,   <span class="hljs-number">102</span>],
        [  <span class="hljs-number">101</span>,  <span class="hljs-number">1045</span>,  <span class="hljs-number">5223</span>,  <span class="hljs-number">2023</span>,  <span class="hljs-number">2061</span>,  <span class="hljs-number">2172</span>,   <span class="hljs-number">999</span>,   <span class="hljs-number">102</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>,     <span class="hljs-number">0</span>]
    ]), 
    <span class="hljs-string">&#x27;attention_mask&#x27;</span>: tensor([
        [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>],
        [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]
    ])
}`,wrap:!1}}),{c(){l=f("p"),l.textContent=r,s=c(),d(i.$$.fragment)},l(p){l=T(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-1hr7kqh"&&(l.textContent=r),s=o(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),M=!0},i(p){M||(m(i.$$.fragment,p),M=!0)},o(p){u(i.$$.fragment,p),M=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function rn(y){let l,r="เราสามารถดาวน์โหลดโมเดลที่ผ่านการเทรนมาแล้ว(pretrained) ของเราได้เหมือนกับที่เราทำกับ tokenizer ของเรา 🤗 Transformers มีคลาส <code>TFAutoModel</code> ซึ่งก็มีเมธอด <code>from_pretrained()</code> เช่นกัน:",s,i,M;return i=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsJTBBJTBBY2hlY2twb2ludCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkLWZpbmV0dW5lZC1zc3QtMi1lbmdsaXNoJTIyJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbC5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModel

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
model = TFAutoModel.from_pretrained(checkpoint)`,wrap:!1}}),{c(){l=f("p"),l.innerHTML=r,s=c(),d(i.$$.fragment)},l(p){l=T(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-e73yoh"&&(l.innerHTML=r),s=o(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),M=!0},i(p){M||(m(i.$$.fragment,p),M=!0)},o(p){u(i.$$.fragment,p),M=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function pn(y){let l,r="เราสามารถดาวน์โหลดโมเดลที่ผ่านการเทรนมาแล้ว(pretrained) ของเราได้เหมือนกับที่เราทำกับ tokenizer ของเรา 🤗 Transformers มีคลาส <code>AutoModel</code> ซึ่งก็มีเมธอด <code>from_pretrained()</code> เช่นกัน:",s,i,M;return i=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbCUwQSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMiUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModel

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
model = AutoModel.from_pretrained(checkpoint)`,wrap:!1}}),{c(){l=f("p"),l.innerHTML=r,s=c(),d(i.$$.fragment)},l(p){l=T(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-irnhun"&&(l.innerHTML=r),s=o(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),M=!0},i(p){M||(m(i.$$.fragment,p),M=!0)},o(p){u(i.$$.fragment,p),M=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function cn(y){let l,r,s,i;return l=new w({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKGlucHV0cyklMEFwcmludChvdXRwdXRzLmxhc3RfaGlkZGVuX3N0YXRlLnNoYXBlKQ==",highlighted:`outputs = model(inputs)
<span class="hljs-built_in">print</span>(outputs.last_hidden_state.shape)`,wrap:!1}}),s=new w({props:{code:"KDIlMkMlMjAxNiUyQyUyMDc2OCk=",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">16</span>, <span class="hljs-number">768</span>)',wrap:!1}}),{c(){d(l.$$.fragment),r=c(),d(s.$$.fragment)},l(M){J(l.$$.fragment,M),r=o(M),J(s.$$.fragment,M)},m(M,p){U(l,M,p),a(M,r,p),U(s,M,p),i=!0},i(M){i||(m(l.$$.fragment,M),m(s.$$.fragment,M),i=!0)},o(M){u(l.$$.fragment,M),u(s.$$.fragment,M),i=!1},d(M){M&&n(r),h(l,M),h(s,M)}}}function on(y){let l,r,s,i;return l=new w({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqaW5wdXRzKSUwQXByaW50KG91dHB1dHMubGFzdF9oaWRkZW5fc3RhdGUuc2hhcGUp",highlighted:`outputs = model(**inputs)
<span class="hljs-built_in">print</span>(outputs.last_hidden_state.shape)`,wrap:!1}}),s=new w({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMTYlMkMlMjA3NjglNUQp",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">16</span>, <span class="hljs-number">768</span>])',wrap:!1}}),{c(){d(l.$$.fragment),r=c(),d(s.$$.fragment)},l(M){J(l.$$.fragment,M),r=o(M),J(s.$$.fragment,M)},m(M,p){U(l,M,p),a(M,r,p),U(s,M,p),i=!0},i(M){i||(m(l.$$.fragment,M),m(s.$$.fragment,M),i=!0)},o(M){u(l.$$.fragment,M),u(s.$$.fragment,M),i=!1},d(M){M&&n(r),h(l,M),h(s,M)}}}function Mn(y){let l,r="สำหรับในตัวอย่างของเรานั้น เราต้องการโมเดลที่มี head สำหรับการจำแนกประโยค(sequence classification) (โดยสามารถที่จะจำแนกประโยคว่าเป็นประโยคเชิงบวก หรือ ลบ) ดังนั้น เราจะไม่ใช้คลาส <code>TFAutoModel</code> แต่จะใช้ <code>TFAutoModelForSequenceClassification</code>:",s,i,M;return i=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMiUwQW1vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQW91dHB1dHMlMjAlM0QlMjBtb2RlbChpbnB1dHMp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForSequenceClassification

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint)
outputs = model(inputs)`,wrap:!1}}),{c(){l=f("p"),l.innerHTML=r,s=c(),d(i.$$.fragment)},l(p){l=T(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-vqwc93"&&(l.innerHTML=r),s=o(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),M=!0},i(p){M||(m(i.$$.fragment,p),M=!0)},o(p){u(i.$$.fragment,p),M=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function un(y){let l,r="สำหรับในตัวอย่างของเรานั้น เราต้องการโมเดลที่มี head สำหรับการจำแนกประโยค(sequence classification) (โดยสามารถที่จะจำแนกประโยคว่าเป็นประโยคเชิงบวก หรือ ลบ) ดังนั้น เราจะไม่ใช้คลาส <code>AutoModel</code> แต่จะใช้  <code>AutoModelForSequenceClassification</code>:",s,i,M;return i=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQtZmluZXR1bmVkLXNzdC0yLWVuZ2xpc2glMjIlMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBb3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqaW5wdXRzKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForSequenceClassification

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
model = AutoModelForSequenceClassification.from_pretrained(checkpoint)
outputs = model(**inputs)`,wrap:!1}}),{c(){l=f("p"),l.innerHTML=r,s=c(),d(i.$$.fragment)},l(p){l=T(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-erm3e9"&&(l.innerHTML=r),s=o(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),M=!0},i(p){M||(m(i.$$.fragment,p),M=!0)},o(p){u(i.$$.fragment,p),M=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function mn(y){let l,r;return l=new w({props:{code:"KDIlMkMlMjAyKQ==",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>)',wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function yn(y){let l,r;return l=new w({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMiU1RCk=",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">2</span>])',wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function fn(y){let l,r;return l=new w({props:{code:"JTNDdGYuVGVuc29yJTNBJTIwc2hhcGUlM0QoMiUyQyUyMDIpJTJDJTIwZHR5cGUlM0RmbG9hdDMyJTJDJTIwbnVtcHklM0QlMEElMjAlMjAlMjAlMjBhcnJheSglNUIlNUItMS41NjA2OTkxJTJDJTIwJTIwMS42MTIyODQyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwNC4xNjkyMzElMjAlMkMlMjAtMy4zNDY0NDcyJTVEJTVEJTJDJTIwZHR5cGUlM0RmbG9hdDMyKSUzRQ==",highlighted:`&lt;tf.Tensor: shape=(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>), dtype=float32, numpy=
    array([[-<span class="hljs-number">1.5606991</span>,  <span class="hljs-number">1.6122842</span>],
           [ <span class="hljs-number">4.169231</span> , -<span class="hljs-number">3.3464472</span>]], dtype=float32)&gt;`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function Tn(y){let l,r;return l=new w({props:{code:"dGVuc29yKCU1QiU1Qi0xLjU2MDclMkMlMjAlMjAxLjYxMjMlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMjA0LjE2OTIlMkMlMjAtMy4zNDY0JTVEJTVEJTJDJTIwZ3JhZF9mbiUzRCUzQ0FkZG1tQmFja3dhcmQlM0Up",highlighted:`tensor([[-<span class="hljs-number">1.5607</span>,  <span class="hljs-number">1.6123</span>],
        [ <span class="hljs-number">4.1692</span>, -<span class="hljs-number">3.3464</span>]], grad_fn=&lt;AddmmBackward&gt;)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function bn(y){let l,r;return l=new w({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFwcmVkaWN0aW9ucyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChvdXRwdXRzLmxvZ2l0cyUyQyUyMGF4aXMlM0QtMSklMEFwcmludChwcmVkaWN0aW9ucyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

predictions = tf.math.softmax(outputs.logits, axis=-<span class="hljs-number">1</span>)
<span class="hljs-built_in">print</span>(predictions)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function dn(y){let l,r;return l=new w({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFwcmVkaWN0aW9ucyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChvdXRwdXRzLmxvZ2l0cyUyQyUyMGRpbSUzRC0xKSUwQXByaW50KHByZWRpY3Rpb25zKQ==",highlighted:`<span class="hljs-keyword">import</span> torch

predictions = torch.nn.functional.softmax(outputs.logits, dim=-<span class="hljs-number">1</span>)
<span class="hljs-built_in">print</span>(predictions)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function Jn(y){let l,r;return l=new w({props:{code:"dGYuVGVuc29yKCUwQSU1QiU1QjQuMDE5NTE2NzFlLTAyJTIwOS41OTgwNDgzM2UtMDElNUQlMEElMjAlNUI5Ljk5NDU1ODdlLTAxJTIwNS40NDE4NDI0ZS0wNCU1RCU1RCUyQyUyMHNoYXBlJTNEKDIlMkMlMjAyKSUyQyUyMGR0eXBlJTNEZmxvYXQzMik=",highlighted:`tf.Tensor(
[[<span class="hljs-number">4.01951671e-02</span> <span class="hljs-number">9.59804833e-01</span>]
 [<span class="hljs-number">9.9945587e-01</span> <span class="hljs-number">5.4418424e-04</span>]], shape=(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>), dtype=float32)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function Un(y){let l,r;return l=new w({props:{code:"dGVuc29yKCU1QiU1QjQuMDE5NWUtMDIlMkMlMjA5LjU5ODBlLTAxJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCOS45OTQ2ZS0wMSUyQyUyMDUuNDQxOGUtMDQlNUQlNUQlMkMlMjBncmFkX2ZuJTNEJTNDU29mdG1heEJhY2t3YXJkJTNFKQ==",highlighted:`tensor([[<span class="hljs-number">4.0195e-02</span>, <span class="hljs-number">9.5980e-01</span>],
        [<span class="hljs-number">9.9946e-01</span>, <span class="hljs-number">5.4418e-04</span>]], grad_fn=&lt;SoftmaxBackward&gt;)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function hn(y){let l,r="✏️ <strong>ลองเลย!</strong> เลือกสอง(หรือมากกว่านั้น) ข้อความของคุณเองและลองใส่มันเข้าไปใน <code>sentiment-analysis</code> pipeline. แล้วทำขั้นตอนต่างๆ ที่คุณเรียนผ่านมาใน section นี้และตรวจสอบดูว่าคุณได้ผลเหมือนเดิมหรือไม่!";return{c(){l=f("p"),l.innerHTML=r},l(s){l=T(s,"P",{"data-svelte-h":!0}),b(l)!=="svelte-1pwri3r"&&(l.innerHTML=r)},m(s,i){a(s,l,i)},p:Rt,d(s){s&&n(l)}}}function jn(y){let l,r,s,i,M,p,j,Ts,_,$,ts,X,bs,C,k,ns,K,Il='เรามาเริ่มกันด้วยตัวอย่างนี้ โดยเรามาดูกันว่าเกิดอะไรขึ้นในเบื้องหลังเมื่อเราทำการสั่งการ(executed) โค้ดด้านล่างนี้จาก <a href="/course/chapter1">Chapter 1</a>:',ds,O,Js,ee,gl="และ ผลลัพธ์ที่ได้:",Us,se,hs,le,Al='อย่างที่เราเห็นใน <a href="/course/chapter1">Chapter 1</a>, pipeline นี้เป็นการรวมเอา 3 ขั้นตอน : แ(preprocessing), ส่งข้อมูลเข้าไปยังโมเดล, และการประมวลผลข้อมูลที่ออกมาจากโมเดล (postprocessing)',js,P,vl='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/full_nlp_pipeline.svg" alt="The full NLP pipeline: tokenization of text, conversion to IDs, and inference through the Transformer model and the model head."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/full_nlp_pipeline-dark.svg" alt="The full NLP pipeline: tokenization of text, conversion to IDs, and inference through the Transformer model and the model head."/>',ws,te,xl="เรามาดูแต่ละขั้นตอนเหล่านี้กันอย่างละเอียดเลยดีกว่า",_s,ne,$s,ae,Ql="เหมือนกับโครงข่ายประสาท(neural networks) อื่นๆ, โมเดล Transformer ไม่สามารถที่จะประมวลผลข้อมูลที่เป็นข้อความ(text) ได้ตรงๆ ดังนั้นขั้นแรกของ pipeline ก็คือการแปลงข้อความให้เป็นตัวเลข(numbers) ที่โมเดลนั้นสามารถประมวลผลได้ ในกระบวนการนี้เราจะใช้ <em>tokenizer</em> ซึ่งจะรับผิดชอบในการทำ :",Cs,re,Nl="<li>แบ่งข้อมูลออกเป็น คำ(words), หน่วยย่อยของคำ (subwords), หรือ สัญลักษณ์ (เช่น เครื่องหมายวรรคตอน (punctuation)) เหล่านี้เราเรียกว่า <em>token</em></li> <li>ทำการเชื่อมโยง (Mapping) แต่ละ token ไปเป็นตัวเลข (integer)</li> <li>เพิ่มเติมข้อมูลที่อาจจะเป็นประโยชน์กับโมเดล</li>",ks,pe,Dl='กระบวนการประมวลผลข้อมูลขั้นต้น(preprocessing) ทั้งหมดนี้จำเป็นที่จะต้องเป็นไปในแนวทางที่เหมือนกับตอนที่โมเดลได้ผ่านการเทรนมาก่อนหน้านี้(pretrained), ดังนั้นสิ่งแรกที่เราจำเป็นต้องทำคือดาวน์โหลดข้อมูลจาก <a href="https://huggingface.co/models" rel="nofollow">Model Hub</a> ในการดาวน์โหลดนี้ เราสามารถทำได้โดยใช้คลาส <code>AutoTokenizer</code> และเรียกเมธอด <code>from_pretrained()</code> โดยหากระบุชื่อ checkpoint ของโมเดล เมธอด <code>from_pretrained()</code> จะทำการดึงข้อมูลทั้งหมดที่เกี่ยวกับ tokenizer ของโมเดลมาเก็บไว้(จะดาวน์โหลดเพียงครั้งเดียวตอนที่เรารันโค้ดด้านล่างนี้ครั้งแรกเท่านั้น)',Is,ie,El='เนื่องจาก checkpoint เริ่มต้น(default) ของ <code>sentiment-analysis</code> pipeline คือ  <code>distilbert-base-uncased-finetuned-sst-2-english</code> (สามารถดู model card <a href="https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english" rel="nofollow">ที่นี่</a>), ดังนั้นเราจะรันโค้ดนี้:',gs,ce,As,oe,Gl="เมื่อเรามี tokenizer แล้ว เราสามารถใส่ประโยคข้อความของเราเข้าไปและเราจะได้สารานุกรม(dictionary) ที่พร้อมนำไปใส่ในโมเดลออกมา! สิ่งเดียวที่เหลือที่ต้องทำ คือ การแปลงข้อมูลอัตลักษณ์(IDs) ของข้อมูลที่ใส่เข้าไป(input) ไปเป็น tensors",vs,Me,Vl="คุณสามารถใช้ 🤗 Transformers โดยที่ไม่จำเป็นต้องกังวลเลยว่า ML framework ตัวไหนที่ใช้เป็น backend; มันอาจจะเป็น PyTorch หรือ TensorFlow, หรือ Flax สำหรับบางโมเดล แต่อย่างไรก็ตามโมเดล Transformer จะรับเพียง <em>tensor</em> เป็นข้อมูลที่ใส่เข้าไป(input) เท่านั้น ถ้านี่เป็นครั้งแรกที่คุณได้ยินเกี่ยวกับคำว่า tensor คุณสามารถเปรียบเทียบมันเป็นเหมือน NumPy arrays แทนก็ได้ โดยที่ NumPy array สามารถเป็นได้ทั้ง scalar (0D), vector (1D), matrix (2D), หรือมีหลายๆมิติ. เหล่านี้ก็คือ tensor ดีๆนี่เอง  tensor ของ ML frameworks อื่นๆ ก็มีลักษณะคล้ายๆกัน และสามารถสร้างขึ้นได้ง่ายเหมือน NumPy arrays",xs,ue,Zl="การกำหนดประเภทของ tensor ที่เราต้องการได้กลับมา (PyTorch, TensorFlow, หรือ NumPy) เราสามารถใช้ตัวแปร(argument) <code>return_tensors</code>:",Qs,I,g,as,me,zl="ไม่ต้องกังวลเกี่ยวการเพิ่ม(padding) และการตัดออก(truncation) ในตอนนี้ เราจะอธิบายทีหลัง สิ่งหลักๆ ที่ควรจำคือ คุณสามารถที่จะส่งผ่านประโยคหนึ่งประโยค หรือ รายการ(list)ของประโยค พร้อมทั้งระบุประเภทของ tensor ที่คุณต้องการได้กลับมา(ถ้าไม่ระบุประเภท คุณจะได้ผลกลับมาเป็น list of lists)",Ns,A,v,rs,ye,Hl="ผลลัพธ์จะเป็นสารานุกรม(dictionary) ที่มี 2 คีย์(keys), <code>input_ids</code> และ <code>attention_mask</code> โดยที่ <code>input_ids</code> จะมีข้อมูลเป็นตัวเลข(integers)จำนวนสองแถว (หนึ่งแถวต่อหนึ่งประโยค) ซึ่งเป็นอัตลักษณ์ที่เฉพาะเจาะจงของ token ในแต่ละประโยค ส่วน <code>attention_mask</code> เราจะอธิบายในบทนี้อีกครั้งหลังจากนี้",Ds,fe,Es,x,Q,ps,Te,Sl="ในตัวอย่างโค้ดนี้ เราดาวน์โหลด checkpoint เดียวกันกับที่เราใช้ใน pipeline ของเราก่อนหน้านี้ (มันน่ามีการเก็บ(cached)ไว้แล้ว) และสร้างโมเดลขึ้นมาพร้อมกัน",Gs,be,Rl="ในสถาปัตยกรรมนี้จะมีเฉพาะโมดูล Transformer พื้นฐาน: ให้ข้อมูลเข้าไป และมันให้สิ่งที่เราเรียกว่า <em>hidden states</em> ออกมา หรือที่เรารู้จักกันในนาม <em>features</em> สำหรับข้อมูลอินพุตของแต่ละโมเดล เราจะทำการหาเวกเตอร์หลายมิติ(high-dimensional vector) ที่บ่งบอก <strong>ความเข้าใจสภาวะแวดล้อมของข้อมูลนั้นโดนโมเดล Transformer</strong>",Vs,de,Wl="ถ้านี้ฟังดูไม่สมเหตุสมผล ไม่ต้องกังวล เดี๋ยวเราจะอธิบายทัั้งหมดอีกครั้ง",Zs,Je,Bl='ในขณะที่ hidden states เหล่านี้เป็นประโยชน์ในตัวมันอยู่แล้ว มันเลยถูกนำไปใช้กับส่วนอื่นของโมเดลด้วย ที่เรารู้จักกันในนาม <em>head</em> ใน <a href="/course/chapter1">Chapter 1</a>, งานที่แตกต่างกันอาจจะสามารถใช้สถาปัตยกรรมเหมือนกันได้ แต่งานแต่ละอย่างจะมีส่วนหัว(head)ที่แตกต่างกันไป',zs,Ue,Hs,he,Ll="เวอเตอร์ที่ได้จากโมดูลของ Transformer นั้นปกติจะมีขนาดใหญ่ โดยทั่วไปแล้วมันจะมี 3 มิติ:",Ss,je,Fl="<li><strong>ขนาดของชุด(ฺBatch size)</strong>: จำนวนของประโยคที่ผ่านการประมวลผล (2 ประโยคในตัวอย่างของเรา)</li> <li><strong>ความยาวของประโยค(Sequence length)</strong>: ความยาวของตัวเลขที่เป็นตัวแทนของประโยค (16 ตัวเลขในตัวอย่างของเรา)</li> <li><strong>ขนาดของ Hidden states (Hidden size)</strong>: มิติของเวคเตอร์ของแต่ละข้อมูลที่ให้เข้าไปยังโมเดล</li>",Rs,we,Xl="มันจะถูกบอกว่ามันเป็นเวคเตอร์ “หลายมิติ(high dimensional)” ก็เพราะค่าสุดท้าย ขนาดของ hidden states นั้นสามารถมีขนาดที่ใหญ่มาก(786 เป็นค่าที่ใช้กันทั่วไปสำหรับโมเดลขนาดเล็ก, ส่วนในโมเดลขนาดใหญ่นั้นสามารถขึ้นไปได้ถึง 3072 หรือมากกว่านั้น)",Ws,_e,Pl="เราจะเห็นได้ว่าถ้าเราใส่ข้อมูลที่เราประมวลผลมาแล้วเข้าไปยังโมเดลของเรา:",Bs,N,D,is,$e,Yl="จะสังเกตว่าข้อมูลที่ออกจากโมเดล 🤗 Transformers นั้นจะมีลักษณะเหมือนกับ <code>namedtuple</code>s หรือ dictionaries คุณสามารถเข้าถึงองค์ประกอบต่าง(elements) ได้ด้วย attributes (เหมือนที่เราทำ) หรือด้วย key (<code>outputs[&quot;last_hidden_state&quot;]</code>) หรือแม้กระทั่งด้วย index ถ้าคุณรู้ว่าสิ่งที่คุณมองหานั้นอยู่ตรงไหน (<code>outputs[0]</code>)",Ls,Ce,Fs,ke,ql="โมเดล heads รับเวคเตอร์หลายมิติ(high-dimensional) ของ hidden states เข้าไปและจะทำการโปรเจคเวคเตอร์ดังกล่าวไปยังมิติอื่น ซึ่งโดยปกติโมเดล heads จะประกอบด้วยเลเยอร์เชิงเส้น(linear layers) อย่างน้อยหนึ่งเลเยอร์:",Xs,Y,Kl='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/transformer_and_head.svg" alt="A Transformer network alongside its head."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/transformer_and_head-dark.svg" alt="A Transformer network alongside its head."/>',Ps,Ie,Ol="เอาท์พุตของโมเดล Transformer จะส่งตรงไปที่หัวโมเดล(model head)เพื่อทำการประมวลผล",Ys,ge,et="ในไดอะแกรมนี้ โมเดลจะถูกแทนที่ด้วยเลเยอร์ฝังตัว(embeddings layer) และเลเยอร์ย่อย(subsequent layers) ของตัวมันเอง โดยเลเยอร์ฝังตัว(embeddings layer) จะทำการแปลงตัวบ่งชี้ตัวตนของอินพุต(Input ID) ที่อยู่ในอินพุตที่เป็น tokenized ไปเป็นเวคเตอร์ที่่เป็นตัวแทนของ token ที่เกี่ยวข้อง ส่วนเลเยอร์ย่อยอื่นๆจะจัดการเวคเตอร์อื่นโดยใช้กระบวนการ attention เพื่อให้ได้มาซึ่งตัวแทน(representation) สุดท้ายของประโยค",qs,Ae,st="มีหลายสถาปัตยกรรมใน 🤗 Transformers โดยที่หนึ่งสถาปัตยกรรมถูกออกแบบมาให้ใช้กับงานเฉพาะหนึ่งงาน นี่เป็นเพียงส่วนหนึ่งจากหลายๆโมเดล :",Ks,ve,lt="<li><code>*Model</code> (retrieve the hidden states)</li> <li><code>*ForCausalLM</code></li> <li><code>*ForMaskedLM</code></li> <li><code>*ForMultipleChoice</code></li> <li><code>*ForQuestionAnswering</code></li> <li><code>*ForSequenceClassification</code></li> <li><code>*ForTokenClassification</code></li> <li>and others 🤗</li>",Os,E,G,cs,xe,tt="ถ้าเราดูที่ขนาด(shape) ของอินพุต มิติ(dimensionality)จะน้อยกว่ามาก : model head ที่รับเอาเวคเตอร์ขนาดหลายมิติเป็นอินพุตเหมือนที่เราเห็นก่อนหน้านี้ และให้เอาท์พุตเป็นเวคเตอร์ที่มีสองค่า (หนึ่งค่าต่อหนึ่งสัญลักษณ์(label)) :",el,Qe,sl,V,Z,os,Ne,nt="เนื่องจากเรามีแค่สองประโยคและสองสัญลักษณ์(labels) ผลลัพธ์ที่ได้จากโมเดลของเราจึงมีขนาด 2x2",ll,De,tl,Ee,at="ค่าที่เราได้มาจากโมเดลนั้นไม่จำเป็นต้องดูเป็นเหตุเป็นผลในตัวมันเอง เดี๋ยวเราลองมาดูกัน:",nl,Ge,al,z,H,Ms,Ve,rt='โมเดลของเราทำนาย <code>[-1.5607, 1.6123]</code> สำหรับประโยคแรก และ <code>[ 4.1692, -3.3464]</code> สำหรับประโยคที่สอง ค่าเหล่านี้ไม่ใช่ค่าความน่าจะเป็น(probabilities) แต่เป็นค่า <em>logits</em> เป็นคะแนนดิบที่ยังไม่ผ่านการ normalized ที่ส่งออกมาจากเลเยอร์สุดท้ายของโมเดล การแปลงค่าคะแนนไปเป็นค่าความน่าจะเป็น(probabilities) คะแนนเหล่านี้จำเป็นที่จะต้องผ่านเลเยอร์ที่ชื่อว่า <a href="https://en.wikipedia.org/wiki/Softmax_function" rel="nofollow">SoftMax</a> (โมเดลของ 🤗 Transformers ทั้งหมด จะส่งข้อมูลออกมาเป็น logits โดยที่ loss function ของการเทรนโมเดลจะทำการรวม activation function ของเลเยอร์สุดท้าย เช่น SoftMax เข้ากับ loss function หลัก เช่น cross entropy):',rl,S,R,us,W,B,ms,Ze,pt="ตอนนี้เราจะเห็นว่าโมเดลทำนาย <code>[0.0402, 0.9598]</code> สำหรับประโยคแรก และ <code>[0.9995, 0.0005]</code> สำหรับประโยคที่สอง ซึ่งคะแนนเหล่านี้คือคะแนนความน่าจะเป็น(probabilities score) ที่สามารถนำไปจำแนกได้",pl,ze,it="เพื่อที่จะให้ได้สัญลักษณ์(label) ของแต่ละตำแหน่ง เราสามารถดูได้จากคุณสมบัติ <code>id2label</code> ของโมเดล model config (เดี๋ยวเราจะอธิบายเพิ่มเติมใน section ถัดไป):",il,He,cl,Se,ol,Re,ct="เราสามารถที่จะสรุปได้ว่าโมเดลทำการทำนายดังต่อไปนี้",Ml,We,ot="<li>ประโยคแรก: NEGATIVE: 0.0402, POSITIVE: 0.9598</li> <li>ประโยคที่สอง: NEGATIVE: 0.9995, POSITIVE: 0.0005</li>",ul,Be,Mt="ถึงตรงนี้ประสบความสำเร็จในการลองทำ สาม ขั้นตอนของ pipeline: การประมวลผลเบื้องต้น(preprocessing)โดยใช้ tokenizers, ส่งข้อมูลเข้าไปยังโมเดล,และการประมวลผลข้อมูลที่ได้จากโมเดล! ต่อจากนี้เราจะไปลงลึกในรายละเอียดของแต่ละขั้นตอน",ml,q,yl,fs,fl;M=new Yt({props:{fw:y[0]}}),j=new ys({props:{title:"เบื้องหลังของ pipeline",local:"เบองหลงของ-pipeline",headingTag:"h1"}});const ut=[Kt,qt],Le=[];function mt(e,t){return e[0]==="pt"?0:1}_=mt(y),$=Le[_]=ut[_](y),X=new Vt({props:{$$slots:{default:[Ot]},$$scope:{ctx:y}}});const yt=[sn,en],Fe=[];function ft(e,t){return e[0]==="pt"?0:1}C=ft(y),k=Fe[C]=yt[C](y),O=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBY2xhc3NpZmllciUyMCUzRCUyMHBpcGVsaW5lKCUyMnNlbnRpbWVudC1hbmFseXNpcyUyMiklMEFjbGFzc2lmaWVyKCUwQSUyMCUyMCUyMCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMEElMjAlMjAlMjAlMjAlNUQlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

classifier = pipeline(<span class="hljs-string">&quot;sentiment-analysis&quot;</span>)
classifier(
    [
        <span class="hljs-string">&quot;I&#x27;ve been waiting for a HuggingFace course my whole life.&quot;</span>,
        <span class="hljs-string">&quot;I hate this so much!&quot;</span>,
    ]
)`,wrap:!1}}),se=new w({props:{code:"JTVCJTdCJ2xhYmVsJyUzQSUyMCdQT1NJVElWRSclMkMlMjAnc2NvcmUnJTNBJTIwMC45NTk4MDQ3MTM3MjYwNDM3JTdEJTJDJTBBJTIwJTdCJ2xhYmVsJyUzQSUyMCdORUdBVElWRSclMkMlMjAnc2NvcmUnJTNBJTIwMC45OTk0NTU4MDk1OTMyMDA3JTdEJTVE",highlighted:`[{<span class="hljs-string">&#x27;label&#x27;</span>: <span class="hljs-string">&#x27;POSITIVE&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9598047137260437</span>},
 {<span class="hljs-string">&#x27;label&#x27;</span>: <span class="hljs-string">&#x27;NEGATIVE&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9994558095932007</span>}]`,wrap:!1}}),ne=new ys({props:{title:"การประมวลผลข้อมูลขั้นต้น(Preprocessing) ด้วย tokenizer",local:"การประมวลผลขอมลขนตนpreprocessing-ดวย-tokenizer",headingTag:"h2"}}),ce=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQtZmluZXR1bmVkLXNzdC0yLWVuZ2xpc2glMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-sst-2-english&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(checkpoint)`,wrap:!1}});const Tt=[tn,ln],Xe=[];function bt(e,t){return e[0]==="pt"?0:1}I=bt(y),g=Xe[I]=Tt[I](y);const dt=[an,nn],Pe=[];function Jt(e,t){return e[0]==="pt"?0:1}A=Jt(y),v=Pe[A]=dt[A](y),fe=new ys({props:{title:"มาอธิบายเกี่ยวกับโมเดลกัน",local:"มาอธบายเกยวกบโมเดลกน",headingTag:"h2"}});const Ut=[pn,rn],Ye=[];function ht(e,t){return e[0]==="pt"?0:1}x=ht(y),Q=Ye[x]=Ut[x](y),Ue=new ys({props:{title:"เวคเตอร์หลายมิติ (A high-dimensional vector) ?",local:"เวคเตอรหลายมต-a-high-dimensional-vector-",headingTag:"h3"}});const jt=[on,cn],qe=[];function wt(e,t){return e[0]==="pt"?0:1}N=wt(y),D=qe[N]=jt[N](y),Ce=new ys({props:{title:"Model heads: ทำความเข้าใจจากตัวเลข",local:"model-heads-ทำความเขาใจจากตวเลข",headingTag:"h3"}});const _t=[un,Mn],Ke=[];function $t(e,t){return e[0]==="pt"?0:1}E=$t(y),G=Ke[E]=_t[E](y),Qe=new w({props:{code:"cHJpbnQob3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:'<span class="hljs-built_in">print</span>(outputs.logits.shape)',wrap:!1}});const Ct=[yn,mn],Oe=[];function kt(e,t){return e[0]==="pt"?0:1}V=kt(y),Z=Oe[V]=Ct[V](y),De=new ys({props:{title:"การประมวลหลังจากได้ผลลัพธ์มาแล้ว (Postprocessing)",local:"การประมวลหลงจากไดผลลพธมาแลว-postprocessing",headingTag:"h2"}}),Ge=new w({props:{code:"cHJpbnQob3V0cHV0cy5sb2dpdHMp",highlighted:'<span class="hljs-built_in">print</span>(outputs.logits)',wrap:!1}});const It=[Tn,fn],es=[];function gt(e,t){return e[0]==="pt"?0:1}z=gt(y),H=es[z]=It[z](y);const At=[dn,bn],ss=[];function vt(e,t){return e[0]==="pt"?0:1}S=vt(y),R=ss[S]=At[S](y);const xt=[Un,Jn],ls=[];function Qt(e,t){return e[0]==="pt"?0:1}return W=Qt(y),B=ls[W]=xt[W](y),He=new w({props:{code:"bW9kZWwuY29uZmlnLmlkMmxhYmVs",highlighted:"model.config.id2label",wrap:!1}}),Se=new w({props:{code:"JTdCMCUzQSUyMCdORUdBVElWRSclMkMlMjAxJTNBJTIwJ1BPU0lUSVZFJyU3RA==",highlighted:'{<span class="hljs-number">0</span>: <span class="hljs-string">&#x27;NEGATIVE&#x27;</span>, <span class="hljs-number">1</span>: <span class="hljs-string">&#x27;POSITIVE&#x27;</span>}',wrap:!1}}),q=new Vt({props:{$$slots:{default:[hn]},$$scope:{ctx:y}}}),{c(){l=f("meta"),r=c(),s=f("p"),i=c(),d(M.$$.fragment),p=c(),d(j.$$.fragment),Ts=c(),$.c(),ts=c(),d(X.$$.fragment),bs=c(),k.c(),ns=c(),K=f("p"),K.innerHTML=Il,ds=c(),d(O.$$.fragment),Js=c(),ee=f("p"),ee.textContent=gl,Us=c(),d(se.$$.fragment),hs=c(),le=f("p"),le.innerHTML=Al,js=c(),P=f("div"),P.innerHTML=vl,ws=c(),te=f("p"),te.textContent=xl,_s=c(),d(ne.$$.fragment),$s=c(),ae=f("p"),ae.innerHTML=Ql,Cs=c(),re=f("ul"),re.innerHTML=Nl,ks=c(),pe=f("p"),pe.innerHTML=Dl,Is=c(),ie=f("p"),ie.innerHTML=El,gs=c(),d(ce.$$.fragment),As=c(),oe=f("p"),oe.textContent=Gl,vs=c(),Me=f("p"),Me.innerHTML=Vl,xs=c(),ue=f("p"),ue.innerHTML=Zl,Qs=c(),g.c(),as=c(),me=f("p"),me.textContent=zl,Ns=c(),v.c(),rs=c(),ye=f("p"),ye.innerHTML=Hl,Ds=c(),d(fe.$$.fragment),Es=c(),Q.c(),ps=c(),Te=f("p"),Te.textContent=Sl,Gs=c(),be=f("p"),be.innerHTML=Rl,Vs=c(),de=f("p"),de.textContent=Wl,Zs=c(),Je=f("p"),Je.innerHTML=Bl,zs=c(),d(Ue.$$.fragment),Hs=c(),he=f("p"),he.textContent=Ll,Ss=c(),je=f("ul"),je.innerHTML=Fl,Rs=c(),we=f("p"),we.textContent=Xl,Ws=c(),_e=f("p"),_e.textContent=Pl,Bs=c(),D.c(),is=c(),$e=f("p"),$e.innerHTML=Yl,Ls=c(),d(Ce.$$.fragment),Fs=c(),ke=f("p"),ke.textContent=ql,Xs=c(),Y=f("div"),Y.innerHTML=Kl,Ps=c(),Ie=f("p"),Ie.textContent=Ol,Ys=c(),ge=f("p"),ge.textContent=et,qs=c(),Ae=f("p"),Ae.textContent=st,Ks=c(),ve=f("ul"),ve.innerHTML=lt,Os=c(),G.c(),cs=c(),xe=f("p"),xe.textContent=tt,el=c(),d(Qe.$$.fragment),sl=c(),Z.c(),os=c(),Ne=f("p"),Ne.textContent=nt,ll=c(),d(De.$$.fragment),tl=c(),Ee=f("p"),Ee.textContent=at,nl=c(),d(Ge.$$.fragment),al=c(),H.c(),Ms=c(),Ve=f("p"),Ve.innerHTML=rt,rl=c(),R.c(),us=c(),B.c(),ms=c(),Ze=f("p"),Ze.innerHTML=pt,pl=c(),ze=f("p"),ze.innerHTML=it,il=c(),d(He.$$.fragment),cl=c(),d(Se.$$.fragment),ol=c(),Re=f("p"),Re.textContent=ct,Ml=c(),We=f("ul"),We.innerHTML=ot,ul=c(),Be=f("p"),Be.textContent=Mt,ml=c(),d(q.$$.fragment),yl=c(),fs=f("p"),this.h()},l(e){const t=Lt("svelte-u9bgzb",document.head);l=T(t,"META",{name:!0,content:!0}),t.forEach(n),r=o(e),s=T(e,"P",{}),Gt(s).forEach(n),i=o(e),J(M.$$.fragment,e),p=o(e),J(j.$$.fragment,e),Ts=o(e),$.l(e),ts=o(e),J(X.$$.fragment,e),bs=o(e),k.l(e),ns=o(e),K=T(e,"P",{"data-svelte-h":!0}),b(K)!=="svelte-1xo44hm"&&(K.innerHTML=Il),ds=o(e),J(O.$$.fragment,e),Js=o(e),ee=T(e,"P",{"data-svelte-h":!0}),b(ee)!=="svelte-1qkfrdi"&&(ee.textContent=gl),Us=o(e),J(se.$$.fragment,e),hs=o(e),le=T(e,"P",{"data-svelte-h":!0}),b(le)!=="svelte-dkirdh"&&(le.innerHTML=Al),js=o(e),P=T(e,"DIV",{class:!0,"data-svelte-h":!0}),b(P)!=="svelte-fbe70j"&&(P.innerHTML=vl),ws=o(e),te=T(e,"P",{"data-svelte-h":!0}),b(te)!=="svelte-cpemj5"&&(te.textContent=xl),_s=o(e),J(ne.$$.fragment,e),$s=o(e),ae=T(e,"P",{"data-svelte-h":!0}),b(ae)!=="svelte-13ekozv"&&(ae.innerHTML=Ql),Cs=o(e),re=T(e,"UL",{"data-svelte-h":!0}),b(re)!=="svelte-1n0vksv"&&(re.innerHTML=Nl),ks=o(e),pe=T(e,"P",{"data-svelte-h":!0}),b(pe)!=="svelte-4r3whk"&&(pe.innerHTML=Dl),Is=o(e),ie=T(e,"P",{"data-svelte-h":!0}),b(ie)!=="svelte-1jz2zu2"&&(ie.innerHTML=El),gs=o(e),J(ce.$$.fragment,e),As=o(e),oe=T(e,"P",{"data-svelte-h":!0}),b(oe)!=="svelte-1opysrj"&&(oe.textContent=Gl),vs=o(e),Me=T(e,"P",{"data-svelte-h":!0}),b(Me)!=="svelte-jqavbm"&&(Me.innerHTML=Vl),xs=o(e),ue=T(e,"P",{"data-svelte-h":!0}),b(ue)!=="svelte-75gzuz"&&(ue.innerHTML=Zl),Qs=o(e),g.l(e),as=o(e),me=T(e,"P",{"data-svelte-h":!0}),b(me)!=="svelte-39blzd"&&(me.textContent=zl),Ns=o(e),v.l(e),rs=o(e),ye=T(e,"P",{"data-svelte-h":!0}),b(ye)!=="svelte-32miwr"&&(ye.innerHTML=Hl),Ds=o(e),J(fe.$$.fragment,e),Es=o(e),Q.l(e),ps=o(e),Te=T(e,"P",{"data-svelte-h":!0}),b(Te)!=="svelte-1tvt193"&&(Te.textContent=Sl),Gs=o(e),be=T(e,"P",{"data-svelte-h":!0}),b(be)!=="svelte-mon0dd"&&(be.innerHTML=Rl),Vs=o(e),de=T(e,"P",{"data-svelte-h":!0}),b(de)!=="svelte-wqh6o5"&&(de.textContent=Wl),Zs=o(e),Je=T(e,"P",{"data-svelte-h":!0}),b(Je)!=="svelte-3soea5"&&(Je.innerHTML=Bl),zs=o(e),J(Ue.$$.fragment,e),Hs=o(e),he=T(e,"P",{"data-svelte-h":!0}),b(he)!=="svelte-1pfzoua"&&(he.textContent=Ll),Ss=o(e),je=T(e,"UL",{"data-svelte-h":!0}),b(je)!=="svelte-19wiedi"&&(je.innerHTML=Fl),Rs=o(e),we=T(e,"P",{"data-svelte-h":!0}),b(we)!=="svelte-11j6u4u"&&(we.textContent=Xl),Ws=o(e),_e=T(e,"P",{"data-svelte-h":!0}),b(_e)!=="svelte-1otiy0d"&&(_e.textContent=Pl),Bs=o(e),D.l(e),is=o(e),$e=T(e,"P",{"data-svelte-h":!0}),b($e)!=="svelte-mq6m3p"&&($e.innerHTML=Yl),Ls=o(e),J(Ce.$$.fragment,e),Fs=o(e),ke=T(e,"P",{"data-svelte-h":!0}),b(ke)!=="svelte-87l8us"&&(ke.textContent=ql),Xs=o(e),Y=T(e,"DIV",{class:!0,"data-svelte-h":!0}),b(Y)!=="svelte-8mo6lt"&&(Y.innerHTML=Kl),Ps=o(e),Ie=T(e,"P",{"data-svelte-h":!0}),b(Ie)!=="svelte-cxuwz0"&&(Ie.textContent=Ol),Ys=o(e),ge=T(e,"P",{"data-svelte-h":!0}),b(ge)!=="svelte-1bdnds8"&&(ge.textContent=et),qs=o(e),Ae=T(e,"P",{"data-svelte-h":!0}),b(Ae)!=="svelte-umhw6j"&&(Ae.textContent=st),Ks=o(e),ve=T(e,"UL",{"data-svelte-h":!0}),b(ve)!=="svelte-v0insc"&&(ve.innerHTML=lt),Os=o(e),G.l(e),cs=o(e),xe=T(e,"P",{"data-svelte-h":!0}),b(xe)!=="svelte-14mzva3"&&(xe.textContent=tt),el=o(e),J(Qe.$$.fragment,e),sl=o(e),Z.l(e),os=o(e),Ne=T(e,"P",{"data-svelte-h":!0}),b(Ne)!=="svelte-56bzqi"&&(Ne.textContent=nt),ll=o(e),J(De.$$.fragment,e),tl=o(e),Ee=T(e,"P",{"data-svelte-h":!0}),b(Ee)!=="svelte-bztxgv"&&(Ee.textContent=at),nl=o(e),J(Ge.$$.fragment,e),al=o(e),H.l(e),Ms=o(e),Ve=T(e,"P",{"data-svelte-h":!0}),b(Ve)!=="svelte-nr2ial"&&(Ve.innerHTML=rt),rl=o(e),R.l(e),us=o(e),B.l(e),ms=o(e),Ze=T(e,"P",{"data-svelte-h":!0}),b(Ze)!=="svelte-1ihzryu"&&(Ze.innerHTML=pt),pl=o(e),ze=T(e,"P",{"data-svelte-h":!0}),b(ze)!=="svelte-po6c34"&&(ze.innerHTML=it),il=o(e),J(He.$$.fragment,e),cl=o(e),J(Se.$$.fragment,e),ol=o(e),Re=T(e,"P",{"data-svelte-h":!0}),b(Re)!=="svelte-2o6vfe"&&(Re.textContent=ct),Ml=o(e),We=T(e,"UL",{"data-svelte-h":!0}),b(We)!=="svelte-1wiogbz"&&(We.innerHTML=ot),ul=o(e),Be=T(e,"P",{"data-svelte-h":!0}),b(Be)!=="svelte-10o4u17"&&(Be.textContent=Mt),ml=o(e),J(q.$$.fragment,e),yl=o(e),fs=T(e,"P",{}),Gt(fs).forEach(n),this.h()},h(){Tl(l,"name","hf:doc:metadata"),Tl(l,"content",wn),Tl(P,"class","flex justify-center"),Tl(Y,"class","flex justify-center")},m(e,t){Ft(document.head,l),a(e,r,t),a(e,s,t),a(e,i,t),U(M,e,t),a(e,p,t),U(j,e,t),a(e,Ts,t),Le[_].m(e,t),a(e,ts,t),U(X,e,t),a(e,bs,t),Fe[C].m(e,t),a(e,ns,t),a(e,K,t),a(e,ds,t),U(O,e,t),a(e,Js,t),a(e,ee,t),a(e,Us,t),U(se,e,t),a(e,hs,t),a(e,le,t),a(e,js,t),a(e,P,t),a(e,ws,t),a(e,te,t),a(e,_s,t),U(ne,e,t),a(e,$s,t),a(e,ae,t),a(e,Cs,t),a(e,re,t),a(e,ks,t),a(e,pe,t),a(e,Is,t),a(e,ie,t),a(e,gs,t),U(ce,e,t),a(e,As,t),a(e,oe,t),a(e,vs,t),a(e,Me,t),a(e,xs,t),a(e,ue,t),a(e,Qs,t),Xe[I].m(e,t),a(e,as,t),a(e,me,t),a(e,Ns,t),Pe[A].m(e,t),a(e,rs,t),a(e,ye,t),a(e,Ds,t),U(fe,e,t),a(e,Es,t),Ye[x].m(e,t),a(e,ps,t),a(e,Te,t),a(e,Gs,t),a(e,be,t),a(e,Vs,t),a(e,de,t),a(e,Zs,t),a(e,Je,t),a(e,zs,t),U(Ue,e,t),a(e,Hs,t),a(e,he,t),a(e,Ss,t),a(e,je,t),a(e,Rs,t),a(e,we,t),a(e,Ws,t),a(e,_e,t),a(e,Bs,t),qe[N].m(e,t),a(e,is,t),a(e,$e,t),a(e,Ls,t),U(Ce,e,t),a(e,Fs,t),a(e,ke,t),a(e,Xs,t),a(e,Y,t),a(e,Ps,t),a(e,Ie,t),a(e,Ys,t),a(e,ge,t),a(e,qs,t),a(e,Ae,t),a(e,Ks,t),a(e,ve,t),a(e,Os,t),Ke[E].m(e,t),a(e,cs,t),a(e,xe,t),a(e,el,t),U(Qe,e,t),a(e,sl,t),Oe[V].m(e,t),a(e,os,t),a(e,Ne,t),a(e,ll,t),U(De,e,t),a(e,tl,t),a(e,Ee,t),a(e,nl,t),U(Ge,e,t),a(e,al,t),es[z].m(e,t),a(e,Ms,t),a(e,Ve,t),a(e,rl,t),ss[S].m(e,t),a(e,us,t),ls[W].m(e,t),a(e,ms,t),a(e,Ze,t),a(e,pl,t),a(e,ze,t),a(e,il,t),U(He,e,t),a(e,cl,t),U(Se,e,t),a(e,ol,t),a(e,Re,t),a(e,Ml,t),a(e,We,t),a(e,ul,t),a(e,Be,t),a(e,ml,t),U(q,e,t),a(e,yl,t),a(e,fs,t),fl=!0},p(e,[t]){const Nt={};t&1&&(Nt.fw=e[0]),M.$set(Nt);let bl=_;_=mt(e),_!==bl&&(F(),u(Le[bl],1,1,()=>{Le[bl]=null}),L(),$=Le[_],$||($=Le[_]=ut[_](e),$.c()),m($,1),$.m(ts.parentNode,ts));const Dt={};t&2&&(Dt.$$scope={dirty:t,ctx:e}),X.$set(Dt);let dl=C;C=ft(e),C!==dl&&(F(),u(Fe[dl],1,1,()=>{Fe[dl]=null}),L(),k=Fe[C],k||(k=Fe[C]=yt[C](e),k.c()),m(k,1),k.m(ns.parentNode,ns));let Jl=I;I=bt(e),I!==Jl&&(F(),u(Xe[Jl],1,1,()=>{Xe[Jl]=null}),L(),g=Xe[I],g||(g=Xe[I]=Tt[I](e),g.c()),m(g,1),g.m(as.parentNode,as));let Ul=A;A=Jt(e),A!==Ul&&(F(),u(Pe[Ul],1,1,()=>{Pe[Ul]=null}),L(),v=Pe[A],v||(v=Pe[A]=dt[A](e),v.c()),m(v,1),v.m(rs.parentNode,rs));let hl=x;x=ht(e),x!==hl&&(F(),u(Ye[hl],1,1,()=>{Ye[hl]=null}),L(),Q=Ye[x],Q||(Q=Ye[x]=Ut[x](e),Q.c()),m(Q,1),Q.m(ps.parentNode,ps));let jl=N;N=wt(e),N!==jl&&(F(),u(qe[jl],1,1,()=>{qe[jl]=null}),L(),D=qe[N],D||(D=qe[N]=jt[N](e),D.c()),m(D,1),D.m(is.parentNode,is));let wl=E;E=$t(e),E!==wl&&(F(),u(Ke[wl],1,1,()=>{Ke[wl]=null}),L(),G=Ke[E],G||(G=Ke[E]=_t[E](e),G.c()),m(G,1),G.m(cs.parentNode,cs));let _l=V;V=kt(e),V!==_l&&(F(),u(Oe[_l],1,1,()=>{Oe[_l]=null}),L(),Z=Oe[V],Z||(Z=Oe[V]=Ct[V](e),Z.c()),m(Z,1),Z.m(os.parentNode,os));let $l=z;z=gt(e),z!==$l&&(F(),u(es[$l],1,1,()=>{es[$l]=null}),L(),H=es[z],H||(H=es[z]=It[z](e),H.c()),m(H,1),H.m(Ms.parentNode,Ms));let Cl=S;S=vt(e),S!==Cl&&(F(),u(ss[Cl],1,1,()=>{ss[Cl]=null}),L(),R=ss[S],R||(R=ss[S]=At[S](e),R.c()),m(R,1),R.m(us.parentNode,us));let kl=W;W=Qt(e),W!==kl&&(F(),u(ls[kl],1,1,()=>{ls[kl]=null}),L(),B=ls[W],B||(B=ls[W]=xt[W](e),B.c()),m(B,1),B.m(ms.parentNode,ms));const Et={};t&2&&(Et.$$scope={dirty:t,ctx:e}),q.$set(Et)},i(e){fl||(m(M.$$.fragment,e),m(j.$$.fragment,e),m($),m(X.$$.fragment,e),m(k),m(O.$$.fragment,e),m(se.$$.fragment,e),m(ne.$$.fragment,e),m(ce.$$.fragment,e),m(g),m(v),m(fe.$$.fragment,e),m(Q),m(Ue.$$.fragment,e),m(D),m(Ce.$$.fragment,e),m(G),m(Qe.$$.fragment,e),m(Z),m(De.$$.fragment,e),m(Ge.$$.fragment,e),m(H),m(R),m(B),m(He.$$.fragment,e),m(Se.$$.fragment,e),m(q.$$.fragment,e),fl=!0)},o(e){u(M.$$.fragment,e),u(j.$$.fragment,e),u($),u(X.$$.fragment,e),u(k),u(O.$$.fragment,e),u(se.$$.fragment,e),u(ne.$$.fragment,e),u(ce.$$.fragment,e),u(g),u(v),u(fe.$$.fragment,e),u(Q),u(Ue.$$.fragment,e),u(D),u(Ce.$$.fragment,e),u(G),u(Qe.$$.fragment,e),u(Z),u(De.$$.fragment,e),u(Ge.$$.fragment,e),u(H),u(R),u(B),u(He.$$.fragment,e),u(Se.$$.fragment,e),u(q.$$.fragment,e),fl=!1},d(e){e&&(n(r),n(s),n(i),n(p),n(Ts),n(ts),n(bs),n(ns),n(K),n(ds),n(Js),n(ee),n(Us),n(hs),n(le),n(js),n(P),n(ws),n(te),n(_s),n($s),n(ae),n(Cs),n(re),n(ks),n(pe),n(Is),n(ie),n(gs),n(As),n(oe),n(vs),n(Me),n(xs),n(ue),n(Qs),n(as),n(me),n(Ns),n(rs),n(ye),n(Ds),n(Es),n(ps),n(Te),n(Gs),n(be),n(Vs),n(de),n(Zs),n(Je),n(zs),n(Hs),n(he),n(Ss),n(je),n(Rs),n(we),n(Ws),n(_e),n(Bs),n(is),n($e),n(Ls),n(Fs),n(ke),n(Xs),n(Y),n(Ps),n(Ie),n(Ys),n(ge),n(qs),n(Ae),n(Ks),n(ve),n(Os),n(cs),n(xe),n(el),n(sl),n(os),n(Ne),n(ll),n(tl),n(Ee),n(nl),n(al),n(Ms),n(Ve),n(rl),n(us),n(ms),n(Ze),n(pl),n(ze),n(il),n(cl),n(ol),n(Re),n(Ml),n(We),n(ul),n(Be),n(ml),n(yl),n(fs)),n(l),h(M,e),h(j,e),Le[_].d(e),h(X,e),Fe[C].d(e),h(O,e),h(se,e),h(ne,e),h(ce,e),Xe[I].d(e),Pe[A].d(e),h(fe,e),Ye[x].d(e),h(Ue,e),qe[N].d(e),h(Ce,e),Ke[E].d(e),h(Qe,e),Oe[V].d(e),h(De,e),h(Ge,e),es[z].d(e),ss[S].d(e),ls[W].d(e),h(He,e),h(Se,e),h(q,e)}}}const wn='{"title":"เบื้องหลังของ pipeline","local":"เบองหลงของ-pipeline","sections":[{"title":"การประมวลผลข้อมูลขั้นต้น(Preprocessing) ด้วย tokenizer","local":"การประมวลผลขอมลขนตนpreprocessing-ดวย-tokenizer","sections":[],"depth":2},{"title":"มาอธิบายเกี่ยวกับโมเดลกัน","local":"มาอธบายเกยวกบโมเดลกน","sections":[{"title":"เวคเตอร์หลายมิติ (A high-dimensional vector) ?","local":"เวคเตอรหลายมต-a-high-dimensional-vector-","sections":[],"depth":3},{"title":"Model heads: ทำความเข้าใจจากตัวเลข","local":"model-heads-ทำความเขาใจจากตวเลข","sections":[],"depth":3}],"depth":2},{"title":"การประมวลหลังจากได้ผลลัพธ์มาแล้ว (Postprocessing)","local":"การประมวลหลงจากไดผลลพธมาแลว-postprocessing","sections":[],"depth":2}],"depth":1}';function _n(y,l,r){let s="pt";return St(()=>{const i=new URLSearchParams(window.location.search);r(0,s=i.get("fw")||"pt")}),[s]}class Qn extends Wt{constructor(l){super(),Bt(this,l,_n,jn,Ht,{})}}export{Qn as component};
