Buckets:
| import{s as $e,o as Ie}from"../chunks/scheduler.893fe8c9.js";import{S as Ve,i as Ae,e as d,s as i,c as b,h as Ze,a as J,d as a,b as u,f as ke,g as j,j as T,k as Cs,l as Qe,m as M,n as y,o as c,q as v,t as m,p as f,r as B}from"../chunks/index.2d09ebb4.js";import{C as Ee,H as vl,E as Ne}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.7300411e.js";import{Y as _e}from"../chunks/Youtube.b7012d06.js";import{C as h}from"../chunks/CodeBlock.9a78f097.js";import{C as Ce}from"../chunks/CourseFloatingBanner.e3aeab73.js";import{F as ge}from"../chunks/FrameworkSwitchCourse.f49b9dc4.js";function We(U){let n,p;return n=new Ce({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section5_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section5_tf.ipynb"}]}}),{c(){b(n.$$.fragment)},l(s){j(n.$$.fragment,s)},m(s,r){y(n,s,r),p=!0},i(s){p||(m(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){f(n,s)}}}function Re(U){let n,p;return n=new Ce({props:{chapter:2,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter2/section5_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter2/section5_pt.ipynb"}]}}),{c(){b(n.$$.fragment)},l(s){j(n.$$.fragment,s)},m(s,r){y(n,s,r),p=!0},i(s){p||(m(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){f(n,s)}}}function Ge(U){let n,p;return n=new _e({props:{id:"ROxrFOEbsQE"}}),{c(){b(n.$$.fragment)},l(s){j(n.$$.fragment,s)},m(s,r){y(n,s,r),p=!0},i(s){p||(m(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){f(n,s)}}}function ze(U){let n,p;return n=new _e({props:{id:"M6adb1j2jPI"}}),{c(){b(n.$$.fragment)},l(s){j(n.$$.fragment,s)},m(s,r){y(n,s,r),p=!0},i(s){p||(m(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){f(n,s)}}}function Xe(U){let n,p,s,r;return n=new h({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBJTBBc2VxdWVuY2UlMjAlM0QlMjAlMjJJJ3ZlJTIwYmVlbiUyMHdhaXRpbmclMjBmb3IlMjBhJTIwSHVnZ2luZ0ZhY2UlMjBjb3Vyc2UlMjBteSUyMHdob2xlJTIwbGlmZS4lMjIlMEElMEF0b2tlbnMlMjAlM0QlMjB0b2tlbml6ZXIudG9rZW5pemUoc2VxdWVuY2UpJTBBaWRzJTIwJTNEJTIwdG9rZW5pemVyLmNvbnZlcnRfdG9rZW5zX3RvX2lkcyh0b2tlbnMpJTBBaW5wdXRfaWRzJTIwJTNEJTIwdGYuY29uc3RhbnQoaWRzKSUwQSUyMyUyMCVEMCVBRCVEMSU4MiVEMCVCMCUyMCVEMSU4MSVEMSU4MiVEMSU4MCVEMCVCRSVEMCVCQSVEMCVCMCUyMCVEMCVCMiVEMSU4QiVEMCVCNCVEMCVCMCVEMSU4MSVEMSU4MiUyMCVEMCVCRSVEMSU4OCVEMCVCOCVEMCVCMSVEMCVCQSVEMSU4My4lMEFtb2RlbChpbnB1dF9pZHMp",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> | |
| tokens = tokenizer.tokenize(sequence) | |
| ids = tokenizer.convert_tokens_to_ids(tokens) | |
| input_ids = tf.constant(ids) | |
| <span class="hljs-comment"># Эта строка выдаст ошибку.</span> | |
| model(input_ids)`,wrap:!1}}),s=new h({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(){b(n.$$.fragment),p=i(),b(s.$$.fragment)},l(e){j(n.$$.fragment,e),p=u(e),j(s.$$.fragment,e)},m(e,o){y(n,e,o),M(e,p,o),y(s,e,o),r=!0},i(e){r||(m(n.$$.fragment,e),m(s.$$.fragment,e),r=!0)},o(e){c(n.$$.fragment,e),c(s.$$.fragment,e),r=!1},d(e){e&&a(p),f(n,e),f(s,e)}}}function ve(U){let n,p,s,r;return n=new h({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQtZmluZXR1bmVkLXNzdC0yLWVuZ2xpc2glMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCklMEElMEFzZXF1ZW5jZSUyMCUzRCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUwQSUwQXRva2VucyUyMCUzRCUyMHRva2VuaXplci50b2tlbml6ZShzZXF1ZW5jZSklMEFpZHMlMjAlM0QlMjB0b2tlbml6ZXIuY29udmVydF90b2tlbnNfdG9faWRzKHRva2VucyklMEFpbnB1dF9pZHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoaWRzKSUwQSUyMyUyMCVEMCVBRCVEMSU4MiVEMCVCMCUyMCVEMSU4MSVEMSU4MiVEMSU4MCVEMCVCRSVEMCVCQSVEMCVCMCUyMCVEMCVCMiVEMSU4QiVEMCVCNCVEMCVCMCVEMSU4MSVEMSU4MiUyMCVEMCVCRSVEMSU4OCVEMCVCOCVEMCVCMSVEMCVCQSVEMSU4My4lMEFtb2RlbChpbnB1dF9pZHMp",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> | |
| tokens = tokenizer.tokenize(sequence) | |
| ids = tokenizer.convert_tokens_to_ids(tokens) | |
| input_ids = torch.tensor(ids) | |
| <span class="hljs-comment"># Эта строка выдаст ошибку.</span> | |
| model(input_ids)`,wrap:!1}}),s=new h({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(){b(n.$$.fragment),p=i(),b(s.$$.fragment)},l(e){j(n.$$.fragment,e),p=u(e),j(s.$$.fragment,e)},m(e,o){y(n,e,o),M(e,p,o),y(s,e,o),r=!0},i(e){r||(m(n.$$.fragment,e),m(s.$$.fragment,e),r=!0)},o(e){c(n.$$.fragment,e),c(s.$$.fragment,e),r=!1},d(e){e&&a(p),f(n,e),f(s,e)}}}function Be(U){let n,p,s,r;return n=new h({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 h({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(){b(n.$$.fragment),p=i(),b(s.$$.fragment)},l(e){j(n.$$.fragment,e),p=u(e),j(s.$$.fragment,e)},m(e,o){y(n,e,o),M(e,p,o),y(s,e,o),r=!0},i(e){r||(m(n.$$.fragment,e),m(s.$$.fragment,e),r=!0)},o(e){c(n.$$.fragment,e),c(s.$$.fragment,e),r=!1},d(e){e&&a(p),f(n,e),f(s,e)}}}function De(U){let n,p,s,r;return n=new h({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 h({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(){b(n.$$.fragment),p=i(),b(s.$$.fragment)},l(e){j(n.$$.fragment,e),p=u(e),j(s.$$.fragment,e)},m(e,o){y(n,e,o),M(e,p,o),y(s,e,o),r=!0},i(e){r||(m(n.$$.fragment,e),m(s.$$.fragment,e),r=!0)},o(e){c(n.$$.fragment,e),c(s.$$.fragment,e),r=!1},d(e){e&&a(p),f(n,e),f(s,e)}}}function Se(U){let n,p;return n=new h({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMFRGQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbiUwQSUwQWNoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtc3N0LTItZW5nbGlzaCUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKGNoZWNrcG9pbnQpJTBBJTBBc2VxdWVuY2UlMjAlM0QlMjAlMjJJJ3ZlJTIwYmVlbiUyMHdhaXRpbmclMjBmb3IlMjBhJTIwSHVnZ2luZ0ZhY2UlMjBjb3Vyc2UlMjBteSUyMHdob2xlJTIwbGlmZS4lMjIlMEElMEF0b2tlbnMlMjAlM0QlMjB0b2tlbml6ZXIudG9rZW5pemUoc2VxdWVuY2UpJTBBaWRzJTIwJTNEJTIwdG9rZW5pemVyLmNvbnZlcnRfdG9rZW5zX3RvX2lkcyh0b2tlbnMpJTBBJTBBaW5wdXRfaWRzJTIwJTNEJTIwdGYuY29uc3RhbnQoJTVCaWRzJTVEKSUwQXByaW50KCUyMklucHV0JTIwSURzJTNBJTIyJTJDJTIwaW5wdXRfaWRzKSUwQSUwQW91dHB1dCUyMCUzRCUyMG1vZGVsKGlucHV0X2lkcyklMEFwcmludCglMjJMb2dpdHMlM0ElMjIlMkMlMjBvdXRwdXQubG9naXRzKQ==",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> | |
| 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(){b(n.$$.fragment)},l(s){j(n.$$.fragment,s)},m(s,r){y(n,s,r),p=!0},i(s){p||(m(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){f(n,s)}}}function Fe(U){let n,p;return n=new h({props:{code:"aW1wb3J0JTIwdG9yY2glMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwQXV0b1Rva2VuaXplciUyQyUyMEF1dG9Nb2RlbEZvclNlcXVlbmNlQ2xhc3NpZmljYXRpb24lMEElMEFjaGVja3BvaW50JTIwJTNEJTIwJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQtZmluZXR1bmVkLXNzdC0yLWVuZ2xpc2glMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChjaGVja3BvaW50KSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsRm9yU2VxdWVuY2VDbGFzc2lmaWNhdGlvbi5mcm9tX3ByZXRyYWluZWQoY2hlY2twb2ludCklMEElMEFzZXF1ZW5jZSUyMCUzRCUyMCUyMkkndmUlMjBiZWVuJTIwd2FpdGluZyUyMGZvciUyMGElMjBIdWdnaW5nRmFjZSUyMGNvdXJzZSUyMG15JTIwd2hvbGUlMjBsaWZlLiUyMiUwQSUwQXRva2VucyUyMCUzRCUyMHRva2VuaXplci50b2tlbml6ZShzZXF1ZW5jZSklMEFpZHMlMjAlM0QlMjB0b2tlbml6ZXIuY29udmVydF90b2tlbnNfdG9faWRzKHRva2VucyklMEElMEFpbnB1dF9pZHMlMjAlM0QlMjB0b3JjaC50ZW5zb3IoJTVCaWRzJTVEKSUwQXByaW50KCUyMklucHV0JTIwSURzJTNBJTIyJTJDJTIwaW5wdXRfaWRzKSUwQSUwQW91dHB1dCUyMCUzRCUyMG1vZGVsKGlucHV0X2lkcyklMEFwcmludCglMjJMb2dpdHMlM0ElMjIlMkMlMjBvdXRwdXQubG9naXRzKQ==",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> | |
| 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(){b(n.$$.fragment)},l(s){j(n.$$.fragment,s)},m(s,r){y(n,s,r),p=!0},i(s){p||(m(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){f(n,s)}}}function xe(U){let n,p;return n=new h({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(){b(n.$$.fragment)},l(s){j(n.$$.fragment,s)},m(s,r){y(n,s,r),p=!0},i(s){p||(m(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){f(n,s)}}}function He(U){let n,p;return n=new h({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(){b(n.$$.fragment)},l(s){j(n.$$.fragment,s)},m(s,r){y(n,s,r),p=!0},i(s){p||(m(n.$$.fragment,s),p=!0)},o(s){c(n.$$.fragment,s),p=!1},d(s){f(n,s)}}}function Ye(U){let n,p,s,r;return n=new h({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 h({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(){b(n.$$.fragment),p=i(),b(s.$$.fragment)},l(e){j(n.$$.fragment,e),p=u(e),j(s.$$.fragment,e)},m(e,o){y(n,e,o),M(e,p,o),y(s,e,o),r=!0},i(e){r||(m(n.$$.fragment,e),m(s.$$.fragment,e),r=!0)},o(e){c(n.$$.fragment,e),c(s.$$.fragment,e),r=!1},d(e){e&&a(p),f(n,e),f(s,e)}}}function qe(U){let n,p,s,r;return n=new h({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 h({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(){b(n.$$.fragment),p=i(),b(s.$$.fragment)},l(e){j(n.$$.fragment,e),p=u(e),j(s.$$.fragment,e)},m(e,o){y(n,e,o),M(e,p,o),y(s,e,o),r=!0},i(e){r||(m(n.$$.fragment,e),m(s.$$.fragment,e),r=!0)},o(e){c(n.$$.fragment,e),c(s.$$.fragment,e),r=!1},d(e){e&&a(p),f(n,e),f(s,e)}}}function Le(U){let n,p,s,r;return n=new h({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 h({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(){b(n.$$.fragment),p=i(),b(s.$$.fragment)},l(e){j(n.$$.fragment,e),p=u(e),j(s.$$.fragment,e)},m(e,o){y(n,e,o),M(e,p,o),y(s,e,o),r=!0},i(e){r||(m(n.$$.fragment,e),m(s.$$.fragment,e),r=!0)},o(e){c(n.$$.fragment,e),c(s.$$.fragment,e),r=!1},d(e){e&&a(p),f(n,e),f(s,e)}}}function Ke(U){let n,p,s,r;return n=new h({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 h({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(){b(n.$$.fragment),p=i(),b(s.$$.fragment)},l(e){j(n.$$.fragment,e),p=u(e),j(s.$$.fragment,e)},m(e,o){y(n,e,o),M(e,p,o),y(s,e,o),r=!0},i(e){r||(m(n.$$.fragment,e),m(s.$$.fragment,e),r=!0)},o(e){c(n.$$.fragment,e),c(s.$$.fragment,e),r=!1},d(e){e&&a(p),f(n,e),f(s,e)}}}function Oe(U){let n,p,s,r,e,o,D,Bl,S,Dl,w,k,Ql,_,C,El,F,gs="В предыдущем разделе мы рассмотрели самый простой вариант использования: проведение инференса на одной последовательности небольшой длины. Однако уже сейчас возникают некоторые вопросы:",Sl,x,Ws="<li>Как нам работать с несколькими последовательностями?</li> <li>Как нам работать с несколькими последовательностями <em>разной длины</em>?</li> <li>Являются ли индексы словаря единственными входными данными, которые позволяют модели работать хорошо?</li> <li>Существует ли такая вещь, как слишком длинная последовательность?</li>",Fl,H,Rs="Давайте посмотрим, какие проблемы возникают в связи с этими вопросами и как их можно решить с помощью 🤗 Transformers API.",xl,Y,Hl,q,Gs="В предыдущем упражнении вы видели, как последовательности преобразуются в списки чисел. Давайте преобразуем этот список чисел в тензор и передадим его в модель:",Yl,$,I,Nl,L,zs="О нет! Почему это не удалось? Мы следовали шагам из конвейера в разделе 2.",ql,K,Xs="Проблема в том, что мы отправили в модель одну последовательность, в то время как 🤗 модели Transformers по умолчанию ожидают несколько предложений. Здесь мы попытались сделать все то, что токенизатор делал за кулисами, когда мы применяли его к <code>последовательности</code>. Но если вы приглядитесь, то увидите, что токенизатор не просто преобразовал список входных идентификаторов в тензор, а добавил к нему еще одно измерение:",Ll,V,A,gl,O,vs="Давайте попробуем еще раз и добавим новое измерение:",Kl,Z,Q,Wl,P,Bs="Мы выводим входные идентификаторы, а также результирующие логиты - вот результат:",Ol,E,N,Rl,ll,Ds="<em>Батчинг</em> - это отправка нескольких предложений через модель одновременно. Если у вас есть только одно предложение, вы можете просто создать батч с одной последовательностью:",Pl,sl,ls,el,Ss="Это батч из двух одинаковых последовательностей!",ss,z,Fs="<p>✏️ <strong>Попробуйте!</strong> Преобразуйте этот список <code>batched_ids</code> в тензор и пропустите его через вашу модель. Проверьте, что вы получаете те же логиты, что и раньше (но дважды)!</p>",es,nl,xs="Батчинг позволяет модели работать, когда вы подаете ей несколько последовательностей. Использование нескольких последовательностей так же просто, как и создание батча с одной последовательностью. Однако есть и вторая проблема. Когда вы пытаетесь собрать в батч два (или более) предложения, они могут быть разной длины. Если вы когда-нибудь работали с тензорами, то знаете, что они должны иметь прямоугольную форму, поэтому вы не сможете напрямую преобразовать список входных идентификаторов в тензор. Чтобы обойти эту проблему, мы обычно прибегаем к <em>дополнению (pad)</em> входных данных.",ns,tl,ts,al,Hs="Следующий список списков не может быть преобразован в тензор:",as,pl,ps,Ml,Ys="Чтобы обойти эту проблему, мы будем использовать <em>дополнение (padding)</em>, чтобы придать тензорам прямоугольную форму. Дополнение обеспечивает одинаковую длину всех предложений, добавляя специальное слово <em>токен дополнения</em> к предложениям с меньшим количеством значений. Например, если у вас есть 10 предложений с 10 словами и 1 предложение с 20 словами, то при дополнении все предложения будут состоять из 20 слов. В нашем примере результирующий тензор выглядит следующим образом:",Ms,rl,rs,il,qs="Идентификатор токена дополнения можно найти в <code>tokenizer.pad_token_id</code>. Давайте используем его и отправим наши два предложения в модель по отдельности и батчем:",is,g,W,Gl,ul,Ls="Что-то не так с логитами в наших батчах: во втором ряду должны быть те же логиты, что и для второго предложения, но мы получили совершенно другие значения!",us,cl,Ks="Это связано с тем, что ключевой особенностью моделей Transformer являются слои внимания (attention layers), которые <em>контекстуализируют</em> каждый токен. Они учитывают токены дополнений, так как рассматривают все токены последовательности. Чтобы получить одинаковый результат при прохождении через модель отдельных предложений разной длины или при прохождении батча с одинаковыми предложениями и дополнениями, нам нужно указать слоям внимания игнорировать дополняющие токены. Для этого используется маска внимания (attention mask).",cs,ml,ms,ol,Os="<em>Маски внимания (Attention masks)</em> - это тензоры той же формы, что и тензор входных идентификаторов, заполненные 0 и 1: 1 означает, что соответствующие токены должны “привлекать внимание”, а 0 означает, что соответствующие токены не должны “привлекать внимание” (т.е. должны игнорироваться слоями внимания модели).",os,bl,Ps="Дополним предыдущий пример маской внимания:",bs,R,G,zl,jl,le="Теперь мы получим такие же логиты для второго предложения в батче.",js,yl,se="Обратите внимание, что последнее значение второй последовательности - это идентификатор дополнения (padding ID), который в маске внимания имеет значение 0.",ys,X,ee="<p>✏️ <strong>Попробуйте!</strong> Примените токенизацию вручную к двум предложениям, использованным в разделе 2 (“I’ve been waiting for a HuggingFace course my whole life.” и “I hate this so much!”). Пропустите их через модель и проверьте, что вы получите те же логиты, что и в разделе 2. Теперь объедините их в батч с использованием токена дополнения, а затем создайте соответствующую маску внимания. Проверьте, что при прохождении через модель вы получаете те же результаты!</p>",fs,fl,Us,Ul,ne="В моделях Transformer существует ограничение на длину последовательностей, которые мы можем передавать моделям. Большинство моделей работают с последовательностями длиной до 512 или 1024 токенов и терпят крах при необходимости обработки более длинных последовательностей. Есть два решения этой проблемы:",ds,dl,te="<li>Использовать модель с большей поддерживаемой длиной последовательности.</li> <li>Усечение (truncate) последовательностей.</li>",Js,Jl,ae='Модели имеют разную поддерживаемую длину последовательности, а некоторые специализируются на работе с очень длинными последовательностями. Одним из примеров является <a href="https://huggingface.co/docs/transformers/model_doc/longformer" rel="nofollow">Longformer</a>, а другим - <a href="https://huggingface.co/docs/transformers/model_doc/led" rel="nofollow">LED</a>. Если вы работаете над задачей, требующей очень длинных последовательностей, мы рекомендуем вам обратить внимание на эти модели.',Ts,Tl,pe="В противном случае мы рекомендуем использовать усечение последовательностей, указав параметр <code>max_sequence_length</code>:",hs,hl,ws,wl,ks,Xl,_s;e=new ge({props:{fw:U[0]}}),D=new Ee({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),S=new vl({props:{title:"Обработка нескольких последовательностей",local:"handling-multiple-sequences",headingTag:"h1"}});const Me=[Re,We],kl=[];function re(l,t){return l[0]==="pt"?0:1}w=re(U),k=kl[w]=Me[w](U);const ie=[ze,Ge],_l=[];function ue(l,t){return l[0]==="pt"?0:1}_=ue(U),C=_l[_]=ie[_](U),Y=new vl({props:{title:"Модели ожидают батч входов",local:"models-expect-a-batch-of-inputs",headingTag:"h2"}});const ce=[ve,Xe],Cl=[];function me(l,t){return l[0]==="pt"?0:1}$=me(U),I=Cl[$]=ce[$](U);const oe=[De,Be],$l=[];function be(l,t){return l[0]==="pt"?0:1}V=be(U),A=$l[V]=oe[V](U);const je=[Fe,Se],Il=[];function ye(l,t){return l[0]==="pt"?0:1}Z=ye(U),Q=Il[Z]=je[Z](U);const fe=[He,xe],Vl=[];function Ue(l,t){return l[0]==="pt"?0:1}E=Ue(U),N=Vl[E]=fe[E](U),sl=new h({props:{code:"YmF0Y2hlZF9pZHMlMjAlM0QlMjAlNUJpZHMlMkMlMjBpZHMlNUQ=",highlighted:'<span class="hljs-attr">batched_ids</span> = [ids, ids]',wrap:!1}}),tl=new vl({props:{title:"Дополнение входов",local:"padding-the-inputs",headingTag:"h2"}}),pl=new h({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}}),rl=new h({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 de=[qe,Ye],Al=[];function Je(l,t){return l[0]==="pt"?0:1}g=Je(U),W=Al[g]=de[g](U),ml=new vl({props:{title:"Маски внимания",local:"attention-masks",headingTag:"h2"}});const Te=[Ke,Le],Zl=[];function he(l,t){return l[0]==="pt"?0:1}return R=he(U),G=Zl[R]=Te[R](U),fl=new vl({props:{title:"Более длинные последовательности",local:"longer-sequences",headingTag:"h2"}}),hl=new h({props:{code:"c2VxdWVuY2UlMjAlM0QlMjBzZXF1ZW5jZSU1QiUzQW1heF9zZXF1ZW5jZV9sZW5ndGglNUQ=",highlighted:"sequence = sequence[:max_sequence_length]",wrap:!1}}),wl=new Ne({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter2/5.mdx"}}),{c(){n=d("meta"),p=i(),s=d("p"),r=i(),b(e.$$.fragment),o=i(),b(D.$$.fragment),Bl=i(),b(S.$$.fragment),Dl=i(),k.c(),Ql=i(),C.c(),El=i(),F=d("p"),F.textContent=gs,Sl=i(),x=d("ul"),x.innerHTML=Ws,Fl=i(),H=d("p"),H.textContent=Rs,xl=i(),b(Y.$$.fragment),Hl=i(),q=d("p"),q.textContent=Gs,Yl=i(),I.c(),Nl=i(),L=d("p"),L.textContent=zs,ql=i(),K=d("p"),K.innerHTML=Xs,Ll=i(),A.c(),gl=i(),O=d("p"),O.textContent=vs,Kl=i(),Q.c(),Wl=i(),P=d("p"),P.textContent=Bs,Ol=i(),N.c(),Rl=i(),ll=d("p"),ll.innerHTML=Ds,Pl=i(),b(sl.$$.fragment),ls=i(),el=d("p"),el.textContent=Ss,ss=i(),z=d("blockquote"),z.innerHTML=Fs,es=i(),nl=d("p"),nl.innerHTML=xs,ns=i(),b(tl.$$.fragment),ts=i(),al=d("p"),al.textContent=Hs,as=i(),b(pl.$$.fragment),ps=i(),Ml=d("p"),Ml.innerHTML=Ys,Ms=i(),b(rl.$$.fragment),rs=i(),il=d("p"),il.innerHTML=qs,is=i(),W.c(),Gl=i(),ul=d("p"),ul.textContent=Ls,us=i(),cl=d("p"),cl.innerHTML=Ks,cs=i(),b(ml.$$.fragment),ms=i(),ol=d("p"),ol.innerHTML=Os,os=i(),bl=d("p"),bl.textContent=Ps,bs=i(),G.c(),zl=i(),jl=d("p"),jl.textContent=le,js=i(),yl=d("p"),yl.textContent=se,ys=i(),X=d("blockquote"),X.innerHTML=ee,fs=i(),b(fl.$$.fragment),Us=i(),Ul=d("p"),Ul.textContent=ne,ds=i(),dl=d("ul"),dl.innerHTML=te,Js=i(),Jl=d("p"),Jl.innerHTML=ae,Ts=i(),Tl=d("p"),Tl.innerHTML=pe,hs=i(),b(hl.$$.fragment),ws=i(),b(wl.$$.fragment),ks=i(),Xl=d("p"),this.h()},l(l){const t=Ze("svelte-u9bgzb",document.head);n=J(t,"META",{name:!0,content:!0}),t.forEach(a),p=u(l),s=J(l,"P",{}),ke(s).forEach(a),r=u(l),j(e.$$.fragment,l),o=u(l),j(D.$$.fragment,l),Bl=u(l),j(S.$$.fragment,l),Dl=u(l),k.l(l),Ql=u(l),C.l(l),El=u(l),F=J(l,"P",{"data-svelte-h":!0}),T(F)!=="svelte-ikgr2i"&&(F.textContent=gs),Sl=u(l),x=J(l,"UL",{"data-svelte-h":!0}),T(x)!=="svelte-p2p0e"&&(x.innerHTML=Ws),Fl=u(l),H=J(l,"P",{"data-svelte-h":!0}),T(H)!=="svelte-98bx90"&&(H.textContent=Rs),xl=u(l),j(Y.$$.fragment,l),Hl=u(l),q=J(l,"P",{"data-svelte-h":!0}),T(q)!=="svelte-18ypb6e"&&(q.textContent=Gs),Yl=u(l),I.l(l),Nl=u(l),L=J(l,"P",{"data-svelte-h":!0}),T(L)!=="svelte-144jsih"&&(L.textContent=zs),ql=u(l),K=J(l,"P",{"data-svelte-h":!0}),T(K)!=="svelte-1k77vdn"&&(K.innerHTML=Xs),Ll=u(l),A.l(l),gl=u(l),O=J(l,"P",{"data-svelte-h":!0}),T(O)!=="svelte-dmjb59"&&(O.textContent=vs),Kl=u(l),Q.l(l),Wl=u(l),P=J(l,"P",{"data-svelte-h":!0}),T(P)!=="svelte-1nnt99"&&(P.textContent=Bs),Ol=u(l),N.l(l),Rl=u(l),ll=J(l,"P",{"data-svelte-h":!0}),T(ll)!=="svelte-1ptjmnf"&&(ll.innerHTML=Ds),Pl=u(l),j(sl.$$.fragment,l),ls=u(l),el=J(l,"P",{"data-svelte-h":!0}),T(el)!=="svelte-1xqu6rg"&&(el.textContent=Ss),ss=u(l),z=J(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),T(z)!=="svelte-1jqqe1t"&&(z.innerHTML=Fs),es=u(l),nl=J(l,"P",{"data-svelte-h":!0}),T(nl)!=="svelte-1x76014"&&(nl.innerHTML=xs),ns=u(l),j(tl.$$.fragment,l),ts=u(l),al=J(l,"P",{"data-svelte-h":!0}),T(al)!=="svelte-nbgyfx"&&(al.textContent=Hs),as=u(l),j(pl.$$.fragment,l),ps=u(l),Ml=J(l,"P",{"data-svelte-h":!0}),T(Ml)!=="svelte-19psb6t"&&(Ml.innerHTML=Ys),Ms=u(l),j(rl.$$.fragment,l),rs=u(l),il=J(l,"P",{"data-svelte-h":!0}),T(il)!=="svelte-vcf2iw"&&(il.innerHTML=qs),is=u(l),W.l(l),Gl=u(l),ul=J(l,"P",{"data-svelte-h":!0}),T(ul)!=="svelte-lq6aki"&&(ul.textContent=Ls),us=u(l),cl=J(l,"P",{"data-svelte-h":!0}),T(cl)!=="svelte-1odjoq1"&&(cl.innerHTML=Ks),cs=u(l),j(ml.$$.fragment,l),ms=u(l),ol=J(l,"P",{"data-svelte-h":!0}),T(ol)!=="svelte-19vvspo"&&(ol.innerHTML=Os),os=u(l),bl=J(l,"P",{"data-svelte-h":!0}),T(bl)!=="svelte-1mwnjcg"&&(bl.textContent=Ps),bs=u(l),G.l(l),zl=u(l),jl=J(l,"P",{"data-svelte-h":!0}),T(jl)!=="svelte-386tap"&&(jl.textContent=le),js=u(l),yl=J(l,"P",{"data-svelte-h":!0}),T(yl)!=="svelte-11ffhny"&&(yl.textContent=se),ys=u(l),X=J(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),T(X)!=="svelte-b53ssq"&&(X.innerHTML=ee),fs=u(l),j(fl.$$.fragment,l),Us=u(l),Ul=J(l,"P",{"data-svelte-h":!0}),T(Ul)!=="svelte-mjg3yg"&&(Ul.textContent=ne),ds=u(l),dl=J(l,"UL",{"data-svelte-h":!0}),T(dl)!=="svelte-u5jj5o"&&(dl.innerHTML=te),Js=u(l),Jl=J(l,"P",{"data-svelte-h":!0}),T(Jl)!=="svelte-6nsbgo"&&(Jl.innerHTML=ae),Ts=u(l),Tl=J(l,"P",{"data-svelte-h":!0}),T(Tl)!=="svelte-10uunb0"&&(Tl.innerHTML=pe),hs=u(l),j(hl.$$.fragment,l),ws=u(l),j(wl.$$.fragment,l),ks=u(l),Xl=J(l,"P",{}),ke(Xl).forEach(a),this.h()},h(){Cs(n,"name","hf:doc:metadata"),Cs(n,"content",Pe),Cs(z,"class","tip"),Cs(X,"class","tip")},m(l,t){Qe(document.head,n),M(l,p,t),M(l,s,t),M(l,r,t),y(e,l,t),M(l,o,t),y(D,l,t),M(l,Bl,t),y(S,l,t),M(l,Dl,t),kl[w].m(l,t),M(l,Ql,t),_l[_].m(l,t),M(l,El,t),M(l,F,t),M(l,Sl,t),M(l,x,t),M(l,Fl,t),M(l,H,t),M(l,xl,t),y(Y,l,t),M(l,Hl,t),M(l,q,t),M(l,Yl,t),Cl[$].m(l,t),M(l,Nl,t),M(l,L,t),M(l,ql,t),M(l,K,t),M(l,Ll,t),$l[V].m(l,t),M(l,gl,t),M(l,O,t),M(l,Kl,t),Il[Z].m(l,t),M(l,Wl,t),M(l,P,t),M(l,Ol,t),Vl[E].m(l,t),M(l,Rl,t),M(l,ll,t),M(l,Pl,t),y(sl,l,t),M(l,ls,t),M(l,el,t),M(l,ss,t),M(l,z,t),M(l,es,t),M(l,nl,t),M(l,ns,t),y(tl,l,t),M(l,ts,t),M(l,al,t),M(l,as,t),y(pl,l,t),M(l,ps,t),M(l,Ml,t),M(l,Ms,t),y(rl,l,t),M(l,rs,t),M(l,il,t),M(l,is,t),Al[g].m(l,t),M(l,Gl,t),M(l,ul,t),M(l,us,t),M(l,cl,t),M(l,cs,t),y(ml,l,t),M(l,ms,t),M(l,ol,t),M(l,os,t),M(l,bl,t),M(l,bs,t),Zl[R].m(l,t),M(l,zl,t),M(l,jl,t),M(l,js,t),M(l,yl,t),M(l,ys,t),M(l,X,t),M(l,fs,t),y(fl,l,t),M(l,Us,t),M(l,Ul,t),M(l,ds,t),M(l,dl,t),M(l,Js,t),M(l,Jl,t),M(l,Ts,t),M(l,Tl,t),M(l,hs,t),y(hl,l,t),M(l,ws,t),y(wl,l,t),M(l,ks,t),M(l,Xl,t),_s=!0},p(l,[t]){const we={};t&1&&(we.fw=l[0]),e.$set(we);let $s=w;w=re(l),w!==$s&&(B(),c(kl[$s],1,1,()=>{kl[$s]=null}),v(),k=kl[w],k||(k=kl[w]=Me[w](l),k.c()),m(k,1),k.m(Ql.parentNode,Ql));let Is=_;_=ue(l),_!==Is&&(B(),c(_l[Is],1,1,()=>{_l[Is]=null}),v(),C=_l[_],C||(C=_l[_]=ie[_](l),C.c()),m(C,1),C.m(El.parentNode,El));let Vs=$;$=me(l),$!==Vs&&(B(),c(Cl[Vs],1,1,()=>{Cl[Vs]=null}),v(),I=Cl[$],I||(I=Cl[$]=ce[$](l),I.c()),m(I,1),I.m(Nl.parentNode,Nl));let As=V;V=be(l),V!==As&&(B(),c($l[As],1,1,()=>{$l[As]=null}),v(),A=$l[V],A||(A=$l[V]=oe[V](l),A.c()),m(A,1),A.m(gl.parentNode,gl));let Zs=Z;Z=ye(l),Z!==Zs&&(B(),c(Il[Zs],1,1,()=>{Il[Zs]=null}),v(),Q=Il[Z],Q||(Q=Il[Z]=je[Z](l),Q.c()),m(Q,1),Q.m(Wl.parentNode,Wl));let Qs=E;E=Ue(l),E!==Qs&&(B(),c(Vl[Qs],1,1,()=>{Vl[Qs]=null}),v(),N=Vl[E],N||(N=Vl[E]=fe[E](l),N.c()),m(N,1),N.m(Rl.parentNode,Rl));let Es=g;g=Je(l),g!==Es&&(B(),c(Al[Es],1,1,()=>{Al[Es]=null}),v(),W=Al[g],W||(W=Al[g]=de[g](l),W.c()),m(W,1),W.m(Gl.parentNode,Gl));let Ns=R;R=he(l),R!==Ns&&(B(),c(Zl[Ns],1,1,()=>{Zl[Ns]=null}),v(),G=Zl[R],G||(G=Zl[R]=Te[R](l),G.c()),m(G,1),G.m(zl.parentNode,zl))},i(l){_s||(m(e.$$.fragment,l),m(D.$$.fragment,l),m(S.$$.fragment,l),m(k),m(C),m(Y.$$.fragment,l),m(I),m(A),m(Q),m(N),m(sl.$$.fragment,l),m(tl.$$.fragment,l),m(pl.$$.fragment,l),m(rl.$$.fragment,l),m(W),m(ml.$$.fragment,l),m(G),m(fl.$$.fragment,l),m(hl.$$.fragment,l),m(wl.$$.fragment,l),_s=!0)},o(l){c(e.$$.fragment,l),c(D.$$.fragment,l),c(S.$$.fragment,l),c(k),c(C),c(Y.$$.fragment,l),c(I),c(A),c(Q),c(N),c(sl.$$.fragment,l),c(tl.$$.fragment,l),c(pl.$$.fragment,l),c(rl.$$.fragment,l),c(W),c(ml.$$.fragment,l),c(G),c(fl.$$.fragment,l),c(hl.$$.fragment,l),c(wl.$$.fragment,l),_s=!1},d(l){l&&(a(p),a(s),a(r),a(o),a(Bl),a(Dl),a(Ql),a(El),a(F),a(Sl),a(x),a(Fl),a(H),a(xl),a(Hl),a(q),a(Yl),a(Nl),a(L),a(ql),a(K),a(Ll),a(gl),a(O),a(Kl),a(Wl),a(P),a(Ol),a(Rl),a(ll),a(Pl),a(ls),a(el),a(ss),a(z),a(es),a(nl),a(ns),a(ts),a(al),a(as),a(ps),a(Ml),a(Ms),a(rs),a(il),a(is),a(Gl),a(ul),a(us),a(cl),a(cs),a(ms),a(ol),a(os),a(bl),a(bs),a(zl),a(jl),a(js),a(yl),a(ys),a(X),a(fs),a(Us),a(Ul),a(ds),a(dl),a(Js),a(Jl),a(Ts),a(Tl),a(hs),a(ws),a(ks),a(Xl)),a(n),f(e,l),f(D,l),f(S,l),kl[w].d(l),_l[_].d(l),f(Y,l),Cl[$].d(l),$l[V].d(l),Il[Z].d(l),Vl[E].d(l),f(sl,l),f(tl,l),f(pl,l),f(rl,l),Al[g].d(l),f(ml,l),Zl[R].d(l),f(fl,l),f(hl,l),f(wl,l)}}}const Pe='{"title":"Обработка нескольких последовательностей","local":"handling-multiple-sequences","sections":[{"title":"Модели ожидают батч входов","local":"models-expect-a-batch-of-inputs","sections":[],"depth":2},{"title":"Дополнение входов","local":"padding-the-inputs","sections":[],"depth":2},{"title":"Маски внимания","local":"attention-masks","sections":[],"depth":2},{"title":"Более длинные последовательности","local":"longer-sequences","sections":[],"depth":2}],"depth":1}';function ln(U,n,p){let s="pt";return Ie(()=>{const r=new URLSearchParams(window.location.search);p(0,s=r.get("fw")||"pt")}),[s]}class rn extends Ve{constructor(n){super(),Ae(this,n,ln,Oe,$e,{})}}export{rn as component}; | |
Xet Storage Details
- Size:
- 50 kB
- Xet hash:
- 79803d989531fe17c234d78445145a6b67fa4d882c018882f9f22d5fbcfdf084
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.