Buckets:
| import{s as vl,o as Al}from"../chunks/scheduler.893fe8c9.js";import{S as Cl,i as Nl,e as U,s as i,c as d,h as Ql,a as h,d as a,b as o,f as Il,g as b,j as J,k as $s,l as Vl,m as u,n as j,o as c,q as G,t as M,p as y,r as H}from"../chunks/index.2d09ebb4.js";import{C as El,H as He,E as zl}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.f0c9d2b1.js";import{Y as $l}from"../chunks/Youtube.b7012d06.js";import{C as T}from"../chunks/CodeBlock.a52adb5b.js";import{C as Zl}from"../chunks/CourseFloatingBanner.2900b001.js";import{F as Wl}from"../chunks/FrameworkSwitchCourse.f49b9dc4.js";function Bl(f){let n,p;return n=new Zl({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section5_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter2/section5_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section5_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter2/section5_tf.ipynb"}]}}),{c(){d(n.$$.fragment)},l(s){b(n.$$.fragment,s)},m(s,r){j(n,s,r),p=!0},i(s){p||(M(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){y(n,s)}}}function Rl(f){let n,p;return n=new Zl({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section5_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter2/section5_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section5_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter2/section5_pt.ipynb"}]}}),{c(){d(n.$$.fragment)},l(s){b(n.$$.fragment,s)},m(s,r){j(n,s,r),p=!0},i(s){p||(M(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){y(n,s)}}}function Gl(f){let n,p;return n=new $l({props:{id:"ROxrFOEbsQE"}}),{c(){d(n.$$.fragment)},l(s){b(n.$$.fragment,s)},m(s,r){j(n,s,r),p=!0},i(s){p||(M(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){y(n,s)}}}function Hl(f){let n,p;return n=new $l({props:{id:"M6adb1j2jPI"}}),{c(){d(n.$$.fragment)},l(s){b(n.$$.fragment,s)},m(s,r){j(n,s,r),p=!0},i(s){p||(M(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){y(n,s)}}}function ql(f){let n,p,s,r;return n=new T({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBJTBBc2VxdWVuY2UlMjAlM0QlMjAlMjJJJ3ZlJTIwYmVlbiUyMHdhaXRpbmclMjBmb3IlMjBhJTIwSHVnZ2luZ0ZhY2UlMjBjb3Vyc2UlMjBteSUyMHdob2xlJTIwbGlmZS4lMjIlMEElMjMlMjBKJ2FpJTIwYXR0ZW5kdSUyMHVuJTIwY291cnMlMjBkJUUyJTgwJTk5SHVnZ2luZ0ZhY2UlMjB0b3V0ZSUyMG1hJTIwdmllLiUwQSUwQXRva2VucyUyMCUzRCUyMHRva2VuaXplci50b2tlbml6ZShzZXF1ZW5jZSklMEFpZHMlMjAlM0QlMjB0b2tlbml6ZXIuY29udmVydF90b2tlbnNfdG9faWRzKHRva2VucyklMEFpbnB1dF9pZHMlMjAlM0QlMjB0Zi5jb25zdGFudChpZHMpJTBBJTIzJTIwVGhpcyUyMGxpbmUlMjB3aWxsJTIwZmFpbC4lMEFtb2RlbChpbnB1dF9pZHMp",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForSequenceClassification | |
| checkpoint = <span class="hljs-string">"distilbert-base-uncased-finetuned-sst-2-english"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
| model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| sequence = <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 d’HuggingFace toute ma vie.</span> | |
| tokens = tokenizer.tokenize(sequence) | |
| ids = tokenizer.convert_tokens_to_ids(tokens) | |
| input_ids = tf.constant(ids) | |
| <span class="hljs-comment"># This line will fail.</span> | |
| model(input_ids)`,wrap:!1}}),s=new T({props:{code:"SW52YWxpZEFyZ3VtZW50RXJyb3IlM0ElMjBJbnB1dCUyMHRvJTIwcmVzaGFwZSUyMGlzJTIwYSUyMHRlbnNvciUyMHdpdGglMjAxNCUyMHZhbHVlcyUyQyUyMGJ1dCUyMHRoZSUyMHJlcXVlc3RlZCUyMHNoYXBlJTIwaGFzJTIwMTk2JTIwJTVCT3AlM0FSZXNoYXBlJTVE",highlighted:'InvalidArgumentError: Input to reshape <span class="hljs-keyword">is</span> a tensor <span class="hljs-keyword">with</span> <span class="hljs-number">14</span> values, but the requested shape has <span class="hljs-number">196</span> [Op:Reshape]',wrap:!1}}),{c(){d(n.$$.fragment),p=i(),d(s.$$.fragment)},l(l){b(n.$$.fragment,l),p=o(l),b(s.$$.fragment,l)},m(l,m){j(n,l,m),u(l,p,m),j(s,l,m),r=!0},i(l){r||(M(n.$$.fragment,l),M(s.$$.fragment,l),r=!0)},o(l){c(n.$$.fragment,l),c(s.$$.fragment,l),r=!1},d(l){l&&a(p),y(n,l),y(s,l)}}}function Xl(f){let n,p,s,r;return n=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQtZmluZXR1bmVkLXNzdC0yLWVuZ2xpc2glMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCklMEElMEFzZXF1ZW5jZSUyMCUzRCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUwQSUyMyUyMEonYWklMjBhdHRlbmR1JTIwdW4lMjBjb3VycyUyMGQlRTIlODAlOTlIdWdnaW5nRmFjZSUyMHRvdXRlJTIwbWElMjB2aWUuJTBBJTBBdG9rZW5zJTIwJTNEJTIwdG9rZW5pemVyLnRva2VuaXplKHNlcXVlbmNlKSUwQWlkcyUyMCUzRCUyMHRva2VuaXplci5jb252ZXJ0X3Rva2Vuc190b19pZHModG9rZW5zKSUwQWlucHV0X2lkcyUyMCUzRCUyMHRvcmNoLnRlbnNvcihpZHMpJTBBJTIzJTIwQ2V0dGUlMjBsaWduZSUyMHZhJTIwJUMzJUE5Y2hvdWVyLiUwQW1vZGVsKGlucHV0X2lkcyk=",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModelForSequenceClassification | |
| checkpoint = <span class="hljs-string">"distilbert-base-uncased-finetuned-sst-2-english"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
| model = AutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| sequence = <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 d’HuggingFace toute ma vie.</span> | |
| tokens = tokenizer.tokenize(sequence) | |
| ids = tokenizer.convert_tokens_to_ids(tokens) | |
| input_ids = torch.tensor(ids) | |
| <span class="hljs-comment"># Cette ligne va échouer.</span> | |
| model(input_ids)`,wrap:!1}}),s=new T({props:{code:"SW5kZXhFcnJvciUzQSUyMERpbWVuc2lvbiUyMG91dCUyMG9mJTIwcmFuZ2UlMjAoZXhwZWN0ZWQlMjB0byUyMGJlJTIwaW4lMjByYW5nZSUyMG9mJTIwJTVCLTElMkMlMjAwJTVEJTJDJTIwYnV0JTIwZ290JTIwMSk=",highlighted:'IndexError: Dimension out of <span class="hljs-built_in">range</span> (expected to be <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span> of [-<span class="hljs-number">1</span>, <span class="hljs-number">0</span>], but got <span class="hljs-number">1</span>)',wrap:!1}}),{c(){d(n.$$.fragment),p=i(),d(s.$$.fragment)},l(l){b(n.$$.fragment,l),p=o(l),b(s.$$.fragment,l)},m(l,m){j(n,l,m),u(l,p,m),j(s,l,m),r=!0},i(l){r||(M(n.$$.fragment,l),M(s.$$.fragment,l),r=!0)},o(l){c(n.$$.fragment,l),c(s.$$.fragment,l),r=!1},d(l){l&&a(p),y(n,l),y(s,l)}}}function Dl(f){let n,p,s,r;return n=new T({props:{code:"dG9rZW5pemVkX2lucHV0cyUyMCUzRCUyMHRva2VuaXplcihzZXF1ZW5jZSUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIydGYlMjIpJTBBcHJpbnQodG9rZW5pemVkX2lucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCk=",highlighted:`tokenized_inputs = tokenizer(sequence, return_tensors=<span class="hljs-string">"tf"</span>) | |
| <span class="hljs-built_in">print</span>(tokenized_inputs[<span class="hljs-string">"input_ids"</span>])`,wrap:!1}}),s=new T({props:{code:"JTNDdGYuVGVuc29yJTNBJTIwc2hhcGUlM0QoMSUyQyUyMDE2KSUyQyUyMGR0eXBlJTNEaW50MzIlMkMlMjBudW1weSUzRCUwQWFycmF5KCU1QiU1QiUyMCUyMDEwMSUyQyUyMCUyMDEwNDUlMkMlMjAlMjAxMDA1JTJDJTIwJTIwMjMxMCUyQyUyMCUyMDIwNDIlMkMlMjAlMjAzNDAzJTJDJTIwJTIwMjAwNSUyQyUyMCUyMDEwMzclMkMlMjAxNzY2MiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDEyMTcyJTJDJTIwJTIwMjYwNyUyQyUyMCUyMDIwMjYlMkMlMjAlMjAyODc4JTJDJTIwJTIwMjE2NiUyQyUyMCUyMDEwMTIlMkMlMjAlMjAlMjAxMDIlNUQlNUQlMkMlMjBkdHlwZSUzRGludDMyKSUzRQ==",highlighted:`<tf.Tensor: shape=(<span class="hljs-number">1</span>, <span class="hljs-number">16</span>), dtype=int32, numpy= | |
| array([[ <span class="hljs-number">101</span>, <span class="hljs-number">1045</span>, <span class="hljs-number">1005</span>, <span class="hljs-number">2310</span>, <span class="hljs-number">2042</span>, <span class="hljs-number">3403</span>, <span class="hljs-number">2005</span>, <span class="hljs-number">1037</span>, <span class="hljs-number">17662</span>, | |
| <span class="hljs-number">12172</span>, <span class="hljs-number">2607</span>, <span class="hljs-number">2026</span>, <span class="hljs-number">2878</span>, <span class="hljs-number">2166</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>]], dtype=int32)>`,wrap:!1}}),{c(){d(n.$$.fragment),p=i(),d(s.$$.fragment)},l(l){b(n.$$.fragment,l),p=o(l),b(s.$$.fragment,l)},m(l,m){j(n,l,m),u(l,p,m),j(s,l,m),r=!0},i(l){r||(M(n.$$.fragment,l),M(s.$$.fragment,l),r=!0)},o(l){c(n.$$.fragment,l),c(s.$$.fragment,l),r=!1},d(l){l&&a(p),y(n,l),y(s,l)}}}function xl(f){let n,p,s,r;return n=new T({props:{code:"dG9rZW5pemVkX2lucHV0cyUyMCUzRCUyMHRva2VuaXplcihzZXF1ZW5jZSUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBcHJpbnQodG9rZW5pemVkX2lucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCk=",highlighted:`tokenized_inputs = tokenizer(sequence, return_tensors=<span class="hljs-string">"pt"</span>) | |
| <span class="hljs-built_in">print</span>(tokenized_inputs[<span class="hljs-string">"input_ids"</span>])`,wrap:!1}}),s=new T({props:{code:"dGVuc29yKCU1QiU1QiUyMCUyMDEwMSUyQyUyMCUyMDEwNDUlMkMlMjAlMjAxMDA1JTJDJTIwJTIwMjMxMCUyQyUyMCUyMDIwNDIlMkMlMjAlMjAzNDAzJTJDJTIwJTIwMjAwNSUyQyUyMCUyMDEwMzclMkMlMjAxNzY2MiUyQyUyMDEyMTcyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwMjYwNyUyQyUyMCUyMDIwMjYlMkMlMjAlMjAyODc4JTJDJTIwJTIwMjE2NiUyQyUyMCUyMDEwMTIlMkMlMjAlMjAlMjAxMDIlNUQlNUQp",highlighted:`tensor([[ <span class="hljs-number">101</span>, <span class="hljs-number">1045</span>, <span class="hljs-number">1005</span>, <span class="hljs-number">2310</span>, <span class="hljs-number">2042</span>, <span class="hljs-number">3403</span>, <span class="hljs-number">2005</span>, <span class="hljs-number">1037</span>, <span class="hljs-number">17662</span>, <span class="hljs-number">12172</span>, | |
| <span class="hljs-number">2607</span>, <span class="hljs-number">2026</span>, <span class="hljs-number">2878</span>, <span class="hljs-number">2166</span>, <span class="hljs-number">1012</span>, <span class="hljs-number">102</span>]])`,wrap:!1}}),{c(){d(n.$$.fragment),p=i(),d(s.$$.fragment)},l(l){b(n.$$.fragment,l),p=o(l),b(s.$$.fragment,l)},m(l,m){j(n,l,m),u(l,p,m),j(s,l,m),r=!0},i(l){r||(M(n.$$.fragment,l),M(s.$$.fragment,l),r=!0)},o(l){c(n.$$.fragment,l),c(s.$$.fragment,l),r=!1},d(l){l&&a(p),y(n,l),y(s,l)}}}function Fl(f){let n,p;return n=new T({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBJTBBc2VxdWVuY2UlMjAlM0QlMjAlMjJJJ3ZlJTIwYmVlbiUyMHdhaXRpbmclMjBmb3IlMjBhJTIwSHVnZ2luZ0ZhY2UlMjBjb3Vyc2UlMjBteSUyMHdob2xlJTIwbGlmZS4lMjIlMEElMjMlMjBKJ2FpJTIwYXR0ZW5kdSUyMHVuJTIwY291cnMlMjBkJUUyJTgwJTk5SHVnZ2luZ0ZhY2UlMjB0b3V0ZSUyMG1hJTIwdmllLiUwQSUwQSUwQXRva2VucyUyMCUzRCUyMHRva2VuaXplci50b2tlbml6ZShzZXF1ZW5jZSklMEFpZHMlMjAlM0QlMjB0b2tlbml6ZXIuY29udmVydF90b2tlbnNfdG9faWRzKHRva2VucyklMEElMEFpbnB1dF9pZHMlMjAlM0QlMjB0Zi5jb25zdGFudCglNUJpZHMlNUQpJTBBcHJpbnQoJTIySW5wdXQlMjBJRHMlM0ElMjIlMkMlMjBpbnB1dF9pZHMpJTBBJTBBb3V0cHV0JTIwJTNEJTIwbW9kZWwoaW5wdXRfaWRzKSUwQXByaW50KCUyMkxvZ2l0cyUzQSUyMiUyQyUyMG91dHB1dC5sb2dpdHMp",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForSequenceClassification | |
| checkpoint = <span class="hljs-string">"distilbert-base-uncased-finetuned-sst-2-english"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
| model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| sequence = <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 d’HuggingFace toute ma vie.</span> | |
| tokens = tokenizer.tokenize(sequence) | |
| ids = tokenizer.convert_tokens_to_ids(tokens) | |
| input_ids = tf.constant([ids]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Input IDs:"</span>, input_ids) | |
| output = model(input_ids) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Logits:"</span>, output.logits)`,wrap:!1}}),{c(){d(n.$$.fragment)},l(s){b(n.$$.fragment,s)},m(s,r){j(n,s,r),p=!0},i(s){p||(M(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){y(n,s)}}}function Sl(f){let n,p;return n=new T({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQtZmluZXR1bmVkLXNzdC0yLWVuZ2xpc2glMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCklMEElMEFzZXF1ZW5jZSUyMCUzRCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUwQSUyMyUyMEonYWklMjBhdHRlbmR1JTIwdW4lMjBjb3VycyUyMGQlRTIlODAlOTlIdWdnaW5nRmFjZSUyMHRvdXRlJTIwbWElMjB2aWUuJTBBJTBBJTBBdG9rZW5zJTIwJTNEJTIwdG9rZW5pemVyLnRva2VuaXplKHNlcXVlbmNlKSUwQWlkcyUyMCUzRCUyMHRva2VuaXplci5jb252ZXJ0X3Rva2Vuc190b19pZHModG9rZW5zKSUwQSUwQWlucHV0X2lkcyUyMCUzRCUyMHRvcmNoLnRlbnNvciglNUJpZHMlNUQpJTBBcHJpbnQoJTIySW5wdXQlMjBJRHMlM0ElMjIlMkMlMjBpbnB1dF9pZHMpJTBBJTBBb3V0cHV0JTIwJTNEJTIwbW9kZWwoaW5wdXRfaWRzKSUwQXByaW50KCUyMkxvZ2l0cyUzQSUyMiUyQyUyMG91dHB1dC5sb2dpdHMp",highlighted:`<span class="hljs-keyword">import</span> torch | |
| <span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModelForSequenceClassification | |
| checkpoint = <span class="hljs-string">"distilbert-base-uncased-finetuned-sst-2-english"</span> | |
| tokenizer = AutoTokenizer.from_pretrained(checkpoint) | |
| model = AutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| sequence = <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 d’HuggingFace toute ma vie.</span> | |
| tokens = tokenizer.tokenize(sequence) | |
| ids = tokenizer.convert_tokens_to_ids(tokens) | |
| input_ids = torch.tensor([ids]) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Input IDs:"</span>, input_ids) | |
| output = model(input_ids) | |
| <span class="hljs-built_in">print</span>(<span class="hljs-string">"Logits:"</span>, output.logits)`,wrap:!1}}),{c(){d(n.$$.fragment)},l(s){b(n.$$.fragment,s)},m(s,r){j(n,s,r),p=!0},i(s){p||(M(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){y(n,s)}}}function Yl(f){let n,p;return n=new T({props:{code:"SW5wdXQlMjBJRHMlM0ElMjB0Zi5UZW5zb3IoJTBBJTVCJTVCJTIwMTA0NSUyMCUyMDEwMDUlMjAlMjAyMzEwJTIwJTIwMjA0MiUyMCUyMDM0MDMlMjAlMjAyMDA1JTIwJTIwMTAzNyUyMDE3NjYyJTIwMTIxNzIlMjAlMjAyNjA3JTIwJTIwMjAyNiUyMCUyMDI4NzglMEElMjAlMjAlMjAyMTY2JTIwJTIwMTAxMiU1RCU1RCUyQyUyMHNoYXBlJTNEKDElMkMlMjAxNCklMkMlMjBkdHlwZSUzRGludDMyKSUwQUxvZ2l0cyUzQSUyMHRmLlRlbnNvciglNUIlNUItMi43Mjc2MjA4JTIwJTIwMi44Nzg5Mzc3JTVEJTVEJTJDJTIwc2hhcGUlM0QoMSUyQyUyMDIpJTJDJTIwZHR5cGUlM0RmbG9hdDMyKQ==",highlighted:`Input IDs: tf.Tensor( | |
| [[ <span class="hljs-number">1045</span> <span class="hljs-number">1005</span> <span class="hljs-number">2310</span> <span class="hljs-number">2042</span> <span class="hljs-number">3403</span> <span class="hljs-number">2005</span> <span class="hljs-number">1037</span> <span class="hljs-number">17662</span> <span class="hljs-number">12172</span> <span class="hljs-number">2607</span> <span class="hljs-number">2026</span> <span class="hljs-number">2878</span> | |
| <span class="hljs-number">2166</span> <span class="hljs-number">1012</span>]], shape=(<span class="hljs-number">1</span>, <span class="hljs-number">14</span>), dtype=int32) | |
| Logits: tf.Tensor([[-<span class="hljs-number">2.7276208</span> <span class="hljs-number">2.8789377</span>]], shape=(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>), dtype=float32)`,wrap:!1}}),{c(){d(n.$$.fragment)},l(s){b(n.$$.fragment,s)},m(s,r){j(n,s,r),p=!0},i(s){p||(M(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){y(n,s)}}}function Ll(f){let n,p;return n=new T({props:{code:"SW5wdXQlMjBJRHMlM0ElMjAlNUIlNUIlMjAxMDQ1JTJDJTIwJTIwMTAwNSUyQyUyMCUyMDIzMTAlMkMlMjAlMjAyMDQyJTJDJTIwJTIwMzQwMyUyQyUyMCUyMDIwMDUlMkMlMjAlMjAxMDM3JTJDJTIwMTc2NjIlMkMlMjAxMjE3MiUyQyUyMCUyMDI2MDclMkMlMjAyMDI2JTJDJTIwJTIwMjg3OCUyQyUyMCUyMDIxNjYlMkMlMjAlMjAxMDEyJTVEJTVEJTBBTG9naXRzJTNBJTIwJTVCJTVCLTIuNzI3NiUyQyUyMCUyMDIuODc4OSU1RCU1RA==",highlighted:`Input IDs: [[ <span class="hljs-number">1045</span>, <span class="hljs-number">1005</span>, <span class="hljs-number">2310</span>, <span class="hljs-number">2042</span>, <span class="hljs-number">3403</span>, <span class="hljs-number">2005</span>, <span class="hljs-number">1037</span>, <span class="hljs-number">17662</span>, <span class="hljs-number">12172</span>, <span class="hljs-number">2607</span>, <span class="hljs-number">2026</span>, <span class="hljs-number">2878</span>, <span class="hljs-number">2166</span>, <span class="hljs-number">1012</span>]] | |
| Logits: [[-<span class="hljs-number">2.7276</span>, <span class="hljs-number">2.8789</span>]]`,wrap:!1}}),{c(){d(n.$$.fragment)},l(s){b(n.$$.fragment,s)},m(s,r){j(n,s,r),p=!0},i(s){p||(M(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){y(n,s)}}}function Kl(f){let n,p,s,r;return n=new T({props:{code:"bW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBJTBBc2VxdWVuY2UxX2lkcyUyMCUzRCUyMCU1QiU1QjIwMCUyQyUyMDIwMCUyQyUyMDIwMCU1RCU1RCUwQXNlcXVlbmNlMl9pZHMlMjAlM0QlMjAlNUIlNUIyMDAlMkMlMjAyMDAlNUQlNUQlMEFiYXRjaGVkX2lkcyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCU1QjIwMCUyQyUyMDIwMCUyQyUyMDIwMCU1RCUyQyUwQSUyMCUyMCUyMCUyMCU1QjIwMCUyQyUyMDIwMCUyQyUyMHRva2VuaXplci5wYWRfdG9rZW5faWQlNUQlMkMlMEElNUQlMEElMEFwcmludChtb2RlbCh0Zi5jb25zdGFudChzZXF1ZW5jZTFfaWRzKSkubG9naXRzKSUwQXByaW50KG1vZGVsKHRmLmNvbnN0YW50KHNlcXVlbmNlMl9pZHMpKS5sb2dpdHMpJTBBcHJpbnQobW9kZWwodGYuY29uc3RhbnQoYmF0Y2hlZF9pZHMpKS5sb2dpdHMp",highlighted:`model = TFAutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| sequence1_ids = [[<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>]] | |
| sequence2_ids = [[<span class="hljs-number">200</span>, <span class="hljs-number">200</span>]] | |
| batched_ids = [ | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>], | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, tokenizer.pad_token_id], | |
| ] | |
| <span class="hljs-built_in">print</span>(model(tf.constant(sequence1_ids)).logits) | |
| <span class="hljs-built_in">print</span>(model(tf.constant(sequence2_ids)).logits) | |
| <span class="hljs-built_in">print</span>(model(tf.constant(batched_ids)).logits)`,wrap:!1}}),s=new T({props:{code:"dGYuVGVuc29yKCU1QiU1QiUyMDEuNTY5MzY3OCUyMC0xLjM4OTQ1ODElNUQlNUQlMkMlMjBzaGFwZSUzRCgxJTJDJTIwMiklMkMlMjBkdHlwZSUzRGZsb2F0MzIpJTBBdGYuVGVuc29yKCU1QiU1QiUyMDAuNTgwMzAwNSUyMCUyMC0wLjQxMjUyNDI4JTVEJTVEJTJDJTIwc2hhcGUlM0QoMSUyQyUyMDIpJTJDJTIwZHR5cGUlM0RmbG9hdDMyKSUwQXRmLlRlbnNvciglMEElNUIlNUIlMjAxLjU2OTM2ODElMjAtMS4zODk0NTgyJTVEJTBBJTIwJTVCJTIwMS4zMzczNDg2JTIwLTEuMjE2MzE5MyU1RCU1RCUyQyUyMHNoYXBlJTNEKDIlMkMlMjAyKSUyQyUyMGR0eXBlJTNEZmxvYXQzMik=",highlighted:`tf.Tensor([[ <span class="hljs-number">1.5693678</span> -<span class="hljs-number">1.3894581</span>]], shape=(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>), dtype=float32) | |
| tf.Tensor([[ <span class="hljs-number">0.5803005</span> -<span class="hljs-number">0.41252428</span>]], shape=(<span class="hljs-number">1</span>, <span class="hljs-number">2</span>), dtype=float32) | |
| tf.Tensor( | |
| [[ <span class="hljs-number">1.5693681</span> -<span class="hljs-number">1.3894582</span>] | |
| [ <span class="hljs-number">1.3373486</span> -<span class="hljs-number">1.2163193</span>]], shape=(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>), dtype=float32)`,wrap:!1}}),{c(){d(n.$$.fragment),p=i(),d(s.$$.fragment)},l(l){b(n.$$.fragment,l),p=o(l),b(s.$$.fragment,l)},m(l,m){j(n,l,m),u(l,p,m),j(s,l,m),r=!0},i(l){r||(M(n.$$.fragment,l),M(s.$$.fragment,l),r=!0)},o(l){c(n.$$.fragment,l),c(s.$$.fragment,l),r=!1},d(l){l&&a(p),y(n,l),y(s,l)}}}function Pl(f){let n,p,s,r;return n=new T({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JTZXF1ZW5jZUNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQSUwQXNlcXVlbmNlMV9pZHMlMjAlM0QlMjAlNUIlNUIyMDAlMkMlMjAyMDAlMkMlMjAyMDAlNUQlNUQlMEFzZXF1ZW5jZTJfaWRzJTIwJTNEJTIwJTVCJTVCMjAwJTJDJTIwMjAwJTVEJTVEJTBBYmF0Y2hlZF9pZHMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIyMDAlMkMlMjAyMDAlMkMlMjAyMDAlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIyMDAlMkMlMjAyMDAlMkMlMjB0b2tlbml6ZXIucGFkX3Rva2VuX2lkJTVEJTJDJTBBJTVEJTBBJTBBcHJpbnQobW9kZWwodG9yY2gudGVuc29yKHNlcXVlbmNlMV9pZHMpKS5sb2dpdHMpJTBBcHJpbnQobW9kZWwodG9yY2gudGVuc29yKHNlcXVlbmNlMl9pZHMpKS5sb2dpdHMpJTBBcHJpbnQobW9kZWwodG9yY2gudGVuc29yKGJhdGNoZWRfaWRzKSkubG9naXRzKQ==",highlighted:`model = AutoModelForSequenceClassification.from_pretrained(checkpoint) | |
| sequence1_ids = [[<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>]] | |
| sequence2_ids = [[<span class="hljs-number">200</span>, <span class="hljs-number">200</span>]] | |
| batched_ids = [ | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>], | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, tokenizer.pad_token_id], | |
| ] | |
| <span class="hljs-built_in">print</span>(model(torch.tensor(sequence1_ids)).logits) | |
| <span class="hljs-built_in">print</span>(model(torch.tensor(sequence2_ids)).logits) | |
| <span class="hljs-built_in">print</span>(model(torch.tensor(batched_ids)).logits)`,wrap:!1}}),s=new T({props:{code:"dGVuc29yKCU1QiU1QiUyMDEuNTY5NCUyQyUyMC0xLjM4OTUlNUQlNUQlMkMlMjBncmFkX2ZuJTNEJTNDQWRkbW1CYWNrd2FyZCUzRSklMEF0ZW5zb3IoJTVCJTVCJTIwMC41ODAzJTJDJTIwLTAuNDEyNSU1RCU1RCUyQyUyMGdyYWRfZm4lM0QlM0NBZGRtbUJhY2t3YXJkJTNFKSUwQXRlbnNvciglNUIlNUIlMjAxLjU2OTQlMkMlMjAtMS4zODk1JTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTVCJTIwMS4zMzczJTJDJTIwLTEuMjE2MyU1RCU1RCUyQyUyMGdyYWRfZm4lM0QlM0NBZGRtbUJhY2t3YXJkJTNFKQ==",highlighted:`tensor([[ <span class="hljs-number">1.5694</span>, -<span class="hljs-number">1.3895</span>]], grad_fn=<AddmmBackward>) | |
| tensor([[ <span class="hljs-number">0.5803</span>, -<span class="hljs-number">0.4125</span>]], grad_fn=<AddmmBackward>) | |
| tensor([[ <span class="hljs-number">1.5694</span>, -<span class="hljs-number">1.3895</span>], | |
| [ <span class="hljs-number">1.3373</span>, -<span class="hljs-number">1.2163</span>]], grad_fn=<AddmmBackward>)`,wrap:!1}}),{c(){d(n.$$.fragment),p=i(),d(s.$$.fragment)},l(l){b(n.$$.fragment,l),p=o(l),b(s.$$.fragment,l)},m(l,m){j(n,l,m),u(l,p,m),j(s,l,m),r=!0},i(l){r||(M(n.$$.fragment,l),M(s.$$.fragment,l),r=!0)},o(l){c(n.$$.fragment,l),c(s.$$.fragment,l),r=!1},d(l){l&&a(p),y(n,l),y(s,l)}}}function Ol(f){let n,p,s,r;return n=new T({props:{code:"YmF0Y2hlZF9pZHMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIyMDAlMkMlMjAyMDAlMkMlMjAyMDAlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIyMDAlMkMlMjAyMDAlMkMlMjB0b2tlbml6ZXIucGFkX3Rva2VuX2lkJTVEJTJDJTBBJTVEJTBBJTBBYXR0ZW50aW9uX21hc2slMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIxJTJDJTIwMSUyQyUyMDElNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIxJTJDJTIwMSUyQyUyMDAlNUQlMkMlMEElNUQlMEElMEFvdXRwdXRzJTIwJTNEJTIwbW9kZWwodGYuY29uc3RhbnQoYmF0Y2hlZF9pZHMpJTJDJTIwYXR0ZW50aW9uX21hc2slM0R0Zi5jb25zdGFudChhdHRlbnRpb25fbWFzaykpJTBBcHJpbnQob3V0cHV0cy5sb2dpdHMp",highlighted:`batched_ids = [ | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>], | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, tokenizer.pad_token_id], | |
| ] | |
| attention_mask = [ | |
| [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>], | |
| [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>], | |
| ] | |
| outputs = model(tf.constant(batched_ids), attention_mask=tf.constant(attention_mask)) | |
| <span class="hljs-built_in">print</span>(outputs.logits)`,wrap:!1}}),s=new T({props:{code:"dGYuVGVuc29yKCUwQSU1QiU1QiUyMDEuNTY5MzY4MSUyMCUyMC0xLjM4OTQ1ODIlMjAlNUQlMEElMjAlNUIlMjAwLjU4MDMwMjElMjAlMjAtMC40MTI1MjU4NiU1RCU1RCUyQyUyMHNoYXBlJTNEKDIlMkMlMjAyKSUyQyUyMGR0eXBlJTNEZmxvYXQzMik=",highlighted:`tf.Tensor( | |
| [[ <span class="hljs-number">1.5693681</span> -<span class="hljs-number">1.3894582</span> ] | |
| [ <span class="hljs-number">0.5803021</span> -<span class="hljs-number">0.41252586</span>]], shape=(<span class="hljs-number">2</span>, <span class="hljs-number">2</span>), dtype=float32)`,wrap:!1}}),{c(){d(n.$$.fragment),p=i(),d(s.$$.fragment)},l(l){b(n.$$.fragment,l),p=o(l),b(s.$$.fragment,l)},m(l,m){j(n,l,m),u(l,p,m),j(s,l,m),r=!0},i(l){r||(M(n.$$.fragment,l),M(s.$$.fragment,l),r=!0)},o(l){c(n.$$.fragment,l),c(s.$$.fragment,l),r=!1},d(l){l&&a(p),y(n,l),y(s,l)}}}function en(f){let n,p,s,r;return n=new T({props:{code:"YmF0Y2hlZF9pZHMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIyMDAlMkMlMjAyMDAlMkMlMjAyMDAlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIyMDAlMkMlMjAyMDAlMkMlMjB0b2tlbml6ZXIucGFkX3Rva2VuX2lkJTVEJTJDJTBBJTVEJTBBJTBBYXR0ZW50aW9uX21hc2slMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIxJTJDJTIwMSUyQyUyMDElNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIxJTJDJTIwMSUyQyUyMDAlNUQlMkMlMEElNUQlMEElMEFvdXRwdXRzJTIwJTNEJTIwbW9kZWwodG9yY2gudGVuc29yKGJhdGNoZWRfaWRzKSUyQyUyMGF0dGVudGlvbl9tYXNrJTNEdG9yY2gudGVuc29yKGF0dGVudGlvbl9tYXNrKSklMEFwcmludChvdXRwdXRzLmxvZ2l0cyk=",highlighted:`batched_ids = [ | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>], | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, tokenizer.pad_token_id], | |
| ] | |
| attention_mask = [ | |
| [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>], | |
| [<span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">0</span>], | |
| ] | |
| outputs = model(torch.tensor(batched_ids), attention_mask=torch.tensor(attention_mask)) | |
| <span class="hljs-built_in">print</span>(outputs.logits)`,wrap:!1}}),s=new T({props:{code:"dGVuc29yKCU1QiU1QiUyMDEuNTY5NCUyQyUyMC0xLjM4OTUlNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUIlMjAwLjU4MDMlMkMlMjAtMC40MTI1JTVEJTVEJTJDJTIwZ3JhZF9mbiUzRCUzQ0FkZG1tQmFja3dhcmQlM0Up",highlighted:`tensor([[ <span class="hljs-number">1.5694</span>, -<span class="hljs-number">1.3895</span>], | |
| [ <span class="hljs-number">0.5803</span>, -<span class="hljs-number">0.4125</span>]], grad_fn=<AddmmBackward>)`,wrap:!1}}),{c(){d(n.$$.fragment),p=i(),d(s.$$.fragment)},l(l){b(n.$$.fragment,l),p=o(l),b(s.$$.fragment,l)},m(l,m){j(n,l,m),u(l,p,m),j(s,l,m),r=!0},i(l){r||(M(n.$$.fragment,l),M(s.$$.fragment,l),r=!0)},o(l){c(n.$$.fragment,l),c(s.$$.fragment,l),r=!1},d(l){l&&a(p),y(n,l),y(s,l)}}}function sn(f){let n,p,s,r,l,m,q,qe,X,Xe,w,k,Ne,_,g,Qe,D,zs="Dans la section précédente, nous avons exploré le cas d’utilisation le plus simple : faire une inférence sur une seule séquence de petite longueur. Cependant, certaines questions émergent déjà :",De,x,Ws="<li>comment gérer de plusieurs séquences ?</li> <li>comment gérer de plusieurs séquences <em>de longueurs différentes</em> ?</li> <li>les indices du vocabulaire sont-ils les seules entrées qui permettent à un modèle de bien fonctionner ?</li> <li>existe-t-il une séquence trop longue ?</li>",xe,F,Bs="Voyons quels types de problèmes ces questions posent et comment nous pouvons les résoudre en utilisant l’API 🤗 <em>Transformers</em>.",Fe,S,Se,Y,Rs=`Dans l’exercice précédent, vous avez vu comment les séquences sont traduites en listes de nombres. | |
| Convertissons cette liste de nombres en un tenseur et envoyons-le au modèle :`,Ye,I,$,Ve,L,Gs="Pourquoi cela a échoué ? Nous avons suivi les étapes du pipeline de la section 2.",Le,K,Hs="Le problème est que nous avons envoyé une seule séquence au modèle, alors que les modèles de l’API 🤗 <em>Transformers</em> attendent plusieurs phrases par défaut. Ici, nous avons essayé de faire ce que le <em>tokenizer</em> fait en coulisses lorsque nous l’avons appliqué à une <code>séquence</code>. Cependant si vous regardez de près, vous verrez qu’il n’a pas seulement converti la liste des identifiants d’entrée en un tenseur mais aussi ajouté une dimension par-dessus :",Ke,Z,v,Ee,P,qs="Essayons à nouveau en ajoutant une nouvelle dimension :",Pe,A,C,ze,O,Xs="Nous affichons les identifiants d’entrée ainsi que les logits résultants. Voici la sortie :",Oe,N,Q,We,ee,Ds="Le « <em>batching</em> » est l’acte d’envoyer plusieurs phrases à travers le modèle, toutes en même temps. Si vous n’avez qu’une seule phrase, vous pouvez simplement construire un batch avec une seule séquence :",es,se,ss,le,xs="Il s’agit d’un batch de deux séquences identiques !",ls,B,Fs="<p>✏️ <strong>Essayez !</strong> Convertissez cette liste <code>batched_ids</code> en un tenseur et passez-la dans votre modèle. Vérifiez que vous obtenez les mêmes logits que précédemment (mais deux fois) !</p>",ns,ne,Ss="Utiliser des <em>batchs</em> permet au modèle de fonctionner lorsque vous lui donnez plusieurs séquences. Utiliser plusieurs séquences est aussi simple que de construire un batch avec une seule séquence. Il y a cependant un deuxième problème. Lorsque vous essayez de regrouper deux phrases (ou plus), elles peuvent être de longueurs différentes. Si vous avez déjà travaillé avec des tenseurs, vous savez qu’ils doivent être de forme rectangulaire. Vous ne pourrez donc pas convertir directement la liste des identifiants d’entrée en un tenseur. Pour contourner ce problème, nous avons l’habitude de <em>rembourrer</em>/<em>remplir</em> (le <em>padding</em> en anglais) les entrées.",ts,te,as,ae,Ys="La liste de listes suivante ne peut pas être convertie en un tenseur :",ps,pe,us,ue,Ls="Afin de contourner ce problème, nous utilisons le <em>padding</em> pour que nos tenseurs aient une forme rectangulaire. Le <em>padding</em> permet de s’assurer que toutes nos phrases ont la même longueur en ajoutant un mot spécial appelé <em>padding token</em> aux phrases ayant moins de valeurs. Par exemple, si vous avez 10 phrases de 10 mots et 1 phrase de 20 mots, le <em>padding</em> fait en sorte que toutes les phrases aient 20 mots. Dans notre exemple, le tenseur résultant ressemble à ceci :",rs,re,is,ie,Ks="L’identifiant du jeton de <em>padding</em> peut être trouvé dans <code>tokenizer.pad_token_id</code>. Utilisons-le et envoyons nos deux phrases à travers le modèle premièrement individuellement puis en étant mises dans un même batch :",os,V,E,Be,oe,Ps="Il y a quelque chose qui ne va pas avec les logits de notre prédiction avec les séquences mises dans un même batch. La deuxième ligne devrait être la même que les logits pour la deuxième phrase, mais nous avons des valeurs complètement différentes !",cs,ce,Os="C’est parce que dans un <em>transformer</em> les couches d’attention <em>contextualisent</em> chaque <em>token</em>. Celles-ci prennent en compte les <em>tokens</em> de <em>padding</em> puisqu’elles analysent tous les <em>tokens</em> d’une séquence. Pour obtenir le même résultat lorsque l’on passe dans notre modèle des phrases individuelles de différentes longueurs ou un batch composé de mêmes phrases avec <em>padding</em>, nous devons dire à ces couches d’attention d’ignorer les jetons de <em>padding</em>. Ceci est fait en utilisant un masque d’attention.",Ms,Me,ms,me,el="Les masques d’attention sont des tenseurs ayant exactement la même forme que le tenseur d’identifiants d’entrée, remplis de 0 et de 1 :",ds,de,sl="<li>1 indique que les <em>tokens</em> correspondants doivent être analysés</li> <li>0 indique que les <em>tokens</em> correspondants ne doivent pas être analysés (c’est-à-dire qu’ils doivent être ignorés par les couches d’attention du modèle).</li>",bs,be,ll="Complétons l’exemple précédent avec un masque d’attention :",js,z,W,Re,je,nl="Nous obtenons maintenant les mêmes logits pour la deuxième phrase du batch.",ys,ye,tl="Remarquez comment la dernière valeur de la deuxième séquence est un identifiant de <em>padding</em> valant 0 dans le masque d’attention.",fs,R,al="<p>✏️ <strong>Essayez !</strong> Appliquez la tokenisation manuellement sur les deux phrases utilisées dans la section 2 (« <i>I’ve been waiting for a HuggingFace course my whole life.</i> » et « <i>I hate this so much!</i> »). Passez-les dans le modèle et vérifiez que vous obtenez les mêmes logits que dans la section 2. Ensuite regroupez-les en utilisant le jeton de <em>padding</em> et créez le masque d’attention approprié. Vérifiez que vous obtenez les mêmes résultats qu’en passant par le modèle !</p>",Us,fe,hs,Ue,pl="Les <em>transformers</em> acceptent en entrée que des séquences d’une longueur limitée. La plupart des modèles traitent des séquences allant jusqu’à 512 ou 1024 <em>tokens</em> et plantent lorsqu’on leur demande de traiter des séquences plus longues. Il existe deux solutions à ce problème :",Js,he,ul="<li>utiliser un modèle avec une longueur de séquence supportée plus longue,</li> <li>tronquer les séquences.</li>",Ts,Je,rl='Certains modèles sont spécialisés dans le traitement de très longues séquences comme par exemple le <a href="https://huggingface.co/transformers/model_doc/longformer.html" rel="nofollow">Longformer</a> ou le <a href="https://huggingface.co/transformers/model_doc/led.html" rel="nofollow">LED</a>. Si vous travaillez sur une tâche qui nécessite de très longues séquences, nous vous recommandons de jeter un coup d’œil à ces modèles.',ws,Te,il="Sinon, nous vous recommandons de tronquer vos séquences en spécifiant le paramètre <code>max_sequence_length</code> :",ks,we,_s,ke,gs,Ge,Is;l=new Wl({props:{fw:f[0]}}),q=new El({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),X=new He({props:{title:"Manipulation de plusieurs séquences",local:"manipulation-de-plusieurs-séquences",headingTag:"h1"}});const ol=[Rl,Bl],_e=[];function cl(e,t){return e[0]==="pt"?0:1}w=cl(f),k=_e[w]=ol[w](f);const Ml=[Hl,Gl],ge=[];function ml(e,t){return e[0]==="pt"?0:1}_=ml(f),g=ge[_]=Ml[_](f),S=new He({props:{title:"Les modèles attendent un batch d’entrées",local:"les-modèles-attendent-un-batch-dentrées",headingTag:"h2"}});const dl=[Xl,ql],Ie=[];function bl(e,t){return e[0]==="pt"?0:1}I=bl(f),$=Ie[I]=dl[I](f);const jl=[xl,Dl],$e=[];function yl(e,t){return e[0]==="pt"?0:1}Z=yl(f),v=$e[Z]=jl[Z](f);const fl=[Sl,Fl],Ze=[];function Ul(e,t){return e[0]==="pt"?0:1}A=Ul(f),C=Ze[A]=fl[A](f);const hl=[Ll,Yl],ve=[];function Jl(e,t){return e[0]==="pt"?0:1}N=Jl(f),Q=ve[N]=hl[N](f),se=new T({props:{code:"YmF0Y2hlZF9pZHMlMjAlM0QlMjAlNUJpZHMlMkMlMjBpZHMlNUQ=",highlighted:'<span class="hljs-attr">batched_ids</span> = [ids, ids]',wrap:!1}}),te=new He({props:{title:"<i> Padding </i> des entrées",local:"i-padding-i-des-entrées",headingTag:"h2"}}),pe=new T({props:{code:"YmF0Y2hlZF9pZHMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlNUIyMDAlMkMlMjAyMDAlMkMlMjAyMDAlNUQlMkMlMEElMjAlMjAlMjAlMjAlNUIyMDAlMkMlMjAyMDAlNUQlMEElNUQ=",highlighted:`batched_ids = [ | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>], | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>] | |
| ]`,wrap:!1}}),re=new T({props:{code:"cGFkZGluZ19pZCUyMCUzRCUyMDEwMCUwQSUwQWJhdGNoZWRfaWRzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTVCMjAwJTJDJTIwMjAwJTJDJTIwMjAwJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTVCMjAwJTJDJTIwMjAwJTJDJTIwcGFkZGluZ19pZCU1RCUyQyUwQSU1RA==",highlighted:`padding_id = <span class="hljs-number">100</span> | |
| batched_ids = [ | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, <span class="hljs-number">200</span>], | |
| [<span class="hljs-number">200</span>, <span class="hljs-number">200</span>, padding_id], | |
| ]`,wrap:!1}});const Tl=[Pl,Kl],Ae=[];function wl(e,t){return e[0]==="pt"?0:1}V=wl(f),E=Ae[V]=Tl[V](f),Me=new He({props:{title:"Masques d’attention",local:"masques-dattention",headingTag:"h2"}});const kl=[en,Ol],Ce=[];function _l(e,t){return e[0]==="pt"?0:1}return z=_l(f),W=Ce[z]=kl[z](f),fe=new He({props:{title:"Séquences plus longues",local:"séquences-plus-longues",headingTag:"h2"}}),we=new T({props:{code:"c2VxdWVuY2UlMjAlM0QlMjBzZXF1ZW5jZSU1QiUzQW1heF9zZXF1ZW5jZV9sZW5ndGglNUQ=",highlighted:"sequence = sequence[:max_sequence_length]",wrap:!1}}),ke=new zl({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter2/5.mdx"}}),{c(){n=U("meta"),p=i(),s=U("p"),r=i(),d(l.$$.fragment),m=i(),d(q.$$.fragment),qe=i(),d(X.$$.fragment),Xe=i(),k.c(),Ne=i(),g.c(),Qe=i(),D=U("p"),D.textContent=zs,De=i(),x=U("ul"),x.innerHTML=Ws,xe=i(),F=U("p"),F.innerHTML=Bs,Fe=i(),d(S.$$.fragment),Se=i(),Y=U("p"),Y.textContent=Rs,Ye=i(),$.c(),Ve=i(),L=U("p"),L.textContent=Gs,Le=i(),K=U("p"),K.innerHTML=Hs,Ke=i(),v.c(),Ee=i(),P=U("p"),P.textContent=qs,Pe=i(),C.c(),ze=i(),O=U("p"),O.textContent=Xs,Oe=i(),Q.c(),We=i(),ee=U("p"),ee.innerHTML=Ds,es=i(),d(se.$$.fragment),ss=i(),le=U("p"),le.textContent=xs,ls=i(),B=U("blockquote"),B.innerHTML=Fs,ns=i(),ne=U("p"),ne.innerHTML=Ss,ts=i(),d(te.$$.fragment),as=i(),ae=U("p"),ae.textContent=Ys,ps=i(),d(pe.$$.fragment),us=i(),ue=U("p"),ue.innerHTML=Ls,rs=i(),d(re.$$.fragment),is=i(),ie=U("p"),ie.innerHTML=Ks,os=i(),E.c(),Be=i(),oe=U("p"),oe.textContent=Ps,cs=i(),ce=U("p"),ce.innerHTML=Os,Ms=i(),d(Me.$$.fragment),ms=i(),me=U("p"),me.textContent=el,ds=i(),de=U("ul"),de.innerHTML=sl,bs=i(),be=U("p"),be.textContent=ll,js=i(),W.c(),Re=i(),je=U("p"),je.textContent=nl,ys=i(),ye=U("p"),ye.innerHTML=tl,fs=i(),R=U("blockquote"),R.innerHTML=al,Us=i(),d(fe.$$.fragment),hs=i(),Ue=U("p"),Ue.innerHTML=pl,Js=i(),he=U("ul"),he.innerHTML=ul,Ts=i(),Je=U("p"),Je.innerHTML=rl,ws=i(),Te=U("p"),Te.innerHTML=il,ks=i(),d(we.$$.fragment),_s=i(),d(ke.$$.fragment),gs=i(),Ge=U("p"),this.h()},l(e){const t=Ql("svelte-u9bgzb",document.head);n=h(t,"META",{name:!0,content:!0}),t.forEach(a),p=o(e),s=h(e,"P",{}),Il(s).forEach(a),r=o(e),b(l.$$.fragment,e),m=o(e),b(q.$$.fragment,e),qe=o(e),b(X.$$.fragment,e),Xe=o(e),k.l(e),Ne=o(e),g.l(e),Qe=o(e),D=h(e,"P",{"data-svelte-h":!0}),J(D)!=="svelte-13pdcpq"&&(D.textContent=zs),De=o(e),x=h(e,"UL",{"data-svelte-h":!0}),J(x)!=="svelte-1htqdau"&&(x.innerHTML=Ws),xe=o(e),F=h(e,"P",{"data-svelte-h":!0}),J(F)!=="svelte-1cqzeo2"&&(F.innerHTML=Bs),Fe=o(e),b(S.$$.fragment,e),Se=o(e),Y=h(e,"P",{"data-svelte-h":!0}),J(Y)!=="svelte-ziencv"&&(Y.textContent=Rs),Ye=o(e),$.l(e),Ve=o(e),L=h(e,"P",{"data-svelte-h":!0}),J(L)!=="svelte-1dc7q6m"&&(L.textContent=Gs),Le=o(e),K=h(e,"P",{"data-svelte-h":!0}),J(K)!=="svelte-vs1vxt"&&(K.innerHTML=Hs),Ke=o(e),v.l(e),Ee=o(e),P=h(e,"P",{"data-svelte-h":!0}),J(P)!=="svelte-c3gb2l"&&(P.textContent=qs),Pe=o(e),C.l(e),ze=o(e),O=h(e,"P",{"data-svelte-h":!0}),J(O)!=="svelte-9n4sm7"&&(O.textContent=Xs),Oe=o(e),Q.l(e),We=o(e),ee=h(e,"P",{"data-svelte-h":!0}),J(ee)!=="svelte-1n722ay"&&(ee.innerHTML=Ds),es=o(e),b(se.$$.fragment,e),ss=o(e),le=h(e,"P",{"data-svelte-h":!0}),J(le)!=="svelte-y8149p"&&(le.textContent=xs),ls=o(e),B=h(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),J(B)!=="svelte-1h75jzd"&&(B.innerHTML=Fs),ns=o(e),ne=h(e,"P",{"data-svelte-h":!0}),J(ne)!=="svelte-1y1e589"&&(ne.innerHTML=Ss),ts=o(e),b(te.$$.fragment,e),as=o(e),ae=h(e,"P",{"data-svelte-h":!0}),J(ae)!=="svelte-arsqyj"&&(ae.textContent=Ys),ps=o(e),b(pe.$$.fragment,e),us=o(e),ue=h(e,"P",{"data-svelte-h":!0}),J(ue)!=="svelte-agnh4j"&&(ue.innerHTML=Ls),rs=o(e),b(re.$$.fragment,e),is=o(e),ie=h(e,"P",{"data-svelte-h":!0}),J(ie)!=="svelte-1afsobr"&&(ie.innerHTML=Ks),os=o(e),E.l(e),Be=o(e),oe=h(e,"P",{"data-svelte-h":!0}),J(oe)!=="svelte-12j75sg"&&(oe.textContent=Ps),cs=o(e),ce=h(e,"P",{"data-svelte-h":!0}),J(ce)!=="svelte-cqhnrg"&&(ce.innerHTML=Os),Ms=o(e),b(Me.$$.fragment,e),ms=o(e),me=h(e,"P",{"data-svelte-h":!0}),J(me)!=="svelte-1itz9ww"&&(me.textContent=el),ds=o(e),de=h(e,"UL",{"data-svelte-h":!0}),J(de)!=="svelte-12tc3tz"&&(de.innerHTML=sl),bs=o(e),be=h(e,"P",{"data-svelte-h":!0}),J(be)!=="svelte-5cirng"&&(be.textContent=ll),js=o(e),W.l(e),Re=o(e),je=h(e,"P",{"data-svelte-h":!0}),J(je)!=="svelte-9gsnfq"&&(je.textContent=nl),ys=o(e),ye=h(e,"P",{"data-svelte-h":!0}),J(ye)!=="svelte-gbywhd"&&(ye.innerHTML=tl),fs=o(e),R=h(e,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),J(R)!=="svelte-1paxkqt"&&(R.innerHTML=al),Us=o(e),b(fe.$$.fragment,e),hs=o(e),Ue=h(e,"P",{"data-svelte-h":!0}),J(Ue)!=="svelte-1oimxg5"&&(Ue.innerHTML=pl),Js=o(e),he=h(e,"UL",{"data-svelte-h":!0}),J(he)!=="svelte-sv9tfg"&&(he.innerHTML=ul),Ts=o(e),Je=h(e,"P",{"data-svelte-h":!0}),J(Je)!=="svelte-xc8uee"&&(Je.innerHTML=rl),ws=o(e),Te=h(e,"P",{"data-svelte-h":!0}),J(Te)!=="svelte-1fyxyso"&&(Te.innerHTML=il),ks=o(e),b(we.$$.fragment,e),_s=o(e),b(ke.$$.fragment,e),gs=o(e),Ge=h(e,"P",{}),Il(Ge).forEach(a),this.h()},h(){$s(n,"name","hf:doc:metadata"),$s(n,"content",ln),$s(B,"class","tip"),$s(R,"class","tip")},m(e,t){Vl(document.head,n),u(e,p,t),u(e,s,t),u(e,r,t),j(l,e,t),u(e,m,t),j(q,e,t),u(e,qe,t),j(X,e,t),u(e,Xe,t),_e[w].m(e,t),u(e,Ne,t),ge[_].m(e,t),u(e,Qe,t),u(e,D,t),u(e,De,t),u(e,x,t),u(e,xe,t),u(e,F,t),u(e,Fe,t),j(S,e,t),u(e,Se,t),u(e,Y,t),u(e,Ye,t),Ie[I].m(e,t),u(e,Ve,t),u(e,L,t),u(e,Le,t),u(e,K,t),u(e,Ke,t),$e[Z].m(e,t),u(e,Ee,t),u(e,P,t),u(e,Pe,t),Ze[A].m(e,t),u(e,ze,t),u(e,O,t),u(e,Oe,t),ve[N].m(e,t),u(e,We,t),u(e,ee,t),u(e,es,t),j(se,e,t),u(e,ss,t),u(e,le,t),u(e,ls,t),u(e,B,t),u(e,ns,t),u(e,ne,t),u(e,ts,t),j(te,e,t),u(e,as,t),u(e,ae,t),u(e,ps,t),j(pe,e,t),u(e,us,t),u(e,ue,t),u(e,rs,t),j(re,e,t),u(e,is,t),u(e,ie,t),u(e,os,t),Ae[V].m(e,t),u(e,Be,t),u(e,oe,t),u(e,cs,t),u(e,ce,t),u(e,Ms,t),j(Me,e,t),u(e,ms,t),u(e,me,t),u(e,ds,t),u(e,de,t),u(e,bs,t),u(e,be,t),u(e,js,t),Ce[z].m(e,t),u(e,Re,t),u(e,je,t),u(e,ys,t),u(e,ye,t),u(e,fs,t),u(e,R,t),u(e,Us,t),j(fe,e,t),u(e,hs,t),u(e,Ue,t),u(e,Js,t),u(e,he,t),u(e,Ts,t),u(e,Je,t),u(e,ws,t),u(e,Te,t),u(e,ks,t),j(we,e,t),u(e,_s,t),j(ke,e,t),u(e,gs,t),u(e,Ge,t),Is=!0},p(e,[t]){const gl={};t&1&&(gl.fw=e[0]),l.$set(gl);let Zs=w;w=cl(e),w!==Zs&&(H(),c(_e[Zs],1,1,()=>{_e[Zs]=null}),G(),k=_e[w],k||(k=_e[w]=ol[w](e),k.c()),M(k,1),k.m(Ne.parentNode,Ne));let vs=_;_=ml(e),_!==vs&&(H(),c(ge[vs],1,1,()=>{ge[vs]=null}),G(),g=ge[_],g||(g=ge[_]=Ml[_](e),g.c()),M(g,1),g.m(Qe.parentNode,Qe));let As=I;I=bl(e),I!==As&&(H(),c(Ie[As],1,1,()=>{Ie[As]=null}),G(),$=Ie[I],$||($=Ie[I]=dl[I](e),$.c()),M($,1),$.m(Ve.parentNode,Ve));let Cs=Z;Z=yl(e),Z!==Cs&&(H(),c($e[Cs],1,1,()=>{$e[Cs]=null}),G(),v=$e[Z],v||(v=$e[Z]=jl[Z](e),v.c()),M(v,1),v.m(Ee.parentNode,Ee));let Ns=A;A=Ul(e),A!==Ns&&(H(),c(Ze[Ns],1,1,()=>{Ze[Ns]=null}),G(),C=Ze[A],C||(C=Ze[A]=fl[A](e),C.c()),M(C,1),C.m(ze.parentNode,ze));let Qs=N;N=Jl(e),N!==Qs&&(H(),c(ve[Qs],1,1,()=>{ve[Qs]=null}),G(),Q=ve[N],Q||(Q=ve[N]=hl[N](e),Q.c()),M(Q,1),Q.m(We.parentNode,We));let Vs=V;V=wl(e),V!==Vs&&(H(),c(Ae[Vs],1,1,()=>{Ae[Vs]=null}),G(),E=Ae[V],E||(E=Ae[V]=Tl[V](e),E.c()),M(E,1),E.m(Be.parentNode,Be));let Es=z;z=_l(e),z!==Es&&(H(),c(Ce[Es],1,1,()=>{Ce[Es]=null}),G(),W=Ce[z],W||(W=Ce[z]=kl[z](e),W.c()),M(W,1),W.m(Re.parentNode,Re))},i(e){Is||(M(l.$$.fragment,e),M(q.$$.fragment,e),M(X.$$.fragment,e),M(k),M(g),M(S.$$.fragment,e),M($),M(v),M(C),M(Q),M(se.$$.fragment,e),M(te.$$.fragment,e),M(pe.$$.fragment,e),M(re.$$.fragment,e),M(E),M(Me.$$.fragment,e),M(W),M(fe.$$.fragment,e),M(we.$$.fragment,e),M(ke.$$.fragment,e),Is=!0)},o(e){c(l.$$.fragment,e),c(q.$$.fragment,e),c(X.$$.fragment,e),c(k),c(g),c(S.$$.fragment,e),c($),c(v),c(C),c(Q),c(se.$$.fragment,e),c(te.$$.fragment,e),c(pe.$$.fragment,e),c(re.$$.fragment,e),c(E),c(Me.$$.fragment,e),c(W),c(fe.$$.fragment,e),c(we.$$.fragment,e),c(ke.$$.fragment,e),Is=!1},d(e){e&&(a(p),a(s),a(r),a(m),a(qe),a(Xe),a(Ne),a(Qe),a(D),a(De),a(x),a(xe),a(F),a(Fe),a(Se),a(Y),a(Ye),a(Ve),a(L),a(Le),a(K),a(Ke),a(Ee),a(P),a(Pe),a(ze),a(O),a(Oe),a(We),a(ee),a(es),a(ss),a(le),a(ls),a(B),a(ns),a(ne),a(ts),a(as),a(ae),a(ps),a(us),a(ue),a(rs),a(is),a(ie),a(os),a(Be),a(oe),a(cs),a(ce),a(Ms),a(ms),a(me),a(ds),a(de),a(bs),a(be),a(js),a(Re),a(je),a(ys),a(ye),a(fs),a(R),a(Us),a(hs),a(Ue),a(Js),a(he),a(Ts),a(Je),a(ws),a(Te),a(ks),a(_s),a(gs),a(Ge)),a(n),y(l,e),y(q,e),y(X,e),_e[w].d(e),ge[_].d(e),y(S,e),Ie[I].d(e),$e[Z].d(e),Ze[A].d(e),ve[N].d(e),y(se,e),y(te,e),y(pe,e),y(re,e),Ae[V].d(e),y(Me,e),Ce[z].d(e),y(fe,e),y(we,e),y(ke,e)}}}const ln='{"title":"Manipulation de plusieurs séquences","local":"manipulation-de-plusieurs-séquences","sections":[{"title":"Les modèles attendent un batch d’entrées","local":"les-modèles-attendent-un-batch-dentrées","sections":[],"depth":2},{"title":"<i> Padding </i> des entrées","local":"i-padding-i-des-entrées","sections":[],"depth":2},{"title":"Masques d’attention","local":"masques-dattention","sections":[],"depth":2},{"title":"Séquences plus longues","local":"séquences-plus-longues","sections":[],"depth":2}],"depth":1}';function nn(f,n,p){let s="pt";return Al(()=>{const r=new URLSearchParams(window.location.search);p(0,s=r.get("fw")||"pt")}),[s]}class Mn extends Cl{constructor(n){super(),Nl(this,n,nn,sn,vl,{})}}export{Mn as component}; | |
Xet Storage Details
- Size:
- 47.3 kB
- Xet hash:
- c15515c58fd7f09851c243c40dbf92f58f2f413149c8495f05097f044650a7f6
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.