Buckets:
| import{s as Ct,o as _t,n as zs}from"../chunks/scheduler.49e4e380.js";import{S as $t,i as xt,g as M,s as r,r as b,m as It,A as vt,h as m,f as l,c as p,j as Ut,u as y,x as h,n as Rt,k as gt,y as At,a,v as f,t as o,b as Pe,d as u,w,p as Ke}from"../chunks/index.fb15006d.js";import{T as ks}from"../chunks/Tip.f590f2e1.js";import{Y as dn}from"../chunks/Youtube.42918e4e.js";import{C as U}from"../chunks/CodeBlock.3f4fbe91.js";import{C as zt}from"../chunks/CourseFloatingBanner.c832fd1e.js";import{F as Zt}from"../chunks/FrameworkSwitchCourse.f837e098.js";import{H as fs,E as Bt}from"../chunks/getInferenceSnippets.233af260.js";function Vt(j){let s,i;return s=new zt({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/de/chapter3/section2_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/de/chapter3/section2_tf.ipynb"}]}}),{c(){b(s.$$.fragment)},l(t){y(s.$$.fragment,t)},m(t,d){f(s,t,d),i=!0},i(t){i||(u(s.$$.fragment,t),i=!0)},o(t){o(s.$$.fragment,t),i=!1},d(t){w(s,t)}}}function Dt(j){let s,i;return s=new zt({props:{chapter:3,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/de/chapter3/section2_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/de/chapter3/section2_pt.ipynb"}]}}),{c(){b(s.$$.fragment)},l(t){y(s.$$.fragment,t)},m(t,d){f(s,t,d),i=!0},i(t){i||(u(s.$$.fragment,t),i=!0)},o(t){o(s.$$.fragment,t),i=!1},d(t){w(s,t)}}}function Gt(j){let s,i='Wir fahren mit dem Beispiel aus dem <a href="/course/chapter2">vorigen Kapitel</a> fort. Folgenderweise würden wir einen Sequenzklassifikator mit einem Batch in Tensorflow trainieren:',t,d,T;return d=new U({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyMEdlbmF1JTIwd2llJTIwdm9yaGVyJTBBY2hlY2twb2ludCUyMCUzRCUyMCUyMmJlcnQtYmFzZS11bmNhc2VkJTIyJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCklMEFtb2RlbCUyMCUzRCUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCklMEFzZXF1ZW5jZXMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjJJJ3ZlJTIwYmVlbiUyMHdhaXRpbmclMjBmb3IlMjBhJTIwSHVnZ2luZ0ZhY2UlMjBjb3Vyc2UlMjBteSUyMHdob2xlJTIwbGlmZS4lMjIlMkMlMjAlMjAlMjMlMjBJY2glMjBoYWJlJTIwbWVpbiUyMGdhbnplcyUyMExlYmVuJTIwYXVmJTIwZWluZW4lMjBIdWdnaW5nRmFjZS1LdXJzJTIwZ2V3YXJ0ZXQuJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMGNvdXJzZSUyMGlzJTIwYW1hemluZyElMjIlMkMlMjAlMjAlMjMlMjBEaWVzZXIlMjBLdXJzJTIwaXN0JTIwZmFudGFzdGlzY2ghJTBBJTVEJTBBYmF0Y2glMjAlM0QlMjBkaWN0KHRva2VuaXplcihzZXF1ZW5jZXMlMkMlMjBwYWRkaW5nJTNEVHJ1ZSUyQyUyMHRydW5jYXRpb24lM0RUcnVlJTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJ0ZiUyMikpJTBBJTBBJTIzJTIwRGllcyUyMGlzdCUyMG5ldSUwQW1vZGVsLmNvbXBpbGUob3B0aW1pemVyJTNEJTIyYWRhbSUyMiUyQyUyMGxvc3MlM0QlMjJzcGFyc2VfY2F0ZWdvcmljYWxfY3Jvc3NlbnRyb3B5JTIyKSUwQWxhYmVscyUyMCUzRCUyMHRmLmNvbnZlcnRfdG9fdGVuc29yKCU1QjElMkMlMjAxJTVEKSUwQW1vZGVsLnRyYWluX29uX2JhdGNoKGJhdGNoJTJDJTIwbGFiZWxzKQ==",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"># Genau wie vorher</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"># Ich habe mein ganzes Leben auf einen HuggingFace-Kurs gewartet.</span> | |
| <span class="hljs-string">"This course is amazing!"</span>, <span class="hljs-comment"># Dieser Kurs ist fantastisch!</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"># Dies ist neu</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(){s=M("p"),s.innerHTML=i,t=r(),b(d.$$.fragment)},l(c){s=m(c,"P",{"data-svelte-h":!0}),h(s)!=="svelte-1pcxgsl"&&(s.innerHTML=i),t=p(c),y(d.$$.fragment,c)},m(c,g){a(c,s,g),a(c,t,g),f(d,c,g),T=!0},i(c){T||(u(d.$$.fragment,c),T=!0)},o(c){o(d.$$.fragment,c),T=!1},d(c){c&&(l(s),l(t)),w(d,c)}}}function Nt(j){let s,i='Wir fahren mit dem Beispiel aus dem <a href="/course/chapter2">vorigen Kapitel</a> fort. Folgenderweise würden wir einen Sequenzklassifikator mit einem Batch in PyTorch trainieren:',t,d,T;return d=new U({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdG9yY2gub3B0aW0lMjBpbXBvcnQlMjBBZGFtVyUwQWZyb20lMjB0cmFuc2Zvcm1lcnMlMjBpbXBvcnQlMjBBdXRvVG9rZW5pemVyJTJDJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQSUyMyUyMEdlbmF1JTIwd2llJTIwdm9yaGVyJTBBY2hlY2twb2ludCUyMCUzRCUyMCUyMmJlcnQtYmFzZS11bmNhc2VkJTIyJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCklMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBc2VxdWVuY2VzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIySSd2ZSUyMGJlZW4lMjB3YWl0aW5nJTIwZm9yJTIwYSUyMEh1Z2dpbmdGYWNlJTIwY291cnNlJTIwbXklMjB3aG9sZSUyMGxpZmUuJTIyJTJDJTIwJTIwJTIzJTIwSWNoJTIwaGFiZSUyMG1laW4lMjBnYW56ZXMlMjBMZWJlbiUyMGF1ZiUyMGVpbmVuJTIwSHVnZ2luZ0ZhY2UtS3VycyUyMGdld2FydGV0LiUwQSUyMCUyMCUyMCUyMCUyMlRoaXMlMjBjb3Vyc2UlMjBpcyUyMGFtYXppbmchJTIyJTJDJTIwJTIwJTIzJTIwRGllc2VyJTIwS3VycyUyMGlzdCUyMGZhbnRhc3Rpc2NoISUwQSU1RCUwQWJhdGNoJTIwJTNEJTIwdG9rZW5pemVyKHNlcXVlbmNlcyUyQyUyMHBhZGRpbmclM0RUcnVlJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKSUwQSUwQSUyMyUyMERpZXMlMjBpc3QlMjBuZXUlMEFiYXRjaCU1QiUyMmxhYmVscyUyMiU1RCUyMCUzRCUyMHRvcmNoLnRlbnNvciglNUIxJTJDJTIwMSU1RCklMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCkpJTBBbG9zcyUyMCUzRCUyMG1vZGVsKCoqYmF0Y2gpLmxvc3MlMEFsb3NzLmJhY2t3YXJkKCklMEFvcHRpbWl6ZXIuc3RlcCgp",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"># Genau wie vorher</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"># Ich habe mein ganzes Leben auf einen HuggingFace-Kurs gewartet.</span> | |
| <span class="hljs-string">"This course is amazing!"</span>, <span class="hljs-comment"># Dieser Kurs ist fantastisch!</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"># Dies ist neu</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(){s=M("p"),s.innerHTML=i,t=r(),b(d.$$.fragment)},l(c){s=m(c,"P",{"data-svelte-h":!0}),h(s)!=="svelte-mqq13n"&&(s.innerHTML=i),t=p(c),y(d.$$.fragment,c)},m(c,g){a(c,s,g),a(c,t,g),f(d,c,g),T=!0},i(c){T||(u(d.$$.fragment,c),T=!0)},o(c){o(d.$$.fragment,c),T=!1},d(c){c&&(l(s),l(t)),w(d,c)}}}function St(j){let s,i;return s=new dn({props:{id:"W_gMJF0xomE"}}),{c(){b(s.$$.fragment)},l(t){y(s.$$.fragment,t)},m(t,d){f(s,t,d),i=!0},i(t){i||(u(s.$$.fragment,t),i=!0)},o(t){o(s.$$.fragment,t),i=!1},d(t){w(s,t)}}}function Qt(j){let s,i;return s=new dn({props:{id:"_BZearw7f0w"}}),{c(){b(s.$$.fragment)},l(t){y(s.$$.fragment,t)},m(t,d){f(s,t,d),i=!0},i(t){i||(u(s.$$.fragment,t),i=!0)},o(t){o(s.$$.fragment,t),i=!1},d(t){w(s,t)}}}function Wt(j){let s,i="✏️ <strong>Probier es aus!</strong> Sieh dir das Element 15 der Trainingsdaten und Element 87 des Validierungsdaten an. Was sind ihre Labels?";return{c(){s=M("p"),s.innerHTML=i},l(t){s=m(t,"P",{"data-svelte-h":!0}),h(s)!=="svelte-100c1dr"&&(s.innerHTML=i)},m(t,d){a(t,s,d)},p:zs,d(t){t&&l(s)}}}function Xt(j){let s,i;return s=new dn({props:{id:"P-rZWqcB6CE"}}),{c(){b(s.$$.fragment)},l(t){y(s.$$.fragment,t)},m(t,d){f(s,t,d),i=!0},i(t){i||(u(s.$$.fragment,t),i=!0)},o(t){o(s.$$.fragment,t),i=!1},d(t){w(s,t)}}}function Et(j){let s,i;return s=new dn({props:{id:"0u3ioSwev3s"}}),{c(){b(s.$$.fragment)},l(t){y(s.$$.fragment,t)},m(t,d){f(s,t,d),i=!0},i(t){i||(u(s.$$.fragment,t),i=!0)},o(t){o(s.$$.fragment,t),i=!1},d(t){w(s,t)}}}function Yt(j){let s,i="✏️ <strong>Probier es aus!</strong> Nimm Element 15 der Trainingsdaten und tokenisiere die beiden Sätze separat und als Paar. Wo liegt der Unterschied zwischen den beiden Ergebnissen?";return{c(){s=M("p"),s.innerHTML=i},l(t){s=m(t,"P",{"data-svelte-h":!0}),h(s)!=="svelte-1dmghy9"&&(s.innerHTML=i)},m(t,d){a(t,s,d)},p:zs,d(t){t&&l(s)}}}function Ft(j){let s,i="Die Funktion, die für das Zusammenstellen von Samples innerhalb eines Batches verantwortlich ist, wird als <em>Collate-Funktion</em> bezeichnet. Es ist ein Argument, das du übergeben kannst, wenn du einen <code>DataLoader</code> baust, wobei es standardmäßig eine Funktion ist, die die Daten in tf.Tensor umwandelt und zusammenfügt (rekursiv wenn die Elemente Listen, Tupel oder Dictionaries sind). Dies ist in unserem Fall nicht möglich, da die Inputs nicht alle gleich groß sind. Das Padding haben wir bewusst aufgeschoben, um es bei jedem Batch nur bei Bedarf anzuwenden und überlange Inputs mit massivem Padding zu vermeiden. Dies beschleunigt das Training zwar, aber beachte, dass das Training auf einer TPU Probleme verursachen kann – TPUs bevorzugen feste Formen, auch wenn das ein zusätzliches Padding erfordert.";return{c(){s=M("p"),s.innerHTML=i},l(t){s=m(t,"P",{"data-svelte-h":!0}),h(s)!=="svelte-4tlrwy"&&(s.innerHTML=i)},m(t,d){a(t,s,d)},d(t){t&&l(s)}}}function Ht(j){let s,i="Die Funktion, die für das Zusammenstellen von Samples innerhalb eines Batches verantwortlich ist, wird als <em>Collate-Funktion</em> bezeichnet. Es ist ein Argument, das du übergeben kannst, wenn du einen <code>DataLoader</code> baust, wobei es standardmäßig eine Funktion ist, die die Daten in PyTorch-Tensoren umwandelt und zusammenfügt (rekursiv wenn die Elemente Listen, Tupel oder Dictionaries sind). Dies ist in unserem Fall nicht möglich, da die Inputs nicht alle gleich groß sind. Das Padding haben wir bewusst aufgeschoben, um es bei jedem Batch nur bei Bedarf anzuwenden und überlange Inputs mit massivem Padding zu vermeiden. Dies beschleunigt das Training zwar, aber beachte, dass das Training auf einer TPU Probleme verursachen kann – TPUs bevorzugen feste Formen, auch wenn das ein zusätzliches Padding erfordert.";return{c(){s=M("p"),s.innerHTML=i},l(t){s=m(t,"P",{"data-svelte-h":!0}),h(s)!=="svelte-1duluy7"&&(s.innerHTML=i)},m(t,d){a(t,s,d)},d(t){t&&l(s)}}}function Lt(j){let s,i;return s=new U({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(){b(s.$$.fragment)},l(t){y(s.$$.fragment,t)},m(t,d){f(s,t,d),i=!0},i(t){i||(u(s.$$.fragment,t),i=!0)},o(t){o(s.$$.fragment,t),i=!1},d(t){w(s,t)}}}function qt(j){let s,i;return s=new U({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(){b(s.$$.fragment)},l(t){y(s.$$.fragment,t)},m(t,d){f(s,t,d),i=!0},i(t){i||(u(s.$$.fragment,t),i=!0)},o(t){o(s.$$.fragment,t),i=!1},d(t){w(s,t)}}}function Pt(j){let s,i,t,d="Das sieht gut aus! Jetzt, da wir vom Rohtext zu Batches übergegangen sind, mit denen unser Modell umgehen kann, sind wir bereit zum fein-tunen!",T;return s=new U({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(){b(s.$$.fragment),i=r(),t=M("p"),t.textContent=d},l(c){y(s.$$.fragment,c),i=p(c),t=m(c,"P",{"data-svelte-h":!0}),h(t)!=="svelte-1o3zswn"&&(t.textContent=d)},m(c,g){f(s,c,g),a(c,i,g),a(c,t,g),T=!0},i(c){T||(u(s.$$.fragment,c),T=!0)},o(c){o(s.$$.fragment,c),T=!1},d(c){c&&(l(i),l(t)),w(s,c)}}}function Kt(j){let s,i;return s=new U({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(){b(s.$$.fragment)},l(t){y(s.$$.fragment,t)},m(t,d){f(s,t,d),i=!0},i(t){i||(u(s.$$.fragment,t),i=!0)},o(t){o(s.$$.fragment,t),i=!1},d(t){w(s,t)}}}function Ot(j){let s,i="✏️ <strong>Probier es aus!</strong> Repliziere die Vorverarbeitung auf dem GLUE SST-2-Datensatz. Es ist ein bisschen anders, da es aus einzelnen Sätzen statt aus Paaren besteht, aber der Rest von dem, was wir gemacht haben, sollte gleich aussehen. Alternative wäre eine schwierigere Herausforderung, eine Vorverarbeitungsfunktion zu schreiben, die bei allen GLUE-Aufgaben funktioniert.";return{c(){s=M("p"),s.innerHTML=i},l(t){s=m(t,"P",{"data-svelte-h":!0}),h(s)!=="svelte-5iigxw"&&(s.innerHTML=i)},m(t,d){a(t,s,d)},p:zs,d(t){t&&l(s)}}}function kt(j){let s,i="Jetzt, da wir unseren Datensatz und einen DataCollator haben, müssen wir sie verbinden. Wir könnten Batches manuell laden und sortieren, aber das ist eine Menge Arbeit und wahrscheinlich auch nicht sehr sonderlich performant. Stattdessen gibt es eine einfache Methode, die dieses Problem performant löst: <code>to_tf_dataset()</code>. Dadurch wird ein <code>tf.data.Dataset</code> um den Datensatz gewickelt, mit einer optionalen Kollatierungsfunktion. <code>tf.data.Dataset</code> ist ein natives TensorFlow-Format, das Keras für <code>model.fit()</code> verwenden kann. Diese Methode kann einen 🤗-Datensatz ohne Umstände in ein fürs Training vorbereitetes Format konvertieren. Sehen wir es uns nun mit unserem Datensatz in Aktion an!",t,d,T,c,g="Und das was’s! Wir können Datensätze in das nächste Kapitel mitnehmen, wo das Training nach all der harten Arbeit der Datenvorverarbeitung angenehm unkompliziert sein wird.",V;return d=new U({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(){s=M("p"),s.innerHTML=i,t=r(),b(d.$$.fragment),T=r(),c=M("p"),c.textContent=g},l(J){s=m(J,"P",{"data-svelte-h":!0}),h(s)!=="svelte-ggn7hs"&&(s.innerHTML=i),t=p(J),y(d.$$.fragment,J),T=p(J),c=m(J,"P",{"data-svelte-h":!0}),h(c)!=="svelte-1t189to"&&(c.textContent=g)},m(J,z){a(J,s,z),a(J,t,z),f(d,J,z),a(J,T,z),a(J,c,z),V=!0},i(J){V||(u(d.$$.fragment,J),V=!0)},o(J){o(d.$$.fragment,J),V=!1},d(J){J&&(l(s),l(t),l(T),l(c)),w(d,J)}}}function el(j){let s,i,t,d,T,c,g,V,J,z,Oe,C,_,en,Q,Cs="Natürlich würde das Training von Modellen mit nur zwei Sätzen keine sonderlich guten Ergebnisse liefern. Um bessere Ergebnisse zu erzielen, müssen wir einen größeren Datensatz vorbereiten.",cn,W,_s='In diesem Abschnitt verwenden wir den MRPC-Datensatz (Microsoft Research Paraphrase Corpus) als Beispiel. Dieser wurde in einem <a href="https://www.aclweb.org/anthology/I05-5002.pdf" rel="nofollow">Paper</a> von William B. Dolan und Chris Brockett veröffentlicht. Der Datensatz besteht aus insgesamt 5.801 Satzpaaren und enthält ein Label, das angibt, ob es sich bei einem Paar um Paraphrasen handelt (d.h. ob beide Sätze dasselbe bedeuten). Wir haben diesen Datensatz für dieses Kapitel ausgewählt, weil es sich um einen kleinen Datensatz handelt, sodass es einfach ist, während dem Training zu experimentieren.',un,X,on,$,x,nn,E,$s='Das Hub enthält nicht nur Modelle; Es hat auch mehrere Datensätze in vielen verschiedenen Sprachen. Du kannst die Datensätze <a href="https://huggingface.co/datasets" rel="nofollow">hier</a> durchsuchen, und wir empfehlen, einen weiteren Datensatz zu laden und zu verarbeiten, sobald Sie diesen Abschnitt abgeschlossen haben (die Dokumentation befindet sich <a href="https://huggingface.co/docs/datasets/loading" rel="nofollow">hier</a>). Aber jetzt konzentrieren wir uns auf den MRPC-Datensatz! Dies ist einer der 10 Datensätze, aus denen sich das <a href="https://gluebenchmark.com/" rel="nofollow">GLUE-Benchmark</a> zusammensetzt. Dies ist ein akademisches Benchmark, das verwendet wird, um die Performance von ML-Modellen in 10 verschiedenen Textklassifizierungsaufgaben zu messen.',Mn,Y,xs="Die Bibliothek 🤗 Datasets bietet einen leichten Befehl zum Herunterladen und Caching eines Datensatzes aus dem Hub. Wir können den MRPC-Datensatz wie folgt herunterladen:",mn,F,hn,H,bn,L,Is="Wie du sehen kannst, erhalten wir ein <code>DatasetDict</code>-Objekt, das die Trainingsdaten, die Validierungsdaten und die Testdaten enthält. Jedes Objekt enthält mehrere Spalten (<code>sentence1</code>, <code>sentence2</code>, <code>label</code> und <code>idx</code>) und eine unterschiedliche Anzahl an Zeilen, dies ist die Anzahl der Elemente in jedem Datensatz (also gibt es 3.668 Satzpaare in den Trainingsdaten, 408 in den Validierungsdaten und 1.725 in den Testdaten).",yn,q,vs="Dieser Befehl lädt das Dataset herunter und speichert es im Cache, standardmäßig in <em>~/.cache/huggingface/dataset</em>. Wir Erinnern uns an Kapitel 2, dass der Cache-Ordner anpasst werden kann, indem man die Umgebungsvariable <code>HF_HOME</code> setzt.",fn,P,Rs="Wir können auf jedes Satzpaar in unserem <code>raw_datasets</code>-Objekt zugreifen, indem wir wie bei einem Dictionary einen Schlüsselwert als Index verwenden:",wn,K,jn,O,Jn,ee,As="Wir stellen fest, dass die Labels bereits Ganzzahlen sind, sodass wir dort keine Vorverarbeitung durchführen müssen. Wir können die <code>features</code> von <code>raw_train_dataset</code> untersuchen, um zu erfahren, welche Ganzzahl welchem Label entspricht. Der folgende Befehl gibt uns den Variablentyp zurück:",Tn,ne,Un,se,gn,te,Zs="Hinter den Kulissen ist <code>label</code> vom Typ <code>ClassLabel</code>, und die Zuordnung von Ganzzahlen zum Labelnamen wird im Ordner <em>names</em> gespeichert. <code>0</code> entspricht <code>not_equivalent</code>, also “nicht äquivalent”, und <code>1</code> entspricht <code>equivalent</code>, also “äquivalent”.",kn,G,zn,le,Cn,I,v,sn,ae,Bs='Um den Datensatz vorzubereiten, müssen wir den Text in Zahlen umwandeln, die das Modell sinnvoll verarbeiten kann. Im <a href="/course/chapter2">vorherigen Kapitel</a> haben wir gesehen, dass dies mit einem Tokenizer gemacht wird. Wir können den Tokenizer mit einem Satz oder einer Liste von Sätzen füttern, sodass wir die ersten und zweiten Sätze jedes Paares wie folgt direkt tokenisieren können:',_n,ie,$n,re,Vs="Wir können jedoch nicht einfach zwei Sequenzen an das Modell übergeben und eine Vorhersage erhalten, ob die beiden Sätze paraphrasiert sind oder nicht. Wir müssen die beiden Sequenzen als Paar behandeln und die entsprechende Vorverarbeitung anwenden. Glücklicherweise kann der Tokenizer auch ein Sequenzpaar nehmen und es so vorbereiten, wie es unser BERT-Modell erwartet:",xn,pe,In,de,vn,ce,Ds='In <a href="/course/chapter2">Kapitel 2</a> haben wir die Schlüsselwerte <code>input_ids</code> und <code>attention_mask</code> behandelt, allerdings haben wir es aufgeschoben, über <code>token_type_ids</code> zu sprechen. In diesem Beispiel teilt diese dem Modell mit, welcher Teil des Input der erste Satz und welcher der zweite Satz ist.',Rn,N,An,ue,Gs="Wenn wir die IDs in <code>input_ids</code> zurück in Worte dekodieren:",Zn,oe,Bn,Me,Ns="dann bekommen wir:",Vn,me,Dn,he,Ss="Wir sehen also wenn es zwei Sätze gibt, dass das Modell erwartet, dass die Inputs die Form ”[CLS] Satz1 [SEP] Satz2 [SEP]” haben. Wenn wir dies mit den <code>token_type_ids</code> abgleichen, erhalten wir:",Gn,be,Nn,ye,Qs="Wie du sehen kannst, haben die Teile der Eingabe, die <code>[CLS] Satz1 [SEP]</code> entsprechen, alle eine Token-Typ-ID von <code>0</code>, während die anderen Teile, die <code>Satz2 [SEP]</code> entsprechen, alle einer Token-Typ-ID von <code>1</code> enthalten.",Sn,fe,Ws="Beachte, dass die Auswahl eines anderen Checkpoints nicht unbedingt die <code>token_type_ids</code> in Ihren tokenisierten Inputs haben (z.B. werden sie nicht zurückgegeben, wenn ein DistilBERT-Modell verwendet wird). Sie werden nur zurückgegeben, wenn das Modell weiß was damit zu tun ist, weil es die Toke-Typ-Ids während des Vortrainings gesehen hat.",Qn,we,Xs='In diesem Fall ist BERT mit Token-Typ-IDs vortrainiert worden, und zusätzlich zu dem maskierten Sprachmodellierungsziel aud <a href="/course/chapter1">Kapitel 1</a>, hat es ein zusätzliches Vorhersageziel namens <em>next sentence prediction</em> (d.h. Vorhersage des nächsten Satzes). Das Ziel dieser Aufgabe ist es, die Beziehung zwischen Satzpaaren zu modellieren.',Wn,je,Es="Bei der Vorhersage des nächsten Satzes werden dem Modell Satzpaare (mit zufällig maskierten Token) bereitgestellt und erwartet, vorherzusagen, ob auf den ersten Satz der zweite Satz folgt. Um die Aufgabe non-trivial zu machen, folgen sich die Hälfte der Sätze in dem Originaldokument, aus dem sie extrahiert wurden, aufeinander, und in der anderen Hälfte stammen die beiden Sätze aus zwei verschiedenen Dokumenten.",Xn,Je,Ys="Im Allgemeinen muss man sich keine Gedanken darüber machen, ob Ihre tokenisierten Inputs <code>token_type_ids</code> enthalten oder nicht: Solange du denselben Checkpoint für den Tokenizer und das Modell verwendest, ist alles in Ordnung, da der Tokenizer weiß, was er dem Modell bereitstellen soll.",En,Te,Fs='Nachdem wir nun gesehen haben, wie unser Tokenizer mit einem Satzpaar umgehen kann, können wir damit unseren gesamten Datensatz tokenisieren: Wie im <a href="/course/chapter2">vorherigen Kapitel</a> können wir dem Tokenizer eine Liste von Satzpaaren einspeisen, indem du ihm die Liste der ersten Sätze und dann die Liste der zweiten Sätze gibst. Dies ist auch kompatibel mit den Optionen zum Padding und Trunkieren, die wir in <a href="/course/chapter2">Kapitel 2</a> gesehen haben. Eine Möglichkeit, den Trainingsdatensatz vorzuverarbeiten, ist also:',Yn,Ue,Fn,ge,Hs='Das funktioniert gut, hat aber den Nachteil, dass ein Dictionary zurückgegeben wird (mit unseren Schlüsselwörtern <code>input_ids</code>, <code>attention_mask</code> und <code>token_type_ids</code> und Werten aus Listen von Listen). Es funktioniert auch nur, wenn du genügend RAM hast, um den gesamten Datensatz während der Tokenisierung zu im RAM zwischen zu speichern (während die Datensätze aus der Bibliothek 🤗 Datasets <a href="https://arrow.apache.org/" rel="nofollow">Apache Arrow</a> Dateien sind, die auf der Festplatte gespeichert sind, sodass nur die gewünschten Samples im RAM geladen sind).',Hn,ke,Ls='Um die Daten als Datensatz zu speichern, verwenden wir die Methode <a href="https://huggingface.co/docs/datasets/package_reference/main_classes#datasets.Dataset.map" rel="nofollow"><code>Dataset.map()</code></a>. Dies gewährt uns zusätzliche Flexibilität, wenn wir zusätzliche Vorverarbeitung als nur die Tokenisierung benötigen. Die <code>map()</code>-Methode funktioniert, indem sie eine Funktion auf jedes Element des Datensatzes anwendet, also definieren wir eine Funktion, die unsere Inputs tokenisiert:',Ln,ze,qn,Ce,qs='Diese Funktion nimmt ein Dictionary (wie die Elemente unseres Datensatzes) und gibt ein neues Dictionary mit den Schlüsselwerten <code>input_ids</code>, <code>attention_mask</code> und <code>token_type_ids</code> zurück. Beachte, dass es auch funktioniert, wenn das <code>example</code>-Dictionary mehrere Beispiele enthält (jeder Schlüsselwert als Liste von Sätzen), da der <code>Tokenizer</code>, wie zuvor gesehen, mit Listen von Satzpaaren arbeitet. Dadurch können wir die Option <code>batched=True</code> in unserem Aufruf von <code>map()</code> verwenden, was die Tokenisierung erheblich beschleunigt. Der <code>tokenizer</code> wurde in Rust geschriebenen und ist in der Bibliothek <a href="https://github.com/huggingface/tokenizers" rel="nofollow">🤗 Tokenizers</a> verfügbar. Dieser Tokenizer kann sehr schnell arbeiten, wenn wir ihm viele Inputs auf einmal zum Verarbeiten geben. Note that we’ve left the <code>padding</code> argument out in our tokenization function for now.',Pn,_e,Ps="Beachte, dass wir das <code>padding</code>-Argument vorerst in unserer Tokenisierungsfunktion ausgelassen haben. Dies liegt daran, dass das Anwenden von Padding auf alle Elemente unserer Daten auf die maximale Länge nicht effizient ist: Es ist besser, die Proben aufzufüllen, wenn wir ein Batch erstellen, da wir dann nur auf die maximale Länge in diesem Batch auffüllen müssen und nicht auf die maximale Länge in den gesamten Datensatz. Dies kann viel Zeit und Rechenleistung sparen, besonders wenn die Eingaben stark variable Längen haben!",Kn,$e,Ks="So wenden wir die Tokenisierungsfunktion auf alle unsere Datensätze gleichzeitig an. In unserem Aufruf von <code>map</code> verwenden wir <code>batched=True</code>, damit die Funktion auf mehrere Elemente des Datensatzes gleichzeitig angewendet wird und nicht auf jedes Element separat. Dies ermöglicht eine schnellere Vorverarbeitung.",On,xe,es,Ie,Os="Die Bibliothek 🤗 Datasets verarbeitet Datensätzen indem sie neue Felder hinzuzufügen, eines für jeden Schlüssel im Dictionary, der von der Vorverarbeitungsfunktion zurückgegeben wird:",ns,ve,ss,Re,et="Du kannst sogar Multiprocessing verwenden, wenn du die Vorverarbeitungsfunktion mit <code>map()</code> anwendest, indem du ein <code>num_proc</code>-Argument übergiebst. Wir haben dies hier nicht getan, weil die 🤗 Tokenizers-Bibliothek bereits mehrere Threads verwendet, um unsere Samples schneller zu tokenisieren. Wenn du keinen schnellen Tokenizer verwendest, der von dieser Bibliothek unterstützt wird, würde dies allerdings die Vorverarbeitung beschleunigen.",ts,Ae,nt="Unsere <code>tokenize_function</code> gibt ein Dictionary mit den Schlüsselwerten <code>input_ids</code>, <code>attention_mask</code> und <code>token_type_ids</code> zurück, also werden diese drei Felder zu allen Splits unseres Datensatzes hinzugefügt. Beachte, dass wir auch vorhandene Felder ändern könnten, wenn unsere Vorverarbeitungsfunktion einen neuen Wert für einen vorhandenen Schlüsselwert in dem Datensatz zurückgegeben hätte, auf den wir <code>map()</code> angewendet haben.",ls,Ze,st="Zuletzt, müssen wir alle Beispiele auf die Länge des längsten Elements aufzufüllen, wenn wir Elemente zusammenfassen – eine Technik, die wir als <em>Dynamisches Padding</em> bezeichnen.",as,Be,is,Ve,rs,tn,De,tt="In der Praxis müssen wir eine Collate-Funktion definieren, die die korrekte Menge an Padding auf die Elemente des Datensatzes anwendet, die wir in einem Batch haben möchten. Glücklicherweise stellt uns die 🤗 Transformers-Bibliothek über <code>DataCollatorWithPadding</code> eine solche Funktion zur Verfügung. Wenn sie instanziert wird, braucht es einen Tokenizer (um zu wissen, welches Padding-token verwendet werden soll und ob das Modell erwartet, dass sich das Padding links oder rechts von den Inputs befindet) und übernimmt alles was wir brauchen:",ps,R,A,ln,Ge,lt="Um dieses neue Werkzeug zu testen, nehmen wir einige Elemente aus den Trainingsdaten, die wir als Batch verwenden möchten. Hier entfernen wir die Spalten <code>idx</code>, <code>sentence1</code> und <code>sentence2</code>, da sie nicht benötigt werden und Strings enthalten (wir können keine Tensoren mit Strings erstellen) und sehen uns die Länge jedes Eintrags im Batch an:",ds,Ne,cs,Se,us,Qe,at="Wenig überraschen erhalten wir Samples unterschiedlicher Länge von 32 bis 67. Dynamisches Padding bedeutet, dass die Elemente in diesem Batch alle auf eine Länge von 67 aufgefüllt werden, die maximale Länge innerhalb des Batches. Ohne dynamisches Auffüllen müssten alle Einträge auf die maximale Länge im gesamten Datensatz oder auf die maximale Länge die das Modell akzeptiert, aufgefüllt werden. Lass uns noch einmal überprüfen, ob unser <code>data_collator</code> den Stapel dynamisch richtig auffüllt:",os,We,Ms,Z,B,an,S,ms,rn,Xe,hs,pn,bs;T=new Zt({props:{fw:j[0]}}),g=new fs({props:{title:"Vorbereitung der Daten",local:"vorbereitung-der-daten",headingTag:"h1"}});const it=[Dt,Vt],Ee=[];function rt(e,n){return e[0]==="pt"?0:1}J=rt(j),z=Ee[J]=it[J](j);const pt=[Nt,Gt],Ye=[];function dt(e,n){return e[0]==="pt"?0:1}C=dt(j),_=Ye[C]=pt[C](j),X=new fs({props:{title:"Laden eines Datensatzes vom Hub",local:"laden-eines-datensatzes-vom-hub",headingTag:"h3"}});const ct=[Qt,St],Fe=[];function ut(e,n){return e[0]==="pt"?0:1}$=ut(j),x=Fe[$]=ct[$](j),F=new U({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}}),H=new U({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}}),K=new U({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}}),O=new U({props:{code:"JTdCJ2lkeCclM0ElMjAwJTJDJTBBJTIwJ2xhYmVsJyUzQSUyMDElMkMlMEElMjAnc2VudGVuY2UxJyUzQSUyMCdBbXJvemklMjBhY2N1c2VkJTIwaGlzJTIwYnJvdGhlciUyMCUyQyUyMHdob20lMjBoZSUyMGNhbGxlZCUyMCUyMiUyMHRoZSUyMHdpdG5lc3MlMjAlMjIlMjAlMkMlMjBvZiUyMGRlbGliZXJhdGVseSUyMGRpc3RvcnRpbmclMjBoaXMlMjBldmlkZW5jZSUyMC4nJTJDJTBBJTIwJ3NlbnRlbmNlMiclM0ElMjAnUmVmZXJyaW5nJTIwdG8lMjBoaW0lMjBhcyUyMG9ubHklMjAlMjIlMjB0aGUlMjB3aXRuZXNzJTIwJTIyJTIwJTJDJTIwQW1yb3ppJTIwYWNjdXNlZCUyMGhpcyUyMGJyb3RoZXIlMjBvZiUyMGRlbGliZXJhdGVseSUyMGRpc3RvcnRpbmclMjBoaXMlMjBldmlkZW5jZSUyMC4nJTdE",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-string">'sentence2'</span>: <span class="hljs-string">'Referring to him as only " the witness " , Amrozi accused his brother of deliberately distorting his evidence .'</span>}`,wrap:!1}}),ne=new U({props:{code:"cmF3X3RyYWluX2RhdGFzZXQuZmVhdHVyZXM=",highlighted:"raw_train_dataset.features",wrap:!1}}),se=new U({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}}),G=new ks({props:{$$slots:{default:[Wt]},$$scope:{ctx:j}}}),le=new fs({props:{title:"Vorverarbeitung eines Datensatzes",local:"vorverarbeitung-eines-datensatzes",headingTag:"h3"}});const ot=[Et,Xt],He=[];function Mt(e,n){return e[0]==="pt"?0:1}I=Mt(j),v=He[I]=ot[I](j),ie=new U({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}}),pe=new U({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUyMlRoaXMlMjBpcyUyMHRoZSUyMGZpcnN0JTIwc2VudGVuY2UuJTIyJTJDJTIwJTIyVGhpcyUyMGlzJTIwdGhlJTIwc2Vjb25kJTIwb25lLiUyMiklMEFpbnB1dHM=",highlighted:`inputs = tokenizer(<span class="hljs-string">"This is the first sentence."</span>, <span class="hljs-string">"This is the second one."</span>) | |
| inputs`,wrap:!1}}),de=new U({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}}),N=new ks({props:{$$slots:{default:[Yt]},$$scope:{ctx:j}}}),oe=new U({props:{code:"dG9rZW5pemVyLmNvbnZlcnRfaWRzX3RvX3Rva2VucyhpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQp",highlighted:'tokenizer.convert_ids_to_tokens(inputs[<span class="hljs-string">"input_ids"</span>])',wrap:!1}}),me=new U({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}}),be=new U({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}}),Ue=new U({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}}),ze=new U({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}}),xe=new U({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}}),ve=new U({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}}),Be=new fs({props:{title:"Dynamisches Padding",local:"dynamisches-padding",headingTag:"h3"}}),Ve=new dn({props:{id:"7q5NyFT8REg"}});function mt(e,n){return e[0]==="pt"?Ht:Ft}let ys=mt(j),D=ys(j);const ht=[qt,Lt],Le=[];function bt(e,n){return e[0]==="pt"?0:1}R=bt(j),A=Le[R]=ht[R](j),Ne=new U({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}}),Se=new U({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}}),We=new U({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 yt=[Kt,Pt],qe=[];function ft(e,n){return e[0]==="tf"?0:1}Z=ft(j),B=qe[Z]=yt[Z](j),S=new ks({props:{$$slots:{default:[Ot]},$$scope:{ctx:j}}});let k=j[0]==="tf"&&kt();return Xe=new Bt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/de/chapter3/2.mdx"}}),{c(){s=M("meta"),i=r(),t=M("p"),d=r(),b(T.$$.fragment),c=r(),b(g.$$.fragment),V=r(),z.c(),Oe=r(),_.c(),en=r(),Q=M("p"),Q.textContent=Cs,cn=r(),W=M("p"),W.innerHTML=_s,un=r(),b(X.$$.fragment),on=r(),x.c(),nn=r(),E=M("p"),E.innerHTML=$s,Mn=r(),Y=M("p"),Y.textContent=xs,mn=It(` | |
| <Tipp> | |
| ⚠️ ** Warnung** Stelle sicher, dass \`datasets\` installiert ist, indem du \`pip install datasets\` ausführst. Dann lade den MRPC-Datensatz und drucke ihn aus, um zu sehen, was er enthält. | |
| </Tipp> | |
| `),b(F.$$.fragment),hn=r(),b(H.$$.fragment),bn=r(),L=M("p"),L.innerHTML=Is,yn=r(),q=M("p"),q.innerHTML=vs,fn=r(),P=M("p"),P.innerHTML=Rs,wn=r(),b(K.$$.fragment),jn=r(),b(O.$$.fragment),Jn=r(),ee=M("p"),ee.innerHTML=As,Tn=r(),b(ne.$$.fragment),Un=r(),b(se.$$.fragment),gn=r(),te=M("p"),te.innerHTML=Zs,kn=r(),b(G.$$.fragment),zn=r(),b(le.$$.fragment),Cn=r(),v.c(),sn=r(),ae=M("p"),ae.innerHTML=Bs,_n=r(),b(ie.$$.fragment),$n=r(),re=M("p"),re.textContent=Vs,xn=r(),b(pe.$$.fragment),In=r(),b(de.$$.fragment),vn=r(),ce=M("p"),ce.innerHTML=Ds,Rn=r(),b(N.$$.fragment),An=r(),ue=M("p"),ue.innerHTML=Gs,Zn=r(),b(oe.$$.fragment),Bn=r(),Me=M("p"),Me.textContent=Ns,Vn=r(),b(me.$$.fragment),Dn=r(),he=M("p"),he.innerHTML=Ss,Gn=r(),b(be.$$.fragment),Nn=r(),ye=M("p"),ye.innerHTML=Qs,Sn=r(),fe=M("p"),fe.innerHTML=Ws,Qn=r(),we=M("p"),we.innerHTML=Xs,Wn=r(),je=M("p"),je.textContent=Es,Xn=r(),Je=M("p"),Je.innerHTML=Ys,En=r(),Te=M("p"),Te.innerHTML=Fs,Yn=r(),b(Ue.$$.fragment),Fn=r(),ge=M("p"),ge.innerHTML=Hs,Hn=r(),ke=M("p"),ke.innerHTML=Ls,Ln=r(),b(ze.$$.fragment),qn=r(),Ce=M("p"),Ce.innerHTML=qs,Pn=r(),_e=M("p"),_e.innerHTML=Ps,Kn=r(),$e=M("p"),$e.innerHTML=Ks,On=r(),b(xe.$$.fragment),es=r(),Ie=M("p"),Ie.textContent=Os,ns=r(),b(ve.$$.fragment),ss=r(),Re=M("p"),Re.innerHTML=et,ts=r(),Ae=M("p"),Ae.innerHTML=nt,ls=r(),Ze=M("p"),Ze.innerHTML=st,as=r(),b(Be.$$.fragment),is=r(),b(Ve.$$.fragment),rs=r(),D.c(),tn=r(),De=M("p"),De.innerHTML=tt,ps=r(),A.c(),ln=r(),Ge=M("p"),Ge.innerHTML=lt,ds=r(),b(Ne.$$.fragment),cs=r(),b(Se.$$.fragment),us=r(),Qe=M("p"),Qe.innerHTML=at,os=r(),b(We.$$.fragment),Ms=r(),B.c(),an=r(),b(S.$$.fragment),ms=r(),k&&k.c(),rn=r(),b(Xe.$$.fragment),hs=r(),pn=M("p"),this.h()},l(e){const n=vt("svelte-u9bgzb",document.head);s=m(n,"META",{name:!0,content:!0}),n.forEach(l),i=p(e),t=m(e,"P",{}),Ut(t).forEach(l),d=p(e),y(T.$$.fragment,e),c=p(e),y(g.$$.fragment,e),V=p(e),z.l(e),Oe=p(e),_.l(e),en=p(e),Q=m(e,"P",{"data-svelte-h":!0}),h(Q)!=="svelte-1e042rz"&&(Q.textContent=Cs),cn=p(e),W=m(e,"P",{"data-svelte-h":!0}),h(W)!=="svelte-15b53wd"&&(W.innerHTML=_s),un=p(e),y(X.$$.fragment,e),on=p(e),x.l(e),nn=p(e),E=m(e,"P",{"data-svelte-h":!0}),h(E)!=="svelte-m2s4wt"&&(E.innerHTML=$s),Mn=p(e),Y=m(e,"P",{"data-svelte-h":!0}),h(Y)!=="svelte-1vg19gw"&&(Y.textContent=xs),mn=Rt(e,` | |
| <Tipp> | |
| ⚠️ ** Warnung** Stelle sicher, dass \`datasets\` installiert ist, indem du \`pip install datasets\` ausführst. Dann lade den MRPC-Datensatz und drucke ihn aus, um zu sehen, was er enthält. | |
| </Tipp> | |
| `),y(F.$$.fragment,e),hn=p(e),y(H.$$.fragment,e),bn=p(e),L=m(e,"P",{"data-svelte-h":!0}),h(L)!=="svelte-a6iaou"&&(L.innerHTML=Is),yn=p(e),q=m(e,"P",{"data-svelte-h":!0}),h(q)!=="svelte-1a1p8ry"&&(q.innerHTML=vs),fn=p(e),P=m(e,"P",{"data-svelte-h":!0}),h(P)!=="svelte-1ckjw7j"&&(P.innerHTML=Rs),wn=p(e),y(K.$$.fragment,e),jn=p(e),y(O.$$.fragment,e),Jn=p(e),ee=m(e,"P",{"data-svelte-h":!0}),h(ee)!=="svelte-3c7hu5"&&(ee.innerHTML=As),Tn=p(e),y(ne.$$.fragment,e),Un=p(e),y(se.$$.fragment,e),gn=p(e),te=m(e,"P",{"data-svelte-h":!0}),h(te)!=="svelte-1d387e1"&&(te.innerHTML=Zs),kn=p(e),y(G.$$.fragment,e),zn=p(e),y(le.$$.fragment,e),Cn=p(e),v.l(e),sn=p(e),ae=m(e,"P",{"data-svelte-h":!0}),h(ae)!=="svelte-1uteodl"&&(ae.innerHTML=Bs),_n=p(e),y(ie.$$.fragment,e),$n=p(e),re=m(e,"P",{"data-svelte-h":!0}),h(re)!=="svelte-1c4fbl2"&&(re.textContent=Vs),xn=p(e),y(pe.$$.fragment,e),In=p(e),y(de.$$.fragment,e),vn=p(e),ce=m(e,"P",{"data-svelte-h":!0}),h(ce)!=="svelte-1i5rbbz"&&(ce.innerHTML=Ds),Rn=p(e),y(N.$$.fragment,e),An=p(e),ue=m(e,"P",{"data-svelte-h":!0}),h(ue)!=="svelte-1ib8m8w"&&(ue.innerHTML=Gs),Zn=p(e),y(oe.$$.fragment,e),Bn=p(e),Me=m(e,"P",{"data-svelte-h":!0}),h(Me)!=="svelte-2npq97"&&(Me.textContent=Ns),Vn=p(e),y(me.$$.fragment,e),Dn=p(e),he=m(e,"P",{"data-svelte-h":!0}),h(he)!=="svelte-463sul"&&(he.innerHTML=Ss),Gn=p(e),y(be.$$.fragment,e),Nn=p(e),ye=m(e,"P",{"data-svelte-h":!0}),h(ye)!=="svelte-3sjiry"&&(ye.innerHTML=Qs),Sn=p(e),fe=m(e,"P",{"data-svelte-h":!0}),h(fe)!=="svelte-1rme24s"&&(fe.innerHTML=Ws),Qn=p(e),we=m(e,"P",{"data-svelte-h":!0}),h(we)!=="svelte-js11gl"&&(we.innerHTML=Xs),Wn=p(e),je=m(e,"P",{"data-svelte-h":!0}),h(je)!=="svelte-123wf7x"&&(je.textContent=Es),Xn=p(e),Je=m(e,"P",{"data-svelte-h":!0}),h(Je)!=="svelte-4syt52"&&(Je.innerHTML=Ys),En=p(e),Te=m(e,"P",{"data-svelte-h":!0}),h(Te)!=="svelte-1pia9y9"&&(Te.innerHTML=Fs),Yn=p(e),y(Ue.$$.fragment,e),Fn=p(e),ge=m(e,"P",{"data-svelte-h":!0}),h(ge)!=="svelte-tcxt3s"&&(ge.innerHTML=Hs),Hn=p(e),ke=m(e,"P",{"data-svelte-h":!0}),h(ke)!=="svelte-1p79kq7"&&(ke.innerHTML=Ls),Ln=p(e),y(ze.$$.fragment,e),qn=p(e),Ce=m(e,"P",{"data-svelte-h":!0}),h(Ce)!=="svelte-lew21x"&&(Ce.innerHTML=qs),Pn=p(e),_e=m(e,"P",{"data-svelte-h":!0}),h(_e)!=="svelte-ipuga6"&&(_e.innerHTML=Ps),Kn=p(e),$e=m(e,"P",{"data-svelte-h":!0}),h($e)!=="svelte-1wzlqwj"&&($e.innerHTML=Ks),On=p(e),y(xe.$$.fragment,e),es=p(e),Ie=m(e,"P",{"data-svelte-h":!0}),h(Ie)!=="svelte-lzyu20"&&(Ie.textContent=Os),ns=p(e),y(ve.$$.fragment,e),ss=p(e),Re=m(e,"P",{"data-svelte-h":!0}),h(Re)!=="svelte-ockrf0"&&(Re.innerHTML=et),ts=p(e),Ae=m(e,"P",{"data-svelte-h":!0}),h(Ae)!=="svelte-aoxc74"&&(Ae.innerHTML=nt),ls=p(e),Ze=m(e,"P",{"data-svelte-h":!0}),h(Ze)!=="svelte-1ybrrac"&&(Ze.innerHTML=st),as=p(e),y(Be.$$.fragment,e),is=p(e),y(Ve.$$.fragment,e),rs=p(e),D.l(e),tn=p(e),De=m(e,"P",{"data-svelte-h":!0}),h(De)!=="svelte-17gnwpb"&&(De.innerHTML=tt),ps=p(e),A.l(e),ln=p(e),Ge=m(e,"P",{"data-svelte-h":!0}),h(Ge)!=="svelte-m9ati7"&&(Ge.innerHTML=lt),ds=p(e),y(Ne.$$.fragment,e),cs=p(e),y(Se.$$.fragment,e),us=p(e),Qe=m(e,"P",{"data-svelte-h":!0}),h(Qe)!=="svelte-gc87ue"&&(Qe.innerHTML=at),os=p(e),y(We.$$.fragment,e),Ms=p(e),B.l(e),an=p(e),y(S.$$.fragment,e),ms=p(e),k&&k.l(e),rn=p(e),y(Xe.$$.fragment,e),hs=p(e),pn=m(e,"P",{}),Ut(pn).forEach(l),this.h()},h(){gt(s,"name","hf:doc:metadata"),gt(s,"content",nl)},m(e,n){At(document.head,s),a(e,i,n),a(e,t,n),a(e,d,n),f(T,e,n),a(e,c,n),f(g,e,n),a(e,V,n),Ee[J].m(e,n),a(e,Oe,n),Ye[C].m(e,n),a(e,en,n),a(e,Q,n),a(e,cn,n),a(e,W,n),a(e,un,n),f(X,e,n),a(e,on,n),Fe[$].m(e,n),a(e,nn,n),a(e,E,n),a(e,Mn,n),a(e,Y,n),a(e,mn,n),f(F,e,n),a(e,hn,n),f(H,e,n),a(e,bn,n),a(e,L,n),a(e,yn,n),a(e,q,n),a(e,fn,n),a(e,P,n),a(e,wn,n),f(K,e,n),a(e,jn,n),f(O,e,n),a(e,Jn,n),a(e,ee,n),a(e,Tn,n),f(ne,e,n),a(e,Un,n),f(se,e,n),a(e,gn,n),a(e,te,n),a(e,kn,n),f(G,e,n),a(e,zn,n),f(le,e,n),a(e,Cn,n),He[I].m(e,n),a(e,sn,n),a(e,ae,n),a(e,_n,n),f(ie,e,n),a(e,$n,n),a(e,re,n),a(e,xn,n),f(pe,e,n),a(e,In,n),f(de,e,n),a(e,vn,n),a(e,ce,n),a(e,Rn,n),f(N,e,n),a(e,An,n),a(e,ue,n),a(e,Zn,n),f(oe,e,n),a(e,Bn,n),a(e,Me,n),a(e,Vn,n),f(me,e,n),a(e,Dn,n),a(e,he,n),a(e,Gn,n),f(be,e,n),a(e,Nn,n),a(e,ye,n),a(e,Sn,n),a(e,fe,n),a(e,Qn,n),a(e,we,n),a(e,Wn,n),a(e,je,n),a(e,Xn,n),a(e,Je,n),a(e,En,n),a(e,Te,n),a(e,Yn,n),f(Ue,e,n),a(e,Fn,n),a(e,ge,n),a(e,Hn,n),a(e,ke,n),a(e,Ln,n),f(ze,e,n),a(e,qn,n),a(e,Ce,n),a(e,Pn,n),a(e,_e,n),a(e,Kn,n),a(e,$e,n),a(e,On,n),f(xe,e,n),a(e,es,n),a(e,Ie,n),a(e,ns,n),f(ve,e,n),a(e,ss,n),a(e,Re,n),a(e,ts,n),a(e,Ae,n),a(e,ls,n),a(e,Ze,n),a(e,as,n),f(Be,e,n),a(e,is,n),f(Ve,e,n),a(e,rs,n),D.m(e,n),a(e,tn,n),a(e,De,n),a(e,ps,n),Le[R].m(e,n),a(e,ln,n),a(e,Ge,n),a(e,ds,n),f(Ne,e,n),a(e,cs,n),f(Se,e,n),a(e,us,n),a(e,Qe,n),a(e,os,n),f(We,e,n),a(e,Ms,n),qe[Z].m(e,n),a(e,an,n),f(S,e,n),a(e,ms,n),k&&k.m(e,n),a(e,rn,n),f(Xe,e,n),a(e,hs,n),a(e,pn,n),bs=!0},p(e,[n]){const wt={};n&1&&(wt.fw=e[0]),T.$set(wt);let ws=J;J=rt(e),J!==ws&&(Ke(),o(Ee[ws],1,1,()=>{Ee[ws]=null}),Pe(),z=Ee[J],z||(z=Ee[J]=it[J](e),z.c()),u(z,1),z.m(Oe.parentNode,Oe));let js=C;C=dt(e),C!==js&&(Ke(),o(Ye[js],1,1,()=>{Ye[js]=null}),Pe(),_=Ye[C],_||(_=Ye[C]=pt[C](e),_.c()),u(_,1),_.m(en.parentNode,en));let Js=$;$=ut(e),$!==Js&&(Ke(),o(Fe[Js],1,1,()=>{Fe[Js]=null}),Pe(),x=Fe[$],x||(x=Fe[$]=ct[$](e),x.c()),u(x,1),x.m(nn.parentNode,nn));const jt={};n&2&&(jt.$$scope={dirty:n,ctx:e}),G.$set(jt);let Ts=I;I=Mt(e),I!==Ts&&(Ke(),o(He[Ts],1,1,()=>{He[Ts]=null}),Pe(),v=He[I],v||(v=He[I]=ot[I](e),v.c()),u(v,1),v.m(sn.parentNode,sn));const Jt={};n&2&&(Jt.$$scope={dirty:n,ctx:e}),N.$set(Jt),ys!==(ys=mt(e))&&(D.d(1),D=ys(e),D&&(D.c(),D.m(tn.parentNode,tn)));let Us=R;R=bt(e),R!==Us&&(Ke(),o(Le[Us],1,1,()=>{Le[Us]=null}),Pe(),A=Le[R],A||(A=Le[R]=ht[R](e),A.c()),u(A,1),A.m(ln.parentNode,ln));let gs=Z;Z=ft(e),Z!==gs&&(Ke(),o(qe[gs],1,1,()=>{qe[gs]=null}),Pe(),B=qe[Z],B||(B=qe[Z]=yt[Z](e),B.c()),u(B,1),B.m(an.parentNode,an));const Tt={};n&2&&(Tt.$$scope={dirty:n,ctx:e}),S.$set(Tt),e[0]==="tf"?k?n&1&&u(k,1):(k=kt(),k.c(),u(k,1),k.m(rn.parentNode,rn)):k&&(Ke(),o(k,1,1,()=>{k=null}),Pe())},i(e){bs||(u(T.$$.fragment,e),u(g.$$.fragment,e),u(z),u(_),u(X.$$.fragment,e),u(x),u(F.$$.fragment,e),u(H.$$.fragment,e),u(K.$$.fragment,e),u(O.$$.fragment,e),u(ne.$$.fragment,e),u(se.$$.fragment,e),u(G.$$.fragment,e),u(le.$$.fragment,e),u(v),u(ie.$$.fragment,e),u(pe.$$.fragment,e),u(de.$$.fragment,e),u(N.$$.fragment,e),u(oe.$$.fragment,e),u(me.$$.fragment,e),u(be.$$.fragment,e),u(Ue.$$.fragment,e),u(ze.$$.fragment,e),u(xe.$$.fragment,e),u(ve.$$.fragment,e),u(Be.$$.fragment,e),u(Ve.$$.fragment,e),u(A),u(Ne.$$.fragment,e),u(Se.$$.fragment,e),u(We.$$.fragment,e),u(B),u(S.$$.fragment,e),u(k),u(Xe.$$.fragment,e),bs=!0)},o(e){o(T.$$.fragment,e),o(g.$$.fragment,e),o(z),o(_),o(X.$$.fragment,e),o(x),o(F.$$.fragment,e),o(H.$$.fragment,e),o(K.$$.fragment,e),o(O.$$.fragment,e),o(ne.$$.fragment,e),o(se.$$.fragment,e),o(G.$$.fragment,e),o(le.$$.fragment,e),o(v),o(ie.$$.fragment,e),o(pe.$$.fragment,e),o(de.$$.fragment,e),o(N.$$.fragment,e),o(oe.$$.fragment,e),o(me.$$.fragment,e),o(be.$$.fragment,e),o(Ue.$$.fragment,e),o(ze.$$.fragment,e),o(xe.$$.fragment,e),o(ve.$$.fragment,e),o(Be.$$.fragment,e),o(Ve.$$.fragment,e),o(A),o(Ne.$$.fragment,e),o(Se.$$.fragment,e),o(We.$$.fragment,e),o(B),o(S.$$.fragment,e),o(k),o(Xe.$$.fragment,e),bs=!1},d(e){e&&(l(i),l(t),l(d),l(c),l(V),l(Oe),l(en),l(Q),l(cn),l(W),l(un),l(on),l(nn),l(E),l(Mn),l(Y),l(mn),l(hn),l(bn),l(L),l(yn),l(q),l(fn),l(P),l(wn),l(jn),l(Jn),l(ee),l(Tn),l(Un),l(gn),l(te),l(kn),l(zn),l(Cn),l(sn),l(ae),l(_n),l($n),l(re),l(xn),l(In),l(vn),l(ce),l(Rn),l(An),l(ue),l(Zn),l(Bn),l(Me),l(Vn),l(Dn),l(he),l(Gn),l(Nn),l(ye),l(Sn),l(fe),l(Qn),l(we),l(Wn),l(je),l(Xn),l(Je),l(En),l(Te),l(Yn),l(Fn),l(ge),l(Hn),l(ke),l(Ln),l(qn),l(Ce),l(Pn),l(_e),l(Kn),l($e),l(On),l(es),l(Ie),l(ns),l(ss),l(Re),l(ts),l(Ae),l(ls),l(Ze),l(as),l(is),l(rs),l(tn),l(De),l(ps),l(ln),l(Ge),l(ds),l(cs),l(us),l(Qe),l(os),l(Ms),l(an),l(ms),l(rn),l(hs),l(pn)),l(s),w(T,e),w(g,e),Ee[J].d(e),Ye[C].d(e),w(X,e),Fe[$].d(e),w(F,e),w(H,e),w(K,e),w(O,e),w(ne,e),w(se,e),w(G,e),w(le,e),He[I].d(e),w(ie,e),w(pe,e),w(de,e),w(N,e),w(oe,e),w(me,e),w(be,e),w(Ue,e),w(ze,e),w(xe,e),w(ve,e),w(Be,e),w(Ve,e),D.d(e),Le[R].d(e),w(Ne,e),w(Se,e),w(We,e),qe[Z].d(e),w(S,e),k&&k.d(e),w(Xe,e)}}}const nl='{"title":"Vorbereitung der Daten","local":"vorbereitung-der-daten","sections":[{"title":"Laden eines Datensatzes vom Hub","local":"laden-eines-datensatzes-vom-hub","sections":[],"depth":3},{"title":"Vorverarbeitung eines Datensatzes","local":"vorverarbeitung-eines-datensatzes","sections":[],"depth":3},{"title":"Dynamisches Padding","local":"dynamisches-padding","sections":[],"depth":3}],"depth":1}';function sl(j,s,i){let t="pt";return _t(()=>{const d=new URLSearchParams(window.location.search);i(0,t=d.get("fw")||"pt")}),[t]}class ul extends $t{constructor(s){super(),xt(this,s,sl,el,Ct,{})}}export{ul as component}; | |
Xet Storage Details
- Size:
- 65.4 kB
- Xet hash:
- 64a9a4008d6d13e07241623356bceedbf8ee502cc250427bfdb85baa34521ea8
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.