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