Buckets:
| import{s as _l,o as Il,n as $n}from"../chunks/scheduler.37c15a92.js";import{S as zl,i as Zl,g as m,s as i,r as j,A as Ql,h as M,f as t,c as p,j as kl,u as h,x as y,k as Cl,y as ql,a,v as b,t as d,b as Ke,d as u,w as f,m as Rl,n as Gl,p as Oe}from"../chunks/index.2bf4358c.js";import{T as Jn}from"../chunks/Tip.363c041f.js";import{Y as os}from"../chunks/Youtube.1e50a667.js";import{C as w}from"../chunks/CodeBlock.4e987730.js";import{C as xl}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as Nl}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Un,E as Vl}from"../chunks/getInferenceSnippets.4e01224f.js";function Al(J){let n,r;return n=new xl({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter3/section2_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter3/section2_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter3/section2_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter3/section2_tf.ipynb"}]}}),{c(){j(n.$$.fragment)},l(l){h(n.$$.fragment,l)},m(l,o){b(n,l,o),r=!0},i(l){r||(u(n.$$.fragment,l),r=!0)},o(l){d(n.$$.fragment,l),r=!1},d(l){f(n,l)}}}function Bl(J){let n,r;return n=new xl({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter3/section2_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter3/section2_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter3/section2_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter3/section2_pt.ipynb"}]}}),{c(){j(n.$$.fragment)},l(l){h(n.$$.fragment,l)},m(l,o){b(n,l,o),r=!0},i(l){r||(u(n.$$.fragment,l),r=!0)},o(l){d(n.$$.fragment,l),r=!1},d(l){f(n,l)}}}function Wl(J){let n,r='En continuant avec l’exemple du <a href="/course/fr/chapter2">chapitre précédent</a>, voici comment entraîner un classifieur de séquences sur un batch avec TensorFlow :',l,o,T;return o=new w({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyME0lQzMlQUFtZSUyMGNob3NlJTIwcXVlJTIwcHIlQzMlQTljJUMzJUE5ZGVtbWVudCUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJiZXJ0LWJhc2UtdW5jYXNlZCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBc2VxdWVuY2VzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIySSd2ZSUyMGJlZW4lMjB3YWl0aW5nJTIwZm9yJTIwYSUyMEh1Z2dpbmdGYWNlJTIwY291cnNlJTIwbXklMjB3aG9sZSUyMGxpZmUuJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIzJTIwSidhaSUyMGF0dGVuZHUlMjB1biUyMGNvdXJzJTIwZGUlMjBIdWdnaW5nRmFjZSUyMHRvdXRlJTIwbWElMjB2aWUuJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGNvdXJzZSUyMGlzJTIwYW1hemluZyElMjIlMkMlMjAlMjAlMjMlMjBDZSUyMGNvdXJzJTIwZXN0JTIwaW5jcm95YWJsZSUyMCElMEElNUQlMEFiYXRjaCUyMCUzRCUyMGRpY3QodG9rZW5pemVyKHNlcXVlbmNlcyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyKSklMEElMEElMjMlMjBDZWNpJTIwZXN0JTIwbm91dmVhdSUwQW1vZGVsLmNvbXBpbGUob3B0aW1pemVyJTNEJTIyYWRhbSUyMiUyQyUyMGxvc3MlM0QlMjJzcGFyc2VfY2F0ZWdvcmljYWxfY3Jvc3NlbnRyb3B5JTIyKSUwQWxhYmVscyUyMCUzRCUyMHRmLmNvbnZlcnRfdG9fdGVuc29yKCU1QjElMkMlMjAxJTVEKSUwQW1vZGVsLnRyYWluX29uX2JhdGNoKGJhdGNoJTJDJTIwbGFiZWxzKQ==",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf | |
| <span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForSequenceClassification | |
| <span class="hljs-comment"># Même chose que précédemment</span> | |
| checkpoint = <span class="hljs-string">"bert-base-uncased"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
| model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| sequences = [ | |
| <span class="hljs-string">"I've been waiting for a HuggingFace course my whole life."</span>, | |
| <span class="hljs-comment"># J'ai attendu un cours de HuggingFace toute ma vie.</span> | |
| <span class="hljs-string">"This course is amazing!"</span>, <span class="hljs-comment"># Ce cours est incroyable !</span> | |
| ] | |
| batch = <span class="hljs-built_in">dict</span>(tokenizer(sequences, 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-comment"># Ceci est nouveau</span> | |
| model.<span class="hljs-built_in">compile</span>(optimizer=<span class="hljs-string">"adam"</span>, loss=<span class="hljs-string">"sparse_categorical_crossentropy"</span>) | |
| labels = tf.convert_to_tensor([<span class="hljs-number">1</span>, <span class="hljs-number">1</span>]) | |
| model.train_on_batch(batch, labels)`,wrap:!1}}),{c(){n=m("p"),n.innerHTML=r,l=i(),j(o.$$.fragment)},l(c){n=M(c,"P",{"data-svelte-h":!0}),y(n)!=="svelte-asijc"&&(n.innerHTML=r),l=p(c),h(o.$$.fragment,c)},m(c,g){a(c,n,g),a(c,l,g),b(o,c,g),T=!0},i(c){T||(u(o.$$.fragment,c),T=!0)},o(c){d(o.$$.fragment,c),T=!1},d(c){c&&(t(n),t(l)),f(o,c)}}}function El(J){let n,r='En continuant avec l’exemple du <a href="/course/fr/chapter2">chapitre précédent</a>, voici comment entraîner un classifieur de séquences sur un batch avec PyTorch :',l,o,T;return o=new w({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdG9yY2gub3B0aW0lMjBpbXBvcnQlMjBBZGFtVyUwQWZyb20lMjB0cmFuc2Zvcm1lcnMlMjBpbXBvcnQlMjBBdXRvVG9rZW5pemVyJTJDJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyME0lQzMlQUFtZSUyMGNob3NlJTIwcXVlJTIwcHIlQzMlQTljJUMzJUE5ZGVtbWVudCUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJiZXJ0LWJhc2UtdW5jYXNlZCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQXNlcXVlbmNlcyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMyUyMEonYWklMjBhdHRlbmR1JTIwdW4lMjBjb3VycyUyMGRlJTIwSHVnZ2luZ0ZhY2UlMjB0b3V0ZSUyMG1hJTIwdmllLiUwQSUyMCUyMCUyMCUyMCUyMlRoaXMlMjBjb3Vyc2UlMjBpcyUyMGFtYXppbmchJTIyJTJDJTIwJTIwJTIzJTIwQ2UlMjBjb3VycyUyMGVzdCUyMGluY3JveWFibGUlMjAhJTBBJTVEJTBBYmF0Y2glMjAlM0QlMjB0b2tlbml6ZXIoc2VxdWVuY2VzJTJDJTIwcGFkZGluZyUzRFRydWUlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBJTBBJTIzJTIwQ2VjaSUyMGVzdCUyMG5vdXZlYXUlMEFiYXRjaCU1QiUyMmxhYmVscyUyMiU1RCUyMCUzRCUyMHRvcmNoLnRlbnNvciglNUIxJTJDJTIwMSU1RCklMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCkpJTBBbG9zcyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpLmxvc3MlMEFsb3NzLmJhY2t3YXJkKCklMEFvcHRpbWl6ZXIuc3RlcCgp",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModelForSequenceClassification | |
| <span class="hljs-comment"># Même chose que précédemment</span> | |
| checkpoint = <span class="hljs-string">"bert-base-uncased"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
| model = AutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| sequences = [ | |
| <span class="hljs-string">"I've been waiting for a HuggingFace course my whole life."</span>, | |
| <span class="hljs-comment"># J'ai attendu un cours de HuggingFace toute ma vie.</span> | |
| <span class="hljs-string">"This course is amazing!"</span>, <span class="hljs-comment"># Ce cours est incroyable !</span> | |
| ] | |
| batch = tokenizer(sequences, 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-comment"># Ceci est nouveau</span> | |
| batch[<span class="hljs-string">"labels"</span>] = torch.tensor([<span class="hljs-number">1</span>, <span class="hljs-number">1</span>]) | |
| optimizer = AdamW(model.parameters()) | |
| loss = model(**batch).loss | |
| loss.backward() | |
| optimizer.step()`,wrap:!1}}),{c(){n=m("p"),n.innerHTML=r,l=i(),j(o.$$.fragment)},l(c){n=M(c,"P",{"data-svelte-h":!0}),y(n)!=="svelte-mybesw"&&(n.innerHTML=r),l=p(c),h(o.$$.fragment,c)},m(c,g){a(c,n,g),a(c,l,g),b(o,c,g),T=!0},i(c){T||(u(o.$$.fragment,c),T=!0)},o(c){d(o.$$.fragment,c),T=!1},d(c){c&&(t(n),t(l)),f(o,c)}}}function Xl(J){let n,r;return n=new os({props:{id:"W_gMJF0xomE"}}),{c(){j(n.$$.fragment)},l(l){h(n.$$.fragment,l)},m(l,o){b(n,l,o),r=!0},i(l){r||(u(n.$$.fragment,l),r=!0)},o(l){d(n.$$.fragment,l),r=!1},d(l){f(n,l)}}}function Hl(J){let n,r;return n=new os({props:{id:"_BZearw7f0w"}}),{c(){j(n.$$.fragment)},l(l){h(n.$$.fragment,l)},m(l,o){b(n,l,o),r=!0},i(l){r||(u(n.$$.fragment,l),r=!0)},o(l){d(n.$$.fragment,l),r=!1},d(l){f(n,l)}}}function Sl(J){let n;return{c(){n=Rl("⚠️ **Attention** Assurez-vous que `datasets` est installé en exécutant `pip install datasets`. Ensuite, chargez le jeu de données MRPC et imprimez-le pour voir ce qu'il contient.")},l(r){n=Gl(r,"⚠️ **Attention** Assurez-vous que `datasets` est installé en exécutant `pip install datasets`. Ensuite, chargez le jeu de données MRPC et imprimez-le pour voir ce qu'il contient.")},m(r,l){a(r,n,l)},d(r){r&&t(n)}}}function Yl(J){let n,r="✏️ <strong>Essayez !</strong> Regardez l’élément 15 de l’ensemble d’entraînement et l’élément 87 de l’ensemble de validation. Quelles sont leurs étiquettes ?";return{c(){n=m("p"),n.innerHTML=r},l(l){n=M(l,"P",{"data-svelte-h":!0}),y(n)!=="svelte-1aosdhu"&&(n.innerHTML=r)},m(l,o){a(l,n,o)},p:$n,d(l){l&&t(n)}}}function Fl(J){let n,r;return n=new os({props:{id:"P-rZWqcB6CE"}}),{c(){j(n.$$.fragment)},l(l){h(n.$$.fragment,l)},m(l,o){b(n,l,o),r=!0},i(l){r||(u(n.$$.fragment,l),r=!0)},o(l){d(n.$$.fragment,l),r=!1},d(l){f(n,l)}}}function Dl(J){let n,r;return n=new os({props:{id:"0u3ioSwev3s"}}),{c(){j(n.$$.fragment)},l(l){h(n.$$.fragment,l)},m(l,o){b(n,l,o),r=!0},i(l){r||(u(n.$$.fragment,l),r=!0)},o(l){d(n.$$.fragment,l),r=!1},d(l){f(n,l)}}}function Ll(J){let n,r="✏️ <strong>Essayez !</strong> Prenez l’élément 15 de l’ensemble d’entraînement et tokenisez les deux phrases séparément et par paire. Quelle est la différence entre les deux résultats ?";return{c(){n=m("p"),n.innerHTML=r},l(l){n=M(l,"P",{"data-svelte-h":!0}),y(n)!=="svelte-ofr2tm"&&(n.innerHTML=r)},m(l,o){a(l,n,o)},p:$n,d(l){l&&t(n)}}}function Pl(J){let n,r="La fonction qui est responsable de l’assemblage des échantillons dans un batch est appelée <em>fonction d’assemblement</em>. C’est un argument que vous pouvez passer quand vous construisez un <code>DataLoader</code>, la valeur par défaut étant une fonction qui va juste convertir vos échantillons en type tf.Tensor et les concaténer (récursivement si les éléments sont des listes, des <em>tuples</em> ou des dictionnaires). Cela ne sera pas possible dans notre cas puisque les entrées que nous avons ne seront pas toutes de la même taille. Nous avons délibérément reporté le <em>padding</em>, pour ne l’appliquer que si nécessaire sur chaque batch et éviter d’avoir des entrées trop longues avec beaucoup de remplissage. Cela accélère considérablement l’entraînement, mais notez que si vous vous entraînez sur un TPU, cela peut poser des problèmes. En effet, les TPU préfèrent les formes fixes, même si cela nécessite un <em>padding</em> supplémentaire.";return{c(){n=m("p"),n.innerHTML=r},l(l){n=M(l,"P",{"data-svelte-h":!0}),y(n)!=="svelte-1typocd"&&(n.innerHTML=r)},m(l,o){a(l,n,o)},d(l){l&&t(n)}}}function Kl(J){let n,r="La fonction qui est responsable de l’assemblage des échantillons dans un batch est appelée <em>fonction d’assemblement</em>. C’est un argument que vous pouvez passer quand vous construisez un <code>DataLoader</code>, la valeur par défaut étant une fonction qui va juste convertir vos échantillons en tenseurs PyTorch et les concaténer (récursivement si vos éléments sont des listes, des <em>tuples</em> ou des dictionnaires). Cela ne sera pas possible dans notre cas puisque les entrées que nous avons ne seront pas toutes de la même taille. Nous avons délibérément reporté le <em>padding</em>, pour ne l’appliquer que si nécessaire sur chaque batch et éviter d’avoir des entrées trop longues avec beaucoup de remplissage. Cela accélère considérablement l’entraînement, mais notez que si vous vous entraînez sur un TPU, cela peut poser des problèmes. En effet, les TPU préfèrent les formes fixes, même si cela nécessite un <em>padding</em> supplémentaire.";return{c(){n=m("p"),n.innerHTML=r},l(l){n=M(l,"P",{"data-svelte-h":!0}),y(n)!=="svelte-1i2fc74"&&(n.innerHTML=r)},m(l,o){a(l,n,o)},d(l){l&&t(n)}}}function Ol(J){let n,r;return n=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nJTBBJTBBZGF0YV9jb2xsYXRvciUyMCUzRCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nKHRva2VuaXplciUzRHRva2VuaXplciUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIydGYlMjIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorWithPadding | |
| data_collator = DataCollatorWithPadding(tokenizer=tokenizer, return_tensors=<span class="hljs-string">"tf"</span>)`,wrap:!1}}),{c(){j(n.$$.fragment)},l(l){h(n.$$.fragment,l)},m(l,o){b(n,l,o),r=!0},i(l){r||(u(n.$$.fragment,l),r=!0)},o(l){d(n.$$.fragment,l),r=!1},d(l){f(n,l)}}}function et(J){let n,r;return n=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nJTBBJTBBZGF0YV9jb2xsYXRvciUyMCUzRCUyMERhdGFDb2xsYXRvcldpdGhQYWRkaW5nKHRva2VuaXplciUzRHRva2VuaXplcik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorWithPadding | |
| data_collator = DataCollatorWithPadding(tokenizer=tokenizer)`,wrap:!1}}),{c(){j(n.$$.fragment)},l(l){h(n.$$.fragment,l)},m(l,o){b(n,l,o),r=!0},i(l){r||(u(n.$$.fragment,l),r=!0)},o(l){d(n.$$.fragment,l),r=!1},d(l){f(n,l)}}}function st(J){let n,r,l,o="C’est beau ! Maintenant que nous sommes passés du texte brut à des batchs que notre modèle peut traiter, nous sommes prêts à le <em>finetuner</em> !",T;return n=new w({props:{code:"JTdCJ2F0dGVudGlvbl9tYXNrJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY3JTVEKSUyQyUwQSUyMCdpbnB1dF9pZHMnJTNBJTIwdG9yY2guU2l6ZSglNUI4JTJDJTIwNjclNUQpJTJDJTBBJTIwJ3Rva2VuX3R5cGVfaWRzJyUzQSUyMHRvcmNoLlNpemUoJTVCOCUyQyUyMDY3JTVEKSUyQyUwQSUyMCdsYWJlbHMnJTNBJTIwdG9yY2guU2l6ZSglNUI4JTVEKSU3RA==",highlighted:`{<span class="hljs-string">'attention_mask'</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]), | |
| <span class="hljs-string">'input_ids'</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]), | |
| <span class="hljs-string">'token_type_ids'</span>: torch.Size([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]), | |
| <span class="hljs-string">'labels'</span>: torch.Size([<span class="hljs-number">8</span>])}`,wrap:!1}}),{c(){j(n.$$.fragment),r=i(),l=m("p"),l.innerHTML=o},l(c){h(n.$$.fragment,c),r=p(c),l=M(c,"P",{"data-svelte-h":!0}),y(l)!=="svelte-1rhb4wf"&&(l.innerHTML=o)},m(c,g){b(n,c,g),a(c,r,g),a(c,l,g),T=!0},i(c){T||(u(n.$$.fragment,c),T=!0)},o(c){d(n.$$.fragment,c),T=!1},d(c){c&&(t(r),t(l)),f(n,c)}}}function nt(J){let n,r;return n=new w({props:{code:"JTdCJ2F0dGVudGlvbl9tYXNrJyUzQSUyMFRlbnNvclNoYXBlKCU1QjglMkMlMjA2NyU1RCklMkMlMEElMjAnaW5wdXRfaWRzJyUzQSUyMFRlbnNvclNoYXBlKCU1QjglMkMlMjA2NyU1RCklMkMlMEElMjAndG9rZW5fdHlwZV9pZHMnJTNBJTIwVGVuc29yU2hhcGUoJTVCOCUyQyUyMDY3JTVEKSUyQyUwQSUyMCdsYWJlbHMnJTNBJTIwVGVuc29yU2hhcGUoJTVCOCU1RCklN0Q=",highlighted:`{<span class="hljs-string">'attention_mask'</span>: TensorShape([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]), | |
| <span class="hljs-string">'input_ids'</span>: TensorShape([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]), | |
| <span class="hljs-string">'token_type_ids'</span>: TensorShape([<span class="hljs-number">8</span>, <span class="hljs-number">67</span>]), | |
| <span class="hljs-string">'labels'</span>: TensorShape([<span class="hljs-number">8</span>])}`,wrap:!1}}),{c(){j(n.$$.fragment)},l(l){h(n.$$.fragment,l)},m(l,o){b(n,l,o),r=!0},i(l){r||(u(n.$$.fragment,l),r=!0)},o(l){d(n.$$.fragment,l),r=!1},d(l){f(n,l)}}}function lt(J){let n,r="✏️ <strong>Essayez !</strong> Reproduisez le prétraitement sur le jeu de données GLUE SST-2. C’est un peu différent puisqu’il est composé de phrases simples au lieu de paires, mais le reste de ce que nous avons fait devrait être identique. Pour un défi plus difficile, essayez d’écrire une fonction de prétraitement qui fonctionne sur toutes les tâches GLUE.";return{c(){n=m("p"),n.innerHTML=r},l(l){n=M(l,"P",{"data-svelte-h":!0}),y(n)!=="svelte-hnm08s"&&(n.innerHTML=r)},m(l,o){a(l,n,o)},p:$n,d(l){l&&t(n)}}}function $l(J){let n,r="Maintenant que nous disposons de notre jeu de données et d’un assembleur de données, nous devons les assembler. Nous pourrions charger manuellement des batchs et les assembler mais c’est beaucoup de travail et probablement pas très performant non plus. A la place, il existe une méthode simple qui offre une solution performante à ce problème : <code>to_tf_dataset()</code>. Cela va envelopper un <code>tf.data.Dataset</code> autour de votre jeu de données, avec une fonction de collation optionnelle. <code>tf.data.Dataset</code> est un format natif de TensorFlow que Keras peut utiliser pour <code>model.fit()</code>, donc cette seule méthode convertit immédiatement un <em>dataset</em> en un format prêt pour l’entraînement. Voyons cela en action avec notre jeu de données !",l,o,T,c,g="Et c’est tout ! Nous pouvons utiliser ces jeux de données dans le prochain cours, où l’entraînement sera agréablement simple après tout le dur travail de prétraitement des données.",G;return o=new w({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELnRvX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwY29sdW1ucyUzRCU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTJDJTIwJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIydG9rZW5fdHlwZV9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBsYWJlbF9jb2xzJTNEJTVCJTIybGFiZWxzJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0Q4JTJDJTBBKSUwQSUwQXRmX3ZhbGlkYXRpb25fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQudG9fdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBjb2x1bW5zJTNEJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGxhYmVsX2NvbHMlM0QlNUIlMjJsYWJlbHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNERmFsc2UlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0Q4JTJDJTBBKQ==",highlighted:`tf_train_dataset = tokenized_datasets[<span class="hljs-string">"train"</span>].to_tf_dataset( | |
| columns=[<span class="hljs-string">"attention_mask"</span>, <span class="hljs-string">"input_ids"</span>, <span class="hljs-string">"token_type_ids"</span>], | |
| label_cols=[<span class="hljs-string">"labels"</span>], | |
| shuffle=<span class="hljs-literal">True</span>, | |
| collate_fn=data_collator, | |
| batch_size=<span class="hljs-number">8</span>, | |
| ) | |
| tf_validation_dataset = tokenized_datasets[<span class="hljs-string">"validation"</span>].to_tf_dataset( | |
| columns=[<span class="hljs-string">"attention_mask"</span>, <span class="hljs-string">"input_ids"</span>, <span class="hljs-string">"token_type_ids"</span>], | |
| label_cols=[<span class="hljs-string">"labels"</span>], | |
| shuffle=<span class="hljs-literal">False</span>, | |
| collate_fn=data_collator, | |
| batch_size=<span class="hljs-number">8</span>, | |
| )`,wrap:!1}}),{c(){n=m("p"),n.innerHTML=r,l=i(),j(o.$$.fragment),T=i(),c=m("p"),c.textContent=g},l(U){n=M(U,"P",{"data-svelte-h":!0}),y(n)!=="svelte-86kzan"&&(n.innerHTML=r),l=p(U),h(o.$$.fragment,U),T=p(U),c=M(U,"P",{"data-svelte-h":!0}),y(c)!=="svelte-1p6flrx"&&(c.textContent=g)},m(U,k){a(U,n,k),a(U,l,k),b(o,U,k),a(U,T,k),a(U,c,k),G=!0},i(U){G||(u(o.$$.fragment,U),G=!0)},o(U){d(o.$$.fragment,U),G=!1},d(U){U&&(t(n),t(l),t(T),t(c)),f(o,U)}}}function tt(J){let n,r,l,o,T,c,g,G,U,k,es,C,$,ss,E,xn="Evidemment, entraîner un modèle avec seulement deux phrases ne va pas donner de bons résultats. Pour obtenir de meilleurs résultats, vous allez avoir à préparer un plus grand jeu de données.",us,X,_n='Dans cette section, nous allons utiliser comme exemple le jeu de données MRPC (<em>Microsoft Research Paraphrase Corpus</em>) présenté dans un <a href="https://www.aclweb.org/anthology/I05-5002.pdf" rel="nofollow">papier</a> par William B. Dolan et Chris Brockett. Ce jeu de données contient 5801 paires de phrases avec un label indiquant si ces paires sont des paraphrases ou non (i.e. si elles ont la même signification). Nous l’avons choisi pour ce chapitre parce que c’est un petit jeu de données et cela rend donc simples les expériences d’entraînement sur ce jeu de données.',cs,H,ds,x,_,ns,S,In='Le <em>Hub</em> ne contient pas seulement des modèles mais aussi plusieurs jeux de données dans un tas de langues différentes. Vous pouvez explorer les jeux de données <a href="https://huggingface.co/datasets" rel="nofollow">ici</a> et nous vous conseillons d’essayer de charger un nouveau jeu de données une fois que vous avez étudié cette section (voir la documentation générale <a href="https://huggingface.co/docs/datasets/loading" rel="nofollow">ici</a>). Mais pour l’instant, concentrons-nous sur le jeu de données MRPC ! Il s’agit de l’un des 10 jeux de données qui constituent le <a href="https://gluebenchmark.com/" rel="nofollow"><em>benchmark</em> GLUE</a> qui est un <em>benchmark</em> académique utilisé pour mesurer les performances des modèles d’apprentissage automatique sur 10 différentes tâches de classification de textes.',ms,Y,zn="La bibliothèque 🤗 <em>Datasets</em> propose une commande très simple pour télécharger et mettre en cache un jeu de données à partir du <em>Hub</em>. On peut télécharger le jeu de données MRPC comme ceci :",Ms,V,ys,F,js,D,hs,L,Zn="Comme vous le voyez, on obtient un objet de type <code>DatasetDict</code> qui contient le jeu de données d’entraînement, celui de validation et celui de test. Chacun d’eux contient plusieurs colonnes (<code>sentence1</code>, <code>sentence2</code>, <code>label</code> et <code>idx</code>) et une variable nombre de lignes qui contient le nombre d’éléments dans chaque jeu de données (il y a donc 3.668 paires de phrases dans le jeu d’entraînement, 408 dans celui de validation et 1.725 dans celui de test).",bs,P,Qn="Cette commande télécharge et met en cache le jeu de données dans <em>~/.cache/huggingface/dataset</em>. Rappelez-vous que comme vu au chapitre 2, vous pouvez personnaliser votre dossier cache en modifiant la variable d’environnement <code>HF_HOME</code>.",fs,K,qn="Nous pouvons accéder à chaque paire de phrase de notre objet <code>raw_datasets</code> par les indices, comme avec un dictionnaire :",Js,O,Us,ee,Ts,se,Rn="Nous pouvons voir que les étiquettes sont déjà des entiers, donc nous n’aurons pas à faire de prétraitement ici. Pour savoir quel entier correspond à quel label, nous pouvons inspecter les <code>features</code> de notre <code>raw_train_dataset</code>. Cela nous indiquera le type de chaque colonne :",ws,ne,gs,le,vs,te,Gn="En réalité, <code>label</code> est de type <code>ClassLabel</code> et la correspondance des entiers aux noms des labels est enregistrée le dossier <em>names</em>. <code>0</code> correspond à <code>not_equivalent</code> et <code>1</code> correspond à <code>equivalent</code>.",ks,A,Cs,ae,$s,I,z,ls,re,Nn='Pour prétraiter le jeu de données, nous devons convertir le texte en chiffres compréhensibles par le modèle. Comme vous l’avez vu dans le <a href="/course/fr/chapter2">chapitre précédent</a>, cette conversion est effectuée par un <em>tokenizer</em>. Nous pouvons fournir au <em>tokenizer</em> une phrase ou une liste de phrases, de sorte que nous pouvons directement tokeniser toutes les premières phrases et toutes les secondes phrases de chaque paire comme ceci :',xs,ie,_s,pe,Vn="Cependant, nous ne pouvons pas simplement passer deux séquences au modèle et obtenir une prédiction pour savoir si les deux phrases sont des paraphrases ou non. Nous devons traiter les deux séquences comme une paire, et appliquer le prétraitement approprié. Heureusement, le <em>tokenizer</em> peut également prendre une paire de séquences et la préparer de la manière attendue par notre modèle BERT :",Is,oe,zs,ue,Zs,ce,An='Nous avons discuté des clés <code>input_ids</code> et <code>attention_mask</code> dans le <a href="/course/fr/chapter2">chapitre 2</a>, mais nous avons laissé de côté les <code>token_type_ids</code>. Dans cet exemple, c’est ce qui indique au modèle quelle partie de l’entrée est la première phrase et quelle partie est la deuxième phrase.',Qs,B,qs,de,Bn="Si on décode les IDs dans <code>input_ids</code> en mots :",Rs,me,Gs,Me,Wn="nous aurons :",Ns,ye,Vs,je,En="Nous voyons donc que le modèle s’attend à ce que les entrées soient de la forme <code>[CLS] phrase1 [SEP] phrase2 [SEP]</code> lorsqu’il y a deux phrases. En alignant cela avec les <code>token_type_ids</code>, on obtient :",As,he,Bs,be,Xn="Comme vous pouvez le voir, les parties de l’entrée correspondant à <code>[CLS] sentence1 [SEP]</code> ont toutes un <em>token</em> de type ID de <code>0</code>, tandis que les autres parties, correspondant à <code>sentence2 [SEP]</code>, ont toutes un <em>token</em> de type ID de <code>1</code>.",Ws,fe,Hn="Notez que si vous choisissez un autre <em>checkpoint</em>, vous n’aurez pas nécessairement les <code>token_type_ids</code> dans vos entrées tokenisées (par exemple, ils ne sont pas retournés si vous utilisez un modèle DistilBERT). Ils ne sont retournés que lorsque le modèle sait quoi faire avec eux, parce qu’il les a vus pendant son pré-entraînement.",Es,Je,Sn='Ici, BERT est pré-entraîné avec les <em>tokens</em> de type ID et en plus de l’objectif de modélisation du langage masqué dont nous avons abordé dans <a href="/course/fr/chapter1">chapitre 1</a>, il a un objectif supplémentaire appelé <em>prédiction de la phrase suivante</em>. Le but de cette tâche est de modéliser la relation entre des paires de phrases.',Xs,Ue,Yn="Avec la prédiction de la phrase suivante, on fournit au modèle des paires de phrases (avec des <em>tokens</em> masqués de manière aléatoire) et on lui demande de prédire si la deuxième phrase suit la première. Pour rendre la tâche non triviale, la moitié du temps, les phrases se suivent dans le document d’origine dont elles ont été extraites, et l’autre moitié du temps, les deux phrases proviennent de deux documents différents.",Hs,Te,Fn="En général, vous n’avez pas besoin de vous inquiéter de savoir s’il y a ou non des <code>token_type_ids</code> dans vos entrées tokenisées : tant que vous utilisez le même <em>checkpoint</em> pour le <em>tokenizer</em> et le modèle, tout ira bien puisque le <em>tokenizer</em> sait quoi fournir à son modèle.",Ss,we,Dn='Maintenant que nous avons vu comment notre <em>tokenizer</em> peut traiter une paire de phrases, nous pouvons l’utiliser pour tokeniser l’ensemble de notre jeu de données : comme dans le <a href="/course/fr/chapter2">chapitre précédent</a>, nous pouvons fournir au <em>tokenizer</em> une liste de paires de phrases en lui donnant la liste des premières phrases, puis la liste des secondes phrases. Ceci est également compatible avec les options de remplissage et de troncature que nous avons vues dans le <a href="/course/fr/chapter2">chapitre 2</a>. Voici donc une façon de prétraiter le jeu de données d’entraînement :',Ys,ge,Fs,ve,Ln='Cela fonctionne bien, mais a l’inconvénient de retourner un dictionnaire (avec nos clés, <code>input_ids</code>, <code>attention_mask</code>, et <code>token_type_ids</code>, et des valeurs qui sont des listes de listes). Cela ne fonctionnera également que si vous avez assez de RAM pour stocker l’ensemble de votre jeu de données pendant la tokenisation (alors que les jeux de données de la bibliothèque 🤗 <em>Datasets</em> sont des fichiers <a href="https://arrow.apache.org/" rel="nofollow">Apache Arrow</a> stockés sur le disque, vous ne gardez donc en mémoire que les échantillons que vous demandez).',Ds,ke,Pn='Pour conserver les données sous forme de jeu de données, nous utiliserons la méthode <a href="https://huggingface.co/docs/datasets/package_reference/main_classes#datasets.Dataset.map" rel="nofollow"><code>Dataset.map()</code></a>. Cela nous permet également une certaine flexibilité, si nous avons besoin d’un prétraitement plus poussé que la simple tokenisation. La méthode <code>map()</code> fonctionne en appliquant une fonction sur chaque élément de l’ensemble de données, donc définissons une fonction qui tokenise nos entrées :',Ls,Ce,Ps,$e,Kn='Cette fonction prend un dictionnaire (comme les éléments de notre jeu de données) et retourne un nouveau dictionnaire avec les clés <code>input_ids</code>, <code>attention_mask</code>, et <code>token_type_ids</code>. Notez que cela fonctionne également si le dictionnaire <code>example</code> contient plusieurs échantillons (chaque clé étant une liste de phrases) puisque le <code>tokenizer</code> travaille sur des listes de paires de phrases, comme vu précédemment. Cela nous permettra d’utiliser l’option <code>batched=True</code> dans notre appel à <code>map()</code>, ce qui accélérera grandement la tokénisation. Le <code>tokenizer</code> est soutenu par un <em>tokenizer</em> écrit en Rust à partir de la bibliothèque <a href="https://github.com/huggingface/tokenizers" rel="nofollow">🤗 <em>Tokenizers</em></a>. Ce <em>tokenizer</em> peut être très rapide, mais seulement si on lui donne beaucoup d’entrées en même temps.',Ks,xe,On="Notez que nous avons laissé l’argument <code>padding</code> hors de notre fonction de <em>tokenizer</em> pour le moment. C’est parce que le <em>padding</em> de tous les échantillons à la longueur maximale n’est pas efficace : il est préférable de remplir les échantillons lorsque nous construisons un batch, car alors nous avons seulement besoin de remplir à la longueur maximale dans ce batch, et non la longueur maximale dans l’ensemble des données. Cela peut permettre de gagner beaucoup de temps et de puissance de traitement lorsque les entrées ont des longueurs très variables !",Os,_e,el="Voici comment nous appliquons la fonction de tokenization sur tous nos jeux de données en même temps. Nous utilisons <code>batched=True</code> dans notre appel à <code>map</code> pour que la fonction soit appliquée à plusieurs éléments de notre jeu de données en une fois, et non à chaque élément séparément. Cela permet un prétraitement plus rapide.",en,Ie,sn,ze,sl="La façon dont la bibliothèque 🤗 <em>Datasets</em> applique ce traitement consiste à ajouter de nouveaux champs aux jeux de données, un pour chaque clé du dictionnaire renvoyé par la fonction de prétraitement :",nn,Ze,ln,Qe,nl="Vous pouvez même utiliser le multitraitement lorsque vous appliquez votre fonction de prétraitement avec <code>map()</code> en passant un argument <code>num_proc</code>. Nous ne l’avons pas fait ici parce que la bibliothèque 🤗 <em>Tokenizers</em> utilise déjà plusieurs <em>threads</em> pour tokeniser nos échantillons plus rapidement, mais si vous n’utilisez pas un <em>tokenizer</em> rapide soutenu par cette bibliothèque, cela pourrait accélérer votre prétraitement.",tn,qe,ll="Notre <code>tokenize_function</code> retourne un dictionnaire avec les clés <code>input_ids</code>, <code>attention_mask</code>, et <code>token_type_ids</code>, donc ces trois champs sont ajoutés à toutes les divisions de notre jeu de données. Notez que nous aurions également pu modifier des champs existants si notre fonction de prétraitement avait retourné une nouvelle valeur pour une clé existante dans l’ensemble de données auquel nous avons appliqué <code>map()</code>.",an,Re,tl="La dernière chose que nous devrons faire est de remplir tous les exemples à la longueur de l’élément le plus long lorsque nous regroupons les éléments, une technique que nous appelons le <em>padding dynamique</em>.",rn,Ge,pn,Ne,on,ts,Ve,al="Pour faire cela en pratique, nous devons définir une fonction d’assemblement qui appliquera la bonne quantité de <em>padding</em> aux éléments du jeu de données que nous voulons regrouper. Heureusement, la bibliothèque 🤗 <em>Transformers</em> nous fournit une telle fonction via <code>DataCollatorWithPadding</code>. Elle prend un <em>tokenizer</em> lorsque vous l’instanciez (pour savoir quel <em>token</em> de <em>padding</em> utiliser et si le modèle s’attend à ce que le <em>padding</em> soit à gauche ou à droite des entrées) et fera tout ce dont vous avez besoin :",un,Z,Q,as,Ae,rl="Pour tester notre nouveau jouet, prenons quelques éléments de notre jeu d’entraînement avec lesquels nous allons former un batch. Ici, on supprime les colonnes <code>idx</code>, <code>sentence1</code> et <code>sentence2</code> puisque nous n’en aurons pas besoin et qu’elles contiennent des <em>strings</em> (et nous ne pouvons pas créer des tenseurs avec des <em>strings</em>) et on regarde la longueur de chaque entrée du batch :",cn,Be,dn,We,mn,Ee,il="Sans surprise, nous obtenons des échantillons de longueur variable, de 32 à 67. Le <em>padding</em> dynamique signifie que les échantillons de ce batch doivent tous être rembourrés à une longueur de 67, la longueur maximale dans le batch. Sans le <em>padding</em> dynamique, tous les échantillons devraient être rembourrés à la longueur maximale du jeu de données entier, ou à la longueur maximale que le modèle peut accepter. Vérifions à nouveau que notre <code>data_collator</code> rembourre dynamiquement le batch correctement :",Mn,Xe,yn,q,R,rs,W,jn,is,He,hn,ps,bn;T=new Nl({props:{fw:J[0]}}),g=new Un({props:{title:"Préparer les données",local:"préparer-les-données",headingTag:"h1"}});const pl=[Bl,Al],Se=[];function ol(e,s){return e[0]==="pt"?0:1}U=ol(J),k=Se[U]=pl[U](J);const ul=[El,Wl],Ye=[];function cl(e,s){return e[0]==="pt"?0:1}C=cl(J),$=Ye[C]=ul[C](J),H=new Un({props:{title:"Charger un jeu de données depuis le <i> Hub </i>",local:"charger-un-jeu-de-données-depuis-le-i-hub-i",headingTag:"h3"}});const dl=[Hl,Xl],Fe=[];function ml(e,s){return e[0]==="pt"?0:1}x=ml(J),_=Fe[x]=dl[x](J),V=new Jn({props:{$$slots:{default:[Sl]},$$scope:{ctx:J}}}),F=new w({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBcmF3X2RhdGFzZXRzJTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMmdsdWUlMjIlMkMlMjAlMjJtcnBjJTIyKSUwQXJhd19kYXRhc2V0cw==",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset | |
| raw_datasets = load_dataset(<span class="hljs-string">"glue"</span>, <span class="hljs-string">"mrpc"</span>) | |
| raw_datasets`,wrap:!1}}),D=new w({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ3NlbnRlbmNlMSclMkMlMjAnc2VudGVuY2UyJyUyQyUyMCdsYWJlbCclMkMlMjAnaWR4JyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMzY2OCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB2YWxpZGF0aW9uJTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidzZW50ZW5jZTEnJTJDJTIwJ3NlbnRlbmNlMiclMkMlMjAnbGFiZWwnJTJDJTIwJ2lkeCclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDQwOCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB0ZXN0JTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidzZW50ZW5jZTEnJTJDJTIwJ3NlbnRlbmNlMiclMkMlMjAnbGFiZWwnJTJDJTIwJ2lkeCclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE3MjUlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({ | |
| train: Dataset({ | |
| features: [<span class="hljs-string">'sentence1'</span>, <span class="hljs-string">'sentence2'</span>, <span class="hljs-string">'label'</span>, <span class="hljs-string">'idx'</span>], | |
| num_rows: <span class="hljs-number">3668</span> | |
| }) | |
| validation: Dataset({ | |
| features: [<span class="hljs-string">'sentence1'</span>, <span class="hljs-string">'sentence2'</span>, <span class="hljs-string">'label'</span>, <span class="hljs-string">'idx'</span>], | |
| num_rows: <span class="hljs-number">408</span> | |
| }) | |
| test: Dataset({ | |
| features: [<span class="hljs-string">'sentence1'</span>, <span class="hljs-string">'sentence2'</span>, <span class="hljs-string">'label'</span>, <span class="hljs-string">'idx'</span>], | |
| num_rows: <span class="hljs-number">1725</span> | |
| }) | |
| })`,wrap:!1}}),O=new w({props:{code:"cmF3X3RyYWluX2RhdGFzZXQlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCUwQXJhd190cmFpbl9kYXRhc2V0JTVCMCU1RA==",highlighted:`raw_train_dataset = raw_datasets[<span class="hljs-string">"train"</span>] | |
| raw_train_dataset[<span class="hljs-number">0</span>]`,wrap:!1}}),ee=new w({props:{code:"JTdCJ2lkeCclM0ElMjAwJTJDJTBBJTIwJ2xhYmVsJyUzQSUyMDElMkMlMEElMjAnc2VudGVuY2UxJyUzQSUyMCdBbXJvemklMjBhY2N1c2VkJTIwaGlzJTIwYnJvdGhlciUyMCUyQyUyMHdob20lMjBoZSUyMGNhbGxlZCUyMCUyMiUyMHRoZSUyMHdpdG5lc3MlMjAlMjIlMjAlMkMlMjBvZiUyMGRlbGliZXJhdGVseSUyMGRpc3RvcnRpbmclMjBoaXMlMjBldmlkZW5jZSUyMC4nJTJDJTIwJTBBJTIwJTIzJTIwQW1yb3ppJTIwYSUyMGFjY3VzJUMzJUE5JTIwc29uJTIwZnIlQzMlQThyZSUyQyUyMHF1J2lsJTIwYSUyMGFwcGVsJUMzJUE5JTIwJUMyJUFCJTIwbGUlMjB0JUMzJUE5bW9pbiUyMCVDMiVCQiUyQyUyMGRlJTIwZCVDMyVBOWZvcm1lciUyMGQlQzMlQTlsaWIlQzMlQTlyJUMzJUE5bWVudCUyMHNvbiUyMHQlQzMlQTltb2lnbmFnZS4lMEElMjAnc2VudGVuY2UyJyUzQSUyMCdSZWZlcnJpbmclMjB0byUyMGhpbSUyMGFzJTIwb25seSUyMCUyMiUyMHRoZSUyMHdpdG5lc3MlMjAlMjIlMjAlMkMlMjBBbXJvemklMjBhY2N1c2VkJTIwaGlzJTIwYnJvdGhlciUyMG9mJTIwZGVsaWJlcmF0ZWx5JTIwZGlzdG9ydGluZyUyMGhpcyUyMGV2aWRlbmNlJTIwLiclN0QlMjAlMEElMjAlMjMlMjBTZSUyMHIlQzMlQTlmJUMzJUE5cmFudCUyMCVDMyVBMCUyMGx1aSUyMHVuaXF1ZW1lbnQlMjBjb21tZSUyMCVDMiVBQiUyMGxlJTIwdCVDMyVBOW1vaW4lMjAlQzIlQkIlMkMlMjBBbXJvemklMjBhJTIwYWNjdXMlQzMlQTklMjBzb24lMjBmciVDMyVBOHJlJTIwZGUlMjBkJUMzJUE5Zm9ybWVyJTIwZCVDMyVBOWxpYiVDMyVBOXIlQzMlQTltZW50JTIwc29uJTIwdCVDMyVBOW1vaWduYWdlLg==",highlighted:`{<span class="hljs-string">'idx'</span>: <span class="hljs-number">0</span>, | |
| <span class="hljs-string">'label'</span>: <span class="hljs-number">1</span>, | |
| <span class="hljs-string">'sentence1'</span>: <span class="hljs-string">'Amrozi accused his brother , whom he called " the witness " , of deliberately distorting his evidence .'</span>, | |
| <span class="hljs-comment"># Amrozi a accusé son frère, qu'il a appelé « le témoin », de déformer délibérément son témoignage.</span> | |
| <span class="hljs-string">'sentence2'</span>: <span class="hljs-string">'Referring to him as only " the witness " , Amrozi accused his brother of deliberately distorting his evidence .'</span>} | |
| <span class="hljs-comment"># Se référant à lui uniquement comme « le témoin », Amrozi a accusé son frère de déformer délibérément son témoignage.</span>`,wrap:!1}}),ne=new w({props:{code:"cmF3X3RyYWluX2RhdGFzZXQuZmVhdHVyZXM=",highlighted:"raw_train_dataset.features",wrap:!1}}),le=new w({props:{code:"JTdCJ3NlbnRlbmNlMSclM0ElMjBWYWx1ZShkdHlwZSUzRCdzdHJpbmcnJTJDJTIwaWQlM0ROb25lKSUyQyUwQSUyMCdzZW50ZW5jZTInJTNBJTIwVmFsdWUoZHR5cGUlM0Qnc3RyaW5nJyUyQyUyMGlkJTNETm9uZSklMkMlMEElMjAnbGFiZWwnJTNBJTIwQ2xhc3NMYWJlbChudW1fY2xhc3NlcyUzRDIlMkMlMjBuYW1lcyUzRCU1Qidub3RfZXF1aXZhbGVudCclMkMlMjAnZXF1aXZhbGVudCclNUQlMkMlMjBuYW1lc19maWxlJTNETm9uZSUyQyUyMGlkJTNETm9uZSklMkMlMEElMjAnaWR4JyUzQSUyMFZhbHVlKGR0eXBlJTNEJ2ludDMyJyUyQyUyMGlkJTNETm9uZSklN0Q=",highlighted:`{<span class="hljs-string">'sentence1'</span>: Value(dtype=<span class="hljs-string">'string'</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>), | |
| <span class="hljs-string">'sentence2'</span>: Value(dtype=<span class="hljs-string">'string'</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>), | |
| <span class="hljs-string">'label'</span>: ClassLabel(num_classes=<span class="hljs-number">2</span>, names=[<span class="hljs-string">'not_equivalent'</span>, <span class="hljs-string">'equivalent'</span>], names_file=<span class="hljs-literal">None</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>), | |
| <span class="hljs-string">'idx'</span>: Value(dtype=<span class="hljs-string">'int32'</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>)}`,wrap:!1}}),A=new Jn({props:{$$slots:{default:[Yl]},$$scope:{ctx:J}}}),ae=new Un({props:{title:"Prétraitement d’un jeu de données",local:"prétraitement-dun-jeu-de-données",headingTag:"h3"}});const Ml=[Dl,Fl],De=[];function yl(e,s){return e[0]==="pt"?0:1}I=yl(J),z=De[I]=Ml[I](J),ie=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLXVuY2FzZWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQXRva2VuaXplZF9zZW50ZW5jZXNfMSUyMCUzRCUyMHRva2VuaXplcihyYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QiUyMnNlbnRlbmNlMSUyMiU1RCklMEF0b2tlbml6ZWRfc2VudGVuY2VzXzIlMjAlM0QlMjB0b2tlbml6ZXIocmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIlMjJzZW50ZW5jZTIlMjIlNUQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer | |
| checkpoint = <span class="hljs-string">"bert-base-uncased"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
| tokenized_sentences_1 = tokenizer(raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-string">"sentence1"</span>]) | |
| tokenized_sentences_2 = tokenizer(raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-string">"sentence2"</span>])`,wrap:!1}}),oe=new w({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMCUyMlRoaXMlMjBpcyUyMHRoZSUyMGZpcnN0JTIwc2VudGVuY2UuJTIyJTJDJTIwJTIyVGhpcyUyMGlzJTIwdGhlJTIwc2Vjb25kJTIwb25lLiUyMiUwQSklMjAlMjAlMjMlMjAlMjJDJ2VzdCUyMGxhJTIwcHJlbWklQzMlQThyZSUyMHBocmFzZS4lMjIlMkMlMjAlMjJDJ2VzdCUyMGxhJTIwZGV1eGklQzMlQThtZS4lMjIlMEFpbnB1dHM=",highlighted:`inputs = tokenizer( | |
| <span class="hljs-string">"This is the first sentence."</span>, <span class="hljs-string">"This is the second one."</span> | |
| ) <span class="hljs-comment"># "C'est la première phrase.", "C'est la deuxième."</span> | |
| inputs`,wrap:!1}}),ue=new w({props:{code:"JTdCJTIwJTBBJTIwJTIwJ2lucHV0X2lkcyclM0ElMjAlNUIxMDElMkMlMjAyMDIzJTJDJTIwMjAwMyUyQyUyMDE5OTYlMkMlMjAyMDM0JTJDJTIwNjI1MSUyQyUyMDEwMTIlMkMlMjAxMDIlMkMlMjAyMDIzJTJDJTIwMjAwMyUyQyUyMDE5OTYlMkMlMjAyMTE3JTJDJTIwMjAyOCUyQyUyMDEwMTIlMkMlMjAxMDIlNUQlMkMlMEElMjAlMjAndG9rZW5fdHlwZV9pZHMnJTNBJTIwJTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTVEJTJDJTBBJTIwJTIwJ2F0dGVudGlvbl9tYXNrJyUzQSUyMCU1QjElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElMkMlMjAxJTJDJTIwMSU1RCUwQSU3RA==",highlighted:`{ | |
| <span class="hljs-string">'input_ids'</span>: [<span class="hljs-number">101</span>, <span class="hljs-number">2023</span>, <span class="hljs-number">2003</span>, <span class="hljs-number">1996</span>, <span class="hljs-number">2034</span>, <span class="hljs-number">6251</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>, <span class="hljs-number">2023</span>, <span class="hljs-number">2003</span>, <span class="hljs-number">1996</span>, <span class="hljs-number">2117</span>, <span class="hljs-number">2028</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>], | |
| <span class="hljs-string">'token_type_ids'</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">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-string">'attention_mask'</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>] | |
| }`,wrap:!1}}),B=new Jn({props:{$$slots:{default:[Ll]},$$scope:{ctx:J}}}),me=new w({props:{code:"dG9rZW5pemVyLmNvbnZlcnRfaWRzX3RvX3Rva2VucyhpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQp",highlighted:'tokenizer.convert_ids_to_tokens(inputs[<span class="hljs-string">"input_ids"</span>])',wrap:!1}}),ye=new w({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAndGhpcyclMkMlMjAnaXMnJTJDJTIwJ3RoZSclMkMlMjAnZmlyc3QnJTJDJTIwJ3NlbnRlbmNlJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTJDJTIwJ3RoaXMnJTJDJTIwJ2lzJyUyQyUyMCd0aGUnJTJDJTIwJ3NlY29uZCclMkMlMjAnb25lJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTVE",highlighted:'[<span class="hljs-string">'[CLS]'</span>, <span class="hljs-string">'this'</span>, <span class="hljs-string">'is'</span>, <span class="hljs-string">'the'</span>, <span class="hljs-string">'first'</span>, <span class="hljs-string">'sentence'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'[SEP]'</span>, <span class="hljs-string">'this'</span>, <span class="hljs-string">'is'</span>, <span class="hljs-string">'the'</span>, <span class="hljs-string">'second'</span>, <span class="hljs-string">'one'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'[SEP]'</span>]',wrap:!1}}),he=new w({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAndGhpcyclMkMlMjAnaXMnJTJDJTIwJ3RoZSclMkMlMjAnZmlyc3QnJTJDJTIwJ3NlbnRlbmNlJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTJDJTIwJ3RoaXMnJTJDJTIwJ2lzJyUyQyUyMCd0aGUnJTJDJTIwJ3NlY29uZCclMkMlMjAnb25lJyUyQyUyMCcuJyUyQyUyMCclNUJTRVAlNUQnJTVEJTBBJTVCJTIwJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAlMjAlMjAxJTJDJTIwJTIwJTIwJTIwMSUyQyUyMCUyMCUyMCUyMCUyMDElMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAxJTJDJTIwJTIwJTIwJTIwJTIwMSUyQyUyMCUyMCUyMDElMkMlMjAlMjAlMjAlMjAlMjAlMjAlMjAxJTVE",highlighted:`[<span class="hljs-string">'[CLS]'</span>, <span class="hljs-string">'this'</span>, <span class="hljs-string">'is'</span>, <span class="hljs-string">'the'</span>, <span class="hljs-string">'first'</span>, <span class="hljs-string">'sentence'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'[SEP]'</span>, <span class="hljs-string">'this'</span>, <span class="hljs-string">'is'</span>, <span class="hljs-string">'the'</span>, <span class="hljs-string">'second'</span>, <span class="hljs-string">'one'</span>, <span class="hljs-string">'.'</span>, <span class="hljs-string">'[SEP]'</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">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>]`,wrap:!1}}),ge=new w({props:{code:"dG9rZW5pemVkX2RhdGFzZXQlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwcmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIlMjJzZW50ZW5jZTElMjIlNUQlMkMlMEElMjAlMjAlMjAlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QiUyMnNlbnRlbmNlMiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMHBhZGRpbmclM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMEEp",highlighted:`tokenized_dataset = tokenizer( | |
| raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-string">"sentence1"</span>], | |
| raw_datasets[<span class="hljs-string">"train"</span>][<span class="hljs-string">"sentence2"</span>], | |
| padding=<span class="hljs-literal">True</span>, | |
| truncation=<span class="hljs-literal">True</span>, | |
| )`,wrap:!1}}),Ce=new w({props:{code:"ZGVmJTIwdG9rZW5pemVfZnVuY3Rpb24oZXhhbXBsZSklM0ElMEElMjAlMjAlMjAlMjByZXR1cm4lMjB0b2tlbml6ZXIoZXhhbXBsZSU1QiUyMnNlbnRlbmNlMSUyMiU1RCUyQyUyMGV4YW1wbGUlNUIlMjJzZW50ZW5jZTIlMjIlNUQlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">example</span>): | |
| <span class="hljs-keyword">return</span> tokenizer(example[<span class="hljs-string">"sentence1"</span>], example[<span class="hljs-string">"sentence2"</span>], truncation=<span class="hljs-literal">True</span>)`,wrap:!1}}),Ie=new w({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCh0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlKSUwQXRva2VuaXplZF9kYXRhc2V0cw==",highlighted:`tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(tokenize_function, batched=<span class="hljs-literal">True</span>) | |
| tokenized_datasets`,wrap:!1}}),Ze=new w({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpZHgnJTJDJTIwJ2lucHV0X2lkcyclMkMlMjAnbGFiZWwnJTJDJTIwJ3NlbnRlbmNlMSclMkMlMjAnc2VudGVuY2UyJyUyQyUyMCd0b2tlbl90eXBlX2lkcyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDM2NjglMEElMjAlMjAlMjAlMjAlN0QpJTBBJTIwJTIwJTIwJTIwdmFsaWRhdGlvbiUzQSUyMERhdGFzZXQoJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmVhdHVyZXMlM0ElMjAlNUInYXR0ZW50aW9uX21hc2snJTJDJTIwJ2lkeCclMkMlMjAnaW5wdXRfaWRzJyUyQyUyMCdsYWJlbCclMkMlMjAnc2VudGVuY2UxJyUyQyUyMCdzZW50ZW5jZTInJTJDJTIwJ3Rva2VuX3R5cGVfaWRzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNDA4JTBBJTIwJTIwJTIwJTIwJTdEKSUwQSUyMCUyMCUyMCUyMHRlc3QlM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpZHgnJTJDJTIwJ2lucHV0X2lkcyclMkMlMjAnbGFiZWwnJTJDJTIwJ3NlbnRlbmNlMSclMkMlMjAnc2VudGVuY2UyJyUyQyUyMCd0b2tlbl90eXBlX2lkcyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE3MjUlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({ | |
| train: Dataset({ | |
| features: [<span class="hljs-string">'attention_mask'</span>, <span class="hljs-string">'idx'</span>, <span class="hljs-string">'input_ids'</span>, <span class="hljs-string">'label'</span>, <span class="hljs-string">'sentence1'</span>, <span class="hljs-string">'sentence2'</span>, <span class="hljs-string">'token_type_ids'</span>], | |
| num_rows: <span class="hljs-number">3668</span> | |
| }) | |
| validation: Dataset({ | |
| features: [<span class="hljs-string">'attention_mask'</span>, <span class="hljs-string">'idx'</span>, <span class="hljs-string">'input_ids'</span>, <span class="hljs-string">'label'</span>, <span class="hljs-string">'sentence1'</span>, <span class="hljs-string">'sentence2'</span>, <span class="hljs-string">'token_type_ids'</span>], | |
| num_rows: <span class="hljs-number">408</span> | |
| }) | |
| test: Dataset({ | |
| features: [<span class="hljs-string">'attention_mask'</span>, <span class="hljs-string">'idx'</span>, <span class="hljs-string">'input_ids'</span>, <span class="hljs-string">'label'</span>, <span class="hljs-string">'sentence1'</span>, <span class="hljs-string">'sentence2'</span>, <span class="hljs-string">'token_type_ids'</span>], | |
| num_rows: <span class="hljs-number">1725</span> | |
| }) | |
| })`,wrap:!1}}),Ge=new Un({props:{title:"<i> Padding </i> dynamique",local:"i-padding-i-dynamique",headingTag:"h3"}}),Ne=new os({props:{id:"7q5NyFT8REg"}});function jl(e,s){return e[0]==="pt"?Kl:Pl}let fn=jl(J),N=fn(J);const hl=[et,Ol],Le=[];function bl(e,s){return e[0]==="pt"?0:1}Z=bl(J),Q=Le[Z]=hl[Z](J),Be=new w({props:{code:"c2FtcGxlcyUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCJTNBOCU1RCUwQXNhbXBsZXMlMjAlM0QlMjAlN0JrJTNBJTIwdiUyMGZvciUyMGslMkMlMjB2JTIwaW4lMjBzYW1wbGVzLml0ZW1zKCklMjBpZiUyMGslMjBub3QlMjBpbiUyMCU1QiUyMmlkeCUyMiUyQyUyMCUyMnNlbnRlbmNlMSUyMiUyQyUyMCUyMnNlbnRlbmNlMiUyMiU1RCU3RCUwQSU1Qmxlbih4KSUyMGZvciUyMHglMjBpbiUyMHNhbXBsZXMlNUIlMjJpbnB1dF9pZHMlMjIlNUQlNUQ=",highlighted:`samples = tokenized_datasets[<span class="hljs-string">"train"</span>][:<span class="hljs-number">8</span>] | |
| samples = {k: v <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> samples.items() <span class="hljs-keyword">if</span> k <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> [<span class="hljs-string">"idx"</span>, <span class="hljs-string">"sentence1"</span>, <span class="hljs-string">"sentence2"</span>]} | |
| [<span class="hljs-built_in">len</span>(x) <span class="hljs-keyword">for</span> x <span class="hljs-keyword">in</span> samples[<span class="hljs-string">"input_ids"</span>]]`,wrap:!1}}),We=new w({props:{code:"JTVCNTAlMkMlMjA1OSUyQyUyMDQ3JTJDJTIwNjclMkMlMjA1OSUyQyUyMDUwJTJDJTIwNjIlMkMlMjAzMiU1RA==",highlighted:'[<span class="hljs-number">50</span>, <span class="hljs-number">59</span>, <span class="hljs-number">47</span>, <span class="hljs-number">67</span>, <span class="hljs-number">59</span>, <span class="hljs-number">50</span>, <span class="hljs-number">62</span>, <span class="hljs-number">32</span>]',wrap:!1}}),Xe=new w({props:{code:"YmF0Y2glMjAlM0QlMjBkYXRhX2NvbGxhdG9yKHNhbXBsZXMpJTBBJTdCayUzQSUyMHYuc2hhcGUlMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwYmF0Y2guaXRlbXMoKSU3RA==",highlighted:`batch = data_collator(samples) | |
| {k: v.shape <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> batch.items()}`,wrap:!1}});const fl=[nt,st],Pe=[];function Jl(e,s){return e[0]==="tf"?0:1}q=Jl(J),R=Pe[q]=fl[q](J),W=new Jn({props:{$$slots:{default:[lt]},$$scope:{ctx:J}}});let v=J[0]==="tf"&&$l();return He=new Vl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter3/2.mdx"}}),{c(){n=m("meta"),r=i(),l=m("p"),o=i(),j(T.$$.fragment),c=i(),j(g.$$.fragment),G=i(),k.c(),es=i(),$.c(),ss=i(),E=m("p"),E.textContent=xn,us=i(),X=m("p"),X.innerHTML=_n,cs=i(),j(H.$$.fragment),ds=i(),_.c(),ns=i(),S=m("p"),S.innerHTML=In,ms=i(),Y=m("p"),Y.innerHTML=zn,Ms=i(),j(V.$$.fragment),ys=i(),j(F.$$.fragment),js=i(),j(D.$$.fragment),hs=i(),L=m("p"),L.innerHTML=Zn,bs=i(),P=m("p"),P.innerHTML=Qn,fs=i(),K=m("p"),K.innerHTML=qn,Js=i(),j(O.$$.fragment),Us=i(),j(ee.$$.fragment),Ts=i(),se=m("p"),se.innerHTML=Rn,ws=i(),j(ne.$$.fragment),gs=i(),j(le.$$.fragment),vs=i(),te=m("p"),te.innerHTML=Gn,ks=i(),j(A.$$.fragment),Cs=i(),j(ae.$$.fragment),$s=i(),z.c(),ls=i(),re=m("p"),re.innerHTML=Nn,xs=i(),j(ie.$$.fragment),_s=i(),pe=m("p"),pe.innerHTML=Vn,Is=i(),j(oe.$$.fragment),zs=i(),j(ue.$$.fragment),Zs=i(),ce=m("p"),ce.innerHTML=An,Qs=i(),j(B.$$.fragment),qs=i(),de=m("p"),de.innerHTML=Bn,Rs=i(),j(me.$$.fragment),Gs=i(),Me=m("p"),Me.textContent=Wn,Ns=i(),j(ye.$$.fragment),Vs=i(),je=m("p"),je.innerHTML=En,As=i(),j(he.$$.fragment),Bs=i(),be=m("p"),be.innerHTML=Xn,Ws=i(),fe=m("p"),fe.innerHTML=Hn,Es=i(),Je=m("p"),Je.innerHTML=Sn,Xs=i(),Ue=m("p"),Ue.innerHTML=Yn,Hs=i(),Te=m("p"),Te.innerHTML=Fn,Ss=i(),we=m("p"),we.innerHTML=Dn,Ys=i(),j(ge.$$.fragment),Fs=i(),ve=m("p"),ve.innerHTML=Ln,Ds=i(),ke=m("p"),ke.innerHTML=Pn,Ls=i(),j(Ce.$$.fragment),Ps=i(),$e=m("p"),$e.innerHTML=Kn,Ks=i(),xe=m("p"),xe.innerHTML=On,Os=i(),_e=m("p"),_e.innerHTML=el,en=i(),j(Ie.$$.fragment),sn=i(),ze=m("p"),ze.innerHTML=sl,nn=i(),j(Ze.$$.fragment),ln=i(),Qe=m("p"),Qe.innerHTML=nl,tn=i(),qe=m("p"),qe.innerHTML=ll,an=i(),Re=m("p"),Re.innerHTML=tl,rn=i(),j(Ge.$$.fragment),pn=i(),j(Ne.$$.fragment),on=i(),N.c(),ts=i(),Ve=m("p"),Ve.innerHTML=al,un=i(),Q.c(),as=i(),Ae=m("p"),Ae.innerHTML=rl,cn=i(),j(Be.$$.fragment),dn=i(),j(We.$$.fragment),mn=i(),Ee=m("p"),Ee.innerHTML=il,Mn=i(),j(Xe.$$.fragment),yn=i(),R.c(),rs=i(),j(W.$$.fragment),jn=i(),v&&v.c(),is=i(),j(He.$$.fragment),hn=i(),ps=m("p"),this.h()},l(e){const s=Ql("svelte-u9bgzb",document.head);n=M(s,"META",{name:!0,content:!0}),s.forEach(t),r=p(e),l=M(e,"P",{}),kl(l).forEach(t),o=p(e),h(T.$$.fragment,e),c=p(e),h(g.$$.fragment,e),G=p(e),k.l(e),es=p(e),$.l(e),ss=p(e),E=M(e,"P",{"data-svelte-h":!0}),y(E)!=="svelte-1n7r8we"&&(E.textContent=xn),us=p(e),X=M(e,"P",{"data-svelte-h":!0}),y(X)!=="svelte-1ghm44d"&&(X.innerHTML=_n),cs=p(e),h(H.$$.fragment,e),ds=p(e),_.l(e),ns=p(e),S=M(e,"P",{"data-svelte-h":!0}),y(S)!=="svelte-uia9e1"&&(S.innerHTML=In),ms=p(e),Y=M(e,"P",{"data-svelte-h":!0}),y(Y)!=="svelte-1tx16uv"&&(Y.innerHTML=zn),Ms=p(e),h(V.$$.fragment,e),ys=p(e),h(F.$$.fragment,e),js=p(e),h(D.$$.fragment,e),hs=p(e),L=M(e,"P",{"data-svelte-h":!0}),y(L)!=="svelte-1d4x2bw"&&(L.innerHTML=Zn),bs=p(e),P=M(e,"P",{"data-svelte-h":!0}),y(P)!=="svelte-ua5dns"&&(P.innerHTML=Qn),fs=p(e),K=M(e,"P",{"data-svelte-h":!0}),y(K)!=="svelte-fu14aw"&&(K.innerHTML=qn),Js=p(e),h(O.$$.fragment,e),Us=p(e),h(ee.$$.fragment,e),Ts=p(e),se=M(e,"P",{"data-svelte-h":!0}),y(se)!=="svelte-19moo1o"&&(se.innerHTML=Rn),ws=p(e),h(ne.$$.fragment,e),gs=p(e),h(le.$$.fragment,e),vs=p(e),te=M(e,"P",{"data-svelte-h":!0}),y(te)!=="svelte-wxtbz2"&&(te.innerHTML=Gn),ks=p(e),h(A.$$.fragment,e),Cs=p(e),h(ae.$$.fragment,e),$s=p(e),z.l(e),ls=p(e),re=M(e,"P",{"data-svelte-h":!0}),y(re)!=="svelte-1neni1p"&&(re.innerHTML=Nn),xs=p(e),h(ie.$$.fragment,e),_s=p(e),pe=M(e,"P",{"data-svelte-h":!0}),y(pe)!=="svelte-7thb42"&&(pe.innerHTML=Vn),Is=p(e),h(oe.$$.fragment,e),zs=p(e),h(ue.$$.fragment,e),Zs=p(e),ce=M(e,"P",{"data-svelte-h":!0}),y(ce)!=="svelte-kljrk2"&&(ce.innerHTML=An),Qs=p(e),h(B.$$.fragment,e),qs=p(e),de=M(e,"P",{"data-svelte-h":!0}),y(de)!=="svelte-1l6xror"&&(de.innerHTML=Bn),Rs=p(e),h(me.$$.fragment,e),Gs=p(e),Me=M(e,"P",{"data-svelte-h":!0}),y(Me)!=="svelte-d06x7h"&&(Me.textContent=Wn),Ns=p(e),h(ye.$$.fragment,e),Vs=p(e),je=M(e,"P",{"data-svelte-h":!0}),y(je)!=="svelte-ev5wph"&&(je.innerHTML=En),As=p(e),h(he.$$.fragment,e),Bs=p(e),be=M(e,"P",{"data-svelte-h":!0}),y(be)!=="svelte-98r1eb"&&(be.innerHTML=Xn),Ws=p(e),fe=M(e,"P",{"data-svelte-h":!0}),y(fe)!=="svelte-1pe4h8a"&&(fe.innerHTML=Hn),Es=p(e),Je=M(e,"P",{"data-svelte-h":!0}),y(Je)!=="svelte-uy5dgt"&&(Je.innerHTML=Sn),Xs=p(e),Ue=M(e,"P",{"data-svelte-h":!0}),y(Ue)!=="svelte-ob2rhy"&&(Ue.innerHTML=Yn),Hs=p(e),Te=M(e,"P",{"data-svelte-h":!0}),y(Te)!=="svelte-lsp8hv"&&(Te.innerHTML=Fn),Ss=p(e),we=M(e,"P",{"data-svelte-h":!0}),y(we)!=="svelte-5tp166"&&(we.innerHTML=Dn),Ys=p(e),h(ge.$$.fragment,e),Fs=p(e),ve=M(e,"P",{"data-svelte-h":!0}),y(ve)!=="svelte-hy3waz"&&(ve.innerHTML=Ln),Ds=p(e),ke=M(e,"P",{"data-svelte-h":!0}),y(ke)!=="svelte-1fm15gc"&&(ke.innerHTML=Pn),Ls=p(e),h(Ce.$$.fragment,e),Ps=p(e),$e=M(e,"P",{"data-svelte-h":!0}),y($e)!=="svelte-1lvbsob"&&($e.innerHTML=Kn),Ks=p(e),xe=M(e,"P",{"data-svelte-h":!0}),y(xe)!=="svelte-q6as54"&&(xe.innerHTML=On),Os=p(e),_e=M(e,"P",{"data-svelte-h":!0}),y(_e)!=="svelte-v9tkx6"&&(_e.innerHTML=el),en=p(e),h(Ie.$$.fragment,e),sn=p(e),ze=M(e,"P",{"data-svelte-h":!0}),y(ze)!=="svelte-1kojjn3"&&(ze.innerHTML=sl),nn=p(e),h(Ze.$$.fragment,e),ln=p(e),Qe=M(e,"P",{"data-svelte-h":!0}),y(Qe)!=="svelte-wm7y47"&&(Qe.innerHTML=nl),tn=p(e),qe=M(e,"P",{"data-svelte-h":!0}),y(qe)!=="svelte-ke878u"&&(qe.innerHTML=ll),an=p(e),Re=M(e,"P",{"data-svelte-h":!0}),y(Re)!=="svelte-viyhi2"&&(Re.innerHTML=tl),rn=p(e),h(Ge.$$.fragment,e),pn=p(e),h(Ne.$$.fragment,e),on=p(e),N.l(e),ts=p(e),Ve=M(e,"P",{"data-svelte-h":!0}),y(Ve)!=="svelte-16nlr1f"&&(Ve.innerHTML=al),un=p(e),Q.l(e),as=p(e),Ae=M(e,"P",{"data-svelte-h":!0}),y(Ae)!=="svelte-1l774kk"&&(Ae.innerHTML=rl),cn=p(e),h(Be.$$.fragment,e),dn=p(e),h(We.$$.fragment,e),mn=p(e),Ee=M(e,"P",{"data-svelte-h":!0}),y(Ee)!=="svelte-1maww9q"&&(Ee.innerHTML=il),Mn=p(e),h(Xe.$$.fragment,e),yn=p(e),R.l(e),rs=p(e),h(W.$$.fragment,e),jn=p(e),v&&v.l(e),is=p(e),h(He.$$.fragment,e),hn=p(e),ps=M(e,"P",{}),kl(ps).forEach(t),this.h()},h(){Cl(n,"name","hf:doc:metadata"),Cl(n,"content",at)},m(e,s){ql(document.head,n),a(e,r,s),a(e,l,s),a(e,o,s),b(T,e,s),a(e,c,s),b(g,e,s),a(e,G,s),Se[U].m(e,s),a(e,es,s),Ye[C].m(e,s),a(e,ss,s),a(e,E,s),a(e,us,s),a(e,X,s),a(e,cs,s),b(H,e,s),a(e,ds,s),Fe[x].m(e,s),a(e,ns,s),a(e,S,s),a(e,ms,s),a(e,Y,s),a(e,Ms,s),b(V,e,s),a(e,ys,s),b(F,e,s),a(e,js,s),b(D,e,s),a(e,hs,s),a(e,L,s),a(e,bs,s),a(e,P,s),a(e,fs,s),a(e,K,s),a(e,Js,s),b(O,e,s),a(e,Us,s),b(ee,e,s),a(e,Ts,s),a(e,se,s),a(e,ws,s),b(ne,e,s),a(e,gs,s),b(le,e,s),a(e,vs,s),a(e,te,s),a(e,ks,s),b(A,e,s),a(e,Cs,s),b(ae,e,s),a(e,$s,s),De[I].m(e,s),a(e,ls,s),a(e,re,s),a(e,xs,s),b(ie,e,s),a(e,_s,s),a(e,pe,s),a(e,Is,s),b(oe,e,s),a(e,zs,s),b(ue,e,s),a(e,Zs,s),a(e,ce,s),a(e,Qs,s),b(B,e,s),a(e,qs,s),a(e,de,s),a(e,Rs,s),b(me,e,s),a(e,Gs,s),a(e,Me,s),a(e,Ns,s),b(ye,e,s),a(e,Vs,s),a(e,je,s),a(e,As,s),b(he,e,s),a(e,Bs,s),a(e,be,s),a(e,Ws,s),a(e,fe,s),a(e,Es,s),a(e,Je,s),a(e,Xs,s),a(e,Ue,s),a(e,Hs,s),a(e,Te,s),a(e,Ss,s),a(e,we,s),a(e,Ys,s),b(ge,e,s),a(e,Fs,s),a(e,ve,s),a(e,Ds,s),a(e,ke,s),a(e,Ls,s),b(Ce,e,s),a(e,Ps,s),a(e,$e,s),a(e,Ks,s),a(e,xe,s),a(e,Os,s),a(e,_e,s),a(e,en,s),b(Ie,e,s),a(e,sn,s),a(e,ze,s),a(e,nn,s),b(Ze,e,s),a(e,ln,s),a(e,Qe,s),a(e,tn,s),a(e,qe,s),a(e,an,s),a(e,Re,s),a(e,rn,s),b(Ge,e,s),a(e,pn,s),b(Ne,e,s),a(e,on,s),N.m(e,s),a(e,ts,s),a(e,Ve,s),a(e,un,s),Le[Z].m(e,s),a(e,as,s),a(e,Ae,s),a(e,cn,s),b(Be,e,s),a(e,dn,s),b(We,e,s),a(e,mn,s),a(e,Ee,s),a(e,Mn,s),b(Xe,e,s),a(e,yn,s),Pe[q].m(e,s),a(e,rs,s),b(W,e,s),a(e,jn,s),v&&v.m(e,s),a(e,is,s),b(He,e,s),a(e,hn,s),a(e,ps,s),bn=!0},p(e,[s]){const Ul={};s&1&&(Ul.fw=e[0]),T.$set(Ul);let Tn=U;U=ol(e),U!==Tn&&(Oe(),d(Se[Tn],1,1,()=>{Se[Tn]=null}),Ke(),k=Se[U],k||(k=Se[U]=pl[U](e),k.c()),u(k,1),k.m(es.parentNode,es));let wn=C;C=cl(e),C!==wn&&(Oe(),d(Ye[wn],1,1,()=>{Ye[wn]=null}),Ke(),$=Ye[C],$||($=Ye[C]=ul[C](e),$.c()),u($,1),$.m(ss.parentNode,ss));let gn=x;x=ml(e),x!==gn&&(Oe(),d(Fe[gn],1,1,()=>{Fe[gn]=null}),Ke(),_=Fe[x],_||(_=Fe[x]=dl[x](e),_.c()),u(_,1),_.m(ns.parentNode,ns));const Tl={};s&2&&(Tl.$$scope={dirty:s,ctx:e}),V.$set(Tl);const wl={};s&2&&(wl.$$scope={dirty:s,ctx:e}),A.$set(wl);let vn=I;I=yl(e),I!==vn&&(Oe(),d(De[vn],1,1,()=>{De[vn]=null}),Ke(),z=De[I],z||(z=De[I]=Ml[I](e),z.c()),u(z,1),z.m(ls.parentNode,ls));const gl={};s&2&&(gl.$$scope={dirty:s,ctx:e}),B.$set(gl),fn!==(fn=jl(e))&&(N.d(1),N=fn(e),N&&(N.c(),N.m(ts.parentNode,ts)));let kn=Z;Z=bl(e),Z!==kn&&(Oe(),d(Le[kn],1,1,()=>{Le[kn]=null}),Ke(),Q=Le[Z],Q||(Q=Le[Z]=hl[Z](e),Q.c()),u(Q,1),Q.m(as.parentNode,as));let Cn=q;q=Jl(e),q!==Cn&&(Oe(),d(Pe[Cn],1,1,()=>{Pe[Cn]=null}),Ke(),R=Pe[q],R||(R=Pe[q]=fl[q](e),R.c()),u(R,1),R.m(rs.parentNode,rs));const vl={};s&2&&(vl.$$scope={dirty:s,ctx:e}),W.$set(vl),e[0]==="tf"?v?s&1&&u(v,1):(v=$l(),v.c(),u(v,1),v.m(is.parentNode,is)):v&&(Oe(),d(v,1,1,()=>{v=null}),Ke())},i(e){bn||(u(T.$$.fragment,e),u(g.$$.fragment,e),u(k),u($),u(H.$$.fragment,e),u(_),u(V.$$.fragment,e),u(F.$$.fragment,e),u(D.$$.fragment,e),u(O.$$.fragment,e),u(ee.$$.fragment,e),u(ne.$$.fragment,e),u(le.$$.fragment,e),u(A.$$.fragment,e),u(ae.$$.fragment,e),u(z),u(ie.$$.fragment,e),u(oe.$$.fragment,e),u(ue.$$.fragment,e),u(B.$$.fragment,e),u(me.$$.fragment,e),u(ye.$$.fragment,e),u(he.$$.fragment,e),u(ge.$$.fragment,e),u(Ce.$$.fragment,e),u(Ie.$$.fragment,e),u(Ze.$$.fragment,e),u(Ge.$$.fragment,e),u(Ne.$$.fragment,e),u(Q),u(Be.$$.fragment,e),u(We.$$.fragment,e),u(Xe.$$.fragment,e),u(R),u(W.$$.fragment,e),u(v),u(He.$$.fragment,e),bn=!0)},o(e){d(T.$$.fragment,e),d(g.$$.fragment,e),d(k),d($),d(H.$$.fragment,e),d(_),d(V.$$.fragment,e),d(F.$$.fragment,e),d(D.$$.fragment,e),d(O.$$.fragment,e),d(ee.$$.fragment,e),d(ne.$$.fragment,e),d(le.$$.fragment,e),d(A.$$.fragment,e),d(ae.$$.fragment,e),d(z),d(ie.$$.fragment,e),d(oe.$$.fragment,e),d(ue.$$.fragment,e),d(B.$$.fragment,e),d(me.$$.fragment,e),d(ye.$$.fragment,e),d(he.$$.fragment,e),d(ge.$$.fragment,e),d(Ce.$$.fragment,e),d(Ie.$$.fragment,e),d(Ze.$$.fragment,e),d(Ge.$$.fragment,e),d(Ne.$$.fragment,e),d(Q),d(Be.$$.fragment,e),d(We.$$.fragment,e),d(Xe.$$.fragment,e),d(R),d(W.$$.fragment,e),d(v),d(He.$$.fragment,e),bn=!1},d(e){e&&(t(r),t(l),t(o),t(c),t(G),t(es),t(ss),t(E),t(us),t(X),t(cs),t(ds),t(ns),t(S),t(ms),t(Y),t(Ms),t(ys),t(js),t(hs),t(L),t(bs),t(P),t(fs),t(K),t(Js),t(Us),t(Ts),t(se),t(ws),t(gs),t(vs),t(te),t(ks),t(Cs),t($s),t(ls),t(re),t(xs),t(_s),t(pe),t(Is),t(zs),t(Zs),t(ce),t(Qs),t(qs),t(de),t(Rs),t(Gs),t(Me),t(Ns),t(Vs),t(je),t(As),t(Bs),t(be),t(Ws),t(fe),t(Es),t(Je),t(Xs),t(Ue),t(Hs),t(Te),t(Ss),t(we),t(Ys),t(Fs),t(ve),t(Ds),t(ke),t(Ls),t(Ps),t($e),t(Ks),t(xe),t(Os),t(_e),t(en),t(sn),t(ze),t(nn),t(ln),t(Qe),t(tn),t(qe),t(an),t(Re),t(rn),t(pn),t(on),t(ts),t(Ve),t(un),t(as),t(Ae),t(cn),t(dn),t(mn),t(Ee),t(Mn),t(yn),t(rs),t(jn),t(is),t(hn),t(ps)),t(n),f(T,e),f(g,e),Se[U].d(e),Ye[C].d(e),f(H,e),Fe[x].d(e),f(V,e),f(F,e),f(D,e),f(O,e),f(ee,e),f(ne,e),f(le,e),f(A,e),f(ae,e),De[I].d(e),f(ie,e),f(oe,e),f(ue,e),f(B,e),f(me,e),f(ye,e),f(he,e),f(ge,e),f(Ce,e),f(Ie,e),f(Ze,e),f(Ge,e),f(Ne,e),N.d(e),Le[Z].d(e),f(Be,e),f(We,e),f(Xe,e),Pe[q].d(e),f(W,e),v&&v.d(e),f(He,e)}}}const at='{"title":"Préparer les données","local":"préparer-les-données","sections":[{"title":"Charger un jeu de données depuis le <i> Hub </i>","local":"charger-un-jeu-de-données-depuis-le-i-hub-i","sections":[],"depth":3},{"title":"Prétraitement d’un jeu de données","local":"prétraitement-dun-jeu-de-données","sections":[],"depth":3},{"title":"<i> Padding </i> dynamique","local":"i-padding-i-dynamique","sections":[],"depth":3}],"depth":1}';function rt(J,n,r){let l="pt";return Il(()=>{const o=new URLSearchParams(window.location.search);r(0,l=o.get("fw")||"pt")}),[l]}class yt extends zl{constructor(n){super(),Zl(this,n,rt,tt,_l,{})}}export{yt as component}; | |
Xet Storage Details
- Size:
- 68.6 kB
- Xet hash:
- 448fe2d84c3fe9f9378613f4076a43101eac2762058f7ac0e4c0b6a18c24ed82
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.