Buckets:
| import{s as Wt,o as Bt}from"../chunks/scheduler.505acc25.js";import{S as Lt,i as Ft,e as y,s as c,c as d,h as Xt,a as f,d as n,b as M,f as Ht,g as J,j as b,k as Ts,l as Yt,m as a,n as U,o as u,q as L,t as m,p as h,r as F}from"../chunks/index.17dd9071.js";import{C as Pt,H as bs,E as qt}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.b5f07784.js";import{Y as St}from"../chunks/Youtube.793fe4bf.js";import{C as w}from"../chunks/CodeBlock.f0180c68.js";import{C as Rt}from"../chunks/CourseFloatingBanner.9496b79e.js";import{F as Kt}from"../chunks/FrameworkSwitchCourse.7aa4b983.js";function Ot(T){let l,r;return l=new Rt({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/th/chapter2/section2_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter2/section2_tf.ipynb"}]}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function en(T){let l,r;return l=new Rt({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/th/chapter2/section2_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/th/chapter2/section2_pt.ipynb"}]}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function sn(T){let l,r;return l=new St({props:{id:"wVN12smEvqg"}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function ln(T){let l,r;return l=new St({props:{id:"1pedAIvTWXk"}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function tn(T){let l,r;return l=new w({props:{code:"cmF3X2lucHV0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMEElNUQlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIocmF3X2lucHV0cyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKSUwQXByaW50KGlucHV0cyk=",highlighted:`raw_inputs = [ | |
| <span class="hljs-string">"I've been waiting for a HuggingFace course my whole life."</span>, | |
| <span class="hljs-string">"I hate this so much!"</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">"tf"</span>) | |
| <span class="hljs-built_in">print</span>(inputs)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function nn(T){let l,r;return l=new w({props:{code:"cmF3X2lucHV0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMEElNUQlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIocmF3X2lucHV0cyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKSUwQXByaW50KGlucHV0cyk=",highlighted:`raw_inputs = [ | |
| <span class="hljs-string">"I've been waiting for a HuggingFace course my whole life."</span>, | |
| <span class="hljs-string">"I hate this so much!"</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">"pt"</span>) | |
| <span class="hljs-built_in">print</span>(inputs)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function an(T){let l,r="ผลลัพธ์ที่เป็น tensor ของ PyTorch ก็จะหน้าตาประมาณนี้",s,i,o;return i=new w({props:{code:"JTdCJTBBJTIwJTIwJTIwJTIwJ2lucHV0X2lkcyclM0ElMjAlM0N0Zi5UZW5zb3IlM0ElMjBzaGFwZSUzRCgyJTJDJTIwMTYpJTJDJTIwZHR5cGUlM0RpbnQzMiUyQyUyMG51bXB5JTNEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXJyYXkoJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwJTIwMTAxJTJDJTIwJTIwMTA0NSUyQyUyMCUyMDEwMDUlMkMlMjAlMjAyMzEwJTJDJTIwJTIwMjA0MiUyQyUyMCUyMDM0MDMlMkMlMjAlMjAyMDA1JTJDJTIwJTIwMTAzNyUyQyUyMDE3NjYyJTJDJTIwMTIxNzIlMkMlMjAlMjAyNjA3JTJDJTIwJTIwMjAyNiUyQyUyMCUyMDI4NzglMkMlMjAlMjAyMTY2JTJDJTIwJTIwMTAxMiUyQyUyMCUyMCUyMDEwMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QiUyMCUyMDEwMSUyQyUyMCUyMDEwNDUlMkMlMjAlMjA1MjIzJTJDJTIwJTIwMjAyMyUyQyUyMCUyMDIwNjElMkMlMjAlMjAyMTcyJTJDJTIwJTIwJTIwOTk5JTJDJTIwJTIwJTIwMTAyJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMkMlMjBkdHlwZSUzRGludDMyKSUzRSUyQyUyMCUwQSUyMCUyMCUyMCUyMCdhdHRlbnRpb25fbWFzayclM0ElMjAlM0N0Zi5UZW5zb3IlM0ElMjBzaGFwZSUzRCgyJTJDJTIwMTYpJTJDJTIwZHR5cGUlM0RpbnQzMiUyQyUyMG51bXB5JTNEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYXJyYXkoJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QjElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUQlMkMlMjBkdHlwZSUzRGludDMyKSUzRSUwQSU3RA==",highlighted:`{ | |
| <span class="hljs-string">'input_ids'</span>: <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)>, | |
| <span class="hljs-string">'attention_mask'</span>: <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)> | |
| }`,wrap:!1}}),{c(){l=y("p"),l.textContent=r,s=c(),d(i.$$.fragment)},l(p){l=f(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-1hr7kqh"&&(l.textContent=r),s=M(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),o=!0},i(p){o||(m(i.$$.fragment,p),o=!0)},o(p){u(i.$$.fragment,p),o=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function rn(T){let l,r="ผลลัพธ์ที่เป็น tensor ของ PyTorch ก็จะหน้าตาประมาณนี้",s,i,o;return i=new w({props:{code:"JTdCJTBBJTIwJTIwJTIwJTIwJ2lucHV0X2lkcyclM0ElMjB0ZW5zb3IoJTVCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwJTIwMTAxJTJDJTIwJTIwMTA0NSUyQyUyMCUyMDEwMDUlMkMlMjAlMjAyMzEwJTJDJTIwJTIwMjA0MiUyQyUyMCUyMDM0MDMlMkMlMjAlMjAyMDA1JTJDJTIwJTIwMTAzNyUyQyUyMDE3NjYyJTJDJTIwMTIxNzIlMkMlMjAyNjA3JTJDJTIwJTIwMjAyNiUyQyUyMCUyMDI4NzglMkMlMjAlMjAyMTY2JTJDJTIwJTIwMTAxMiUyQyUyMCUyMCUyMDEwMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QiUyMCUyMDEwMSUyQyUyMCUyMDEwNDUlMkMlMjAlMjA1MjIzJTJDJTIwJTIwMjAyMyUyQyUyMCUyMDIwNjElMkMlMjAlMjAyMTcyJTJDJTIwJTIwJTIwOTk5JTJDJTIwJTIwJTIwMTAyJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMDAlNUQlMEElMjAlMjAlMjAlMjAlNUQpJTJDJTIwJTBBJTIwJTIwJTIwJTIwJ2F0dGVudGlvbl9tYXNrJyUzQSUyMHRlbnNvciglNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RCUwQSUyMCUyMCUyMCUyMCU1RCklMEElN0Q=",highlighted:`{ | |
| <span class="hljs-string">'input_ids'</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">'attention_mask'</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=y("p"),l.textContent=r,s=c(),d(i.$$.fragment)},l(p){l=f(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-1hr7kqh"&&(l.textContent=r),s=M(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),o=!0},i(p){o||(m(i.$$.fragment,p),o=!0)},o(p){u(i.$$.fragment,p),o=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function pn(T){let l,r="เราสามารถดาวน์โหลดโมเดลที่ผ่านการเทรนมาแล้ว(pretrained) ของเราได้เหมือนกับที่เราทำกับ tokenizer ของเรา 🤗 Transformers มีคลาส <code>TFAutoModel</code> ซึ่งก็มีเมธอด <code>from_pretrained()</code> เช่นกัน:",s,i,o;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">"distilbert-base-uncased-finetuned-sst-2-english"</span> | |
| model = TFAutoModel.from_pretrained(checkpoint)`,wrap:!1}}),{c(){l=y("p"),l.innerHTML=r,s=c(),d(i.$$.fragment)},l(p){l=f(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-e73yoh"&&(l.innerHTML=r),s=M(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),o=!0},i(p){o||(m(i.$$.fragment,p),o=!0)},o(p){u(i.$$.fragment,p),o=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function cn(T){let l,r="เราสามารถดาวน์โหลดโมเดลที่ผ่านการเทรนมาแล้ว(pretrained) ของเราได้เหมือนกับที่เราทำกับ tokenizer ของเรา 🤗 Transformers มีคลาส <code>AutoModel</code> ซึ่งก็มีเมธอด <code>from_pretrained()</code> เช่นกัน:",s,i,o;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">"distilbert-base-uncased-finetuned-sst-2-english"</span> | |
| model = AutoModel.from_pretrained(checkpoint)`,wrap:!1}}),{c(){l=y("p"),l.innerHTML=r,s=c(),d(i.$$.fragment)},l(p){l=f(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-irnhun"&&(l.innerHTML=r),s=M(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),o=!0},i(p){o||(m(i.$$.fragment,p),o=!0)},o(p){u(i.$$.fragment,p),o=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function Mn(T){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(o){J(l.$$.fragment,o),r=M(o),J(s.$$.fragment,o)},m(o,p){U(l,o,p),a(o,r,p),U(s,o,p),i=!0},i(o){i||(m(l.$$.fragment,o),m(s.$$.fragment,o),i=!0)},o(o){u(l.$$.fragment,o),u(s.$$.fragment,o),i=!1},d(o){o&&n(r),h(l,o),h(s,o)}}}function on(T){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(o){J(l.$$.fragment,o),r=M(o),J(s.$$.fragment,o)},m(o,p){U(l,o,p),a(o,r,p),U(s,o,p),i=!0},i(o){i||(m(l.$$.fragment,o),m(s.$$.fragment,o),i=!0)},o(o){u(l.$$.fragment,o),u(s.$$.fragment,o),i=!1},d(o){o&&n(r),h(l,o),h(s,o)}}}function un(T){let l,r="สำหรับในตัวอย่างของเรานั้น เราต้องการโมเดลที่มี head สำหรับการจำแนกประโยค(sequence classification) (โดยสามารถที่จะจำแนกประโยคว่าเป็นประโยคเชิงบวก หรือ ลบ) ดังนั้น เราจะไม่ใช้คลาส <code>TFAutoModel</code> แต่จะใช้ <code>TFAutoModelForSequenceClassification</code>:",s,i,o;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">"distilbert-base-uncased-finetuned-sst-2-english"</span> | |
| model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| outputs = model(inputs)`,wrap:!1}}),{c(){l=y("p"),l.innerHTML=r,s=c(),d(i.$$.fragment)},l(p){l=f(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-vqwc93"&&(l.innerHTML=r),s=M(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),o=!0},i(p){o||(m(i.$$.fragment,p),o=!0)},o(p){u(i.$$.fragment,p),o=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function mn(T){let l,r="สำหรับในตัวอย่างของเรานั้น เราต้องการโมเดลที่มี head สำหรับการจำแนกประโยค(sequence classification) (โดยสามารถที่จะจำแนกประโยคว่าเป็นประโยคเชิงบวก หรือ ลบ) ดังนั้น เราจะไม่ใช้คลาส <code>AutoModel</code> แต่จะใช้ <code>AutoModelForSequenceClassification</code>:",s,i,o;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">"distilbert-base-uncased-finetuned-sst-2-english"</span> | |
| model = AutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| outputs = model(**inputs)`,wrap:!1}}),{c(){l=y("p"),l.innerHTML=r,s=c(),d(i.$$.fragment)},l(p){l=f(p,"P",{"data-svelte-h":!0}),b(l)!=="svelte-erm3e9"&&(l.innerHTML=r),s=M(p),J(i.$$.fragment,p)},m(p,j){a(p,l,j),a(p,s,j),U(i,p,j),o=!0},i(p){o||(m(i.$$.fragment,p),o=!0)},o(p){u(i.$$.fragment,p),o=!1},d(p){p&&(n(l),n(s)),h(i,p)}}}function yn(T){let l,r;return l=new w({props:{code:"KDIlMkMlMjAyKQ==",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>)',wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function fn(T){let l,r;return l=new w({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMiU1RCk=",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">2</span>])',wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function Tn(T){let l,r;return l=new w({props:{code:"JTNDdGYuVGVuc29yJTNBJTIwc2hhcGUlM0QoMiUyQyUyMDIpJTJDJTIwZHR5cGUlM0RmbG9hdDMyJTJDJTIwbnVtcHklM0QlMEElMjAlMjAlMjAlMjBhcnJheSglNUIlNUItMS41NjA2OTkxJTJDJTIwJTIwMS42MTIyODQyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwNC4xNjkyMzElMjAlMkMlMjAtMy4zNDY0NDcyJTVEJTVEJTJDJTIwZHR5cGUlM0RmbG9hdDMyKSUzRQ==",highlighted:`<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)>`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function bn(T){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=<AddmmBackward>)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function dn(T){let l,r;return l=new w({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFwcmVkaWN0aW9ucyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChvdXRwdXRzLmxvZ2l0cyUyQyUyMGF4aXMlM0QtMSklMEFwcmludChwcmVkaWN0aW9ucyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf | |
| predictions = tf.math.softmax(outputs.logits, axis=-<span class="hljs-number">1</span>) | |
| <span class="hljs-built_in">print</span>(predictions)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function Jn(T){let l,r;return l=new w({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFwcmVkaWN0aW9ucyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChvdXRwdXRzLmxvZ2l0cyUyQyUyMGRpbSUzRC0xKSUwQXByaW50KHByZWRpY3Rpb25zKQ==",highlighted:`<span class="hljs-keyword">import</span> torch | |
| predictions = torch.nn.functional.softmax(outputs.logits, dim=-<span class="hljs-number">1</span>) | |
| <span class="hljs-built_in">print</span>(predictions)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function Un(T){let l,r;return l=new w({props:{code:"dGYuVGVuc29yKCUwQSU1QiU1QjQuMDE5NTE2NzFlLTAyJTIwOS41OTgwNDgzM2UtMDElNUQlMEElMjAlNUI5Ljk5NDU1ODdlLTAxJTIwNS40NDE4NDI0ZS0wNCU1RCU1RCUyQyUyMHNoYXBlJTNEKDIlMkMlMjAyKSUyQyUyMGR0eXBlJTNEZmxvYXQzMik=",highlighted:`tf.Tensor( | |
| [[<span class="hljs-number">4.01951671e-02</span> <span class="hljs-number">9.59804833e-01</span>] | |
| [<span class="hljs-number">9.9945587e-01</span> <span class="hljs-number">5.4418424e-04</span>]], shape=(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>), dtype=float32)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function hn(T){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=<SoftmaxBackward>)`,wrap:!1}}),{c(){d(l.$$.fragment)},l(s){J(l.$$.fragment,s)},m(s,i){U(l,s,i),r=!0},i(s){r||(m(l.$$.fragment,s),r=!0)},o(s){u(l.$$.fragment,s),r=!1},d(s){h(l,s)}}}function jn(T){let l,r,s,i,o,p,j,Js,K,Us,_,C,as,X,xl="<p>Section นี้จะเป็น Section แรกที่เนื้อหาจะค่อนข้างแตกต่างกันขึ้นอยู่กับว่าคุณใช้ PyTorch หรือ TensorFlow คุณสามารถเลือก plateform ที่คุณต้องการได้จากปุ่มที่อยู่ด้านบนของชื่อหัวข้อ!</p>",hs,k,$,rs,O,Ql='เรามาเริ่มกันด้วยตัวอย่างนี้ โดยเรามาดูกันว่าเกิดอะไรขึ้นในเบื้องหลังเมื่อเราทำการสั่งการ(executed) โค้ดด้านล่างนี้จาก <a href="/course/chapter1">Chapter 1</a>:',js,ee,ws,se,Nl="และ ผลลัพธ์ที่ได้:",_s,le,Cs,te,Dl='อย่างที่เราเห็นใน <a href="/course/chapter1">Chapter 1</a>, pipeline นี้เป็นการรวมเอา 3 ขั้นตอน : แ(preprocessing), ส่งข้อมูลเข้าไปยังโมเดล, และการประมวลผลข้อมูลที่ออกมาจากโมเดล (postprocessing)',ks,Y,El='<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,ne,Gl="เรามาดูแต่ละขั้นตอนเหล่านี้กันอย่างละเอียดเลยดีกว่า",Is,ae,gs,re,Vl="เหมือนกับโครงข่ายประสาท(neural networks) อื่นๆ, โมเดล Transformer ไม่สามารถที่จะประมวลผลข้อมูลที่เป็นข้อความ(text) ได้ตรงๆ ดังนั้นขั้นแรกของ pipeline ก็คือการแปลงข้อความให้เป็นตัวเลข(numbers) ที่โมเดลนั้นสามารถประมวลผลได้ ในกระบวนการนี้เราจะใช้ <em>tokenizer</em> ซึ่งจะรับผิดชอบในการทำ :",As,pe,Zl="<li>แบ่งข้อมูลออกเป็น คำ(words), หน่วยย่อยของคำ (subwords), หรือ สัญลักษณ์ (เช่น เครื่องหมายวรรคตอน (punctuation)) เหล่านี้เราเรียกว่า <em>token</em></li> <li>ทำการเชื่อมโยง (Mapping) แต่ละ token ไปเป็นตัวเลข (integer)</li> <li>เพิ่มเติมข้อมูลที่อาจจะเป็นประโยชน์กับโมเดล</li>",vs,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 ของโมเดลมาเก็บไว้(จะดาวน์โหลดเพียงครั้งเดียวตอนที่เรารันโค้ดด้านล่างนี้ครั้งแรกเท่านั้น)',xs,ce,Hl='เนื่องจาก 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>), ดังนั้นเราจะรันโค้ดนี้:',Qs,Me,Ns,oe,Sl="เมื่อเรามี tokenizer แล้ว เราสามารถใส่ประโยคข้อความของเราเข้าไปและเราจะได้สารานุกรม(dictionary) ที่พร้อมนำไปใส่ในโมเดลออกมา! สิ่งเดียวที่เหลือที่ต้องทำ คือ การแปลงข้อมูลอัตลักษณ์(IDs) ของข้อมูลที่ใส่เข้าไป(input) ไปเป็น tensors",Ds,ue,Rl="คุณสามารถใช้ 🤗 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",Es,me,Wl="การกำหนดประเภทของ tensor ที่เราต้องการได้กลับมา (PyTorch, TensorFlow, หรือ NumPy) เราสามารถใช้ตัวแปร(argument) <code>return_tensors</code>:",Gs,I,g,ps,ye,Bl="ไม่ต้องกังวลเกี่ยวการเพิ่ม(padding) และการตัดออก(truncation) ในตอนนี้ เราจะอธิบายทีหลัง สิ่งหลักๆ ที่ควรจำคือ คุณสามารถที่จะส่งผ่านประโยคหนึ่งประโยค หรือ รายการ(list)ของประโยค พร้อมทั้งระบุประเภทของ tensor ที่คุณต้องการได้กลับมา(ถ้าไม่ระบุประเภท คุณจะได้ผลกลับมาเป็น list of lists)",Vs,A,v,is,fe,Ll="ผลลัพธ์จะเป็นสารานุกรม(dictionary) ที่มี 2 คีย์(keys), <code>input_ids</code> และ <code>attention_mask</code> โดยที่ <code>input_ids</code> จะมีข้อมูลเป็นตัวเลข(integers)จำนวนสองแถว (หนึ่งแถวต่อหนึ่งประโยค) ซึ่งเป็นอัตลักษณ์ที่เฉพาะเจาะจงของ token ในแต่ละประโยค ส่วน <code>attention_mask</code> เราจะอธิบายในบทนี้อีกครั้งหลังจากนี้",Zs,Te,zs,x,Q,cs,be,Fl="ในตัวอย่างโค้ดนี้ เราดาวน์โหลด checkpoint เดียวกันกับที่เราใช้ใน pipeline ของเราก่อนหน้านี้ (มันน่ามีการเก็บ(cached)ไว้แล้ว) และสร้างโมเดลขึ้นมาพร้อมกัน",Hs,de,Xl="ในสถาปัตยกรรมนี้จะมีเฉพาะโมดูล Transformer พื้นฐาน: ให้ข้อมูลเข้าไป และมันให้สิ่งที่เราเรียกว่า <em>hidden states</em> ออกมา หรือที่เรารู้จักกันในนาม <em>features</em> สำหรับข้อมูลอินพุตของแต่ละโมเดล เราจะทำการหาเวกเตอร์หลายมิติ(high-dimensional vector) ที่บ่งบอก <strong>ความเข้าใจสภาวะแวดล้อมของข้อมูลนั้นโดนโมเดล Transformer</strong>",Ss,Je,Yl="ถ้านี้ฟังดูไม่สมเหตุสมผล ไม่ต้องกังวล เดี๋ยวเราจะอธิบายทัั้งหมดอีกครั้ง",Rs,Ue,Pl='ในขณะที่ hidden states เหล่านี้เป็นประโยชน์ในตัวมันอยู่แล้ว มันเลยถูกนำไปใช้กับส่วนอื่นของโมเดลด้วย ที่เรารู้จักกันในนาม <em>head</em> ใน <a href="/course/chapter1">Chapter 1</a>, งานที่แตกต่างกันอาจจะสามารถใช้สถาปัตยกรรมเหมือนกันได้ แต่งานแต่ละอย่างจะมีส่วนหัว(head)ที่แตกต่างกันไป',Ws,he,Bs,je,ql="เวอเตอร์ที่ได้จากโมดูลของ Transformer นั้นปกติจะมีขนาดใหญ่ โดยทั่วไปแล้วมันจะมี 3 มิติ:",Ls,we,Kl="<li><strong>ขนาดของชุด(ฺBatch size)</strong>: จำนวนของประโยคที่ผ่านการประมวลผล (2 ประโยคในตัวอย่างของเรา)</li> <li><strong>ความยาวของประโยค(Sequence length)</strong>: ความยาวของตัวเลขที่เป็นตัวแทนของประโยค (16 ตัวเลขในตัวอย่างของเรา)</li> <li><strong>ขนาดของ Hidden states (Hidden size)</strong>: มิติของเวคเตอร์ของแต่ละข้อมูลที่ให้เข้าไปยังโมเดล</li>",Fs,_e,Ol="มันจะถูกบอกว่ามันเป็นเวคเตอร์ “หลายมิติ(high dimensional)” ก็เพราะค่าสุดท้าย ขนาดของ hidden states นั้นสามารถมีขนาดที่ใหญ่มาก(786 เป็นค่าที่ใช้กันทั่วไปสำหรับโมเดลขนาดเล็ก, ส่วนในโมเดลขนาดใหญ่นั้นสามารถขึ้นไปได้ถึง 3072 หรือมากกว่านั้น)",Xs,Ce,et="เราจะเห็นได้ว่าถ้าเราใส่ข้อมูลที่เราประมวลผลมาแล้วเข้าไปยังโมเดลของเรา:",Ys,N,D,Ms,ke,st="จะสังเกตว่าข้อมูลที่ออกจากโมเดล 🤗 Transformers นั้นจะมีลักษณะเหมือนกับ <code>namedtuple</code>s หรือ dictionaries คุณสามารถเข้าถึงองค์ประกอบต่าง(elements) ได้ด้วย attributes (เหมือนที่เราทำ) หรือด้วย key (<code>outputs["last_hidden_state"]</code>) หรือแม้กระทั่งด้วย index ถ้าคุณรู้ว่าสิ่งที่คุณมองหานั้นอยู่ตรงไหน (<code>outputs[0]</code>)",Ps,$e,qs,Ie,lt="โมเดล heads รับเวคเตอร์หลายมิติ(high-dimensional) ของ hidden states เข้าไปและจะทำการโปรเจคเวคเตอร์ดังกล่าวไปยังมิติอื่น ซึ่งโดยปกติโมเดล heads จะประกอบด้วยเลเยอร์เชิงเส้น(linear layers) อย่างน้อยหนึ่งเลเยอร์:",Ks,P,tt='<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."/>',Os,ge,nt="เอาท์พุตของโมเดล Transformer จะส่งตรงไปที่หัวโมเดล(model head)เพื่อทำการประมวลผล",el,Ae,at="ในไดอะแกรมนี้ โมเดลจะถูกแทนที่ด้วยเลเยอร์ฝังตัว(embeddings layer) และเลเยอร์ย่อย(subsequent layers) ของตัวมันเอง โดยเลเยอร์ฝังตัว(embeddings layer) จะทำการแปลงตัวบ่งชี้ตัวตนของอินพุต(Input ID) ที่อยู่ในอินพุตที่เป็น tokenized ไปเป็นเวคเตอร์ที่่เป็นตัวแทนของ token ที่เกี่ยวข้อง ส่วนเลเยอร์ย่อยอื่นๆจะจัดการเวคเตอร์อื่นโดยใช้กระบวนการ attention เพื่อให้ได้มาซึ่งตัวแทน(representation) สุดท้ายของประโยค",sl,ve,rt="มีหลายสถาปัตยกรรมใน 🤗 Transformers โดยที่หนึ่งสถาปัตยกรรมถูกออกแบบมาให้ใช้กับงานเฉพาะหนึ่งงาน นี่เป็นเพียงส่วนหนึ่งจากหลายๆโมเดล :",ll,xe,pt="<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>",tl,E,G,os,Qe,it="ถ้าเราดูที่ขนาด(shape) ของอินพุต มิติ(dimensionality)จะน้อยกว่ามาก : model head ที่รับเอาเวคเตอร์ขนาดหลายมิติเป็นอินพุตเหมือนที่เราเห็นก่อนหน้านี้ และให้เอาท์พุตเป็นเวคเตอร์ที่มีสองค่า (หนึ่งค่าต่อหนึ่งสัญลักษณ์(label)) :",nl,Ne,al,V,Z,us,De,ct="เนื่องจากเรามีแค่สองประโยคและสองสัญลักษณ์(labels) ผลลัพธ์ที่ได้จากโมเดลของเราจึงมีขนาด 2x2",rl,Ee,pl,Ge,Mt="ค่าที่เราได้มาจากโมเดลนั้นไม่จำเป็นต้องดูเป็นเหตุเป็นผลในตัวมันเอง เดี๋ยวเราลองมาดูกัน:",il,Ve,cl,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):',Ml,S,R,ys,W,B,fs,ze,ut="ตอนนี้เราจะเห็นว่าโมเดลทำนาย <code>[0.0402, 0.9598]</code> สำหรับประโยคแรก และ <code>[0.9995, 0.0005]</code> สำหรับประโยคที่สอง ซึ่งคะแนนเหล่านี้คือคะแนนความน่าจะเป็น(probabilities score) ที่สามารถนำไปจำแนกได้",ol,He,mt="เพื่อที่จะให้ได้สัญลักษณ์(label) ของแต่ละตำแหน่ง เราสามารถดูได้จากคุณสมบัติ <code>id2label</code> ของโมเดล model config (เดี๋ยวเราจะอธิบายเพิ่มเติมใน section ถัดไป):",ul,Se,ml,Re,yl,We,yt="เราสามารถที่จะสรุปได้ว่าโมเดลทำการทำนายดังต่อไปนี้",fl,Be,ft="<li>ประโยคแรก: NEGATIVE: 0.0402, POSITIVE: 0.9598</li> <li>ประโยคที่สอง: NEGATIVE: 0.9995, POSITIVE: 0.0005</li>",Tl,Le,Tt="ถึงตรงนี้ประสบความสำเร็จในการลองทำ สาม ขั้นตอนของ pipeline: การประมวลผลเบื้องต้น(preprocessing)โดยใช้ tokenizers, ส่งข้อมูลเข้าไปยังโมเดล,และการประมวลผลข้อมูลที่ได้จากโมเดล! ต่อจากนี้เราจะไปลงลึกในรายละเอียดของแต่ละขั้นตอน",bl,q,bt="<p>✏️ <strong>ลองเลย!</strong> เลือกสอง(หรือมากกว่านั้น) ข้อความของคุณเองและลองใส่มันเข้าไปใน <code>sentiment-analysis</code> pipeline. แล้วทำขั้นตอนต่างๆ ที่คุณเรียนผ่านมาใน section นี้และตรวจสอบดูว่าคุณได้ผลเหมือนเดิมหรือไม่!</p>",dl,Fe,Jl,ds,Ul;o=new Kt({props:{fw:T[0]}}),j=new Pt({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),K=new bs({props:{title:"เบื้องหลังของ pipeline",local:"เบองหลงของ-pipeline",headingTag:"h1"}});const dt=[en,Ot],Xe=[];function Jt(e,t){return e[0]==="pt"?0:1}_=Jt(T),C=Xe[_]=dt[_](T);const Ut=[ln,sn],Ye=[];function ht(e,t){return e[0]==="pt"?0:1}k=ht(T),$=Ye[k]=Ut[k](T),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">"sentiment-analysis"</span>) | |
| classifier( | |
| [ | |
| <span class="hljs-string">"I've been waiting for a HuggingFace course my whole life."</span>, | |
| <span class="hljs-string">"I hate this so much!"</span>, | |
| ] | |
| )`,wrap:!1}}),le=new w({props:{code:"JTVCJTdCJ2xhYmVsJyUzQSUyMCdQT1NJVElWRSclMkMlMjAnc2NvcmUnJTNBJTIwMC45NTk4MDQ3MTM3MjYwNDM3JTdEJTJDJTBBJTIwJTdCJ2xhYmVsJyUzQSUyMCdORUdBVElWRSclMkMlMjAnc2NvcmUnJTNBJTIwMC45OTk0NTU4MDk1OTMyMDA3JTdEJTVE",highlighted:`[{<span class="hljs-string">'label'</span>: <span class="hljs-string">'POSITIVE'</span>, <span class="hljs-string">'score'</span>: <span class="hljs-number">0.9598047137260437</span>}, | |
| {<span class="hljs-string">'label'</span>: <span class="hljs-string">'NEGATIVE'</span>, <span class="hljs-string">'score'</span>: <span class="hljs-number">0.9994558095932007</span>}]`,wrap:!1}}),ae=new bs({props:{title:"การประมวลผลข้อมูลขั้นต้น(Preprocessing) ด้วย tokenizer",local:"การประมวลผลขอมลขนตนpreprocessing-ดวย-tokenizer",headingTag:"h2"}}),Me=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">"distilbert-base-uncased-finetuned-sst-2-english"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint)`,wrap:!1}});const jt=[nn,tn],Pe=[];function wt(e,t){return e[0]==="pt"?0:1}I=wt(T),g=Pe[I]=jt[I](T);const _t=[rn,an],qe=[];function Ct(e,t){return e[0]==="pt"?0:1}A=Ct(T),v=qe[A]=_t[A](T),Te=new bs({props:{title:"มาอธิบายเกี่ยวกับโมเดลกัน",local:"มาอธบายเกยวกบโมเดลกน",headingTag:"h2"}});const kt=[cn,pn],Ke=[];function $t(e,t){return e[0]==="pt"?0:1}x=$t(T),Q=Ke[x]=kt[x](T),he=new bs({props:{title:"เวคเตอร์หลายมิติ (A high-dimensional vector) ?",local:"เวคเตอรหลายมต-a-high-dimensional-vector-",headingTag:"h3"}});const It=[on,Mn],Oe=[];function gt(e,t){return e[0]==="pt"?0:1}N=gt(T),D=Oe[N]=It[N](T),$e=new bs({props:{title:"Model heads: ทำความเข้าใจจากตัวเลข",local:"model-heads-ทำความเขาใจจากตวเลข",headingTag:"h3"}});const At=[mn,un],es=[];function vt(e,t){return e[0]==="pt"?0:1}E=vt(T),G=es[E]=At[E](T),Ne=new w({props:{code:"cHJpbnQob3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:'<span class="hljs-built_in">print</span>(outputs.logits.shape)',wrap:!1}});const xt=[fn,yn],ss=[];function Qt(e,t){return e[0]==="pt"?0:1}V=Qt(T),Z=ss[V]=xt[V](T),Ee=new bs({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 Nt=[bn,Tn],ls=[];function Dt(e,t){return e[0]==="pt"?0:1}z=Dt(T),H=ls[z]=Nt[z](T);const Et=[Jn,dn],ts=[];function Gt(e,t){return e[0]==="pt"?0:1}S=Gt(T),R=ts[S]=Et[S](T);const Vt=[hn,Un],ns=[];function Zt(e,t){return e[0]==="pt"?0:1}return W=Zt(T),B=ns[W]=Vt[W](T),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">'NEGATIVE'</span>, <span class="hljs-number">1</span>: <span class="hljs-string">'POSITIVE'</span>}',wrap:!1}}),Fe=new qt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/th/chapter2/2.mdx"}}),{c(){l=y("meta"),r=c(),s=y("p"),i=c(),d(o.$$.fragment),p=c(),d(j.$$.fragment),Js=c(),d(K.$$.fragment),Us=c(),C.c(),as=c(),X=y("blockquote"),X.innerHTML=xl,hs=c(),$.c(),rs=c(),O=y("p"),O.innerHTML=Ql,js=c(),d(ee.$$.fragment),ws=c(),se=y("p"),se.textContent=Nl,_s=c(),d(le.$$.fragment),Cs=c(),te=y("p"),te.innerHTML=Dl,ks=c(),Y=y("div"),Y.innerHTML=El,$s=c(),ne=y("p"),ne.textContent=Gl,Is=c(),d(ae.$$.fragment),gs=c(),re=y("p"),re.innerHTML=Vl,As=c(),pe=y("ul"),pe.innerHTML=Zl,vs=c(),ie=y("p"),ie.innerHTML=zl,xs=c(),ce=y("p"),ce.innerHTML=Hl,Qs=c(),d(Me.$$.fragment),Ns=c(),oe=y("p"),oe.textContent=Sl,Ds=c(),ue=y("p"),ue.innerHTML=Rl,Es=c(),me=y("p"),me.innerHTML=Wl,Gs=c(),g.c(),ps=c(),ye=y("p"),ye.textContent=Bl,Vs=c(),v.c(),is=c(),fe=y("p"),fe.innerHTML=Ll,Zs=c(),d(Te.$$.fragment),zs=c(),Q.c(),cs=c(),be=y("p"),be.textContent=Fl,Hs=c(),de=y("p"),de.innerHTML=Xl,Ss=c(),Je=y("p"),Je.textContent=Yl,Rs=c(),Ue=y("p"),Ue.innerHTML=Pl,Ws=c(),d(he.$$.fragment),Bs=c(),je=y("p"),je.textContent=ql,Ls=c(),we=y("ul"),we.innerHTML=Kl,Fs=c(),_e=y("p"),_e.textContent=Ol,Xs=c(),Ce=y("p"),Ce.textContent=et,Ys=c(),D.c(),Ms=c(),ke=y("p"),ke.innerHTML=st,Ps=c(),d($e.$$.fragment),qs=c(),Ie=y("p"),Ie.textContent=lt,Ks=c(),P=y("div"),P.innerHTML=tt,Os=c(),ge=y("p"),ge.textContent=nt,el=c(),Ae=y("p"),Ae.textContent=at,sl=c(),ve=y("p"),ve.textContent=rt,ll=c(),xe=y("ul"),xe.innerHTML=pt,tl=c(),G.c(),os=c(),Qe=y("p"),Qe.textContent=it,nl=c(),d(Ne.$$.fragment),al=c(),Z.c(),us=c(),De=y("p"),De.textContent=ct,rl=c(),d(Ee.$$.fragment),pl=c(),Ge=y("p"),Ge.textContent=Mt,il=c(),d(Ve.$$.fragment),cl=c(),H.c(),ms=c(),Ze=y("p"),Ze.innerHTML=ot,Ml=c(),R.c(),ys=c(),B.c(),fs=c(),ze=y("p"),ze.innerHTML=ut,ol=c(),He=y("p"),He.innerHTML=mt,ul=c(),d(Se.$$.fragment),ml=c(),d(Re.$$.fragment),yl=c(),We=y("p"),We.textContent=yt,fl=c(),Be=y("ul"),Be.innerHTML=ft,Tl=c(),Le=y("p"),Le.textContent=Tt,bl=c(),q=y("blockquote"),q.innerHTML=bt,dl=c(),d(Fe.$$.fragment),Jl=c(),ds=y("p"),this.h()},l(e){const t=Xt("svelte-u9bgzb",document.head);l=f(t,"META",{name:!0,content:!0}),t.forEach(n),r=M(e),s=f(e,"P",{}),Ht(s).forEach(n),i=M(e),J(o.$$.fragment,e),p=M(e),J(j.$$.fragment,e),Js=M(e),J(K.$$.fragment,e),Us=M(e),C.l(e),as=M(e),X=f(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),b(X)!=="svelte-vb5j9u"&&(X.innerHTML=xl),hs=M(e),$.l(e),rs=M(e),O=f(e,"P",{"data-svelte-h":!0}),b(O)!=="svelte-1xo44hm"&&(O.innerHTML=Ql),js=M(e),J(ee.$$.fragment,e),ws=M(e),se=f(e,"P",{"data-svelte-h":!0}),b(se)!=="svelte-1qkfrdi"&&(se.textContent=Nl),_s=M(e),J(le.$$.fragment,e),Cs=M(e),te=f(e,"P",{"data-svelte-h":!0}),b(te)!=="svelte-dkirdh"&&(te.innerHTML=Dl),ks=M(e),Y=f(e,"DIV",{class:!0,"data-svelte-h":!0}),b(Y)!=="svelte-fbe70j"&&(Y.innerHTML=El),$s=M(e),ne=f(e,"P",{"data-svelte-h":!0}),b(ne)!=="svelte-cpemj5"&&(ne.textContent=Gl),Is=M(e),J(ae.$$.fragment,e),gs=M(e),re=f(e,"P",{"data-svelte-h":!0}),b(re)!=="svelte-13ekozv"&&(re.innerHTML=Vl),As=M(e),pe=f(e,"UL",{"data-svelte-h":!0}),b(pe)!=="svelte-1n0vksv"&&(pe.innerHTML=Zl),vs=M(e),ie=f(e,"P",{"data-svelte-h":!0}),b(ie)!=="svelte-4r3whk"&&(ie.innerHTML=zl),xs=M(e),ce=f(e,"P",{"data-svelte-h":!0}),b(ce)!=="svelte-1jz2zu2"&&(ce.innerHTML=Hl),Qs=M(e),J(Me.$$.fragment,e),Ns=M(e),oe=f(e,"P",{"data-svelte-h":!0}),b(oe)!=="svelte-1opysrj"&&(oe.textContent=Sl),Ds=M(e),ue=f(e,"P",{"data-svelte-h":!0}),b(ue)!=="svelte-jqavbm"&&(ue.innerHTML=Rl),Es=M(e),me=f(e,"P",{"data-svelte-h":!0}),b(me)!=="svelte-75gzuz"&&(me.innerHTML=Wl),Gs=M(e),g.l(e),ps=M(e),ye=f(e,"P",{"data-svelte-h":!0}),b(ye)!=="svelte-39blzd"&&(ye.textContent=Bl),Vs=M(e),v.l(e),is=M(e),fe=f(e,"P",{"data-svelte-h":!0}),b(fe)!=="svelte-32miwr"&&(fe.innerHTML=Ll),Zs=M(e),J(Te.$$.fragment,e),zs=M(e),Q.l(e),cs=M(e),be=f(e,"P",{"data-svelte-h":!0}),b(be)!=="svelte-1tvt193"&&(be.textContent=Fl),Hs=M(e),de=f(e,"P",{"data-svelte-h":!0}),b(de)!=="svelte-mon0dd"&&(de.innerHTML=Xl),Ss=M(e),Je=f(e,"P",{"data-svelte-h":!0}),b(Je)!=="svelte-wqh6o5"&&(Je.textContent=Yl),Rs=M(e),Ue=f(e,"P",{"data-svelte-h":!0}),b(Ue)!=="svelte-3soea5"&&(Ue.innerHTML=Pl),Ws=M(e),J(he.$$.fragment,e),Bs=M(e),je=f(e,"P",{"data-svelte-h":!0}),b(je)!=="svelte-1pfzoua"&&(je.textContent=ql),Ls=M(e),we=f(e,"UL",{"data-svelte-h":!0}),b(we)!=="svelte-19wiedi"&&(we.innerHTML=Kl),Fs=M(e),_e=f(e,"P",{"data-svelte-h":!0}),b(_e)!=="svelte-11j6u4u"&&(_e.textContent=Ol),Xs=M(e),Ce=f(e,"P",{"data-svelte-h":!0}),b(Ce)!=="svelte-1otiy0d"&&(Ce.textContent=et),Ys=M(e),D.l(e),Ms=M(e),ke=f(e,"P",{"data-svelte-h":!0}),b(ke)!=="svelte-mq6m3p"&&(ke.innerHTML=st),Ps=M(e),J($e.$$.fragment,e),qs=M(e),Ie=f(e,"P",{"data-svelte-h":!0}),b(Ie)!=="svelte-87l8us"&&(Ie.textContent=lt),Ks=M(e),P=f(e,"DIV",{class:!0,"data-svelte-h":!0}),b(P)!=="svelte-8mo6lt"&&(P.innerHTML=tt),Os=M(e),ge=f(e,"P",{"data-svelte-h":!0}),b(ge)!=="svelte-cxuwz0"&&(ge.textContent=nt),el=M(e),Ae=f(e,"P",{"data-svelte-h":!0}),b(Ae)!=="svelte-1bdnds8"&&(Ae.textContent=at),sl=M(e),ve=f(e,"P",{"data-svelte-h":!0}),b(ve)!=="svelte-umhw6j"&&(ve.textContent=rt),ll=M(e),xe=f(e,"UL",{"data-svelte-h":!0}),b(xe)!=="svelte-v0insc"&&(xe.innerHTML=pt),tl=M(e),G.l(e),os=M(e),Qe=f(e,"P",{"data-svelte-h":!0}),b(Qe)!=="svelte-14mzva3"&&(Qe.textContent=it),nl=M(e),J(Ne.$$.fragment,e),al=M(e),Z.l(e),us=M(e),De=f(e,"P",{"data-svelte-h":!0}),b(De)!=="svelte-56bzqi"&&(De.textContent=ct),rl=M(e),J(Ee.$$.fragment,e),pl=M(e),Ge=f(e,"P",{"data-svelte-h":!0}),b(Ge)!=="svelte-bztxgv"&&(Ge.textContent=Mt),il=M(e),J(Ve.$$.fragment,e),cl=M(e),H.l(e),ms=M(e),Ze=f(e,"P",{"data-svelte-h":!0}),b(Ze)!=="svelte-nr2ial"&&(Ze.innerHTML=ot),Ml=M(e),R.l(e),ys=M(e),B.l(e),fs=M(e),ze=f(e,"P",{"data-svelte-h":!0}),b(ze)!=="svelte-1cupxnc"&&(ze.innerHTML=ut),ol=M(e),He=f(e,"P",{"data-svelte-h":!0}),b(He)!=="svelte-po6c34"&&(He.innerHTML=mt),ul=M(e),J(Se.$$.fragment,e),ml=M(e),J(Re.$$.fragment,e),yl=M(e),We=f(e,"P",{"data-svelte-h":!0}),b(We)!=="svelte-2o6vfe"&&(We.textContent=yt),fl=M(e),Be=f(e,"UL",{"data-svelte-h":!0}),b(Be)!=="svelte-1wiogbz"&&(Be.innerHTML=ft),Tl=M(e),Le=f(e,"P",{"data-svelte-h":!0}),b(Le)!=="svelte-10o4u17"&&(Le.textContent=Tt),bl=M(e),q=f(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),b(q)!=="svelte-cxvok"&&(q.innerHTML=bt),dl=M(e),J(Fe.$$.fragment,e),Jl=M(e),ds=f(e,"P",{}),Ht(ds).forEach(n),this.h()},h(){Ts(l,"name","hf:doc:metadata"),Ts(l,"content",wn),Ts(X,"class","tip"),Ts(Y,"class","flex justify-center"),Ts(P,"class","flex justify-center"),Ts(q,"class","tip")},m(e,t){Yt(document.head,l),a(e,r,t),a(e,s,t),a(e,i,t),U(o,e,t),a(e,p,t),U(j,e,t),a(e,Js,t),U(K,e,t),a(e,Us,t),Xe[_].m(e,t),a(e,as,t),a(e,X,t),a(e,hs,t),Ye[k].m(e,t),a(e,rs,t),a(e,O,t),a(e,js,t),U(ee,e,t),a(e,ws,t),a(e,se,t),a(e,_s,t),U(le,e,t),a(e,Cs,t),a(e,te,t),a(e,ks,t),a(e,Y,t),a(e,$s,t),a(e,ne,t),a(e,Is,t),U(ae,e,t),a(e,gs,t),a(e,re,t),a(e,As,t),a(e,pe,t),a(e,vs,t),a(e,ie,t),a(e,xs,t),a(e,ce,t),a(e,Qs,t),U(Me,e,t),a(e,Ns,t),a(e,oe,t),a(e,Ds,t),a(e,ue,t),a(e,Es,t),a(e,me,t),a(e,Gs,t),Pe[I].m(e,t),a(e,ps,t),a(e,ye,t),a(e,Vs,t),qe[A].m(e,t),a(e,is,t),a(e,fe,t),a(e,Zs,t),U(Te,e,t),a(e,zs,t),Ke[x].m(e,t),a(e,cs,t),a(e,be,t),a(e,Hs,t),a(e,de,t),a(e,Ss,t),a(e,Je,t),a(e,Rs,t),a(e,Ue,t),a(e,Ws,t),U(he,e,t),a(e,Bs,t),a(e,je,t),a(e,Ls,t),a(e,we,t),a(e,Fs,t),a(e,_e,t),a(e,Xs,t),a(e,Ce,t),a(e,Ys,t),Oe[N].m(e,t),a(e,Ms,t),a(e,ke,t),a(e,Ps,t),U($e,e,t),a(e,qs,t),a(e,Ie,t),a(e,Ks,t),a(e,P,t),a(e,Os,t),a(e,ge,t),a(e,el,t),a(e,Ae,t),a(e,sl,t),a(e,ve,t),a(e,ll,t),a(e,xe,t),a(e,tl,t),es[E].m(e,t),a(e,os,t),a(e,Qe,t),a(e,nl,t),U(Ne,e,t),a(e,al,t),ss[V].m(e,t),a(e,us,t),a(e,De,t),a(e,rl,t),U(Ee,e,t),a(e,pl,t),a(e,Ge,t),a(e,il,t),U(Ve,e,t),a(e,cl,t),ls[z].m(e,t),a(e,ms,t),a(e,Ze,t),a(e,Ml,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,ul,t),U(Se,e,t),a(e,ml,t),U(Re,e,t),a(e,yl,t),a(e,We,t),a(e,fl,t),a(e,Be,t),a(e,Tl,t),a(e,Le,t),a(e,bl,t),a(e,q,t),a(e,dl,t),U(Fe,e,t),a(e,Jl,t),a(e,ds,t),Ul=!0},p(e,[t]){const zt={};t&1&&(zt.fw=e[0]),o.$set(zt);let hl=_;_=Jt(e),_!==hl&&(F(),u(Xe[hl],1,1,()=>{Xe[hl]=null}),L(),C=Xe[_],C||(C=Xe[_]=dt[_](e),C.c()),m(C,1),C.m(as.parentNode,as));let jl=k;k=ht(e),k!==jl&&(F(),u(Ye[jl],1,1,()=>{Ye[jl]=null}),L(),$=Ye[k],$||($=Ye[k]=Ut[k](e),$.c()),m($,1),$.m(rs.parentNode,rs));let wl=I;I=wt(e),I!==wl&&(F(),u(Pe[wl],1,1,()=>{Pe[wl]=null}),L(),g=Pe[I],g||(g=Pe[I]=jt[I](e),g.c()),m(g,1),g.m(ps.parentNode,ps));let _l=A;A=Ct(e),A!==_l&&(F(),u(qe[_l],1,1,()=>{qe[_l]=null}),L(),v=qe[A],v||(v=qe[A]=_t[A](e),v.c()),m(v,1),v.m(is.parentNode,is));let Cl=x;x=$t(e),x!==Cl&&(F(),u(Ke[Cl],1,1,()=>{Ke[Cl]=null}),L(),Q=Ke[x],Q||(Q=Ke[x]=kt[x](e),Q.c()),m(Q,1),Q.m(cs.parentNode,cs));let kl=N;N=gt(e),N!==kl&&(F(),u(Oe[kl],1,1,()=>{Oe[kl]=null}),L(),D=Oe[N],D||(D=Oe[N]=It[N](e),D.c()),m(D,1),D.m(Ms.parentNode,Ms));let $l=E;E=vt(e),E!==$l&&(F(),u(es[$l],1,1,()=>{es[$l]=null}),L(),G=es[E],G||(G=es[E]=At[E](e),G.c()),m(G,1),G.m(os.parentNode,os));let Il=V;V=Qt(e),V!==Il&&(F(),u(ss[Il],1,1,()=>{ss[Il]=null}),L(),Z=ss[V],Z||(Z=ss[V]=xt[V](e),Z.c()),m(Z,1),Z.m(us.parentNode,us));let gl=z;z=Dt(e),z!==gl&&(F(),u(ls[gl],1,1,()=>{ls[gl]=null}),L(),H=ls[z],H||(H=ls[z]=Nt[z](e),H.c()),m(H,1),H.m(ms.parentNode,ms));let Al=S;S=Gt(e),S!==Al&&(F(),u(ts[Al],1,1,()=>{ts[Al]=null}),L(),R=ts[S],R||(R=ts[S]=Et[S](e),R.c()),m(R,1),R.m(ys.parentNode,ys));let vl=W;W=Zt(e),W!==vl&&(F(),u(ns[vl],1,1,()=>{ns[vl]=null}),L(),B=ns[W],B||(B=ns[W]=Vt[W](e),B.c()),m(B,1),B.m(fs.parentNode,fs))},i(e){Ul||(m(o.$$.fragment,e),m(j.$$.fragment,e),m(K.$$.fragment,e),m(C),m($),m(ee.$$.fragment,e),m(le.$$.fragment,e),m(ae.$$.fragment,e),m(Me.$$.fragment,e),m(g),m(v),m(Te.$$.fragment,e),m(Q),m(he.$$.fragment,e),m(D),m($e.$$.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(Fe.$$.fragment,e),Ul=!0)},o(e){u(o.$$.fragment,e),u(j.$$.fragment,e),u(K.$$.fragment,e),u(C),u($),u(ee.$$.fragment,e),u(le.$$.fragment,e),u(ae.$$.fragment,e),u(Me.$$.fragment,e),u(g),u(v),u(Te.$$.fragment,e),u(Q),u(he.$$.fragment,e),u(D),u($e.$$.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(Fe.$$.fragment,e),Ul=!1},d(e){e&&(n(r),n(s),n(i),n(p),n(Js),n(Us),n(as),n(X),n(hs),n(rs),n(O),n(js),n(ws),n(se),n(_s),n(Cs),n(te),n(ks),n(Y),n($s),n(ne),n(Is),n(gs),n(re),n(As),n(pe),n(vs),n(ie),n(xs),n(ce),n(Qs),n(Ns),n(oe),n(Ds),n(ue),n(Es),n(me),n(Gs),n(ps),n(ye),n(Vs),n(is),n(fe),n(Zs),n(zs),n(cs),n(be),n(Hs),n(de),n(Ss),n(Je),n(Rs),n(Ue),n(Ws),n(Bs),n(je),n(Ls),n(we),n(Fs),n(_e),n(Xs),n(Ce),n(Ys),n(Ms),n(ke),n(Ps),n(qs),n(Ie),n(Ks),n(P),n(Os),n(ge),n(el),n(Ae),n(sl),n(ve),n(ll),n(xe),n(tl),n(os),n(Qe),n(nl),n(al),n(us),n(De),n(rl),n(pl),n(Ge),n(il),n(cl),n(ms),n(Ze),n(Ml),n(ys),n(fs),n(ze),n(ol),n(He),n(ul),n(ml),n(yl),n(We),n(fl),n(Be),n(Tl),n(Le),n(bl),n(q),n(dl),n(Jl),n(ds)),n(l),h(o,e),h(j,e),h(K,e),Xe[_].d(e),Ye[k].d(e),h(ee,e),h(le,e),h(ae,e),h(Me,e),Pe[I].d(e),qe[A].d(e),h(Te,e),Ke[x].d(e),h(he,e),Oe[N].d(e),h($e,e),es[E].d(e),h(Ne,e),ss[V].d(e),h(Ee,e),h(Ve,e),ls[z].d(e),ts[S].d(e),ns[W].d(e),h(Se,e),h(Re,e),h(Fe,e)}}}const wn='{"title":"เบื้องหลังของ pipeline","local":"เบองหลงของ-pipeline","sections":[{"title":"การประมวลผลข้อมูลขั้นต้น(Preprocessing) ด้วย tokenizer","local":"การประมวลผลขอมลขนตนpreprocessing-ดวย-tokenizer","sections":[],"depth":2},{"title":"มาอธิบายเกี่ยวกับโมเดลกัน","local":"มาอธบายเกยวกบโมเดลกน","sections":[{"title":"เวคเตอร์หลายมิติ (A high-dimensional vector) ?","local":"เวคเตอรหลายมต-a-high-dimensional-vector-","sections":[],"depth":3},{"title":"Model heads: ทำความเข้าใจจากตัวเลข","local":"model-heads-ทำความเขาใจจากตวเลข","sections":[],"depth":3}],"depth":2},{"title":"การประมวลหลังจากได้ผลลัพธ์มาแล้ว (Postprocessing)","local":"การประมวลหลงจากไดผลลพธมาแลว-postprocessing","sections":[],"depth":2}],"depth":1}';function _n(T,l,r){let s="pt";return Bt(()=>{const i=new URLSearchParams(window.location.search);r(0,s=i.get("fw")||"pt")}),[s]}class xn extends Lt{constructor(l){super(),Ft(this,l,_n,jn,Wt,{})}}export{xn as component}; | |
Xet Storage Details
- Size:
- 64.9 kB
- Xet hash:
- d727ede0df8a5598c28c75c80b568c543897c9af2efdc732f75db9f0884ed524
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.