import{s as ui,a as ii,o as di,n as qe}from"../chunks/scheduler.cc52f4b9.js";import{S as ci,i as mi,e as U,s as i,c,h as yi,a as T,d as s,b as o,f as Nn,g as m,j as b,k as E,l as Ji,m as t,n as y,o as p,u as Be,t as M,p as J,v as Ze}from"../chunks/index.9480bb2b.js";import{T as Se}from"../chunks/Tip.f7b80743.js";import{C as Ui,H as He,E as Ti}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.04d617be.js";import{Y as Qn}from"../chunks/Youtube.7b12d9e8.js";import{C as h}from"../chunks/CodeBlock.f4148b32.js";import{C as pi}from"../chunks/CourseFloatingBanner.cdc38ef1.js";import{F as wi}from"../chunks/FrameworkSwitchCourse.42d12053.js";function bi(f){let n,d;return n=new pi({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section3_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter7/section3_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section3_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter7/section3_tf.ipynb"}]}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function ji(f){let n,d;return n=new pi({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter7/section3_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter7/section3_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter7/section3_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter7/section3_pt.ipynb"}]}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function hi(f){let n,d='🙋 Si les termes « modélisation du langage masqué » et « modèle pré-entraîné » ne vous sont pas familiers, consultez le <a href="/course/fr/chapiter1">chapitre 1</a>, où nous expliquons tous ces concepts fondamentaux, vidéos à l’appui !';return{c(){n=U("p"),n.innerHTML=d},l(a){n=T(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1kvw8g3"&&(n.innerHTML=d)},m(a,u){t(a,n,u)},p:qe,d(a){a&&s(n)}}}function fi(f){let n,d="Allons-y et téléchargeons DistilBERT en utilisant la classe <code>AutoModelForMaskedLM</code> :",a,u,_,w,v="Nous pouvons voir combien de paramètres ce modèle possède en appelant la méthode <code>summary()</code> :",R,B,X,k,Z;return u=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsRm9yTWFza2VkTE0lMEElMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIyZGlzdGlsYmVydC1iYXNlLXVuY2FzZWQlMjIlMEFtb2RlbCUyMCUzRCUyMFRGQXV0b01vZGVsRm9yTWFza2VkTE0uZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2NoZWNrcG9pbnQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForMaskedLM

model_checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>
model = TFAutoModelForMaskedLM.from_pretrained(model_checkpoint)`,wrap:!1}}),B=new h({props:{code:"bW9kZWwobW9kZWwuZHVtbXlfaW5wdXRzKSUyMCUyMCUyMyUyMENvbnN0cnVpcmUlMjBsZSUyMG1vZCVDMyVBOGxlJTBBbW9kZWwuc3VtbWFyeSgp",highlighted:`model(model.dummy_inputs)  <span class="hljs-comment"># Construire le modèle</span>
model.summary()`,wrap:!1}}),k=new h({props:{code:"TW9kZWwlM0ElMjAlMjJ0Zl9kaXN0aWxfYmVydF9mb3JfbWFza2VkX2xtJTIyJTBBX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18lMEFMYXllciUyMCh0eXBlKSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME91dHB1dCUyMFNoYXBlJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwUGFyYW0lMjAlMjMlMjAlMjAlMjAlMEElM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlM0QlMEFkaXN0aWxiZXJ0JTIwKFRGRGlzdGlsQmVydE1haW4lMjBtdWx0aXBsZSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMDY2MzYyODgwJTIwJTIwJTBBX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18lMEF2b2NhYl90cmFuc2Zvcm0lMjAoRGVuc2UpJTIwJTIwJTIwJTIwJTIwJTIwbXVsdGlwbGUlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjA1OTA1OTIlMjAlMjAlMjAlMjAlMEFfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyUwQXZvY2FiX2xheWVyX25vcm0lMjAoTGF5ZXJOb3JtYSUyMG11bHRpcGxlJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwMTUzNiUyMCUyMCUyMCUyMCUyMCUyMCUwQV9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fJTBBdm9jYWJfcHJvamVjdG9yJTIwKFRGRGlzdGlsQmVyJTIwbXVsdGlwbGUlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAyMzg2NjE3MCUyMCUyMCUwQSUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUzRCUwQVRvdGFsJTIwcGFyYW1zJTNBJTIwNjYlMkM5ODUlMkM1MzAlMEFUcmFpbmFibGUlMjBwYXJhbXMlM0ElMjA2NiUyQzk4NSUyQzUzMCUwQU5vbi10cmFpbmFibGUlMjBwYXJhbXMlM0ElMjAwJTBBX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18=",highlighted:`Model: <span class="hljs-string">&quot;tf_distil_bert_for_masked_lm&quot;</span>
_________________________________________________________________
Layer (<span class="hljs-built_in">type</span>)                 Output Shape              Param <span class="hljs-comment">#   </span>
=================================================================
distilbert (TFDistilBertMain multiple                  <span class="hljs-number">66362880</span>  
_________________________________________________________________
vocab_transform (Dense)      multiple                  <span class="hljs-number">590592</span>    
_________________________________________________________________
vocab_layer_norm (LayerNorma multiple                  <span class="hljs-number">1536</span>      
_________________________________________________________________
vocab_projector (TFDistilBer multiple                  <span class="hljs-number">23866170</span>  
=================================================================
Total params: <span class="hljs-number">66</span>,<span class="hljs-number">985</span>,<span class="hljs-number">530</span>
Trainable params: <span class="hljs-number">66</span>,<span class="hljs-number">985</span>,<span class="hljs-number">530</span>
Non-trainable params: <span class="hljs-number">0</span>
_________________________________________________________________`,wrap:!1}}),{c(){n=U("p"),n.innerHTML=d,a=i(),c(u.$$.fragment),_=i(),w=U("p"),w.innerHTML=v,R=i(),c(B.$$.fragment),X=i(),c(k.$$.fragment)},l(j){n=T(j,"P",{"data-svelte-h":!0}),b(n)!=="svelte-zdrgeu"&&(n.innerHTML=d),a=o(j),m(u.$$.fragment,j),_=o(j),w=T(j,"P",{"data-svelte-h":!0}),b(w)!=="svelte-1bijgt0"&&(w.innerHTML=v),R=o(j),m(B.$$.fragment,j),X=o(j),m(k.$$.fragment,j)},m(j,g){t(j,n,g),t(j,a,g),y(u,j,g),t(j,_,g),t(j,w,g),t(j,R,g),y(B,j,g),t(j,X,g),y(k,j,g),Z=!0},i(j){Z||(M(u.$$.fragment,j),M(B.$$.fragment,j),M(k.$$.fragment,j),Z=!0)},o(j){p(u.$$.fragment,j),p(B.$$.fragment,j),p(k.$$.fragment,j),Z=!1},d(j){j&&(s(n),s(a),s(_),s(w),s(R),s(X)),J(u,j),J(B,j),J(k,j)}}}function Ii(f){let n,d="Allons-y et téléchargeons DistilBERT en utilisant la classe <code>AutoModelForMaskedLM</code> :",a,u,_,w,v="Nous pouvons voir combien de paramètres ce modèle possède en appelant la méthode <code>num_parameters()</code> :",R,B,X,k,Z;return u=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvck1hc2tlZExNJTBBJTBBbW9kZWxfY2hlY2twb2ludCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkJTIyJTBBbW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JNYXNrZWRMTS5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForMaskedLM

model_checkpoint = <span class="hljs-string">&quot;distilbert-base-uncased&quot;</span>
model = AutoModelForMaskedLM.from_pretrained(model_checkpoint)`,wrap:!1}}),B=new h({props:{code:"ZGlzdGlsYmVydF9udW1fcGFyYW1ldGVycyUyMCUzRCUyMG1vZGVsLm51bV9wYXJhbWV0ZXJzKCklMjAlMkYlMjAxXzAwMF8wMDAlMEFwcmludChmJTIyJyUzRSUzRSUzRSUyMERpc3RpbEJFUlQlMjBub21icmUlMjBkZSUyMHBhcmFtJUMzJUE4dHJlcyUyMCUzQSUyMCU3QnJvdW5kKGRpc3RpbGJlcnRfbnVtX3BhcmFtZXRlcnMpJTdETSclMjIpJTBBcHJpbnQoZiUyMiclM0UlM0UlM0UlMjBCRVJUJTIwbm9tYnJlJTIwZGUlMjBwYXJhbSVDMyVBOHRyZXMlMjAlM0ElMjAxMTBNJyUyMik=",highlighted:`distilbert_num_parameters = model.num_parameters() / <span class="hljs-number">1_000_000</span>
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&#x27;&gt;&gt;&gt; DistilBERT nombre de paramètres : <span class="hljs-subst">{<span class="hljs-built_in">round</span>(distilbert_num_parameters)}</span>M&#x27;&quot;</span>)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&#x27;&gt;&gt;&gt; BERT nombre de paramètres : 110M&#x27;&quot;</span>)`,wrap:!1}}),k=new h({props:{code:"JyUzRSUzRSUzRSUyMERpc3RpbEJFUlQlMjAlMjBub21icmUlMjBkZSUyMHBhcmFtJUMzJUE4dHJlcyUyMCUzQSUyMDY3TSclMEEnJTNFJTNFJTNFJTIwQkVSVCUyMG5vbWJyZSUyMGRlJTIwcGFyYW0lQzMlQTh0cmVzJTIwJTNBJTIwMTEwTSc=",highlighted:`<span class="hljs-string">&#x27;&gt;&gt;&gt; DistilBERT  nombre de paramètres : 67M&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; BERT nombre de paramètres : 110M&#x27;</span>`,wrap:!1}}),{c(){n=U("p"),n.innerHTML=d,a=i(),c(u.$$.fragment),_=i(),w=U("p"),w.innerHTML=v,R=i(),c(B.$$.fragment),X=i(),c(k.$$.fragment)},l(j){n=T(j,"P",{"data-svelte-h":!0}),b(n)!=="svelte-zdrgeu"&&(n.innerHTML=d),a=o(j),m(u.$$.fragment,j),_=o(j),w=T(j,"P",{"data-svelte-h":!0}),b(w)!=="svelte-1vf3uof"&&(w.innerHTML=v),R=o(j),m(B.$$.fragment,j),X=o(j),m(k.$$.fragment,j)},m(j,g){t(j,n,g),t(j,a,g),y(u,j,g),t(j,_,g),t(j,w,g),t(j,R,g),y(B,j,g),t(j,X,g),y(k,j,g),Z=!0},i(j){Z||(M(u.$$.fragment,j),M(B.$$.fragment,j),M(k.$$.fragment,j),Z=!0)},o(j){p(u.$$.fragment,j),p(B.$$.fragment,j),p(k.$$.fragment,j),Z=!1},d(j){j&&(s(n),s(a),s(_),s(w),s(R),s(X)),J(u,j),J(B,j),J(k,j)}}}function Ci(f){let n,d;return n=new h({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIodGV4dCUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIybnAlMjIpJTBBdG9rZW5fbG9naXRzJTIwJTNEJTIwbW9kZWwoKippbnB1dHMpLmxvZ2l0cyUwQSUyMyUyMFRyb3V2ZSUyMGwnZW1wbGFjZW1lbnQlMjBkZSUyMCU1Qk1BU0slNUQlMjBldCUyMGV4dHJhaXQlMjBzZXMlMjBsb2dpdHMlMEFtYXNrX3Rva2VuX2luZGV4JTIwJTNEJTIwbnAuYXJnd2hlcmUoaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTIwJTNEJTNEJTIwdG9rZW5pemVyLm1hc2tfdG9rZW5faWQpJTVCMCUyQyUyMDElNUQlMEFtYXNrX3Rva2VuX2xvZ2l0cyUyMCUzRCUyMHRva2VuX2xvZ2l0cyU1QjAlMkMlMjBtYXNrX3Rva2VuX2luZGV4JTJDJTIwJTNBJTVEJTBBJTIzJTIwT24lMjBjaG9pc2l0JTIwbGVzJTIwY2FuZGlkYXRzJTIwJTVCTUFTSyU1RCUyMGF2ZWMlMjBsZXMlMjBsb2dpdHMlMjBsZXMlMjBwbHVzJTIwJUMzJUE5bGV2JUMzJUE5cyUwQSUyMyUyME5vdXMlMjBhbm51bG9ucyUyMGxlJTIwdGFibGVhdSUyMGF2YW50JTIwYXJnc29ydCUyMHBvdXIlMjBvYnRlbmlyJTIwbGUlMjBwbHVzJTIwZ3JhbmQlMkMlMjBldCUyMG5vbiUyMGxlJTIwcGx1cyUyMHBldGl0JTJDJTIwbG9naXRzJTBBdG9wXzVfdG9rZW5zJTIwJTNEJTIwbnAuYXJnc29ydCgtbWFza190b2tlbl9sb2dpdHMpJTVCJTNBNSU1RC50b2xpc3QoKSUwQSUwQWZvciUyMHRva2VuJTIwaW4lMjB0b3BfNV90b2tlbnMlM0ElMEElMjAlMjAlMjAlMjBwcmludChmJTIyJTNFJTNFJTNFJTIwJTdCdGV4dC5yZXBsYWNlKHRva2VuaXplci5tYXNrX3Rva2VuJTJDJTIwdG9rZW5pemVyLmRlY29kZSglNUJ0b2tlbiU1RCkpJTdEJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

inputs = tokenizer(text, return_tensors=<span class="hljs-string">&quot;np&quot;</span>)
token_logits = model(**inputs).logits
<span class="hljs-comment"># Trouve l&#x27;emplacement de [MASK] et extrait ses logits</span>
mask_token_index = np.argwhere(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>] == tokenizer.mask_token_id)[<span class="hljs-number">0</span>, <span class="hljs-number">1</span>]
mask_token_logits = token_logits[<span class="hljs-number">0</span>, mask_token_index, :]
<span class="hljs-comment"># On choisit les candidats [MASK] avec les logits les plus élevés</span>
<span class="hljs-comment"># Nous annulons le tableau avant argsort pour obtenir le plus grand, et non le plus petit, logits</span>
top_5_tokens = np.argsort(-mask_token_logits)[:<span class="hljs-number">5</span>].tolist()

<span class="hljs-keyword">for</span> token <span class="hljs-keyword">in</span> top_5_tokens:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&gt;&gt;&gt; <span class="hljs-subst">{text.replace(tokenizer.mask_token, tokenizer.decode([token]))}</span>&quot;</span>)`,wrap:!1}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function _i(f){let n,d;return n=new h({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIodGV4dCUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBdG9rZW5fbG9naXRzJTIwJTNEJTIwbW9kZWwoKippbnB1dHMpLmxvZ2l0cyUwQSUyMyUyMFRyb3V2ZSUyMGwnZW1wbGFjZW1lbnQlMjBkZSUyMCU1Qk1BU0slNUQlMjBldCUyMGV4dHJhaXQlMjBzZXMlMjBsb2dpdHMlMEFtYXNrX3Rva2VuX2luZGV4JTIwJTNEJTIwdG9yY2gud2hlcmUoaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTIwJTNEJTNEJTIwdG9rZW5pemVyLm1hc2tfdG9rZW5faWQpJTVCMSU1RCUwQW1hc2tfdG9rZW5fbG9naXRzJTIwJTNEJTIwdG9rZW5fbG9naXRzJTVCMCUyQyUyMG1hc2tfdG9rZW5faW5kZXglMkMlMjAlM0ElNUQlMEElMjMlMjBDaG9pc2lzc2V6JTIwbGVzJTIwY2FuZGlkYXRzJTIwJTVCTUFTSyU1RCUyMGF2ZWMlMjBsZXMlMjBsb2dpdHMlMjBsZXMlMjBwbHVzJTIwJUMzJUE5bGV2JUMzJUE5cyUwQXRvcF81X3Rva2VucyUyMCUzRCUyMHRvcmNoLnRvcGsobWFza190b2tlbl9sb2dpdHMlMkMlMjA1JTJDJTIwZGltJTNEMSkuaW5kaWNlcyU1QjAlNUQudG9saXN0KCklMEElMEFmb3IlMjB0b2tlbiUyMGluJTIwdG9wXzVfdG9rZW5zJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMiclM0UlM0UlM0UlMjAlN0J0ZXh0LnJlcGxhY2UodG9rZW5pemVyLm1hc2tfdG9rZW4lMkMlMjB0b2tlbml6ZXIuZGVjb2RlKCU1QnRva2VuJTVEKSklN0QnJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> torch

inputs = tokenizer(text, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>)
token_logits = model(**inputs).logits
<span class="hljs-comment"># Trouve l&#x27;emplacement de [MASK] et extrait ses logits</span>
mask_token_index = torch.where(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>] == tokenizer.mask_token_id)[<span class="hljs-number">1</span>]
mask_token_logits = token_logits[<span class="hljs-number">0</span>, mask_token_index, :]
<span class="hljs-comment"># Choisissez les candidats [MASK] avec les logits les plus élevés</span>
top_5_tokens = torch.topk(mask_token_logits, <span class="hljs-number">5</span>, dim=<span class="hljs-number">1</span>).indices[<span class="hljs-number">0</span>].tolist()

<span class="hljs-keyword">for</span> token <span class="hljs-keyword">in</span> top_5_tokens:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&#x27;&gt;&gt;&gt; <span class="hljs-subst">{text.replace(tokenizer.mask_token, tokenizer.decode([token]))}</span>&#x27;&quot;</span>)`,wrap:!1}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function gi(f){let n,d="✏️ <strong>Essayez !</strong> Créez un échantillon aléatoire de la répartition <code>unsupervised</code> et vérifiez que les étiquettes ne sont ni <code>0</code> ni <code>1</code>. Pendant que vous y êtes, vous pouvez aussi vérifier que les étiquettes dans les échantillons <code>train</code> et <code>test</code> sont bien <code>0</code> ou <code>1</code>. C’est un contrôle utile que tout praticien en NLP devrait effectuer au début d’un nouveau projet !";return{c(){n=U("p"),n.innerHTML=d},l(a){n=T(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-11i87eb"&&(n.innerHTML=d)},m(a,u){t(a,n,u)},p:qe,d(a){a&&s(n)}}}function Gi(f){let n,d='✏️ <strong>Essayez !</strong> Certains <em>transformers</em>, comme <a href="https://huggingface.co/google/bigbird-roberta-base" rel="nofollow">BigBird</a> et <a href="hf.co/allenai/longformer-base-4096">Longformer</a>, ont une longueur de contexte beaucoup plus longue que BERT et les autres premiers <em>transformers</em>. Instanciez le <em>tokenizer</em> pour l’un de ces <em>checkpoints</em> et vérifiez que le <code>model_max_length</code> correspond à ce qui est indiqué sur sa carte.';return{c(){n=U("p"),n.innerHTML=d},l(a){n=T(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1txb5do"&&(n.innerHTML=d)},m(a,u){t(a,n,u)},p:qe,d(a){a&&s(n)}}}function Bi(f){let n,d="Notez que l’utilisation d’une petite taille peut être préjudiciable dans les scénarios du monde réel. Vous devez donc utiliser une taille qui correspond au cas d’utilisation auquel vous appliquerez votre modèle.";return{c(){n=U("p"),n.textContent=d},l(a){n=T(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1d9csje"&&(n.textContent=d)},m(a,u){t(a,n,u)},p:qe,d(a){a&&s(n)}}}function Zi(f){let n,d="✏️ <strong>Essayez</strong> Exécutez le code ci-dessus plusieurs fois pour voir le masquage aléatoire se produire sous vos yeux ! Remplacez aussi la méthode <code>tokenizer.decode()</code> par <code>tokenizer.convert_ids_to_tokens()</code> pour voir que parfois un seul <em>token</em> d’un mot donné est masqué et pas les autres.";return{c(){n=U("p"),n.innerHTML=d},l(a){n=T(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-n29skf"&&(n.innerHTML=d)},m(a,u){t(a,n,u)},p:qe,d(a){a&&s(n)}}}function oi(f){let n,d="Un effet secondaire du masquage aléatoire est que nos métriques d’évaluation ne seront pas déterministes lorsque nous utilisons la fonction <code>Trainer</code> puisque nous utilisons le même assembleur de données pour les échantillons d’entraînement et de test. Nous verrons plus tard, lorsque nous examinerons le <em>finetuning</em> avec 🤗 <em>Accelerate</em>, comment nous pouvons utiliser la flexibilité d’une boucle d’évaluation personnalisée pour geler le caractère aléatoire.";return{c(){n=U("p"),n.innerHTML=d},l(a){n=T(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1haeax1"&&(n.innerHTML=d)},m(a,u){t(a,n,u)},d(a){a&&s(n)}}}function ki(f){let n,d;return n=new h({props:{code:"aW1wb3J0JTIwY29sbGVjdGlvbnMlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEElMEFmcm9tJTIwdHJhbnNmb3JtZXJzLmRhdGEuZGF0YV9jb2xsYXRvciUyMGltcG9ydCUyMHRmX2RlZmF1bHRfZGF0YV9jb2xsYXRvciUwQSUwQXd3bV9wcm9iYWJpbGl0eSUyMCUzRCUyMDAuMiUwQSUwQSUwQWRlZiUyMHdob2xlX3dvcmRfbWFza2luZ19kYXRhX2NvbGxhdG9yKGZlYXR1cmVzKSUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGZlYXR1cmUlMjBpbiUyMGZlYXR1cmVzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd29yZF9pZHMlMjAlM0QlMjBmZWF0dXJlLnBvcCglMjJ3b3JkX2lkcyUyMiklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBDciVDMyVBOWF0aW9uJTIwZCd1bmUlMjBjb3JyZXNwb25kYW5jZSUyMGVudHJlJTIwbGVzJTIwbW90cyUyMGV0JTIwbGVzJTIwaW5kaWNlcyUyMGRlcyUyMHRva2VucyUyMGNvcnJlc3BvbmRhbnRzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWFwcGluZyUyMCUzRCUyMGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY3VycmVudF93b3JkX2luZGV4JTIwJTNEJTIwLTElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjdXJyZW50X3dvcmQlMjAlM0QlMjBOb25lJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwaWR4JTJDJTIwd29yZF9pZCUyMGluJTIwZW51bWVyYXRlKHdvcmRfaWRzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwd29yZF9pZCUyMGlzJTIwbm90JTIwTm9uZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwd29yZF9pZCUyMCElM0QlMjBjdXJyZW50X3dvcmQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjdXJyZW50X3dvcmQlMjAlM0QlMjB3b3JkX2lkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY3VycmVudF93b3JkX2luZGV4JTIwJTJCJTNEJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1hcHBpbmclNUJjdXJyZW50X3dvcmRfaW5kZXglNUQuYXBwZW5kKGlkeCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBNYXNxdWVyJTIwZGVzJTIwbW90cyUyMGRlJTIwZmElQzMlQTdvbiUyMGFsJUMzJUE5YXRvaXJlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWFzayUyMCUzRCUyMG5wLnJhbmRvbS5iaW5vbWlhbCgxJTJDJTIwd3dtX3Byb2JhYmlsaXR5JTJDJTIwKGxlbihtYXBwaW5nKSUyQykpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW5wdXRfaWRzJTIwJTNEJTIwZmVhdHVyZSU1QiUyMmlucHV0X2lkcyUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMGZlYXR1cmUlNUIlMjJsYWJlbHMlMjIlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBuZXdfbGFiZWxzJTIwJTNEJTIwJTVCLTEwMCU1RCUyMColMjBsZW4obGFiZWxzKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMHdvcmRfaWQlMjBpbiUyMG5wLndoZXJlKG1hc2spJTVCMCU1RCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdvcmRfaWQlMjAlM0QlMjB3b3JkX2lkLml0ZW0oKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGlkeCUyMGluJTIwbWFwcGluZyU1QndvcmRfaWQlNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBuZXdfbGFiZWxzJTVCaWR4JTVEJTIwJTNEJTIwbGFiZWxzJTVCaWR4JTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaW5wdXRfaWRzJTVCaWR4JTVEJTIwJTNEJTIwdG9rZW5pemVyLm1hc2tfdG9rZW5faWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlJTVCJTIybGFiZWxzJTIyJTVEJTIwJTNEJTIwbmV3X2xhYmVscyUwQSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHRmX2RlZmF1bHRfZGF0YV9jb2xsYXRvcihmZWF0dXJlcyk=",highlighted:`<span class="hljs-keyword">import</span> collections
<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

<span class="hljs-keyword">from</span> transformers.data.data_collator <span class="hljs-keyword">import</span> tf_default_data_collator

wwm_probability = <span class="hljs-number">0.2</span>


<span class="hljs-keyword">def</span> <span class="hljs-title function_">whole_word_masking_data_collator</span>(<span class="hljs-params">features</span>):
    <span class="hljs-keyword">for</span> feature <span class="hljs-keyword">in</span> features:
        word_ids = feature.pop(<span class="hljs-string">&quot;word_ids&quot;</span>)

        <span class="hljs-comment"># Création d&#x27;une correspondance entre les mots et les indices des tokens correspondants</span>
        mapping = collections.defaultdict(<span class="hljs-built_in">list</span>)
        current_word_index = -<span class="hljs-number">1</span>
        current_word = <span class="hljs-literal">None</span>
        <span class="hljs-keyword">for</span> idx, word_id <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(word_ids):
            <span class="hljs-keyword">if</span> word_id <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span>:
                <span class="hljs-keyword">if</span> word_id != current_word:
                    current_word = word_id
                    current_word_index += <span class="hljs-number">1</span>
                mapping[current_word_index].append(idx)

        <span class="hljs-comment"># Masquer des mots de façon aléatoire</span>
        mask = np.random.binomial(<span class="hljs-number">1</span>, wwm_probability, (<span class="hljs-built_in">len</span>(mapping),))
        input_ids = feature[<span class="hljs-string">&quot;input_ids&quot;</span>]
        labels = feature[<span class="hljs-string">&quot;labels&quot;</span>]
        new_labels = [-<span class="hljs-number">100</span>] * <span class="hljs-built_in">len</span>(labels)
        <span class="hljs-keyword">for</span> word_id <span class="hljs-keyword">in</span> np.where(mask)[<span class="hljs-number">0</span>]:
            word_id = word_id.item()
            <span class="hljs-keyword">for</span> idx <span class="hljs-keyword">in</span> mapping[word_id]:
                new_labels[idx] = labels[idx]
                input_ids[idx] = tokenizer.mask_token_id
        feature[<span class="hljs-string">&quot;labels&quot;</span>] = new_labels

    <span class="hljs-keyword">return</span> tf_default_data_collator(features)`,wrap:!1}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function vi(f){let n,d;return n=new h({props:{code:"aW1wb3J0JTIwY29sbGVjdGlvbnMlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEElMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwZGVmYXVsdF9kYXRhX2NvbGxhdG9yJTBBJTBBd3dtX3Byb2JhYmlsaXR5JTIwJTNEJTIwMC4yJTBBJTBBJTBBZGVmJTIwd2hvbGVfd29yZF9tYXNraW5nX2RhdGFfY29sbGF0b3IoZmVhdHVyZXMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwZmVhdHVyZSUyMGluJTIwZmVhdHVyZXMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3b3JkX2lkcyUyMCUzRCUyMGZlYXR1cmUucG9wKCUyMndvcmRfaWRzJTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMENyJUMzJUE5YXRpb24lMjBkJ3VuZSUyMGNvcnJlc3BvbmRhbmNlJTIwZW50cmUlMjBsZXMlMjBtb3RzJTIwZXQlMjBsZXMlMjBpbmRpY2VzJTIwZGVzJTIwdG9rZW5zJTIwY29ycmVzcG9uZGFudHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXBwaW5nJTIwJTNEJTIwY29sbGVjdGlvbnMuZGVmYXVsdGRpY3QobGlzdCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjdXJyZW50X3dvcmRfaW5kZXglMjAlM0QlMjAtMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGN1cnJlbnRfd29yZCUyMCUzRCUyME5vbmUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpZHglMkMlMjB3b3JkX2lkJTIwaW4lMjBlbnVtZXJhdGUod29yZF9pZHMpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjB3b3JkX2lkJTIwaXMlMjBub3QlMjBOb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjB3b3JkX2lkJTIwISUzRCUyMGN1cnJlbnRfd29yZCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGN1cnJlbnRfd29yZCUyMCUzRCUyMHdvcmRfaWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjdXJyZW50X3dvcmRfaW5kZXglMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWFwcGluZyU1QmN1cnJlbnRfd29yZF9pbmRleCU1RC5hcHBlbmQoaWR4KSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME1hc3F1ZXIlMjBkZXMlMjBtb3RzJTIwZGUlMjBmYSVDMyVBN29uJTIwYWwlQzMlQTlhdG9pcmUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXNrJTIwJTNEJTIwbnAucmFuZG9tLmJpbm9taWFsKDElMkMlMjB3d21fcHJvYmFiaWxpdHklMkMlMjAobGVuKG1hcHBpbmcpJTJDKSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbnB1dF9pZHMlMjAlM0QlMjBmZWF0dXJlJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwZmVhdHVyZSU1QiUyMmxhYmVscyUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG5ld19sYWJlbHMlMjAlM0QlMjAlNUItMTAwJTVEJTIwKiUyMGxlbihsYWJlbHMpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwd29yZF9pZCUyMGluJTIwbnAud2hlcmUobWFzayklNUIwJTVEJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd29yZF9pZCUyMCUzRCUyMHdvcmRfaWQuaXRlbSgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwaWR4JTIwaW4lMjBtYXBwaW5nJTVCd29yZF9pZCU1RCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG5ld19sYWJlbHMlNUJpZHglNUQlMjAlM0QlMjBsYWJlbHMlNUJpZHglNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbnB1dF9pZHMlNUJpZHglNUQlMjAlM0QlMjB0b2tlbml6ZXIubWFza190b2tlbl9pZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmUlNUIlMjJsYWJlbHMlMjIlNUQlMjAlM0QlMjBuZXdfbGFiZWxzJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwZGVmYXVsdF9kYXRhX2NvbGxhdG9yKGZlYXR1cmVzKQ==",highlighted:`<span class="hljs-keyword">import</span> collections
<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> default_data_collator

wwm_probability = <span class="hljs-number">0.2</span>


<span class="hljs-keyword">def</span> <span class="hljs-title function_">whole_word_masking_data_collator</span>(<span class="hljs-params">features</span>):
    <span class="hljs-keyword">for</span> feature <span class="hljs-keyword">in</span> features:
        word_ids = feature.pop(<span class="hljs-string">&quot;word_ids&quot;</span>)

        <span class="hljs-comment"># Création d&#x27;une correspondance entre les mots et les indices des tokens correspondants</span>
        mapping = collections.defaultdict(<span class="hljs-built_in">list</span>)
        current_word_index = -<span class="hljs-number">1</span>
        current_word = <span class="hljs-literal">None</span>
        <span class="hljs-keyword">for</span> idx, word_id <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(word_ids):
            <span class="hljs-keyword">if</span> word_id <span class="hljs-keyword">is</span> <span class="hljs-keyword">not</span> <span class="hljs-literal">None</span>:
                <span class="hljs-keyword">if</span> word_id != current_word:
                    current_word = word_id
                    current_word_index += <span class="hljs-number">1</span>
                mapping[current_word_index].append(idx)

        <span class="hljs-comment"># Masquer des mots de façon aléatoire</span>
        mask = np.random.binomial(<span class="hljs-number">1</span>, wwm_probability, (<span class="hljs-built_in">len</span>(mapping),))
        input_ids = feature[<span class="hljs-string">&quot;input_ids&quot;</span>]
        labels = feature[<span class="hljs-string">&quot;labels&quot;</span>]
        new_labels = [-<span class="hljs-number">100</span>] * <span class="hljs-built_in">len</span>(labels)
        <span class="hljs-keyword">for</span> word_id <span class="hljs-keyword">in</span> np.where(mask)[<span class="hljs-number">0</span>]:
            word_id = word_id.item()
            <span class="hljs-keyword">for</span> idx <span class="hljs-keyword">in</span> mapping[word_id]:
                new_labels[idx] = labels[idx]
                input_ids[idx] = tokenizer.mask_token_id
        feature[<span class="hljs-string">&quot;labels&quot;</span>] = new_labels

    <span class="hljs-keyword">return</span> default_data_collator(features)`,wrap:!1}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function Ri(f){let n,d="✏️ <strong>Essayez</strong> Exécutez le code ci-dessus plusieurs fois pour voir le masquage aléatoire se produire sous vos yeux ! Remplacez aussi la méthode <code>tokenizer.decode()</code> par <code>tokenizer.convert_ids_to_tokens()</code> pour voir que les <em>tokens</em> d’un mot donné sont toujours masqués ensemble.";return{c(){n=U("p"),n.innerHTML=d},l(a){n=T(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-cafi04"&&(n.innerHTML=d)},m(a,u){t(a,n,u)},p:qe,d(a){a&&s(n)}}}function Xi(f){let n,d="Une fois que nous sommes connectés, nous pouvons spécifier les arguments pour le <code>Trainer</code> :",a,u,_,w,v="Ici, nous avons modifié quelques options par défaut, y compris <code>logging_steps</code> pour s’assurer que nous suivons la perte d’entraînement à chaque époque. Nous avons également utilisé <code>fp16=True</code> pour activer l’entraînement en précision mixte, ce qui nous donne un autre gain de vitesse. Par défaut, <code>Trainer</code> va supprimer toutes les colonnes qui ne font pas partie de la méthode <code>forward()</code> du modèle. Cela signifie que si vous utilisez l’assembleur de masquage de mots entiers, vous devrez également définir <code>remove_unused_columns=False</code> pour vous assurer que nous ne perdons pas la colonne <code>word_ids</code> pendant l’entraînement.",R,B,X='Notez que vous pouvez spécifier le nom du dépôt vers lequel vous voulez pousser avec l’argument <code>hub_model_id</code> (en particulier, vous devrez utiliser cet argument pour pousser vers une organisation). Par exemple, lorsque nous avons poussé le modèle vers l’organisation <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code></a>, nous avons ajouté <code>hub_model_id=&quot;huggingface-course/distilbert-finetuned-imdb&quot;</code> <code>TrainingArguments</code>. Par défaut, le dépôt utilisé sera dans votre espace de noms et nommé après le répertoire de sortie que vous avez défini, donc dans notre cas ce sera <code>&quot;lewtun/distilbert-finetuned-imdb&quot;</code>.',k,Z,j="Nous avons maintenant tous les ingrédients pour instancier le <code>Trainer</code>. Ici, nous utilisons juste l’assembleur standard <code>data_collator</code>, mais vous pouvez essayer l’assembleur de masquage de mots entiers et comparer les résultats comme exercice :",g,F,x,I,z="Nous sommes maintenant prêts à exécuter <code>trainer.train()</code>. Mais avant, regardons brièvement la <em>perplexité</em> qui est une métrique commune pour évaluer la performance des modèles de langage.",Y;return u=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBYmF0Y2hfc2l6ZSUyMCUzRCUyMDY0JTBBJTIzJTIwTW9udHJlciUyMGxhJTIwcGVydGUlMjBkJ2VudHJhJUMzJUFFbmVtZW50JTIwJUMzJUEwJTIwY2hhcXVlJTIwJUMzJUE5cG9xdWUlMEFsb2dnaW5nX3N0ZXBzJTIwJTNEJTIwbGVuKGRvd25zYW1wbGVkX2RhdGFzZXQlNUIlMjJ0cmFpbiUyMiU1RCklMjAlMkYlMkYlMjBiYXRjaF9zaXplJTBBbW9kZWxfbmFtZSUyMCUzRCUyMG1vZGVsX2NoZWNrcG9pbnQuc3BsaXQoJTIyJTJGJTIyKSU1Qi0xJTVEJTBBJTBBdHJhaW5pbmdfYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUwQSUyMCUyMCUyMCUyMG91dHB1dF9kaXIlM0RmJTIyJTdCbW9kZWxfbmFtZSU3RC1maW5ldHVuZWQtaW1kYiUyMiUyQyUwQSUyMCUyMCUyMCUyMG92ZXJ3cml0ZV9vdXRwdXRfZGlyJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGV2YWx1YXRpb25fc3RyYXRlZ3klM0QlMjJlcG9jaCUyMiUyQyUwQSUyMCUyMCUyMCUyMGxlYXJuaW5nX3JhdGUlM0QyZS01JTJDJTBBJTIwJTIwJTIwJTIwd2VpZ2h0X2RlY2F5JTNEMC4wMSUyQyUwQSUyMCUyMCUyMCUyMHBlcl9kZXZpY2VfdHJhaW5fYmF0Y2hfc2l6ZSUzRGJhdGNoX3NpemUlMkMlMEElMjAlMjAlMjAlMjBwZXJfZGV2aWNlX2V2YWxfYmF0Y2hfc2l6ZSUzRGJhdGNoX3NpemUlMkMlMEElMjAlMjAlMjAlMjBwdXNoX3RvX2h1YiUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBmcDE2JTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGxvZ2dpbmdfc3RlcHMlM0Rsb2dnaW5nX3N0ZXBzJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments

batch_size = <span class="hljs-number">64</span>
<span class="hljs-comment"># Montrer la perte d&#x27;entraînement à chaque époque</span>
logging_steps = <span class="hljs-built_in">len</span>(downsampled_dataset[<span class="hljs-string">&quot;train&quot;</span>]) // batch_size
model_name = model_checkpoint.split(<span class="hljs-string">&quot;/&quot;</span>)[-<span class="hljs-number">1</span>]

training_args = TrainingArguments(
    output_dir=<span class="hljs-string">f&quot;<span class="hljs-subst">{model_name}</span>-finetuned-imdb&quot;</span>,
    overwrite_output_dir=<span class="hljs-literal">True</span>,
    evaluation_strategy=<span class="hljs-string">&quot;epoch&quot;</span>,
    learning_rate=<span class="hljs-number">2e-5</span>,
    weight_decay=<span class="hljs-number">0.01</span>,
    per_device_train_batch_size=batch_size,
    per_device_eval_batch_size=batch_size,
    push_to_hub=<span class="hljs-literal">True</span>,
    fp16=<span class="hljs-literal">True</span>,
    logging_steps=logging_steps,
)`,wrap:!1}}),F=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluZXIlMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUzRG1vZGVsJTJDJTBBJTIwJTIwJTIwJTIwYXJncyUzRHRyYWluaW5nX2FyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEZG93bnNhbXBsZWRfZGF0YXNldCU1QiUyMnRyYWluJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZXZhbF9kYXRhc2V0JTNEZG93bnNhbXBsZWRfZGF0YXNldCU1QiUyMnRlc3QlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBkYXRhX2NvbGxhdG9yJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMHRva2VuaXplciUzRHRva2VuaXplciUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer

trainer = Trainer(
    model=model,
    args=training_args,
    train_dataset=downsampled_dataset[<span class="hljs-string">&quot;train&quot;</span>],
    eval_dataset=downsampled_dataset[<span class="hljs-string">&quot;test&quot;</span>],
    data_collator=data_collator,
    tokenizer=tokenizer,
)`,wrap:!1}}),{c(){n=U("p"),n.innerHTML=d,a=i(),c(u.$$.fragment),_=i(),w=U("p"),w.innerHTML=v,R=i(),B=U("p"),B.innerHTML=X,k=i(),Z=U("p"),Z.innerHTML=j,g=i(),c(F.$$.fragment),x=i(),I=U("p"),I.innerHTML=z},l(G){n=T(G,"P",{"data-svelte-h":!0}),b(n)!=="svelte-w4oen1"&&(n.innerHTML=d),a=o(G),m(u.$$.fragment,G),_=o(G),w=T(G,"P",{"data-svelte-h":!0}),b(w)!=="svelte-134tsrt"&&(w.innerHTML=v),R=o(G),B=T(G,"P",{"data-svelte-h":!0}),b(B)!=="svelte-1y1z5m4"&&(B.innerHTML=X),k=o(G),Z=T(G,"P",{"data-svelte-h":!0}),b(Z)!=="svelte-ri63q4"&&(Z.innerHTML=j),g=o(G),m(F.$$.fragment,G),x=o(G),I=T(G,"P",{"data-svelte-h":!0}),b(I)!=="svelte-3dfpuc"&&(I.innerHTML=z)},m(G,W){t(G,n,W),t(G,a,W),y(u,G,W),t(G,_,W),t(G,w,W),t(G,R,W),t(G,B,W),t(G,k,W),t(G,Z,W),t(G,g,W),y(F,G,W),t(G,x,W),t(G,I,W),Y=!0},i(G){Y||(M(u.$$.fragment,G),M(F.$$.fragment,G),Y=!0)},o(G){p(u.$$.fragment,G),p(F.$$.fragment,G),Y=!1},d(G){G&&(s(n),s(a),s(_),s(w),s(R),s(B),s(k),s(Z),s(g),s(x),s(I)),J(u,G),J(F,G)}}}function zi(f){let n,d="Une fois que nous sommes connectés, nous pouvons créer nos jeux de données <code>tf.data</code>. Pour ce faire, nous utiliserons la méthode <code>prepare_tf_dataset()</code>, qui utilise notre modèle pour déduire automatiquement quelles colonnes doivent aller dans le jeu de données. Si vous voulez contrôler exactement les colonnes à utiliser, vous pouvez utiliser la méthode <code>Dataset.to_tf_dataset()</code> à la place. Pour garder les choses simples, nous n’utiliserons ici que le l’assembleur de données standard, mais vous pouvez aussi essayer l’assembleur masquant des mots entiers et comparer les résultats à titre d’exercice :",a,u,_,w,v="Ensuite, nous configurons nos hyperparamètres d’entraînement et compilons notre modèle. Nous utilisons la fonction <code>create_optimizer()</code> de la bibliothèque 🤗 <em>Transformers</em>, qui nous donne un optimiseur <code>AdamW</code> avec une décroissance linéaire du taux d’apprentissage. Nous utilisons également la perte intégrée au modèle, qui est la perte par défaut lorsqu’aucune perte n’est spécifiée comme argument de <code>compile()</code>, et nous définissons la précision d’entraînement à <code>&quot;mixed_float16&quot;</code>. Notez que si vous utilisez un GPU Colab ou un autre GPU qui n’a pas le support accéléré en float16, vous devriez probablement commenter cette ligne.",R,B,X='De plus, nous mettons en place un <code>PushToHubCallback</code> qui sauvegardera le modèle sur le <em>Hub</em> après chaque époque. Vous pouvez spécifier le nom du dépôt vers lequel vous voulez pousser avec l’argument <code>hub_model_id</code> (en particulier, vous devrez utiliser cet argument pour pousser vers une organisation). Par exemple, pour pousser le modèle vers l’organisation <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code></a>, nous avons ajouté <code>hub_model_id=&quot;huggingface-course/distilbert-finetuned-imdb&quot;</code>. Par défaut, le dépôt utilisé sera dans votre espace de noms et nommé après le répertoire de sortie que vous avez défini, donc dans notre cas, ce sera <code>&quot;lewtun/distilbert-finetuned-imdb&quot;</code>.',k,Z,j,g,F="Nous sommes maintenant prêts à exécuter <code>model.fit()</code>. Mais avant, regardons brièvement la <em>perplexité</em> qui est une métrique commune pour évaluer la performance des modèles de langage.",x;return u=new h({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMG1vZGVsLnByZXBhcmVfdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBkb3duc2FtcGxlZF9kYXRhc2V0JTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMHNodWZmbGUlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDMyJTJDJTBBKSUwQSUwQXRmX2V2YWxfZGF0YXNldCUyMCUzRCUyMG1vZGVsLnByZXBhcmVfdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBkb3duc2FtcGxlZF9kYXRhc2V0JTVCJTIydGVzdCUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzREZhbHNlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDMyJTJDJTBBKQ==",highlighted:`tf_train_dataset = model.prepare_tf_dataset(
    downsampled_dataset[<span class="hljs-string">&quot;train&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">True</span>,
    batch_size=<span class="hljs-number">32</span>,
)

tf_eval_dataset = model.prepare_tf_dataset(
    downsampled_dataset[<span class="hljs-string">&quot;test&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">False</span>,
    batch_size=<span class="hljs-number">32</span>,
)`,wrap:!1}}),Z=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFmcm9tJTIwdHJhbnNmb3JtZXJzLmtlcmFzX2NhbGxiYWNrcyUyMGltcG9ydCUyMFB1c2hUb0h1YkNhbGxiYWNrJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFudW1fdHJhaW5fc3RlcHMlMjAlM0QlMjBsZW4odGZfdHJhaW5fZGF0YXNldCklMEFvcHRpbWl6ZXIlMkMlMjBzY2hlZHVsZSUyMCUzRCUyMGNyZWF0ZV9vcHRpbWl6ZXIoJTBBJTIwJTIwJTIwJTIwaW5pdF9sciUzRDJlLTUlMkMlMEElMjAlMjAlMjAlMjBudW1fd2FybXVwX3N0ZXBzJTNEMV8wMDAlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5fc3RlcHMlM0RudW1fdHJhaW5fc3RlcHMlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfZGVjYXlfcmF0ZSUzRDAuMDElMkMlMEEpJTBBbW9kZWwuY29tcGlsZShvcHRpbWl6ZXIlM0RvcHRpbWl6ZXIpJTBBJTBBJTIzJTIwRW50cmElQzMlQUVuZXIlMjBlbiUyMG1peGVkLXByZWNpc2lvbiUyMGZsb2F0MTYlMEF0Zi5rZXJhcy5taXhlZF9wcmVjaXNpb24uc2V0X2dsb2JhbF9wb2xpY3koJTIybWl4ZWRfZmxvYXQxNiUyMiklMEElMEFtb2RlbF9uYW1lJTIwJTNEJTIwbW9kZWxfY2hlY2twb2ludC5zcGxpdCglMjIlMkYlMjIpJTVCLTElNUQlMEFjYWxsYmFjayUyMCUzRCUyMFB1c2hUb0h1YkNhbGxiYWNrKCUwQSUyMCUyMCUyMCUyMG91dHB1dF9kaXIlM0RmJTIyJTdCbW9kZWxfbmFtZSU3RC1maW5ldHVuZWQtaW1kYiUyMiUyQyUyMHRva2VuaXplciUzRHRva2VuaXplciUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> create_optimizer
<span class="hljs-keyword">from</span> transformers.keras_callbacks <span class="hljs-keyword">import</span> PushToHubCallback
<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf

num_train_steps = <span class="hljs-built_in">len</span>(tf_train_dataset)
optimizer, schedule = create_optimizer(
    init_lr=<span class="hljs-number">2e-5</span>,
    num_warmup_steps=<span class="hljs-number">1_000</span>,
    num_train_steps=num_train_steps,
    weight_decay_rate=<span class="hljs-number">0.01</span>,
)
model.<span class="hljs-built_in">compile</span>(optimizer=optimizer)

<span class="hljs-comment"># Entraîner en mixed-precision float16</span>
tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">&quot;mixed_float16&quot;</span>)

model_name = model_checkpoint.split(<span class="hljs-string">&quot;/&quot;</span>)[-<span class="hljs-number">1</span>]
callback = PushToHubCallback(
    output_dir=<span class="hljs-string">f&quot;<span class="hljs-subst">{model_name}</span>-finetuned-imdb&quot;</span>, tokenizer=tokenizer
)`,wrap:!1}}),{c(){n=U("p"),n.innerHTML=d,a=i(),c(u.$$.fragment),_=i(),w=U("p"),w.innerHTML=v,R=i(),B=U("p"),B.innerHTML=X,k=i(),c(Z.$$.fragment),j=i(),g=U("p"),g.innerHTML=F},l(I){n=T(I,"P",{"data-svelte-h":!0}),b(n)!=="svelte-26cxws"&&(n.innerHTML=d),a=o(I),m(u.$$.fragment,I),_=o(I),w=T(I,"P",{"data-svelte-h":!0}),b(w)!=="svelte-34ufr5"&&(w.innerHTML=v),R=o(I),B=T(I,"P",{"data-svelte-h":!0}),b(B)!=="svelte-1uu93ta"&&(B.innerHTML=X),k=o(I),m(Z.$$.fragment,I),j=o(I),g=T(I,"P",{"data-svelte-h":!0}),b(g)!=="svelte-59zo7p"&&(g.innerHTML=F)},m(I,z){t(I,n,z),t(I,a,z),y(u,I,z),t(I,_,z),t(I,w,z),t(I,R,z),t(I,B,z),t(I,k,z),y(Z,I,z),t(I,j,z),t(I,g,z),x=!0},i(I){x||(M(u.$$.fragment,I),M(Z.$$.fragment,I),x=!0)},o(I){p(u.$$.fragment,I),p(Z.$$.fragment,I),x=!1},d(I){I&&(s(n),s(a),s(_),s(w),s(R),s(B),s(k),s(j),s(g)),J(u,I),J(Z,I)}}}function Wi(f){let n,d="En supposant que notre ensemble de test se compose principalement de phrases grammaticalement correctes, une façon de mesurer la qualité de notre modèle de langage est de calculer les probabilités qu’il attribue au mot suivant dans toutes les phrases de l’ensemble de test. Des probabilités élevées indiquent que le modèle n’est pas « surpris » ou « perplexe » vis-à-vis des exemples non vus, et suggèrent qu’il a appris les modèles de base de la grammaire de la langue. Il existe plusieurs définitions mathématiques de la perplexité. Celle que nous utiliserons la définit comme l’exponentielle de la perte d’entropie croisée. Ainsi, nous pouvons calculer la perplexité de notre modèle pré-entraîné en utilisant la fonction <code>model.evaluate()</code> pour calculer la perte d’entropie croisée sur l’ensemble de test, puis en prenant l’exponentielle du résultat :",a,u,_;return u=new h({props:{code:"aW1wb3J0JTIwbWF0aCUwQSUwQWV2YWxfbG9zcyUyMCUzRCUyMG1vZGVsLmV2YWx1YXRlKHRmX2V2YWxfZGF0YXNldCklMEFwcmludChmJTIyUGVycGxleGl0JUMzJUE5JTIwJTNBJTIwJTdCbWF0aC5leHAoZXZhbF9sb3NzKSUzQS4yZiU3RCUyMik=",highlighted:`<span class="hljs-keyword">import</span> math

eval_loss = model.evaluate(tf_eval_dataset)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Perplexité : <span class="hljs-subst">{math.exp(eval_loss):<span class="hljs-number">.2</span>f}</span>&quot;</span>)`,wrap:!1}}),{c(){n=U("p"),n.innerHTML=d,a=i(),c(u.$$.fragment)},l(w){n=T(w,"P",{"data-svelte-h":!0}),b(n)!=="svelte-192lx3a"&&(n.innerHTML=d),a=o(w),m(u.$$.fragment,w)},m(w,v){t(w,n,v),t(w,a,v),y(u,w,v),_=!0},i(w){_||(M(u.$$.fragment,w),_=!0)},o(w){p(u.$$.fragment,w),_=!1},d(w){w&&(s(n),s(a)),J(u,w)}}}function $i(f){let n,d="En supposant que notre ensemble de test se compose principalement de phrases grammaticalement correctes, une façon de mesurer la qualité de notre modèle de langage est de calculer les probabilités qu’il attribue au mot suivant dans toutes les phrases de l’ensemble de test. Des probabilités élevées indiquent que le modèle n’est pas « surpris » ou « perplexe » vis-à-vis des exemples non vus, et suggèrent qu’il a appris les modèles de base de la grammaire de la langue. Il existe plusieurs définitions mathématiques de la perplexité. Celle que nous utiliserons la définit comme l’exponentielle de la perte d’entropie croisée. Ainsi, nous pouvons calculer la perplexité de notre modèle pré-entraîné en utilisant la fonction <code>Trainer.evaluate()</code> pour calculer la perte d’entropie croisée sur l’ensemble de test, puis en prenant l’exponentielle du résultat :",a,u,_;return u=new h({props:{code:"aW1wb3J0JTIwbWF0aCUwQSUwQWV2YWxfcmVzdWx0cyUyMCUzRCUyMHRyYWluZXIuZXZhbHVhdGUoKSUwQXByaW50KGYlMjIlM0UlM0UlM0UlMjBQZXJwbGV4aXR5JTNBJTIwJTdCbWF0aC5leHAoZXZhbF9yZXN1bHRzJTVCJ2V2YWxfbG9zcyclNUQpJTNBLjJmJTdEJTIyKQ==",highlighted:`<span class="hljs-keyword">import</span> math

eval_results = trainer.evaluate()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&gt;&gt;&gt; Perplexity: <span class="hljs-subst">{math.exp(eval_results[<span class="hljs-string">&#x27;eval_loss&#x27;</span>]):<span class="hljs-number">.2</span>f}</span>&quot;</span>)`,wrap:!1}}),{c(){n=U("p"),n.innerHTML=d,a=i(),c(u.$$.fragment)},l(w){n=T(w,"P",{"data-svelte-h":!0}),b(n)!=="svelte-vtkpna"&&(n.innerHTML=d),a=o(w),m(u.$$.fragment,w)},m(w,v){t(w,n,v),t(w,a,v),y(u,w,v),_=!0},i(w){_||(M(u.$$.fragment,w),_=!0)},o(w){p(u.$$.fragment,w),_=!1},d(w){w&&(s(n),s(a)),J(u,w)}}}function Vi(f){let n,d;return n=new h({props:{code:"bW9kZWwuZml0KHRmX3RyYWluX2RhdGFzZXQlMkMlMjB2YWxpZGF0aW9uX2RhdGElM0R0Zl9ldmFsX2RhdGFzZXQlMkMlMjBjYWxsYmFja3MlM0QlNUJjYWxsYmFjayU1RCk=",highlighted:"model.fit(tf_train_dataset, validation_data=tf_eval_dataset, callbacks=[callback])",wrap:!1}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function xi(f){let n,d;return n=new h({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function Ni(f){let n,d;return n=new h({props:{code:"ZXZhbF9sb3NzJTIwJTNEJTIwbW9kZWwuZXZhbHVhdGUodGZfZXZhbF9kYXRhc2V0KSUwQXByaW50KGYlMjJQZXJwbGV4aXQlQzMlQTklMjAlM0ElMjAlN0JtYXRoLmV4cChldmFsX2xvc3MpJTNBLjJmJTdEJTIyKQ==",highlighted:`eval_loss = model.evaluate(tf_eval_dataset)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Perplexité : <span class="hljs-subst">{math.exp(eval_loss):<span class="hljs-number">.2</span>f}</span>&quot;</span>)`,wrap:!1}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function Qi(f){let n,d;return n=new h({props:{code:"ZXZhbF9yZXN1bHRzJTIwJTNEJTIwdHJhaW5lci5ldmFsdWF0ZSgpJTBBcHJpbnQoZiUyMiUzRSUzRSUzRSUyMFBlcnBsZXhpdCVDMyVBOSUyMCUzQSUyMCU3Qm1hdGguZXhwKGV2YWxfcmVzdWx0cyU1QidldmFsX2xvc3MnJTVEKSUzQS4yZiU3RCUyMik=",highlighted:`eval_results = trainer.evaluate()
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&gt;&gt;&gt; Perplexité : <span class="hljs-subst">{math.exp(eval_results[<span class="hljs-string">&#x27;eval_loss&#x27;</span>]):<span class="hljs-number">.2</span>f}</span>&quot;</span>)`,wrap:!1}}),{c(){c(n.$$.fragment)},l(a){m(n.$$.fragment,a)},m(a,u){y(n,a,u),d=!0},i(a){d||(M(n.$$.fragment,a),d=!0)},o(a){p(n.$$.fragment,a),d=!1},d(a){J(n,a)}}}function ri(f){let n,d="Une fois l’entraînement terminé, nous pouvons pousser la carte de modèle avec les informations d’entraînement vers le <em>Hub</em> (les <em>checkpoints</em> sont sauvegardés pendant l’entraînement lui-même) :",a,u,_;return u=new h({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yigp",highlighted:"trainer.push_to_hub()",wrap:!1}}),{c(){n=U("p"),n.innerHTML=d,a=i(),c(u.$$.fragment)},l(w){n=T(w,"P",{"data-svelte-h":!0}),b(n)!=="svelte-8irqm7"&&(n.innerHTML=d),a=o(w),m(u.$$.fragment,w)},m(w,v){t(w,n,v),t(w,a,v),y(u,w,v),_=!0},i(w){_||(M(u.$$.fragment,w),_=!0)},o(w){p(u.$$.fragment,w),_=!1},d(w){w&&(s(n),s(a)),J(u,w)}}}function Ai(f){let n,d="✏️ <strong>A votre tour !</strong> Exécutez l’entraînement ci-dessus après avoir remplacé le collecteur de données par le collecteur de mots entiers masqués. Obtenez-vous de meilleurs résultats ?";return{c(){n=U("p"),n.innerHTML=d},l(a){n=T(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1b0yjgt"&&(n.innerHTML=d)},m(a,u){t(a,n,u)},p:qe,d(a){a&&s(n)}}}function Mi(f){let n,d="Dans notre cas d’utilisation, nous n’avons pas eu besoin de faire quelque chose de spécial avec la boucle d’entraînement, mais dans certains cas, vous pourriez avoir besoin de mettre en œuvre une logique personnalisée. Pour ces applications, vous pouvez utiliser 🤗 <em>Accelerate</em>. Jetons un coup d’œil !",a,u,_,w,v='Comme nous l’avons vu, avec <code>Trainer</code> le <em>finetuning</em> d’un modèle de langage masqué est très similaire à l’exemple de classification de texte du <a href="/course/fr/chapter3">chapitre 3</a>. En fait, la seule subtilité est l’utilisation d’un assembleur de données spécial, et nous l’avons déjà couvert plus tôt dans cette section !',R,B,X="Cependant, nous avons vu que <code>DataCollatorForLanguageModeling</code> applique aussi un masquage aléatoire à chaque évaluation. Nous verrons donc quelques fluctuations dans nos scores de perplexité à chaque entrainement. Une façon d’éliminer cette source d’aléat est d’appliquer le masquage <em>une fois</em> sur l’ensemble de test, puis d’utiliser l’assembleur de données par défaut dans 🤗 <em>Transformers</em> pour collecter les batchs pendant l’évaluation. Pour voir comment cela fonctionne, implémentons une fonction simple qui applique le masquage sur un batch, similaire à notre première rencontre avec <code>DataCollatorForLanguageModeling</code> :",k,Z,j,g,F="Ensuite, nous allons appliquer cette fonction à notre jeu de test et laisser tomber les colonnes non masquées afin de les remplacer par les colonnes masquées. Vous pouvez utiliser le masquage de mots entiers en remplaçant le <code>data_collator</code> ci-dessus par celui qui est approprié. Dans ce cas vous devez supprimer la première ligne ici :",x,I,z,Y,G="Nous pouvons ensuite configurer les <em>dataloaders</em> comme d’habitude, mais nous utiliserons le <code>default_data_collator</code> de 🤗 <em>Transformers</em> pour le jeu d’évaluation :",W,le,ee,Ie,Le="Nous suivons les étapes standard avec 🤗 <em>Accelerate</em>. La première est de charger une version fraîche du modèle pré-entraîné :",se,Ce,ke,$,Ls="Ensuite, nous devons spécifier l’optimiseur. Nous utiliserons le standard <code>AdamW</code> :",ve,V,De,te,_e="Avec ces objets, nous pouvons maintenant tout préparer pour l’entraînement avec l’objet <code>Accelerator</code> :",Ke,ne,ae,ie,pe="Maintenant que notre modèle, notre optimiseur et nos chargeurs de données sont configurés, nous pouvons spécifier le planificateur du taux d’apprentissage comme suit :",Re,q,Xe,L,Ds="Il ne reste qu’une dernière chose à faire avant de s’entraîner : créer un dépôt de modèles sur le <em>Hub</em> d’Hugging Face ! Nous pouvons utiliser la bibliothèque 🤗 <em>Hub</em> pour générer d’abord le nom complet de notre dépôt :",ze,S,Pe,oe,re,ge,Oe="puis créer et cloner le dépôt en utilisant la classe <code>Repository</code> du 🤗 <em>Hub</em> :",H,N,ue,D,Ks="Une fois cela fait, il ne reste plus qu’à rédiger la boucle complète d’entraînement et d’évaluation :",We,K,$e,P,el,Me,Ge="Cool, nous avons été en mesure d’évaluer la perplexité à chaque époque et de garantir la reproductibilité des entraînements multiples !",Ve;return u=new He({props:{title:"<i> Finetuning </i> de DistilBERT avec 🤗 <i> Accelerate </i>",local:"i-finetuning-i-de-distilbert-avec--i-accelerate-i",headingTag:"h2"}}),Z=new h({props:{code:"ZGVmJTIwaW5zZXJ0X3JhbmRvbV9tYXNrKGJhdGNoKSUzQSUwQSUyMCUyMCUyMCUyMGZlYXR1cmVzJTIwJTNEJTIwJTVCZGljdCh6aXAoYmF0Y2glMkMlMjB0KSklMjBmb3IlMjB0JTIwaW4lMjB6aXAoKmJhdGNoLnZhbHVlcygpKSU1RCUwQSUyMCUyMCUyMCUyMG1hc2tlZF9pbnB1dHMlMjAlM0QlMjBkYXRhX2NvbGxhdG9yKGZlYXR1cmVzKSUwQSUyMCUyMCUyMCUyMCUyMyUyMENyJUMzJUE5ZXIlMjB1bmUlMjBub3V2ZWxsZSUyMGNvbG9ubmUlMjAlMjJtYXNxdSVDMyVBOWUlMjIlMjBwb3VyJTIwY2hhcXVlJTIwY29sb25uZSUyMGR1JTIwamV1JTIwZGUlMjBkb25uJUMzJUE5ZXMlMEElMjAlMjAlMjAlMjByZXR1cm4lMjAlN0IlMjJtYXNrZWRfJTIyJTIwJTJCJTIwayUzQSUyMHYubnVtcHkoKSUyMGZvciUyMGslMkMlMjB2JTIwaW4lMjBtYXNrZWRfaW5wdXRzLml0ZW1zKCklN0Q=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">insert_random_mask</span>(<span class="hljs-params">batch</span>):
    features = [<span class="hljs-built_in">dict</span>(<span class="hljs-built_in">zip</span>(batch, t)) <span class="hljs-keyword">for</span> t <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(*batch.values())]
    masked_inputs = data_collator(features)
    <span class="hljs-comment"># Créer une nouvelle colonne &quot;masquée&quot; pour chaque colonne du jeu de données</span>
    <span class="hljs-keyword">return</span> {<span class="hljs-string">&quot;masked_&quot;</span> + k: v.numpy() <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> masked_inputs.items()}`,wrap:!1}}),I=new h({props:{code:"ZG93bnNhbXBsZWRfZGF0YXNldCUyMCUzRCUyMGRvd25zYW1wbGVkX2RhdGFzZXQucmVtb3ZlX2NvbHVtbnMoJTVCJTIyd29yZF9pZHMlMjIlNUQpJTBBZXZhbF9kYXRhc2V0JTIwJTNEJTIwZG93bnNhbXBsZWRfZGF0YXNldCU1QiUyMnRlc3QlMjIlNUQubWFwKCUwQSUyMCUyMCUyMCUyMGluc2VydF9yYW5kb21fbWFzayUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoZWQlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwcmVtb3ZlX2NvbHVtbnMlM0Rkb3duc2FtcGxlZF9kYXRhc2V0JTVCJTIydGVzdCUyMiU1RC5jb2x1bW5fbmFtZXMlMkMlMEEpJTBBZXZhbF9kYXRhc2V0JTIwJTNEJTIwZXZhbF9kYXRhc2V0LnJlbmFtZV9jb2x1bW5zKCUwQSUyMCUyMCUyMCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMm1hc2tlZF9pbnB1dF9pZHMlMjIlM0ElMjAlMjJpbnB1dF9pZHMlMjIlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJtYXNrZWRfYXR0ZW50aW9uX21hc2slMjIlM0ElMjAlMjJhdHRlbnRpb25fbWFzayUyMiUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMm1hc2tlZF9sYWJlbHMlMjIlM0ElMjAlMjJsYWJlbHMlMjIlMkMlMEElMjAlMjAlMjAlMjAlN0QlMEEp",highlighted:`downsampled_dataset = downsampled_dataset.remove_columns([<span class="hljs-string">&quot;word_ids&quot;</span>])
eval_dataset = downsampled_dataset[<span class="hljs-string">&quot;test&quot;</span>].<span class="hljs-built_in">map</span>(
    insert_random_mask,
    batched=<span class="hljs-literal">True</span>,
    remove_columns=downsampled_dataset[<span class="hljs-string">&quot;test&quot;</span>].column_names,
)
eval_dataset = eval_dataset.rename_columns(
    {
        <span class="hljs-string">&quot;masked_input_ids&quot;</span>: <span class="hljs-string">&quot;input_ids&quot;</span>,
        <span class="hljs-string">&quot;masked_attention_mask&quot;</span>: <span class="hljs-string">&quot;attention_mask&quot;</span>,
        <span class="hljs-string">&quot;masked_labels&quot;</span>: <span class="hljs-string">&quot;labels&quot;</span>,
    }
)`,wrap:!1}}),le=new h({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGRlZmF1bHRfZGF0YV9jb2xsYXRvciUwQSUwQWJhdGNoX3NpemUlMjAlM0QlMjA2NCUwQXRyYWluX2RhdGFsb2FkZXIlMjAlM0QlMjBEYXRhTG9hZGVyKCUwQSUyMCUyMCUyMCUyMGRvd25zYW1wbGVkX2RhdGFzZXQlNUIlMjJ0cmFpbiUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMHNodWZmbGUlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRGJhdGNoX3NpemUlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSklMEFldmFsX2RhdGFsb2FkZXIlMjAlM0QlMjBEYXRhTG9hZGVyKCUwQSUyMCUyMCUyMCUyMGV2YWxfZGF0YXNldCUyQyUyMGJhdGNoX3NpemUlM0RiYXRjaF9zaXplJTJDJTIwY29sbGF0ZV9mbiUzRGRlZmF1bHRfZGF0YV9jb2xsYXRvciUwQSk=",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader
<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> default_data_collator

batch_size = <span class="hljs-number">64</span>
train_dataloader = DataLoader(
    downsampled_dataset[<span class="hljs-string">&quot;train&quot;</span>],
    shuffle=<span class="hljs-literal">True</span>,
    batch_size=batch_size,
    collate_fn=data_collator,
)
eval_dataloader = DataLoader(
    eval_dataset, batch_size=batch_size, collate_fn=default_data_collator
)`,wrap:!1}}),Ce=new h({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JNYXNrZWRMTS5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:'model = <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">AutoModelForMaskedLM</span>.</span></span>from<span class="hljs-constructor">_pretrained(<span class="hljs-params">model_checkpoint</span>)</span>',wrap:!1}}),V=new h({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDVlLTUp",highlighted:`<span class="hljs-keyword">from</span> torch.optim <span class="hljs-keyword">import</span> AdamW

optimizer = AdamW(model.parameters(), lr=<span class="hljs-number">5e-5</span>)`,wrap:!1}}),ne=new h({props:{code:"ZnJvbSUyMGFjY2VsZXJhdGUlMjBpbXBvcnQlMjBBY2NlbGVyYXRvciUwQSUwQWFjY2VsZXJhdG9yJTIwJTNEJTIwQWNjZWxlcmF0b3IoKSUwQW1vZGVsJTJDJTIwb3B0aW1pemVyJTJDJTIwdHJhaW5fZGF0YWxvYWRlciUyQyUyMGV2YWxfZGF0YWxvYWRlciUyMCUzRCUyMGFjY2VsZXJhdG9yLnByZXBhcmUoJTBBJTIwJTIwJTIwJTIwbW9kZWwlMkMlMjBvcHRpbWl6ZXIlMkMlMjB0cmFpbl9kYXRhbG9hZGVyJTJDJTIwZXZhbF9kYXRhbG9hZGVyJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> accelerate <span class="hljs-keyword">import</span> Accelerator

accelerator = Accelerator()
model, optimizer, train_dataloader, eval_dataloader = accelerator.prepare(
    model, optimizer, train_dataloader, eval_dataloader
)`,wrap:!1}}),q=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGdldF9zY2hlZHVsZXIlMEElMEFudW1fdHJhaW5fZXBvY2hzJTIwJTNEJTIwMyUwQW51bV91cGRhdGVfc3RlcHNfcGVyX2Vwb2NoJTIwJTNEJTIwbGVuKHRyYWluX2RhdGFsb2FkZXIpJTBBbnVtX3RyYWluaW5nX3N0ZXBzJTIwJTNEJTIwbnVtX3RyYWluX2Vwb2NocyUyMColMjBudW1fdXBkYXRlX3N0ZXBzX3Blcl9lcG9jaCUwQSUwQWxyX3NjaGVkdWxlciUyMCUzRCUyMGdldF9zY2hlZHVsZXIoJTBBJTIwJTIwJTIwJTIwJTIybGluZWFyJTIyJTJDJTBBJTIwJTIwJTIwJTIwb3B0aW1pemVyJTNEb3B0aW1pemVyJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3dhcm11cF9zdGVwcyUzRDAlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5pbmdfc3RlcHMlM0RudW1fdHJhaW5pbmdfc3RlcHMlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> get_scheduler

num_train_epochs = <span class="hljs-number">3</span>
num_update_steps_per_epoch = <span class="hljs-built_in">len</span>(train_dataloader)
num_training_steps = num_train_epochs * num_update_steps_per_epoch

lr_scheduler = get_scheduler(
    <span class="hljs-string">&quot;linear&quot;</span>,
    optimizer=optimizer,
    num_warmup_steps=<span class="hljs-number">0</span>,
    num_training_steps=num_training_steps,
)`,wrap:!1}}),S=new h({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMGdldF9mdWxsX3JlcG9fbmFtZSUwQSUwQW1vZGVsX25hbWUlMjAlM0QlMjAlMjJkaXN0aWxiZXJ0LWJhc2UtdW5jYXNlZC1maW5ldHVuZWQtaW1kYi1hY2NlbGVyYXRlJTIyJTBBcmVwb19uYW1lJTIwJTNEJTIwZ2V0X2Z1bGxfcmVwb19uYW1lKG1vZGVsX25hbWUpJTBBcmVwb19uYW1l",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> get_full_repo_name

model_name = <span class="hljs-string">&quot;distilbert-base-uncased-finetuned-imdb-accelerate&quot;</span>
repo_name = get_full_repo_name(model_name)
repo_name`,wrap:!1}}),oe=new h({props:{code:"J2xld3R1biUyRmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkLWZpbmV0dW5lZC1pbWRiLWFjY2VsZXJhdGUn",highlighted:'<span class="hljs-string">&#x27;lewtun/distilbert-base-uncased-finetuned-imdb-accelerate&#x27;</span>',wrap:!1}}),N=new h({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMFJlcG9zaXRvcnklMEElMEFvdXRwdXRfZGlyJTIwJTNEJTIwbW9kZWxfbmFtZSUwQXJlcG8lMjAlM0QlMjBSZXBvc2l0b3J5KG91dHB1dF9kaXIlMkMlMjBjbG9uZV9mcm9tJTNEcmVwb19uYW1lKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> Repository

output_dir = model_name
repo = Repository(output_dir, clone_from=repo_name)`,wrap:!1}}),K=new h({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEFpbXBvcnQlMjB0b3JjaCUwQWltcG9ydCUyMG1hdGglMEElMEFwcm9ncmVzc19iYXIlMjAlM0QlMjB0cWRtKHJhbmdlKG51bV90cmFpbmluZ19zdGVwcykpJTBBJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV90cmFpbl9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwRW50cmElQzMlQUVuZW1lbnQlMEElMjAlMjAlMjAlMjBtb2RlbC50cmFpbigpJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IuYmFja3dhcmQobG9zcyklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbHJfc2NoZWR1bGVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci56ZXJvX2dyYWQoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByb2dyZXNzX2Jhci51cGRhdGUoMSklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBFdmFsdWF0aW9uJTBBJTIwJTIwJTIwJTIwbW9kZWwuZXZhbCgpJTBBJTIwJTIwJTIwJTIwbG9zc2VzJTIwJTNEJTIwJTVCJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwc3RlcCUyQyUyMGJhdGNoJTIwaW4lMjBlbnVtZXJhdGUoZXZhbF9kYXRhbG9hZGVyKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdpdGglMjB0b3JjaC5ub19ncmFkKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zc2VzLmFwcGVuZChhY2NlbGVyYXRvci5nYXRoZXIobG9zcy5yZXBlYXQoYmF0Y2hfc2l6ZSkpKSUwQSUwQSUyMCUyMCUyMCUyMGxvc3NlcyUyMCUzRCUyMHRvcmNoLmNhdChsb3NzZXMpJTBBJTIwJTIwJTIwJTIwbG9zc2VzJTIwJTNEJTIwbG9zc2VzJTVCJTNBJTIwbGVuKGV2YWxfZGF0YXNldCklNUQlMEElMjAlMjAlMjAlMjB0cnklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwZXJwbGV4aXR5JTIwJTNEJTIwbWF0aC5leHAodG9yY2gubWVhbihsb3NzZXMpKSUwQSUyMCUyMCUyMCUyMGV4Y2VwdCUyME92ZXJmbG93RXJyb3IlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwZXJwbGV4aXR5JTIwJTNEJTIwZmxvYXQoJTIyaW5mJTIyKSUwQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlM0UlM0UlM0UlMjBFcG9jaCUyMCU3QmVwb2NoJTdEJTNBJTIwUGVycGxleGl0eSUzQSUyMCU3QnBlcnBsZXhpdHklN0QlMjIpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwU2F1dmVnYXJkZXIlMjBldCUyMHQlQzMlQTlsJUMzJUE5Y2hhcmdlciUwQSUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLndhaXRfZm9yX2V2ZXJ5b25lKCklMEElMjAlMjAlMjAlMjB1bndyYXBwZWRfbW9kZWwlMjAlM0QlMjBhY2NlbGVyYXRvci51bndyYXBfbW9kZWwobW9kZWwpJTBBJTIwJTIwJTIwJTIwdW53cmFwcGVkX21vZGVsLnNhdmVfcHJldHJhaW5lZChvdXRwdXRfZGlyJTJDJTIwc2F2ZV9mdW5jdGlvbiUzRGFjY2VsZXJhdG9yLnNhdmUpJTBBJTIwJTIwJTIwJTIwaWYlMjBhY2NlbGVyYXRvci5pc19tYWluX3Byb2Nlc3MlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0b2tlbml6ZXIuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVwby5wdXNoX3RvX2h1YiglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb21taXRfbWVzc2FnZSUzRGYlMjJUcmFpbmluZyUyMGluJTIwcHJvZ3Jlc3MlMjBlcG9jaCUyMCU3QmVwb2NoJTdEJTIyJTJDJTIwYmxvY2tpbmclM0RGYWxzZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCk=",highlighted:`<span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm
<span class="hljs-keyword">import</span> torch
<span class="hljs-keyword">import</span> math

progress_bar = tqdm(<span class="hljs-built_in">range</span>(num_training_steps))

<span class="hljs-keyword">for</span> epoch <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(num_train_epochs):
    <span class="hljs-comment"># Entraînement</span>
    model.train()
    <span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> train_dataloader:
        outputs = model(**batch)
        loss = outputs.loss
        accelerator.backward(loss)

        optimizer.step()
        lr_scheduler.step()
        optimizer.zero_grad()
        progress_bar.update(<span class="hljs-number">1</span>)

    <span class="hljs-comment"># Evaluation</span>
    model.<span class="hljs-built_in">eval</span>()
    losses = []
    <span class="hljs-keyword">for</span> step, batch <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(eval_dataloader):
        <span class="hljs-keyword">with</span> torch.no_grad():
            outputs = model(**batch)

        loss = outputs.loss
        losses.append(accelerator.gather(loss.repeat(batch_size)))

    losses = torch.cat(losses)
    losses = losses[: <span class="hljs-built_in">len</span>(eval_dataset)]
    <span class="hljs-keyword">try</span>:
        perplexity = math.exp(torch.mean(losses))
    <span class="hljs-keyword">except</span> OverflowError:
        perplexity = <span class="hljs-built_in">float</span>(<span class="hljs-string">&quot;inf&quot;</span>)

    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&gt;&gt;&gt; Epoch <span class="hljs-subst">{epoch}</span>: Perplexity: <span class="hljs-subst">{perplexity}</span>&quot;</span>)

    <span class="hljs-comment"># Sauvegarder et télécharger</span>
    accelerator.wait_for_everyone()
    unwrapped_model = accelerator.unwrap_model(model)
    unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save)
    <span class="hljs-keyword">if</span> accelerator.is_main_process:
        tokenizer.save_pretrained(output_dir)
        repo.push_to_hub(
            commit_message=<span class="hljs-string">f&quot;Training in progress epoch <span class="hljs-subst">{epoch}</span>&quot;</span>, blocking=<span class="hljs-literal">False</span>
        )`,wrap:!1}}),P=new h({props:{code:"RXBvY2glMjAwJTNBJTIwUGVycGxleGl0eSUzQSUyMDExLjM5NzU0NTMwNzkwMDQ3MiUwQUVwb2NoJTIwMSUzQSUyMFBlcnBsZXhpdHklM0ElMjAxMC45MDQ5MDkzMzA5ODMwOTIlMEFFcG9jaCUyMDIlM0ElMjBQZXJwbGV4aXR5JTNBJTIwMTAuNzI5NTAzNTA1MzQwNDA5",highlighted:`<span class="hljs-meta">&gt;&gt;&gt; </span>Epoch <span class="hljs-number">0</span>: Perplexity: <span class="hljs-number">11.397545307900472</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>Epoch <span class="hljs-number">1</span>: Perplexity: <span class="hljs-number">10.904909330983092</span>
<span class="hljs-meta">&gt;&gt;&gt; </span>Epoch <span class="hljs-number">2</span>: Perplexity: <span class="hljs-number">10.729503505340409</span>`,wrap:!1}}),{c(){n=U("p"),n.innerHTML=d,a=i(),c(u.$$.fragment),_=i(),w=U("p"),w.innerHTML=v,R=i(),B=U("p"),B.innerHTML=X,k=i(),c(Z.$$.fragment),j=i(),g=U("p"),g.innerHTML=F,x=i(),c(I.$$.fragment),z=i(),Y=U("p"),Y.innerHTML=G,W=i(),c(le.$$.fragment),ee=i(),Ie=U("p"),Ie.innerHTML=Le,se=i(),c(Ce.$$.fragment),ke=i(),$=U("p"),$.innerHTML=Ls,ve=i(),c(V.$$.fragment),De=i(),te=U("p"),te.innerHTML=_e,Ke=i(),c(ne.$$.fragment),ae=i(),ie=U("p"),ie.textContent=pe,Re=i(),c(q.$$.fragment),Xe=i(),L=U("p"),L.innerHTML=Ds,ze=i(),c(S.$$.fragment),Pe=i(),c(oe.$$.fragment),re=i(),ge=U("p"),ge.innerHTML=Oe,H=i(),c(N.$$.fragment),ue=i(),D=U("p"),D.textContent=Ks,We=i(),c(K.$$.fragment),$e=i(),c(P.$$.fragment),el=i(),Me=U("p"),Me.textContent=Ge},l(r){n=T(r,"P",{"data-svelte-h":!0}),b(n)!=="svelte-1cfpe3x"&&(n.innerHTML=d),a=o(r),m(u.$$.fragment,r),_=o(r),w=T(r,"P",{"data-svelte-h":!0}),b(w)!=="svelte-txe3yg"&&(w.innerHTML=v),R=o(r),B=T(r,"P",{"data-svelte-h":!0}),b(B)!=="svelte-34vcmj"&&(B.innerHTML=X),k=o(r),m(Z.$$.fragment,r),j=o(r),g=T(r,"P",{"data-svelte-h":!0}),b(g)!=="svelte-d9s5wy"&&(g.innerHTML=F),x=o(r),m(I.$$.fragment,r),z=o(r),Y=T(r,"P",{"data-svelte-h":!0}),b(Y)!=="svelte-184m6q7"&&(Y.innerHTML=G),W=o(r),m(le.$$.fragment,r),ee=o(r),Ie=T(r,"P",{"data-svelte-h":!0}),b(Ie)!=="svelte-12gdbud"&&(Ie.innerHTML=Le),se=o(r),m(Ce.$$.fragment,r),ke=o(r),$=T(r,"P",{"data-svelte-h":!0}),b($)!=="svelte-19aw5i8"&&($.innerHTML=Ls),ve=o(r),m(V.$$.fragment,r),De=o(r),te=T(r,"P",{"data-svelte-h":!0}),b(te)!=="svelte-lhskr6"&&(te.innerHTML=_e),Ke=o(r),m(ne.$$.fragment,r),ae=o(r),ie=T(r,"P",{"data-svelte-h":!0}),b(ie)!=="svelte-3psbxs"&&(ie.textContent=pe),Re=o(r),m(q.$$.fragment,r),Xe=o(r),L=T(r,"P",{"data-svelte-h":!0}),b(L)!=="svelte-zf5nyr"&&(L.innerHTML=Ds),ze=o(r),m(S.$$.fragment,r),Pe=o(r),m(oe.$$.fragment,r),re=o(r),ge=T(r,"P",{"data-svelte-h":!0}),b(ge)!=="svelte-152oyf1"&&(ge.innerHTML=Oe),H=o(r),m(N.$$.fragment,r),ue=o(r),D=T(r,"P",{"data-svelte-h":!0}),b(D)!=="svelte-10fdypx"&&(D.textContent=Ks),We=o(r),m(K.$$.fragment,r),$e=o(r),m(P.$$.fragment,r),el=o(r),Me=T(r,"P",{"data-svelte-h":!0}),b(Me)!=="svelte-720342"&&(Me.textContent=Ge)},m(r,C){t(r,n,C),t(r,a,C),y(u,r,C),t(r,_,C),t(r,w,C),t(r,R,C),t(r,B,C),t(r,k,C),y(Z,r,C),t(r,j,C),t(r,g,C),t(r,x,C),y(I,r,C),t(r,z,C),t(r,Y,C),t(r,W,C),y(le,r,C),t(r,ee,C),t(r,Ie,C),t(r,se,C),y(Ce,r,C),t(r,ke,C),t(r,$,C),t(r,ve,C),y(V,r,C),t(r,De,C),t(r,te,C),t(r,Ke,C),y(ne,r,C),t(r,ae,C),t(r,ie,C),t(r,Re,C),y(q,r,C),t(r,Xe,C),t(r,L,C),t(r,ze,C),y(S,r,C),t(r,Pe,C),y(oe,r,C),t(r,re,C),t(r,ge,C),t(r,H,C),y(N,r,C),t(r,ue,C),t(r,D,C),t(r,We,C),y(K,r,C),t(r,$e,C),y(P,r,C),t(r,el,C),t(r,Me,C),Ve=!0},i(r){Ve||(M(u.$$.fragment,r),M(Z.$$.fragment,r),M(I.$$.fragment,r),M(le.$$.fragment,r),M(Ce.$$.fragment,r),M(V.$$.fragment,r),M(ne.$$.fragment,r),M(q.$$.fragment,r),M(S.$$.fragment,r),M(oe.$$.fragment,r),M(N.$$.fragment,r),M(K.$$.fragment,r),M(P.$$.fragment,r),Ve=!0)},o(r){p(u.$$.fragment,r),p(Z.$$.fragment,r),p(I.$$.fragment,r),p(le.$$.fragment,r),p(Ce.$$.fragment,r),p(V.$$.fragment,r),p(ne.$$.fragment,r),p(q.$$.fragment,r),p(S.$$.fragment,r),p(oe.$$.fragment,r),p(N.$$.fragment,r),p(K.$$.fragment,r),p(P.$$.fragment,r),Ve=!1},d(r){r&&(s(n),s(a),s(_),s(w),s(R),s(B),s(k),s(j),s(g),s(x),s(z),s(Y),s(W),s(ee),s(Ie),s(se),s(ke),s($),s(ve),s(De),s(te),s(Ke),s(ae),s(ie),s(Re),s(Xe),s(L),s(ze),s(Pe),s(re),s(ge),s(H),s(ue),s(D),s(We),s($e),s(el),s(Me)),J(u,r),J(Z,r),J(I,r),J(le,r),J(Ce,r),J(V,r),J(ne,r),J(q,r),J(S,r),J(oe,r),J(N,r),J(K,r),J(P,r)}}}function Ei(f){let n,d='✏️ <strong>Essayez !</strong> Pour quantifier les avantages de l’adaptation au domaine, <i>finetunez</i> un classifieur sur le jeu de données IMDb pour à la fois, le <i>checkpoint</i> de DistilBERT pré-entraîné et e <i>checkpoint</i> de DistilBERT <i>finetuné</i>. Si vous avez besoin d’un rafraîchissement sur la classification de texte, consultez le <a href="/course/fr/chapter3">chapitre 3</a>.';return{c(){n=U("p"),n.innerHTML=d},l(a){n=T(a,"P",{"data-svelte-h":!0}),b(n)!=="svelte-11rl9i7"&&(n.innerHTML=d)},m(a,u){t(a,n,u)},p:qe,d(a){a&&s(n)}}}function Yi(f){let n,d,a,u,_,w,v,R,B,X,k,Z,j,g,F="Pour de nombreuses applications de NLP impliquant des <em>transformers</em>, vous pouvez simplement prendre un modèle pré-entraîné du <em>Hub</em> et le <em>finetuner</em> directement sur vos données pour la tâche à accomplir. Pour autant que le corpus utilisé pour le pré-entraînement ne soit pas trop différent du corpus utilisé pour le <em>finetuning</em>. L’apprentissage par transfert produira généralement de bons résultats.",x,I,z="Cependant, il existe quelques cas où vous voudrez d’abord <em>finetuner</em> les modèles de langue sur vos données, avant d’entraîner une tête spécifique à la tâche. Par exemple, si votre jeu de données contient des contrats légaux ou des articles scientifiques, un <em>transformer</em> classique comme BERT traitera généralement les mots spécifiques au domaine dans votre corpus comme des <em>tokens</em> rares et les performances résultantes peuvent être moins que satisfaisantes. En <em>finetunant</em> le modèle de langage sur les données du domaine, vous pouvez améliorer les performances de nombreuses tâches en aval, ce qui signifie que vous ne devez généralement effectuer cette étape qu’une seule fois !",Y,G,W='Ce processus de <em>finetuning</em> d’un modèle de langage pré-entraîné sur des données <em>dans le domaine</em> est généralement appelé <em>adaptation au domaine</em>. Il a été popularisé en 2018 par <a href="https://arxiv.org/abs/1801.06146" rel="nofollow">ULMFiT</a> qui a été l’une des premières architectures neuronales (basées sur des LSTMs) à faire en sorte que l’apprentissage par transfert fonctionne réellement pour le NLP. Un exemple d’adaptation de domaine avec ULMFiT est présenté dans l’image ci-dessous. Dans cette section, nous ferons quelque chose de similaire mais avec un <em>transformer</em> au lieu d’une LSTM !',le,ee,Ie='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/ulmfit.svg" alt="ULMFiT."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/ulmfit-dark.svg" alt="ULMFiT."/>',Le,se,Ce='À la fin de cette section, vous aurez un <a href="https://huggingface.co/huggingface-course/distilbert-base-uncased-finetuned-imdb?text=This+is+a+great+%5BMASK%5D." rel="nofollow">modèle de langage masqué</a> sur le <em>Hub</em> qui peut autocompléter des phrases comme indiqué ci-dessous :',ke,$,Ls,ve,V,De,te,_e,Ke="Allons-y !",ne,ae,ie,pe,Re,q,Xe,L,Ds='Pour commencer, nous allons choisir un modèle pré-entraîné approprié pour la modélisation du langage masqué. Comme le montre la capture d’écran suivante, vous pouvez trouver une liste de candidats en appliquant le filtre « <em>Fill-Mask</em> » sur le <a href="https://huggingface.co/models?pipeline_tag=fill-mask&amp;sort=downloads" rel="nofollow"><em>Hub</em></a> :',ze,S,Pe='<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/mlm-models.png" alt="Hub models." width="80%"/>',oe,re,ge='Bien que les modèles de la famille BERT et RoBERTa soient les plus téléchargés, nous utiliserons un modèle appelé <a href="https://huggingface.co/distilbert-base-uncased" rel="nofollow">DistilBERT</a> qui peut être entraîné beaucoup plus rapidement avec peu ou pas de perte de performance en aval. Ce modèle a été entraîné à l’aide d’une technique spéciale appelée <a href="https://en.wikipedia.org/wiki/Knowledge_distillation" rel="nofollow"><em>distillation de connaissances</em></a>, où un grand modèle <em>enseignant</em> comme BERT est utilisé pour guider l’entraînement d’un modèle <em>étudiant</em> qui a beaucoup moins de paramètres. Une explication des détails de la distillation de connaissances nous mènerait trop loin dans cette section mais si vous êtes intéressé, vous pouvez lire tout cela dans le livre <a href="https://www.oreilly.com/library/view/natural-language-processing/9781098136789/" rel="nofollow"><em>Natural Language Processing with Transformers</em></a>.',Oe,H,N,ue,D,Ks="Avec environ 67 millions de paramètres, DistilBERT est environ deux fois plus petit que le modèle de base de BERT, ce qui se traduit approximativement par une accélération de l’entraînement d’un facteur deux. Voyons maintenant quels types de <em>tokens</em> ce modèle prédit comme étant les compléments les plus probables d’un petit échantillon de texte :",We,K,$e,P,el='En tant qu’êtres humains, nous pouvons imaginer de nombreuses possibilités pour le <em>token</em> <code>[MASK]</code>, telles que « jour », « promenade » ou « peinture ». Pour les modèles pré-entraînés, les prédictions dépendent du corpus sur lequel le modèle a été entraîné puisqu’il apprend à détecter les modèles statistiques présents dans les données. Comme BERT, DistilBERT a été pré-entraîné sur les jeux de données <a href="https://huggingface.co/datasets/wikipedia" rel="nofollow"><em>English Wikipedia</em></a> et <a href="https://huggingface.co/datasets/bookcorpus" rel="nofollow"><em>BookCorpus</em></a>, nous nous attendons donc à ce que les prédictions pour <code>[MASK]</code> reflètent ces domaines. Pour prédire le masque, nous avons besoin du <em>tokenizer</em> de DistilBERT pour produire les entrées du modèle, alors téléchargeons-le également depuis le <em>Hub</em> :',Me,Ge,Ve,r,C="Avec un <em>tokenizer</em> et un modèle, nous pouvons maintenant passer notre exemple de texte au modèle, extraire les logits, et afficher les 5 meilleurs candidats :",Os,de,ce,Ns,ll,et,sl,Dn="Nous pouvons voir dans les sorties que les prédictions du modèle se réfèrent à des termes de tous les jours, ce qui n’est peut-être pas surprenant étant donné le fondement de Wikipédia. Voyons comment nous pouvons changer ce domaine pour quelque chose d’un peu plus spécialisé : des critiques de films !",lt,tl,st,nl,Kn='Pour illustrer l’adaptation au domaine, nous utiliserons le célèbre <a href="https://huggingface.co/datasets/imdb" rel="nofollow"><em>Large Movie Review Dataset</em></a> (ou IMDb en abrégé), qui est un corpus de critiques de films souvent utilisé pour évaluer les modèles d’analyse de sentiments. En <em>finetunant</em> DistilBERT sur ce corpus, nous espérons que le modèle de langage adaptera son vocabulaire des données factuelles de Wikipédia sur lesquelles il a été pré-entraîné aux éléments plus subjectifs des critiques de films. Nous pouvons obtenir les données du <em>Hub</em> avec la fonction <code>load_dataset()</code> de 🤗 <em>Datasets</em> :',tt,al,nt,il,at,ol,Pn="Nous pouvons voir que les parties <code>train</code> et <code>test</code> sont chacune composées de 25 000 critiques, alors qu’il y a une partie non étiquetée appelée <code>unsupervised</code> qui contient 50 000 critiques. Jetons un coup d’œil à quelques échantillons pour avoir une idée du type de texte auquel nous avons affaire. Comme nous l’avons fait dans les chapitres précédents du cours, nous allons enchaîner les fonctions <code>Dataset.shuffle()</code> et <code>Dataset.select()</code> pour créer un échantillon aléatoire :",it,rl,ot,Ml,rt,pl,On="Oui, ce sont bien des critiques de films, et si vous êtes assez âgés, vous pouvez même comprendre le commentaire dans la dernière critique sur le fait de posséder une version VHS 😜 ! Bien que nous n’ayons pas besoin des étiquettes pour la modélisation du langage, nous pouvons déjà voir qu’un <code>0</code> dénote une critique négative, tandis qu’un <code>1</code> correspond à une critique positive.",Mt,xe,pt,ul,ea='Maintenant que nous avons jeté un coup d’œil rapide aux données, plongeons dans leur préparation pour la modélisation du langage masqué. Comme nous allons le voir, il y a quelques étapes supplémentaires à suivre par rapport aux tâches de classification de séquences que nous avons vues au <a href="/course/fr/chapter3">chapitre 3</a>. Allons-y !',ut,dl,dt,cl,ct,ml,la="Pour la modélisation autorégressive et la modélisation du langage masqué, une étape commune de prétraitement consiste à concaténer tous les exemples, puis à diviser le corpus entier en morceaux de taille égale. C’est très différent de notre approche habituelle, où nous nous contentons de <em>tokenizer</em> les exemples individuels. Pourquoi tout concaténer ? La raison est que les exemples individuels peuvent être tronqués s’ils sont trop longs, ce qui entraînerait la perte d’informations qui pourraient être utiles pour la tâche de modélisation du langage !",mt,yl,sa='Donc pour commencer, nous allons d’abord tokeniser notre corpus comme d’habitude, mais <em>sans</em> mettre l’option <code>truncation=True</code> dans notre <em>tokenizer</em>. Nous allons aussi récupérer les identifiants des mots s’ils sont disponibles (ce qui sera le cas si nous utilisons un <em>tokenizer</em> rapide, comme décrit dans le <a href="/course/fr/chapter6/3">chapitre 6</a>), car nous en aurons besoin plus tard pour faire le masquage de mots entiers. Nous allons envelopper cela dans une simple fonction, et pendant que nous y sommes, nous allons supprimer les colonnes <code>text</code> et <code>label</code> puisque nous n’en avons plus besoin :',yt,Jl,Jt,Ul,Ut,Tl,ta="Comme DistilBERT est un modèle de type BERT, nous pouvons voir que les textes encodés sont constitués des <code>input_ids</code> et des <code>attention_mask</code> que nous avons vus dans d’autres chapitres, ainsi que des <code>word_ids</code> que nous avons ajoutés.",Tt,wl,na="Maintenant que nos critiques de films ont été tokenisées, l’étape suivante consiste à les regrouper et à diviser le résultat en chunks. Mais quelle taille doivent avoir ces <em>chunks</em> ? Cela sera finalement déterminé par la quantité de mémoire GPU dont vous disposez, mais un bon point de départ est de voir quelle est la taille maximale du contexte du modèle. Cela peut être déduit en inspectant l’attribut <code>model_max_length</code> du <em>tokenizer</em> :",wt,bl,bt,jl,jt,hl,aa="Cette valeur est dérivée du fichier <em>tokenizer_config.json</em> associé à un <em>checkpoint</em>. Dans ce cas, nous pouvons voir que la taille du contexte est de 512 <em>tokens</em>, tout comme avec BERT.",ht,Ne,ft,fl,ia="Ainsi, pour réaliser nos expériences sur des GPUs comme ceux disponibles sur Google Colab, nous choisirons quelque chose d’un peu plus petit qui peut tenir en mémoire :",It,Il,Ct,Qe,_t,Cl,oa="Maintenant vient la partie amusante. Pour montrer comment la concaténation fonctionne, prenons quelques commentaires de notre ensemble d’entraînement et affichons le nombre de <em>tokens</em> par commentaire :",gt,_l,Gt,gl,Bt,Gl,ra="Nous pouvons ensuite concaténer tous ces exemples avec une simple compréhension du dictionnaire, comme suit :",Zt,Bl,kt,Zl,vt,kl,Ma="Super, la longueur totale est correcte. Donc maintenant, nous allons diviser les exemples concaténés en morceaux de la taille donnée par <code>block_size</code>. Pour ce faire, nous itérons sur les caractéristiques de <code>concatenated_examples</code> et utilisons une compréhension de liste pour créer des <em>chunks</em> de chaque caractéristique. Le résultat est un dictionnaire de <em>chunks</em> pour chaque caractéristique :",Rt,vl,Xt,Rl,zt,Xl,pa="Comme vous pouvez le voir dans cet exemple, le dernier <em>chunk</em> sera généralement plus petit que la taille maximale des morceaux. Il y a deux stratégies principales pour gérer cela :",Wt,zl,ua="<li>Abandonner le dernier morceau s’il est plus petit que <code>chunk_size</code>.</li> <li>Rembourrer le dernier morceau jusqu’à ce que sa longueur soit égale à <code>chunk_size</code>.</li>",$t,Wl,da="Nous adopterons la première approche ici, donc nous allons envelopper toute la logique ci-dessus dans une seule fonction que nous pouvons appliquer à nos jeux de données tokenisés :",Vt,$l,xt,Vl,ca="Notez que dans la dernière étape de <code>group_texts()</code> nous créons une nouvelle colonne <code>labels</code> qui est une copie de la colonne <code>input_ids</code>. Comme nous le verrons bientôt, c’est parce que dans la modélisation du langage masqué, l’objectif est de prédire des <em>tokens</em> masqués aléatoirement dans le batch d’entrée, et en créant une colonne <code>labels</code>, nous fournissons la vérité de base pour notre modèle de langage à apprendre.",Nt,xl,ma="Appliquons maintenant <code>group_texts()</code> à nos jeux de données tokenisés en utilisant notre fidèle fonction <code>Dataset.map()</code> :",Qt,Nl,At,Ql,Et,Al,ya="Vous pouvez voir que le regroupement puis le découpage des textes a produit beaucoup plus d’exemples que nos 25 000 exemples initiaux pour les divisions <code>train</code> et <code>test</code>. C’est parce que nous avons maintenant des exemples impliquant des <em>tokens</em> contigus qui s’étendent sur plusieurs exemples du corpus original. Vous pouvez le voir explicitement en cherchant les <em>tokens</em> spéciaux <code>[SEP]</code> et <code>[CLS]</code> dans l’un des <em>chunks</em> :",Yt,El,Ft,Yl,St,Fl,Ja="Dans cet exemple, vous pouvez voir deux critiques de films qui se chevauchent, l’une sur un film de lycée et l’autre sur les sans-abri. Voyons également à quoi ressemblent les étiquettes pour la modélisation du langage masqué :",Ht,Sl,qt,Hl,Lt,ql,Ua="Comme prévu par notre fonction <code>group_texts()</code> ci-dessus, cela semble identique aux <code>input_ids</code> décodés. Mais alors comment notre modèle peut-il apprendre quoi que ce soit ? Il nous manque une étape clé : insérer des <em>tokens</em> à des positions aléatoires dans les entrées ! Voyons comment nous pouvons le faire à la volée pendant le <em>finetuning</em> en utilisant un assembleur de données spécial.",Dt,Ll,Kt,Dl,Ta='Le <em>finetuning</em> d’un modèle de langage masqué est presque identique au <em>finetuning</em> d’un modèle de classification de séquences, comme nous l’avons fait dans le <a href="/course/fr/chapter3">chapitre 3</a>. La seule différence est que nous avons besoin d’un collecteur de données spécial qui peut masquer de manière aléatoire certains des <em>tokens</em> dans chaque batch de textes. Heureusement, 🤗 <em>Transformers</em> est livré préparé avec un <code>DataCollatorForLanguageModeling</code> dédié à cette tâche. Nous devons juste lui passer le <em>tokenizer</em> et un argument <code>mlm_probability</code> qui spécifie quelle fraction des <em>tokens</em> à masquer. Nous choisirons 15%, qui est la quantité utilisée pour BERT et un choix commun dans la littérature :',Pt,Kl,Ot,Pl,wa="Pour voir comment le masquage aléatoire fonctionne, nous allons donner quelques exemples à l’assembleur de données. Puisqu’il s’attend à une liste de <code>dict</code> où chaque <code>dict</code> représente un seul morceau de texte contigu, nous itérons d’abord sur le jeu de données avant de donner le batch à l’assembleur. Nous supprimons la clé <code>&quot;word_ids&quot;</code> pour cet assembleur de données car il ne l’attend pas :",en,Ol,ln,es,sn,ls,ba="Super, ça a marché ! Nous pouvons voir que le <em>token</em> <code>[MASK]</code> a été inséré de façon aléatoire à différents endroits dans notre texte. Ce seront les <em>tokens</em> que notre modèle devra prédire pendant l’entraînement. Et la beauté du collecteur de données est qu’il va rendre aléatoire l’insertion du <code>[MASK]</code> à chaque batch !",tn,Ae,nn,Qs,ss,ja="Lors de l’entraînement des modèles pour la modélisation du langage masqué, une technique qui peut être utilisée est de masquer des mots entiers ensemble et pas seulement des <em>tokens</em> individuels. Cette approche est appelée <em>masquage de mots entiers</em>. Si nous voulons utiliser le masquage de mots entiers, nous devons construire nous-mêmes un assembleur de données. Un assembleur de données est simplement une fonction qui prend une liste d’échantillons et les convertit en un batch. Faisons-le ! Nous utiliserons les identifiants des mots calculés plus tôt pour faire une correspondance entre les indices des mots et les <em>tokens</em>, puis nous déciderons aléatoirement quels mots masquer et appliquerons ce masque sur les entrées. Notez que les étiquettes sont toutes <code>-100</code> sauf celles qui correspondent aux mots masqués.",an,me,ye,As,ts,ha="Ensuite, nous pouvons l’essayer sur les mêmes échantillons que précédemment :",on,ns,rn,as,Mn,Ee,pn,is,fa='Maintenant que nous avons deux assembleurs de données, les étapes restantes du <em>finetuning</em> sont standards. L’entraînement peut prendre un certain temps sur Google Colab si vous n’avez pas la chance de tomber sur un mythique GPU P100 😭. Ainsi nous allons d’abord réduire la taille du jeu d’entraînement à quelques milliers d’exemples. Ne vous inquiétez pas, nous obtiendrons quand même un modèle de langage assez décent ! Un moyen rapide de réduire la taille d’un jeu de données dans 🤗 <em>Datasets</em> est la fonction <code>Dataset.train_test_split()</code> que nous avons vue au <a href="/course/fr/chapter5">chapitre 5</a> :',un,os,dn,rs,cn,Ms,Ia="Cela a automatiquement créé de nouvelles divisions <code>train</code> et <code>test</code> avec la taille du jeu d’entraînement fixée à 10.000 exemples et la validation fixée à 10% de cela. N’hésitez pas à augmenter la taille si vous avez un GPU puissant ! La prochaine chose que nous devons faire est de nous connecter au <em>Hub</em>. Si vous exécutez ce code dans un <em>notebook</em>, vous pouvez le faire avec la fonction suivante :",mn,ps,yn,us,Ca="qui affichera un <em>widget</em> où vous pourrez saisir vos informations d’identification. Alternativement, vous pouvez exécuter :",Jn,ds,Un,cs,_a="dans votre terminal préféré et connectez-vous là.",Tn,Je,Ue,Es,ms,wn,ys,bn,Js,ga="Contrairement à d’autres tâches, comme la classification de textes ou la réponse à des questions, sur lesquelles nous disposons d’un corpus étiqueté pour entraîner, la modélisation du langage ne s’appuie sur aucune étiquette explicite. Alors comment déterminer ce qui fait un bon modèle de langage ? Comme pour la fonction de correction automatique de votre téléphone, un bon modèle de langage est celui qui attribue des probabilités élevées aux phrases grammaticalement correctes et des probabilités faibles aux phrases absurdes. Pour vous donner une meilleure idée de ce à quoi cela ressemble, vous pouvez trouver en ligne des séries entières de « ratés d’autocorrection » où le modèle d’un téléphone produit des compléments plutôt amusants (et souvent inappropriés) !",jn,Te,we,Ys,Us,hn,Ts,Ga="Un score de perplexité faible signifie un meilleur modèle de langue. Nous pouvons voir ici que notre modèle de départ a une valeur assez élevée. Voyons si nous pouvons la réduire en l’affinant ! Pour ce faire, nous commençons par exécuter la boucle d’entraînement :",fn,be,je,Fs,ws,Ba="et ensuite calculer la perplexité résultante sur l’ensemble de test comme précédemment :",In,he,fe,Ss,bs,Cn,js,Za="Joli. C’est une réduction considérable de la perplexité, ce qui nous indique que le modèle a appris quelque chose sur le domaine des critiques de films !",_n,Hs,Ye,gn,qs,hs,Gn,fs,ka="Vous pouvez interagir avec votre modèle <em>finetuné</em> soit en utilisant son <em>widget</em> sur le <em>Hub</em>, soit localement avec le <code>pipeline</code> de 🤗 <em>Transformers</em>. Utilisons ce dernier pour télécharger notre modèle en utilisant le pipeline <code>fill-mask</code> :",Bn,Is,Zn,Cs,va="Nous pouvons ensuite donner au pipeline notre exemple de texte « this is a great [MASK] » et voir quelles sont les 5 premières prédictions :",kn,_s,vn,gs,Rn,Gs,Ra="Notre modèle a clairement adapté ses pondérations pour prédire les mots qui sont plus fortement associés aux films !",Xn,Bs,zn,Zs,Xa='Ceci conclut notre première expérience d’entraînement d’un modèle de langage. Dans la <a href="/course/fr/chapter7/section6">section 6</a>, vous apprendrez comment entraîner à partir de zéro un modèle autorégressif comme GPT-2. Allez-y si vous voulez voir comment vous pouvez pré-entraîner votre propre <em>transformer</em> !',Wn,Fe,$n,ks,Vn,Ps,xn;_=new wi({props:{fw:f[0]}}),v=new Ui({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),B=new He({props:{title:"<i> Finetuner </i> un modèle de langage masqué",local:"i-finetuner-i-un-modèle-de-langage-masqué",headingTag:"h1"}});const za=[ji,bi],vs=[];function Wa(e,l){return e[0]==="pt"?0:1}k=Wa(f),Z=vs[k]=za[k](f),ae=new Qn({props:{id:"mqElG5QJWUg"}}),pe=new Se({props:{$$slots:{default:[hi]},$$scope:{ctx:f}}}),q=new He({props:{title:"Choix d’un modèle pré-entraîné pour la modélisation du langage masqué",local:"choix-dun-modèle-pré-entraîné-pour-la-modélisation-du-langage-masqué",headingTag:"h2"}});const $a=[Ii,fi],Rs=[];function Va(e,l){return e[0]==="pt"?0:1}H=Va(f),N=Rs[H]=$a[H](f),K=new h({props:{code:"dGV4dCUyMCUzRCUyMCUyMlRoaXMlMjBpcyUyMGElMjBncmVhdCUyMCU1Qk1BU0slNUQuJTIy",highlighted:'text = <span class="hljs-string">&quot;This is a great [MASK].&quot;</span>',wrap:!1}}),Ge=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChtb2RlbF9jaGVja3BvaW50KQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)`,wrap:!1}});const xa=[_i,Ci],Xs=[];function Na(e,l){return e[0]==="pt"?0:1}de=Na(f),ce=Xs[de]=xa[de](f),ll=new h({props:{code:"JyUzRSUzRSUzRSUyMFRoaXMlMjBpcyUyMGElMjBncmVhdCUyMGRlYWwuJyUyMCUyMyUyMEMnZXN0JTIwdW5lJTIwYm9ubmUlMjBhZmZhaXJlJTBBJyUzRSUzRSUzRSUyMFRoaXMlMjBpcyUyMGElMjBncmVhdCUyMHN1Y2Nlc3MuJyUyMCUyMyUyMEMnZXN0JTIwdW4lMjBncmFuZCUyMHN1Y2MlQzMlQThzJTBBJyUzRSUzRSUzRSUyMFRoaXMlMjBpcyUyMGElMjBncmVhdCUyMGFkdmVudHVyZS4nJTIwJTIzJTIwQydlc3QlMjB1bmUlMjBncmFuZGUlMjBhdmVudHVyZSUwQSclM0UlM0UlM0UlMjBUaGlzJTIwaXMlMjBhJTIwZ3JlYXQlMjBpZGVhLiclMjAlMjMlMjBDJ2VzdCUyMHVuZSUyMGJvbm5lJTIwaWQlQzMlQTllJTBBJyUzRSUzRSUzRSUyMFRoaXMlMjBpcyUyMGElMjBncmVhdCUyMGZlYXQuJyUyMCUyMyUyMEMnZXN0JTIwdW4lMjBncmFuZCUyMGV4cGxvaXQ=",highlighted:`<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great deal.&#x27;</span> <span class="hljs-comment"># C&#x27;est une bonne affaire</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great success.&#x27;</span> <span class="hljs-comment"># C&#x27;est un grand succès</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great adventure.&#x27;</span> <span class="hljs-comment"># C&#x27;est une grande aventure</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great idea.&#x27;</span> <span class="hljs-comment"># C&#x27;est une bonne idée</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great feat.&#x27;</span> <span class="hljs-comment"># C&#x27;est un grand exploit</span>`,wrap:!1}}),tl=new He({props:{title:"Le jeu de données",local:"le-jeu-de-données",headingTag:"h2"}}),al=new h({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBaW1kYl9kYXRhc2V0JTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMmltZGIlMjIpJTBBaW1kYl9kYXRhc2V0",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

imdb_dataset = load_dataset(<span class="hljs-string">&quot;imdb&quot;</span>)
imdb_dataset`,wrap:!1}}),il=new h({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ3RleHQnJTJDJTIwJ2xhYmVsJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMjUwMDAlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTIwJTIwJTIwJTIwdGVzdCUzQSUyMERhdGFzZXQoJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmVhdHVyZXMlM0ElMjAlNUIndGV4dCclMkMlMjAnbGFiZWwnJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjAyNTAwMCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB1bnN1cGVydmlzZWQlM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ3RleHQnJTJDJTIwJ2xhYmVsJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNTAwMDAlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;text&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>],
        num_rows: <span class="hljs-number">25000</span>
    })
    test: Dataset({
        features: [<span class="hljs-string">&#x27;text&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>],
        num_rows: <span class="hljs-number">25000</span>
    })
    unsupervised: Dataset({
        features: [<span class="hljs-string">&#x27;text&#x27;</span>, <span class="hljs-string">&#x27;label&#x27;</span>],
        num_rows: <span class="hljs-number">50000</span>
    })
})`,wrap:!1}}),rl=new h({props:{code:"c2FtcGxlJTIwJTNEJTIwaW1kYl9kYXRhc2V0JTVCJTIydHJhaW4lMjIlNUQuc2h1ZmZsZShzZWVkJTNENDIpLnNlbGVjdChyYW5nZSgzKSklMEElMEFmb3IlMjByb3clMjBpbiUyMHNhbXBsZSUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlNUNuJyUzRSUzRSUzRSUyMFJldmlldyUzQSUyMCU3QnJvdyU1Qid0ZXh0JyU1RCU3RCclMjIpJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMiclM0UlM0UlM0UlMjBMYWJlbCUzQSUyMCU3QnJvdyU1QidsYWJlbCclNUQlN0QnJTIyKQ==",highlighted:`sample = imdb_dataset[<span class="hljs-string">&quot;train&quot;</span>].shuffle(seed=<span class="hljs-number">42</span>).select(<span class="hljs-built_in">range</span>(<span class="hljs-number">3</span>))

<span class="hljs-keyword">for</span> row <span class="hljs-keyword">in</span> sample:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;\\n&#x27;&gt;&gt;&gt; Review: <span class="hljs-subst">{row[<span class="hljs-string">&#x27;text&#x27;</span>]}</span>&#x27;&quot;</span>)
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&#x27;&gt;&gt;&gt; Label: <span class="hljs-subst">{row[<span class="hljs-string">&#x27;label&#x27;</span>]}</span>&#x27;&quot;</span>)`,wrap:!1}}),Ml=new h({props:{code:" ",highlighted:`
<span class="hljs-string">&#x27;&gt;&gt;&gt; Review: This is your typical Priyadarshan movie--a bunch of loony characters out on some silly mission. His signature climax has the entire cast of the film coming together and fighting each other in some crazy moshpit over hidden money. Whether it is a winning lottery ticket in Malamaal Weekly, black money in Hera Pheri, &quot;kodokoo&quot; in Phir Hera Pheri, etc., etc., the director is becoming ridiculously predictable. Don\\&#x27;t get me wrong; as clichéd and preposterous his movies may be, I usually end up enjoying the comedy. However, in most his previous movies there has actually been some good humor, (Hungama and Hera Pheri being noteworthy ones). Now, the hilarity of his films is fading as he is using the same formula over and over again.&lt;br /&gt;&lt;br /&gt;Songs are good. Tanushree Datta looks awesome. Rajpal Yadav is irritating, and Tusshar is not a whole lot better. Kunal Khemu is OK, and Sharman Joshi is the best.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Label: 0&#x27;</span>

<span class="hljs-string">&#x27;&gt;&gt;&gt; Review: Okay, the story makes no sense, the characters lack any dimensionally, the best dialogue is ad-libs about the low quality of movie, the cinematography is dismal, and only editing saves a bit of the muddle, but Sam&quot; Peckinpah directed the film. Somehow, his direction is not enough. For those who appreciate Peckinpah and his great work, this movie is a disappointment. Even a great cast cannot redeem the time the viewer wastes with this minimal effort.&lt;br /&gt;&lt;br /&gt;The proper response to the movie is the contempt that the director San Peckinpah, James Caan, Robert Duvall, Burt Young, Bo Hopkins, Arthur Hill, and even Gig Young bring to their work. Watch the great Peckinpah films. Skip this mess.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Label: 0&#x27;</span>

<span class="hljs-string">&#x27;&gt;&gt;&gt; Review: I saw this movie at the theaters when I was about 6 or 7 years old. I loved it then, and have recently come to own a VHS version. &lt;br /&gt;&lt;br /&gt;My 4 and 6 year old children love this movie and have been asking again and again to watch it. &lt;br /&gt;&lt;br /&gt;I have enjoyed watching it again too. Though I have to admit it is not as good on a little TV.&lt;br /&gt;&lt;br /&gt;I do not have older children so I do not know what they would think of it. &lt;br /&gt;&lt;br /&gt;The songs are very cute. My daughter keeps singing them over and over.&lt;br /&gt;&lt;br /&gt;Hope this helps.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Label: 1&#x27;</span>`,wrap:!1}}),xe=new Se({props:{$$slots:{default:[gi]},$$scope:{ctx:f}}}),dl=new He({props:{title:"Prétraitement des données",local:"prétraitement-des-données",headingTag:"h2"}}),cl=new Qn({props:{id:"8PmhEIXhBvI"}}),Jl=new h({props:{code:"ZGVmJTIwdG9rZW5pemVfZnVuY3Rpb24oZXhhbXBsZXMpJTNBJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyKGV4YW1wbGVzJTVCJTIydGV4dCUyMiU1RCklMEElMjAlMjAlMjAlMjBpZiUyMHRva2VuaXplci5pc19mYXN0JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVzdWx0JTVCJTIyd29yZF9pZHMlMjIlNUQlMjAlM0QlMjAlNUJyZXN1bHQud29yZF9pZHMoaSklMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4ocmVzdWx0JTVCJTIyaW5wdXRfaWRzJTIyJTVEKSklNUQlMEElMjAlMjAlMjAlMjByZXR1cm4lMjByZXN1bHQlMEElMEElMEElMjMlMjBVdGlsaXNhdGlvbiUyMGRlJTIwYmF0Y2hlZCUzRFRydWUlMjBwb3VyJTIwYWN0aXZlciUyMGxlJTIwbXVsdGl0aHJlYWRpbmclMjByYXBpZGUlMjAhJTBBdG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwaW1kYl9kYXRhc2V0Lm1hcCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlJTJDJTIwcmVtb3ZlX2NvbHVtbnMlM0QlNUIlMjJ0ZXh0JTIyJTJDJTIwJTIybGFiZWwlMjIlNUQlMEEpJTBBdG9rZW5pemVkX2RhdGFzZXRz",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_function</span>(<span class="hljs-params">examples</span>):
    result = tokenizer(examples[<span class="hljs-string">&quot;text&quot;</span>])
    <span class="hljs-keyword">if</span> tokenizer.is_fast:
        result[<span class="hljs-string">&quot;word_ids&quot;</span>] = [result.word_ids(i) <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-built_in">len</span>(result[<span class="hljs-string">&quot;input_ids&quot;</span>]))]
    <span class="hljs-keyword">return</span> result


<span class="hljs-comment"># Utilisation de batched=True pour activer le multithreading rapide !</span>
tokenized_datasets = imdb_dataset.<span class="hljs-built_in">map</span>(
    tokenize_function, batched=<span class="hljs-literal">True</span>, remove_columns=[<span class="hljs-string">&quot;text&quot;</span>, <span class="hljs-string">&quot;label&quot;</span>]
)
tokenized_datasets`,wrap:!1}}),Ul=new h({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpbnB1dF9pZHMnJTJDJTIwJ3dvcmRfaWRzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMjUwMDAlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTIwJTIwJTIwJTIwdGVzdCUzQSUyMERhdGFzZXQoJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmVhdHVyZXMlM0ElMjAlNUInYXR0ZW50aW9uX21hc2snJTJDJTIwJ2lucHV0X2lkcyclMkMlMjAnd29yZF9pZHMnJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjAyNTAwMCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB1bnN1cGVydmlzZWQlM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpbnB1dF9pZHMnJTJDJTIwJ3dvcmRfaWRzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNTAwMDAlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTdEKQ==",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;word_ids&#x27;</span>],
        num_rows: <span class="hljs-number">25000</span>
    })
    test: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;word_ids&#x27;</span>],
        num_rows: <span class="hljs-number">25000</span>
    })
    unsupervised: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;word_ids&#x27;</span>],
        num_rows: <span class="hljs-number">50000</span>
    })
})`,wrap:!1}}),bl=new h({props:{code:"dG9rZW5pemVyLm1vZGVsX21heF9sZW5ndGg=",highlighted:"tokenizer.model_max_length",wrap:!1}}),jl=new h({props:{code:"NTEy",highlighted:'<span class="hljs-number">512</span>',wrap:!1}}),Ne=new Se({props:{$$slots:{default:[Gi]},$$scope:{ctx:f}}}),Il=new h({props:{code:"Y2h1bmtfc2l6ZSUyMCUzRCUyMDEyOA==",highlighted:'chunk_size = <span class="hljs-number">128</span>',wrap:!1}}),Qe=new Se({props:{warning:!0,$$slots:{default:[Bi]},$$scope:{ctx:f}}}),_l=new h({props:{code:"JTIzJTIwTGUlMjBkJUMzJUE5Y291cGFnZSUyMHByb2R1aXQlMjB1bmUlMjBsaXN0ZSUyMGRlJTIwbGlzdGVzJTIwcG91ciUyMGNoYXF1ZSUyMGNhcmFjdCVDMyVBOXJpc3RpcXVlJTBBdG9rZW5pemVkX3NhbXBsZXMlMjAlM0QlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QiUzQTMlNUQlMEElMEFmb3IlMjBpZHglMkMlMjBzYW1wbGUlMjBpbiUyMGVudW1lcmF0ZSh0b2tlbml6ZWRfc2FtcGxlcyU1QiUyMmlucHV0X2lkcyUyMiU1RCklM0ElMEElMjAlMjAlMjAlMjBwcmludChmJTIyJyUzRSUzRSUzRSUyMFJldmlldyUyMCU3QmlkeCU3RCUyMGxlbmd0aCUzQSUyMCU3QmxlbihzYW1wbGUpJTdEJyUyMik=",highlighted:`<span class="hljs-comment"># Le découpage produit une liste de listes pour chaque caractéristique</span>
tokenized_samples = tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][:<span class="hljs-number">3</span>]

<span class="hljs-keyword">for</span> idx, sample <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(tokenized_samples[<span class="hljs-string">&quot;input_ids&quot;</span>]):
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&#x27;&gt;&gt;&gt; Review <span class="hljs-subst">{idx}</span> length: <span class="hljs-subst">{<span class="hljs-built_in">len</span>(sample)}</span>&#x27;&quot;</span>)`,wrap:!1}}),gl=new h({props:{code:"JyUzRSUzRSUzRSUyMFJldmlldyUyMDAlMjBsZW5ndGglM0ElMjAyMDAnJTBBJyUzRSUzRSUzRSUyMFJldmlldyUyMDElMjBsZW5ndGglM0ElMjA1NTknJTBBJyUzRSUzRSUzRSUyMFJldmlldyUyMDIlMjBsZW5ndGglM0ElMjAxOTIn",highlighted:`<span class="hljs-string">&#x27;&gt;&gt;&gt; Review 0 length: 200&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Review 1 length: 559&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Review 2 length: 192&#x27;</span>`,wrap:!1}}),Bl=new h({props:{code:"Y29uY2F0ZW5hdGVkX2V4YW1wbGVzJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwayUzQSUyMHN1bSh0b2tlbml6ZWRfc2FtcGxlcyU1QmslNUQlMkMlMjAlNUIlNUQpJTIwZm9yJTIwayUyMGluJTIwdG9rZW5pemVkX3NhbXBsZXMua2V5cygpJTBBJTdEJTBBdG90YWxfbGVuZ3RoJTIwJTNEJTIwbGVuKGNvbmNhdGVuYXRlZF9leGFtcGxlcyU1QiUyMmlucHV0X2lkcyUyMiU1RCklMEFwcmludChmJTIyJyUzRSUzRSUzRSUyMExvbmd1ZXVyJTIwZGVzJTIwY3JpdGlxdWVzJTIwY29uY2F0JUMzJUE5biVDMyVBOWVzJTIwJTNBJTIwJTdCdG90YWxfbGVuZ3RoJTdEJyUyMik=",highlighted:`concatenated_examples = {
    k: <span class="hljs-built_in">sum</span>(tokenized_samples[k], []) <span class="hljs-keyword">for</span> k <span class="hljs-keyword">in</span> tokenized_samples.keys()
}
total_length = <span class="hljs-built_in">len</span>(concatenated_examples[<span class="hljs-string">&quot;input_ids&quot;</span>])
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&#x27;&gt;&gt;&gt; Longueur des critiques concaténées : <span class="hljs-subst">{total_length}</span>&#x27;&quot;</span>)`,wrap:!1}}),Zl=new h({props:{code:"JyUzRSUzRSUzRSUyMExvbmd1ZXVyJTIwZGVzJTIwY3JpdGlxdWVzJTIwY29uY2F0JUMzJUE5biVDMyVBOWVzJTIwJTNBJTIwOTUxJw==",highlighted:'<span class="hljs-string">&#x27;&gt;&gt;&gt; Longueur des critiques concaténées : 951&#x27;</span>',wrap:!1}}),vl=new h({props:{code:"Y2h1bmtzJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwayUzQSUyMCU1QnQlNUJpJTIwJTNBJTIwaSUyMCUyQiUyMGNodW5rX3NpemUlNUQlMjBmb3IlMjBpJTIwaW4lMjByYW5nZSgwJTJDJTIwdG90YWxfbGVuZ3RoJTJDJTIwY2h1bmtfc2l6ZSklNUQlMEElMjAlMjAlMjAlMjBmb3IlMjBrJTJDJTIwdCUyMGluJTIwY29uY2F0ZW5hdGVkX2V4YW1wbGVzLml0ZW1zKCklMEElN0QlMEElMEFmb3IlMjBjaHVuayUyMGluJTIwY2h1bmtzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMiclM0UlM0UlM0UlMjBDaHVuayUyMGxlbmd0aCUzQSUyMCU3QmxlbihjaHVuayklN0QnJTIyKQ==",highlighted:`chunks = {
    k: [t[i : i + chunk_size] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">0</span>, total_length, chunk_size)]
    <span class="hljs-keyword">for</span> k, t <span class="hljs-keyword">in</span> concatenated_examples.items()
}

<span class="hljs-keyword">for</span> chunk <span class="hljs-keyword">in</span> chunks[<span class="hljs-string">&quot;input_ids&quot;</span>]:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&#x27;&gt;&gt;&gt; Chunk length: <span class="hljs-subst">{<span class="hljs-built_in">len</span>(chunk)}</span>&#x27;&quot;</span>)`,wrap:!1}}),Rl=new h({props:{code:"JyUzRSUzRSUzRSUyMENodW5rJTIwbGVuZ3RoJTNBJTIwMTI4JyUwQSclM0UlM0UlM0UlMjBDaHVuayUyMGxlbmd0aCUzQSUyMDEyOCclMEEnJTNFJTNFJTNFJTIwQ2h1bmslMjBsZW5ndGglM0ElMjAxMjgnJTBBJyUzRSUzRSUzRSUyMENodW5rJTIwbGVuZ3RoJTNBJTIwMTI4JyUwQSclM0UlM0UlM0UlMjBDaHVuayUyMGxlbmd0aCUzQSUyMDEyOCclMEEnJTNFJTNFJTNFJTIwQ2h1bmslMjBsZW5ndGglM0ElMjAxMjgnJTBBJyUzRSUzRSUzRSUyMENodW5rJTIwbGVuZ3RoJTNBJTIwMTI4JyUwQSclM0UlM0UlM0UlMjBDaHVuayUyMGxlbmd0aCUzQSUyMDU1Jw==",highlighted:`<span class="hljs-string">&#x27;&gt;&gt;&gt; Chunk length: 128&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Chunk length: 128&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Chunk length: 128&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Chunk length: 128&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Chunk length: 128&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Chunk length: 128&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Chunk length: 128&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; Chunk length: 55&#x27;</span>`,wrap:!1}}),$l=new h({props:{code:"ZGVmJTIwZ3JvdXBfdGV4dHMoZXhhbXBsZXMpJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ29uY2F0JUMzJUE5bmF0aW9uJTIwZGUlMjB0b3VzJTIwbGVzJTIwdGV4dGVzJTBBJTIwJTIwJTIwJTIwY29uY2F0ZW5hdGVkX2V4YW1wbGVzJTIwJTNEJTIwJTdCayUzQSUyMHN1bShleGFtcGxlcyU1QmslNUQlMkMlMjAlNUIlNUQpJTIwZm9yJTIwayUyMGluJTIwZXhhbXBsZXMua2V5cygpJTdEJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ2FsY3VsZSUyMGxhJTIwbG9uZ3VldXIlMjBkZXMlMjB0ZXh0ZXMlMjBjb25jYXQlQzMlQTluJUMzJUE5cyUwQSUyMCUyMCUyMCUyMHRvdGFsX2xlbmd0aCUyMCUzRCUyMGxlbihjb25jYXRlbmF0ZWRfZXhhbXBsZXMlNUJsaXN0KGV4YW1wbGVzLmtleXMoKSklNUIwJTVEJTVEKSUwQSUyMCUyMCUyMCUyMCUyMyUyME5vdXMlMjBsYWlzc29ucyUyMHRvbWJlciUyMGxlJTIwZGVybmllciUyMG1vcmNlYXUlMjBzJ2lsJTIwZXN0JTIwcGx1cyUyMHBldGl0JTIwcXVlJTIwY2h1bmtfc2l6ZSUwQSUyMCUyMCUyMCUyMHRvdGFsX2xlbmd0aCUyMCUzRCUyMCh0b3RhbF9sZW5ndGglMjAlMkYlMkYlMjBjaHVua19zaXplKSUyMColMjBjaHVua19zaXplJTBBJTIwJTIwJTIwJTIwJTIzJTIwRnJhY3Rpb25uZW1lbnQlMjBwYXIlMjBjaHVuayUyMGRlJTIwbWF4X2xlbiUwQSUyMCUyMCUyMCUyMHJlc3VsdCUyMCUzRCUyMCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGslM0ElMjAlNUJ0JTVCaSUyMCUzQSUyMGklMjAlMkIlMjBjaHVua19zaXplJTVEJTIwZm9yJTIwaSUyMGluJTIwcmFuZ2UoMCUyQyUyMHRvdGFsX2xlbmd0aCUyQyUyMGNodW5rX3NpemUpJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwayUyQyUyMHQlMjBpbiUyMGNvbmNhdGVuYXRlZF9leGFtcGxlcy5pdGVtcygpJTBBJTIwJTIwJTIwJTIwJTdEJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ3IlQzMlQTllciUyMHVuZSUyMG5vdXZlbGxlJTIwY29sb25uZSUyMGQnJUMzJUE5dGlxdWV0dGVzJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTVCJTIybGFiZWxzJTIyJTVEJTIwJTNEJTIwcmVzdWx0JTVCJTIyaW5wdXRfaWRzJTIyJTVELmNvcHkoKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHJlc3VsdA==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">group_texts</span>(<span class="hljs-params">examples</span>):
    <span class="hljs-comment"># Concaténation de tous les textes</span>
    concatenated_examples = {k: <span class="hljs-built_in">sum</span>(examples[k], []) <span class="hljs-keyword">for</span> k <span class="hljs-keyword">in</span> examples.keys()}
    <span class="hljs-comment"># Calcule la longueur des textes concaténés</span>
    total_length = <span class="hljs-built_in">len</span>(concatenated_examples[<span class="hljs-built_in">list</span>(examples.keys())[<span class="hljs-number">0</span>]])
    <span class="hljs-comment"># Nous laissons tomber le dernier morceau s&#x27;il est plus petit que chunk_size</span>
    total_length = (total_length // chunk_size) * chunk_size
    <span class="hljs-comment"># Fractionnement par chunk de max_len</span>
    result = {
        k: [t[i : i + chunk_size] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">0</span>, total_length, chunk_size)]
        <span class="hljs-keyword">for</span> k, t <span class="hljs-keyword">in</span> concatenated_examples.items()
    }
    <span class="hljs-comment"># Créer une nouvelle colonne d&#x27;étiquettes</span>
    result[<span class="hljs-string">&quot;labels&quot;</span>] = result[<span class="hljs-string">&quot;input_ids&quot;</span>].copy()
    <span class="hljs-keyword">return</span> result`,wrap:!1}}),Nl=new h({props:{code:"bG1fZGF0YXNldHMlMjAlM0QlMjB0b2tlbml6ZWRfZGF0YXNldHMubWFwKGdyb3VwX3RleHRzJTJDJTIwYmF0Y2hlZCUzRFRydWUpJTBBbG1fZGF0YXNldHM=",highlighted:`lm_datasets = tokenized_datasets.<span class="hljs-built_in">map</span>(group_texts, batched=<span class="hljs-literal">True</span>)
lm_datasets`,wrap:!1}}),Ql=new h({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpbnB1dF9pZHMnJTJDJTIwJ2xhYmVscyclMkMlMjAnd29yZF9pZHMnJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjA2MTI4OSUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB0ZXN0JTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidhdHRlbnRpb25fbWFzayclMkMlMjAnaW5wdXRfaWRzJyUyQyUyMCdsYWJlbHMnJTJDJTIwJ3dvcmRfaWRzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNTk5MDUlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTIwJTIwJTIwJTIwdW5zdXBlcnZpc2VkJTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidhdHRlbnRpb25fbWFzayclMkMlMjAnaW5wdXRfaWRzJyUyQyUyMCdsYWJlbHMnJTJDJTIwJ3dvcmRfaWRzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMTIyOTYzJTBBJTIwJTIwJTIwJTIwJTdEKSUwQSU3RCk=",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;word_ids&#x27;</span>],
        num_rows: <span class="hljs-number">61289</span>
    })
    test: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;word_ids&#x27;</span>],
        num_rows: <span class="hljs-number">59905</span>
    })
    unsupervised: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;word_ids&#x27;</span>],
        num_rows: <span class="hljs-number">122963</span>
    })
})`,wrap:!1}}),El=new h({props:{code:"dG9rZW5pemVyLmRlY29kZShsbV9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMSU1RCU1QiUyMmlucHV0X2lkcyUyMiU1RCk=",highlighted:'tokenizer.decode(lm_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">1</span>][<span class="hljs-string">&quot;input_ids&quot;</span>])',wrap:!1}}),Yl=new h({props:{code:"JTIyLi4uLiUyMGF0Li4uLi4uLi4uLiUyMGhpZ2guJTIwYSUyMGNsYXNzaWMlMjBsaW5lJTIwJTNBJTIwaW5zcGVjdG9yJTIwJTNBJTIwaSdtJTIwaGVyZSUyMHRvJTIwc2FjayUyMG9uZSUyMG9mJTIweW91ciUyMHRlYWNoZXJzLiUyMHN0dWRlbnQlMjAlM0ElMjB3ZWxjb21lJTIwdG8lMjBicm9td2VsbCUyMGhpZ2guJTIwaSUyMGV4cGVjdCUyMHRoYXQlMjBtYW55JTIwYWR1bHRzJTIwb2YlMjBteSUyMGFnZSUyMHRoaW5rJTIwdGhhdCUyMGJyb213ZWxsJTIwaGlnaCUyMGlzJTIwZmFyJTIwZmV0Y2hlZC4lMjB3aGF0JTIwYSUyMHBpdHklMjB0aGF0JTIwaXQlMjBpc24ndCElMjAlNUJTRVAlNUQlMjAlNUJDTFMlNUQlMjBob21lbGVzc25lc3MlMjAoJTIwb3IlMjBob3VzZWxlc3NuZXNzJTIwYXMlMjBnZW9yZ2UlMjBjYXJsaW4lMjBzdGF0ZWQlMjApJTIwaGFzJTIwYmVlbiUyMGFuJTIwaXNzdWUlMjBmb3IlMjB5ZWFycyUyMGJ1dCUyMG5ldmVyJTIwYSUyMHBsYW4lMjB0byUyMGhlbHAlMjB0aG9zZSUyMG9uJTIwdGhlJTIwc3RyZWV0JTIwdGhhdCUyMHdlcmUlMjBvbmNlJTIwY29uc2lkZXJlZCUyMGh1bWFuJTIwd2hvJTIwZGlkJTIwZXZlcnl0aGluZyUyMGZyb20lMjBnb2luZyUyMHRvJTIwc2Nob29sJTJDJTIwd29yayUyQyUyMG9yJTIwdm90ZSUyMGZvciUyMHRoZSUyMG1hdHRlci4lMjBtb3N0JTIwcGVvcGxlJTIwdGhpbmslMjBvZiUyMHRoZSUyMGhvbWVsZXNzJTIy",highlighted:'<span class="hljs-string">&quot;.... at.......... high. a classic line : inspector : i&#x27;m here to sack one of your teachers. student : welcome to bromwell high. i expect that many adults of my age think that bromwell high is far fetched. what a pity that it isn&#x27;t! [SEP] [CLS] homelessness ( or houselessness as george carlin stated ) has been an issue for years but never a plan to help those on the street that were once considered human who did everything from going to school, work, or vote for the matter. most people think of the homeless&quot;</span>',wrap:!1}}),Sl=new h({props:{code:"dG9rZW5pemVyLmRlY29kZShsbV9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMSU1RCU1QiUyMmxhYmVscyUyMiU1RCk=",highlighted:'tokenizer.decode(lm_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">1</span>][<span class="hljs-string">&quot;labels&quot;</span>])',wrap:!1}}),Hl=new h({props:{code:"JTIyLi4uLiUyMGF0Li4uLi4uLi4uLiUyMGhpZ2guJTIwYSUyMGNsYXNzaWMlMjBsaW5lJTIwJTNBJTIwaW5zcGVjdG9yJTIwJTNBJTIwaSdtJTIwaGVyZSUyMHRvJTIwc2FjayUyMG9uZSUyMG9mJTIweW91ciUyMHRlYWNoZXJzLiUyMHN0dWRlbnQlMjAlM0ElMjB3ZWxjb21lJTIwdG8lMjBicm9td2VsbCUyMGhpZ2guJTIwaSUyMGV4cGVjdCUyMHRoYXQlMjBtYW55JTIwYWR1bHRzJTIwb2YlMjBteSUyMGFnZSUyMHRoaW5rJTIwdGhhdCUyMGJyb213ZWxsJTIwaGlnaCUyMGlzJTIwZmFyJTIwZmV0Y2hlZC4lMjB3aGF0JTIwYSUyMHBpdHklMjB0aGF0JTIwaXQlMjBpc24ndCElMjAlNUJTRVAlNUQlMjAlNUJDTFMlNUQlMjBob21lbGVzc25lc3MlMjAoJTIwb3IlMjBob3VzZWxlc3NuZXNzJTIwYXMlMjBnZW9yZ2UlMjBjYXJsaW4lMjBzdGF0ZWQlMjApJTIwaGFzJTIwYmVlbiUyMGFuJTIwaXNzdWUlMjBmb3IlMjB5ZWFycyUyMGJ1dCUyMG5ldmVyJTIwYSUyMHBsYW4lMjB0byUyMGhlbHAlMjB0aG9zZSUyMG9uJTIwdGhlJTIwc3RyZWV0JTIwdGhhdCUyMHdlcmUlMjBvbmNlJTIwY29uc2lkZXJlZCUyMGh1bWFuJTIwd2hvJTIwZGlkJTIwZXZlcnl0aGluZyUyMGZyb20lMjBnb2luZyUyMHRvJTIwc2Nob29sJTJDJTIwd29yayUyQyUyMG9yJTIwdm90ZSUyMGZvciUyMHRoZSUyMG1hdHRlci4lMjBtb3N0JTIwcGVvcGxlJTIwdGhpbmslMjBvZiUyMHRoZSUyMGhvbWVsZXNzJTIy",highlighted:'<span class="hljs-string">&quot;.... at.......... high. a classic line : inspector : i&#x27;m here to sack one of your teachers. student : welcome to bromwell high. i expect that many adults of my age think that bromwell high is far fetched. what a pity that it isn&#x27;t! [SEP] [CLS] homelessness ( or houselessness as george carlin stated ) has been an issue for years but never a plan to help those on the street that were once considered human who did everything from going to school, work, or vote for the matter. most people think of the homeless&quot;</span>',wrap:!1}}),Ll=new He({props:{title:"<i> Finetuning </i> de DistilBERT avec l’API Trainer",local:"i-finetuning-i-de-distilbert-avec-lapi-trainer",headingTag:"h2"}}),Kl=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvckZvckxhbmd1YWdlTW9kZWxpbmclMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGF0YUNvbGxhdG9yRm9yTGFuZ3VhZ2VNb2RlbGluZyh0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMjBtbG1fcHJvYmFiaWxpdHklM0QwLjE1KQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorForLanguageModeling

data_collator = DataCollatorForLanguageModeling(tokenizer=tokenizer, mlm_probability=<span class="hljs-number">0.15</span>)`,wrap:!1}}),Ol=new h({props:{code:"c2FtcGxlcyUyMCUzRCUyMCU1QmxtX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUJpJTVEJTIwZm9yJTIwaSUyMGluJTIwcmFuZ2UoMiklNUQlMEFmb3IlMjBzYW1wbGUlMjBpbiUyMHNhbXBsZXMlM0ElMEElMjAlMjAlMjAlMjBfJTIwJTNEJTIwc2FtcGxlLnBvcCglMjJ3b3JkX2lkcyUyMiklMEElMEFmb3IlMjBjaHVuayUyMGluJTIwZGF0YV9jb2xsYXRvcihzYW1wbGVzKSU1QiUyMmlucHV0X2lkcyUyMiU1RCUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlNUNuJyUzRSUzRSUzRSUyMCU3QnRva2VuaXplci5kZWNvZGUoY2h1bmspJTdEJyUyMik=",highlighted:`samples = [lm_datasets[<span class="hljs-string">&quot;train&quot;</span>][i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">2</span>)]
<span class="hljs-keyword">for</span> sample <span class="hljs-keyword">in</span> samples:
    _ = sample.pop(<span class="hljs-string">&quot;word_ids&quot;</span>)

<span class="hljs-keyword">for</span> chunk <span class="hljs-keyword">in</span> data_collator(samples)[<span class="hljs-string">&quot;input_ids&quot;</span>]:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;\\n&#x27;&gt;&gt;&gt; <span class="hljs-subst">{tokenizer.decode(chunk)}</span>&#x27;&quot;</span>)`,wrap:!1}}),es=new h({props:{code:"JyUzRSUzRSUzRSUyMCU1QkNMUyU1RCUyMGJyb213ZWxsJTIwJTVCTUFTSyU1RCUyMGlzJTIwYSUyMGNhcnRvb24lMjBjb21lZHkuJTIwaXQlMjByYW4lMjBhdCUyMHRoZSUyMHNhbWUlMjAlNUJNQVNLJTVEJTIwYXMlMjBzb21lJTIwb3RoZXIlMjAlNUJNQVNLJTVEJTIwYWJvdXQlMjBzY2hvb2wlMjBsaWZlJTJDJTIwJTVCTUFTSyU1RCUyMGFzJTIwJTIyJTIwdGVhY2hlcnMlMjAlMjIuJTIwJTVCTUFTSyU1RCUyMCU1Qk1BU0slNUQlMjAlNUJNQVNLJTVEJTIwaW4lMjB0aGUlMjB0ZWFjaGluZyUyMCU1Qk1BU0slNUQlMjBsZWFkJTIwJTVCTUFTSyU1RCUyMHRvJTIwYmVsaWV2ZSUyMHRoYXQlMjBicm9td2VsbCUyMGhpZ2glNUMnJTVCTUFTSyU1RCUyMHNhdGlyZSUyMGlzJTIwbXVjaCUyMGNsb3NlciUyMHRvJTIwcmVhbGl0eSUyMHRoYW4lMjBpcyUyMCUyMiUyMHRlYWNoZXJzJTIwJTIyLiUyMHRoZSUyMHNjcmFtYmxlJTIwJTVCTUFTSyU1RCUyMCU1Qk1BU0slNUQlMjBmaW5hbmNpYWxseSUyQyUyMHRoZSUyMCU1Qk1BU0slNURmdWwlMjBzdHVkZW50cyUyMHdob2duJTIwJTVCTUFTSyU1RCUyMHJpZ2h0JTIwdGhyb3VnaCUyMCU1Qk1BU0slNUQlMjBwYXRoZXRpYyUyMHRlYWNoZXJzJTVDJ3BvbXAlMkMlMjB0aGUlMjBwZXR0aW5lc3MlMjBvZiUyMHRoZSUyMHdob2xlJTIwc2l0dWF0aW9uJTJDJTIwZGlzdGluY3Rpb24lMjByZW1pbmQlMjBtZSUyMG9mJTIwdGhlJTIwc2Nob29scyUyMGklMjBrbmV3JTIwYW5kJTIwdGhlaXIlMjBzdHVkZW50cy4lMjB3aGVuJTIwaSUyMHNhdyUyMCU1Qk1BU0slNUQlMjBlcGlzb2RlJTIwaW4lMjAlNUJNQVNLJTVEJTIwYSUyMHN0dWRlbnQlMjByZXBlYXRlZGx5JTIwdHJpZWQlMjB0byUyMGJ1cm4lMjBkb3duJTIwdGhlJTIwc2Nob29sJTJDJTIwJTVCTUFTSyU1RCUyMGltbWVkaWF0ZWx5JTIwcmVjYWxsZWQuJTIwJTVCTUFTSyU1RC4uLiclMEElMEEnJTNFJTNFJTNFJTIwLi4uLiUyMGF0Li4lMjAlNUJNQVNLJTVELi4uJTIwJTVCTUFTSyU1RC4uLiUyMGhpZ2guJTIwYSUyMGNsYXNzaWMlMjBsaW5lJTIwcGx1Y2tlZCUyMGluc3BlY3RvciUyMCUzQSUyMGklNUMnJTVCTUFTSyU1RCUyMGhlcmUlMjB0byUyMCU1Qk1BU0slNUQlMjBvbmUlMjBvZiUyMHlvdXIlMjAlNUJNQVNLJTVELiUyMHN0dWRlbnQlMjAlM0ElMjB3ZWxjb21lJTIwdG8lMjBicm9td2VsbCUyMCU1Qk1BU0slNUQuJTIwaSUyMGV4cGVjdCUyMHRoYXQlMjBtYW55JTIwYWR1bHRzJTIwb2YlMjBteSUyMGFnZSUyMHRoaW5rJTIwdGhhdCUyMCU1Qk1BU0slNURtd2VsbCUyMCU1Qk1BU0slNUQlMjBpcyUyMCU1Qk1BU0slNUQlMjBmZXRjaGVkLiUyMHdoYXQlMjBhJTIwcGl0eSUyMHRoYXQlMjBpdCUyMGlzbiU1Qyd0ISUyMCU1QlNFUCU1RCUyMCU1QkNMUyU1RCUyMCU1Qk1BU0slNURuZXNzJTIwKCUyMG9yJTIwJTVCTUFTSyU1RGxlc3NuZXNzJTIwYXMlMjBnZW9yZ2UlMjAlRTUlQUUlODdpbiUyMHN0YXRlZCUyMCklRTUlODUlQUMlMjBiZWVuJTIwYW4lMjBpc3N1ZSUyMGZvciUyMHllYXJzJTIwYnV0JTIwbmV2ZXIlMjAlNUJNQVNLJTVEJTIwcGxhbiUyMHRvJTIwaGVscCUyMHRob3NlJTIwb24lMjB0aGUlMjBzdHJlZXQlMjB0aGF0JTIwd2VyZSUyMG9uY2UlMjBjb25zaWRlcmVkJTIwaHVtYW4lMjAlNUJNQVNLJTVEJTIwZGlkJTIwZXZlcnl0aGluZyUyMGZyb20lMjBnb2luZyUyMHRvJTIwc2Nob29sJTJDJTIwJTVCTUFTSyU1RCUyQyUyMCU1Qk1BU0slNUQlMjB2b3RlJTIwZm9yJTIwdGhlJTIwbWF0dGVyLiUyMG1vc3QlMjBwZW9wbGUlMjB0aGluayUyMCU1Qk1BU0slNUQlMjB0aGUlMjBob21lbGVzcyc=",highlighted:`<span class="hljs-string">&#x27;&gt;&gt;&gt; [CLS] bromwell [MASK] is a cartoon comedy. it ran at the same [MASK] as some other [MASK] about school life, [MASK] as &quot; teachers &quot;. [MASK] [MASK] [MASK] in the teaching [MASK] lead [MASK] to believe that bromwell high\\&#x27;[MASK] satire is much closer to reality than is &quot; teachers &quot;. the scramble [MASK] [MASK] financially, the [MASK]ful students whogn [MASK] right through [MASK] pathetic teachers\\&#x27;pomp, the pettiness of the whole situation, distinction remind me of the schools i knew and their students. when i saw [MASK] episode in [MASK] a student repeatedly tried to burn down the school, [MASK] immediately recalled. [MASK]...&#x27;</span>

<span class="hljs-string">&#x27;&gt;&gt;&gt; .... at.. [MASK]... [MASK]... high. a classic line plucked inspector : i\\&#x27;[MASK] here to [MASK] one of your [MASK]. student : welcome to bromwell [MASK]. i expect that many adults of my age think that [MASK]mwell [MASK] is [MASK] fetched. what a pity that it isn\\&#x27;t! [SEP] [CLS] [MASK]ness ( or [MASK]lessness as george 宇in stated )公 been an issue for years but never [MASK] plan to help those on the street that were once considered human [MASK] did everything from going to school, [MASK], [MASK] vote for the matter. most people think [MASK] the homeless&#x27;</span>`,wrap:!1}}),Ae=new Se({props:{$$slots:{default:[Zi]},$$scope:{ctx:f}}});let O=f[0]==="pt"&&oi();const Qa=[vi,ki],zs=[];function Aa(e,l){return e[0]==="pt"?0:1}me=Aa(f),ye=zs[me]=Qa[me](f),ns=new h({props:{code:"c2FtcGxlcyUyMCUzRCUyMCU1QmxtX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUJpJTVEJTIwZm9yJTIwaSUyMGluJTIwcmFuZ2UoMiklNUQlMEFiYXRjaCUyMCUzRCUyMHdob2xlX3dvcmRfbWFza2luZ19kYXRhX2NvbGxhdG9yKHNhbXBsZXMpJTBBJTBBZm9yJTIwY2h1bmslMjBpbiUyMGJhdGNoJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMiU1Q24nJTNFJTNFJTNFJTIwJTdCdG9rZW5pemVyLmRlY29kZShjaHVuayklN0QnJTIyKQ==",highlighted:`samples = [lm_datasets[<span class="hljs-string">&quot;train&quot;</span>][i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> <span class="hljs-built_in">range</span>(<span class="hljs-number">2</span>)]
batch = whole_word_masking_data_collator(samples)

<span class="hljs-keyword">for</span> chunk <span class="hljs-keyword">in</span> batch[<span class="hljs-string">&quot;input_ids&quot;</span>]:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;\\n&#x27;&gt;&gt;&gt; <span class="hljs-subst">{tokenizer.decode(chunk)}</span>&#x27;&quot;</span>)`,wrap:!1}}),as=new h({props:{code:"JyUzRSUzRSUzRSUyMCU1QkNMUyU1RCUyMGJyb213ZWxsJTIwaGlnaCUyMGlzJTIwYSUyMGNhcnRvb24lMjBjb21lZHklMjAlNUJNQVNLJTVEJTIwaXQlMjByYW4lMjBhdCUyMHRoZSUyMHNhbWUlMjB0aW1lJTIwYXMlMjBzb21lJTIwb3RoZXIlMjBwcm9ncmFtcyUyMGFib3V0JTIwc2Nob29sJTIwbGlmZSUyQyUyMHN1Y2glMjBhcyUyMCUyMiUyMHRlYWNoZXJzJTIwJTIyLiUyMG15JTIwMzUlMjB5ZWFycyUyMGluJTIwdGhlJTIwdGVhY2hpbmclMjBwcm9mZXNzaW9uJTIwbGVhZCUyMG1lJTIwdG8lMjBiZWxpZXZlJTIwdGhhdCUyMGJyb213ZWxsJTIwaGlnaCU1QydzJTIwc2F0aXJlJTIwaXMlMjBtdWNoJTIwY2xvc2VyJTIwdG8lMjByZWFsaXR5JTIwdGhhbiUyMGlzJTIwJTIyJTIwdGVhY2hlcnMlMjAlMjIuJTIwdGhlJTIwc2NyYW1ibGUlMjB0byUyMHN1cnZpdmUlMjBmaW5hbmNpYWxseSUyQyUyMHRoZSUyMGluc2lnaHRmdWwlMjBzdHVkZW50cyUyMHdobyUyMGNhbiUyMHNlZSUyMHJpZ2h0JTIwdGhyb3VnaCUyMHRoZWlyJTIwcGF0aGV0aWMlMjB0ZWFjaGVycyU1Qydwb21wJTJDJTIwdGhlJTIwcGV0dGluZXNzJTIwb2YlMjB0aGUlMjB3aG9sZSUyMHNpdHVhdGlvbiUyQyUyMGFsbCUyMHJlbWluZCUyMG1lJTIwb2YlMjB0aGUlMjBzY2hvb2xzJTIwaSUyMGtuZXclMjBhbmQlMjB0aGVpciUyMHN0dWRlbnRzLiUyMHdoZW4lMjBpJTIwc2F3JTIwdGhlJTIwZXBpc29kZSUyMGluJTIwd2hpY2glMjBhJTIwc3R1ZGVudCUyMHJlcGVhdGVkbHklMjB0cmllZCUyMHRvJTIwYnVybiUyMGRvd24lMjB0aGUlMjBzY2hvb2wlMkMlMjBpJTIwaW1tZWRpYXRlbHklMjByZWNhbGxlZC4uLi4uJyUwQSUwQSclM0UlM0UlM0UlMjAuLi4uJTIwJTVCTUFTSyU1RCUyMCU1Qk1BU0slNUQlMjAlNUJNQVNLJTVEJTIwJTVCTUFTSyU1RC4uLi4uLi4lMjBoaWdoLiUyMGElMjBjbGFzc2ljJTIwbGluZSUyMCUzQSUyMGluc3BlY3RvciUyMCUzQSUyMGklNUMnbSUyMGhlcmUlMjB0byUyMHNhY2slMjBvbmUlMjBvZiUyMHlvdXIlMjB0ZWFjaGVycy4lMjBzdHVkZW50JTIwJTNBJTIwd2VsY29tZSUyMHRvJTIwYnJvbXdlbGwlMjBoaWdoLiUyMGklMjBleHBlY3QlMjB0aGF0JTIwbWFueSUyMGFkdWx0cyUyMG9mJTIwbXklMjBhZ2UlMjB0aGluayUyMHRoYXQlMjBicm9td2VsbCUyMGhpZ2glMjBpcyUyMGZhciUyMGZldGNoZWQuJTIwd2hhdCUyMGElMjBwaXR5JTIwdGhhdCUyMGl0JTIwaXNuJTVDJ3QhJTIwJTVCU0VQJTVEJTIwJTVCQ0xTJTVEJTIwaG9tZWxlc3NuZXNzJTIwKCUyMG9yJTIwaG91c2VsZXNzbmVzcyUyMGFzJTIwZ2VvcmdlJTIwY2FybGluJTIwc3RhdGVkJTIwKSUyMGhhcyUyMGJlZW4lMjBhbiUyMGlzc3VlJTIwZm9yJTIweWVhcnMlMjBidXQlMjBuZXZlciUyMGElMjBwbGFuJTIwdG8lMjBoZWxwJTIwdGhvc2UlMjBvbiUyMHRoZSUyMHN0cmVldCUyMHRoYXQlMjB3ZXJlJTIwb25jZSUyMGNvbnNpZGVyZWQlMjBodW1hbiUyMHdobyUyMGRpZCUyMGV2ZXJ5dGhpbmclMjBmcm9tJTIwZ29pbmclMjB0byUyMHNjaG9vbCUyQyUyMHdvcmslMkMlMjBvciUyMHZvdGUlMjBmb3IlMjB0aGUlMjBtYXR0ZXIuJTIwbW9zdCUyMHBlb3BsZSUyMHRoaW5rJTIwb2YlMjB0aGUlMjBob21lbGVzcyc=",highlighted:`<span class="hljs-string">&#x27;&gt;&gt;&gt; [CLS] bromwell high is a cartoon comedy [MASK] it ran at the same time as some other programs about school life, such as &quot; teachers &quot;. my 35 years in the teaching profession lead me to believe that bromwell high\\&#x27;s satire is much closer to reality than is &quot; teachers &quot;. the scramble to survive financially, the insightful students who can see right through their pathetic teachers\\&#x27;pomp, the pettiness of the whole situation, all remind me of the schools i knew and their students. when i saw the episode in which a student repeatedly tried to burn down the school, i immediately recalled.....&#x27;</span>

<span class="hljs-string">&#x27;&gt;&gt;&gt; .... [MASK] [MASK] [MASK] [MASK]....... high. a classic line : inspector : i\\&#x27;m here to sack one of your teachers. student : welcome to bromwell high. i expect that many adults of my age think that bromwell high is far fetched. what a pity that it isn\\&#x27;t! [SEP] [CLS] homelessness ( or houselessness as george carlin stated ) has been an issue for years but never a plan to help those on the street that were once considered human who did everything from going to school, work, or vote for the matter. most people think of the homeless&#x27;</span>`,wrap:!1}}),Ee=new Se({props:{$$slots:{default:[Ri]},$$scope:{ctx:f}}}),os=new h({props:{code:"dHJhaW5fc2l6ZSUyMCUzRCUyMDEwXzAwMCUwQXRlc3Rfc2l6ZSUyMCUzRCUyMGludCgwLjElMjAqJTIwdHJhaW5fc2l6ZSklMEElMEFkb3duc2FtcGxlZF9kYXRhc2V0JTIwJTNEJTIwbG1fZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC50cmFpbl90ZXN0X3NwbGl0KCUwQSUyMCUyMCUyMCUyMHRyYWluX3NpemUlM0R0cmFpbl9zaXplJTJDJTIwdGVzdF9zaXplJTNEdGVzdF9zaXplJTJDJTIwc2VlZCUzRDQyJTBBKSUwQWRvd25zYW1wbGVkX2RhdGFzZXQ=",highlighted:`train_size = <span class="hljs-number">10_000</span>
test_size = <span class="hljs-built_in">int</span>(<span class="hljs-number">0.1</span> * train_size)

downsampled_dataset = lm_datasets[<span class="hljs-string">&quot;train&quot;</span>].train_test_split(
    train_size=train_size, test_size=test_size, seed=<span class="hljs-number">42</span>
)
downsampled_dataset`,wrap:!1}}),rs=new h({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdpbnB1dF9pZHMnJTJDJTIwJ2xhYmVscyclMkMlMjAnd29yZF9pZHMnJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbnVtX3Jvd3MlM0ElMjAxMDAwMCUwQSUyMCUyMCUyMCUyMCU3RCklMEElMjAlMjAlMjAlMjB0ZXN0JTNBJTIwRGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidhdHRlbnRpb25fbWFzayclMkMlMjAnaW5wdXRfaWRzJyUyQyUyMCdsYWJlbHMnJTJDJTIwJ3dvcmRfaWRzJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMTAwMCUwQSUyMCUyMCUyMCUyMCU3RCklMEElN0Qp",highlighted:`DatasetDict({
    train: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;word_ids&#x27;</span>],
        num_rows: <span class="hljs-number">10000</span>
    })
    test: Dataset({
        features: [<span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;word_ids&#x27;</span>],
        num_rows: <span class="hljs-number">1000</span>
    })
})`,wrap:!1}}),ps=new h({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login

notebook_login()`,wrap:!1}}),ds=new h({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:'huggingface-<span class="hljs-keyword">cli</span> login',wrap:!1}});const Ea=[zi,Xi],Ws=[];function Ya(e,l){return e[0]==="tf"?0:1}Je=Ya(f),Ue=Ws[Je]=Ea[Je](f),ms=new He({props:{title:"Perplexité pour les modèles de langage",local:"perplexité-pour-les-modèles-de-langage",headingTag:"h3"}}),ys=new Qn({props:{id:"NURcDHhYe98"}});const Fa=[$i,Wi],$s=[];function Sa(e,l){return e[0]==="pt"?0:1}Te=Sa(f),we=$s[Te]=Fa[Te](f),Us=new h({props:{code:"UGVycGxleGl0JUMzJUE5JTIwJTNBJTIwMjEuNzU=",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>Perplexité : <span class="hljs-number">21.75</span>',wrap:!1}});const Ha=[xi,Vi],Vs=[];function qa(e,l){return e[0]==="pt"?0:1}be=qa(f),je=Vs[be]=Ha[be](f);const La=[Qi,Ni],xs=[];function Da(e,l){return e[0]==="pt"?0:1}he=Da(f),fe=xs[he]=La[he](f),bs=new h({props:{code:"UGVycGxleGl0JUMzJUE5JTIwJTNBJTIwMTEuMzI=",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>Perplexité : <span class="hljs-number">11.32</span>',wrap:!1}});let Q=f[0]==="pt"&&ri();Ye=new Se({props:{$$slots:{default:[Ai]},$$scope:{ctx:f}}});let A=f[0]==="pt"&&Mi();return hs=new He({props:{title:"Utilisation de notre modèle <i> finetuné </i>",local:"utilisation-de-notre-modèle-i-finetuné-i",headingTag:"h3"}}),Is=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBbWFza19maWxsZXIlMjAlM0QlMjBwaXBlbGluZSglMEElMjAlMjAlMjAlMjAlMjJmaWxsLW1hc2slMjIlMkMlMjBtb2RlbCUzRCUyMmh1Z2dpbmdmYWNlLWNvdXJzZSUyRmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkLWZpbmV0dW5lZC1pbWRiJTIyJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

mask_filler = pipeline(
    <span class="hljs-string">&quot;fill-mask&quot;</span>, model=<span class="hljs-string">&quot;huggingface-course/distilbert-base-uncased-finetuned-imdb&quot;</span>
)`,wrap:!1}}),_s=new h({props:{code:"cHJlZHMlMjAlM0QlMjBtYXNrX2ZpbGxlcih0ZXh0KSUwQSUwQWZvciUyMHByZWQlMjBpbiUyMHByZWRzJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMiUzRSUzRSUzRSUyMCU3QnByZWQlNUInc2VxdWVuY2UnJTVEJTdEJTIyKQ==",highlighted:`preds = mask_filler(text)

<span class="hljs-keyword">for</span> pred <span class="hljs-keyword">in</span> preds:
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;&gt;&gt;&gt; <span class="hljs-subst">{pred[<span class="hljs-string">&#x27;sequence&#x27;</span>]}</span>&quot;</span>)`,wrap:!1}}),gs=new h({props:{code:"JyUzRSUzRSUzRSUyMHRoaXMlMjBpcyUyMGElMjBncmVhdCUyMG1vdmllLiclMEEnJTNFJTNFJTNFJTIwdGhpcyUyMGlzJTIwYSUyMGdyZWF0JTIwZmlsbS4nJTBBJyUzRSUzRSUzRSUyMHRoaXMlMjBpcyUyMGElMjBncmVhdCUyMHN0b3J5LiclMEEnJTNFJTNFJTNFJTIwdGhpcyUyMGlzJTIwYSUyMGdyZWF0JTIwbW92aWVzLiclMEEnJTNFJTNFJTNFJTIwdGhpcyUyMGlzJTIwYSUyMGdyZWF0JTIwY2hhcmFjdGVyLic=",highlighted:`<span class="hljs-string">&#x27;&gt;&gt;&gt; this is a great movie.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; this is a great film.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; this is a great story.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; this is a great movies.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; this is a great character.&#x27;</span>`,wrap:!1}}),Bs=new Qn({props:{id:"0Oxphw4Q9fo"}}),Fe=new Se({props:{$$slots:{default:[Ei]},$$scope:{ctx:f}}}),ks=new Ti({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter7/3.mdx"}}),{c(){n=U("meta"),d=i(),a=U("p"),u=i(),c(_.$$.fragment),w=i(),c(v.$$.fragment),R=i(),c(B.$$.fragment),X=i(),Z.c(),j=i(),g=U("p"),g.innerHTML=F,x=i(),I=U("p"),I.innerHTML=z,Y=i(),G=U("p"),G.innerHTML=W,le=i(),ee=U("div"),ee.innerHTML=Ie,Le=i(),se=U("p"),se.innerHTML=Ce,ke=i(),$=U("iframe"),ve=i(),V=U("iframe"),te=i(),_e=U("p"),_e.textContent=Ke,ne=i(),c(ae.$$.fragment),ie=i(),c(pe.$$.fragment),Re=i(),c(q.$$.fragment),Xe=i(),L=U("p"),L.innerHTML=Ds,ze=i(),S=U("div"),S.innerHTML=Pe,oe=i(),re=U("p"),re.innerHTML=ge,Oe=i(),N.c(),ue=i(),D=U("p"),D.innerHTML=Ks,We=i(),c(K.$$.fragment),$e=i(),P=U("p"),P.innerHTML=el,Me=i(),c(Ge.$$.fragment),Ve=i(),r=U("p"),r.innerHTML=C,Os=i(),ce.c(),Ns=i(),c(ll.$$.fragment),et=i(),sl=U("p"),sl.textContent=Dn,lt=i(),c(tl.$$.fragment),st=i(),nl=U("p"),nl.innerHTML=Kn,tt=i(),c(al.$$.fragment),nt=i(),c(il.$$.fragment),at=i(),ol=U("p"),ol.innerHTML=Pn,it=i(),c(rl.$$.fragment),ot=i(),c(Ml.$$.fragment),rt=i(),pl=U("p"),pl.innerHTML=On,Mt=i(),c(xe.$$.fragment),pt=i(),ul=U("p"),ul.innerHTML=ea,ut=i(),c(dl.$$.fragment),dt=i(),c(cl.$$.fragment),ct=i(),ml=U("p"),ml.innerHTML=la,mt=i(),yl=U("p"),yl.innerHTML=sa,yt=i(),c(Jl.$$.fragment),Jt=i(),c(Ul.$$.fragment),Ut=i(),Tl=U("p"),Tl.innerHTML=ta,Tt=i(),wl=U("p"),wl.innerHTML=na,wt=i(),c(bl.$$.fragment),bt=i(),c(jl.$$.fragment),jt=i(),hl=U("p"),hl.innerHTML=aa,ht=i(),c(Ne.$$.fragment),ft=i(),fl=U("p"),fl.textContent=ia,It=i(),c(Il.$$.fragment),Ct=i(),c(Qe.$$.fragment),_t=i(),Cl=U("p"),Cl.innerHTML=oa,gt=i(),c(_l.$$.fragment),Gt=i(),c(gl.$$.fragment),Bt=i(),Gl=U("p"),Gl.textContent=ra,Zt=i(),c(Bl.$$.fragment),kt=i(),c(Zl.$$.fragment),vt=i(),kl=U("p"),kl.innerHTML=Ma,Rt=i(),c(vl.$$.fragment),Xt=i(),c(Rl.$$.fragment),zt=i(),Xl=U("p"),Xl.innerHTML=pa,Wt=i(),zl=U("ul"),zl.innerHTML=ua,$t=i(),Wl=U("p"),Wl.textContent=da,Vt=i(),c($l.$$.fragment),xt=i(),Vl=U("p"),Vl.innerHTML=ca,Nt=i(),xl=U("p"),xl.innerHTML=ma,Qt=i(),c(Nl.$$.fragment),At=i(),c(Ql.$$.fragment),Et=i(),Al=U("p"),Al.innerHTML=ya,Yt=i(),c(El.$$.fragment),Ft=i(),c(Yl.$$.fragment),St=i(),Fl=U("p"),Fl.textContent=Ja,Ht=i(),c(Sl.$$.fragment),qt=i(),c(Hl.$$.fragment),Lt=i(),ql=U("p"),ql.innerHTML=Ua,Dt=i(),c(Ll.$$.fragment),Kt=i(),Dl=U("p"),Dl.innerHTML=Ta,Pt=i(),c(Kl.$$.fragment),Ot=i(),Pl=U("p"),Pl.innerHTML=wa,en=i(),c(Ol.$$.fragment),ln=i(),c(es.$$.fragment),sn=i(),ls=U("p"),ls.innerHTML=ba,tn=i(),c(Ae.$$.fragment),nn=i(),O&&O.c(),Qs=i(),ss=U("p"),ss.innerHTML=ja,an=i(),ye.c(),As=i(),ts=U("p"),ts.textContent=ha,on=i(),c(ns.$$.fragment),rn=i(),c(as.$$.fragment),Mn=i(),c(Ee.$$.fragment),pn=i(),is=U("p"),is.innerHTML=fa,un=i(),c(os.$$.fragment),dn=i(),c(rs.$$.fragment),cn=i(),Ms=U("p"),Ms.innerHTML=Ia,mn=i(),c(ps.$$.fragment),yn=i(),us=U("p"),us.innerHTML=Ca,Jn=i(),c(ds.$$.fragment),Un=i(),cs=U("p"),cs.textContent=_a,Tn=i(),Ue.c(),Es=i(),c(ms.$$.fragment),wn=i(),c(ys.$$.fragment),bn=i(),Js=U("p"),Js.textContent=ga,jn=i(),we.c(),Ys=i(),c(Us.$$.fragment),hn=i(),Ts=U("p"),Ts.textContent=Ga,fn=i(),je.c(),Fs=i(),ws=U("p"),ws.textContent=Ba,In=i(),fe.c(),Ss=i(),c(bs.$$.fragment),Cn=i(),js=U("p"),js.textContent=Za,_n=i(),Q&&Q.c(),Hs=i(),c(Ye.$$.fragment),gn=i(),A&&A.c(),qs=i(),c(hs.$$.fragment),Gn=i(),fs=U("p"),fs.innerHTML=ka,Bn=i(),c(Is.$$.fragment),Zn=i(),Cs=U("p"),Cs.textContent=va,kn=i(),c(_s.$$.fragment),vn=i(),c(gs.$$.fragment),Rn=i(),Gs=U("p"),Gs.textContent=Ra,Xn=i(),c(Bs.$$.fragment),zn=i(),Zs=U("p"),Zs.innerHTML=Xa,Wn=i(),c(Fe.$$.fragment),$n=i(),c(ks.$$.fragment),Vn=i(),Ps=U("p"),this.h()},l(e){const l=yi("svelte-u9bgzb",document.head);n=T(l,"META",{name:!0,content:!0}),l.forEach(s),d=o(e),a=T(e,"P",{}),Nn(a).forEach(s),u=o(e),m(_.$$.fragment,e),w=o(e),m(v.$$.fragment,e),R=o(e),m(B.$$.fragment,e),X=o(e),Z.l(e),j=o(e),g=T(e,"P",{"data-svelte-h":!0}),b(g)!=="svelte-1bo9bua"&&(g.innerHTML=F),x=o(e),I=T(e,"P",{"data-svelte-h":!0}),b(I)!=="svelte-1qgvw5k"&&(I.innerHTML=z),Y=o(e),G=T(e,"P",{"data-svelte-h":!0}),b(G)!=="svelte-76yjlb"&&(G.innerHTML=W),le=o(e),ee=T(e,"DIV",{class:!0,"data-svelte-h":!0}),b(ee)!=="svelte-1lvgpuv"&&(ee.innerHTML=Ie),Le=o(e),se=T(e,"P",{"data-svelte-h":!0}),b(se)!=="svelte-qfzrh7"&&(se.innerHTML=Ce),ke=o(e),$=T(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Nn($).forEach(s),ve=o(e),V=T(e,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Nn(V).forEach(s),te=o(e),_e=T(e,"P",{"data-svelte-h":!0}),b(_e)!=="svelte-1vbdxte"&&(_e.textContent=Ke),ne=o(e),m(ae.$$.fragment,e),ie=o(e),m(pe.$$.fragment,e),Re=o(e),m(q.$$.fragment,e),Xe=o(e),L=T(e,"P",{"data-svelte-h":!0}),b(L)!=="svelte-11hj9x8"&&(L.innerHTML=Ds),ze=o(e),S=T(e,"DIV",{class:!0,"data-svelte-h":!0}),b(S)!=="svelte-zc90xi"&&(S.innerHTML=Pe),oe=o(e),re=T(e,"P",{"data-svelte-h":!0}),b(re)!=="svelte-1esisg4"&&(re.innerHTML=ge),Oe=o(e),N.l(e),ue=o(e),D=T(e,"P",{"data-svelte-h":!0}),b(D)!=="svelte-hwhbjf"&&(D.innerHTML=Ks),We=o(e),m(K.$$.fragment,e),$e=o(e),P=T(e,"P",{"data-svelte-h":!0}),b(P)!=="svelte-1re7883"&&(P.innerHTML=el),Me=o(e),m(Ge.$$.fragment,e),Ve=o(e),r=T(e,"P",{"data-svelte-h":!0}),b(r)!=="svelte-191pw0w"&&(r.innerHTML=C),Os=o(e),ce.l(e),Ns=o(e),m(ll.$$.fragment,e),et=o(e),sl=T(e,"P",{"data-svelte-h":!0}),b(sl)!=="svelte-c0sjzo"&&(sl.textContent=Dn),lt=o(e),m(tl.$$.fragment,e),st=o(e),nl=T(e,"P",{"data-svelte-h":!0}),b(nl)!=="svelte-cmmnmk"&&(nl.innerHTML=Kn),tt=o(e),m(al.$$.fragment,e),nt=o(e),m(il.$$.fragment,e),at=o(e),ol=T(e,"P",{"data-svelte-h":!0}),b(ol)!=="svelte-f3q1f1"&&(ol.innerHTML=Pn),it=o(e),m(rl.$$.fragment,e),ot=o(e),m(Ml.$$.fragment,e),rt=o(e),pl=T(e,"P",{"data-svelte-h":!0}),b(pl)!=="svelte-6riueh"&&(pl.innerHTML=On),Mt=o(e),m(xe.$$.fragment,e),pt=o(e),ul=T(e,"P",{"data-svelte-h":!0}),b(ul)!=="svelte-1w927gk"&&(ul.innerHTML=ea),ut=o(e),m(dl.$$.fragment,e),dt=o(e),m(cl.$$.fragment,e),ct=o(e),ml=T(e,"P",{"data-svelte-h":!0}),b(ml)!=="svelte-1boph3m"&&(ml.innerHTML=la),mt=o(e),yl=T(e,"P",{"data-svelte-h":!0}),b(yl)!=="svelte-1vrunsa"&&(yl.innerHTML=sa),yt=o(e),m(Jl.$$.fragment,e),Jt=o(e),m(Ul.$$.fragment,e),Ut=o(e),Tl=T(e,"P",{"data-svelte-h":!0}),b(Tl)!=="svelte-1ni6xrn"&&(Tl.innerHTML=ta),Tt=o(e),wl=T(e,"P",{"data-svelte-h":!0}),b(wl)!=="svelte-1mokl5j"&&(wl.innerHTML=na),wt=o(e),m(bl.$$.fragment,e),bt=o(e),m(jl.$$.fragment,e),jt=o(e),hl=T(e,"P",{"data-svelte-h":!0}),b(hl)!=="svelte-cbw4xm"&&(hl.innerHTML=aa),ht=o(e),m(Ne.$$.fragment,e),ft=o(e),fl=T(e,"P",{"data-svelte-h":!0}),b(fl)!=="svelte-1429zu5"&&(fl.textContent=ia),It=o(e),m(Il.$$.fragment,e),Ct=o(e),m(Qe.$$.fragment,e),_t=o(e),Cl=T(e,"P",{"data-svelte-h":!0}),b(Cl)!=="svelte-jabakd"&&(Cl.innerHTML=oa),gt=o(e),m(_l.$$.fragment,e),Gt=o(e),m(gl.$$.fragment,e),Bt=o(e),Gl=T(e,"P",{"data-svelte-h":!0}),b(Gl)!=="svelte-1v72a2s"&&(Gl.textContent=ra),Zt=o(e),m(Bl.$$.fragment,e),kt=o(e),m(Zl.$$.fragment,e),vt=o(e),kl=T(e,"P",{"data-svelte-h":!0}),b(kl)!=="svelte-y0bdh2"&&(kl.innerHTML=Ma),Rt=o(e),m(vl.$$.fragment,e),Xt=o(e),m(Rl.$$.fragment,e),zt=o(e),Xl=T(e,"P",{"data-svelte-h":!0}),b(Xl)!=="svelte-1ufcr0z"&&(Xl.innerHTML=pa),Wt=o(e),zl=T(e,"UL",{"data-svelte-h":!0}),b(zl)!=="svelte-y5dmcj"&&(zl.innerHTML=ua),$t=o(e),Wl=T(e,"P",{"data-svelte-h":!0}),b(Wl)!=="svelte-17cb3e5"&&(Wl.textContent=da),Vt=o(e),m($l.$$.fragment,e),xt=o(e),Vl=T(e,"P",{"data-svelte-h":!0}),b(Vl)!=="svelte-qctoh9"&&(Vl.innerHTML=ca),Nt=o(e),xl=T(e,"P",{"data-svelte-h":!0}),b(xl)!=="svelte-110qzdv"&&(xl.innerHTML=ma),Qt=o(e),m(Nl.$$.fragment,e),At=o(e),m(Ql.$$.fragment,e),Et=o(e),Al=T(e,"P",{"data-svelte-h":!0}),b(Al)!=="svelte-dj132k"&&(Al.innerHTML=ya),Yt=o(e),m(El.$$.fragment,e),Ft=o(e),m(Yl.$$.fragment,e),St=o(e),Fl=T(e,"P",{"data-svelte-h":!0}),b(Fl)!=="svelte-1uqv94k"&&(Fl.textContent=Ja),Ht=o(e),m(Sl.$$.fragment,e),qt=o(e),m(Hl.$$.fragment,e),Lt=o(e),ql=T(e,"P",{"data-svelte-h":!0}),b(ql)!=="svelte-ydprvf"&&(ql.innerHTML=Ua),Dt=o(e),m(Ll.$$.fragment,e),Kt=o(e),Dl=T(e,"P",{"data-svelte-h":!0}),b(Dl)!=="svelte-f7fa2k"&&(Dl.innerHTML=Ta),Pt=o(e),m(Kl.$$.fragment,e),Ot=o(e),Pl=T(e,"P",{"data-svelte-h":!0}),b(Pl)!=="svelte-1to79l8"&&(Pl.innerHTML=wa),en=o(e),m(Ol.$$.fragment,e),ln=o(e),m(es.$$.fragment,e),sn=o(e),ls=T(e,"P",{"data-svelte-h":!0}),b(ls)!=="svelte-17fpd6a"&&(ls.innerHTML=ba),tn=o(e),m(Ae.$$.fragment,e),nn=o(e),O&&O.l(e),Qs=o(e),ss=T(e,"P",{"data-svelte-h":!0}),b(ss)!=="svelte-4mh7gl"&&(ss.innerHTML=ja),an=o(e),ye.l(e),As=o(e),ts=T(e,"P",{"data-svelte-h":!0}),b(ts)!=="svelte-9x4zb9"&&(ts.textContent=ha),on=o(e),m(ns.$$.fragment,e),rn=o(e),m(as.$$.fragment,e),Mn=o(e),m(Ee.$$.fragment,e),pn=o(e),is=T(e,"P",{"data-svelte-h":!0}),b(is)!=="svelte-1tc41gd"&&(is.innerHTML=fa),un=o(e),m(os.$$.fragment,e),dn=o(e),m(rs.$$.fragment,e),cn=o(e),Ms=T(e,"P",{"data-svelte-h":!0}),b(Ms)!=="svelte-1ur7p2d"&&(Ms.innerHTML=Ia),mn=o(e),m(ps.$$.fragment,e),yn=o(e),us=T(e,"P",{"data-svelte-h":!0}),b(us)!=="svelte-c16psb"&&(us.innerHTML=Ca),Jn=o(e),m(ds.$$.fragment,e),Un=o(e),cs=T(e,"P",{"data-svelte-h":!0}),b(cs)!=="svelte-1h8of77"&&(cs.textContent=_a),Tn=o(e),Ue.l(e),Es=o(e),m(ms.$$.fragment,e),wn=o(e),m(ys.$$.fragment,e),bn=o(e),Js=T(e,"P",{"data-svelte-h":!0}),b(Js)!=="svelte-1nqq1tn"&&(Js.textContent=ga),jn=o(e),we.l(e),Ys=o(e),m(Us.$$.fragment,e),hn=o(e),Ts=T(e,"P",{"data-svelte-h":!0}),b(Ts)!=="svelte-1b8g7uj"&&(Ts.textContent=Ga),fn=o(e),je.l(e),Fs=o(e),ws=T(e,"P",{"data-svelte-h":!0}),b(ws)!=="svelte-m8lc5u"&&(ws.textContent=Ba),In=o(e),fe.l(e),Ss=o(e),m(bs.$$.fragment,e),Cn=o(e),js=T(e,"P",{"data-svelte-h":!0}),b(js)!=="svelte-7dljtq"&&(js.textContent=Za),_n=o(e),Q&&Q.l(e),Hs=o(e),m(Ye.$$.fragment,e),gn=o(e),A&&A.l(e),qs=o(e),m(hs.$$.fragment,e),Gn=o(e),fs=T(e,"P",{"data-svelte-h":!0}),b(fs)!=="svelte-1kdoesq"&&(fs.innerHTML=ka),Bn=o(e),m(Is.$$.fragment,e),Zn=o(e),Cs=T(e,"P",{"data-svelte-h":!0}),b(Cs)!=="svelte-6uhw25"&&(Cs.textContent=va),kn=o(e),m(_s.$$.fragment,e),vn=o(e),m(gs.$$.fragment,e),Rn=o(e),Gs=T(e,"P",{"data-svelte-h":!0}),b(Gs)!=="svelte-scvib3"&&(Gs.textContent=Ra),Xn=o(e),m(Bs.$$.fragment,e),zn=o(e),Zs=T(e,"P",{"data-svelte-h":!0}),b(Zs)!=="svelte-1mrtw54"&&(Zs.innerHTML=Xa),Wn=o(e),m(Fe.$$.fragment,e),$n=o(e),m(ks.$$.fragment,e),Vn=o(e),Ps=T(e,"P",{}),Nn(Ps).forEach(s),this.h()},h(){E(n,"name","hf:doc:metadata"),E(n,"content",Fi),E(ee,"class","flex justify-center"),ii($.src,Ls="https://course-demos-distilbert-base-uncased-finetune-7400b54.hf.space")||E($,"src",Ls),E($,"frameborder","0"),E($,"height","300"),E($,"title","Gradio app"),E($,"class","block dark:hidden container p-0 flex-grow space-iframe"),E($,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),E($,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),ii(V.src,De="https://course-demos-distilbert-base-uncased-finetuned-imdb-darkmode.hf.space")||E(V,"src",De),E(V,"frameborder","0"),E(V,"height","300"),E(V,"title","Gradio app"),E(V,"class","hidden dark:block container p-0 flex-grow space-iframe"),E(V,"allow","accelerometer; ambient-light-sensor; autoplay; battery; camera; document-domain; encrypted-media; fullscreen; geolocation; gyroscope; layout-animations; legacy-image-formats; magnetometer; microphone; midi; oversized-images; payment; picture-in-picture; publickey-credentials-get; sync-xhr; usb; vr ; wake-lock; xr-spatial-tracking"),E(V,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),E(S,"class","flex justify-center")},m(e,l){Ji(document.head,n),t(e,d,l),t(e,a,l),t(e,u,l),y(_,e,l),t(e,w,l),y(v,e,l),t(e,R,l),y(B,e,l),t(e,X,l),vs[k].m(e,l),t(e,j,l),t(e,g,l),t(e,x,l),t(e,I,l),t(e,Y,l),t(e,G,l),t(e,le,l),t(e,ee,l),t(e,Le,l),t(e,se,l),t(e,ke,l),t(e,$,l),t(e,ve,l),t(e,V,l),t(e,te,l),t(e,_e,l),t(e,ne,l),y(ae,e,l),t(e,ie,l),y(pe,e,l),t(e,Re,l),y(q,e,l),t(e,Xe,l),t(e,L,l),t(e,ze,l),t(e,S,l),t(e,oe,l),t(e,re,l),t(e,Oe,l),Rs[H].m(e,l),t(e,ue,l),t(e,D,l),t(e,We,l),y(K,e,l),t(e,$e,l),t(e,P,l),t(e,Me,l),y(Ge,e,l),t(e,Ve,l),t(e,r,l),t(e,Os,l),Xs[de].m(e,l),t(e,Ns,l),y(ll,e,l),t(e,et,l),t(e,sl,l),t(e,lt,l),y(tl,e,l),t(e,st,l),t(e,nl,l),t(e,tt,l),y(al,e,l),t(e,nt,l),y(il,e,l),t(e,at,l),t(e,ol,l),t(e,it,l),y(rl,e,l),t(e,ot,l),y(Ml,e,l),t(e,rt,l),t(e,pl,l),t(e,Mt,l),y(xe,e,l),t(e,pt,l),t(e,ul,l),t(e,ut,l),y(dl,e,l),t(e,dt,l),y(cl,e,l),t(e,ct,l),t(e,ml,l),t(e,mt,l),t(e,yl,l),t(e,yt,l),y(Jl,e,l),t(e,Jt,l),y(Ul,e,l),t(e,Ut,l),t(e,Tl,l),t(e,Tt,l),t(e,wl,l),t(e,wt,l),y(bl,e,l),t(e,bt,l),y(jl,e,l),t(e,jt,l),t(e,hl,l),t(e,ht,l),y(Ne,e,l),t(e,ft,l),t(e,fl,l),t(e,It,l),y(Il,e,l),t(e,Ct,l),y(Qe,e,l),t(e,_t,l),t(e,Cl,l),t(e,gt,l),y(_l,e,l),t(e,Gt,l),y(gl,e,l),t(e,Bt,l),t(e,Gl,l),t(e,Zt,l),y(Bl,e,l),t(e,kt,l),y(Zl,e,l),t(e,vt,l),t(e,kl,l),t(e,Rt,l),y(vl,e,l),t(e,Xt,l),y(Rl,e,l),t(e,zt,l),t(e,Xl,l),t(e,Wt,l),t(e,zl,l),t(e,$t,l),t(e,Wl,l),t(e,Vt,l),y($l,e,l),t(e,xt,l),t(e,Vl,l),t(e,Nt,l),t(e,xl,l),t(e,Qt,l),y(Nl,e,l),t(e,At,l),y(Ql,e,l),t(e,Et,l),t(e,Al,l),t(e,Yt,l),y(El,e,l),t(e,Ft,l),y(Yl,e,l),t(e,St,l),t(e,Fl,l),t(e,Ht,l),y(Sl,e,l),t(e,qt,l),y(Hl,e,l),t(e,Lt,l),t(e,ql,l),t(e,Dt,l),y(Ll,e,l),t(e,Kt,l),t(e,Dl,l),t(e,Pt,l),y(Kl,e,l),t(e,Ot,l),t(e,Pl,l),t(e,en,l),y(Ol,e,l),t(e,ln,l),y(es,e,l),t(e,sn,l),t(e,ls,l),t(e,tn,l),y(Ae,e,l),t(e,nn,l),O&&O.m(e,l),t(e,Qs,l),t(e,ss,l),t(e,an,l),zs[me].m(e,l),t(e,As,l),t(e,ts,l),t(e,on,l),y(ns,e,l),t(e,rn,l),y(as,e,l),t(e,Mn,l),y(Ee,e,l),t(e,pn,l),t(e,is,l),t(e,un,l),y(os,e,l),t(e,dn,l),y(rs,e,l),t(e,cn,l),t(e,Ms,l),t(e,mn,l),y(ps,e,l),t(e,yn,l),t(e,us,l),t(e,Jn,l),y(ds,e,l),t(e,Un,l),t(e,cs,l),t(e,Tn,l),Ws[Je].m(e,l),t(e,Es,l),y(ms,e,l),t(e,wn,l),y(ys,e,l),t(e,bn,l),t(e,Js,l),t(e,jn,l),$s[Te].m(e,l),t(e,Ys,l),y(Us,e,l),t(e,hn,l),t(e,Ts,l),t(e,fn,l),Vs[be].m(e,l),t(e,Fs,l),t(e,ws,l),t(e,In,l),xs[he].m(e,l),t(e,Ss,l),y(bs,e,l),t(e,Cn,l),t(e,js,l),t(e,_n,l),Q&&Q.m(e,l),t(e,Hs,l),y(Ye,e,l),t(e,gn,l),A&&A.m(e,l),t(e,qs,l),y(hs,e,l),t(e,Gn,l),t(e,fs,l),t(e,Bn,l),y(Is,e,l),t(e,Zn,l),t(e,Cs,l),t(e,kn,l),y(_s,e,l),t(e,vn,l),y(gs,e,l),t(e,Rn,l),t(e,Gs,l),t(e,Xn,l),y(Bs,e,l),t(e,zn,l),t(e,Zs,l),t(e,Wn,l),y(Fe,e,l),t(e,$n,l),y(ks,e,l),t(e,Vn,l),t(e,Ps,l),xn=!0},p(e,[l]){const Ka={};l&1&&(Ka.fw=e[0]),_.$set(Ka);let An=k;k=Wa(e),k!==An&&(Ze(),p(vs[An],1,1,()=>{vs[An]=null}),Be(),Z=vs[k],Z||(Z=vs[k]=za[k](e),Z.c()),M(Z,1),Z.m(j.parentNode,j));const Pa={};l&2&&(Pa.$$scope={dirty:l,ctx:e}),pe.$set(Pa);let En=H;H=Va(e),H!==En&&(Ze(),p(Rs[En],1,1,()=>{Rs[En]=null}),Be(),N=Rs[H],N||(N=Rs[H]=$a[H](e),N.c()),M(N,1),N.m(ue.parentNode,ue));let Yn=de;de=Na(e),de!==Yn&&(Ze(),p(Xs[Yn],1,1,()=>{Xs[Yn]=null}),Be(),ce=Xs[de],ce||(ce=Xs[de]=xa[de](e),ce.c()),M(ce,1),ce.m(Ns.parentNode,Ns));const Oa={};l&2&&(Oa.$$scope={dirty:l,ctx:e}),xe.$set(Oa);const ei={};l&2&&(ei.$$scope={dirty:l,ctx:e}),Ne.$set(ei);const li={};l&2&&(li.$$scope={dirty:l,ctx:e}),Qe.$set(li);const si={};l&2&&(si.$$scope={dirty:l,ctx:e}),Ae.$set(si),e[0]==="pt"?O||(O=oi(),O.c(),O.m(Qs.parentNode,Qs)):O&&(O.d(1),O=null);let Fn=me;me=Aa(e),me!==Fn&&(Ze(),p(zs[Fn],1,1,()=>{zs[Fn]=null}),Be(),ye=zs[me],ye||(ye=zs[me]=Qa[me](e),ye.c()),M(ye,1),ye.m(As.parentNode,As));const ti={};l&2&&(ti.$$scope={dirty:l,ctx:e}),Ee.$set(ti);let Sn=Je;Je=Ya(e),Je!==Sn&&(Ze(),p(Ws[Sn],1,1,()=>{Ws[Sn]=null}),Be(),Ue=Ws[Je],Ue||(Ue=Ws[Je]=Ea[Je](e),Ue.c()),M(Ue,1),Ue.m(Es.parentNode,Es));let Hn=Te;Te=Sa(e),Te!==Hn&&(Ze(),p($s[Hn],1,1,()=>{$s[Hn]=null}),Be(),we=$s[Te],we||(we=$s[Te]=Fa[Te](e),we.c()),M(we,1),we.m(Ys.parentNode,Ys));let qn=be;be=qa(e),be!==qn&&(Ze(),p(Vs[qn],1,1,()=>{Vs[qn]=null}),Be(),je=Vs[be],je||(je=Vs[be]=Ha[be](e),je.c()),M(je,1),je.m(Fs.parentNode,Fs));let Ln=he;he=Da(e),he!==Ln&&(Ze(),p(xs[Ln],1,1,()=>{xs[Ln]=null}),Be(),fe=xs[he],fe||(fe=xs[he]=La[he](e),fe.c()),M(fe,1),fe.m(Ss.parentNode,Ss)),e[0]==="pt"?Q?l&1&&M(Q,1):(Q=ri(),Q.c(),M(Q,1),Q.m(Hs.parentNode,Hs)):Q&&(Ze(),p(Q,1,1,()=>{Q=null}),Be());const ni={};l&2&&(ni.$$scope={dirty:l,ctx:e}),Ye.$set(ni),e[0]==="pt"?A?l&1&&M(A,1):(A=Mi(),A.c(),M(A,1),A.m(qs.parentNode,qs)):A&&(Ze(),p(A,1,1,()=>{A=null}),Be());const ai={};l&2&&(ai.$$scope={dirty:l,ctx:e}),Fe.$set(ai)},i(e){xn||(M(_.$$.fragment,e),M(v.$$.fragment,e),M(B.$$.fragment,e),M(Z),M(ae.$$.fragment,e),M(pe.$$.fragment,e),M(q.$$.fragment,e),M(N),M(K.$$.fragment,e),M(Ge.$$.fragment,e),M(ce),M(ll.$$.fragment,e),M(tl.$$.fragment,e),M(al.$$.fragment,e),M(il.$$.fragment,e),M(rl.$$.fragment,e),M(Ml.$$.fragment,e),M(xe.$$.fragment,e),M(dl.$$.fragment,e),M(cl.$$.fragment,e),M(Jl.$$.fragment,e),M(Ul.$$.fragment,e),M(bl.$$.fragment,e),M(jl.$$.fragment,e),M(Ne.$$.fragment,e),M(Il.$$.fragment,e),M(Qe.$$.fragment,e),M(_l.$$.fragment,e),M(gl.$$.fragment,e),M(Bl.$$.fragment,e),M(Zl.$$.fragment,e),M(vl.$$.fragment,e),M(Rl.$$.fragment,e),M($l.$$.fragment,e),M(Nl.$$.fragment,e),M(Ql.$$.fragment,e),M(El.$$.fragment,e),M(Yl.$$.fragment,e),M(Sl.$$.fragment,e),M(Hl.$$.fragment,e),M(Ll.$$.fragment,e),M(Kl.$$.fragment,e),M(Ol.$$.fragment,e),M(es.$$.fragment,e),M(Ae.$$.fragment,e),M(ye),M(ns.$$.fragment,e),M(as.$$.fragment,e),M(Ee.$$.fragment,e),M(os.$$.fragment,e),M(rs.$$.fragment,e),M(ps.$$.fragment,e),M(ds.$$.fragment,e),M(Ue),M(ms.$$.fragment,e),M(ys.$$.fragment,e),M(we),M(Us.$$.fragment,e),M(je),M(fe),M(bs.$$.fragment,e),M(Q),M(Ye.$$.fragment,e),M(A),M(hs.$$.fragment,e),M(Is.$$.fragment,e),M(_s.$$.fragment,e),M(gs.$$.fragment,e),M(Bs.$$.fragment,e),M(Fe.$$.fragment,e),M(ks.$$.fragment,e),xn=!0)},o(e){p(_.$$.fragment,e),p(v.$$.fragment,e),p(B.$$.fragment,e),p(Z),p(ae.$$.fragment,e),p(pe.$$.fragment,e),p(q.$$.fragment,e),p(N),p(K.$$.fragment,e),p(Ge.$$.fragment,e),p(ce),p(ll.$$.fragment,e),p(tl.$$.fragment,e),p(al.$$.fragment,e),p(il.$$.fragment,e),p(rl.$$.fragment,e),p(Ml.$$.fragment,e),p(xe.$$.fragment,e),p(dl.$$.fragment,e),p(cl.$$.fragment,e),p(Jl.$$.fragment,e),p(Ul.$$.fragment,e),p(bl.$$.fragment,e),p(jl.$$.fragment,e),p(Ne.$$.fragment,e),p(Il.$$.fragment,e),p(Qe.$$.fragment,e),p(_l.$$.fragment,e),p(gl.$$.fragment,e),p(Bl.$$.fragment,e),p(Zl.$$.fragment,e),p(vl.$$.fragment,e),p(Rl.$$.fragment,e),p($l.$$.fragment,e),p(Nl.$$.fragment,e),p(Ql.$$.fragment,e),p(El.$$.fragment,e),p(Yl.$$.fragment,e),p(Sl.$$.fragment,e),p(Hl.$$.fragment,e),p(Ll.$$.fragment,e),p(Kl.$$.fragment,e),p(Ol.$$.fragment,e),p(es.$$.fragment,e),p(Ae.$$.fragment,e),p(ye),p(ns.$$.fragment,e),p(as.$$.fragment,e),p(Ee.$$.fragment,e),p(os.$$.fragment,e),p(rs.$$.fragment,e),p(ps.$$.fragment,e),p(ds.$$.fragment,e),p(Ue),p(ms.$$.fragment,e),p(ys.$$.fragment,e),p(we),p(Us.$$.fragment,e),p(je),p(fe),p(bs.$$.fragment,e),p(Q),p(Ye.$$.fragment,e),p(A),p(hs.$$.fragment,e),p(Is.$$.fragment,e),p(_s.$$.fragment,e),p(gs.$$.fragment,e),p(Bs.$$.fragment,e),p(Fe.$$.fragment,e),p(ks.$$.fragment,e),xn=!1},d(e){e&&(s(d),s(a),s(u),s(w),s(R),s(X),s(j),s(g),s(x),s(I),s(Y),s(G),s(le),s(ee),s(Le),s(se),s(ke),s($),s(ve),s(V),s(te),s(_e),s(ne),s(ie),s(Re),s(Xe),s(L),s(ze),s(S),s(oe),s(re),s(Oe),s(ue),s(D),s(We),s($e),s(P),s(Me),s(Ve),s(r),s(Os),s(Ns),s(et),s(sl),s(lt),s(st),s(nl),s(tt),s(nt),s(at),s(ol),s(it),s(ot),s(rt),s(pl),s(Mt),s(pt),s(ul),s(ut),s(dt),s(ct),s(ml),s(mt),s(yl),s(yt),s(Jt),s(Ut),s(Tl),s(Tt),s(wl),s(wt),s(bt),s(jt),s(hl),s(ht),s(ft),s(fl),s(It),s(Ct),s(_t),s(Cl),s(gt),s(Gt),s(Bt),s(Gl),s(Zt),s(kt),s(vt),s(kl),s(Rt),s(Xt),s(zt),s(Xl),s(Wt),s(zl),s($t),s(Wl),s(Vt),s(xt),s(Vl),s(Nt),s(xl),s(Qt),s(At),s(Et),s(Al),s(Yt),s(Ft),s(St),s(Fl),s(Ht),s(qt),s(Lt),s(ql),s(Dt),s(Kt),s(Dl),s(Pt),s(Ot),s(Pl),s(en),s(ln),s(sn),s(ls),s(tn),s(nn),s(Qs),s(ss),s(an),s(As),s(ts),s(on),s(rn),s(Mn),s(pn),s(is),s(un),s(dn),s(cn),s(Ms),s(mn),s(yn),s(us),s(Jn),s(Un),s(cs),s(Tn),s(Es),s(wn),s(bn),s(Js),s(jn),s(Ys),s(hn),s(Ts),s(fn),s(Fs),s(ws),s(In),s(Ss),s(Cn),s(js),s(_n),s(Hs),s(gn),s(qs),s(Gn),s(fs),s(Bn),s(Zn),s(Cs),s(kn),s(vn),s(Rn),s(Gs),s(Xn),s(zn),s(Zs),s(Wn),s($n),s(Vn),s(Ps)),s(n),J(_,e),J(v,e),J(B,e),vs[k].d(e),J(ae,e),J(pe,e),J(q,e),Rs[H].d(e),J(K,e),J(Ge,e),Xs[de].d(e),J(ll,e),J(tl,e),J(al,e),J(il,e),J(rl,e),J(Ml,e),J(xe,e),J(dl,e),J(cl,e),J(Jl,e),J(Ul,e),J(bl,e),J(jl,e),J(Ne,e),J(Il,e),J(Qe,e),J(_l,e),J(gl,e),J(Bl,e),J(Zl,e),J(vl,e),J(Rl,e),J($l,e),J(Nl,e),J(Ql,e),J(El,e),J(Yl,e),J(Sl,e),J(Hl,e),J(Ll,e),J(Kl,e),J(Ol,e),J(es,e),J(Ae,e),O&&O.d(e),zs[me].d(e),J(ns,e),J(as,e),J(Ee,e),J(os,e),J(rs,e),J(ps,e),J(ds,e),Ws[Je].d(e),J(ms,e),J(ys,e),$s[Te].d(e),J(Us,e),Vs[be].d(e),xs[he].d(e),J(bs,e),Q&&Q.d(e),J(Ye,e),A&&A.d(e),J(hs,e),J(Is,e),J(_s,e),J(gs,e),J(Bs,e),J(Fe,e),J(ks,e)}}}const Fi='{"title":"<i> Finetuner </i> un modèle de langage masqué","local":"i-finetuner-i-un-modèle-de-langage-masqué","sections":[{"title":"Choix d’un modèle pré-entraîné pour la modélisation du langage masqué","local":"choix-dun-modèle-pré-entraîné-pour-la-modélisation-du-langage-masqué","sections":[],"depth":2},{"title":"Le jeu de données","local":"le-jeu-de-données","sections":[],"depth":2},{"title":"Prétraitement des données","local":"prétraitement-des-données","sections":[],"depth":2},{"title":"<i> Finetuning </i> de DistilBERT avec l’API Trainer","local":"i-finetuning-i-de-distilbert-avec-lapi-trainer","sections":[{"title":"Perplexité pour les modèles de langage","local":"perplexité-pour-les-modèles-de-langage","sections":[],"depth":3}],"depth":2},{"title":"<i> Finetuning </i> de DistilBERT avec 🤗 <i> Accelerate </i>","local":"i-finetuning-i-de-distilbert-avec--i-accelerate-i","sections":[{"title":"Utilisation de notre modèle <i> finetuné </i>","local":"utilisation-de-notre-modèle-i-finetuné-i","sections":[],"depth":3}],"depth":2}],"depth":1}';function Si(f,n,d){let a="pt";return di(()=>{const u=new URLSearchParams(window.location.search);d(0,a=u.get("fw")||"pt")}),[a]}class lo extends ci{constructor(n){super(),mi(this,n,Si,Yi,ui,{})}}export{lo as component};
