import{s as pa,o as ua,n as Bt}from"../chunks/scheduler.37c15a92.js";import{S as ma,i as da,g as b,s as i,r as u,m as Ll,H as ya,A as Ja,h as T,f as n,c as o,j as Ht,u as m,x as j,n as Dl,E as Ua,k as Et,y as O,a,v as d,t as M,b as Z,d as c,w as y,p as G}from"../chunks/index.2bf4358c.js";import{T as ht}from"../chunks/Tip.363c041f.js";import{Y as oa}from"../chunks/Youtube.1e50a667.js";import{C as w}from"../chunks/CodeBlock.4e987730.js";import{C as Ma}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as ba}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as ft,E as Ta}from"../chunks/getInferenceSnippets.24b50994.js";function wa(J){let s,r;return s=new Ma({props:{chapter:6,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter6/section3b_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter6/section3b_tf.ipynb"}]}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function ja(J){let s,r;return s=new Ma({props:{chapter:6,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter6/section3b_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter6/section3b_pt.ipynb"}]}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function ha(J){let s,r;return s=new oa({props:{id:"b3u8RzBCX9Y"}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function fa(J){let s,r;return s=new oa({props:{id:"_wxyB3j3mk4"}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Ba(J){let s,r;return s=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbEZvclF1ZXN0aW9uQW5zd2VyaW5nJTBBJTBBbW9kZWxfY2hlY2twb2ludCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQtYmFzZS1jYXNlZC1kaXN0aWxsZWQtc3F1YWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChtb2RlbF9jaGVja3BvaW50KSUwQW1vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCklMEElMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIocXVlc3Rpb24lMkMlMjBjb250ZXh0JTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJ0ZiUyMiklMEFvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKippbnB1dHMp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForQuestionAnswering

model_checkpoint = <span class="hljs-string">&quot;distilbert-base-cased-distilled-squad&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
model = TFAutoModelForQuestionAnswering.from_pretrained(model_checkpoint)

inputs = tokenizer(question, context, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>)
outputs = model(**inputs)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Ia(J){let s,r;return s=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZyUwQSUwQW1vZGVsX2NoZWNrcG9pbnQlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtY2FzZWQtZGlzdGlsbGVkLXNxdWFkJTIyJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCklMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclF1ZXN0aW9uQW5zd2VyaW5nLmZyb21fcHJldHJhaW5lZChtb2RlbF9jaGVja3BvaW50KSUwQSUwQWlucHV0cyUyMCUzRCUyMHRva2VuaXplcihxdWVzdGlvbiUyQyUyMGNvbnRleHQlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnB0JTIyKSUwQW91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmlucHV0cyk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModelForQuestionAnswering

model_checkpoint = <span class="hljs-string">&quot;distilbert-base-cased-distilled-squad&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)
model = AutoModelForQuestionAnswering.from_pretrained(model_checkpoint)

inputs = tokenizer(question, context, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
outputs = model(**inputs)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Za(J){let s,r;return s=new w({props:{code:"KDElMkMlMjA2NiklMjAoMSUyQyUyMDY2KQ==",highlighted:'(<span class="hljs-number">1</span>, <span class="hljs-number">66</span>) (<span class="hljs-number">1</span>, <span class="hljs-number">66</span>)',wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Ga(J){let s,r;return s=new w({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNjYlNUQpJTIwdG9yY2guU2l6ZSglNUIxJTJDJTIwNjYlNUQp",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">66</span>]) torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">66</span>])',wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Va(J){let s,r;return s=new w({props:{code:"aW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKCklMEElMjMlMjBNYXNxdWUlMjB0b3V0JTJDJTIwc2F1ZiUyMGxlcyUyMHRva2VucyUyMGR1JTIwY29udGV4dGUlMEFtYXNrJTIwJTNEJTIwJTVCaSUyMCElM0QlMjAxJTIwZm9yJTIwaSUyMGluJTIwc2VxdWVuY2VfaWRzJTVEJTBBJTIzJTIwRCVDMyVBOW1hc3F1ZXIlMjBsZSUyMHRva2VuJTIwJTVCQ0xTJTVEJTBBbWFzayU1QjAlNUQlMjAlM0QlMjBGYWxzZSUwQW1hc2slMjAlM0QlMjB0Zi5jb25zdGFudChtYXNrKSU1Qk5vbmUlNUQlMEElMEFzdGFydF9sb2dpdHMlMjAlM0QlMjB0Zi53aGVyZShtYXNrJTJDJTIwLTEwMDAwJTJDJTIwc3RhcnRfbG9naXRzKSUwQWVuZF9sb2dpdHMlMjAlM0QlMjB0Zi53aGVyZShtYXNrJTJDJTIwLTEwMDAwJTJDJTIwZW5kX2xvZ2l0cyk=",highlighted:`<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Masque tout, sauf les tokens du contexte</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Démasquer le token [CLS]</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
mask = tf.constant(mask)[<span class="hljs-literal">None</span>]

start_logits = tf.where(mask, -<span class="hljs-number">10000</span>, start_logits)
end_logits = tf.where(mask, -<span class="hljs-number">10000</span>, end_logits)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function xa(J){let s,r;return s=new w({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFzZXF1ZW5jZV9pZHMlMjAlM0QlMjBpbnB1dHMuc2VxdWVuY2VfaWRzKCklMEElMjMlMjBNYXNxdWUlMjB0b3V0JTJDJTIwc2F1ZiUyMGxlcyUyMHRva2VucyUyMGR1JTIwY29udGV4dGUlMEFtYXNrJTIwJTNEJTIwJTVCaSUyMCElM0QlMjAxJTIwZm9yJTIwaSUyMGluJTIwc2VxdWVuY2VfaWRzJTVEJTBBJTIzJTIwRCVDMyVBOW1hc3F1ZXIlMjBsZSUyMHRva2VuJTIwJTVCQ0xTJTVEJTBBbWFzayU1QjAlNUQlMjAlM0QlMjBGYWxzZSUwQW1hc2slMjAlM0QlMjB0b3JjaC50ZW5zb3IobWFzayklNUJOb25lJTVEJTBBJTBBc3RhcnRfbG9naXRzJTVCbWFzayU1RCUyMCUzRCUyMC0xMDAwMCUwQWVuZF9sb2dpdHMlNUJtYXNrJTVEJTIwJTNEJTIwLTEwMDAw",highlighted:`<span class="hljs-keyword">import</span> torch

sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Masque tout, sauf les tokens du contexte</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Démasquer le token [CLS]</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
mask = torch.tensor(mask)[<span class="hljs-literal">None</span>]

start_logits[mask] = -<span class="hljs-number">10000</span>
end_logits[mask] = -<span class="hljs-number">10000</span>`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function va(J){let s,r;return s=new w({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBheGlzJTNELTEpJTVCMCU1RC5udW1weSgpJTBBZW5kX3Byb2JhYmlsaXRpZXMlMjAlM0QlMjB0Zi5tYXRoLnNvZnRtYXgoZW5kX2xvZ2l0cyUyQyUyMGF4aXMlM0QtMSklNUIwJTVELm51bXB5KCk=",highlighted:`start_probabilities = tf.math.softmax(start_logits, axis=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>].numpy()
end_probabilities = tf.math.softmax(end_logits, axis=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>].numpy()`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function ka(J){let s,r;return s=new w({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBkaW0lM0QtMSklNUIwJTVEJTBBZW5kX3Byb2JhYmlsaXRpZXMlMjAlM0QlMjB0b3JjaC5ubi5mdW5jdGlvbmFsLnNvZnRtYXgoZW5kX2xvZ2l0cyUyQyUyMGRpbSUzRC0xKSU1QjAlNUQ=",highlighted:`start_probabilities = torch.nn.functional.softmax(start_logits, dim=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>]
end_probabilities = torch.nn.functional.softmax(end_logits, dim=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>]`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function za(J){let s,r="Ensuite, nous masquerons les valeurs où <code>start_index &gt; end_index</code> en les mettant à <code>0</code> (les autres probabilités sont toutes des nombres positifs). La fonction <code>np.triu()</code> renvoie la partie triangulaire supérieure du tenseur 2D passé en argument, elle fera donc ce masquage pour nous :",l,p,U;return p=new w({props:{code:"c2NvcmVzJTIwJTNEJTIwbnAudHJpdShzY29yZXMp",highlighted:"scores = np.triu(scores)",wrap:!1}}),{c(){s=b("p"),s.innerHTML=r,l=i(),u(p.$$.fragment)},l(h){s=T(h,"P",{"data-svelte-h":!0}),j(s)!=="svelte-1stiyxu"&&(s.innerHTML=r),l=o(h),m(p.$$.fragment,h)},m(h,f){a(h,s,f),a(h,l,f),d(p,h,f),U=!0},i(h){U||(c(p.$$.fragment,h),U=!0)},o(h){M(p.$$.fragment,h),U=!1},d(h){h&&(n(s),n(l)),y(p,h)}}}function Wa(J){let s,r="Ensuite, nous masquerons les valeurs où <code>start_index &gt; end_index</code> en les mettant à <code>0</code> (les autres probabilités sont toutes des nombres positifs). La fonction <code>torch.triu()</code> renvoie la partie triangulaire supérieure du tenseur 2D passé en argument, elle fera donc ce masquage pour nous :",l,p,U;return p=new w({props:{code:"c2NvcmVzJTIwJTNEJTIwdG9yY2gudHJpdShzY29yZXMp",highlighted:"scores = torch.triu(scores)",wrap:!1}}),{c(){s=b("p"),s.innerHTML=r,l=i(),u(p.$$.fragment)},l(h){s=T(h,"P",{"data-svelte-h":!0}),j(s)!=="svelte-1u18bu8"&&(s.innerHTML=r),l=o(h),m(p.$$.fragment,h)},m(h,f){a(h,s,f),a(h,l,f),d(p,h,f),U=!0},i(h){U||(c(p.$$.fragment,h),U=!0)},o(h){M(p.$$.fragment,h),U=!1},d(h){h&&(n(s),n(l)),y(p,h)}}}function Xa(J){let s,r="✏️ <strong>Essayez !</strong> Calculez les indices de début et de fin pour les cinq réponses les plus probables.";return{c(){s=b("p"),s.innerHTML=r},l(l){s=T(l,"P",{"data-svelte-h":!0}),j(s)!=="svelte-y4g5l6"&&(s.innerHTML=r)},m(l,p){a(l,s,p)},p:Bt,d(l){l&&n(s)}}}function Qa(J){let s,r="✏️ <strong>Essayez !</strong> Utilisez les meilleurs scores que vous avez calculés précédemment pour afficher les cinq réponses les plus probables. Pour vérifier vos résultats, retournez au premier pipeline et passez dans <code>top_k=5</code> lorsque vous l’appelez.";return{c(){s=b("p"),s.innerHTML=r},l(l){s=T(l,"P",{"data-svelte-h":!0}),j(s)!=="svelte-ge9dm9"&&(s.innerHTML=r)},m(l,p){a(l,s,p)},p:Bt,d(l){l&&n(s)}}}function ga(J){let s,r,l,p;return s=new w({props:{code:"XyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIpJTBBb2Zmc2V0cyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb2Zmc2V0X21hcHBpbmclMjIpJTBBJTBBaW5wdXRzJTIwJTNEJTIwaW5wdXRzLmNvbnZlcnRfdG9fdGVuc29ycyglMjJ0ZiUyMiklMEFwcmludChpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQuc2hhcGUp",highlighted:`_ = inputs.pop(<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>)
offsets = inputs.pop(<span class="hljs-string">&quot;offset_mapping&quot;</span>)

inputs = inputs.convert_to_tensors(<span class="hljs-string">&quot;tf&quot;</span>)
<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>].shape)`,wrap:!1}}),l=new w({props:{code:"KDIlMkMlMjAzODQp",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">384</span>)',wrap:!1}}),{c(){u(s.$$.fragment),r=i(),u(l.$$.fragment)},l(U){m(s.$$.fragment,U),r=o(U),m(l.$$.fragment,U)},m(U,h){d(s,U,h),a(U,r,h),d(l,U,h),p=!0},i(U){p||(c(s.$$.fragment,U),c(l.$$.fragment,U),p=!0)},o(U){M(s.$$.fragment,U),M(l.$$.fragment,U),p=!1},d(U){U&&n(r),y(s,U),y(l,U)}}}function _a(J){let s,r,l,p;return s=new w({props:{code:"XyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIpJTBBb2Zmc2V0cyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb2Zmc2V0X21hcHBpbmclMjIpJTBBJTBBaW5wdXRzJTIwJTNEJTIwaW5wdXRzLmNvbnZlcnRfdG9fdGVuc29ycyglMjJwdCUyMiklMEFwcmludChpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQuc2hhcGUp",highlighted:`_ = inputs.pop(<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>)
offsets = inputs.pop(<span class="hljs-string">&quot;offset_mapping&quot;</span>)

inputs = inputs.convert_to_tensors(<span class="hljs-string">&quot;pt&quot;</span>)
<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>].shape)`,wrap:!1}}),l=new w({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMzg0JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>])',wrap:!1}}),{c(){u(s.$$.fragment),r=i(),u(l.$$.fragment)},l(U){m(s.$$.fragment,U),r=o(U),m(l.$$.fragment,U)},m(U,h){d(s,U,h),a(U,r,h),d(l,U,h),p=!0},i(U){p||(c(s.$$.fragment,U),c(l.$$.fragment,U),p=!0)},o(U){M(s.$$.fragment,U),M(l.$$.fragment,U),p=!1},d(U){U&&n(r),y(s,U),y(l,U)}}}function Ra(J){let s,r;return s=new w({props:{code:"KDIlMkMlMjAzODQpJTIwKDIlMkMlMjAzODQp",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">384</span>) (<span class="hljs-number">2</span>, <span class="hljs-number">384</span>)',wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Ca(J){let s,r;return s=new w({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMzg0JTVEKSUyMHRvcmNoLlNpemUoJTVCMiUyQyUyMDM4NCU1RCk=",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>]) torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>])',wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function $a(J){let s,r;return s=new w({props:{code:"c2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcygpJTBBJTIzJTIwTWFzcXVlJTIwdG91dCUyQyUyMHNhdWYlMjBsZXMlMjB0b2tlbnMlMjBkdSUyMGNvbnRleHRlJTBBbWFzayUyMCUzRCUyMCU1QmklMjAhJTNEJTIwMSUyMGZvciUyMGklMjBpbiUyMHNlcXVlbmNlX2lkcyU1RCUwQSUyMyUyMEQlQzMlQTltYXNxdWVyJTIwbGUlMjBqZXRvbiUyMCU1QkNMUyU1RCUwQW1hc2slNUIwJTVEJTIwJTNEJTIwRmFsc2UlMEElMjMlMjBNYXNxdWVyJTIwdG91cyUyMGxlcyUyMHRva2VucyUyMCU1QlBBRCU1RCUwQW1hc2slMjAlM0QlMjB0Zi5tYXRoLmxvZ2ljYWxfb3IodGYuY29uc3RhbnQobWFzayklNUJOb25lJTVEJTJDJTIwaW5wdXRzJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlNUQlMjAlM0QlM0QlMjAwKSUwQSUwQXN0YXJ0X2xvZ2l0cyUyMCUzRCUyMHRmLndoZXJlKG1hc2slMkMlMjAtMTAwMDAlMkMlMjBzdGFydF9sb2dpdHMpJTBBZW5kX2xvZ2l0cyUyMCUzRCUyMHRmLndoZXJlKG1hc2slMkMlMjAtMTAwMDAlMkMlMjBlbmRfbG9naXRzKQ==",highlighted:`sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Masque tout, sauf les tokens du contexte</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Démasquer le jeton [CLS]</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
<span class="hljs-comment"># Masquer tous les tokens [PAD]</span>
mask = tf.math.logical_or(tf.constant(mask)[<span class="hljs-literal">None</span>], inputs[<span class="hljs-string">&quot;attention_mask&quot;</span>] == <span class="hljs-number">0</span>)

start_logits = tf.where(mask, -<span class="hljs-number">10000</span>, start_logits)
end_logits = tf.where(mask, -<span class="hljs-number">10000</span>, end_logits)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Na(J){let s,r;return s=new w({props:{code:"c2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcygpJTBBJTIzJTIwTWFzcXVlJTIwdG91dCUyQyUyMHNhdWYlMjBsZXMlMjB0b2tlbnMlMjBkdSUyMGNvbnRleHRlJTBBbWFzayUyMCUzRCUyMCU1QmklMjAhJTNEJTIwMSUyMGZvciUyMGklMjBpbiUyMHNlcXVlbmNlX2lkcyU1RCUwQSUyMyUyMEQlQzMlQTltYXNxdWVyJTIwbGUlMjBqZXRvbiUyMCU1QkNMUyU1RCUwQW1hc2slNUIwJTVEJTIwJTNEJTIwRmFsc2UlMEElMjMlMjBNYXNxdWVyJTIwdG91cyUyMGxlcyUyMHRva2VucyUyMCU1QlBBRCU1RCUwQW1hc2slMjAlM0QlMjB0b3JjaC5sb2dpY2FsX29yKHRvcmNoLnRlbnNvcihtYXNrKSU1Qk5vbmUlNUQlMkMlMjAoaW5wdXRzJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlNUQlMjAlM0QlM0QlMjAwKSklMEElMEFzdGFydF9sb2dpdHMlNUJtYXNrJTVEJTIwJTNEJTIwLTEwMDAwJTBBZW5kX2xvZ2l0cyU1Qm1hc2slNUQlMjAlM0QlMjAtMTAwMDA=",highlighted:`sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Masque tout, sauf les tokens du contexte</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Démasquer le jeton [CLS]</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
<span class="hljs-comment"># Masquer tous les tokens [PAD]</span>
mask = torch.logical_or(torch.tensor(mask)[<span class="hljs-literal">None</span>], (inputs[<span class="hljs-string">&quot;attention_mask&quot;</span>] == <span class="hljs-number">0</span>))

start_logits[mask] = -<span class="hljs-number">10000</span>
end_logits[mask] = -<span class="hljs-number">10000</span>`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Ha(J){let s,r;return s=new w({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBheGlzJTNELTEpLm51bXB5KCklMEFlbmRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChlbmRfbG9naXRzJTJDJTIwYXhpcyUzRC0xKS5udW1weSgp",highlighted:`start_probabilities = tf.math.softmax(start_logits, axis=-<span class="hljs-number">1</span>).numpy()
end_probabilities = tf.math.softmax(end_logits, axis=-<span class="hljs-number">1</span>).numpy()`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Ea(J){let s,r;return s=new w({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBkaW0lM0QtMSklMEFlbmRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChlbmRfbG9naXRzJTJDJTIwZGltJTNELTEp",highlighted:`start_probabilities = torch.nn.functional.softmax(start_logits, dim=-<span class="hljs-number">1</span>)
end_probabilities = torch.nn.functional.softmax(end_logits, dim=-<span class="hljs-number">1</span>)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Ya(J){let s,r;return s=new w({props:{code:"Y2FuZGlkYXRlcyUyMCUzRCUyMCU1QiU1RCUwQWZvciUyMHN0YXJ0X3Byb2JzJTJDJTIwZW5kX3Byb2JzJTIwaW4lMjB6aXAoc3RhcnRfcHJvYmFiaWxpdGllcyUyQyUyMGVuZF9wcm9iYWJpbGl0aWVzKSUzQSUwQSUyMCUyMCUyMCUyMHNjb3JlcyUyMCUzRCUyMHN0YXJ0X3Byb2JzJTVCJTNBJTJDJTIwTm9uZSU1RCUyMColMjBlbmRfcHJvYnMlNUJOb25lJTJDJTIwJTNBJTVEJTBBJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwbnAudHJpdShzY29yZXMpLmFyZ21heCgpLml0ZW0oKSUwQSUwQSUyMCUyMCUyMCUyMHN0YXJ0X2lkeCUyMCUzRCUyMGlkeCUyMCUyRiUyRiUyMHNjb3Jlcy5zaGFwZSU1QjElNUQlMEElMjAlMjAlMjAlMjBlbmRfaWR4JTIwJTNEJTIwaWR4JTIwJTI1JTIwc2NvcmVzLnNoYXBlJTVCMSU1RCUwQSUyMCUyMCUyMCUyMHNjb3JlJTIwJTNEJTIwc2NvcmVzJTVCc3RhcnRfaWR4JTJDJTIwZW5kX2lkeCU1RC5pdGVtKCklMEElMjAlMjAlMjAlMjBjYW5kaWRhdGVzLmFwcGVuZCgoc3RhcnRfaWR4JTJDJTIwZW5kX2lkeCUyQyUyMHNjb3JlKSklMEElMEFwcmludChjYW5kaWRhdGVzKQ==",highlighted:`candidates = []
<span class="hljs-keyword">for</span> start_probs, end_probs <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(start_probabilities, end_probabilities):
    scores = start_probs[:, <span class="hljs-literal">None</span>] * end_probs[<span class="hljs-literal">None</span>, :]
    idx = np.triu(scores).argmax().item()

    start_idx = idx // scores.shape[<span class="hljs-number">1</span>]
    end_idx = idx % scores.shape[<span class="hljs-number">1</span>]
    score = scores[start_idx, end_idx].item()
    candidates.append((start_idx, end_idx, score))

<span class="hljs-built_in">print</span>(candidates)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Sa(J){let s,r;return s=new w({props:{code:"Y2FuZGlkYXRlcyUyMCUzRCUyMCU1QiU1RCUwQWZvciUyMHN0YXJ0X3Byb2JzJTJDJTIwZW5kX3Byb2JzJTIwaW4lMjB6aXAoc3RhcnRfcHJvYmFiaWxpdGllcyUyQyUyMGVuZF9wcm9iYWJpbGl0aWVzKSUzQSUwQSUyMCUyMCUyMCUyMHNjb3JlcyUyMCUzRCUyMHN0YXJ0X3Byb2JzJTVCJTNBJTJDJTIwTm9uZSU1RCUyMColMjBlbmRfcHJvYnMlNUJOb25lJTJDJTIwJTNBJTVEJTBBJTIwJTIwJTIwJTIwaWR4JTIwJTNEJTIwdG9yY2gudHJpdShzY29yZXMpLmFyZ21heCgpLml0ZW0oKSUwQSUwQSUyMCUyMCUyMCUyMHN0YXJ0X2lkeCUyMCUzRCUyMGlkeCUyMCUyRiUyRiUyMHNjb3Jlcy5zaGFwZSU1QjElNUQlMEElMjAlMjAlMjAlMjBlbmRfaWR4JTIwJTNEJTIwaWR4JTIwJTI1JTIwc2NvcmVzLnNoYXBlJTVCMSU1RCUwQSUyMCUyMCUyMCUyMHNjb3JlJTIwJTNEJTIwc2NvcmVzJTVCc3RhcnRfaWR4JTJDJTIwZW5kX2lkeCU1RC5pdGVtKCklMEElMjAlMjAlMjAlMjBjYW5kaWRhdGVzLmFwcGVuZCgoc3RhcnRfaWR4JTJDJTIwZW5kX2lkeCUyQyUyMHNjb3JlKSklMEElMEFwcmludChjYW5kaWRhdGVzKQ==",highlighted:`candidates = []
<span class="hljs-keyword">for</span> start_probs, end_probs <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(start_probabilities, end_probabilities):
    scores = start_probs[:, <span class="hljs-literal">None</span>] * end_probs[<span class="hljs-literal">None</span>, :]
    idx = torch.triu(scores).argmax().item()

    start_idx = idx // scores.shape[<span class="hljs-number">1</span>]
    end_idx = idx % scores.shape[<span class="hljs-number">1</span>]
    score = scores[start_idx, end_idx].item()
    candidates.append((start_idx, end_idx, score))

<span class="hljs-built_in">print</span>(candidates)`,wrap:!1}}),{c(){u(s.$$.fragment)},l(l){m(s.$$.fragment,l)},m(l,p){d(s,l,p),r=!0},i(l){r||(c(s.$$.fragment,l),r=!0)},o(l){M(s.$$.fragment,l),r=!1},d(l){y(s,l)}}}function Fa(J){let s,r="✏️ <strong>Essayez !</strong> Adaptez le code ci-dessus pour renvoyer les scores et les étendues des cinq réponses les plus probables (au total, pas par morceau).";return{c(){s=b("p"),s.innerHTML=r},l(l){s=T(l,"P",{"data-svelte-h":!0}),j(s)!=="svelte-1h47qsq"&&(s.innerHTML=r)},m(l,p){a(l,s,p)},p:Bt,d(l){l&&n(s)}}}function qa(J){let s,r="✏️ <strong>Essayez !</strong> Utilisez les meilleurs scores que vous avez calculés auparavant pour montrer les cinq réponses les plus probables (pour l’ensemble du contexte, pas pour chaque morceau). Pour vérifier vos résultats, retournez au premier pipeline et spécifiez <code>top_k=5</code> en argument en l’appelant.";return{c(){s=b("p"),s.innerHTML=r},l(l){s=T(l,"P",{"data-svelte-h":!0}),j(s)!=="svelte-9gdtzq"&&(s.innerHTML=r)},m(l,p){a(l,s,p)},p:Bt,d(l){l&&n(s)}}}function Aa(J){let s,r,l,p,U,h,f,Pl,V,x,zl,ne,Yt="Nous allons maintenant nous plonger dans le pipeline de <code>question-answering</code> et voir comment exploiter les <em>offsets</em> pour extraire d’un contexte la réponse à la question posée. Nous verrons ensuite comment gérer les contextes très longs qui finissent par être tronqués. Vous pouvez sauter cette section si vous n’êtes pas intéressé par la tâche de réponse aux questions.",Ol,v,k,Wl,ae,Kl,re,St='Comme nous l’avons vu dans le <a href="/course/fr/chapter1">chapitre 1</a>, nous pouvons utiliser le pipeline de <code>question-answering</code> comme ceci pour obtenir une réponse à une question :',es,ie,ls,oe,ss,Me,Ft="Contrairement aux autres pipelines, qui ne peuvent pas tronquer et diviser les textes dont la longueur est supérieure à la longueur maximale acceptée par le modèle (et qui peuvent donc manquer des informations à la fin d’un document), ce pipeline peut traiter des contextes très longs et retournera la réponse à la question même si elle se trouve à la fin :",ts,ce,ns,pe,as,ue,qt="Voyons comment il fait tout cela !",rs,me,is,de,At='Comme avec n’importe quel autre pipeline, nous commençons par tokeniser notre entrée et l’envoyons ensuite à travers le modèle. Le <em>checkpoint</em> utilisé par défaut pour le pipeline de <code>question-answering</code> est <a href="https://huggingface.co/distilbert-base-cased-distilled-squad" rel="nofollow"><code>distilbert-base-cased-distilled-squad</code></a> (le « squad » dans le nom vient du jeu de données sur lequel le modèle a été <em>finetuné</em>, nous parlerons davantage de ce jeu de données dans le <a href="/course/fr/chapter7/7">chapitre 7</a>) :',os,z,W,Xl,ye,Lt="Notez que nous tokenizons la question et le contexte comme une paire, la question en premier.",Ms,K,Dt='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/question_tokens.svg" alt="An example of tokenization of question and context"/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/question_tokens-dark.svg" alt="An example of tokenization of question and context"/>',cs,Je,Pt="Les modèles de réponse aux questions fonctionnent un peu différemment des modèles que nous avons vus jusqu’à présent. En utilisant l’image ci-dessus comme exemple, le modèle a été entraîné à prédire l’index du <em>token</em> de début de la réponse (ici 21) et l’index du <em>token</em> où la réponse se termine (ici 24). C’est pourquoi ces modèles ne retournent pas un tenseur de logits mais deux : un pour les logits correspondant au <em>token</em> de début de la réponse, et un pour les logits correspondant au <em>token</em> de fin de la réponse. Puisque dans ce cas nous n’avons qu’une seule entrée contenant 66 <em>tokens</em>, nous obtenons :",ps,Ue,us,X,Q,Ql,be,Ot="Pour convertir ces logits en probabilités, nous allons appliquer une fonction softmax. Mais avant cela, nous devons nous assurer de masquer les indices qui ne font pas partie du contexte. Notre entrée est <code>[CLS] question [SEP] contexte [SEP]</code> donc nous devons masquer les <em>tokens</em> de la question ainsi que le <em>token</em> <code>[SEP]</code>. Nous garderons cependant le <em>token</em> <code>[CLS]</code> car certains modèles l’utilisent pour indiquer que la réponse n’est pas dans le contexte.",ms,Te,Kt="Puisque nous appliquerons une fonction softmax par la suite, il nous suffit de remplacer les logits que nous voulons masquer par un grand nombre négatif. Ici, nous utilisons <code>-10000</code> :",ds,g,_,gl,we,en="Maintenant que nous avons correctement masqué les logits correspondant aux positions que nous ne voulons pas prédire, nous pouvons appliquer la softmax :",ys,R,C,_l,je,ln="A ce stade, nous pourrions prendre l’argmax des probabilités de début et de fin mais nous pourrions nous retrouver avec un indice de début supérieur à l’indice de fin. Nous devons donc prendre quelques précautions supplémentaires. Nous allons calculer les probabilités de chaque <code>start_index</code> et <code>end_index</code> possible où <code>start_index&lt;=end_index</code>, puis nous prendrons le <em>tuple</em> <code>(start_index, end_index)</code> avec la plus grande probabilité.",Js,B,It,Rl,sn="start_index",Zt,Cl,tn="end_index",Gt,$l,nn="start_index",Vt,Nl,an="end_index",xt,Us,ca='<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo><mo>×</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">\\mathrm{start\\_probabilities}[\\mathrm{start\\_index}] \\times \\mathrm{end\\_probabilities}[\\mathrm{end\\_index}]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">start_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">start_index</span></span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">end_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">end_index</span></span><span class="mclose">]</span></span></span></span></span>',bs,he,rn="Ainsi, pour calculer tous les scores, il suffit de calculer tous les produits $$\\(\\mathrm{start_probabilities}[\\mathrm{start_index}] \\times \\mathrm{end_probabilities}[\\mathrm{end_index}]\\)$$ où <code>start_index &lt;= end_index</code>.",Ts,fe,on="Calculons d’abord tous les produits possibles :",ws,Be,js,$,N,Hl,Ie,Mn="Il ne nous reste plus qu’à obtenir l’indice du maximum. Puisque PyTorch retourne l’index dans le tenseur aplati, nous devons utiliser les opérations division <code>//</code> et modulo <code>%</code> pour obtenir le <code>start_index</code> et le <code>end_index</code> :",hs,Ze,fs,Ge,cn="Nous n’avons pas encore tout à fait terminé, mais au moins nous avons déjà le score correct pour la réponse (vous pouvez le vérifier en le comparant au premier résultat de la section précédente) :",Bs,Ve,Is,ee,Zs,xe,pn="Nous avons les <code>start_index</code> et <code>end_index</code> de la réponse en termes de <em>tokens</em>. Maintenant nous devons juste convertir en indices de caractères dans le contexte. C’est là que les <em>offsets</em> seront super utiles. Nous pouvons les saisir et les utiliser comme nous l’avons fait dans la tâche de classification des <em>tokens</em> :",Gs,ve,Vs,ke,un="Il ne nous reste plus qu’à tout formater pour obtenir notre résultat :",xs,ze,vs,We,ks,Xe,mn="Super ! C’est la même chose que dans notre premier exemple !",zs,le,Ws,Qe,Xs,ge,dn="Si nous essayons de tokeniser la question et le long contexte que nous avons utilisé dans l’exemple précédemment, nous obtenons un nombre de <em>tokens</em> supérieur à la longueur maximale utilisée dans le pipeline <code>question-answering</code> (qui est de 384) :",Qs,_e,gs,Re,_s,Ce,yn="Nous devrons donc tronquer nos entrées à cette longueur maximale. Il y a plusieurs façons de le faire mais nous ne voulons pas tronquer la question, seulement le contexte. Puisque le contexte est la deuxième phrase, nous utilisons la stratégie de troncature <code>&quot;only_second&quot;</code>. Le problème qui se pose alors est que la réponse à la question peut ne pas se trouver dans le contexte tronqué. Ici, par exemple, nous avons choisi une question dont la réponse se trouve vers la fin du contexte, et lorsque nous la tronquons, cette réponse n’est pas présente :",Rs,$e,Cs,Ne,$s,He,Jn="Cela signifie que le modèle a du mal à trouver la bonne réponse. Pour résoudre ce problème, le pipeline de <code>question-answering</code> nous permet de diviser le contexte en morceaux plus petits, en spécifiant la longueur maximale. Pour s’assurer que nous ne divisons pas le contexte exactement au mauvais endroit pour permettre de trouver la réponse, il inclut également un certain chevauchement entre les morceaux.",Ns,Ee,Un="Nous pouvons demander au <em>tokenizer</em> (rapide ou lent) de le faire pour nous en ajoutant <code>return_overflowing_tokens=True</code>, et nous pouvons spécifier le chevauchement que nous voulons avec l’argument <code>stride</code>. Voici un exemple, en utilisant une phrase plus petite :",Hs,Ye,Es,Se,Ys,Fe,bn="Comme on peut le voir, la phrase a été découpée en morceaux de telle sorte que chaque entrée dans <code>inputs[&quot;input_ids&quot;]</code> a au maximum 6 <em>tokens</em> (il faudrait ajouter du <em>padding</em> pour que la dernière entrée ait la même taille que les autres) et il y a un chevauchement de 2 <em>tokens</em> entre chacune des entrées.",Ss,qe,Tn="Regardons de plus près le résultat de la tokénisation :",Fs,Ae,qs,Le,As,De,wn="Comme prévu, nous obtenons les identifiants d’entrée et un masque d’attention. La dernière clé, <code>overflow_to_sample_mapping</code>, est une carte qui nous indique à quelle phrase correspond chacun des résultats. Ici nous avons 7 résultats qui proviennent tous de la (seule) phrase que nous avons passée au <em>tokenizer</em> :",Ls,Pe,Ds,Oe,Ps,Ke,jn="C’est plus utile lorsque nous tokenisons plusieurs phrases ensemble. Par exemple :",Os,el,Ks,ll,hn="nous donne :",et,sl,lt,tl,fn="ce qui signifie que la première phrase est divisée en 7 morceaux comme précédemment et que les 4 morceaux suivants proviennent de la deuxième phrase.",st,nl,Bn="Revenons maintenant à notre contexte long. Par défaut, le pipeline <code>question-answering</code> utilise une longueur maximale de 384 et un <em>stride</em> de 128, qui correspondent à la façon dont le modèle a été <em>finetuné</em> (vous pouvez ajuster ces paramètres en passant les arguments <code>max_seq_len</code> et <code>stride</code> lorsque vous appelez le pipeline). Nous utiliserons donc ces paramètres lors de la tokenisation. Nous ajouterons aussi du <em>padding</em> (pour avoir des échantillons de même longueur afin de pouvoir construire des tenseurs) ainsi que demander les <em>offsets</em> :",tt,al,nt,rl,In="Ces <code>inputs</code> contiendront les identifiants d’entrée, les masques d’attention que le modèle attend, ainsi que les <em>offsets</em> et le <code>overflow_to_sample_mapping</code> dont on vient de parler. Puisque ces deux éléments ne sont pas des paramètres utilisés par le modèle, nous allons les sortir des <code>inputs</code> (et nous ne stockerons pas la correspondance puisqu’elle n’est pas utile ici) avant de le convertir en tenseur :",at,H,E,El,il,Zn="Notre contexte long a été divisé en deux, ce qui signifie qu’après avoir traversé notre modèle, nous aurons deux ensembles de logits de début et de fin :",rt,ol,it,Y,S,Yl,Ml,Gn="Comme précédemment, nous masquons d’abord les <em>tokens</em> qui ne font pas partie du contexte avant de prendre le softmax. Nous masquons également tous les <em>tokens</em> de <em>padding</em> (tels que signalés par le masque d’attention) :",ot,F,q,Sl,cl,Vn="Ensuite, nous pouvons utiliser la fonction softmax pour convertir nos logits en probabilités :",Mt,A,L,Fl,pl,xn="L’étape suivante est similaire à ce que nous avons fait pour le petit contexte mais nous la répétons pour chacun de nos deux morceaux. Nous attribuons un score à tous les espaces de réponse possibles puis nous prenons l’espace ayant le meilleur score :",ct,D,P,ql,ul,pt,ml,vn="Ces deux candidats correspondent aux meilleures réponses que le modèle a pu trouver dans chaque morceau. Le modèle est beaucoup plus confiant dans le fait que la bonne réponse se trouve dans la deuxième partie (ce qui est bon signe !). Il ne nous reste plus qu’à faire correspondre ces deux espaces de <em>tokens</em> à des espaces de caractères dans le contexte (nous n’avons besoin de faire correspondre que le second pour avoir notre réponse, mais il est intéressant de voir ce que le modèle a choisi dans le premier morceau).",ut,se,mt,dl,kn="Le <code>offsets</code> que nous avons saisi plus tôt est en fait une liste d’<em>offsets</em> avec une liste par morceau de texte :",dt,yl,yt,Jl,Jt,Ul,zn="Si nous ignorons le premier résultat, nous obtenons le même résultat que notre pipeline pour ce long contexte !",Ut,te,bt,bl,Wn="Ceci conclut notre plongée en profondeur dans les capacités du <em>tokenizer</em>. Nous mettrons à nouveau tout cela en pratique dans le prochain chapitre, lorsque nous vous montrerons comment <em>finetuner</em> un modèle sur une série de tâches NLP courantes.",Tt,Tl,wt,Al,jt;U=new ba({props:{fw:J[0]}}),f=new ft({props:{title:"<i> Tokenizer </i> rapide dans le pipeline de QA",local:"i-tokenizer-i-rapide-dans-le-pipeline-de-qa",headingTag:"h1"}});const Xn=[ja,wa],wl=[];function Qn(e,t){return e[0]==="pt"?0:1}V=Qn(J),x=wl[V]=Xn[V](J);const gn=[fa,ha],jl=[];function _n(e,t){return e[0]==="pt"?0:1}v=_n(J),k=jl[v]=gn[v](J),ae=new ft({props:{title:"Utilisation du pipeline de question-answering",local:"utilisation-du-pipeline-de-question-answering",headingTag:"h2"}}),ie=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBcXVlc3Rpb25fYW5zd2VyZXIlMjAlM0QlMjBwaXBlbGluZSglMjJxdWVzdGlvbi1hbnN3ZXJpbmclMjIpJTBBY29udGV4dCUyMCUzRCUyMCUyMiUyMiUyMiUwQSVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUyMGlzJTIwYmFja2VkJTIwYnklMjB0aGUlMjB0aHJlZSUyMG1vc3QlMjBwb3B1bGFyJTIwZGVlcCUyMGxlYXJuaW5nJTIwbGlicmFyaWVzJTBBJTIwJUUyJTgwJTk0JTIwSmF4JTJDJTIwUHlUb3JjaCUyQyUyMGFuZCUyMFRlbnNvckZsb3clMjAlRTIlODAlOTQlMjB3aXRoJTIwYSUyMHNlYW1sZXNzJTIwaW50ZWdyYXRpb24lMjBiZXR3ZWVuJTIwdGhlbS4lMjAlMEFJdCdzJTIwc3RyYWlnaHRmb3J3YXJkJTIwdG8lMjB0cmFpbiUyMHlvdXIlMjBtb2RlbHMlMjB3aXRoJTIwb25lJTIwYmVmb3JlJTIwbG9hZGluZyUyMHRoZW0lMjBmb3IlMjBpbmZlcmVuY2UlMjB3aXRoJTIwdGhlJTIwb3RoZXIuJTBBJTIyJTIyJTIyJTBBJTIzJTIwJUYwJTlGJUE0JTk3JTIwVHJhbnNmb3JtZXJzJTIwcydhcHB1aWUlMjBzdXIlMjBsZXMlMjB0cm9pcyUyMGJpYmxpb3RoJUMzJUE4cXVlcyUyMGQnYXBwcmVudGlzc2FnZSUyMHByb2ZvbmQlMjBsZXMlMjBwbHVzJTIwcG9wdWxhaXJlcyUwQSUyMyUyMChKYXglMkMlMjBQeVRvcmNoJTIwZXQlMjBUZW5zb3JGbG93KSUyMGF2ZWMlMjB1bmUlMjBpbnQlQzMlQTlncmF0aW9uJTIwdHJhbnNwYXJlbnRlJTIwZW50cmUlMjBlbGxlcy4lMEElMjMlMjBDJ2VzdCUyMHNpbXBsZSUyMGQnZW50cmElQzMlQUVuZXIlMjB2b3MlMjBtb2QlQzMlQThsZXMlMjBhdmVjJTIwbCd1bmUlMjBhdmFudCUyMGRlJTIwbGVzJTIwY2hhcmdlciUyMHBvdXIlMjBsJ2luZiVDMyVBOXJlbmNlJTIwYXZlYyUyMGwnYXV0cmUuJTBBcXVlc3Rpb24lMjAlM0QlMjAlMjJXaGljaCUyMGRlZXAlMjBsZWFybmluZyUyMGxpYnJhcmllcyUyMGJhY2slMjAlRjAlOUYlQTQlOTclMjBUcmFuc2Zvcm1lcnMlM0YlMjIlMEElMjMlMjBRdWVsbGVzJTIwYmlibGlvdGglQzMlQThxdWVzJTIwZCdhcHByZW50aXNzYWdlJTIwcHJvZm9uZCUyMGRlcnJpJUMzJUE4cmUlMjAlRjAlOUYlQTQlOTclMjBUcmFuc2Zvcm1lcnMlMjAlM0YlMEFxdWVzdGlvbl9hbnN3ZXJlcihxdWVzdGlvbiUzRHF1ZXN0aW9uJTJDJTIwY29udGV4dCUzRGNvbnRleHQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

question_answerer = pipeline(<span class="hljs-string">&quot;question-answering&quot;</span>)
context = <span class="hljs-string">&quot;&quot;&quot;
🤗 Transformers is backed by the three most popular deep learning libraries
 — Jax, PyTorch, and TensorFlow — with a seamless integration between them. 
It&#x27;s straightforward to train your models with one before loading them for inference with the other.
&quot;&quot;&quot;</span>
<span class="hljs-comment"># 🤗 Transformers s&#x27;appuie sur les trois bibliothèques d&#x27;apprentissage profond les plus populaires</span>
<span class="hljs-comment"># (Jax, PyTorch et TensorFlow) avec une intégration transparente entre elles.</span>
<span class="hljs-comment"># C&#x27;est simple d&#x27;entraîner vos modèles avec l&#x27;une avant de les charger pour l&#x27;inférence avec l&#x27;autre.</span>
question = <span class="hljs-string">&quot;Which deep learning libraries back 🤗 Transformers?&quot;</span>
<span class="hljs-comment"># Quelles bibliothèques d&#x27;apprentissage profond derrière 🤗 Transformers ?</span>
question_answerer(question=question, context=context)`,wrap:!1}}),oe=new w({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTc3NzMlMkMlMEElMjAnc3RhcnQnJTNBJTIwNzglMkMlMEElMjAnZW5kJyUzQSUyMDEwNSUyQyUwQSUyMCdhbnN3ZXInJTNBJTIwJ0pheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JyU3RA==",highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97773</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">78</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">105</span>,
 <span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>}`,wrap:!1}}),ce=new w({props:{code:" ",highlighted:`long_context = <span class="hljs-string">&quot;&quot;&quot;
🤗 Transformers: State of the Art NLP

🤗 Transformers provides thousands of pretrained models to perform tasks on texts such as classification, information extraction,
question answering, summarization, translation, text generation and more in over 100 languages.
Its aim is to make cutting-edge NLP easier to use for everyone.

🤗 Transformers provides APIs to quickly download and use those pretrained models on a given text, fine-tune them on your own datasets and
then share them with the community on our model hub. At the same time, each python module defining an architecture is fully standalone and
can be modified to enable quick research experiments.

Why should I use transformers?

1. Easy-to-use state-of-the-art models:
  - High performance on NLU and NLG tasks.
  - Low barrier to entry for educators and practitioners.
  - Few user-facing abstractions with just three classes to learn.
  - A unified API for using all our pretrained models.
  - Lower compute costs, smaller carbon footprint:

2. Researchers can share trained models instead of always retraining.
  - Practitioners can reduce compute time and production costs.
  - Dozens of architectures with over 10,000 pretrained models, some in more than 100 languages.

3. Choose the right framework for every part of a model&#x27;s lifetime:
  - Train state-of-the-art models in 3 lines of code.
  - Move a single model between TF2.0/PyTorch frameworks at will.
  - Seamlessly pick the right framework for training, evaluation and production.

4. Easily customize a model or an example to your needs:
  - We provide examples for each architecture to reproduce the results published by its original authors.
  - Model internals are exposed as consistently as possible.
  - Model files can be used independently of the library for quick experiments.

🤗 Transformers is backed by the three most popular deep learning libraries — Jax, PyTorch and TensorFlow — with a seamless integration
between them. It&#x27;s straightforward to train your models with one before loading them for inference with the other.
&quot;&quot;&quot;</span>

long_context - fr = <span class="hljs-string">&quot;&quot;&quot;
🤗 Transformers : l&#x27;état de l&#x27;art du NLP

🤗 Transformers fournit des milliers de modèles pré-entraînés pour effectuer des tâches sur des textes telles que la classification, 
l&#x27;extraction d&#x27;informations, la réponse à des questions, le résumé de textes, la traduction, la génération de texte et plus encore dans plus de 100 langues.
Son objectif est de rendre le traitement automatique des langues de pointe plus facile à utiliser pour tout le monde.

🤗 Transformers fournit des API permettant de télécharger et d&#x27;utiliser rapidement ces modèles pré-entraînés sur un texte donné, de les affiner sur vos propres ensembles de données et de les partager avec la communauté sur notre site Web.
puis de les partager avec la communauté sur notre hub de modèles. En même temps, chaque module python définissant une architecture est entièrement autonome et peut être modifié pour permettre des expériences de recherche rapides.
peut être modifié pour permettre des expériences de recherche rapides.

Pourquoi devrais-je utiliser des transformateurs ?

1. Des modèles de pointe faciles à utiliser :
  - Haute performance sur les tâches NLU et NLG.
  - Faible barrière à l&#x27;entrée pour les éducateurs et les praticiens.
  - Peu d&#x27;abstractions pour l&#x27;utilisateur avec seulement trois classes à apprendre.
  - Une API unifiée pour utiliser tous nos modèles pré-entraînés.
  - Des coûts de calcul plus faibles, une empreinte carbone réduite :

2. Les chercheurs peuvent partager les modèles formés au lieu de toujours les reformer.
  - Les praticiens peuvent réduire le temps de calcul et les coûts de production.
  - Des dizaines d&#x27;architectures avec plus de 10 000 modèles pré-formés, certains dans plus de 100 langues.

3. Choisissez le cadre approprié pour chaque étape de la vie d&#x27;un modèle :
  - Entraînez des modèles de pointe en 3 lignes de code.
  - Déplacez un seul modèle entre les frameworks TF2.0/PyTorch à volonté.
  - Choisissez de manière transparente le bon framework pour l&#x27;entraînement, l&#x27;évaluation et la production.

4. Adaptez facilement un modèle ou un exemple à vos besoins :
  - Nous fournissons des exemples pour chaque architecture afin de reproduire les résultats publiés par ses auteurs originaux.
  - Les éléments internes des modèles sont exposés de manière aussi cohérente que possible.
  - Les fichiers de modèles peuvent être utilisés indépendamment de la bibliothèque pour des expériences rapides.

🤗 Transformers s&#x27;appuie sur les trois bibliothèques d&#x27;apprentissage profond les plus populaires (Jax, PyTorch et TensorFlow) avec une intégration parfaite
entre elles. Il est simple d&#x27;entraîner vos modèles avec l&#x27;une avant de les charger pour l&#x27;inférence avec l&#x27;autre.
&quot;&quot;&quot;</span>
question_answerer(question=question, context=long_context)`,wrap:!1}}),pe=new w({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTcxNDklMkMlMEElMjAnc3RhcnQnJTNBJTIwMTg5MiUyQyUwQSUyMCdlbmQnJTNBJTIwMTkxOSUyQyUwQSUyMCdhbnN3ZXInJTNBJTIwJ0pheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JyU3RA==",highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97149</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">1892</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">1919</span>,
 <span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>}`,wrap:!1}}),me=new ft({props:{title:"Utilisation d’un modèle pour répondre à des questions",local:"utilisation-dun-modèle-pour-répondre-à-des-questions",headingTag:"h3"}});const Rn=[Ia,Ba],hl=[];function Cn(e,t){return e[0]==="pt"?0:1}z=Cn(J),W=hl[z]=Rn[z](J),Ue=new w({props:{code:"c3RhcnRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5zdGFydF9sb2dpdHMlMEFlbmRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5lbmRfbG9naXRzJTBBcHJpbnQoc3RhcnRfbG9naXRzLnNoYXBlJTJDJTIwZW5kX2xvZ2l0cy5zaGFwZSk=",highlighted:`start_logits = outputs.start_logits
end_logits = outputs.end_logits
<span class="hljs-built_in">print</span>(start_logits.shape, end_logits.shape)`,wrap:!1}});const $n=[Ga,Za],fl=[];function Nn(e,t){return e[0]==="pt"?0:1}X=Nn(J),Q=fl[X]=$n[X](J);const Hn=[xa,Va],Bl=[];function En(e,t){return e[0]==="pt"?0:1}g=En(J),_=Bl[g]=Hn[g](J);const Yn=[ka,va],Il=[];function Sn(e,t){return e[0]==="pt"?0:1}R=Sn(J),C=Il[R]=Yn[R](J),Be=new w({props:{code:"c2NvcmVzJTIwJTNEJTIwc3RhcnRfcHJvYmFiaWxpdGllcyU1QiUzQSUyQyUyME5vbmUlNUQlMjAqJTIwZW5kX3Byb2JhYmlsaXRpZXMlNUJOb25lJTJDJTIwJTNBJTVE",highlighted:'scores = start_probabilities[:, <span class="hljs-literal">None</span>] * end_probabilities[<span class="hljs-literal">None</span>, :]',wrap:!1}});const Fn=[Wa,za],Zl=[];function qn(e,t){return e[0]==="pt"?0:1}$=qn(J),N=Zl[$]=Fn[$](J),Ze=new w({props:{code:"bWF4X2luZGV4JTIwJTNEJTIwc2NvcmVzLmFyZ21heCgpLml0ZW0oKSUwQXN0YXJ0X2luZGV4JTIwJTNEJTIwbWF4X2luZGV4JTIwJTJGJTJGJTIwc2NvcmVzLnNoYXBlJTVCMSU1RCUwQWVuZF9pbmRleCUyMCUzRCUyMG1heF9pbmRleCUyMCUyNSUyMHNjb3Jlcy5zaGFwZSU1QjElNUQlMEFwcmludChzY29yZXMlNUJzdGFydF9pbmRleCUyQyUyMGVuZF9pbmRleCU1RCk=",highlighted:`max_index = scores.argmax().item()
start_index = max_index // scores.shape[<span class="hljs-number">1</span>]
end_index = max_index % scores.shape[<span class="hljs-number">1</span>]
<span class="hljs-built_in">print</span>(scores[start_index, end_index])`,wrap:!1}}),Ve=new w({props:{code:"MC45Nzc3Mw==",highlighted:'<span class="hljs-number">0.97773</span>',wrap:!1}}),ee=new ht({props:{$$slots:{default:[Xa]},$$scope:{ctx:J}}}),ve=new w({props:{code:"aW5wdXRzX3dpdGhfb2Zmc2V0cyUyMCUzRCUyMHRva2VuaXplcihxdWVzdGlvbiUyQyUyMGNvbnRleHQlMkMlMjByZXR1cm5fb2Zmc2V0c19tYXBwaW5nJTNEVHJ1ZSklMEFvZmZzZXRzJTIwJTNEJTIwaW5wdXRzX3dpdGhfb2Zmc2V0cyU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTBBJTBBc3RhcnRfY2hhciUyQyUyMF8lMjAlM0QlMjBvZmZzZXRzJTVCc3RhcnRfaW5kZXglNUQlMEFfJTJDJTIwZW5kX2NoYXIlMjAlM0QlMjBvZmZzZXRzJTVCZW5kX2luZGV4JTVEJTBBYW5zd2VyJTIwJTNEJTIwY29udGV4dCU1QnN0YXJ0X2NoYXIlM0FlbmRfY2hhciU1RA==",highlighted:`inputs_with_offsets = tokenizer(question, context, return_offsets_mapping=<span class="hljs-literal">True</span>)
offsets = inputs_with_offsets[<span class="hljs-string">&quot;offset_mapping&quot;</span>]

start_char, _ = offsets[start_index]
_, end_char = offsets[end_index]
answer = context[start_char:end_char]`,wrap:!1}}),ze=new w({props:{code:"cmVzdWx0JTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIyYW5zd2VyJTIyJTNBJTIwYW5zd2VyJTJDJTBBJTIwJTIwJTIwJTIwJTIyc3RhcnQlMjIlM0ElMjBzdGFydF9jaGFyJTJDJTBBJTIwJTIwJTIwJTIwJTIyZW5kJTIyJTNBJTIwZW5kX2NoYXIlMkMlMEElMjAlMjAlMjAlMjAlMjJzY29yZSUyMiUzQSUyMHNjb3JlcyU1QnN0YXJ0X2luZGV4JTJDJTIwZW5kX2luZGV4JTVEJTJDJTBBJTdEJTBBcHJpbnQocmVzdWx0KQ==",highlighted:`result = {
    <span class="hljs-string">&quot;answer&quot;</span>: answer,
    <span class="hljs-string">&quot;start&quot;</span>: start_char,
    <span class="hljs-string">&quot;end&quot;</span>: end_char,
    <span class="hljs-string">&quot;score&quot;</span>: scores[start_index, end_index],
}
<span class="hljs-built_in">print</span>(result)`,wrap:!1}}),We=new w({props:{code:"JTdCJ2Fuc3dlciclM0ElMjAnSmF4JTJDJTIwUHlUb3JjaCUyMGFuZCUyMFRlbnNvckZsb3cnJTJDJTBBJTIwJ3N0YXJ0JyUzQSUyMDc4JTJDJTBBJTIwJ2VuZCclM0ElMjAxMDUlMkMlMEElMjAnc2NvcmUnJTNBJTIwMC45Nzc3MyU3RA==",highlighted:`{<span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">78</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">105</span>,
 <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97773</span>}`,wrap:!1}}),le=new ht({props:{$$slots:{default:[Qa]},$$scope:{ctx:J}}}),Qe=new ft({props:{title:"Gestion des contextes longs",local:"gestion-des-contextes-longs",headingTag:"h2"}}),_e=new w({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHF1ZXN0aW9uJTJDJTIwbG9uZ19jb250ZXh0KSUwQXByaW50KGxlbihpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQpKQ==",highlighted:`inputs = tokenizer(question, long_context)
<span class="hljs-built_in">print</span>(<span class="hljs-built_in">len</span>(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]))`,wrap:!1}}),Re=new w({props:{code:"NDYx",highlighted:'<span class="hljs-number">461</span>',wrap:!1}}),$e=new w({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHF1ZXN0aW9uJTJDJTIwbG9uZ19jb250ZXh0JTJDJTIwbWF4X2xlbmd0aCUzRDM4NCUyQyUyMHRydW5jYXRpb24lM0QlMjJvbmx5X3NlY29uZCUyMiklMEFwcmludCh0b2tlbml6ZXIuZGVjb2RlKGlucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCkp",highlighted:`inputs = tokenizer(question, long_context, max_length=<span class="hljs-number">384</span>, truncation=<span class="hljs-string">&quot;only_second&quot;</span>)
<span class="hljs-built_in">print</span>(tokenizer.decode(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]))`,wrap:!1}}),Ne=new w({props:{code:" ",highlighted:`<span class="hljs-string">&quot;&quot;&quot;
[CLS] Which deep learning libraries back [UNK] Transformers? [SEP] [UNK] Transformers : State of the Art NLP

[UNK] Transformers provides thousands of pretrained models to perform tasks on texts such as classification, information extraction,
question answering, summarization, translation, text generation and more in over 100 languages.
Its aim is to make cutting-edge NLP easier to use for everyone.

[UNK] Transformers provides APIs to quickly download and use those pretrained models on a given text, fine-tune them on your own datasets and
then share them with the community on our model hub. At the same time, each python module defining an architecture is fully standalone and
can be modified to enable quick research experiments.

Why should I use transformers?

1. Easy-to-use state-of-the-art models:
  - High performance on NLU and NLG tasks.
  - Low barrier to entry for educators and practitioners.
  - Few user-facing abstractions with just three classes to learn.
  - A unified API for using all our pretrained models.
  - Lower compute costs, smaller carbon footprint:

2. Researchers can share trained models instead of always retraining.
  - Practitioners can reduce compute time and production costs.
  - Dozens of architectures with over 10,000 pretrained models, some in more than 100 languages.

3. Choose the right framework for every part of a model&#x27;s lifetime:
  - Train state-of-the-art models in 3 lines of code.
  - Move a single model between TF2.0/PyTorch frameworks at will.
  - Seamlessly pick the right framework for training, evaluation and production.

4. Easily customize a model or an example to your needs:
  - We provide examples for each architecture to reproduce the results published by its original authors.
  - Model internal [SEP]
&quot;&quot;&quot;</span>

<span class="hljs-string">&quot;&quot;&quot;
[CLS] Quelles sont les bibliothèques d&#x27;apprentissage profond qui soutiennent [UNK] Transformers ? [SEP] [UNK] Transformers : l&#x27;état de l&#x27;art du NLP

[UNK] Transformers fournit des milliers de modèles pré-entraînés pour effectuer des tâches sur des textes telles que la classification, l&#x27;extraction d&#x27;informations, la réponse à des questions, le résumé, la traduction, la génération de textes, etc,
la réponse à des questions, le résumé, la traduction, la génération de texte et plus encore dans plus de 100 langues.
Son objectif est de rendre le traitement automatique des langues de pointe plus facile à utiliser pour tous.

Transformers [UNK] fournit des API permettant de télécharger et d&#x27;utiliser rapidement ces modèles pré-entraînés sur un texte donné, de les affiner sur vos propres ensembles de données et de les partager avec la communauté sur notre site Web.
puis de les partager avec la communauté sur notre hub de modèles. En même temps, chaque module python définissant une architecture est entièrement autonome et peut être modifié pour permettre des expériences de recherche rapides.
peut être modifié pour permettre des expériences de recherche rapides.

Pourquoi devrais-je utiliser des transformateurs ?

1. Des modèles de pointe faciles à utiliser :
  - Haute performance sur les tâches NLU et NLG.
  - Faible barrière à l&#x27;entrée pour les éducateurs et les praticiens.
  - Peu d&#x27;abstractions pour l&#x27;utilisateur avec seulement trois classes à apprendre.
  - Une API unifiée pour utiliser tous nos modèles pré-entraînés.
  - Des coûts de calcul plus faibles, une empreinte carbone réduite :

2. Les chercheurs peuvent partager les modèles formés au lieu de toujours les reformer.
  - Les praticiens peuvent réduire le temps de calcul et les coûts de production.
  - Des dizaines d&#x27;architectures avec plus de 10 000 modèles pré-formés, certains dans plus de 100 langues.

3. Choisissez le cadre approprié pour chaque étape de la vie d&#x27;un modèle :
  - Entraînez des modèles de pointe en 3 lignes de code.
  - Déplacez un seul modèle entre les frameworks TF2.0/PyTorch à volonté.
  - Choisissez de manière transparente le bon framework pour l&#x27;entraînement, l&#x27;évaluation et la production.

4. Adaptez facilement un modèle ou un exemple à vos besoins :
  - Nous fournissons des exemples pour chaque architecture afin de reproduire les résultats publiés par ses auteurs originaux.
  - Modèle interne [SEP]
&quot;&quot;&quot;</span>`,wrap:!1}}),Ye=new w({props:{code:"c2VudGVuY2UlMjAlM0QlMjAlMjJUaGlzJTIwc2VudGVuY2UlMjBpcyUyMG5vdCUyMHRvbyUyMGxvbmclMjBidXQlMjB3ZSUyMGFyZSUyMGdvaW5nJTIwdG8lMjBzcGxpdCUyMGl0JTIwYW55d2F5LiUyMiUwQSUyMyUyMCUyMkNldHRlJTIwcGhyYXNlJTIwbidlc3QlMjBwYXMlMjB0cm9wJTIwbG9uZ3VlJTIwbWFpcyUyMG5vdXMlMjBhbGxvbnMlMjBsYSUyMGRpdmlzZXIlMjBxdWFuZCUyMG0lQzMlQUFtZS4lMjIlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwc2VudGVuY2UlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSUyQyUyMHJldHVybl9vdmVyZmxvd2luZ190b2tlbnMlM0RUcnVlJTJDJTIwbWF4X2xlbmd0aCUzRDYlMkMlMjBzdHJpZGUlM0QyJTBBKSUwQSUwQWZvciUyMGlkcyUyMGluJTIwaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQodG9rZW5pemVyLmRlY29kZShpZHMpKQ==",highlighted:`sentence = <span class="hljs-string">&quot;This sentence is not too long but we are going to split it anyway.&quot;</span>
<span class="hljs-comment"># &quot;Cette phrase n&#x27;est pas trop longue mais nous allons la diviser quand même.&quot;</span>
inputs = tokenizer(
    sentence, truncation=<span class="hljs-literal">True</span>, return_overflowing_tokens=<span class="hljs-literal">True</span>, max_length=<span class="hljs-number">6</span>, stride=<span class="hljs-number">2</span>
)

<span class="hljs-keyword">for</span> ids <span class="hljs-keyword">in</span> inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]:
    <span class="hljs-built_in">print</span>(tokenizer.decode(ids))`,wrap:!1}}),Se=new w({props:{code:"JyU1QkNMUyU1RCUyMFRoaXMlMjBzZW50ZW5jZSUyMGlzJTIwbm90JTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjBpcyUyMG5vdCUyMHRvbyUyMGxvbmclMjAlNUJTRVAlNUQnJTBBJyU1QkNMUyU1RCUyMHRvbyUyMGxvbmclMjBidXQlMjB3ZSUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwYnV0JTIwd2UlMjBhcmUlMjBnb2luZyUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwYXJlJTIwZ29pbmclMjB0byUyMHNwbGl0JTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjB0byUyMHNwbGl0JTIwaXQlMjBhbnl3YXklMjAlNUJTRVAlNUQnJTBBJyU1QkNMUyU1RCUyMGl0JTIwYW55d2F5LiUyMCU1QlNFUCU1RCc=",highlighted:`<span class="hljs-string">&#x27;[CLS] This sentence is not [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] is not too long [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] too long but we [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] but we are going [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] are going to split [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] to split it anyway [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] it anyway. [SEP]&#x27;</span>`,wrap:!1}}),Ae=new w({props:{code:"cHJpbnQoaW5wdXRzLmtleXMoKSk=",highlighted:'<span class="hljs-built_in">print</span>(inputs.keys())',wrap:!1}}),Le=new w({props:{code:"ZGljdF9rZXlzKCU1QidpbnB1dF9pZHMnJTJDJTIwJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyclNUQp",highlighted:'dict_keys([<span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;overflow_to_sample_mapping&#x27;</span>])',wrap:!1}}),Pe=new w({props:{code:"cHJpbnQoaW5wdXRzJTVCJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIlNUQp",highlighted:'<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>])',wrap:!1}}),Oe=new w({props:{code:"JTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RA==",highlighted:'[<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]',wrap:!1}}),el=new w({props:{code:"c2VudGVuY2VzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMHNlbnRlbmNlJTIwaXMlMjBub3QlMjB0b28lMjBsb25nJTIwYnV0JTIwd2UlMjBhcmUlMjBnb2luZyUyMHRvJTIwc3BsaXQlMjBpdCUyMGFueXdheS4lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjMlMjBDZXR0ZSUyMHBocmFzZSUyMG4nZXN0JTIwcGFzJTIwdHJvcCUyMGxvbmd1ZSUyMG1haXMlMjBub3VzJTIwYWxsb25zJTIwbGElMjBkaXZpc2VyJTIwcXVhbmQlMjBtJUMzJUFBbWUuJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMHNlbnRlbmNlJTIwaXMlMjBzaG9ydGVyJTIwYnV0JTIwd2lsbCUyMHN0aWxsJTIwZ2V0JTIwc3BsaXQuJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2V0dGUlMjBwaHJhc2UlMjBlc3QlMjBwbHVzJTIwY291cnRlJTIwbWFpcyUyMHNlcmElMjBxdWFuZCUyMG0lQzMlQUFtZSUyMGRpdmlzJUMzJUE5ZS4lMEElNUQlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwc2VudGVuY2VzJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fb3ZlcmZsb3dpbmdfdG9rZW5zJTNEVHJ1ZSUyQyUyMG1heF9sZW5ndGglM0Q2JTJDJTIwc3RyaWRlJTNEMiUwQSklMEElMEFwcmludChpbnB1dHMlNUIlMjJvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyUyMiU1RCk=",highlighted:`sentences = [
    <span class="hljs-string">&quot;This sentence is not too long but we are going to split it anyway.&quot;</span>,
    <span class="hljs-comment"># Cette phrase n&#x27;est pas trop longue mais nous allons la diviser quand même.</span>
    <span class="hljs-string">&quot;This sentence is shorter but will still get split.&quot;</span>,
    <span class="hljs-comment"># Cette phrase est plus courte mais sera quand même divisée.</span>
]
inputs = tokenizer(
    sentences, truncation=<span class="hljs-literal">True</span>, return_overflowing_tokens=<span class="hljs-literal">True</span>, max_length=<span class="hljs-number">6</span>, stride=<span class="hljs-number">2</span>
)

<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>])`,wrap:!1}}),sl=new w({props:{code:"JTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElNUQ=",highlighted:'[<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>]',wrap:!1}}),al=new w({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMHF1ZXN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwbG9uZ19jb250ZXh0JTJDJTBBJTIwJTIwJTIwJTIwc3RyaWRlJTNEMTI4JTJDJTBBJTIwJTIwJTIwJTIwbWF4X2xlbmd0aCUzRDM4NCUyQyUwQSUyMCUyMCUyMCUyMHBhZGRpbmclM0QlMjJsb25nZXN0JTIyJTJDJTBBJTIwJTIwJTIwJTIwdHJ1bmNhdGlvbiUzRCUyMm9ubHlfc2Vjb25kJTIyJTJDJTBBJTIwJTIwJTIwJTIwcmV0dXJuX292ZXJmbG93aW5nX3Rva2VucyUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZXR1cm5fb2Zmc2V0c19tYXBwaW5nJTNEVHJ1ZSUyQyUwQSk=",highlighted:`inputs = tokenizer(
    question,
    long_context,
    stride=<span class="hljs-number">128</span>,
    max_length=<span class="hljs-number">384</span>,
    padding=<span class="hljs-string">&quot;longest&quot;</span>,
    truncation=<span class="hljs-string">&quot;only_second&quot;</span>,
    return_overflowing_tokens=<span class="hljs-literal">True</span>,
    return_offsets_mapping=<span class="hljs-literal">True</span>,
)`,wrap:!1}});const An=[_a,ga],Gl=[];function Ln(e,t){return e[0]==="pt"?0:1}H=Ln(J),E=Gl[H]=An[H](J),ol=new w({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqaW5wdXRzKSUwQSUwQXN0YXJ0X2xvZ2l0cyUyMCUzRCUyMG91dHB1dHMuc3RhcnRfbG9naXRzJTBBZW5kX2xvZ2l0cyUyMCUzRCUyMG91dHB1dHMuZW5kX2xvZ2l0cyUwQXByaW50KHN0YXJ0X2xvZ2l0cy5zaGFwZSUyQyUyMGVuZF9sb2dpdHMuc2hhcGUp",highlighted:`outputs = model(**inputs)

start_logits = outputs.start_logits
end_logits = outputs.end_logits
<span class="hljs-built_in">print</span>(start_logits.shape, end_logits.shape)`,wrap:!1}});const Dn=[Ca,Ra],Vl=[];function Pn(e,t){return e[0]==="pt"?0:1}Y=Pn(J),S=Vl[Y]=Dn[Y](J);const On=[Na,$a],xl=[];function Kn(e,t){return e[0]==="pt"?0:1}F=Kn(J),q=xl[F]=On[F](J);const ea=[Ea,Ha],vl=[];function la(e,t){return e[0]==="pt"?0:1}A=la(J),L=vl[A]=ea[A](J);const sa=[Sa,Ya],kl=[];function ta(e,t){return e[0]==="pt"?0:1}return D=ta(J),P=kl[D]=sa[D](J),ul=new w({props:{code:"JTVCKDAlMkMlMjAxOCUyQyUyMDAuMzM4NjcpJTJDJTIwKDE3MyUyQyUyMDE4NCUyQyUyMDAuOTcxNDkpJTVE",highlighted:'[(<span class="hljs-number">0</span>, <span class="hljs-number">18</span>, <span class="hljs-number">0.33867</span>), (<span class="hljs-number">173</span>, <span class="hljs-number">184</span>, <span class="hljs-number">0.97149</span>)]',wrap:!1}}),se=new ht({props:{$$slots:{default:[Fa]},$$scope:{ctx:J}}}),yl=new w({props:{code:"Zm9yJTIwY2FuZGlkYXRlJTJDJTIwb2Zmc2V0JTIwaW4lMjB6aXAoY2FuZGlkYXRlcyUyQyUyMG9mZnNldHMpJTNBJTBBJTIwJTIwJTIwJTIwc3RhcnRfdG9rZW4lMkMlMjBlbmRfdG9rZW4lMkMlMjBzY29yZSUyMCUzRCUyMGNhbmRpZGF0ZSUwQSUyMCUyMCUyMCUyMHN0YXJ0X2NoYXIlMkMlMjBfJTIwJTNEJTIwb2Zmc2V0JTVCc3RhcnRfdG9rZW4lNUQlMEElMjAlMjAlMjAlMjBfJTJDJTIwZW5kX2NoYXIlMjAlM0QlMjBvZmZzZXQlNUJlbmRfdG9rZW4lNUQlMEElMjAlMjAlMjAlMjBhbnN3ZXIlMjAlM0QlMjBsb25nX2NvbnRleHQlNUJzdGFydF9jaGFyJTNBZW5kX2NoYXIlNUQlMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjAlN0IlMjJhbnN3ZXIlMjIlM0ElMjBhbnN3ZXIlMkMlMjAlMjJzdGFydCUyMiUzQSUyMHN0YXJ0X2NoYXIlMkMlMjAlMjJlbmQlMjIlM0ElMjBlbmRfY2hhciUyQyUyMCUyMnNjb3JlJTIyJTNBJTIwc2NvcmUlN0QlMEElMjAlMjAlMjAlMjBwcmludChyZXN1bHQp",highlighted:`<span class="hljs-keyword">for</span> candidate, offset <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(candidates, offsets):
    start_token, end_token, score = candidate
    start_char, _ = offset[start_token]
    _, end_char = offset[end_token]
    answer = long_context[start_char:end_char]
    result = {<span class="hljs-string">&quot;answer&quot;</span>: answer, <span class="hljs-string">&quot;start&quot;</span>: start_char, <span class="hljs-string">&quot;end&quot;</span>: end_char, <span class="hljs-string">&quot;score&quot;</span>: score}
    <span class="hljs-built_in">print</span>(result)`,wrap:!1}}),Jl=new w({props:{code:"JTdCJ2Fuc3dlciclM0ElMjAnJTVDbiVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUzQSUyMFN0YXRlJTIwb2YlMjB0aGUlMjBBcnQlMjBOTFAnJTJDJTIwJ3N0YXJ0JyUzQSUyMDAlMkMlMjAnZW5kJyUzQSUyMDM3JTJDJTIwJ3Njb3JlJyUzQSUyMDAuMzM4NjclN0QlMEElN0InYW5zd2VyJyUzQSUyMCdKYXglMkMlMjBQeVRvcmNoJTIwYW5kJTIwVGVuc29yRmxvdyclMkMlMjAnc3RhcnQnJTNBJTIwMTg5MiUyQyUyMCdlbmQnJTNBJTIwMTkxOSUyQyUyMCdzY29yZSclM0ElMjAwLjk3MTQ5JTdE",highlighted:`{<span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;\\n🤗 Transformers: State of the Art NLP&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">0</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">37</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.33867</span>}
{<span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">1892</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">1919</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97149</span>}`,wrap:!1}}),te=new ht({props:{$$slots:{default:[qa]},$$scope:{ctx:J}}}),Tl=new Ta({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter6/3b.mdx"}}),{c(){s=b("meta"),r=i(),l=b("p"),p=i(),u(U.$$.fragment),h=i(),u(f.$$.fragment),Pl=i(),x.c(),zl=i(),ne=b("p"),ne.innerHTML=Yt,Ol=i(),k.c(),Wl=i(),u(ae.$$.fragment),Kl=i(),re=b("p"),re.innerHTML=St,es=i(),u(ie.$$.fragment),ls=i(),u(oe.$$.fragment),ss=i(),Me=b("p"),Me.textContent=Ft,ts=i(),u(ce.$$.fragment),ns=i(),u(pe.$$.fragment),as=i(),ue=b("p"),ue.textContent=qt,rs=i(),u(me.$$.fragment),is=i(),de=b("p"),de.innerHTML=At,os=i(),W.c(),Xl=i(),ye=b("p"),ye.textContent=Lt,Ms=i(),K=b("div"),K.innerHTML=Dt,cs=i(),Je=b("p"),Je.innerHTML=Pt,ps=i(),u(Ue.$$.fragment),us=i(),Q.c(),Ql=i(),be=b("p"),be.innerHTML=Ot,ms=i(),Te=b("p"),Te.innerHTML=Kt,ds=i(),_.c(),gl=i(),we=b("p"),we.textContent=en,ys=i(),C.c(),_l=i(),je=b("p"),je.innerHTML=ln,Js=i(),B=b("p"),It=Ll("En supposant que les événements « La réponse commence à "),Rl=b("code"),Rl.textContent=sn,Zt=Ll(" » et « La réponse se termine à "),Cl=b("code"),Cl.textContent=tn,Gt=Ll(" » sont indépendants, la probabilité que la réponse commence à "),$l=b("code"),$l.textContent=nn,Vt=Ll(" et se termine à "),Nl=b("code"),Nl.textContent=an,xt=Ll(` est :
`),Us=new ya(!1),bs=i(),he=b("p"),he.innerHTML=rn,Ts=i(),fe=b("p"),fe.textContent=on,ws=i(),u(Be.$$.fragment),js=i(),N.c(),Hl=i(),Ie=b("p"),Ie.innerHTML=Mn,hs=i(),u(Ze.$$.fragment),fs=i(),Ge=b("p"),Ge.textContent=cn,Bs=i(),u(Ve.$$.fragment),Is=i(),u(ee.$$.fragment),Zs=i(),xe=b("p"),xe.innerHTML=pn,Gs=i(),u(ve.$$.fragment),Vs=i(),ke=b("p"),ke.textContent=un,xs=i(),u(ze.$$.fragment),vs=i(),u(We.$$.fragment),ks=i(),Xe=b("p"),Xe.textContent=mn,zs=i(),u(le.$$.fragment),Ws=i(),u(Qe.$$.fragment),Xs=i(),ge=b("p"),ge.innerHTML=dn,Qs=i(),u(_e.$$.fragment),gs=i(),u(Re.$$.fragment),_s=i(),Ce=b("p"),Ce.innerHTML=yn,Rs=i(),u($e.$$.fragment),Cs=i(),u(Ne.$$.fragment),$s=i(),He=b("p"),He.innerHTML=Jn,Ns=i(),Ee=b("p"),Ee.innerHTML=Un,Hs=i(),u(Ye.$$.fragment),Es=i(),u(Se.$$.fragment),Ys=i(),Fe=b("p"),Fe.innerHTML=bn,Ss=i(),qe=b("p"),qe.textContent=Tn,Fs=i(),u(Ae.$$.fragment),qs=i(),u(Le.$$.fragment),As=i(),De=b("p"),De.innerHTML=wn,Ls=i(),u(Pe.$$.fragment),Ds=i(),u(Oe.$$.fragment),Ps=i(),Ke=b("p"),Ke.textContent=jn,Os=i(),u(el.$$.fragment),Ks=i(),ll=b("p"),ll.textContent=hn,et=i(),u(sl.$$.fragment),lt=i(),tl=b("p"),tl.textContent=fn,st=i(),nl=b("p"),nl.innerHTML=Bn,tt=i(),u(al.$$.fragment),nt=i(),rl=b("p"),rl.innerHTML=In,at=i(),E.c(),El=i(),il=b("p"),il.textContent=Zn,rt=i(),u(ol.$$.fragment),it=i(),S.c(),Yl=i(),Ml=b("p"),Ml.innerHTML=Gn,ot=i(),q.c(),Sl=i(),cl=b("p"),cl.textContent=Vn,Mt=i(),L.c(),Fl=i(),pl=b("p"),pl.textContent=xn,ct=i(),P.c(),ql=i(),u(ul.$$.fragment),pt=i(),ml=b("p"),ml.innerHTML=vn,ut=i(),u(se.$$.fragment),mt=i(),dl=b("p"),dl.innerHTML=kn,dt=i(),u(yl.$$.fragment),yt=i(),u(Jl.$$.fragment),Jt=i(),Ul=b("p"),Ul.textContent=zn,Ut=i(),u(te.$$.fragment),bt=i(),bl=b("p"),bl.innerHTML=Wn,Tt=i(),u(Tl.$$.fragment),wt=i(),Al=b("p"),this.h()},l(e){const t=Ja("svelte-u9bgzb",document.head);s=T(t,"META",{name:!0,content:!0}),t.forEach(n),r=o(e),l=T(e,"P",{}),Ht(l).forEach(n),p=o(e),m(U.$$.fragment,e),h=o(e),m(f.$$.fragment,e),Pl=o(e),x.l(e),zl=o(e),ne=T(e,"P",{"data-svelte-h":!0}),j(ne)!=="svelte-1wpbjoh"&&(ne.innerHTML=Yt),Ol=o(e),k.l(e),Wl=o(e),m(ae.$$.fragment,e),Kl=o(e),re=T(e,"P",{"data-svelte-h":!0}),j(re)!=="svelte-1laoz68"&&(re.innerHTML=St),es=o(e),m(ie.$$.fragment,e),ls=o(e),m(oe.$$.fragment,e),ss=o(e),Me=T(e,"P",{"data-svelte-h":!0}),j(Me)!=="svelte-1uy307b"&&(Me.textContent=Ft),ts=o(e),m(ce.$$.fragment,e),ns=o(e),m(pe.$$.fragment,e),as=o(e),ue=T(e,"P",{"data-svelte-h":!0}),j(ue)!=="svelte-1n9z2e6"&&(ue.textContent=qt),rs=o(e),m(me.$$.fragment,e),is=o(e),de=T(e,"P",{"data-svelte-h":!0}),j(de)!=="svelte-1wwlhdm"&&(de.innerHTML=At),os=o(e),W.l(e),Xl=o(e),ye=T(e,"P",{"data-svelte-h":!0}),j(ye)!=="svelte-13u4o1"&&(ye.textContent=Lt),Ms=o(e),K=T(e,"DIV",{class:!0,"data-svelte-h":!0}),j(K)!=="svelte-47wedv"&&(K.innerHTML=Dt),cs=o(e),Je=T(e,"P",{"data-svelte-h":!0}),j(Je)!=="svelte-aijpaj"&&(Je.innerHTML=Pt),ps=o(e),m(Ue.$$.fragment,e),us=o(e),Q.l(e),Ql=o(e),be=T(e,"P",{"data-svelte-h":!0}),j(be)!=="svelte-19zumap"&&(be.innerHTML=Ot),ms=o(e),Te=T(e,"P",{"data-svelte-h":!0}),j(Te)!=="svelte-1722w6p"&&(Te.innerHTML=Kt),ds=o(e),_.l(e),gl=o(e),we=T(e,"P",{"data-svelte-h":!0}),j(we)!=="svelte-11yuzgg"&&(we.textContent=en),ys=o(e),C.l(e),_l=o(e),je=T(e,"P",{"data-svelte-h":!0}),j(je)!=="svelte-fchfan"&&(je.innerHTML=ln),Js=o(e),B=T(e,"P",{});var I=Ht(B);It=Dl(I,"En supposant que les événements « La réponse commence à "),Rl=T(I,"CODE",{"data-svelte-h":!0}),j(Rl)!=="svelte-8eqb3b"&&(Rl.textContent=sn),Zt=Dl(I," » et « La réponse se termine à "),Cl=T(I,"CODE",{"data-svelte-h":!0}),j(Cl)!=="svelte-9cistc"&&(Cl.textContent=tn),Gt=Dl(I," » sont indépendants, la probabilité que la réponse commence à "),$l=T(I,"CODE",{"data-svelte-h":!0}),j($l)!=="svelte-8eqb3b"&&($l.textContent=nn),Vt=Dl(I," et se termine à "),Nl=T(I,"CODE",{"data-svelte-h":!0}),j(Nl)!=="svelte-9cistc"&&(Nl.textContent=an),xt=Dl(I,` est :
`),Us=Ua(I,!1),I.forEach(n),bs=o(e),he=T(e,"P",{"data-svelte-h":!0}),j(he)!=="svelte-1q5db5x"&&(he.innerHTML=rn),Ts=o(e),fe=T(e,"P",{"data-svelte-h":!0}),j(fe)!=="svelte-inc3wq"&&(fe.textContent=on),ws=o(e),m(Be.$$.fragment,e),js=o(e),N.l(e),Hl=o(e),Ie=T(e,"P",{"data-svelte-h":!0}),j(Ie)!=="svelte-1kxey9r"&&(Ie.innerHTML=Mn),hs=o(e),m(Ze.$$.fragment,e),fs=o(e),Ge=T(e,"P",{"data-svelte-h":!0}),j(Ge)!=="svelte-17c2iqr"&&(Ge.textContent=cn),Bs=o(e),m(Ve.$$.fragment,e),Is=o(e),m(ee.$$.fragment,e),Zs=o(e),xe=T(e,"P",{"data-svelte-h":!0}),j(xe)!=="svelte-13lgors"&&(xe.innerHTML=pn),Gs=o(e),m(ve.$$.fragment,e),Vs=o(e),ke=T(e,"P",{"data-svelte-h":!0}),j(ke)!=="svelte-1h5z9c6"&&(ke.textContent=un),xs=o(e),m(ze.$$.fragment,e),vs=o(e),m(We.$$.fragment,e),ks=o(e),Xe=T(e,"P",{"data-svelte-h":!0}),j(Xe)!=="svelte-1xltt7m"&&(Xe.textContent=mn),zs=o(e),m(le.$$.fragment,e),Ws=o(e),m(Qe.$$.fragment,e),Xs=o(e),ge=T(e,"P",{"data-svelte-h":!0}),j(ge)!=="svelte-iptmt0"&&(ge.innerHTML=dn),Qs=o(e),m(_e.$$.fragment,e),gs=o(e),m(Re.$$.fragment,e),_s=o(e),Ce=T(e,"P",{"data-svelte-h":!0}),j(Ce)!=="svelte-dyw4jr"&&(Ce.innerHTML=yn),Rs=o(e),m($e.$$.fragment,e),Cs=o(e),m(Ne.$$.fragment,e),$s=o(e),He=T(e,"P",{"data-svelte-h":!0}),j(He)!=="svelte-lksk4g"&&(He.innerHTML=Jn),Ns=o(e),Ee=T(e,"P",{"data-svelte-h":!0}),j(Ee)!=="svelte-1aq3r04"&&(Ee.innerHTML=Un),Hs=o(e),m(Ye.$$.fragment,e),Es=o(e),m(Se.$$.fragment,e),Ys=o(e),Fe=T(e,"P",{"data-svelte-h":!0}),j(Fe)!=="svelte-1r7byd6"&&(Fe.innerHTML=bn),Ss=o(e),qe=T(e,"P",{"data-svelte-h":!0}),j(qe)!=="svelte-sjehw6"&&(qe.textContent=Tn),Fs=o(e),m(Ae.$$.fragment,e),qs=o(e),m(Le.$$.fragment,e),As=o(e),De=T(e,"P",{"data-svelte-h":!0}),j(De)!=="svelte-l8wq2k"&&(De.innerHTML=wn),Ls=o(e),m(Pe.$$.fragment,e),Ds=o(e),m(Oe.$$.fragment,e),Ps=o(e),Ke=T(e,"P",{"data-svelte-h":!0}),j(Ke)!=="svelte-1o4c6wo"&&(Ke.textContent=jn),Os=o(e),m(el.$$.fragment,e),Ks=o(e),ll=T(e,"P",{"data-svelte-h":!0}),j(ll)!=="svelte-15n3a3z"&&(ll.textContent=hn),et=o(e),m(sl.$$.fragment,e),lt=o(e),tl=T(e,"P",{"data-svelte-h":!0}),j(tl)!=="svelte-3m4d5e"&&(tl.textContent=fn),st=o(e),nl=T(e,"P",{"data-svelte-h":!0}),j(nl)!=="svelte-1v3dxfo"&&(nl.innerHTML=Bn),tt=o(e),m(al.$$.fragment,e),nt=o(e),rl=T(e,"P",{"data-svelte-h":!0}),j(rl)!=="svelte-y6zehf"&&(rl.innerHTML=In),at=o(e),E.l(e),El=o(e),il=T(e,"P",{"data-svelte-h":!0}),j(il)!=="svelte-efi9p4"&&(il.textContent=Zn),rt=o(e),m(ol.$$.fragment,e),it=o(e),S.l(e),Yl=o(e),Ml=T(e,"P",{"data-svelte-h":!0}),j(Ml)!=="svelte-2vbs61"&&(Ml.innerHTML=Gn),ot=o(e),q.l(e),Sl=o(e),cl=T(e,"P",{"data-svelte-h":!0}),j(cl)!=="svelte-yd27az"&&(cl.textContent=Vn),Mt=o(e),L.l(e),Fl=o(e),pl=T(e,"P",{"data-svelte-h":!0}),j(pl)!=="svelte-1jp0kw6"&&(pl.textContent=xn),ct=o(e),P.l(e),ql=o(e),m(ul.$$.fragment,e),pt=o(e),ml=T(e,"P",{"data-svelte-h":!0}),j(ml)!=="svelte-inx2og"&&(ml.innerHTML=vn),ut=o(e),m(se.$$.fragment,e),mt=o(e),dl=T(e,"P",{"data-svelte-h":!0}),j(dl)!=="svelte-1ih3an6"&&(dl.innerHTML=kn),dt=o(e),m(yl.$$.fragment,e),yt=o(e),m(Jl.$$.fragment,e),Jt=o(e),Ul=T(e,"P",{"data-svelte-h":!0}),j(Ul)!=="svelte-1872twq"&&(Ul.textContent=zn),Ut=o(e),m(te.$$.fragment,e),bt=o(e),bl=T(e,"P",{"data-svelte-h":!0}),j(bl)!=="svelte-199lkuf"&&(bl.innerHTML=Wn),Tt=o(e),m(Tl.$$.fragment,e),wt=o(e),Al=T(e,"P",{}),Ht(Al).forEach(n),this.h()},h(){Et(s,"name","hf:doc:metadata"),Et(s,"content",La),Et(K,"class","flex justify-center"),Us.a=null},m(e,t){O(document.head,s),a(e,r,t),a(e,l,t),a(e,p,t),d(U,e,t),a(e,h,t),d(f,e,t),a(e,Pl,t),wl[V].m(e,t),a(e,zl,t),a(e,ne,t),a(e,Ol,t),jl[v].m(e,t),a(e,Wl,t),d(ae,e,t),a(e,Kl,t),a(e,re,t),a(e,es,t),d(ie,e,t),a(e,ls,t),d(oe,e,t),a(e,ss,t),a(e,Me,t),a(e,ts,t),d(ce,e,t),a(e,ns,t),d(pe,e,t),a(e,as,t),a(e,ue,t),a(e,rs,t),d(me,e,t),a(e,is,t),a(e,de,t),a(e,os,t),hl[z].m(e,t),a(e,Xl,t),a(e,ye,t),a(e,Ms,t),a(e,K,t),a(e,cs,t),a(e,Je,t),a(e,ps,t),d(Ue,e,t),a(e,us,t),fl[X].m(e,t),a(e,Ql,t),a(e,be,t),a(e,ms,t),a(e,Te,t),a(e,ds,t),Bl[g].m(e,t),a(e,gl,t),a(e,we,t),a(e,ys,t),Il[R].m(e,t),a(e,_l,t),a(e,je,t),a(e,Js,t),a(e,B,t),O(B,It),O(B,Rl),O(B,Zt),O(B,Cl),O(B,Gt),O(B,$l),O(B,Vt),O(B,Nl),O(B,xt),Us.m(ca,B),a(e,bs,t),a(e,he,t),a(e,Ts,t),a(e,fe,t),a(e,ws,t),d(Be,e,t),a(e,js,t),Zl[$].m(e,t),a(e,Hl,t),a(e,Ie,t),a(e,hs,t),d(Ze,e,t),a(e,fs,t),a(e,Ge,t),a(e,Bs,t),d(Ve,e,t),a(e,Is,t),d(ee,e,t),a(e,Zs,t),a(e,xe,t),a(e,Gs,t),d(ve,e,t),a(e,Vs,t),a(e,ke,t),a(e,xs,t),d(ze,e,t),a(e,vs,t),d(We,e,t),a(e,ks,t),a(e,Xe,t),a(e,zs,t),d(le,e,t),a(e,Ws,t),d(Qe,e,t),a(e,Xs,t),a(e,ge,t),a(e,Qs,t),d(_e,e,t),a(e,gs,t),d(Re,e,t),a(e,_s,t),a(e,Ce,t),a(e,Rs,t),d($e,e,t),a(e,Cs,t),d(Ne,e,t),a(e,$s,t),a(e,He,t),a(e,Ns,t),a(e,Ee,t),a(e,Hs,t),d(Ye,e,t),a(e,Es,t),d(Se,e,t),a(e,Ys,t),a(e,Fe,t),a(e,Ss,t),a(e,qe,t),a(e,Fs,t),d(Ae,e,t),a(e,qs,t),d(Le,e,t),a(e,As,t),a(e,De,t),a(e,Ls,t),d(Pe,e,t),a(e,Ds,t),d(Oe,e,t),a(e,Ps,t),a(e,Ke,t),a(e,Os,t),d(el,e,t),a(e,Ks,t),a(e,ll,t),a(e,et,t),d(sl,e,t),a(e,lt,t),a(e,tl,t),a(e,st,t),a(e,nl,t),a(e,tt,t),d(al,e,t),a(e,nt,t),a(e,rl,t),a(e,at,t),Gl[H].m(e,t),a(e,El,t),a(e,il,t),a(e,rt,t),d(ol,e,t),a(e,it,t),Vl[Y].m(e,t),a(e,Yl,t),a(e,Ml,t),a(e,ot,t),xl[F].m(e,t),a(e,Sl,t),a(e,cl,t),a(e,Mt,t),vl[A].m(e,t),a(e,Fl,t),a(e,pl,t),a(e,ct,t),kl[D].m(e,t),a(e,ql,t),d(ul,e,t),a(e,pt,t),a(e,ml,t),a(e,ut,t),d(se,e,t),a(e,mt,t),a(e,dl,t),a(e,dt,t),d(yl,e,t),a(e,yt,t),d(Jl,e,t),a(e,Jt,t),a(e,Ul,t),a(e,Ut,t),d(te,e,t),a(e,bt,t),a(e,bl,t),a(e,Tt,t),d(Tl,e,t),a(e,wt,t),a(e,Al,t),jt=!0},p(e,[t]){const I={};t&1&&(I.fw=e[0]),U.$set(I);let vt=V;V=Qn(e),V!==vt&&(G(),M(wl[vt],1,1,()=>{wl[vt]=null}),Z(),x=wl[V],x||(x=wl[V]=Xn[V](e),x.c()),c(x,1),x.m(zl.parentNode,zl));let kt=v;v=_n(e),v!==kt&&(G(),M(jl[kt],1,1,()=>{jl[kt]=null}),Z(),k=jl[v],k||(k=jl[v]=gn[v](e),k.c()),c(k,1),k.m(Wl.parentNode,Wl));let zt=z;z=Cn(e),z!==zt&&(G(),M(hl[zt],1,1,()=>{hl[zt]=null}),Z(),W=hl[z],W||(W=hl[z]=Rn[z](e),W.c()),c(W,1),W.m(Xl.parentNode,Xl));let Wt=X;X=Nn(e),X!==Wt&&(G(),M(fl[Wt],1,1,()=>{fl[Wt]=null}),Z(),Q=fl[X],Q||(Q=fl[X]=$n[X](e),Q.c()),c(Q,1),Q.m(Ql.parentNode,Ql));let Xt=g;g=En(e),g!==Xt&&(G(),M(Bl[Xt],1,1,()=>{Bl[Xt]=null}),Z(),_=Bl[g],_||(_=Bl[g]=Hn[g](e),_.c()),c(_,1),_.m(gl.parentNode,gl));let Qt=R;R=Sn(e),R!==Qt&&(G(),M(Il[Qt],1,1,()=>{Il[Qt]=null}),Z(),C=Il[R],C||(C=Il[R]=Yn[R](e),C.c()),c(C,1),C.m(_l.parentNode,_l));let gt=$;$=qn(e),$!==gt&&(G(),M(Zl[gt],1,1,()=>{Zl[gt]=null}),Z(),N=Zl[$],N||(N=Zl[$]=Fn[$](e),N.c()),c(N,1),N.m(Hl.parentNode,Hl));const na={};t&2&&(na.$$scope={dirty:t,ctx:e}),ee.$set(na);const aa={};t&2&&(aa.$$scope={dirty:t,ctx:e}),le.$set(aa);let _t=H;H=Ln(e),H!==_t&&(G(),M(Gl[_t],1,1,()=>{Gl[_t]=null}),Z(),E=Gl[H],E||(E=Gl[H]=An[H](e),E.c()),c(E,1),E.m(El.parentNode,El));let Rt=Y;Y=Pn(e),Y!==Rt&&(G(),M(Vl[Rt],1,1,()=>{Vl[Rt]=null}),Z(),S=Vl[Y],S||(S=Vl[Y]=Dn[Y](e),S.c()),c(S,1),S.m(Yl.parentNode,Yl));let Ct=F;F=Kn(e),F!==Ct&&(G(),M(xl[Ct],1,1,()=>{xl[Ct]=null}),Z(),q=xl[F],q||(q=xl[F]=On[F](e),q.c()),c(q,1),q.m(Sl.parentNode,Sl));let $t=A;A=la(e),A!==$t&&(G(),M(vl[$t],1,1,()=>{vl[$t]=null}),Z(),L=vl[A],L||(L=vl[A]=ea[A](e),L.c()),c(L,1),L.m(Fl.parentNode,Fl));let Nt=D;D=ta(e),D!==Nt&&(G(),M(kl[Nt],1,1,()=>{kl[Nt]=null}),Z(),P=kl[D],P||(P=kl[D]=sa[D](e),P.c()),c(P,1),P.m(ql.parentNode,ql));const ra={};t&2&&(ra.$$scope={dirty:t,ctx:e}),se.$set(ra);const ia={};t&2&&(ia.$$scope={dirty:t,ctx:e}),te.$set(ia)},i(e){jt||(c(U.$$.fragment,e),c(f.$$.fragment,e),c(x),c(k),c(ae.$$.fragment,e),c(ie.$$.fragment,e),c(oe.$$.fragment,e),c(ce.$$.fragment,e),c(pe.$$.fragment,e),c(me.$$.fragment,e),c(W),c(Ue.$$.fragment,e),c(Q),c(_),c(C),c(Be.$$.fragment,e),c(N),c(Ze.$$.fragment,e),c(Ve.$$.fragment,e),c(ee.$$.fragment,e),c(ve.$$.fragment,e),c(ze.$$.fragment,e),c(We.$$.fragment,e),c(le.$$.fragment,e),c(Qe.$$.fragment,e),c(_e.$$.fragment,e),c(Re.$$.fragment,e),c($e.$$.fragment,e),c(Ne.$$.fragment,e),c(Ye.$$.fragment,e),c(Se.$$.fragment,e),c(Ae.$$.fragment,e),c(Le.$$.fragment,e),c(Pe.$$.fragment,e),c(Oe.$$.fragment,e),c(el.$$.fragment,e),c(sl.$$.fragment,e),c(al.$$.fragment,e),c(E),c(ol.$$.fragment,e),c(S),c(q),c(L),c(P),c(ul.$$.fragment,e),c(se.$$.fragment,e),c(yl.$$.fragment,e),c(Jl.$$.fragment,e),c(te.$$.fragment,e),c(Tl.$$.fragment,e),jt=!0)},o(e){M(U.$$.fragment,e),M(f.$$.fragment,e),M(x),M(k),M(ae.$$.fragment,e),M(ie.$$.fragment,e),M(oe.$$.fragment,e),M(ce.$$.fragment,e),M(pe.$$.fragment,e),M(me.$$.fragment,e),M(W),M(Ue.$$.fragment,e),M(Q),M(_),M(C),M(Be.$$.fragment,e),M(N),M(Ze.$$.fragment,e),M(Ve.$$.fragment,e),M(ee.$$.fragment,e),M(ve.$$.fragment,e),M(ze.$$.fragment,e),M(We.$$.fragment,e),M(le.$$.fragment,e),M(Qe.$$.fragment,e),M(_e.$$.fragment,e),M(Re.$$.fragment,e),M($e.$$.fragment,e),M(Ne.$$.fragment,e),M(Ye.$$.fragment,e),M(Se.$$.fragment,e),M(Ae.$$.fragment,e),M(Le.$$.fragment,e),M(Pe.$$.fragment,e),M(Oe.$$.fragment,e),M(el.$$.fragment,e),M(sl.$$.fragment,e),M(al.$$.fragment,e),M(E),M(ol.$$.fragment,e),M(S),M(q),M(L),M(P),M(ul.$$.fragment,e),M(se.$$.fragment,e),M(yl.$$.fragment,e),M(Jl.$$.fragment,e),M(te.$$.fragment,e),M(Tl.$$.fragment,e),jt=!1},d(e){e&&(n(r),n(l),n(p),n(h),n(Pl),n(zl),n(ne),n(Ol),n(Wl),n(Kl),n(re),n(es),n(ls),n(ss),n(Me),n(ts),n(ns),n(as),n(ue),n(rs),n(is),n(de),n(os),n(Xl),n(ye),n(Ms),n(K),n(cs),n(Je),n(ps),n(us),n(Ql),n(be),n(ms),n(Te),n(ds),n(gl),n(we),n(ys),n(_l),n(je),n(Js),n(B),n(bs),n(he),n(Ts),n(fe),n(ws),n(js),n(Hl),n(Ie),n(hs),n(fs),n(Ge),n(Bs),n(Is),n(Zs),n(xe),n(Gs),n(Vs),n(ke),n(xs),n(vs),n(ks),n(Xe),n(zs),n(Ws),n(Xs),n(ge),n(Qs),n(gs),n(_s),n(Ce),n(Rs),n(Cs),n($s),n(He),n(Ns),n(Ee),n(Hs),n(Es),n(Ys),n(Fe),n(Ss),n(qe),n(Fs),n(qs),n(As),n(De),n(Ls),n(Ds),n(Ps),n(Ke),n(Os),n(Ks),n(ll),n(et),n(lt),n(tl),n(st),n(nl),n(tt),n(nt),n(rl),n(at),n(El),n(il),n(rt),n(it),n(Yl),n(Ml),n(ot),n(Sl),n(cl),n(Mt),n(Fl),n(pl),n(ct),n(ql),n(pt),n(ml),n(ut),n(mt),n(dl),n(dt),n(yt),n(Jt),n(Ul),n(Ut),n(bt),n(bl),n(Tt),n(wt),n(Al)),n(s),y(U,e),y(f,e),wl[V].d(e),jl[v].d(e),y(ae,e),y(ie,e),y(oe,e),y(ce,e),y(pe,e),y(me,e),hl[z].d(e),y(Ue,e),fl[X].d(e),Bl[g].d(e),Il[R].d(e),y(Be,e),Zl[$].d(e),y(Ze,e),y(Ve,e),y(ee,e),y(ve,e),y(ze,e),y(We,e),y(le,e),y(Qe,e),y(_e,e),y(Re,e),y($e,e),y(Ne,e),y(Ye,e),y(Se,e),y(Ae,e),y(Le,e),y(Pe,e),y(Oe,e),y(el,e),y(sl,e),y(al,e),Gl[H].d(e),y(ol,e),Vl[Y].d(e),xl[F].d(e),vl[A].d(e),kl[D].d(e),y(ul,e),y(se,e),y(yl,e),y(Jl,e),y(te,e),y(Tl,e)}}}const La='{"title":"<i> Tokenizer </i> rapide dans le pipeline de QA","local":"i-tokenizer-i-rapide-dans-le-pipeline-de-qa","sections":[{"title":"Utilisation du pipeline de question-answering","local":"utilisation-du-pipeline-de-question-answering","sections":[{"title":"Utilisation d’un modèle pour répondre à des questions","local":"utilisation-dun-modèle-pour-répondre-à-des-questions","sections":[],"depth":3}],"depth":2},{"title":"Gestion des contextes longs","local":"gestion-des-contextes-longs","sections":[],"depth":2}],"depth":1}';function Da(J,s,r){let l="pt";return ua(()=>{const p=new URLSearchParams(window.location.search);r(0,l=p.get("fw")||"pt")}),[l]}class ar extends ma{constructor(s){super(),da(this,s,Da,Aa,pa,{})}}export{ar as component};
