import{s as Rt,o as Wt,n as Bt}from"../chunks/scheduler.37c15a92.js";import{S as Lt,i as Ft,g as f,s as c,r as d,A as Xt,h as T,f as n,c as o,j as Zt,u as J,x as b,k as dl,y as Pt,a,v as h,t as u,b as L,d as m,w as U,m as Yt,n as qt,p as F}from"../chunks/index.2bf4358c.js";import{T as zt}from"../chunks/Tip.363c041f.js";import{Y as Ht}from"../chunks/Youtube.1e50a667.js";import{C as w}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as St}from"../chunks/CourseFloatingBanner.15ba07e6.js";import{F as Kt}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as fs,E as Ot}from"../chunks/EditOnGithub.8916dc7c.js";function en(y){let l,r;return l=new St({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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function sn(y){let l,r;return l=new St({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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function ln(y){let l;return{c(){l=Yt("Section นี้จะเป็น Section แรกที่เนื้อหาจะค่อนข้างแตกต่างกันขึ้นอยู่กับว่าคุณใช้ PyTorch หรือ TensorFlow คุณสามารถเลือก plateform ที่คุณต้องการได้จากปุ่มที่อยู่ด้านบนของชื่อหัวข้อ!")},l(r){l=qt(r,"Section นี้จะเป็น Section แรกที่เนื้อหาจะค่อนข้างแตกต่างกันขึ้นอยู่กับว่าคุณใช้ PyTorch หรือ TensorFlow คุณสามารถเลือก plateform ที่คุณต้องการได้จากปุ่มที่อยู่ด้านบนของชื่อหัวข้อ!")},m(r,s){a(r,l,s)},d(r){r&&n(l)}}}function tn(y){let l,r;return l=new Ht({props:{id:"wVN12smEvqg"}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function nn(y){let l,r;return l=new Ht({props:{id:"1pedAIvTWXk"}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function an(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function rn(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function pn(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),h(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)),U(i,p)}}}function cn(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),h(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)),U(i,p)}}}function on(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),h(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)),U(i,p)}}}function Mn(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),h(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)),U(i,p)}}}function un(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){h(l,M,p),a(M,r,p),h(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),U(l,M),U(s,M)}}}function mn(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){h(l,M,p),a(M,r,p),h(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),U(l,M),U(s,M)}}}function yn(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),h(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)),U(i,p)}}}function fn(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),h(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)),U(i,p)}}}function Tn(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function bn(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function dn(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function Jn(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function hn(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function Un(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function wn(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){h(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){U(l,s)}}}function _n(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:Bt,d(s){s&&n(l)}}}function $n(y){let l,r,s,i,M,p,j,bs,_,$,ns,X,ds,C,k,as,K,Al='เรามาเริ่มกันด้วยตัวอย่างนี้ โดยเรามาดูกันว่าเกิดอะไรขึ้นในเบื้องหลังเมื่อเราทำการสั่งการ(executed) โค้ดด้านล่างนี้จาก <a href="/course/chapter1">Chapter 1</a>:',Js,O,hs,ee,vl="และ ผลลัพธ์ที่ได้:",Us,se,js,le,xl='อย่างที่เราเห็นใน <a href="/course/chapter1">Chapter 1</a>, pipeline นี้เป็นการรวมเอา 3 ขั้นตอน : แ(preprocessing), ส่งข้อมูลเข้าไปยังโมเดล, และการประมวลผลข้อมูลที่ออกมาจากโมเดล (postprocessing)',ws,P,Ql='<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."/>',_s,te,Nl="เรามาดูแต่ละขั้นตอนเหล่านี้กันอย่างละเอียดเลยดีกว่า",$s,ne,Cs,ae,Dl="เหมือนกับโครงข่ายประสาท(neural networks) อื่นๆ, โมเดล Transformer ไม่สามารถที่จะประมวลผลข้อมูลที่เป็นข้อความ(text) ได้ตรงๆ ดังนั้นขั้นแรกของ pipeline ก็คือการแปลงข้อความให้เป็นตัวเลข(numbers) ที่โมเดลนั้นสามารถประมวลผลได้ ในกระบวนการนี้เราจะใช้ <em>tokenizer</em> ซึ่งจะรับผิดชอบในการทำ :",ks,re,El="<li>แบ่งข้อมูลออกเป็น คำ(words), หน่วยย่อยของคำ (subwords), หรือ สัญลักษณ์ (เช่น เครื่องหมายวรรคตอน (punctuation)) เหล่านี้เราเรียกว่า <em>token</em></li> <li>ทำการเชื่อมโยง (Mapping) แต่ละ token ไปเป็นตัวเลข (integer)</li> <li>เพิ่มเติมข้อมูลที่อาจจะเป็นประโยชน์กับโมเดล</li>",Is,pe,Gl='กระบวนการประมวลผลข้อมูลขั้นต้น(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 ของโมเดลมาเก็บไว้(จะดาวน์โหลดเพียงครั้งเดียวตอนที่เรารันโค้ดด้านล่างนี้ครั้งแรกเท่านั้น)',gs,ie,Vl='เนื่องจาก 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>), ดังนั้นเราจะรันโค้ดนี้:',As,ce,vs,oe,Zl="เมื่อเรามี tokenizer แล้ว เราสามารถใส่ประโยคข้อความของเราเข้าไปและเราจะได้สารานุกรม(dictionary) ที่พร้อมนำไปใส่ในโมเดลออกมา! สิ่งเดียวที่เหลือที่ต้องทำ คือ การแปลงข้อมูลอัตลักษณ์(IDs) ของข้อมูลที่ใส่เข้าไป(input) ไปเป็น tensors",xs,Me,zl="คุณสามารถใช้ 🤗 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",Qs,ue,Hl="การกำหนดประเภทของ tensor ที่เราต้องการได้กลับมา (PyTorch, TensorFlow, หรือ NumPy) เราสามารถใช้ตัวแปร(argument) <code>return_tensors</code>:",Ns,I,g,rs,me,Sl="ไม่ต้องกังวลเกี่ยวการเพิ่ม(padding) และการตัดออก(truncation) ในตอนนี้ เราจะอธิบายทีหลัง สิ่งหลักๆ ที่ควรจำคือ คุณสามารถที่จะส่งผ่านประโยคหนึ่งประโยค หรือ รายการ(list)ของประโยค พร้อมทั้งระบุประเภทของ tensor ที่คุณต้องการได้กลับมา(ถ้าไม่ระบุประเภท คุณจะได้ผลกลับมาเป็น list of lists)",Ds,A,v,ps,ye,Rl="ผลลัพธ์จะเป็นสารานุกรม(dictionary) ที่มี 2 คีย์(keys), <code>input_ids</code> และ <code>attention_mask</code> โดยที่ <code>input_ids</code> จะมีข้อมูลเป็นตัวเลข(integers)จำนวนสองแถว (หนึ่งแถวต่อหนึ่งประโยค) ซึ่งเป็นอัตลักษณ์ที่เฉพาะเจาะจงของ token ในแต่ละประโยค ส่วน <code>attention_mask</code> เราจะอธิบายในบทนี้อีกครั้งหลังจากนี้",Es,fe,Gs,x,Q,is,Te,Wl="ในตัวอย่างโค้ดนี้ เราดาวน์โหลด checkpoint เดียวกันกับที่เราใช้ใน pipeline ของเราก่อนหน้านี้ (มันน่ามีการเก็บ(cached)ไว้แล้ว) และสร้างโมเดลขึ้นมาพร้อมกัน",Vs,be,Bl="ในสถาปัตยกรรมนี้จะมีเฉพาะโมดูล Transformer พื้นฐาน: ให้ข้อมูลเข้าไป และมันให้สิ่งที่เราเรียกว่า <em>hidden states</em> ออกมา หรือที่เรารู้จักกันในนาม <em>features</em> สำหรับข้อมูลอินพุตของแต่ละโมเดล เราจะทำการหาเวกเตอร์หลายมิติ(high-dimensional vector) ที่บ่งบอก <strong>ความเข้าใจสภาวะแวดล้อมของข้อมูลนั้นโดนโมเดล Transformer</strong>",Zs,de,Ll="ถ้านี้ฟังดูไม่สมเหตุสมผล ไม่ต้องกังวล เดี๋ยวเราจะอธิบายทัั้งหมดอีกครั้ง",zs,Je,Fl='ในขณะที่ hidden states เหล่านี้เป็นประโยชน์ในตัวมันอยู่แล้ว มันเลยถูกนำไปใช้กับส่วนอื่นของโมเดลด้วย ที่เรารู้จักกันในนาม <em>head</em> ใน <a href="/course/chapter1">Chapter 1</a>, งานที่แตกต่างกันอาจจะสามารถใช้สถาปัตยกรรมเหมือนกันได้ แต่งานแต่ละอย่างจะมีส่วนหัว(head)ที่แตกต่างกันไป',Hs,he,Ss,Ue,Xl="เวอเตอร์ที่ได้จากโมดูลของ Transformer นั้นปกติจะมีขนาดใหญ่ โดยทั่วไปแล้วมันจะมี 3 มิติ:",Rs,je,Pl="<li><strong>ขนาดของชุด(ฺBatch size)</strong>: จำนวนของประโยคที่ผ่านการประมวลผล (2 ประโยคในตัวอย่างของเรา)</li> <li><strong>ความยาวของประโยค(Sequence length)</strong>: ความยาวของตัวเลขที่เป็นตัวแทนของประโยค (16 ตัวเลขในตัวอย่างของเรา)</li> <li><strong>ขนาดของ Hidden states (Hidden size)</strong>: มิติของเวคเตอร์ของแต่ละข้อมูลที่ให้เข้าไปยังโมเดล</li>",Ws,we,Yl="มันจะถูกบอกว่ามันเป็นเวคเตอร์ “หลายมิติ(high dimensional)” ก็เพราะค่าสุดท้าย ขนาดของ hidden states นั้นสามารถมีขนาดที่ใหญ่มาก(786 เป็นค่าที่ใช้กันทั่วไปสำหรับโมเดลขนาดเล็ก, ส่วนในโมเดลขนาดใหญ่นั้นสามารถขึ้นไปได้ถึง 3072 หรือมากกว่านั้น)",Bs,_e,ql="เราจะเห็นได้ว่าถ้าเราใส่ข้อมูลที่เราประมวลผลมาแล้วเข้าไปยังโมเดลของเรา:",Ls,N,D,cs,$e,Kl="จะสังเกตว่าข้อมูลที่ออกจากโมเดล 🤗 Transformers นั้นจะมีลักษณะเหมือนกับ <code>namedtuple</code>s หรือ dictionaries คุณสามารถเข้าถึงองค์ประกอบต่าง(elements) ได้ด้วย attributes (เหมือนที่เราทำ) หรือด้วย key (<code>outputs[&quot;last_hidden_state&quot;]</code>) หรือแม้กระทั่งด้วย index ถ้าคุณรู้ว่าสิ่งที่คุณมองหานั้นอยู่ตรงไหน (<code>outputs[0]</code>)",Fs,Ce,Xs,ke,Ol="โมเดล heads รับเวคเตอร์หลายมิติ(high-dimensional) ของ hidden states เข้าไปและจะทำการโปรเจคเวคเตอร์ดังกล่าวไปยังมิติอื่น ซึ่งโดยปกติโมเดล heads จะประกอบด้วยเลเยอร์เชิงเส้น(linear layers) อย่างน้อยหนึ่งเลเยอร์:",Ps,Y,et='<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."/>',Ys,Ie,st="เอาท์พุตของโมเดล Transformer จะส่งตรงไปที่หัวโมเดล(model head)เพื่อทำการประมวลผล",qs,ge,lt="ในไดอะแกรมนี้ โมเดลจะถูกแทนที่ด้วยเลเยอร์ฝังตัว(embeddings layer) และเลเยอร์ย่อย(subsequent layers) ของตัวมันเอง โดยเลเยอร์ฝังตัว(embeddings layer) จะทำการแปลงตัวบ่งชี้ตัวตนของอินพุต(Input ID) ที่อยู่ในอินพุตที่เป็น tokenized ไปเป็นเวคเตอร์ที่่เป็นตัวแทนของ token ที่เกี่ยวข้อง ส่วนเลเยอร์ย่อยอื่นๆจะจัดการเวคเตอร์อื่นโดยใช้กระบวนการ attention เพื่อให้ได้มาซึ่งตัวแทน(representation) สุดท้ายของประโยค",Ks,Ae,tt="มีหลายสถาปัตยกรรมใน 🤗 Transformers โดยที่หนึ่งสถาปัตยกรรมถูกออกแบบมาให้ใช้กับงานเฉพาะหนึ่งงาน นี่เป็นเพียงส่วนหนึ่งจากหลายๆโมเดล :",Os,ve,nt="<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>",el,E,G,os,xe,at="ถ้าเราดูที่ขนาด(shape) ของอินพุต มิติ(dimensionality)จะน้อยกว่ามาก : model head ที่รับเอาเวคเตอร์ขนาดหลายมิติเป็นอินพุตเหมือนที่เราเห็นก่อนหน้านี้ และให้เอาท์พุตเป็นเวคเตอร์ที่มีสองค่า (หนึ่งค่าต่อหนึ่งสัญลักษณ์(label)) :",sl,Qe,ll,V,Z,Ms,Ne,rt="เนื่องจากเรามีแค่สองประโยคและสองสัญลักษณ์(labels) ผลลัพธ์ที่ได้จากโมเดลของเราจึงมีขนาด 2x2",tl,De,nl,Ee,pt="ค่าที่เราได้มาจากโมเดลนั้นไม่จำเป็นต้องดูเป็นเหตุเป็นผลในตัวมันเอง เดี๋ยวเราลองมาดูกัน:",al,Ge,rl,z,H,us,Ve,it='โมเดลของเราทำนาย <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):',pl,S,R,ms,W,B,ys,Ze,ct="ตอนนี้เราจะเห็นว่าโมเดลทำนาย <code>[0.0402, 0.9598]</code> สำหรับประโยคแรก และ <code>[0.9995, 0.0005]</code> สำหรับประโยคที่สอง ซึ่งคะแนนเหล่านี้คือคะแนนความน่าจะเป็น(probabilities score) ที่สามารถนำไปจำแนกได้",il,ze,ot="เพื่อที่จะให้ได้สัญลักษณ์(label) ของแต่ละตำแหน่ง เราสามารถดูได้จากคุณสมบัติ <code>id2label</code> ของโมเดล model config (เดี๋ยวเราจะอธิบายเพิ่มเติมใน section ถัดไป):",cl,He,ol,Se,Ml,Re,Mt="เราสามารถที่จะสรุปได้ว่าโมเดลทำการทำนายดังต่อไปนี้",ul,We,ut="<li>ประโยคแรก: NEGATIVE: 0.0402, POSITIVE: 0.9598</li> <li>ประโยคที่สอง: NEGATIVE: 0.9995, POSITIVE: 0.0005</li>",ml,Be,mt="ถึงตรงนี้ประสบความสำเร็จในการลองทำ สาม ขั้นตอนของ pipeline: การประมวลผลเบื้องต้น(preprocessing)โดยใช้ tokenizers, ส่งข้อมูลเข้าไปยังโมเดล,และการประมวลผลข้อมูลที่ได้จากโมเดล! ต่อจากนี้เราจะไปลงลึกในรายละเอียดของแต่ละขั้นตอน",yl,q,fl,Le,Tl,Ts,bl;M=new Kt({props:{fw:y[0]}}),j=new fs({props:{title:"เบื้องหลังของ pipeline",local:"เบองหลงของ-pipeline",headingTag:"h1"}});const yt=[sn,en],Fe=[];function ft(e,t){return e[0]==="pt"?0:1}_=ft(y),$=Fe[_]=yt[_](y),X=new zt({props:{$$slots:{default:[ln]},$$scope:{ctx:y}}});const Tt=[nn,tn],Xe=[];function bt(e,t){return e[0]==="pt"?0:1}C=bt(y),k=Xe[C]=Tt[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 fs({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 dt=[rn,an],Pe=[];function Jt(e,t){return e[0]==="pt"?0:1}I=Jt(y),g=Pe[I]=dt[I](y);const ht=[cn,pn],Ye=[];function Ut(e,t){return e[0]==="pt"?0:1}A=Ut(y),v=Ye[A]=ht[A](y),fe=new fs({props:{title:"มาอธิบายเกี่ยวกับโมเดลกัน",local:"มาอธบายเกยวกบโมเดลกน",headingTag:"h2"}});const jt=[Mn,on],qe=[];function wt(e,t){return e[0]==="pt"?0:1}x=wt(y),Q=qe[x]=jt[x](y),he=new fs({props:{title:"เวคเตอร์หลายมิติ (A high-dimensional vector) ?",local:"เวคเตอรหลายมต-a-high-dimensional-vector-",headingTag:"h3"}});const _t=[mn,un],Ke=[];function $t(e,t){return e[0]==="pt"?0:1}N=$t(y),D=Ke[N]=_t[N](y),Ce=new fs({props:{title:"Model heads: ทำความเข้าใจจากตัวเลข",local:"model-heads-ทำความเขาใจจากตวเลข",headingTag:"h3"}});const Ct=[fn,yn],Oe=[];function kt(e,t){return e[0]==="pt"?0:1}E=kt(y),G=Oe[E]=Ct[E](y),Qe=new w({props:{code:"cHJpbnQob3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:'<span class="hljs-built_in">print</span>(outputs.logits.shape)',wrap:!1}});const It=[bn,Tn],es=[];function gt(e,t){return e[0]==="pt"?0:1}V=gt(y),Z=es[V]=It[V](y),De=new fs({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 At=[Jn,dn],ss=[];function vt(e,t){return e[0]==="pt"?0:1}z=vt(y),H=ss[z]=At[z](y);const xt=[Un,hn],ls=[];function Qt(e,t){return e[0]==="pt"?0:1}S=Qt(y),R=ls[S]=xt[S](y);const Nt=[wn,jn],ts=[];function Dt(e,t){return e[0]==="pt"?0:1}return W=Dt(y),B=ts[W]=Nt[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 zt({props:{$$slots:{default:[_n]},$$scope:{ctx:y}}}),Le=new Ot({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter2/2.mdx"}}),{c(){l=f("meta"),r=c(),s=f("p"),i=c(),d(M.$$.fragment),p=c(),d(j.$$.fragment),bs=c(),$.c(),ns=c(),d(X.$$.fragment),ds=c(),k.c(),as=c(),K=f("p"),K.innerHTML=Al,Js=c(),d(O.$$.fragment),hs=c(),ee=f("p"),ee.textContent=vl,Us=c(),d(se.$$.fragment),js=c(),le=f("p"),le.innerHTML=xl,ws=c(),P=f("div"),P.innerHTML=Ql,_s=c(),te=f("p"),te.textContent=Nl,$s=c(),d(ne.$$.fragment),Cs=c(),ae=f("p"),ae.innerHTML=Dl,ks=c(),re=f("ul"),re.innerHTML=El,Is=c(),pe=f("p"),pe.innerHTML=Gl,gs=c(),ie=f("p"),ie.innerHTML=Vl,As=c(),d(ce.$$.fragment),vs=c(),oe=f("p"),oe.textContent=Zl,xs=c(),Me=f("p"),Me.innerHTML=zl,Qs=c(),ue=f("p"),ue.innerHTML=Hl,Ns=c(),g.c(),rs=c(),me=f("p"),me.textContent=Sl,Ds=c(),v.c(),ps=c(),ye=f("p"),ye.innerHTML=Rl,Es=c(),d(fe.$$.fragment),Gs=c(),Q.c(),is=c(),Te=f("p"),Te.textContent=Wl,Vs=c(),be=f("p"),be.innerHTML=Bl,Zs=c(),de=f("p"),de.textContent=Ll,zs=c(),Je=f("p"),Je.innerHTML=Fl,Hs=c(),d(he.$$.fragment),Ss=c(),Ue=f("p"),Ue.textContent=Xl,Rs=c(),je=f("ul"),je.innerHTML=Pl,Ws=c(),we=f("p"),we.textContent=Yl,Bs=c(),_e=f("p"),_e.textContent=ql,Ls=c(),D.c(),cs=c(),$e=f("p"),$e.innerHTML=Kl,Fs=c(),d(Ce.$$.fragment),Xs=c(),ke=f("p"),ke.textContent=Ol,Ps=c(),Y=f("div"),Y.innerHTML=et,Ys=c(),Ie=f("p"),Ie.textContent=st,qs=c(),ge=f("p"),ge.textContent=lt,Ks=c(),Ae=f("p"),Ae.textContent=tt,Os=c(),ve=f("ul"),ve.innerHTML=nt,el=c(),G.c(),os=c(),xe=f("p"),xe.textContent=at,sl=c(),d(Qe.$$.fragment),ll=c(),Z.c(),Ms=c(),Ne=f("p"),Ne.textContent=rt,tl=c(),d(De.$$.fragment),nl=c(),Ee=f("p"),Ee.textContent=pt,al=c(),d(Ge.$$.fragment),rl=c(),H.c(),us=c(),Ve=f("p"),Ve.innerHTML=it,pl=c(),R.c(),ms=c(),B.c(),ys=c(),Ze=f("p"),Ze.innerHTML=ct,il=c(),ze=f("p"),ze.innerHTML=ot,cl=c(),d(He.$$.fragment),ol=c(),d(Se.$$.fragment),Ml=c(),Re=f("p"),Re.textContent=Mt,ul=c(),We=f("ul"),We.innerHTML=ut,ml=c(),Be=f("p"),Be.textContent=mt,yl=c(),d(q.$$.fragment),fl=c(),d(Le.$$.fragment),Tl=c(),Ts=f("p"),this.h()},l(e){const t=Xt("svelte-u9bgzb",document.head);l=T(t,"META",{name:!0,content:!0}),t.forEach(n),r=o(e),s=T(e,"P",{}),Zt(s).forEach(n),i=o(e),J(M.$$.fragment,e),p=o(e),J(j.$$.fragment,e),bs=o(e),$.l(e),ns=o(e),J(X.$$.fragment,e),ds=o(e),k.l(e),as=o(e),K=T(e,"P",{"data-svelte-h":!0}),b(K)!=="svelte-1xo44hm"&&(K.innerHTML=Al),Js=o(e),J(O.$$.fragment,e),hs=o(e),ee=T(e,"P",{"data-svelte-h":!0}),b(ee)!=="svelte-1qkfrdi"&&(ee.textContent=vl),Us=o(e),J(se.$$.fragment,e),js=o(e),le=T(e,"P",{"data-svelte-h":!0}),b(le)!=="svelte-dkirdh"&&(le.innerHTML=xl),ws=o(e),P=T(e,"DIV",{class:!0,"data-svelte-h":!0}),b(P)!=="svelte-fbe70j"&&(P.innerHTML=Ql),_s=o(e),te=T(e,"P",{"data-svelte-h":!0}),b(te)!=="svelte-cpemj5"&&(te.textContent=Nl),$s=o(e),J(ne.$$.fragment,e),Cs=o(e),ae=T(e,"P",{"data-svelte-h":!0}),b(ae)!=="svelte-13ekozv"&&(ae.innerHTML=Dl),ks=o(e),re=T(e,"UL",{"data-svelte-h":!0}),b(re)!=="svelte-1n0vksv"&&(re.innerHTML=El),Is=o(e),pe=T(e,"P",{"data-svelte-h":!0}),b(pe)!=="svelte-4r3whk"&&(pe.innerHTML=Gl),gs=o(e),ie=T(e,"P",{"data-svelte-h":!0}),b(ie)!=="svelte-1jz2zu2"&&(ie.innerHTML=Vl),As=o(e),J(ce.$$.fragment,e),vs=o(e),oe=T(e,"P",{"data-svelte-h":!0}),b(oe)!=="svelte-1opysrj"&&(oe.textContent=Zl),xs=o(e),Me=T(e,"P",{"data-svelte-h":!0}),b(Me)!=="svelte-jqavbm"&&(Me.innerHTML=zl),Qs=o(e),ue=T(e,"P",{"data-svelte-h":!0}),b(ue)!=="svelte-75gzuz"&&(ue.innerHTML=Hl),Ns=o(e),g.l(e),rs=o(e),me=T(e,"P",{"data-svelte-h":!0}),b(me)!=="svelte-39blzd"&&(me.textContent=Sl),Ds=o(e),v.l(e),ps=o(e),ye=T(e,"P",{"data-svelte-h":!0}),b(ye)!=="svelte-32miwr"&&(ye.innerHTML=Rl),Es=o(e),J(fe.$$.fragment,e),Gs=o(e),Q.l(e),is=o(e),Te=T(e,"P",{"data-svelte-h":!0}),b(Te)!=="svelte-1tvt193"&&(Te.textContent=Wl),Vs=o(e),be=T(e,"P",{"data-svelte-h":!0}),b(be)!=="svelte-mon0dd"&&(be.innerHTML=Bl),Zs=o(e),de=T(e,"P",{"data-svelte-h":!0}),b(de)!=="svelte-wqh6o5"&&(de.textContent=Ll),zs=o(e),Je=T(e,"P",{"data-svelte-h":!0}),b(Je)!=="svelte-3soea5"&&(Je.innerHTML=Fl),Hs=o(e),J(he.$$.fragment,e),Ss=o(e),Ue=T(e,"P",{"data-svelte-h":!0}),b(Ue)!=="svelte-1pfzoua"&&(Ue.textContent=Xl),Rs=o(e),je=T(e,"UL",{"data-svelte-h":!0}),b(je)!=="svelte-19wiedi"&&(je.innerHTML=Pl),Ws=o(e),we=T(e,"P",{"data-svelte-h":!0}),b(we)!=="svelte-11j6u4u"&&(we.textContent=Yl),Bs=o(e),_e=T(e,"P",{"data-svelte-h":!0}),b(_e)!=="svelte-1otiy0d"&&(_e.textContent=ql),Ls=o(e),D.l(e),cs=o(e),$e=T(e,"P",{"data-svelte-h":!0}),b($e)!=="svelte-mq6m3p"&&($e.innerHTML=Kl),Fs=o(e),J(Ce.$$.fragment,e),Xs=o(e),ke=T(e,"P",{"data-svelte-h":!0}),b(ke)!=="svelte-87l8us"&&(ke.textContent=Ol),Ps=o(e),Y=T(e,"DIV",{class:!0,"data-svelte-h":!0}),b(Y)!=="svelte-8mo6lt"&&(Y.innerHTML=et),Ys=o(e),Ie=T(e,"P",{"data-svelte-h":!0}),b(Ie)!=="svelte-cxuwz0"&&(Ie.textContent=st),qs=o(e),ge=T(e,"P",{"data-svelte-h":!0}),b(ge)!=="svelte-1bdnds8"&&(ge.textContent=lt),Ks=o(e),Ae=T(e,"P",{"data-svelte-h":!0}),b(Ae)!=="svelte-umhw6j"&&(Ae.textContent=tt),Os=o(e),ve=T(e,"UL",{"data-svelte-h":!0}),b(ve)!=="svelte-v0insc"&&(ve.innerHTML=nt),el=o(e),G.l(e),os=o(e),xe=T(e,"P",{"data-svelte-h":!0}),b(xe)!=="svelte-14mzva3"&&(xe.textContent=at),sl=o(e),J(Qe.$$.fragment,e),ll=o(e),Z.l(e),Ms=o(e),Ne=T(e,"P",{"data-svelte-h":!0}),b(Ne)!=="svelte-56bzqi"&&(Ne.textContent=rt),tl=o(e),J(De.$$.fragment,e),nl=o(e),Ee=T(e,"P",{"data-svelte-h":!0}),b(Ee)!=="svelte-bztxgv"&&(Ee.textContent=pt),al=o(e),J(Ge.$$.fragment,e),rl=o(e),H.l(e),us=o(e),Ve=T(e,"P",{"data-svelte-h":!0}),b(Ve)!=="svelte-nr2ial"&&(Ve.innerHTML=it),pl=o(e),R.l(e),ms=o(e),B.l(e),ys=o(e),Ze=T(e,"P",{"data-svelte-h":!0}),b(Ze)!=="svelte-1ihzryu"&&(Ze.innerHTML=ct),il=o(e),ze=T(e,"P",{"data-svelte-h":!0}),b(ze)!=="svelte-po6c34"&&(ze.innerHTML=ot),cl=o(e),J(He.$$.fragment,e),ol=o(e),J(Se.$$.fragment,e),Ml=o(e),Re=T(e,"P",{"data-svelte-h":!0}),b(Re)!=="svelte-2o6vfe"&&(Re.textContent=Mt),ul=o(e),We=T(e,"UL",{"data-svelte-h":!0}),b(We)!=="svelte-1wiogbz"&&(We.innerHTML=ut),ml=o(e),Be=T(e,"P",{"data-svelte-h":!0}),b(Be)!=="svelte-10o4u17"&&(Be.textContent=mt),yl=o(e),J(q.$$.fragment,e),fl=o(e),J(Le.$$.fragment,e),Tl=o(e),Ts=T(e,"P",{}),Zt(Ts).forEach(n),this.h()},h(){dl(l,"name","hf:doc:metadata"),dl(l,"content",Cn),dl(P,"class","flex justify-center"),dl(Y,"class","flex justify-center")},m(e,t){Pt(document.head,l),a(e,r,t),a(e,s,t),a(e,i,t),h(M,e,t),a(e,p,t),h(j,e,t),a(e,bs,t),Fe[_].m(e,t),a(e,ns,t),h(X,e,t),a(e,ds,t),Xe[C].m(e,t),a(e,as,t),a(e,K,t),a(e,Js,t),h(O,e,t),a(e,hs,t),a(e,ee,t),a(e,Us,t),h(se,e,t),a(e,js,t),a(e,le,t),a(e,ws,t),a(e,P,t),a(e,_s,t),a(e,te,t),a(e,$s,t),h(ne,e,t),a(e,Cs,t),a(e,ae,t),a(e,ks,t),a(e,re,t),a(e,Is,t),a(e,pe,t),a(e,gs,t),a(e,ie,t),a(e,As,t),h(ce,e,t),a(e,vs,t),a(e,oe,t),a(e,xs,t),a(e,Me,t),a(e,Qs,t),a(e,ue,t),a(e,Ns,t),Pe[I].m(e,t),a(e,rs,t),a(e,me,t),a(e,Ds,t),Ye[A].m(e,t),a(e,ps,t),a(e,ye,t),a(e,Es,t),h(fe,e,t),a(e,Gs,t),qe[x].m(e,t),a(e,is,t),a(e,Te,t),a(e,Vs,t),a(e,be,t),a(e,Zs,t),a(e,de,t),a(e,zs,t),a(e,Je,t),a(e,Hs,t),h(he,e,t),a(e,Ss,t),a(e,Ue,t),a(e,Rs,t),a(e,je,t),a(e,Ws,t),a(e,we,t),a(e,Bs,t),a(e,_e,t),a(e,Ls,t),Ke[N].m(e,t),a(e,cs,t),a(e,$e,t),a(e,Fs,t),h(Ce,e,t),a(e,Xs,t),a(e,ke,t),a(e,Ps,t),a(e,Y,t),a(e,Ys,t),a(e,Ie,t),a(e,qs,t),a(e,ge,t),a(e,Ks,t),a(e,Ae,t),a(e,Os,t),a(e,ve,t),a(e,el,t),Oe[E].m(e,t),a(e,os,t),a(e,xe,t),a(e,sl,t),h(Qe,e,t),a(e,ll,t),es[V].m(e,t),a(e,Ms,t),a(e,Ne,t),a(e,tl,t),h(De,e,t),a(e,nl,t),a(e,Ee,t),a(e,al,t),h(Ge,e,t),a(e,rl,t),ss[z].m(e,t),a(e,us,t),a(e,Ve,t),a(e,pl,t),ls[S].m(e,t),a(e,ms,t),ts[W].m(e,t),a(e,ys,t),a(e,Ze,t),a(e,il,t),a(e,ze,t),a(e,cl,t),h(He,e,t),a(e,ol,t),h(Se,e,t),a(e,Ml,t),a(e,Re,t),a(e,ul,t),a(e,We,t),a(e,ml,t),a(e,Be,t),a(e,yl,t),h(q,e,t),a(e,fl,t),h(Le,e,t),a(e,Tl,t),a(e,Ts,t),bl=!0},p(e,[t]){const Et={};t&1&&(Et.fw=e[0]),M.$set(Et);let Jl=_;_=ft(e),_!==Jl&&(F(),u(Fe[Jl],1,1,()=>{Fe[Jl]=null}),L(),$=Fe[_],$||($=Fe[_]=yt[_](e),$.c()),m($,1),$.m(ns.parentNode,ns));const Gt={};t&2&&(Gt.$$scope={dirty:t,ctx:e}),X.$set(Gt);let hl=C;C=bt(e),C!==hl&&(F(),u(Xe[hl],1,1,()=>{Xe[hl]=null}),L(),k=Xe[C],k||(k=Xe[C]=Tt[C](e),k.c()),m(k,1),k.m(as.parentNode,as));let Ul=I;I=Jt(e),I!==Ul&&(F(),u(Pe[Ul],1,1,()=>{Pe[Ul]=null}),L(),g=Pe[I],g||(g=Pe[I]=dt[I](e),g.c()),m(g,1),g.m(rs.parentNode,rs));let jl=A;A=Ut(e),A!==jl&&(F(),u(Ye[jl],1,1,()=>{Ye[jl]=null}),L(),v=Ye[A],v||(v=Ye[A]=ht[A](e),v.c()),m(v,1),v.m(ps.parentNode,ps));let wl=x;x=wt(e),x!==wl&&(F(),u(qe[wl],1,1,()=>{qe[wl]=null}),L(),Q=qe[x],Q||(Q=qe[x]=jt[x](e),Q.c()),m(Q,1),Q.m(is.parentNode,is));let _l=N;N=$t(e),N!==_l&&(F(),u(Ke[_l],1,1,()=>{Ke[_l]=null}),L(),D=Ke[N],D||(D=Ke[N]=_t[N](e),D.c()),m(D,1),D.m(cs.parentNode,cs));let $l=E;E=kt(e),E!==$l&&(F(),u(Oe[$l],1,1,()=>{Oe[$l]=null}),L(),G=Oe[E],G||(G=Oe[E]=Ct[E](e),G.c()),m(G,1),G.m(os.parentNode,os));let Cl=V;V=gt(e),V!==Cl&&(F(),u(es[Cl],1,1,()=>{es[Cl]=null}),L(),Z=es[V],Z||(Z=es[V]=It[V](e),Z.c()),m(Z,1),Z.m(Ms.parentNode,Ms));let kl=z;z=vt(e),z!==kl&&(F(),u(ss[kl],1,1,()=>{ss[kl]=null}),L(),H=ss[z],H||(H=ss[z]=At[z](e),H.c()),m(H,1),H.m(us.parentNode,us));let Il=S;S=Qt(e),S!==Il&&(F(),u(ls[Il],1,1,()=>{ls[Il]=null}),L(),R=ls[S],R||(R=ls[S]=xt[S](e),R.c()),m(R,1),R.m(ms.parentNode,ms));let gl=W;W=Dt(e),W!==gl&&(F(),u(ts[gl],1,1,()=>{ts[gl]=null}),L(),B=ts[W],B||(B=ts[W]=Nt[W](e),B.c()),m(B,1),B.m(ys.parentNode,ys));const Vt={};t&2&&(Vt.$$scope={dirty:t,ctx:e}),q.$set(Vt)},i(e){bl||(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(he.$$.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),m(Le.$$.fragment,e),bl=!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(he.$$.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),u(Le.$$.fragment,e),bl=!1},d(e){e&&(n(r),n(s),n(i),n(p),n(bs),n(ns),n(ds),n(as),n(K),n(Js),n(hs),n(ee),n(Us),n(js),n(le),n(ws),n(P),n(_s),n(te),n($s),n(Cs),n(ae),n(ks),n(re),n(Is),n(pe),n(gs),n(ie),n(As),n(vs),n(oe),n(xs),n(Me),n(Qs),n(ue),n(Ns),n(rs),n(me),n(Ds),n(ps),n(ye),n(Es),n(Gs),n(is),n(Te),n(Vs),n(be),n(Zs),n(de),n(zs),n(Je),n(Hs),n(Ss),n(Ue),n(Rs),n(je),n(Ws),n(we),n(Bs),n(_e),n(Ls),n(cs),n($e),n(Fs),n(Xs),n(ke),n(Ps),n(Y),n(Ys),n(Ie),n(qs),n(ge),n(Ks),n(Ae),n(Os),n(ve),n(el),n(os),n(xe),n(sl),n(ll),n(Ms),n(Ne),n(tl),n(nl),n(Ee),n(al),n(rl),n(us),n(Ve),n(pl),n(ms),n(ys),n(Ze),n(il),n(ze),n(cl),n(ol),n(Ml),n(Re),n(ul),n(We),n(ml),n(Be),n(yl),n(fl),n(Tl),n(Ts)),n(l),U(M,e),U(j,e),Fe[_].d(e),U(X,e),Xe[C].d(e),U(O,e),U(se,e),U(ne,e),U(ce,e),Pe[I].d(e),Ye[A].d(e),U(fe,e),qe[x].d(e),U(he,e),Ke[N].d(e),U(Ce,e),Oe[E].d(e),U(Qe,e),es[V].d(e),U(De,e),U(Ge,e),ss[z].d(e),ls[S].d(e),ts[W].d(e),U(He,e),U(Se,e),U(q,e),U(Le,e)}}}const Cn='{"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 kn(y,l,r){let s="pt";return Wt(()=>{const i=new URLSearchParams(window.location.search);r(0,s=i.get("fw")||"pt")}),[s]}class En extends Lt{constructor(l){super(),Ft(this,l,kn,$n,Rt,{})}}export{En as component};
