import{s as Hl,o as zl,n as Gl}from"../chunks/scheduler.cc52f4b9.js";import{S as ql,i as Bl,e as f,s as p,c as T,h as Ll,a as y,d as n,b as o,f as Dl,g as h,j as b,k as yt,l as Sl,m as a,n as J,o as m,u as R,t as M,p as U,q as Rl,r as Wl,v as W}from"../chunks/index.9480bb2b.js";import{T as El}from"../chunks/Tip.f7b80743.js";import{C as Fl,H as ds,E as Xl}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.04d617be.js";import{Y as Vl}from"../chunks/Youtube.7b12d9e8.js";import{C as w}from"../chunks/CodeBlock.f4148b32.js";import{C as Zl}from"../chunks/CourseFloatingBanner.cdc38ef1.js";import{F as Pl}from"../chunks/FrameworkSwitchCourse.42d12053.js";function Yl(d){let t,r;return t=new Zl({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section2_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter2/section2_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section2_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter2/section2_tf.ipynb"}]}}),{c(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function Kl(d){let t,r;return t=new Zl({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section2_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter2/section2_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section2_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter2/section2_pt.ipynb"}]}}),{c(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function Ol(d){let t;return{c(){t=Rl("Il s'agit de la première section dont le contenu est légèrement différent selon que vous utilisez PyTorch ou TensorFlow. Cliquez sur le bouton situé au-dessus du titre pour sélectionner la plateforme que vous préférez !")},l(r){t=Wl(r,"Il s'agit de la première section dont le contenu est légèrement différent selon que vous utilisez PyTorch ou TensorFlow. Cliquez sur le bouton situé au-dessus du titre pour sélectionner la plateforme que vous préférez !")},m(r,s){a(r,t,s)},d(r){r&&n(t)}}}function en(d){let t,r;return t=new Vl({props:{id:"wVN12smEvqg"}}),{c(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function sn(d){let t,r;return t=new Vl({props:{id:"1pedAIvTWXk"}}),{c(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function tn(d){let t,r;return t=new w({props:{code:"cmF3X2lucHV0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMyUyMEonYWklMjBhdHRlbmR1JTIwdW4lMjBjb3VycyUyMGRlJTIwSHVnZ2luZ0ZhY2UlMjB0b3V0ZSUyMG1hJTIwdmllLiUwQSUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMjAlMjAlMjMlMjBKZSUyMGQlQzMlQTl0ZXN0ZSUyMHRlbGxlbWVudCUyMCVDMyVBN2ElMjAhJTBBJTVEJTBBaW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHJhd19pbnB1dHMlMkMlMjBwYWRkaW5nJTNEVHJ1ZSUyQyUyMHRydW5jYXRpb24lM0RUcnVlJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJ0ZiUyMiklMEFwcmludChpbnB1dHMp",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-comment"># J&#x27;ai attendu un cours de HuggingFace toute ma vie.</span>
    <span class="hljs-string">&quot;I hate this so much!&quot;</span>,  <span class="hljs-comment"># Je déteste tellement ça !</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(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function ln(d){let t,r;return t=new w({props:{code:"cmF3X2lucHV0cyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMyUyMEonYWklMjBhdHRlbmR1JTIwdW4lMjBjb3VycyUyMGRlJTIwSHVnZ2luZ0ZhY2UlMjB0b3V0ZSUyMG1hJTIwdmllLiUwQSUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMjAlMjAlMjMlMjBKZSUyMGQlQzMlQTl0ZXN0ZSUyMHRlbGxlbWVudCUyMCVDMyVBN2ElMjAhJTBBJTVEJTBBaW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHJhd19pbnB1dHMlMkMlMjBwYWRkaW5nJTNEVHJ1ZSUyQyUyMHRydW5jYXRpb24lM0RUcnVlJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJwdCUyMiklMEFwcmludChpbnB1dHMp",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-comment"># J&#x27;ai attendu un cours de HuggingFace toute ma vie.</span>
    <span class="hljs-string">&quot;I hate this so much!&quot;</span>,  <span class="hljs-comment"># Je déteste tellement ça !</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(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function nn(d){let t,r="Voici à quoi ressemblent les résultats sous forme de tenseurs TensorFlow :",s,u,c;return u=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(){t=f("p"),t.textContent=r,s=p(),T(u.$$.fragment)},l(i){t=y(i,"P",{"data-svelte-h":!0}),b(t)!=="svelte-2jqvkp"&&(t.textContent=r),s=o(i),h(u.$$.fragment,i)},m(i,j){a(i,t,j),a(i,s,j),J(u,i,j),c=!0},i(i){c||(M(u.$$.fragment,i),c=!0)},o(i){m(u.$$.fragment,i),c=!1},d(i){i&&(n(t),n(s)),U(u,i)}}}function an(d){let t,r="Voici à quoi ressemblent les résultats sous forme de tenseurs PyTorch :",s,u,c;return u=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(){t=f("p"),t.textContent=r,s=p(),T(u.$$.fragment)},l(i){t=y(i,"P",{"data-svelte-h":!0}),b(t)!=="svelte-9kuapd"&&(t.textContent=r),s=o(i),h(u.$$.fragment,i)},m(i,j){a(i,t,j),a(i,s,j),J(u,i,j),c=!0},i(i){c||(M(u.$$.fragment,i),c=!0)},o(i){m(u.$$.fragment,i),c=!1},d(i){i&&(n(t),n(s)),U(u,i)}}}function rn(d){let t,r="Nous pouvons télécharger notre modèle prétraîné de la même manière que nous l’avons fait avec notre <em>tokenizer</em>. 🤗 <em>Transformers</em> fournit une classe <code>TFAutoModel</code> qui possède également une méthode <code>from_pretrained()</code> :",s,u,c;return u=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(){t=f("p"),t.innerHTML=r,s=p(),T(u.$$.fragment)},l(i){t=y(i,"P",{"data-svelte-h":!0}),b(t)!=="svelte-t5x45s"&&(t.innerHTML=r),s=o(i),h(u.$$.fragment,i)},m(i,j){a(i,t,j),a(i,s,j),J(u,i,j),c=!0},i(i){c||(M(u.$$.fragment,i),c=!0)},o(i){m(u.$$.fragment,i),c=!1},d(i){i&&(n(t),n(s)),U(u,i)}}}function un(d){let t,r="Nous pouvons télécharger notre modèle pré-entraîné de la même manière que nous l’avons fait avec notre <em>tokenizer</em>. 🤗 <em>Transformers</em> fournit une classe <code>AutoModel</code> qui possède également une méthode <code>from_pretrained()</code> :",s,u,c;return u=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(){t=f("p"),t.innerHTML=r,s=p(),T(u.$$.fragment)},l(i){t=y(i,"P",{"data-svelte-h":!0}),b(t)!=="svelte-10pz8zs"&&(t.innerHTML=r),s=o(i),h(u.$$.fragment,i)},m(i,j){a(i,t,j),a(i,s,j),J(u,i,j),c=!0},i(i){c||(M(u.$$.fragment,i),c=!0)},o(i){m(u.$$.fragment,i),c=!1},d(i){i&&(n(t),n(s)),U(u,i)}}}function pn(d){let t,r,s,u;return t=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(){T(t.$$.fragment),r=p(),T(s.$$.fragment)},l(c){h(t.$$.fragment,c),r=o(c),h(s.$$.fragment,c)},m(c,i){J(t,c,i),a(c,r,i),J(s,c,i),u=!0},i(c){u||(M(t.$$.fragment,c),M(s.$$.fragment,c),u=!0)},o(c){m(t.$$.fragment,c),m(s.$$.fragment,c),u=!1},d(c){c&&n(r),U(t,c),U(s,c)}}}function on(d){let t,r,s,u;return t=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(){T(t.$$.fragment),r=p(),T(s.$$.fragment)},l(c){h(t.$$.fragment,c),r=o(c),h(s.$$.fragment,c)},m(c,i){J(t,c,i),a(c,r,i),J(s,c,i),u=!0},i(c){u||(M(t.$$.fragment,c),M(s.$$.fragment,c),u=!0)},o(c){m(t.$$.fragment,c),m(s.$$.fragment,c),u=!1},d(c){c&&n(r),U(t,c),U(s,c)}}}function cn(d){let t,r="Pour notre exemple, nous avons besoin d’un modèle avec une tête de classification de séquence (pour pouvoir classer les phrases comme positives ou négatives). Donc, nous n’utilisons pas réellement la classe <code>TFAutoModel</code> mais plutôt <code>TFAutoModelForSequenceClassification</code> :",s,u,c;return u=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(){t=f("p"),t.innerHTML=r,s=p(),T(u.$$.fragment)},l(i){t=y(i,"P",{"data-svelte-h":!0}),b(t)!=="svelte-4jk1kv"&&(t.innerHTML=r),s=o(i),h(u.$$.fragment,i)},m(i,j){a(i,t,j),a(i,s,j),J(u,i,j),c=!0},i(i){c||(M(u.$$.fragment,i),c=!0)},o(i){m(u.$$.fragment,i),c=!1},d(i){i&&(n(t),n(s)),U(u,i)}}}function mn(d){let t,r="Pour notre exemple, nous avons besoin d’un modèle avec une tête de classification de séquence (pour pouvoir classer les phrases comme positives ou négatives). Donc, nous n’utilisons pas réellement la classe <code>AutoModel</code> mais plutôt <code>AutoModelForSequenceClassification</code> :",s,u,c;return u=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(){t=f("p"),t.innerHTML=r,s=p(),T(u.$$.fragment)},l(i){t=y(i,"P",{"data-svelte-h":!0}),b(t)!=="svelte-eg8y2f"&&(t.innerHTML=r),s=o(i),h(u.$$.fragment,i)},m(i,j){a(i,t,j),a(i,s,j),J(u,i,j),c=!0},i(i){c||(M(u.$$.fragment,i),c=!0)},o(i){m(u.$$.fragment,i),c=!1},d(i){i&&(n(t),n(s)),U(u,i)}}}function Mn(d){let t,r;return t=new w({props:{code:"KDIlMkMlMjAyKQ==",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>)',wrap:!1}}),{c(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function dn(d){let t,r;return t=new w({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMiU1RCk=",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">2</span>])',wrap:!1}}),{c(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function fn(d){let t,r;return t=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(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function yn(d){let t,r;return t=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(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function bn(d){let t,r;return t=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(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function Tn(d){let t,r;return t=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(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function hn(d){let t,r;return t=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(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function Jn(d){let t,r;return t=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(){T(t.$$.fragment)},l(s){h(t.$$.fragment,s)},m(s,u){J(t,s,u),r=!0},i(s){r||(M(t.$$.fragment,s),r=!0)},o(s){m(t.$$.fragment,s),r=!1},d(s){U(t,s)}}}function Un(d){let t,r="✏️ <strong>Essayez !</strong> Choisissez deux (ou plus) textes de votre choix (en anglais) et faites-les passer par le pipeline <code>sentiment-analysis</code>. Reproduisez ensuite vous-même les étapes vues ici et vérifiez que vous obtenez les mêmes résultats !";return{c(){t=f("p"),t.innerHTML=r},l(s){t=y(s,"P",{"data-svelte-h":!0}),b(t)!=="svelte-1qzh364"&&(t.innerHTML=r)},m(s,u){a(s,t,u)},p:Gl,d(s){s&&n(t)}}}function jn(d){let t,r,s,u,c,i,j,ys,K,bs,$,_,ls,F,Ts,C,k,ns,O,gt='Commençons par un exemple complet en regardant ce qui s’est passé en coulisses lorsque nous avons exécuté le code suivant dans le <a href="/course/chapter1">chapitre 1</a> :',hs,ee,Js,se,It="la sortie :",Us,te,js,le,vt='Comme nous l’avons vu dans le <a href="/course/fr/chapter1">chapitre 1</a>, ce pipeline regroupe trois étapes : le prétraitement, le passage des entrées dans le modèle et le post-traitement.',ws,X,xt='<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,At="Passons rapidement en revue chacun de ces éléments.",_s,ae,Cs,re,Nt="Comme d’autres réseaux de neurones, les <em>transformers</em> ne peuvent pas traiter directement le texte brut, donc la première étape de notre pipeline est de convertir les entrées textuelles en nombres afin que le modèle puisse les comprendre. Pour ce faire, nous utilisons un <em>tokenizer</em>, qui sera responsable de :",ks,ie,Qt="<li>diviser l’entrée en mots, sous-mots, ou symboles (comme la ponctuation) qui sont appelés <em>tokens</em>,</li> <li>associer chaque <em>token</em> à un nombre entier,</li> <li>ajouter des entrées supplémentaires qui peuvent être utiles au modèle.</li>",gs,ue,Dt='Tout ce prétraitement doit être effectué exactement de la même manière que celui appliqué lors du pré-entraînement du modèle. Nous devons donc d’abord télécharger ces informations depuis le <a href="https://huggingface.co/models" rel="nofollow"><em>Hub</em></a>. Pour ce faire, nous utilisons la classe <code>AutoTokenizer</code> et sa méthode <code>from_pretrained()</code>. En utilisant le nom du <em>checkpoint</em> de notre modèle, elle va automatiquement récupérer les données associées au <em>tokenizer</em> du modèle et les mettre en cache (afin qu’elles ne soient téléchargées que la première fois que vous exécutez le code ci-dessous).',Is,pe,Et='Puisque le <em>checkpoint</em> par défaut du pipeline <code>sentiment-analysis</code> (analyse de sentiment) est <code>distilbert-base-uncased-finetuned-sst-2-english</code> (vous pouvez voir la carte de ce modèle <a href="https://huggingface.co/distilbert-base-uncased-finetuned-sst-2-english" rel="nofollow">ici</a>), nous exécutons ce qui suit :',vs,oe,xs,ce,Vt="Une fois que nous avons le <em>tokenizer</em> nous pouvons lui passer directement nos phrases et obtenir un dictionnaire prêt à être donné à notre modèle ! La seule chose qui reste à faire est de convertir en tenseurs la liste des identifiants d’entrée.",As,me,Zt="Vous pouvez utiliser 🤗 <em>Transformers</em> sans avoir à vous soucier du <em>framework</em> utilisé comme <em>backend</em>. Il peut s’agir de PyTorch, de TensorFlow ou de Flax pour certains modèles. Cependant, les <em>transformers</em> n’acceptent que les <em>tenseurs</em> en entrée. Si c’est la première fois que vous entendez parler de tenseurs, vous pouvez les considérer comme des tableaux NumPy. Un tableau NumPy peut être un scalaire (0D), un vecteur (1D), une matrice (2D), ou avoir davantage de dimensions. Les tenseurs des autres <em>frameworks</em> d’apprentissage machine se comportent de manière similaire et sont généralement aussi simples à instancier que les tableaux NumPy.",Ns,Me,Ht="Pour spécifier le type de tenseurs que nous voulons récupérer (PyTorch, TensorFlow, ou simplement NumPy), nous utilisons l’argument <code>return_tensors</code> :",Qs,g,I,as,de,zt="Ne vous préoccupez pas encore du remplissage (<em>padding</em>) et de la troncature, nous les expliquerons plus tard. Les principales choses à retenir ici sont que vous pouvez passer une phrase ou une liste de phrases, ainsi que spécifier le type de tenseurs que vous voulez récupérer (si aucun type n’est passé, par défaut vous obtiendrez une liste de listes comme résultat).",Ds,v,x,rs,fe,Gt="La sortie elle-même est un dictionnaire contenant deux clés : <code>input_ids</code> et <code>attention_mask</code>. <code>input_ids</code> contient deux lignes d’entiers (une pour chaque phrase) qui sont les identifiants uniques des <em>tokens</em> dans chaque phrase. Nous expliquerons ce qu’est l’<code>attention_mask</code> plus tard dans ce chapitre.",Es,ye,Vs,A,N,is,be,qt="Dans cet extrait de code, nous avons téléchargé le même <em>checkpoint</em> que nous avons utilisé dans notre pipeline auparavant (il devrait en fait avoir déjà été mis en cache) et instancié un modèle avec lui.",Zs,Te,Bt=`Cette architecture ne contient que le module de <em>transformer</em> de base : étant donné certaines entrées, il produit ce que nous appellerons des <em>états cachés</em>, également connus sous le nom de <em>caractéristiques</em>.
Pour chaque entrée du modèle, nous récupérons un vecteur en grande dimension représentant la <strong>compréhension contextuelle de cette entrée par le <em>transformer</em></strong>.`,Hs,he,Lt="Si cela n’a pas de sens, ne vous inquiétez pas. Nous expliquons tout plus tard.",zs,Je,St='Bien que ces états cachés puissent être utiles en eux-mêmes, ils sont généralement les entrées d’une autre partie du modèle, connue sous le nom de <em>tête</em>. Dans le <a href="/course/fr/chapter1">chapitre 1</a>, les différentes tâches auraient pu être réalisées avec la même architecture mais en ayant chacune d’elles une tête différente.',Gs,Ue,qs,je,Rt="Le vecteur produit en sortie par le <em>transformer</em> est généralement de grande dimension. Il a généralement trois dimensions :",Bs,we,Wt="<li><strong>la taille du lot</strong> : le nombre de séquences traitées à la fois (2 dans notre exemple),</li> <li><strong>la longueur de la séquence</strong> : la longueur de la représentation numérique de la séquence (16 dans notre exemple),</li> <li><strong>la taille cachée</strong> : la dimension du vecteur de chaque entrée du modèle.</li>",Ls,$e,Ft="On dit qu’il est de « grande dimension » en raison de la dernière valeur. La taille cachée peut être très grande (généralement 768 pour les petits modèles et pour les grands modèles cela peut atteindre 3072 voire plus).",Ss,_e,Xt="Nous pouvons le constater si nous alimentons notre modèle avec les entrées que nous avons prétraitées :",Rs,Q,D,us,Ce,Pt="Notez que les sorties des modèles de la bibliothèque 🤗 <em>Transformers</em> se comportent comme des <code>namedtuples</code> ou des dictionnaires. Vous pouvez accéder aux éléments par attributs (comme nous l’avons fait), par clé (<code>outputs[&quot;last_hidden_state&quot;]</code>), ou même par l’index si vous savez exactement où se trouve la chose que vous cherchez (<code>outputs[0]</code>).",Ws,ke,Fs,ge,Yt="Les têtes des modèles prennent en entrée le vecteur de grande dimension des états cachés et le projettent sur une autre dimension. Elles sont généralement composées d’une ou de quelques couches linéaires :",Xs,P,Kt='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/transformer_and_head.svg" alt="A Transformer network alongside its head."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter2/transformer_and_head-dark.svg" alt="A Transformer network alongside its head."/>',Ps,Ie,Ot=`La sortie du <em>transformer</em> est envoyée directement à la tête du modèle pour être traitée.
Dans ce diagramme, le modèle est représenté par sa couche d’enchâssement et les couches suivantes. La couche d’enchâssement convertit chaque identifiant d’entrée dans l’entrée tokenisée en un vecteur qui représente le <em>token</em> associé. Les couches suivantes manipulent ces vecteurs en utilisant le mécanisme d’attention pour produire la représentation finale des phrases.
Il existe de nombreuses architectures différentes disponibles dans la bibliothèque 🤗 <em>Transformers</em>, chacune étant conçue autour de la prise en charge d’une tâche spécifique. En voici une liste non exhaustive :`,Ys,ve,el="<li><code>*Model</code> (récupérer les états cachés)</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>et autres 🤗</li>",Ks,E,V,ps,xe,sl="Maintenant, si nous examinons la forme de nos entrées, la dimensionnalité est beaucoup plus faible. La tête du modèle prend en entrée les vecteurs de grande dimension que nous avons vus précédemment et elle produit des vecteurs contenant deux valeurs (une par étiquette) :",Os,Ae,et,Z,H,os,Ne,tl="Comme nous n’avons que deux phrases et deux étiquettes, le résultat que nous obtenons est de forme 2 x 2",st,Qe,tt,De,ll="Les valeurs que nous obtenons en sortie de notre modèle n’ont pas nécessairement de sens en elles-mêmes. Jetons-y un coup d’œil  :",lt,Ee,nt,z,G,cs,Ve,nl='Notre modèle a prédit <code>[-1.5607, 1.6123]</code> pour la première phrase et <code>[ 4.1692, -3.3464]</code> pour la seconde. Ce ne sont pas des probabilités mais des <em>logits</em>, les scores bruts, non normalisés, produits par la dernière couche du modèle. Pour être convertis en probabilités, ils doivent passer par une couche <a href="https://fr.wikipedia.org/wiki/Fonction_softmax" rel="nofollow">SoftMax</a> (tous les modèles de la bibliothèque 🤗 <em>Transformers</em> sortent les logits car la fonction de perte de l’entraînement fusionne généralement la dernière fonction d’activation, comme la SoftMax, avec la fonction de perte réelle, comme l’entropie croisée) :',at,q,B,ms,L,S,Ms,Ze,al="Maintenant nous pouvons voir que le modèle a prédit <code>[0.0402, 0.9598]</code> pour la première phrase et <code>[0.9995, 0.0005]</code> pour la seconde. Ce sont des scores de probabilité reconnaissables.",rt,He,rl="Pour obtenir les étiquettes correspondant à chaque position, nous pouvons inspecter l’attribut <code>id2label</code> de la configuration du modèle (plus de détails dans la section suivante) :",it,ze,ut,Ge,pt,qe,il="Nous pouvons maintenant conclure que le modèle a prédit ce qui suit :",ot,Be,ul="<li>première phrase : NEGATIVE: 0.0402, POSITIVE: 0.9598</li> <li>deuxième phrase : NEGATIVE: 0.9995, POSITIVE: 0.0005</li>",ct,Le,pl="Nous avons reproduit avec succès les trois étapes du pipeline : prétraitement avec les <em>tokenizers</em>, passage des entrées dans le modèle et post-traitement ! Prenons maintenant le temps de nous plonger plus profondément dans chacune de ces étapes.",mt,Y,Mt,Se,dt,fs,ft;c=new Pl({props:{fw:d[0]}}),j=new Fl({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),K=new ds({props:{title:"Derrière le pipeline",local:"derrière-le-pipeline",headingTag:"h1"}});const ol=[Kl,Yl],Re=[];function cl(e,l){return e[0]==="pt"?0:1}$=cl(d),_=Re[$]=ol[$](d),F=new El({props:{$$slots:{default:[Ol]},$$scope:{ctx:d}}});const ml=[sn,en],We=[];function Ml(e,l){return e[0]==="pt"?0:1}C=Ml(d),k=We[C]=ml[C](d),ee=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBY2xhc3NpZmllciUyMCUzRCUyMHBpcGVsaW5lKCUyMnNlbnRpbWVudC1hbmFseXNpcyUyMiklMEFjbGFzc2lmaWVyKCUwQSUyMCUyMCUyMCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMEonYWklMjBhdHRlbmR1JTIwdW4lMjBjb3VycyUyMGRlJTIwSHVnZ2luZ0ZhY2UlMjB0b3V0ZSUyMG1hJTIwdmllLiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMkklMjBoYXRlJTIwdGhpcyUyMHNvJTIwbXVjaCElMjIlMkMlMjAlMjAlMjMlMjBKZSUyMGQlQzMlQTl0ZXN0ZSUyMHRlbGxlbWVudCUyMCVDMyVBN2ElMjAhJTBBJTIwJTIwJTIwJTIwJTVEJTBBKQ==",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-comment"># J&#x27;ai attendu un cours de HuggingFace toute ma vie.</span>
        <span class="hljs-string">&quot;I hate this so much!&quot;</span>,  <span class="hljs-comment"># Je déteste tellement ça !</span>
    ]
)`,wrap:!1}}),te=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 ds({props:{title:"Prétraitement avec un <i> tokenizer </i>",local:"prétraitement-avec-un-i-tokenizer-i",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 dl=[ln,tn],Fe=[];function fl(e,l){return e[0]==="pt"?0:1}g=fl(d),I=Fe[g]=dl[g](d);const yl=[an,nn],Xe=[];function bl(e,l){return e[0]==="pt"?0:1}v=bl(d),x=Xe[v]=yl[v](d),ye=new ds({props:{title:"Passage au modèle",local:"passage-au-modèle",headingTag:"h2"}});const Tl=[un,rn],Pe=[];function hl(e,l){return e[0]==="pt"?0:1}A=hl(d),N=Pe[A]=Tl[A](d),Ue=new ds({props:{title:"Un vecteur de grande dimension ?",local:"un-vecteur-de-grande-dimension-",headingTag:"h3"}});const Jl=[on,pn],Ye=[];function Ul(e,l){return e[0]==="pt"?0:1}Q=Ul(d),D=Ye[Q]=Jl[Q](d),ke=new ds({props:{title:"Les têtes des modèles : donner du sens aux chiffres",local:"les-têtes-des-modèles--donner-du-sens-aux-chiffres",headingTag:"h3"}});const jl=[mn,cn],Ke=[];function wl(e,l){return e[0]==="pt"?0:1}E=wl(d),V=Ke[E]=jl[E](d),Ae=new w({props:{code:"cHJpbnQob3V0cHV0cy5sb2dpdHMuc2hhcGUp",highlighted:'<span class="hljs-built_in">print</span>(outputs.logits.shape)',wrap:!1}});const $l=[dn,Mn],Oe=[];function _l(e,l){return e[0]==="pt"?0:1}Z=_l(d),H=Oe[Z]=$l[Z](d),Qe=new ds({props:{title:"Post-traitement de la sortie",local:"post-traitement-de-la-sortie",headingTag:"h2"}}),Ee=new w({props:{code:"cHJpbnQob3V0cHV0cy5sb2dpdHMp",highlighted:'<span class="hljs-built_in">print</span>(outputs.logits)',wrap:!1}});const Cl=[yn,fn],es=[];function kl(e,l){return e[0]==="pt"?0:1}z=kl(d),G=es[z]=Cl[z](d);const gl=[Tn,bn],ss=[];function Il(e,l){return e[0]==="pt"?0:1}q=Il(d),B=ss[q]=gl[q](d);const vl=[Jn,hn],ts=[];function xl(e,l){return e[0]==="pt"?0:1}return L=xl(d),S=ts[L]=vl[L](d),ze=new w({props:{code:"bW9kZWwuY29uZmlnLmlkMmxhYmVs",highlighted:"model.config.id2label",wrap:!1}}),Ge=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}}),Y=new El({props:{$$slots:{default:[Un]},$$scope:{ctx:d}}}),Se=new Xl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter2/2.mdx"}}),{c(){t=f("meta"),r=p(),s=f("p"),u=p(),T(c.$$.fragment),i=p(),T(j.$$.fragment),ys=p(),T(K.$$.fragment),bs=p(),_.c(),ls=p(),T(F.$$.fragment),Ts=p(),k.c(),ns=p(),O=f("p"),O.innerHTML=gt,hs=p(),T(ee.$$.fragment),Js=p(),se=f("p"),se.textContent=It,Us=p(),T(te.$$.fragment),js=p(),le=f("p"),le.innerHTML=vt,ws=p(),X=f("div"),X.innerHTML=xt,$s=p(),ne=f("p"),ne.textContent=At,_s=p(),T(ae.$$.fragment),Cs=p(),re=f("p"),re.innerHTML=Nt,ks=p(),ie=f("ul"),ie.innerHTML=Qt,gs=p(),ue=f("p"),ue.innerHTML=Dt,Is=p(),pe=f("p"),pe.innerHTML=Et,vs=p(),T(oe.$$.fragment),xs=p(),ce=f("p"),ce.innerHTML=Vt,As=p(),me=f("p"),me.innerHTML=Zt,Ns=p(),Me=f("p"),Me.innerHTML=Ht,Qs=p(),I.c(),as=p(),de=f("p"),de.innerHTML=zt,Ds=p(),x.c(),rs=p(),fe=f("p"),fe.innerHTML=Gt,Es=p(),T(ye.$$.fragment),Vs=p(),N.c(),is=p(),be=f("p"),be.innerHTML=qt,Zs=p(),Te=f("p"),Te.innerHTML=Bt,Hs=p(),he=f("p"),he.textContent=Lt,zs=p(),Je=f("p"),Je.innerHTML=St,Gs=p(),T(Ue.$$.fragment),qs=p(),je=f("p"),je.innerHTML=Rt,Bs=p(),we=f("ul"),we.innerHTML=Wt,Ls=p(),$e=f("p"),$e.textContent=Ft,Ss=p(),_e=f("p"),_e.textContent=Xt,Rs=p(),D.c(),us=p(),Ce=f("p"),Ce.innerHTML=Pt,Ws=p(),T(ke.$$.fragment),Fs=p(),ge=f("p"),ge.textContent=Yt,Xs=p(),P=f("div"),P.innerHTML=Kt,Ps=p(),Ie=f("p"),Ie.innerHTML=Ot,Ys=p(),ve=f("ul"),ve.innerHTML=el,Ks=p(),V.c(),ps=p(),xe=f("p"),xe.textContent=sl,Os=p(),T(Ae.$$.fragment),et=p(),H.c(),os=p(),Ne=f("p"),Ne.textContent=tl,st=p(),T(Qe.$$.fragment),tt=p(),De=f("p"),De.textContent=ll,lt=p(),T(Ee.$$.fragment),nt=p(),G.c(),cs=p(),Ve=f("p"),Ve.innerHTML=nl,at=p(),B.c(),ms=p(),S.c(),Ms=p(),Ze=f("p"),Ze.innerHTML=al,rt=p(),He=f("p"),He.innerHTML=rl,it=p(),T(ze.$$.fragment),ut=p(),T(Ge.$$.fragment),pt=p(),qe=f("p"),qe.textContent=il,ot=p(),Be=f("ul"),Be.innerHTML=ul,ct=p(),Le=f("p"),Le.innerHTML=pl,mt=p(),T(Y.$$.fragment),Mt=p(),T(Se.$$.fragment),dt=p(),fs=f("p"),this.h()},l(e){const l=Ll("svelte-u9bgzb",document.head);t=y(l,"META",{name:!0,content:!0}),l.forEach(n),r=o(e),s=y(e,"P",{}),Dl(s).forEach(n),u=o(e),h(c.$$.fragment,e),i=o(e),h(j.$$.fragment,e),ys=o(e),h(K.$$.fragment,e),bs=o(e),_.l(e),ls=o(e),h(F.$$.fragment,e),Ts=o(e),k.l(e),ns=o(e),O=y(e,"P",{"data-svelte-h":!0}),b(O)!=="svelte-19wr47f"&&(O.innerHTML=gt),hs=o(e),h(ee.$$.fragment,e),Js=o(e),se=y(e,"P",{"data-svelte-h":!0}),b(se)!=="svelte-1ehr2ed"&&(se.textContent=It),Us=o(e),h(te.$$.fragment,e),js=o(e),le=y(e,"P",{"data-svelte-h":!0}),b(le)!=="svelte-1stmi5u"&&(le.innerHTML=vt),ws=o(e),X=y(e,"DIV",{class:!0,"data-svelte-h":!0}),b(X)!=="svelte-fbe70j"&&(X.innerHTML=xt),$s=o(e),ne=y(e,"P",{"data-svelte-h":!0}),b(ne)!=="svelte-18cw5ul"&&(ne.textContent=At),_s=o(e),h(ae.$$.fragment,e),Cs=o(e),re=y(e,"P",{"data-svelte-h":!0}),b(re)!=="svelte-1wybg9q"&&(re.innerHTML=Nt),ks=o(e),ie=y(e,"UL",{"data-svelte-h":!0}),b(ie)!=="svelte-jnfblc"&&(ie.innerHTML=Qt),gs=o(e),ue=y(e,"P",{"data-svelte-h":!0}),b(ue)!=="svelte-1ivw8j2"&&(ue.innerHTML=Dt),Is=o(e),pe=y(e,"P",{"data-svelte-h":!0}),b(pe)!=="svelte-1a6denb"&&(pe.innerHTML=Et),vs=o(e),h(oe.$$.fragment,e),xs=o(e),ce=y(e,"P",{"data-svelte-h":!0}),b(ce)!=="svelte-v40vma"&&(ce.innerHTML=Vt),As=o(e),me=y(e,"P",{"data-svelte-h":!0}),b(me)!=="svelte-3giksl"&&(me.innerHTML=Zt),Ns=o(e),Me=y(e,"P",{"data-svelte-h":!0}),b(Me)!=="svelte-13ojzrd"&&(Me.innerHTML=Ht),Qs=o(e),I.l(e),as=o(e),de=y(e,"P",{"data-svelte-h":!0}),b(de)!=="svelte-p3z3ke"&&(de.innerHTML=zt),Ds=o(e),x.l(e),rs=o(e),fe=y(e,"P",{"data-svelte-h":!0}),b(fe)!=="svelte-194e16q"&&(fe.innerHTML=Gt),Es=o(e),h(ye.$$.fragment,e),Vs=o(e),N.l(e),is=o(e),be=y(e,"P",{"data-svelte-h":!0}),b(be)!=="svelte-aw0453"&&(be.innerHTML=qt),Zs=o(e),Te=y(e,"P",{"data-svelte-h":!0}),b(Te)!=="svelte-1ppdedx"&&(Te.innerHTML=Bt),Hs=o(e),he=y(e,"P",{"data-svelte-h":!0}),b(he)!=="svelte-iplr45"&&(he.textContent=Lt),zs=o(e),Je=y(e,"P",{"data-svelte-h":!0}),b(Je)!=="svelte-a149fz"&&(Je.innerHTML=St),Gs=o(e),h(Ue.$$.fragment,e),qs=o(e),je=y(e,"P",{"data-svelte-h":!0}),b(je)!=="svelte-spzt3d"&&(je.innerHTML=Rt),Bs=o(e),we=y(e,"UL",{"data-svelte-h":!0}),b(we)!=="svelte-12sddbn"&&(we.innerHTML=Wt),Ls=o(e),$e=y(e,"P",{"data-svelte-h":!0}),b($e)!=="svelte-kiq8k1"&&($e.textContent=Ft),Ss=o(e),_e=y(e,"P",{"data-svelte-h":!0}),b(_e)!=="svelte-jbyjqn"&&(_e.textContent=Xt),Rs=o(e),D.l(e),us=o(e),Ce=y(e,"P",{"data-svelte-h":!0}),b(Ce)!=="svelte-1e89igc"&&(Ce.innerHTML=Pt),Ws=o(e),h(ke.$$.fragment,e),Fs=o(e),ge=y(e,"P",{"data-svelte-h":!0}),b(ge)!=="svelte-16ldxci"&&(ge.textContent=Yt),Xs=o(e),P=y(e,"DIV",{class:!0,"data-svelte-h":!0}),b(P)!=="svelte-8mo6lt"&&(P.innerHTML=Kt),Ps=o(e),Ie=y(e,"P",{"data-svelte-h":!0}),b(Ie)!=="svelte-suyi13"&&(Ie.innerHTML=Ot),Ys=o(e),ve=y(e,"UL",{"data-svelte-h":!0}),b(ve)!=="svelte-11pfien"&&(ve.innerHTML=el),Ks=o(e),V.l(e),ps=o(e),xe=y(e,"P",{"data-svelte-h":!0}),b(xe)!=="svelte-da89pl"&&(xe.textContent=sl),Os=o(e),h(Ae.$$.fragment,e),et=o(e),H.l(e),os=o(e),Ne=y(e,"P",{"data-svelte-h":!0}),b(Ne)!=="svelte-192fqvu"&&(Ne.textContent=tl),st=o(e),h(Qe.$$.fragment,e),tt=o(e),De=y(e,"P",{"data-svelte-h":!0}),b(De)!=="svelte-ltudim"&&(De.textContent=ll),lt=o(e),h(Ee.$$.fragment,e),nt=o(e),G.l(e),cs=o(e),Ve=y(e,"P",{"data-svelte-h":!0}),b(Ve)!=="svelte-1qler67"&&(Ve.innerHTML=nl),at=o(e),B.l(e),ms=o(e),S.l(e),Ms=o(e),Ze=y(e,"P",{"data-svelte-h":!0}),b(Ze)!=="svelte-1wseff0"&&(Ze.innerHTML=al),rt=o(e),He=y(e,"P",{"data-svelte-h":!0}),b(He)!=="svelte-lqmq3p"&&(He.innerHTML=rl),it=o(e),h(ze.$$.fragment,e),ut=o(e),h(Ge.$$.fragment,e),pt=o(e),qe=y(e,"P",{"data-svelte-h":!0}),b(qe)!=="svelte-14o7ouv"&&(qe.textContent=il),ot=o(e),Be=y(e,"UL",{"data-svelte-h":!0}),b(Be)!=="svelte-1e8u5b9"&&(Be.innerHTML=ul),ct=o(e),Le=y(e,"P",{"data-svelte-h":!0}),b(Le)!=="svelte-17qank7"&&(Le.innerHTML=pl),mt=o(e),h(Y.$$.fragment,e),Mt=o(e),h(Se.$$.fragment,e),dt=o(e),fs=y(e,"P",{}),Dl(fs).forEach(n),this.h()},h(){yt(t,"name","hf:doc:metadata"),yt(t,"content",wn),yt(X,"class","flex justify-center"),yt(P,"class","flex justify-center")},m(e,l){Sl(document.head,t),a(e,r,l),a(e,s,l),a(e,u,l),J(c,e,l),a(e,i,l),J(j,e,l),a(e,ys,l),J(K,e,l),a(e,bs,l),Re[$].m(e,l),a(e,ls,l),J(F,e,l),a(e,Ts,l),We[C].m(e,l),a(e,ns,l),a(e,O,l),a(e,hs,l),J(ee,e,l),a(e,Js,l),a(e,se,l),a(e,Us,l),J(te,e,l),a(e,js,l),a(e,le,l),a(e,ws,l),a(e,X,l),a(e,$s,l),a(e,ne,l),a(e,_s,l),J(ae,e,l),a(e,Cs,l),a(e,re,l),a(e,ks,l),a(e,ie,l),a(e,gs,l),a(e,ue,l),a(e,Is,l),a(e,pe,l),a(e,vs,l),J(oe,e,l),a(e,xs,l),a(e,ce,l),a(e,As,l),a(e,me,l),a(e,Ns,l),a(e,Me,l),a(e,Qs,l),Fe[g].m(e,l),a(e,as,l),a(e,de,l),a(e,Ds,l),Xe[v].m(e,l),a(e,rs,l),a(e,fe,l),a(e,Es,l),J(ye,e,l),a(e,Vs,l),Pe[A].m(e,l),a(e,is,l),a(e,be,l),a(e,Zs,l),a(e,Te,l),a(e,Hs,l),a(e,he,l),a(e,zs,l),a(e,Je,l),a(e,Gs,l),J(Ue,e,l),a(e,qs,l),a(e,je,l),a(e,Bs,l),a(e,we,l),a(e,Ls,l),a(e,$e,l),a(e,Ss,l),a(e,_e,l),a(e,Rs,l),Ye[Q].m(e,l),a(e,us,l),a(e,Ce,l),a(e,Ws,l),J(ke,e,l),a(e,Fs,l),a(e,ge,l),a(e,Xs,l),a(e,P,l),a(e,Ps,l),a(e,Ie,l),a(e,Ys,l),a(e,ve,l),a(e,Ks,l),Ke[E].m(e,l),a(e,ps,l),a(e,xe,l),a(e,Os,l),J(Ae,e,l),a(e,et,l),Oe[Z].m(e,l),a(e,os,l),a(e,Ne,l),a(e,st,l),J(Qe,e,l),a(e,tt,l),a(e,De,l),a(e,lt,l),J(Ee,e,l),a(e,nt,l),es[z].m(e,l),a(e,cs,l),a(e,Ve,l),a(e,at,l),ss[q].m(e,l),a(e,ms,l),ts[L].m(e,l),a(e,Ms,l),a(e,Ze,l),a(e,rt,l),a(e,He,l),a(e,it,l),J(ze,e,l),a(e,ut,l),J(Ge,e,l),a(e,pt,l),a(e,qe,l),a(e,ot,l),a(e,Be,l),a(e,ct,l),a(e,Le,l),a(e,mt,l),J(Y,e,l),a(e,Mt,l),J(Se,e,l),a(e,dt,l),a(e,fs,l),ft=!0},p(e,[l]){const Al={};l&1&&(Al.fw=e[0]),c.$set(Al);let bt=$;$=cl(e),$!==bt&&(W(),m(Re[bt],1,1,()=>{Re[bt]=null}),R(),_=Re[$],_||(_=Re[$]=ol[$](e),_.c()),M(_,1),_.m(ls.parentNode,ls));const Nl={};l&2&&(Nl.$$scope={dirty:l,ctx:e}),F.$set(Nl);let Tt=C;C=Ml(e),C!==Tt&&(W(),m(We[Tt],1,1,()=>{We[Tt]=null}),R(),k=We[C],k||(k=We[C]=ml[C](e),k.c()),M(k,1),k.m(ns.parentNode,ns));let ht=g;g=fl(e),g!==ht&&(W(),m(Fe[ht],1,1,()=>{Fe[ht]=null}),R(),I=Fe[g],I||(I=Fe[g]=dl[g](e),I.c()),M(I,1),I.m(as.parentNode,as));let Jt=v;v=bl(e),v!==Jt&&(W(),m(Xe[Jt],1,1,()=>{Xe[Jt]=null}),R(),x=Xe[v],x||(x=Xe[v]=yl[v](e),x.c()),M(x,1),x.m(rs.parentNode,rs));let Ut=A;A=hl(e),A!==Ut&&(W(),m(Pe[Ut],1,1,()=>{Pe[Ut]=null}),R(),N=Pe[A],N||(N=Pe[A]=Tl[A](e),N.c()),M(N,1),N.m(is.parentNode,is));let jt=Q;Q=Ul(e),Q!==jt&&(W(),m(Ye[jt],1,1,()=>{Ye[jt]=null}),R(),D=Ye[Q],D||(D=Ye[Q]=Jl[Q](e),D.c()),M(D,1),D.m(us.parentNode,us));let wt=E;E=wl(e),E!==wt&&(W(),m(Ke[wt],1,1,()=>{Ke[wt]=null}),R(),V=Ke[E],V||(V=Ke[E]=jl[E](e),V.c()),M(V,1),V.m(ps.parentNode,ps));let $t=Z;Z=_l(e),Z!==$t&&(W(),m(Oe[$t],1,1,()=>{Oe[$t]=null}),R(),H=Oe[Z],H||(H=Oe[Z]=$l[Z](e),H.c()),M(H,1),H.m(os.parentNode,os));let _t=z;z=kl(e),z!==_t&&(W(),m(es[_t],1,1,()=>{es[_t]=null}),R(),G=es[z],G||(G=es[z]=Cl[z](e),G.c()),M(G,1),G.m(cs.parentNode,cs));let Ct=q;q=Il(e),q!==Ct&&(W(),m(ss[Ct],1,1,()=>{ss[Ct]=null}),R(),B=ss[q],B||(B=ss[q]=gl[q](e),B.c()),M(B,1),B.m(ms.parentNode,ms));let kt=L;L=xl(e),L!==kt&&(W(),m(ts[kt],1,1,()=>{ts[kt]=null}),R(),S=ts[L],S||(S=ts[L]=vl[L](e),S.c()),M(S,1),S.m(Ms.parentNode,Ms));const Ql={};l&2&&(Ql.$$scope={dirty:l,ctx:e}),Y.$set(Ql)},i(e){ft||(M(c.$$.fragment,e),M(j.$$.fragment,e),M(K.$$.fragment,e),M(_),M(F.$$.fragment,e),M(k),M(ee.$$.fragment,e),M(te.$$.fragment,e),M(ae.$$.fragment,e),M(oe.$$.fragment,e),M(I),M(x),M(ye.$$.fragment,e),M(N),M(Ue.$$.fragment,e),M(D),M(ke.$$.fragment,e),M(V),M(Ae.$$.fragment,e),M(H),M(Qe.$$.fragment,e),M(Ee.$$.fragment,e),M(G),M(B),M(S),M(ze.$$.fragment,e),M(Ge.$$.fragment,e),M(Y.$$.fragment,e),M(Se.$$.fragment,e),ft=!0)},o(e){m(c.$$.fragment,e),m(j.$$.fragment,e),m(K.$$.fragment,e),m(_),m(F.$$.fragment,e),m(k),m(ee.$$.fragment,e),m(te.$$.fragment,e),m(ae.$$.fragment,e),m(oe.$$.fragment,e),m(I),m(x),m(ye.$$.fragment,e),m(N),m(Ue.$$.fragment,e),m(D),m(ke.$$.fragment,e),m(V),m(Ae.$$.fragment,e),m(H),m(Qe.$$.fragment,e),m(Ee.$$.fragment,e),m(G),m(B),m(S),m(ze.$$.fragment,e),m(Ge.$$.fragment,e),m(Y.$$.fragment,e),m(Se.$$.fragment,e),ft=!1},d(e){e&&(n(r),n(s),n(u),n(i),n(ys),n(bs),n(ls),n(Ts),n(ns),n(O),n(hs),n(Js),n(se),n(Us),n(js),n(le),n(ws),n(X),n($s),n(ne),n(_s),n(Cs),n(re),n(ks),n(ie),n(gs),n(ue),n(Is),n(pe),n(vs),n(xs),n(ce),n(As),n(me),n(Ns),n(Me),n(Qs),n(as),n(de),n(Ds),n(rs),n(fe),n(Es),n(Vs),n(is),n(be),n(Zs),n(Te),n(Hs),n(he),n(zs),n(Je),n(Gs),n(qs),n(je),n(Bs),n(we),n(Ls),n($e),n(Ss),n(_e),n(Rs),n(us),n(Ce),n(Ws),n(Fs),n(ge),n(Xs),n(P),n(Ps),n(Ie),n(Ys),n(ve),n(Ks),n(ps),n(xe),n(Os),n(et),n(os),n(Ne),n(st),n(tt),n(De),n(lt),n(nt),n(cs),n(Ve),n(at),n(ms),n(Ms),n(Ze),n(rt),n(He),n(it),n(ut),n(pt),n(qe),n(ot),n(Be),n(ct),n(Le),n(mt),n(Mt),n(dt),n(fs)),n(t),U(c,e),U(j,e),U(K,e),Re[$].d(e),U(F,e),We[C].d(e),U(ee,e),U(te,e),U(ae,e),U(oe,e),Fe[g].d(e),Xe[v].d(e),U(ye,e),Pe[A].d(e),U(Ue,e),Ye[Q].d(e),U(ke,e),Ke[E].d(e),U(Ae,e),Oe[Z].d(e),U(Qe,e),U(Ee,e),es[z].d(e),ss[q].d(e),ts[L].d(e),U(ze,e),U(Ge,e),U(Y,e),U(Se,e)}}}const wn='{"title":"Derrière le pipeline","local":"derrière-le-pipeline","sections":[{"title":"Prétraitement avec un <i> tokenizer </i>","local":"prétraitement-avec-un-i-tokenizer-i","sections":[],"depth":2},{"title":"Passage au modèle","local":"passage-au-modèle","sections":[{"title":"Un vecteur de grande dimension ?","local":"un-vecteur-de-grande-dimension-","sections":[],"depth":3},{"title":"Les têtes des modèles : donner du sens aux chiffres","local":"les-têtes-des-modèles--donner-du-sens-aux-chiffres","sections":[],"depth":3}],"depth":2},{"title":"Post-traitement de la sortie","local":"post-traitement-de-la-sortie","sections":[],"depth":2}],"depth":1}';function $n(d,t,r){let s="pt";return zl(()=>{const u=new URLSearchParams(window.location.search);r(0,s=u.get("fw")||"pt")}),[s]}class Nn extends ql{constructor(t){super(),Bl(this,t,$n,jn,Hl,{})}}export{Nn as component};
