import{s as BM,f as kM,o as gM,n as Ll}from"../chunks/scheduler.37c15a92.js";import{S as RM,i as XM,g as T,s as M,r as w,A as WM,h as c,f as e,c as p,j as Mn,u as d,x as o,k as fl,y as $M,a as t,v as m,t as J,b as kl,d as y,w as j,p as gl}from"../chunks/index.7cb9c9b8.js";import{T as Sl}from"../chunks/Tip.d10b3fc9.js";import{Y as Ka}from"../chunks/Youtube.8666c400.js";import{C as h}from"../chunks/CodeBlock.a6d3f852.js";import{C as ZM}from"../chunks/CourseFloatingBanner.2c4a7381.js";import{F as VM}from"../chunks/FrameworkSwitchCourse.97630871.js";import{H as Hl,E as zM}from"../chunks/EditOnGithub.858acfec.js";function NM(I){let a,r;return a=new ZM({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/ja/chapter7/section3_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ja/chapter7/section3_tf.ipynb"}]}}),{c(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function AM(I){let a,r;return a=new ZM({props:{chapter:7,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/ja/chapter7/section3_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ja/chapter7/section3_pt.ipynb"}]}}),{c(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function xM(I){let a,r='🙋 「マスク言語モデリング」や「事前学習済みモデル」という言葉に聞き覚えがない方は、<a href="/course/ja/chapter1">第1章</a>でこれらの主要な概念をすべて動画付きで説明していますので、ぜひご覧になってください。';return{c(){a=T("p"),a.innerHTML=r},l(n){a=c(n,"P",{"data-svelte-h":!0}),o(a)!=="svelte-1lh61dn"&&(a.innerHTML=r)},m(n,U){t(n,a,U)},p:Ll,d(n){n&&e(a)}}}function QM(I){let a,r="それでは、<code>AutoModelForMaskedLM</code>クラスを使ってDistilBERTをダウンロードしてみましょう。",n,U,G,u,R="このモデルがいくつのパラメータを持っているかは、<code>summary()</code> メソッドを呼び出すことで確認することができます。",W,_,X,g,k;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}}),_=new h({props:{code:"bW9kZWwobW9kZWwuZHVtbXlfaW5wdXRzKSUyMCUyMCUyMyUyMEJ1aWxkJTIwdGhlJTIwbW9kZWwlMEFtb2RlbC5zdW1tYXJ5KCk=",highlighted:`model(model.dummy_inputs)  <span class="hljs-comment"># Build the model</span>
model.summary()`,wrap:!1}}),g=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(){a=T("p"),a.innerHTML=r,n=M(),w(U.$$.fragment),G=M(),u=T("p"),u.innerHTML=R,W=M(),w(_.$$.fragment),X=M(),w(g.$$.fragment)},l(b){a=c(b,"P",{"data-svelte-h":!0}),o(a)!=="svelte-1uz29vk"&&(a.innerHTML=r),n=p(b),d(U.$$.fragment,b),G=p(b),u=c(b,"P",{"data-svelte-h":!0}),o(u)!=="svelte-1b1oh45"&&(u.innerHTML=R),W=p(b),d(_.$$.fragment,b),X=p(b),d(g.$$.fragment,b)},m(b,Z){t(b,a,Z),t(b,n,Z),m(U,b,Z),t(b,G,Z),t(b,u,Z),t(b,W,Z),m(_,b,Z),t(b,X,Z),m(g,b,Z),k=!0},i(b){k||(y(U.$$.fragment,b),y(_.$$.fragment,b),y(g.$$.fragment,b),k=!0)},o(b){J(U.$$.fragment,b),J(_.$$.fragment,b),J(g.$$.fragment,b),k=!1},d(b){b&&(e(a),e(n),e(G),e(u),e(W),e(X)),j(U,b),j(_,b),j(g,b)}}}function vM(I){let a,r="それでは、<code>AutoModelForMaskedLM</code>クラスを使ってDistilBERTをダウンロードしてみましょう。",n,U,G,u,R="このモデルがいくつのパラメータを持っているかは、<code>num_parameters()</code> メソッドを呼び出すことで確認することができます。",W,_,X,g,k;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}}),_=new h({props:{code:"ZGlzdGlsYmVydF9udW1fcGFyYW1ldGVycyUyMCUzRCUyMG1vZGVsLm51bV9wYXJhbWV0ZXJzKCklMjAlMkYlMjAxXzAwMF8wMDAlMEFwcmludChmJTIyJyUzRSUzRSUzRSUyMERpc3RpbEJFUlQlMjBudW1iZXIlMjBvZiUyMHBhcmFtZXRlcnMlM0ElMjAlN0Jyb3VuZChkaXN0aWxiZXJ0X251bV9wYXJhbWV0ZXJzKSU3RE0nJTIyKSUwQXByaW50KGYlMjInJTNFJTNFJTNFJTIwQkVSVCUyMG51bWJlciUyMG9mJTIwcGFyYW1ldGVycyUzQSUyMDExME0nJTIyKQ==",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 number of parameters: <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 number of parameters: 110M&#x27;&quot;</span>)`,wrap:!1}}),g=new h({props:{code:"JyUzRSUzRSUzRSUyMERpc3RpbEJFUlQlMjBudW1iZXIlMjBvZiUyMHBhcmFtZXRlcnMlM0ElMjA2N00nJTBBJyUzRSUzRSUzRSUyMEJFUlQlMjBudW1iZXIlMjBvZiUyMHBhcmFtZXRlcnMlM0ElMjAxMTBNJw==",highlighted:`<span class="hljs-string">&#x27;&gt;&gt;&gt; DistilBERT number of parameters: 67M&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; BERT number of parameters: 110M&#x27;</span>`,wrap:!1}}),{c(){a=T("p"),a.innerHTML=r,n=M(),w(U.$$.fragment),G=M(),u=T("p"),u.innerHTML=R,W=M(),w(_.$$.fragment),X=M(),w(g.$$.fragment)},l(b){a=c(b,"P",{"data-svelte-h":!0}),o(a)!=="svelte-1uz29vk"&&(a.innerHTML=r),n=p(b),d(U.$$.fragment,b),G=p(b),u=c(b,"P",{"data-svelte-h":!0}),o(u)!=="svelte-1t2aymq"&&(u.innerHTML=R),W=p(b),d(_.$$.fragment,b),X=p(b),d(g.$$.fragment,b)},m(b,Z){t(b,a,Z),t(b,n,Z),m(U,b,Z),t(b,G,Z),t(b,u,Z),t(b,W,Z),m(_,b,Z),t(b,X,Z),m(g,b,Z),k=!0},i(b){k||(y(U.$$.fragment,b),y(_.$$.fragment,b),y(g.$$.fragment,b),k=!0)},o(b){J(U.$$.fragment,b),J(_.$$.fragment,b),J(g.$$.fragment,b),k=!1},d(b){b&&(e(a),e(n),e(G),e(u),e(W),e(X)),j(U,b),j(_,b),j(g,b)}}}function YM(I){let a,r;return a=new h({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIodGV4dCUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIybnAlMjIpJTBBdG9rZW5fbG9naXRzJTIwJTNEJTIwbW9kZWwoKippbnB1dHMpLmxvZ2l0cyUwQSUyMyUyMEZpbmQlMjB0aGUlMjBsb2NhdGlvbiUyMG9mJTIwJTVCTUFTSyU1RCUyMGFuZCUyMGV4dHJhY3QlMjBpdHMlMjBsb2dpdHMlMEFtYXNrX3Rva2VuX2luZGV4JTIwJTNEJTIwbnAuYXJnd2hlcmUoaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTIwJTNEJTNEJTIwdG9rZW5pemVyLm1hc2tfdG9rZW5faWQpJTVCMCUyQyUyMDElNUQlMEFtYXNrX3Rva2VuX2xvZ2l0cyUyMCUzRCUyMHRva2VuX2xvZ2l0cyU1QjAlMkMlMjBtYXNrX3Rva2VuX2luZGV4JTJDJTIwJTNBJTVEJTBBJTIzJTIwUGljayUyMHRoZSUyMCU1Qk1BU0slNUQlMjBjYW5kaWRhdGVzJTIwd2l0aCUyMHRoZSUyMGhpZ2hlc3QlMjBsb2dpdHMlMEElMjMlMjBXZSUyMG5lZ2F0ZSUyMHRoZSUyMGFycmF5JTIwYmVmb3JlJTIwYXJnc29ydCUyMHRvJTIwZ2V0JTIwdGhlJTIwbGFyZ2VzdCUyQyUyMG5vdCUyMHRoZSUyMHNtYWxsZXN0JTJDJTIwbG9naXRzJTBBdG9wXzVfdG9rZW5zJTIwJTNEJTIwbnAuYXJnc29ydCgtbWFza190b2tlbl9sb2dpdHMpJTVCJTNBNSU1RC50b2xpc3QoKSUwQSUwQWZvciUyMHRva2VuJTIwaW4lMjB0b3BfNV90b2tlbnMlM0ElMEElMjAlMjAlMjAlMjBwcmludChmJTIyJTNFJTNFJTNFJTIwJTdCdGV4dC5yZXBsYWNlKHRva2VuaXplci5tYXNrX3Rva2VuJTJDJTIwdG9rZW5pemVyLmRlY29kZSglNUJ0b2tlbiU1RCkpJTdEJTIyKQ==",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"># Find the location of [MASK] and extract its 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"># Pick the [MASK] candidates with the highest logits</span>
<span class="hljs-comment"># We negate the array before argsort to get the largest, not the smallest, 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(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function FM(I){let a,r;return a=new h({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIodGV4dCUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIpJTBBdG9rZW5fbG9naXRzJTIwJTNEJTIwbW9kZWwoKippbnB1dHMpLmxvZ2l0cyUwQSUyMyUyMEZpbmQlMjB0aGUlMjBsb2NhdGlvbiUyMG9mJTIwJTVCTUFTSyU1RCUyMGFuZCUyMGV4dHJhY3QlMjBpdHMlMjBsb2dpdHMlMEFtYXNrX3Rva2VuX2luZGV4JTIwJTNEJTIwdG9yY2gud2hlcmUoaW5wdXRzJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTIwJTNEJTNEJTIwdG9rZW5pemVyLm1hc2tfdG9rZW5faWQpJTVCMSU1RCUwQW1hc2tfdG9rZW5fbG9naXRzJTIwJTNEJTIwdG9rZW5fbG9naXRzJTVCMCUyQyUyMG1hc2tfdG9rZW5faW5kZXglMkMlMjAlM0ElNUQlMEElMjMlMjBQaWNrJTIwdGhlJTIwJTVCTUFTSyU1RCUyMGNhbmRpZGF0ZXMlMjB3aXRoJTIwdGhlJTIwaGlnaGVzdCUyMGxvZ2l0cyUwQXRvcF81X3Rva2VucyUyMCUzRCUyMHRvcmNoLnRvcGsobWFza190b2tlbl9sb2dpdHMlMkMlMjA1JTJDJTIwZGltJTNEMSkuaW5kaWNlcyU1QjAlNUQudG9saXN0KCklMEElMEFmb3IlMjB0b2tlbiUyMGluJTIwdG9wXzVfdG9rZW5zJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMiclM0UlM0UlM0UlMjAlN0J0ZXh0LnJlcGxhY2UodG9rZW5pemVyLm1hc2tfdG9rZW4lMkMlMjB0b2tlbml6ZXIuZGVjb2RlKCU1QnRva2VuJTVEKSklN0QnJTIyKQ==",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"># Find the location of [MASK] and extract its 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"># Pick the [MASK] candidates with the highest logits</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(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function EM(I){let a,r="✏️ <strong>挑戦してみましょう！</strong> <code>unsupervised</code> のラベルがついた分割データのランダムサンプルを作成し、ラベルが <code>0</code> や <code>1</code> でないことを確認してみましょう。また、<code>train</code> と <code>test</code> 用の分割データのラベルが本当に <code>0</code> か <code>1</code> のみかを確認することもできます。これはすべての自然言語処理の実践者が新しいプロジェクトの開始時に実行すべき、有用なサニティチェックです!";return{c(){a=T("p"),a.innerHTML=r},l(n){a=c(n,"P",{"data-svelte-h":!0}),o(a)!=="svelte-jeq003"&&(a.innerHTML=r)},m(n,U){t(n,a,U)},p:Ll,d(n){n&&e(a)}}}function SM(I){let a,r='✏️ <strong>あなたの番です！</strong> <a href="https://huggingface.co/google/bigbird-roberta-base" rel="nofollow">BigBird</a> や <a href="hf.co/allenai/longformer-base-4096">Longformer</a> などのいくつかの Transformer モデルは、BERT や他の初期の Transformer モデルよりずっと長いコンテキスト長を持っています。これらのチェックポイントのトークナイザーをインスタンス化して、<code>model_max_length</code> がそのモデルカード内に記載されているものと一致することを検証してください。';return{c(){a=T("p"),a.innerHTML=r},l(n){a=c(n,"P",{"data-svelte-h":!0}),o(a)!=="svelte-1gfq4q7"&&(a.innerHTML=r)},m(n,U){t(n,a,U)},p:Ll,d(n){n&&e(a)}}}function HM(I){let a,r="なお、小さな断片サイズを使用すると、実際のシナリオでは不利になることがあるので、モデルを適用するユースケースに対応したサイズを使用する必要があります。";return{c(){a=T("p"),a.textContent=r},l(n){a=c(n,"P",{"data-svelte-h":!0}),o(a)!=="svelte-8a79cx"&&(a.textContent=r)},m(n,U){t(n,a,U)},p:Ll,d(n){n&&e(a)}}}function LM(I){let a,r="✏️ <strong>あなたの番です！</strong> 上のコードを何度か実行して、ランダムなマスキングがあなたの目の前で起こるのを見ましょう! また、<code>tokenizer.decode()</code> メソッドを <code>tokenizer.convert_ids_to_tokens()</code> に置き換えると、与えた単語内から一つのトークンが選択されてマスクされ、他の単語がマスクされないことを見ることができます。";return{c(){a=T("p"),a.innerHTML=r},l(n){a=c(n,"P",{"data-svelte-h":!0}),o(a)!=="svelte-15u8t6c"&&(a.innerHTML=r)},m(n,U){t(n,a,U)},p:Ll,d(n){n&&e(a)}}}function CM(I){let a,r=`ランダムマスキングの副作用として、<code>Trainer</code>を使用する場合、評価指標が確定的でなくなることが挙げられます。
これはトレーニングセットとテストセットに同じデータコレーターを使用するためです。後ほど、🤗 Accelerateで微調整を行う際に、カスタム評価ループの柔軟性を利用してランダム性をなくす方法について説明します。`;return{c(){a=T("p"),a.innerHTML=r},l(n){a=c(n,"P",{"data-svelte-h":!0}),o(a)!=="svelte-xo3i6d"&&(a.innerHTML=r)},m(n,U){t(n,a,U)},d(n){n&&e(a)}}}function qM(I){let a,r;return a=new h({props:{code:"aW1wb3J0JTIwY29sbGVjdGlvbnMlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEElMEFmcm9tJTIwdHJhbnNmb3JtZXJzLmRhdGEuZGF0YV9jb2xsYXRvciUyMGltcG9ydCUyMHRmX2RlZmF1bHRfZGF0YV9jb2xsYXRvciUwQSUwQXd3bV9wcm9iYWJpbGl0eSUyMCUzRCUyMDAuMiUwQSUwQSUwQWRlZiUyMHdob2xlX3dvcmRfbWFza2luZ19kYXRhX2NvbGxhdG9yKGZlYXR1cmVzKSUzQSUwQSUyMCUyMCUyMCUyMGZvciUyMGZlYXR1cmUlMjBpbiUyMGZlYXR1cmVzJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd29yZF9pZHMlMjAlM0QlMjBmZWF0dXJlLnBvcCglMjJ3b3JkX2lkcyUyMiklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBDcmVhdGUlMjBhJTIwbWFwJTIwYmV0d2VlbiUyMHdvcmRzJTIwYW5kJTIwY29ycmVzcG9uZGluZyUyMHRva2VuJTIwaW5kaWNlcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1hcHBpbmclMjAlM0QlMjBjb2xsZWN0aW9ucy5kZWZhdWx0ZGljdChsaXN0KSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGN1cnJlbnRfd29yZF9pbmRleCUyMCUzRCUyMC0xJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY3VycmVudF93b3JkJTIwJTNEJTIwTm9uZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGlkeCUyQyUyMHdvcmRfaWQlMjBpbiUyMGVudW1lcmF0ZSh3b3JkX2lkcyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHdvcmRfaWQlMjBpcyUyMG5vdCUyME5vbmUlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHdvcmRfaWQlMjAhJTNEJTIwY3VycmVudF93b3JkJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY3VycmVudF93b3JkJTIwJTNEJTIwd29yZF9pZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGN1cnJlbnRfd29yZF9pbmRleCUyMCUyQiUzRCUyMDElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXBwaW5nJTVCY3VycmVudF93b3JkX2luZGV4JTVELmFwcGVuZChpZHgpJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwUmFuZG9tbHklMjBtYXNrJTIwd29yZHMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtYXNrJTIwJTNEJTIwbnAucmFuZG9tLmJpbm9taWFsKDElMkMlMjB3d21fcHJvYmFiaWxpdHklMkMlMjAobGVuKG1hcHBpbmcpJTJDKSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbnB1dF9pZHMlMjAlM0QlMjBmZWF0dXJlJTVCJTIyaW5wdXRfaWRzJTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwZmVhdHVyZSU1QiUyMmxhYmVscyUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG5ld19sYWJlbHMlMjAlM0QlMjAlNUItMTAwJTVEJTIwKiUyMGxlbihsYWJlbHMpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwd29yZF9pZCUyMGluJTIwbnAud2hlcmUobWFzayklNUIwJTVEJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd29yZF9pZCUyMCUzRCUyMHdvcmRfaWQuaXRlbSgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwaWR4JTIwaW4lMjBtYXBwaW5nJTVCd29yZF9pZCU1RCUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG5ld19sYWJlbHMlNUJpZHglNUQlMjAlM0QlMjBsYWJlbHMlNUJpZHglNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpbnB1dF9pZHMlNUJpZHglNUQlMjAlM0QlMjB0b2tlbml6ZXIubWFza190b2tlbl9pZCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmUlNUIlMjJsYWJlbHMlMjIlNUQlMjAlM0QlMjBuZXdfbGFiZWxzJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdGZfZGVmYXVsdF9kYXRhX2NvbGxhdG9yKGZlYXR1cmVzKQ==",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"># Create a map between words and corresponding token indices</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"># Randomly mask words</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(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function DM(I){let a,r;return a=new h({props:{code:"aW1wb3J0JTIwY29sbGVjdGlvbnMlMEFpbXBvcnQlMjBudW1weSUyMGFzJTIwbnAlMEElMEFmcm9tJTIwdHJhbnNmb3JtZXJzJTIwaW1wb3J0JTIwZGVmYXVsdF9kYXRhX2NvbGxhdG9yJTBBJTBBd3dtX3Byb2JhYmlsaXR5JTIwJTNEJTIwMC4yJTBBJTBBJTBBZGVmJTIwd2hvbGVfd29yZF9tYXNraW5nX2RhdGFfY29sbGF0b3IoZmVhdHVyZXMpJTNBJTBBJTIwJTIwJTIwJTIwZm9yJTIwZmVhdHVyZSUyMGluJTIwZmVhdHVyZXMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3b3JkX2lkcyUyMCUzRCUyMGZlYXR1cmUucG9wKCUyMndvcmRfaWRzJTIyKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyMENyZWF0ZSUyMGElMjBtYXAlMjBiZXR3ZWVuJTIwd29yZHMlMjBhbmQlMjBjb3JyZXNwb25kaW5nJTIwdG9rZW4lMjBpbmRpY2VzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbWFwcGluZyUyMCUzRCUyMGNvbGxlY3Rpb25zLmRlZmF1bHRkaWN0KGxpc3QpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY3VycmVudF93b3JkX2luZGV4JTIwJTNEJTIwLTElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjdXJyZW50X3dvcmQlMjAlM0QlMjBOb25lJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwaWR4JTJDJTIwd29yZF9pZCUyMGluJTIwZW51bWVyYXRlKHdvcmRfaWRzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwd29yZF9pZCUyMGlzJTIwbm90JTIwTm9uZSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlmJTIwd29yZF9pZCUyMCElM0QlMjBjdXJyZW50X3dvcmQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjdXJyZW50X3dvcmQlMjAlM0QlMjB3b3JkX2lkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY3VycmVudF93b3JkX2luZGV4JTIwJTJCJTNEJTIwMSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1hcHBpbmclNUJjdXJyZW50X3dvcmRfaW5kZXglNUQuYXBwZW5kKGlkeCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBSYW5kb21seSUyMG1hc2slMjB3b3JkcyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG1hc2slMjAlM0QlMjBucC5yYW5kb20uYmlub21pYWwoMSUyQyUyMHd3bV9wcm9iYWJpbGl0eSUyQyUyMChsZW4obWFwcGluZyklMkMpKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlucHV0X2lkcyUyMCUzRCUyMGZlYXR1cmUlNUIlMjJpbnB1dF9pZHMlMjIlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBmZWF0dXJlJTVCJTIybGFiZWxzJTIyJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmV3X2xhYmVscyUyMCUzRCUyMCU1Qi0xMDAlNUQlMjAqJTIwbGVuKGxhYmVscyklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjB3b3JkX2lkJTIwaW4lMjBucC53aGVyZShtYXNrKSU1QjAlNUQlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3b3JkX2lkJTIwJTNEJTIwd29yZF9pZC5pdGVtKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBpZHglMjBpbiUyMG1hcHBpbmclNUJ3b3JkX2lkJTVEJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmV3X2xhYmVscyU1QmlkeCU1RCUyMCUzRCUyMGxhYmVscyU1QmlkeCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGlucHV0X2lkcyU1QmlkeCU1RCUyMCUzRCUyMHRva2VuaXplci5tYXNrX3Rva2VuX2lkJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmVhdHVyZSU1QiUyMmxhYmVscyUyMiU1RCUyMCUzRCUyMG5ld19sYWJlbHMlMEElMEElMjAlMjAlMjAlMjByZXR1cm4lMjBkZWZhdWx0X2RhdGFfY29sbGF0b3IoZmVhdHVyZXMp",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"># Create a map between words and corresponding token indices</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"># Randomly mask words</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(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function KM(I){let a,r="✏️ <strong>あなたの番です！</strong> 上のコードを何度か実行して、ランダムなマスキングがあなたの目の前で起こるのを見ましょう! また、<code>tokenizer.decode()</code> メソッドを <code>tokenizer.convert_ids_to_tokens()</code> に置き換えると、与えられた単語からのトークンが常に一緒にマスクされることを確認できます。";return{c(){a=T("p"),a.innerHTML=r},l(n){a=c(n,"P",{"data-svelte-h":!0}),o(a)!=="svelte-n4bxv0"&&(a.innerHTML=r)},m(n,U){t(n,a,U)},p:Ll,d(n){n&&e(a)}}}function PM(I){let a,r="一度ログインしたら、<code>Trainer</code> の引数を指定できます。",n,U,G,u,R="ここでは、各エポックでの学習損失を確実に追跡するために <code>logging_steps</code> を含むデフォルトのオプションを少し調整しました。また、 <code>fp16=True</code> を使用して、混合精度の学習を有効にし、さらに高速化しました。デフォルトでは、 <code>Trainer</code> はモデルの <code>forward()</code> メソッドに含まれない列をすべて削除します。つまり、全単語マスク用のデータコレーターを使用している場合は、 <code>remove_unused_columns=False</code> を設定して、学習時に <code>word_ids</code> カラムが失われないようにする必要があります。",W,_,X='なお、 <code>hub_model_id</code> 引数でプッシュ先のリポジトリ名を指定することができます (特に、組織にプッシュする場合はこの引数を使用する必要があります)。例えば、モデルを <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code> organization</a> にプッシュする場合、 <code>TrainingArguments</code> に <code>hub_model_id=&quot;huggingface-course/distilbert-finetuned-imdb&quot;</code> を追加しています。デフォルトでは、使用するリポジトリはあなたの名前空間内にあり、設定した出力ディレクトリにちなんだ名前になるので、私たちの場合は <code>&quot;lewtun/distilbert-finetuned-imdb&quot;</code> となります。',g,k,b="これで <code>Trainer</code> のインスタンスを作成するための材料が揃いました。ここでは、標準的な <code>data_collator</code> を使用しますが、練習として全単語マスキングのデータコレーターを試して、結果を比較することができます。",Z,z,v,C,$="これで <code>trainer.train()</code> を実行する準備ができました。しかしその前に、言語モデルの性能を評価する一般的な指標である <em>パープレキシティ</em> について簡単に見ておきましょう。",E;return U=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBYmF0Y2hfc2l6ZSUyMCUzRCUyMDY0JTBBJTIzJTIwU2hvdyUyMHRoZSUyMHRyYWluaW5nJTIwbG9zcyUyMHdpdGglMjBldmVyeSUyMGVwb2NoJTBBbG9nZ2luZ19zdGVwcyUyMCUzRCUyMGxlbihkb3duc2FtcGxlZF9kYXRhc2V0JTVCJTIydHJhaW4lMjIlNUQpJTIwJTJGJTJGJTIwYmF0Y2hfc2l6ZSUwQW1vZGVsX25hbWUlMjAlM0QlMjBtb2RlbF9jaGVja3BvaW50LnNwbGl0KCUyMiUyRiUyMiklNUItMSU1RCUwQSUwQXRyYWluaW5nX2FyZ3MlMjAlM0QlMjBUcmFpbmluZ0FyZ3VtZW50cyglMEElMjAlMjAlMjAlMjBvdXRwdXRfZGlyJTNEZiUyMiU3Qm1vZGVsX25hbWUlN0QtZmluZXR1bmVkLWltZGIlMjIlMkMlMEElMjAlMjAlMjAlMjBvdmVyd3JpdGVfb3V0cHV0X2RpciUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBldmFsdWF0aW9uX3N0cmF0ZWd5JTNEJTIyZXBvY2glMjIlMkMlMEElMjAlMjAlMjAlMjBsZWFybmluZ19yYXRlJTNEMmUtNSUyQyUwQSUyMCUyMCUyMCUyMHdlaWdodF9kZWNheSUzRDAuMDElMkMlMEElMjAlMjAlMjAlMjBwZXJfZGV2aWNlX3RyYWluX2JhdGNoX3NpemUlM0RiYXRjaF9zaXplJTJDJTBBJTIwJTIwJTIwJTIwcGVyX2RldmljZV9ldmFsX2JhdGNoX3NpemUlM0RiYXRjaF9zaXplJTJDJTBBJTIwJTIwJTIwJTIwcHVzaF90b19odWIlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwZnAxNiUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBsb2dnaW5nX3N0ZXBzJTNEbG9nZ2luZ19zdGVwcyUyQyUwQSk=",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"># Show the training loss with every epoch</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}}),z=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(){a=T("p"),a.innerHTML=r,n=M(),w(U.$$.fragment),G=M(),u=T("p"),u.innerHTML=R,W=M(),_=T("p"),_.innerHTML=X,g=M(),k=T("p"),k.innerHTML=b,Z=M(),w(z.$$.fragment),v=M(),C=T("p"),C.innerHTML=$},l(B){a=c(B,"P",{"data-svelte-h":!0}),o(a)!=="svelte-1mtebr7"&&(a.innerHTML=r),n=p(B),d(U.$$.fragment,B),G=p(B),u=c(B,"P",{"data-svelte-h":!0}),o(u)!=="svelte-17f07u2"&&(u.innerHTML=R),W=p(B),_=c(B,"P",{"data-svelte-h":!0}),o(_)!=="svelte-1hgmf57"&&(_.innerHTML=X),g=p(B),k=c(B,"P",{"data-svelte-h":!0}),o(k)!=="svelte-jl7f68"&&(k.innerHTML=b),Z=p(B),d(z.$$.fragment,B),v=p(B),C=c(B,"P",{"data-svelte-h":!0}),o(C)!=="svelte-1diwucr"&&(C.innerHTML=$)},m(B,V){t(B,a,V),t(B,n,V),m(U,B,V),t(B,G,V),t(B,u,V),t(B,W,V),t(B,_,V),t(B,g,V),t(B,k,V),t(B,Z,V),m(z,B,V),t(B,v,V),t(B,C,V),E=!0},i(B){E||(y(U.$$.fragment,B),y(z.$$.fragment,B),E=!0)},o(B){J(U.$$.fragment,B),J(z.$$.fragment,B),E=!1},d(B){B&&(e(a),e(n),e(G),e(u),e(W),e(_),e(g),e(k),e(Z),e(v),e(C)),j(U,B),j(z,B)}}}function OM(I){let a,r="一度ログインしたら、<code>tf.data</code>データセットを作成する事ができます。ここでは標準的なデータコレーターを使いますが、練習として全単語マスキングのコレーターを試して結果を比較することも可能です。",n,U,G,u,R="次に、学習用ハイパーパラメータを設定し、モデルをコンパイルします。Transformersライブラリの <code>create_optimizer()</code> 関数を使用し、学習率が線形に減衰する性質を持つ <code>AdamW</code> オプティマイザを使用します。また、モデルの組み込みの損失を使用します。これは <code>compile()</code> の引数に損失が指定されていない場合のデフォルトであり、学習精度は <code>&quot;mixed_float16&quot;</code> に設定されます。Colabで割り当てられたGPUやお使いのGPUがfloat16のサポートをしていない場合は、この行をコメントアウトする必要があります。",W,_,X='さらに、各エポック後にモデルをハブに保存する <code>PushToHubCallback</code> をセットアップします。<code>hub_model_id</code> 引数で、プッシュしたいリポジトリの名前を指定します。（特に、組織を指定してプッシュする場合はこの引数を使用する必要があります）。例えば、モデルを <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code> organization</a> にプッシュするには、 <code>hub_model_id=&quot;huggingface-course/distilbert-finetuned-imdb&quot;</code> を追加しました。デフォルトでは、使用されるリポジトリはあなたの名前空間になり、設定された出力ディレクトリの名前になります。そのため、私達のケースでは<code>&quot;lewtun/distilbert-finetuned-imdb&quot;</code> となるでしょう。',g,k,b,Z,z=`これで <code>model.fit()</code> を実行する準備ができました。
しかし、これを実行する前に言語モデルの性能を評価する一般的な指標である <em>パープレキシティ</em> について簡単に見ておきましょう。`,v;return U=new h({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMGRvd25zYW1wbGVkX2RhdGFzZXQlNUIlMjJ0cmFpbiUyMiU1RC50b190Zl9kYXRhc2V0KCUwQSUyMCUyMCUyMCUyMGNvbHVtbnMlM0QlNUIlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJhdHRlbnRpb25fbWFzayUyMiUyQyUyMCUyMmxhYmVscyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjBiYXRjaF9zaXplJTNEMzIlMkMlMEEpJTBBJTBBdGZfZXZhbF9kYXRhc2V0JTIwJTNEJTIwZG93bnNhbXBsZWRfZGF0YXNldCU1QiUyMnRlc3QlMjIlNUQudG9fdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBjb2x1bW5zJTNEJTVCJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJsYWJlbHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMHNodWZmbGUlM0RGYWxzZSUyQyUwQSUyMCUyMCUyMCUyMGJhdGNoX3NpemUlM0QzMiUyQyUwQSk=",highlighted:`tf_train_dataset = downsampled_dataset[<span class="hljs-string">&quot;train&quot;</span>].to_tf_dataset(
    columns=[<span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">True</span>,
    batch_size=<span class="hljs-number">32</span>,
)

tf_eval_dataset = downsampled_dataset[<span class="hljs-string">&quot;test&quot;</span>].to_tf_dataset(
    columns=[<span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>],
    collate_fn=data_collator,
    shuffle=<span class="hljs-literal">False</span>,
    batch_size=<span class="hljs-number">32</span>,
)`,wrap:!1}}),k=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFmcm9tJTIwdHJhbnNmb3JtZXJzLmtlcmFzX2NhbGxiYWNrcyUyMGltcG9ydCUyMFB1c2hUb0h1YkNhbGxiYWNrJTBBaW1wb3J0JTIwdGVuc29yZmxvdyUyMGFzJTIwdGYlMEElMEFudW1fdHJhaW5fc3RlcHMlMjAlM0QlMjBsZW4odGZfdHJhaW5fZGF0YXNldCklMEFvcHRpbWl6ZXIlMkMlMjBzY2hlZHVsZSUyMCUzRCUyMGNyZWF0ZV9vcHRpbWl6ZXIoJTBBJTIwJTIwJTIwJTIwaW5pdF9sciUzRDJlLTUlMkMlMEElMjAlMjAlMjAlMjBudW1fd2FybXVwX3N0ZXBzJTNEMV8wMDAlMkMlMEElMjAlMjAlMjAlMjBudW1fdHJhaW5fc3RlcHMlM0RudW1fdHJhaW5fc3RlcHMlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfZGVjYXlfcmF0ZSUzRDAuMDElMkMlMEEpJTBBbW9kZWwuY29tcGlsZShvcHRpbWl6ZXIlM0RvcHRpbWl6ZXIpJTBBJTBBJTIzJTIwVHJhaW4lMjBpbiUyMG1peGVkLXByZWNpc2lvbiUyMGZsb2F0MTYlMEF0Zi5rZXJhcy5taXhlZF9wcmVjaXNpb24uc2V0X2dsb2JhbF9wb2xpY3koJTIybWl4ZWRfZmxvYXQxNiUyMiklMEElMEFjYWxsYmFjayUyMCUzRCUyMFB1c2hUb0h1YkNhbGxiYWNrKCUwQSUyMCUyMCUyMCUyMG91dHB1dF9kaXIlM0RmJTIyJTdCbW9kZWxfbmFtZSU3RC1maW5ldHVuZWQtaW1kYiUyMiUyQyUyMHRva2VuaXplciUzRHRva2VuaXplciUwQSk=",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"># Train in mixed-precision float16</span>
tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">&quot;mixed_float16&quot;</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(){a=T("p"),a.innerHTML=r,n=M(),w(U.$$.fragment),G=M(),u=T("p"),u.innerHTML=R,W=M(),_=T("p"),_.innerHTML=X,g=M(),w(k.$$.fragment),b=M(),Z=T("p"),Z.innerHTML=z},l(C){a=c(C,"P",{"data-svelte-h":!0}),o(a)!=="svelte-6sng5g"&&(a.innerHTML=r),n=p(C),d(U.$$.fragment,C),G=p(C),u=c(C,"P",{"data-svelte-h":!0}),o(u)!=="svelte-1g3c7zm"&&(u.innerHTML=R),W=p(C),_=c(C,"P",{"data-svelte-h":!0}),o(_)!=="svelte-28pln9"&&(_.innerHTML=X),g=p(C),d(k.$$.fragment,C),b=p(C),Z=c(C,"P",{"data-svelte-h":!0}),o(Z)!=="svelte-yjinp"&&(Z.innerHTML=z)},m(C,$){t(C,a,$),t(C,n,$),m(U,C,$),t(C,G,$),t(C,u,$),t(C,W,$),t(C,_,$),t(C,g,$),m(k,C,$),t(C,b,$),t(C,Z,$),v=!0},i(C){v||(y(U.$$.fragment,C),y(k.$$.fragment,C),v=!0)},o(C){J(U.$$.fragment,C),J(k.$$.fragment,C),v=!1},d(C){C&&(e(a),e(n),e(G),e(u),e(W),e(_),e(g),e(b),e(Z)),j(U,C),j(k,C)}}}function lp(I){let a,r="テストセットのほとんどが文法的に正しい文章で構成されていると仮定すると、言語モデルの品質を測定する一つの方法は、テストセットのすべての文章で次の単語が正しく割り当てる確率を計算することです。確率が高いということは、モデルが未見の例文に「驚き」「当惑」していないことを示し、その言語の文法の基本パターンを学習していることを示唆しています。パープレキシティには様々な数学的定義がありますが、私達が使うのはクロスエントロピーの損失の指数として定義するものです。したがって、<code>model.evaluate()</code> メソッドを使ってテスト集合のクロスエントロピー損失を計算し、その結果の指数を取ることで事前学習済みモデルのパープレキシティを計算することができるのです。",n,U,G;return U=new h({props:{code:"aW1wb3J0JTIwbWF0aCUwQSUwQWV2YWxfbG9zcyUyMCUzRCUyMG1vZGVsLmV2YWx1YXRlKHRmX2V2YWxfZGF0YXNldCklMEFwcmludChmJTIyUGVycGxleGl0eSUzQSUyMCU3Qm1hdGguZXhwKGV2YWxfbG9zcyklM0EuMmYlN0QlMjIp",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;Perplexity: <span class="hljs-subst">{math.exp(eval_loss):<span class="hljs-number">.2</span>f}</span>&quot;</span>)`,wrap:!1}}),{c(){a=T("p"),a.innerHTML=r,n=M(),w(U.$$.fragment)},l(u){a=c(u,"P",{"data-svelte-h":!0}),o(a)!=="svelte-16sbnmp"&&(a.innerHTML=r),n=p(u),d(U.$$.fragment,u)},m(u,R){t(u,a,R),t(u,n,R),m(U,u,R),G=!0},i(u){G||(y(U.$$.fragment,u),G=!0)},o(u){J(U.$$.fragment,u),G=!1},d(u){u&&(e(a),e(n)),j(U,u)}}}function sp(I){let a,r="テストセットのほとんどが文法的に正しい文であると仮定すると、言語モデルの品質を測る一つの方法は、テストセットのすべての文において、次に出現する単語を正しく割り当てる確率を計算することです。確率が高いということは、モデルが未知の例文に「驚き」や「当惑」を感じていないことを示し、その言語の文法の基本パターンを学習していることを示唆しています。パープレキシティには様々な数学的定義がありますが、私達が使うのはクロスエントロピー損失の指数として定義するものです。したがって、<code>Trainer.evaluate()</code>関数を使ってテスト集合のクロスエントロピー損失を計算し、その結果の指数を取ることで事前学習済みモデルのパープレキシティを計算することができるのです。",n,U,G;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(){a=T("p"),a.innerHTML=r,n=M(),w(U.$$.fragment)},l(u){a=c(u,"P",{"data-svelte-h":!0}),o(a)!=="svelte-evyc8m"&&(a.innerHTML=r),n=p(u),d(U.$$.fragment,u)},m(u,R){t(u,a,R),t(u,n,R),m(U,u,R),G=!0},i(u){G||(y(U.$$.fragment,u),G=!0)},o(u){J(U.$$.fragment,u),G=!1},d(u){u&&(e(a),e(n)),j(U,u)}}}function ep(I){let a,r;return a=new h({props:{code:"bW9kZWwuZml0KHRmX3RyYWluX2RhdGFzZXQlMkMlMjB2YWxpZGF0aW9uX2RhdGElM0R0Zl9ldmFsX2RhdGFzZXQlMkMlMjBjYWxsYmFja3MlM0QlNUJjYWxsYmFjayU1RCk=",highlighted:"model.fit(tf_train_dataset, validation_data=tf_eval_dataset, callbacks=[callback])",wrap:!1}}),{c(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function tp(I){let a,r;return a=new h({props:{code:"dHJhaW5lci50cmFpbigp",highlighted:"trainer.train()",wrap:!1}}),{c(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function ap(I){let a,r;return a=new h({props:{code:"ZXZhbF9sb3NzJTIwJTNEJTIwbW9kZWwuZXZhbHVhdGUodGZfZXZhbF9kYXRhc2V0KSUwQXByaW50KGYlMjJQZXJwbGV4aXR5JTNBJTIwJTdCbWF0aC5leHAoZXZhbF9sb3NzKSUzQS4yZiU3RCUyMik=",highlighted:`eval_loss = model.evaluate(tf_eval_dataset)
<span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;Perplexity: <span class="hljs-subst">{math.exp(eval_loss):<span class="hljs-number">.2</span>f}</span>&quot;</span>)`,wrap:!1}}),{c(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function np(I){let a,r;return a=new h({props:{code:"ZXZhbF9yZXN1bHRzJTIwJTNEJTIwdHJhaW5lci5ldmFsdWF0ZSgpJTBBcHJpbnQoZiUyMiUzRSUzRSUzRSUyMFBlcnBsZXhpdHklM0ElMjAlN0JtYXRoLmV4cChldmFsX3Jlc3VsdHMlNUInZXZhbF9sb3NzJyU1RCklM0EuMmYlN0QlMjIp",highlighted:`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(){w(a.$$.fragment)},l(n){d(a.$$.fragment,n)},m(n,U){m(a,n,U),r=!0},i(n){r||(y(a.$$.fragment,n),r=!0)},o(n){J(a.$$.fragment,n),r=!1},d(n){j(a,n)}}}function _M(I){let a,r="一度、トレーニングが終了したら、トレーニング情報が入ったモデルカードをHubにプッシュする事ができます。（チェックポイントはトレーニングの最中に保存されます）。",n,U,G;return U=new h({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yigp",highlighted:"trainer.push_to_hub()",wrap:!1}}),{c(){a=T("p"),a.textContent=r,n=M(),w(U.$$.fragment)},l(u){a=c(u,"P",{"data-svelte-h":!0}),o(a)!=="svelte-1k4wa9v"&&(a.textContent=r),n=p(u),d(U.$$.fragment,u)},m(u,R){t(u,a,R),t(u,n,R),m(U,u,R),G=!0},i(u){G||(y(U.$$.fragment,u),G=!0)},o(u){J(U.$$.fragment,u),G=!1},d(u){u&&(e(a),e(n)),j(U,u)}}}function Mp(I){let a,r="✏️ <strong>あなたの番です！</strong> データコレーターを全単語マスキングコレーターに変えて、上記のトレーニングを実行してみましょう。より良い結果が得られましたか？";return{c(){a=T("p"),a.innerHTML=r},l(n){a=c(n,"P",{"data-svelte-h":!0}),o(a)!=="svelte-1o6uo8l"&&(a.innerHTML=r)},m(n,U){t(n,a,U)},p:Ll,d(n){n&&e(a)}}}function GM(I){let a,r=`今回の使用例では、トレーニングループに特別なことをする必要はありませんでしたが、場合によってはカスタムロジックを実装する必要があるかもしれません。そのようなアプリケーションでは、🤗 Accelerateを使用することができます。
見てみましょう!`,n,U,G,u,R='<code>Trainer</code>で見たように、マスクされた言語モデルの微調整は<a href="/course/ja/chapter3">第3章</a>のテキスト分類の例と非常によく似ています。実際、唯一のわずかな違いは特別なデータコレーターを使うことで、それはこのセクションの前半ですでに取り上げました!',W,_,X="しかし、<code>DataCollatorForLanguageModeling</code>は評価ごとにランダムなマスキングを行うので、学習実行ごとにパープレキシティスコアに多少の変動が見られることがわかりました。このランダム性を排除する一つの方法は、テストセット全体に <em>一度だけ</em> マスキングを適用し、その後🤗 Transformersのデフォルトのデータコレーターを使用して、評価中にバッチを収集することです。これがどのように機能するかを見るために、<code>DataCollatorForLanguageModeling</code> を最初に使った時と同様に、バッチにマスキングを適用する簡単な関数を実装してみましょう。",g,k,b,Z,z=`次に、この関数をテストセットに適用して、マスクされていないカラムを削除し、マスクされたカラムに置き換えることができるようにします。上の <code>data_collator</code> を適切なものに置き換えることで、全単語単位でのマスキングを行うことができます。
その場合は、以下の最初の行を削除してください。`,v,C,$,E,B="あとは通常通りデータローダーをセットアップしますが、ここでは評価セットに 🤗 Transformers の <code>default_data_collator</code> を使用します。",V,Il,Rl,S,st="ここでは、🤗 Accelerateを使った標準的なステップに従います。最初にやる事は、事前学習したモデルの新しいバージョンをロードすることです。",Xl,N,ql,P,Cl="次に、オプティマイザを指定します。ここでは、標準的な <code>AdamW</code> を使用します。",Dl,O,ll,sl,Jl="これらのオブジェクトがあれば、あとは <code>Accelerator</code> オブジェクトを使ってトレーニングのためのすべてを準備することができます。",Wl,H,$l,L,et="モデル、オプティマイザー、データローダーが設定されたので、学習率スケジューラーを以下のように指定することができます。",Vl,Y,Kl,el,_l="トレーニングの前に最後にすることがあります。ハギング フェイス ハブにモデルリポジトリを作成することです。🤗 Hub ライブラリを使って、まずレポジトリのフルネームを生成します。",Pl,tl,al,Gl,zl,q,tt="それから、🤗 Hub の <code>Repository</code> クラスを使用してリポジトリを作成し、クローンします。",Nl,A,F,K,Zl="これができれば、あとはトレーニングと評価のループをすべて書き出すだけです。",Ol,nl,Ml,pl,il,Bl,ls=`イケてる！
エポックごとにパープレキシティを評価し、複数回のトレーニングを実行した際の再現性を確保することができました`,yl;return U=new Hl({props:{title:"DistilBERTを🤗 Accelerateを使って微調整する",local:"distilbertを-accelerateを使って微調整する",headingTag:"h2"}}),k=new h({props:{code:"ZGVmJTIwaW5zZXJ0X3JhbmRvbV9tYXNrKGJhdGNoKSUzQSUwQSUyMCUyMCUyMCUyMGZlYXR1cmVzJTIwJTNEJTIwJTVCZGljdCh6aXAoYmF0Y2glMkMlMjB0KSklMjBmb3IlMjB0JTIwaW4lMjB6aXAoKmJhdGNoLnZhbHVlcygpKSU1RCUwQSUyMCUyMCUyMCUyMG1hc2tlZF9pbnB1dHMlMjAlM0QlMjBkYXRhX2NvbGxhdG9yKGZlYXR1cmVzKSUwQSUyMCUyMCUyMCUyMCUyMyUyMENyZWF0ZSUyMGElMjBuZXclMjAlMjJtYXNrZWQlMjIlMjBjb2x1bW4lMjBmb3IlMjBlYWNoJTIwY29sdW1uJTIwaW4lMjB0aGUlMjBkYXRhc2V0JTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwJTdCJTIybWFza2VkXyUyMiUyMCUyQiUyMGslM0ElMjB2Lm51bXB5KCklMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwbWFza2VkX2lucHV0cy5pdGVtcygpJTdE",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"># Create a new &quot;masked&quot; column for each column in the dataset</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}}),C=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}}),Il=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}}),N=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}}),O=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}}),H=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}}),Y=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}}),tl=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}}),Gl=new h({props:{code:"J2xld3R1biUyRmRpc3RpbGJlcnQtYmFzZS11bmNhc2VkLWZpbmV0dW5lZC1pbWRiLWFjY2VsZXJhdGUn",highlighted:'<span class="hljs-string">&#x27;lewtun/distilbert-base-uncased-finetuned-imdb-accelerate&#x27;</span>',wrap:!1}}),A=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}}),nl=new h({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEFpbXBvcnQlMjB0b3JjaCUwQWltcG9ydCUyMG1hdGglMEElMEFwcm9ncmVzc19iYXIlMjAlM0QlMjB0cWRtKHJhbmdlKG51bV90cmFpbmluZ19zdGVwcykpJTBBJTBBZm9yJTIwZXBvY2glMjBpbiUyMHJhbmdlKG51bV90cmFpbl9lcG9jaHMpJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwVHJhaW5pbmclMEElMjAlMjAlMjAlMjBtb2RlbC50cmFpbigpJTBBJTIwJTIwJTIwJTIwZm9yJTIwYmF0Y2glMjBpbiUyMHRyYWluX2RhdGFsb2FkZXIlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3IuYmFja3dhcmQobG9zcyklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvcHRpbWl6ZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbHJfc2NoZWR1bGVyLnN0ZXAoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci56ZXJvX2dyYWQoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByb2dyZXNzX2Jhci51cGRhdGUoMSklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBFdmFsdWF0aW9uJTBBJTIwJTIwJTIwJTIwbW9kZWwuZXZhbCgpJTBBJTIwJTIwJTIwJTIwbG9zc2VzJTIwJTNEJTIwJTVCJTVEJTBBJTIwJTIwJTIwJTIwZm9yJTIwc3RlcCUyQyUyMGJhdGNoJTIwaW4lMjBlbnVtZXJhdGUoZXZhbF9kYXRhbG9hZGVyKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHdpdGglMjB0b3JjaC5ub19ncmFkKCklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKipiYXRjaCklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsb3NzJTIwJTNEJTIwb3V0cHV0cy5sb3NzJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbG9zc2VzLmFwcGVuZChhY2NlbGVyYXRvci5nYXRoZXIobG9zcy5yZXBlYXQoYmF0Y2hfc2l6ZSkpKSUwQSUwQSUyMCUyMCUyMCUyMGxvc3NlcyUyMCUzRCUyMHRvcmNoLmNhdChsb3NzZXMpJTBBJTIwJTIwJTIwJTIwbG9zc2VzJTIwJTNEJTIwbG9zc2VzJTVCJTNBJTIwbGVuKGV2YWxfZGF0YXNldCklNUQlMEElMjAlMjAlMjAlMjB0cnklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwZXJwbGV4aXR5JTIwJTNEJTIwbWF0aC5leHAodG9yY2gubWVhbihsb3NzZXMpKSUwQSUyMCUyMCUyMCUyMGV4Y2VwdCUyME92ZXJmbG93RXJyb3IlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwZXJwbGV4aXR5JTIwJTNEJTIwZmxvYXQoJTIyaW5mJTIyKSUwQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjIlM0UlM0UlM0UlMjBFcG9jaCUyMCU3QmVwb2NoJTdEJTNBJTIwUGVycGxleGl0eSUzQSUyMCU3QnBlcnBsZXhpdHklN0QlMjIpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwU2F2ZSUyMGFuZCUyMHVwbG9hZCUwQSUyMCUyMCUyMCUyMGFjY2VsZXJhdG9yLndhaXRfZm9yX2V2ZXJ5b25lKCklMEElMjAlMjAlMjAlMjB1bndyYXBwZWRfbW9kZWwlMjAlM0QlMjBhY2NlbGVyYXRvci51bndyYXBfbW9kZWwobW9kZWwpJTBBJTIwJTIwJTIwJTIwdW53cmFwcGVkX21vZGVsLnNhdmVfcHJldHJhaW5lZChvdXRwdXRfZGlyJTJDJTIwc2F2ZV9mdW5jdGlvbiUzRGFjY2VsZXJhdG9yLnNhdmUpJTBBJTIwJTIwJTIwJTIwaWYlMjBhY2NlbGVyYXRvci5pc19tYWluX3Byb2Nlc3MlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0b2tlbml6ZXIuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVwby5wdXNoX3RvX2h1YiglMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBjb21taXRfbWVzc2FnZSUzRGYlMjJUcmFpbmluZyUyMGluJTIwcHJvZ3Jlc3MlMjBlcG9jaCUyMCU3QmVwb2NoJTdEJTIyJTJDJTIwYmxvY2tpbmclM0RGYWxzZSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCk=",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"># Training</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"># Save and upload</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}}),pl=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(){a=T("p"),a.textContent=r,n=M(),w(U.$$.fragment),G=M(),u=T("p"),u.innerHTML=R,W=M(),_=T("p"),_.innerHTML=X,g=M(),w(k.$$.fragment),b=M(),Z=T("p"),Z.innerHTML=z,v=M(),w(C.$$.fragment),$=M(),E=T("p"),E.innerHTML=B,V=M(),w(Il.$$.fragment),Rl=M(),S=T("p"),S.textContent=st,Xl=M(),w(N.$$.fragment),ql=M(),P=T("p"),P.innerHTML=Cl,Dl=M(),w(O.$$.fragment),ll=M(),sl=T("p"),sl.innerHTML=Jl,Wl=M(),w(H.$$.fragment),$l=M(),L=T("p"),L.textContent=et,Vl=M(),w(Y.$$.fragment),Kl=M(),el=T("p"),el.textContent=_l,Pl=M(),w(tl.$$.fragment),al=M(),w(Gl.$$.fragment),zl=M(),q=T("p"),q.innerHTML=tt,Nl=M(),w(A.$$.fragment),F=M(),K=T("p"),K.textContent=Zl,Ol=M(),w(nl.$$.fragment),Ml=M(),w(pl.$$.fragment),il=M(),Bl=T("p"),Bl.textContent=ls},l(i){a=c(i,"P",{"data-svelte-h":!0}),o(a)!=="svelte-1g6ablj"&&(a.textContent=r),n=p(i),d(U.$$.fragment,i),G=p(i),u=c(i,"P",{"data-svelte-h":!0}),o(u)!=="svelte-t1nky"&&(u.innerHTML=R),W=p(i),_=c(i,"P",{"data-svelte-h":!0}),o(_)!=="svelte-5w6j88"&&(_.innerHTML=X),g=p(i),d(k.$$.fragment,i),b=p(i),Z=c(i,"P",{"data-svelte-h":!0}),o(Z)!=="svelte-11kxfjy"&&(Z.innerHTML=z),v=p(i),d(C.$$.fragment,i),$=p(i),E=c(i,"P",{"data-svelte-h":!0}),o(E)!=="svelte-12u73gu"&&(E.innerHTML=B),V=p(i),d(Il.$$.fragment,i),Rl=p(i),S=c(i,"P",{"data-svelte-h":!0}),o(S)!=="svelte-un8hrv"&&(S.textContent=st),Xl=p(i),d(N.$$.fragment,i),ql=p(i),P=c(i,"P",{"data-svelte-h":!0}),o(P)!=="svelte-12xdgug"&&(P.innerHTML=Cl),Dl=p(i),d(O.$$.fragment,i),ll=p(i),sl=c(i,"P",{"data-svelte-h":!0}),o(sl)!=="svelte-usacy5"&&(sl.innerHTML=Jl),Wl=p(i),d(H.$$.fragment,i),$l=p(i),L=c(i,"P",{"data-svelte-h":!0}),o(L)!=="svelte-jadbeb"&&(L.textContent=et),Vl=p(i),d(Y.$$.fragment,i),Kl=p(i),el=c(i,"P",{"data-svelte-h":!0}),o(el)!=="svelte-ag67sk"&&(el.textContent=_l),Pl=p(i),d(tl.$$.fragment,i),al=p(i),d(Gl.$$.fragment,i),zl=p(i),q=c(i,"P",{"data-svelte-h":!0}),o(q)!=="svelte-5tay2a"&&(q.innerHTML=tt),Nl=p(i),d(A.$$.fragment,i),F=p(i),K=c(i,"P",{"data-svelte-h":!0}),o(K)!=="svelte-1ogqb6"&&(K.textContent=Zl),Ol=p(i),d(nl.$$.fragment,i),Ml=p(i),d(pl.$$.fragment,i),il=p(i),Bl=c(i,"P",{"data-svelte-h":!0}),o(Bl)!=="svelte-1eyk8kn"&&(Bl.textContent=ls)},m(i,f){t(i,a,f),t(i,n,f),m(U,i,f),t(i,G,f),t(i,u,f),t(i,W,f),t(i,_,f),t(i,g,f),m(k,i,f),t(i,b,f),t(i,Z,f),t(i,v,f),m(C,i,f),t(i,$,f),t(i,E,f),t(i,V,f),m(Il,i,f),t(i,Rl,f),t(i,S,f),t(i,Xl,f),m(N,i,f),t(i,ql,f),t(i,P,f),t(i,Dl,f),m(O,i,f),t(i,ll,f),t(i,sl,f),t(i,Wl,f),m(H,i,f),t(i,$l,f),t(i,L,f),t(i,Vl,f),m(Y,i,f),t(i,Kl,f),t(i,el,f),t(i,Pl,f),m(tl,i,f),t(i,al,f),m(Gl,i,f),t(i,zl,f),t(i,q,f),t(i,Nl,f),m(A,i,f),t(i,F,f),t(i,K,f),t(i,Ol,f),m(nl,i,f),t(i,Ml,f),m(pl,i,f),t(i,il,f),t(i,Bl,f),yl=!0},i(i){yl||(y(U.$$.fragment,i),y(k.$$.fragment,i),y(C.$$.fragment,i),y(Il.$$.fragment,i),y(N.$$.fragment,i),y(O.$$.fragment,i),y(H.$$.fragment,i),y(Y.$$.fragment,i),y(tl.$$.fragment,i),y(Gl.$$.fragment,i),y(A.$$.fragment,i),y(nl.$$.fragment,i),y(pl.$$.fragment,i),yl=!0)},o(i){J(U.$$.fragment,i),J(k.$$.fragment,i),J(C.$$.fragment,i),J(Il.$$.fragment,i),J(N.$$.fragment,i),J(O.$$.fragment,i),J(H.$$.fragment,i),J(Y.$$.fragment,i),J(tl.$$.fragment,i),J(Gl.$$.fragment,i),J(A.$$.fragment,i),J(nl.$$.fragment,i),J(pl.$$.fragment,i),yl=!1},d(i){i&&(e(a),e(n),e(G),e(u),e(W),e(_),e(g),e(b),e(Z),e(v),e($),e(E),e(V),e(Rl),e(S),e(Xl),e(ql),e(P),e(Dl),e(ll),e(sl),e(Wl),e($l),e(L),e(Vl),e(Kl),e(el),e(Pl),e(al),e(zl),e(q),e(Nl),e(F),e(K),e(Ol),e(Ml),e(il),e(Bl)),j(U,i),j(k,i),j(C,i),j(Il,i),j(N,i),j(O,i),j(H,i),j(Y,i),j(tl,i),j(Gl,i),j(A,i),j(nl,i),j(pl,i)}}}function pp(I){let a,r='✏️ <strong>あなたの番です！</strong> ドメイン適応の利点を定量化するために、IMDbラベルの分類器を、訓練前と微調整したDistilBERTチェックポイントの両方で微調整してください。テキスト分類について復習が必要な場合は、<a href="/course/ja/chapter3">第3章</a>をチェックしてみてください。';return{c(){a=T("p"),a.innerHTML=r},l(n){a=c(n,"P",{"data-svelte-h":!0}),o(a)!=="svelte-1tj4qg9"&&(a.innerHTML=r)},m(n,U){t(n,a,U)},p:Ll,d(n){n&&e(a)}}}function ip(I){let a,r,n,U,G,u,R,W,_,X,g,k,b="Transformerモデルを含む多くのNLPアプリケーションでは、ハギング フェイス ハブから事前学習済みのモデルを取り出し、自分が実行したいタスク用のデータを直接使って微調整を行うだけでよいのです。事前学習に使われたコーパスと微調整に使うコーパスがあまり違わない限り、転移学習は通常良い結果を生み出します。",Z,z,v="しかし、モデルのヘッド部だけを対象にタスクに特化したトレーニング行う前に、まずデータを使って言語モデルを微調整したいケースもいくつかあります。例えば、データセットに法的契約や科学論文が含まれている場合、BERTのような素のTransformerモデルは通常、コーパス内のドメイン特有の単語を稀なトークンとして扱うため、結果として満足のいく性能が得られない可能性があります。ドメイン内データで言語モデルを微調整することで、多くの下流タスクのパフォーマンスを向上させることができ、このステップは通常一度だけ行えばよいことになります。",C,$,E='このように、事前に学習した言語モデルをドメイン内データで微調整するプロセスは、通常<em>ドメイン適応</em>と呼ばれます。これは2018年に<a href="https://arxiv.org/abs/1801.06146" rel="nofollow">ULMFiT</a>によって普及しました。転移学習をNLPで本当に使えるようにした最初のニューラルアーキテクチャ（LSTMがベース）の1つです。ULMFiTによるドメイン適応の例を下の画像に示します。このセクションでは、LSTMの代わりにTransformerを使って、同様のことを行います！',B,V,Il='<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."/>',Rl,S,st='このセクションの終わりには、以下のような文章を自動補完できる<a href="https://huggingface.co/huggingface-course/distilbert-base-uncased-finetuned-imdb?text=This+is+a+great+%5BMASK%5D." rel="nofollow">マスク言語モデル</a>がHub上にできていることでしょう。',Xl,N,ql,P,Cl,Dl="それでは始めましょう！",O,ll,sl,Jl,Wl,H,$l,L,et='まず、マスク言語モデリングに適した事前学習済みモデルを選びましょう。以下のスクリーンショットのように、<a href="https://huggingface.co/models?pipeline_tag=fill-mask&amp;sort=downloads" rel="nofollow">ハギング フェイス ハブ</a>の “Fill-Mask “フィルタを適用すると、候補のリストが表示されます。',Vl,Y,Kl='<img src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/mlm-models.png" alt="Hub models." width="80%"/>',el,_l,Pl='BERT と RoBERTa モデルのファミリーが最もダウンロードされていますが、ここでは <a href="https://huggingface.co/distilbert-base-uncased" rel="nofollow">DistilBERT</a> と呼ばれるモデルを使用することにします。このモデルは、下流タスクの性能をほとんど損なうことなく、より高速に学習させることができます。',tl,al,Gl='このモデルは、<a href="https://en.wikipedia.org/wiki/Knowledge_distillation" rel="nofollow"><em>知識蒸留</em></a>と呼ばれる特別な技術を使用して訓練されました。この手法は、BERTのような大きな「教師モデル」が、それよりはるかに少ないパラメータを持つ「生徒モデル」の訓練を導くために使用されています。',zl,q,tt='知識蒸溜の詳細を説明すると、この章の内容から離れすぎてしまいますが、もし興味があれば、<a href="https://www.oreilly.com/library/view/natural-language-processing/9781098136789/" rel="nofollow"><em>Natural Language Processing with Transformers</em></a>（通称Transformers教科書）でそれについてすべて読むことができます。',Nl,A,F,K,Zl,Ol="約6,700万パラメータを持つDistilBERTは、BERTの基本モデルよりも約2倍小さく、これは、学習時に約2倍のスピードアップに相当します（素晴らしい！）。それでは、このモデルが予測する、小さなテキストサンプルの最も可能性の高い完成形はどのような種類のトークンであるかを見てみましょう。",nl,Ml,pl,il,Bl='人間なら <code>[MASK]</code> トークンに対して、“day”, “ride”, “painting” などの多くの可能性を想像することができます。事前学習済みモデルの場合、予測値はモデルが学習したコーパスに依存します。なぜなら、モデルはデータに存在する統計的パターンを選択するように学習するからです。BERTと同様に、DistilBERTは<a href="https://huggingface.co/datasets/wikipedia" rel="nofollow">English Wikipedia</a> と <a href="https://huggingface.co/datasets/bookcorpus" rel="nofollow">BookCorpus</a> のデータセットで事前学習されているので、<code>[MASK]</code>の予測はこれらのドメインを反映すると予想されます。マスクを予測するためには、モデルの入力生成用にDistilBERTのtokenizerが必要なので、これもHubからダウンロードしましょう。',ls,yl,i,f,pn="tokenizerモデルがあれば、テキストサンプルをモデルに渡し、ロジットを抽出し、上位5つの候補を出力することができます。",nt,Ul,rl,Se,ss,Mt,es,yn="出力から、モデルの予測は日常的な用語に言及していることがわかりますが、これは英語版ウィキペディアが基盤となっている事を考えれば驚くことではありません。では、この領域をもう少しニッチなもの、つまり、分裂している映画評価データセットに変えてみましょう。",pt,ts,it,as,Jn='ドメイン適応の例を示すために、私たちは有名な<a href="https://huggingface.co/datasets/imdb" rel="nofollow">Large Movie Review Dataset</a> (略してIMDb)を使用します。これは、感情分析モデルのベンチマークによく使われる、映画のレビューのコーパスです。このコーパスでDistilBERTを微調整することで、言語モデルが事前学習したWikipediaの事実に基づくデータから、映画レビューのより主観的な要素に語彙を適応させることが期待されます。ハギング フェイス ハブのデータは、🤗 Datasetsの <code>load_dataset()</code> 関数で取得することができます。',yt,ns,Jt,Ms,Ut,ps,Un="<code>train</code> と <code>test</code> 用のデータ分割にはそれぞれ25,000件のレビューから構成され、ラベル付けされていない <code>unsupervised</code> という分割には50,000件のレビューが含まれていることがわかります。どのようなテキストを扱っているか知るために、いくつかのサンプルを見てみましょう。このコースの前の章で行ったように、 <code>Dataset.shuffle()</code> と <code>Dataset.select()</code> 関数を連鎖させて、ランダムなサンプルを作成しましょう。",rt,is,Tt,ys,ct,Js,rn="そう、これらは確かに映画のレビューです。もしあなたが十分に年を取っているなら、最後のレビューにあるVHS版を所有しているというコメントさえ理解できるかもしれません😜! 言語モデリングにはラベルは必要ありませんが、<code>0</code>は否定的なレビュー、<code>1</code>は肯定的なレビューに対応することがもうわかりました。",ot,Al,wt,Us,Tn='さて、データをざっと見たところで、マスク言語モデリングのための準備に取りかかりましょう。<a href="/course/ja/chapter3">第3章</a>で見たシーケンス分類のタスクと比較すると、いくつかの追加ステップが必要であることがわかるでしょう。さあ、始めましょう！',dt,rs,mt,Ts,jt,cs,cn="自己回帰言語モデリングでもマスク言語モデリングでも、共通の前処理として、すべての用例を連結し、コーパス全体を同じ大きさの断片に分割することが行われます。これは、個々のサンプルを単純にトークン化するという、私達の通常のアプローチとは全く異なるものです。なぜすべてを連結するのでしょうか？それは、個々の例文が長すぎると切り捨てられる可能性があり、言語モデリングタスクに役立つかもしれない情報が失われてしまうからです！",ut,os,on='そこで、まずいつものようにコーパスをトークン化します。ただし、トークン化する際に <code>truncation=True</code> オプションをtokenizerに<em>設定しない</em>ようにします。また、単語IDがあればそれを取得します（<a href="/course/ja/chapter6/3">6章</a>で説明した高速tokenizerを使用している場合はそうなります）。後で単語全体をマスキングするために必要になるからです。これをシンプルな関数にまとめ、ついでに <code>text</code> と <code>label</code> カラムも不要になったので削除してしまいましょう。',bt,ws,ht,ds,ft,ms,wn="DistilBERTはBERTに似たモデルなので、エンコードされたテキストは、他の章で見た <code>input_ids</code> と <code>attention_mask</code> に加え、私達が追加した <code>word_ids</code> で構成されていることがわかります。",It,js,dn="さて、映画のレビューをトークン化したので、次のステップはそれらをすべてグループ化して、結果を断片に分割することです。しかし、この断片の大きさはどの程度にすべきでしょうか？これは最終的には利用可能な GPU メモリの量によって決まりますが、良い出発点はモデルの最大コンテキストサイズが何であるかを見ることです。これはtokenizerの <code>model_max_length</code> 属性を調べることで推測することができます。",Ct,us,_t,bs,Gt,hs,mn="この値は、チェックポイントに関連付けられた <em>tokenizer_config.json</em> ファイルから取得します。この場合、BERT と同様に、コンテキストサイズが 512 トークンであることが分かります。",Zt,xl,Bt,fs,jn="され、Google Colab内で利用可能なGPUで実験を行うために、メモリに収まるような少し小さめのものを選ぶことにします。",kt,Is,gt,Ql,Rt,Cs,un="さて、ここからが楽しいところです。連結がどのように機能するかを示すために、トークン化されたトレーニングセットからいくつかのレビューを取り出し、レビュー毎のトークン数を出力してみましょう。",Xt,_s,Wt,Gs,$t,Zs,bn="そして、これらの例をすべてをシンプルな辞書内包表記を使って連結すると、次のようになります。",Vt,Bs,zt,ks,Nt,gs,hn="素晴らしい！全体の長さの裏付けがとれました。",At,Rs,fn="では、連結されたレビューを <code>block_size</code> で指定されたサイズの断片に分割してみましょう。そのために、 <code>concatenated_examples</code> を繰り返し処理し、リスト内包表記を使用して各特徴のスライスを作成します。その結果、断片の辞書ができあがります。",xt,Xs,Qt,Ws,vt,$s,In="この例でわかるように、一般的に最後の断片は最大断片サイズより小さくなります。これを扱うには、主に 2 つの方法があります。",Yt,Vs,Cn="<li>最後の断片が <code>chunk_size</code> よりも小さければ削除する</li> <li>最後の断片の長さが <code>chunk_size</code> と等しくなるまで、最後の断片にダミーデータを詰め込む</li>",Ft,zs,_n="ここでは、最初のアプローチをとります。上記のロジックをすべてひとつの関数にまとめ、トークン化されたデータセットに適用してみましょう。",Et,Ns,St,As,Gn="<code>group_texts()</code> の最後のステップでは、 <code>input_ids</code> 列のコピーである新しい <code>labels</code> 列を作成していることに注意してください。これから説明するように、マスク言語モデリングでは、入力部に含まれるランダムなマスクトークンを予測することが目的です。 <code>labels</code> 列は、言語モデルが学習の際に参考する真実の値を提供するために使用します。",Ht,xs,Zn="それでは、信頼できる <code>Dataset.map()</code> 関数を使って、トークン化されたデータセットに <code>group_texts()</code> を適用してみましょう。",Lt,Qs,qt,vs,Dt,Ys,Bn="テキストをグループ化し、断片に分けたことで<code>train</code>と<code>test</code>のデータセットで25,000よりも多くのサンプルが生成されていることがわかります。これは、元のコーパスに複数のレビューを含むものがあるため <em>連続トークン</em> を含むサンプルができたからです。このことは、断片の1つにある特別な <code>[SEP]</code> と <code>[CLS]</code> トークンを探すことで明確にわかります。",Kt,Fs,Pt,Es,Ot,Ss,kn="上の例では、高校に関する映画とホームレスに関する映画のレビューが2つ重複しているのがわかります。また、マスク言語モデリングのラベルがどのように見えるか確認してみましょう。",la,Hs,sa,Ls,ea,qs,gn="上の <code>group_texts()</code> 関数から予想されるように、これはデコードされた <code>input_ids</code> と同じに見えます。しかし、それではこのモデルはどうやって何かを学習するのでしょうか？入力のランダムな位置に <code>[MASK]</code> トークンを挿入する、という重要なステップが抜けているのです。それでは、特別なデータコレーターを使って、微調整の際にどのようにこれを行うか見てみましょう。",ta,Ds,aa,Ks,Rn='マスク言語モデルの微調整は、<a href="/course/ja/chapter3">第3章</a>で行ったようなシーケンス分類モデルの微調整とほぼ同じです。唯一の違いは、各バッチのテキストに含まれるいくつかのトークンをランダムにマスクすることができる特別なデータコレーターが必要であることです。幸いなことに、🤗 Transformersにはこのタスクのために専用の <code>DataCollatorForLanguageModeling</code> が用意されています。私たちはtokenizerと、マスクするトークンの割合を指定する <code>mlm_probability</code> 引数を渡すだけでよいのです。ここでは、BERTで使用され、文献上でも一般的な選択である15％を選びます。',na,Ps,Ma,Os,Xn="ランダムマスクがどのように機能するかを見るために、いくつかの例を data_collator に与えてみましょう。コレーターは辞書型 のリストを想定しており、各 辞書は連続したテキストの塊を表すので、まずデータセットを繰り返し処理してからコレーターにバッチを渡します。このデータコレーターは <code>&quot;word_ids&quot;</code> キーを必要としないので、これを削除します。",pa,le,ia,se,ya,ee,Wn=`いいですね、うまくいきました！
<code>[MASK]</code>トークンがテキストの様々な場所にランダムに挿入されていることがわかります。`,Ja,te,$n="これらが学習中にモデルが予測しなければならないトークンになります。そしてデータコレーターの素晴らしいところは、バッチごとに<code>[MASK]</code>の挿入をランダムにすることです!",Ua,vl,ra,He,ae,Vn="マスク言語モデルをトレーニングする場合、個々のトークンではなく、単語全体をマスキングする手法があります。この手法は <em>whole word masking</em> と呼ばれます。単語全体をマスキングする場合、データコレーターを自作する必要があります。データコレーターとは、サンプルのリストを受け取り、それをバッチ変換する関数のことです。",Ta,ne,zn="今からやってみましょう！",ca,Me,Nn="先ほど計算した単語IDを使って、単語のインデックスと対応するトークンのマップを作る事にします。どの単語をマスクするかをランダムに決めて、そのマスクを入力に適用します。なお、ラベルはマスクする単語を除いて全て<code>-100</code>です。",oa,Tl,cl,Le,pe,An="次に、先ほどと同じサンプルで試してみます。",wa,ie,da,ye,ma,Yl,ja,Je,xn='これで2つのデータコレーターが揃いましたので、残りの微調整ステップは標準的なものです。Google Colabで、神話に出てくるP100 GPUを運良く割り当てられなかった場合、学習に時間がかかることがあります😭そこで、まず学習セットのサイズを数千事例までダウンサンプルします。心配しないでください、それでもかなりまともな言語モデルができますよ。🤗 Datasets 内のデータセットは<a href="/course/ja/chapter5">第5章</a>で紹介した <code>Dataset.train_test_split()</code> 関数で簡単にダウンサンプリングすることができます。',ua,Ue,ba,re,ha,Te,Qn="これは自動的に新しい <code>train</code> と <code>test</code> にデータを分割し、トレーニングセットのサイズを 10,000 事例に、検証セットをその 10%に設定しました。もし強力なGPUをお持ちなら、この値を自由に増やしてください！",fa,ce,vn="次に必要なことは、ハギング フェイス ハブにログインすることです。このコードをnotebookで実行する場合は、次のユーティリティ関数で実行できます。",Ia,oe,Ca,we,Yn="上記を実行すると、入力ウィジェットが表示され、認証情報を入力することができます。また実行することもできます。",_a,de,Ga,me,Fn="好みに応じて、ターミナルを起動し、そこからログインしてください。",Za,ol,wl,qe,je,Ba,ue,ka,be,En="テキストの分類や質問応答のように、ラベル付けされたコーパスを用いて学習する他のタスクとは異なり、言語モデリングでは明示的なラベルを一切持ちません。では、何が良い言語モデルなのか、どのように判断すればよいのでしょうか？",ga,he,Sn="携帯電話の自動補正機能のように、文法的に正しい文には高い確率で、無意味な文には低い確率で割り当てることができるものが良い言語モデルです。自動補正の失敗例として、携帯電話に搭載された自動補正モデルが、おかしな（そして往々にして不適切な）文章を生成している例がネット上に多数紹介されています。",Ra,dl,ml,De,fe,Xa,Ie,Hn=`パープレキシティスコアが低いほど、良い言語モデルということになります。
私達の開始時のモデルの値はやや大きいことがわかります。
では、微調整によってこの値を下げられるか見てみましょう。そのために、まず学習ループを実行します。`,Wa,jl,ul,Ke,Ce,Ln="それから計算を実行し、その結果得られたテストセットに対するパープレキシティを先ほどと同様に計算します。",$a,bl,hl,Pe,_e,Va,Ge,qn=`素敵！かなりパープレキシティを減らすことができました。
これは、モデルが映画レビューの領域について何かを学んだことを示しています。`,za,Oe,Fl,Na,lt,Ze,Aa,Be,Dn="微調整したモデルは、Hub上のウィジェットを使うか、🤗 Transformersの <code>pipeline</code> を使ってローカル環境で操作することができます。それでは後者に挑戦してみましょう。<code>fill-mask</code>パイプラインを使用してモデルをダウンロードします。",xa,ke,Qa,ge,Kn="そして「これは素晴らしい[MASK]です」というサンプルテキストをパイプラインに送り、上位5つの予測を確認することができます。",va,Re,Ya,Xe,Fa,We,Pn=`すっきりしました。
このモデルは、映画と関連する単語をより強く予測するように、明らかに重みを適応させていますね！`,Ea,$e,Sa,Ve,On='これで、言語モデルを学習するための最初の実験を終えました。<a href="/course/ja/chapter7/section6">セクション6</a>では、GPT-2のような自己回帰モデルをゼロから学習する方法を学びます。もし、あなた自身のTransformerモデルをどうやって事前学習するか見たいなら、そちらに向かってください',Ha,El,La,ze,qa,at,Da;G=new VM({props:{fw:I[0]}}),R=new Hl({props:{title:"マスク言語モデルの微調整",local:"マスク言語モデルの微調整",headingTag:"h1"}});const lM=[AM,NM],Ne=[];function sM(l,s){return l[0]==="pt"?0:1}_=sM(I),X=Ne[_]=lM[_](I),ll=new Ka({props:{id:"mqElG5QJWUg"}}),Jl=new Sl({props:{$$slots:{default:[xM]},$$scope:{ctx:I}}}),H=new Hl({props:{title:"マスク言語モデリング用の事前学習済みモデルの選択",local:"マスク言語モデリング用の事前学習済みモデルの選択",headingTag:"h2"}});const eM=[vM,QM],Ae=[];function tM(l,s){return l[0]==="pt"?0:1}A=tM(I),F=Ae[A]=eM[A](I),Ml=new h({props:{code:"dGV4dCUyMCUzRCUyMCUyMlRoaXMlMjBpcyUyMGElMjBncmVhdCUyMCU1Qk1BU0slNUQuJTIy",highlighted:'text = <span class="hljs-string">&quot;This is a great [MASK].&quot;</span>',wrap:!1}}),yl=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 aM=[FM,YM],xe=[];function nM(l,s){return l[0]==="pt"?0:1}Ul=nM(I),rl=xe[Ul]=aM[Ul](I),ss=new h({props:{code:"JyUzRSUzRSUzRSUyMFRoaXMlMjBpcyUyMGElMjBncmVhdCUyMGRlYWwuJyUwQSclM0UlM0UlM0UlMjBUaGlzJTIwaXMlMjBhJTIwZ3JlYXQlMjBzdWNjZXNzLiclMEEnJTNFJTNFJTNFJTIwVGhpcyUyMGlzJTIwYSUyMGdyZWF0JTIwYWR2ZW50dXJlLiclMEEnJTNFJTNFJTNFJTIwVGhpcyUyMGlzJTIwYSUyMGdyZWF0JTIwaWRlYS4nJTBBJyUzRSUzRSUzRSUyMFRoaXMlMjBpcyUyMGElMjBncmVhdCUyMGZlYXQuJw==",highlighted:`<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great deal.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great success.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great adventure.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great idea.&#x27;</span>
<span class="hljs-string">&#x27;&gt;&gt;&gt; This is a great feat.&#x27;</span>`,wrap:!1}}),ts=new Hl({props:{title:"データセット",local:"データセット",headingTag:"h2"}}),ns=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}}),Ms=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}}),is=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}}),ys=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}}),Al=new Sl({props:{$$slots:{default:[EM]},$$scope:{ctx:I}}}),rs=new Hl({props:{title:"データの前処理",local:"データの前処理",headingTag:"h2"}}),Ts=new Ka({props:{id:"8PmhEIXhBvI"}}),ws=new h({props:{code:"ZGVmJTIwdG9rZW5pemVfZnVuY3Rpb24oZXhhbXBsZXMpJTNBJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwdG9rZW5pemVyKGV4YW1wbGVzJTVCJTIydGV4dCUyMiU1RCklMEElMjAlMjAlMjAlMjBpZiUyMHRva2VuaXplci5pc19mYXN0JTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcmVzdWx0JTVCJTIyd29yZF9pZHMlMjIlNUQlMjAlM0QlMjAlNUJyZXN1bHQud29yZF9pZHMoaSklMjBmb3IlMjBpJTIwaW4lMjByYW5nZShsZW4ocmVzdWx0JTVCJTIyaW5wdXRfaWRzJTIyJTVEKSklNUQlMEElMjAlMjAlMjAlMjByZXR1cm4lMjByZXN1bHQlMEElMEElMEElMjMlMjBVc2UlMjBiYXRjaGVkJTNEVHJ1ZSUyMHRvJTIwYWN0aXZhdGUlMjBmYXN0JTIwbXVsdGl0aHJlYWRpbmchJTBBdG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwaW1kYl9kYXRhc2V0Lm1hcCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZV9mdW5jdGlvbiUyQyUyMGJhdGNoZWQlM0RUcnVlJTJDJTIwcmVtb3ZlX2NvbHVtbnMlM0QlNUIlMjJ0ZXh0JTIyJTJDJTIwJTIybGFiZWwlMjIlNUQlMEEpJTBBdG9rZW5pemVkX2RhdGFzZXRz",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"># Use batched=True to activate fast multithreading!</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}}),ds=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}}),us=new h({props:{code:"dG9rZW5pemVyLm1vZGVsX21heF9sZW5ndGg=",highlighted:"tokenizer.model_max_length",wrap:!1}}),bs=new h({props:{code:"NTEy",highlighted:'<span class="hljs-number">512</span>',wrap:!1}}),xl=new Sl({props:{$$slots:{default:[SM]},$$scope:{ctx:I}}}),Is=new h({props:{code:"Y2h1bmtfc2l6ZSUyMCUzRCUyMDEyOA==",highlighted:'chunk_size = <span class="hljs-number">128</span>',wrap:!1}}),Ql=new Sl({props:{warning:!0,$$slots:{default:[HM]},$$scope:{ctx:I}}}),_s=new h({props:{code:"JTIzJTIwU2xpY2luZyUyMHByb2R1Y2VzJTIwYSUyMGxpc3QlMjBvZiUyMGxpc3RzJTIwZm9yJTIwZWFjaCUyMGZlYXR1cmUlMEF0b2tlbml6ZWRfc2FtcGxlcyUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCJTNBMyU1RCUwQSUwQWZvciUyMGlkeCUyQyUyMHNhbXBsZSUyMGluJTIwZW51bWVyYXRlKHRva2VuaXplZF9zYW1wbGVzJTVCJTIyaW5wdXRfaWRzJTIyJTVEKSUzQSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjInJTNFJTNFJTNFJTIwUmV2aWV3JTIwJTdCaWR4JTdEJTIwbGVuZ3RoJTNBJTIwJTdCbGVuKHNhbXBsZSklN0QnJTIyKQ==",highlighted:`<span class="hljs-comment"># Slicing produces a list of lists for each feature</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}}),Gs=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}}),Bs=new h({props:{code:"Y29uY2F0ZW5hdGVkX2V4YW1wbGVzJTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwayUzQSUyMHN1bSh0b2tlbml6ZWRfc2FtcGxlcyU1QmslNUQlMkMlMjAlNUIlNUQpJTIwZm9yJTIwayUyMGluJTIwdG9rZW5pemVkX3NhbXBsZXMua2V5cygpJTBBJTdEJTBBdG90YWxfbGVuZ3RoJTIwJTNEJTIwbGVuKGNvbmNhdGVuYXRlZF9leGFtcGxlcyU1QiUyMmlucHV0X2lkcyUyMiU1RCklMEFwcmludChmJTIyJyUzRSUzRSUzRSUyMENvbmNhdGVuYXRlZCUyMHJldmlld3MlMjBsZW5ndGglM0ElMjAlN0J0b3RhbF9sZW5ndGglN0QnJTIyKQ==",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; Concatenated reviews length: <span class="hljs-subst">{total_length}</span>&#x27;&quot;</span>)`,wrap:!1}}),ks=new h({props:{code:"JyUzRSUzRSUzRSUyMENvbmNhdGVuYXRlZCUyMHJldmlld3MlMjBsZW5ndGglM0ElMjA5NTEn",highlighted:'<span class="hljs-string">&#x27;&gt;&gt;&gt; Concatenated reviews length: 951&#x27;</span>',wrap:!1}}),Xs=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}}),Ws=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}}),Ns=new h({props:{code:"ZGVmJTIwZ3JvdXBfdGV4dHMoZXhhbXBsZXMpJTNBJTBBJTIwJTIwJTIwJTIwJTIzJTIwQ29uY2F0ZW5hdGUlMjBhbGwlMjB0ZXh0cyUwQSUyMCUyMCUyMCUyMGNvbmNhdGVuYXRlZF9leGFtcGxlcyUyMCUzRCUyMCU3QmslM0ElMjBzdW0oZXhhbXBsZXMlNUJrJTVEJTJDJTIwJTVCJTVEKSUyMGZvciUyMGslMjBpbiUyMGV4YW1wbGVzLmtleXMoKSU3RCUwQSUyMCUyMCUyMCUyMCUyMyUyMENvbXB1dGUlMjBsZW5ndGglMjBvZiUyMGNvbmNhdGVuYXRlZCUyMHRleHRzJTBBJTIwJTIwJTIwJTIwdG90YWxfbGVuZ3RoJTIwJTNEJTIwbGVuKGNvbmNhdGVuYXRlZF9leGFtcGxlcyU1Qmxpc3QoZXhhbXBsZXMua2V5cygpKSU1QjAlNUQlNUQpJTBBJTIwJTIwJTIwJTIwJTIzJTIwV2UlMjBkcm9wJTIwdGhlJTIwbGFzdCUyMGNodW5rJTIwaWYlMjBpdCdzJTIwc21hbGxlciUyMHRoYW4lMjBjaHVua19zaXplJTBBJTIwJTIwJTIwJTIwdG90YWxfbGVuZ3RoJTIwJTNEJTIwKHRvdGFsX2xlbmd0aCUyMCUyRiUyRiUyMGNodW5rX3NpemUpJTIwKiUyMGNodW5rX3NpemUlMEElMjAlMjAlMjAlMjAlMjMlMjBTcGxpdCUyMGJ5JTIwY2h1bmtzJTIwb2YlMjBtYXhfbGVuJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwayUzQSUyMCU1QnQlNUJpJTIwJTNBJTIwaSUyMCUyQiUyMGNodW5rX3NpemUlNUQlMjBmb3IlMjBpJTIwaW4lMjByYW5nZSgwJTJDJTIwdG90YWxfbGVuZ3RoJTJDJTIwY2h1bmtfc2l6ZSklNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBrJTJDJTIwdCUyMGluJTIwY29uY2F0ZW5hdGVkX2V4YW1wbGVzLml0ZW1zKCklMEElMjAlMjAlMjAlMjAlN0QlMEElMjAlMjAlMjAlMjAlMjMlMjBDcmVhdGUlMjBhJTIwbmV3JTIwbGFiZWxzJTIwY29sdW1uJTBBJTIwJTIwJTIwJTIwcmVzdWx0JTVCJTIybGFiZWxzJTIyJTVEJTIwJTNEJTIwcmVzdWx0JTVCJTIyaW5wdXRfaWRzJTIyJTVELmNvcHkoKSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMHJlc3VsdA==",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"># Concatenate all texts</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"># Compute length of concatenated texts</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"># We drop the last chunk if it&#x27;s smaller than chunk_size</span>
    total_length = (total_length // chunk_size) * chunk_size
    <span class="hljs-comment"># Split by chunks of 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"># Create a new labels column</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}}),Qs=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}}),vs=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}}),Fs=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}}),Es=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}}),Hs=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}}),Ls=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}}),Ds=new Hl({props:{title:"DistilBERTを Trainer APIで微調整する",local:"distilbertを-trainer-apiで微調整する",headingTag:"h2"}}),Ps=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}}),le=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}}),se=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}}),vl=new Sl({props:{$$slots:{default:[LM]},$$scope:{ctx:I}}});let D=I[0]==="pt"&&CM();const MM=[DM,qM],Qe=[];function pM(l,s){return l[0]==="pt"?0:1}Tl=pM(I),cl=Qe[Tl]=MM[Tl](I),ie=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}}),ye=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}}),Yl=new Sl({props:{$$slots:{default:[KM]},$$scope:{ctx:I}}}),Ue=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}}),re=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}}),oe=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}}),de=new h({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:'huggingface-<span class="hljs-keyword">cli</span> login',wrap:!1}});const iM=[OM,PM],ve=[];function yM(l,s){return l[0]==="tf"?0:1}ol=yM(I),wl=ve[ol]=iM[ol](I),je=new Hl({props:{title:"言語モデルのパープレキシティ",local:"言語モデルのパープレキシティ",headingTag:"h3"}}),ue=new Ka({props:{id:"NURcDHhYe98"}});const JM=[sp,lp],Ye=[];function UM(l,s){return l[0]==="pt"?0:1}dl=UM(I),ml=Ye[dl]=JM[dl](I),fe=new h({props:{code:"UGVycGxleGl0eSUzQSUyMDIxLjc1",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>Perplexity: <span class="hljs-number">21.75</span>',wrap:!1}});const rM=[tp,ep],Fe=[];function TM(l,s){return l[0]==="pt"?0:1}jl=TM(I),ul=Fe[jl]=rM[jl](I);const cM=[np,ap],Ee=[];function oM(l,s){return l[0]==="pt"?0:1}bl=oM(I),hl=Ee[bl]=cM[bl](I),_e=new h({props:{code:"UGVycGxleGl0eSUzQSUyMDExLjMy",highlighted:'<span class="hljs-meta">&gt;&gt;&gt; </span>Perplexity: <span class="hljs-number">11.32</span>',wrap:!1}});let x=I[0]==="pt"&&_M();Fl=new Sl({props:{$$slots:{default:[Mp]},$$scope:{ctx:I}}});let Q=I[0]==="pt"&&GM();return Ze=new Hl({props:{title:"微調整したモデルを使う",local:"微調整したモデルを使う",headingTag:"h2"}}),ke=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}}),Re=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}}),Xe=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}}),$e=new Ka({props:{id:"0Oxphw4Q9fo"}}),El=new Sl({props:{$$slots:{default:[pp]},$$scope:{ctx:I}}}),ze=new zM({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ja/chapter7/3.mdx"}}),{c(){a=T("meta"),r=M(),n=T("p"),U=M(),w(G.$$.fragment),u=M(),w(R.$$.fragment),W=M(),X.c(),g=M(),k=T("p"),k.textContent=b,Z=M(),z=T("p"),z.textContent=v,C=M(),$=T("p"),$.innerHTML=E,B=M(),V=T("div"),V.innerHTML=Il,Rl=M(),S=T("p"),S.innerHTML=st,Xl=M(),N=T("iframe"),P=M(),Cl=T("p"),Cl.textContent=Dl,O=M(),w(ll.$$.fragment),sl=M(),w(Jl.$$.fragment),Wl=M(),w(H.$$.fragment),$l=M(),L=T("p"),L.innerHTML=et,Vl=M(),Y=T("div"),Y.innerHTML=Kl,el=M(),_l=T("p"),_l.innerHTML=Pl,tl=M(),al=T("p"),al.innerHTML=Gl,zl=M(),q=T("p"),q.innerHTML=tt,Nl=M(),F.c(),K=M(),Zl=T("p"),Zl.textContent=Ol,nl=M(),w(Ml.$$.fragment),pl=M(),il=T("p"),il.innerHTML=Bl,ls=M(),w(yl.$$.fragment),i=M(),f=T("p"),f.textContent=pn,nt=M(),rl.c(),Se=M(),w(ss.$$.fragment),Mt=M(),es=T("p"),es.textContent=yn,pt=M(),w(ts.$$.fragment),it=M(),as=T("p"),as.innerHTML=Jn,yt=M(),w(ns.$$.fragment),Jt=M(),w(Ms.$$.fragment),Ut=M(),ps=T("p"),ps.innerHTML=Un,rt=M(),w(is.$$.fragment),Tt=M(),w(ys.$$.fragment),ct=M(),Js=T("p"),Js.innerHTML=rn,ot=M(),w(Al.$$.fragment),wt=M(),Us=T("p"),Us.innerHTML=Tn,dt=M(),w(rs.$$.fragment),mt=M(),w(Ts.$$.fragment),jt=M(),cs=T("p"),cs.textContent=cn,ut=M(),os=T("p"),os.innerHTML=on,bt=M(),w(ws.$$.fragment),ht=M(),w(ds.$$.fragment),ft=M(),ms=T("p"),ms.innerHTML=wn,It=M(),js=T("p"),js.innerHTML=dn,Ct=M(),w(us.$$.fragment),_t=M(),w(bs.$$.fragment),Gt=M(),hs=T("p"),hs.innerHTML=mn,Zt=M(),w(xl.$$.fragment),Bt=M(),fs=T("p"),fs.textContent=jn,kt=M(),w(Is.$$.fragment),gt=M(),w(Ql.$$.fragment),Rt=M(),Cs=T("p"),Cs.textContent=un,Xt=M(),w(_s.$$.fragment),Wt=M(),w(Gs.$$.fragment),$t=M(),Zs=T("p"),Zs.textContent=bn,Vt=M(),w(Bs.$$.fragment),zt=M(),w(ks.$$.fragment),Nt=M(),gs=T("p"),gs.textContent=hn,At=M(),Rs=T("p"),Rs.innerHTML=fn,xt=M(),w(Xs.$$.fragment),Qt=M(),w(Ws.$$.fragment),vt=M(),$s=T("p"),$s.textContent=In,Yt=M(),Vs=T("ul"),Vs.innerHTML=Cn,Ft=M(),zs=T("p"),zs.textContent=_n,Et=M(),w(Ns.$$.fragment),St=M(),As=T("p"),As.innerHTML=Gn,Ht=M(),xs=T("p"),xs.innerHTML=Zn,Lt=M(),w(Qs.$$.fragment),qt=M(),w(vs.$$.fragment),Dt=M(),Ys=T("p"),Ys.innerHTML=Bn,Kt=M(),w(Fs.$$.fragment),Pt=M(),w(Es.$$.fragment),Ot=M(),Ss=T("p"),Ss.textContent=kn,la=M(),w(Hs.$$.fragment),sa=M(),w(Ls.$$.fragment),ea=M(),qs=T("p"),qs.innerHTML=gn,ta=M(),w(Ds.$$.fragment),aa=M(),Ks=T("p"),Ks.innerHTML=Rn,na=M(),w(Ps.$$.fragment),Ma=M(),Os=T("p"),Os.innerHTML=Xn,pa=M(),w(le.$$.fragment),ia=M(),w(se.$$.fragment),ya=M(),ee=T("p"),ee.innerHTML=Wn,Ja=M(),te=T("p"),te.innerHTML=$n,Ua=M(),w(vl.$$.fragment),ra=M(),D&&D.c(),He=M(),ae=T("p"),ae.innerHTML=Vn,Ta=M(),ne=T("p"),ne.textContent=zn,ca=M(),Me=T("p"),Me.innerHTML=Nn,oa=M(),cl.c(),Le=M(),pe=T("p"),pe.textContent=An,wa=M(),w(ie.$$.fragment),da=M(),w(ye.$$.fragment),ma=M(),w(Yl.$$.fragment),ja=M(),Je=T("p"),Je.innerHTML=xn,ua=M(),w(Ue.$$.fragment),ba=M(),w(re.$$.fragment),ha=M(),Te=T("p"),Te.innerHTML=Qn,fa=M(),ce=T("p"),ce.textContent=vn,Ia=M(),w(oe.$$.fragment),Ca=M(),we=T("p"),we.textContent=Yn,_a=M(),w(de.$$.fragment),Ga=M(),me=T("p"),me.textContent=Fn,Za=M(),wl.c(),qe=M(),w(je.$$.fragment),Ba=M(),w(ue.$$.fragment),ka=M(),be=T("p"),be.textContent=En,ga=M(),he=T("p"),he.textContent=Sn,Ra=M(),ml.c(),De=M(),w(fe.$$.fragment),Xa=M(),Ie=T("p"),Ie.textContent=Hn,Wa=M(),ul.c(),Ke=M(),Ce=T("p"),Ce.textContent=Ln,$a=M(),hl.c(),Pe=M(),w(_e.$$.fragment),Va=M(),Ge=T("p"),Ge.textContent=qn,za=M(),x&&x.c(),Oe=M(),w(Fl.$$.fragment),Na=M(),Q&&Q.c(),lt=M(),w(Ze.$$.fragment),Aa=M(),Be=T("p"),Be.innerHTML=Dn,xa=M(),w(ke.$$.fragment),Qa=M(),ge=T("p"),ge.textContent=Kn,va=M(),w(Re.$$.fragment),Ya=M(),w(Xe.$$.fragment),Fa=M(),We=T("p"),We.textContent=Pn,Ea=M(),w($e.$$.fragment),Sa=M(),Ve=T("p"),Ve.innerHTML=On,Ha=M(),w(El.$$.fragment),La=M(),w(ze.$$.fragment),qa=M(),at=T("p"),this.h()},l(l){const s=WM("svelte-u9bgzb",document.head);a=c(s,"META",{name:!0,content:!0}),s.forEach(e),r=p(l),n=c(l,"P",{}),Mn(n).forEach(e),U=p(l),d(G.$$.fragment,l),u=p(l),d(R.$$.fragment,l),W=p(l),X.l(l),g=p(l),k=c(l,"P",{"data-svelte-h":!0}),o(k)!=="svelte-1349l0v"&&(k.textContent=b),Z=p(l),z=c(l,"P",{"data-svelte-h":!0}),o(z)!=="svelte-5h2t69"&&(z.textContent=v),C=p(l),$=c(l,"P",{"data-svelte-h":!0}),o($)!=="svelte-1tuczk2"&&($.innerHTML=E),B=p(l),V=c(l,"DIV",{class:!0,"data-svelte-h":!0}),o(V)!=="svelte-1lvgpuv"&&(V.innerHTML=Il),Rl=p(l),S=c(l,"P",{"data-svelte-h":!0}),o(S)!=="svelte-e3lmtp"&&(S.innerHTML=st),Xl=p(l),N=c(l,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),Mn(N).forEach(e),P=p(l),Cl=c(l,"P",{"data-svelte-h":!0}),o(Cl)!=="svelte-1jm6tsk"&&(Cl.textContent=Dl),O=p(l),d(ll.$$.fragment,l),sl=p(l),d(Jl.$$.fragment,l),Wl=p(l),d(H.$$.fragment,l),$l=p(l),L=c(l,"P",{"data-svelte-h":!0}),o(L)!=="svelte-1xw9r21"&&(L.innerHTML=et),Vl=p(l),Y=c(l,"DIV",{class:!0,"data-svelte-h":!0}),o(Y)!=="svelte-zc90xi"&&(Y.innerHTML=Kl),el=p(l),_l=c(l,"P",{"data-svelte-h":!0}),o(_l)!=="svelte-12gmkd8"&&(_l.innerHTML=Pl),tl=p(l),al=c(l,"P",{"data-svelte-h":!0}),o(al)!=="svelte-15cdl2g"&&(al.innerHTML=Gl),zl=p(l),q=c(l,"P",{"data-svelte-h":!0}),o(q)!=="svelte-13r2z0g"&&(q.innerHTML=tt),Nl=p(l),F.l(l),K=p(l),Zl=c(l,"P",{"data-svelte-h":!0}),o(Zl)!=="svelte-r56cvw"&&(Zl.textContent=Ol),nl=p(l),d(Ml.$$.fragment,l),pl=p(l),il=c(l,"P",{"data-svelte-h":!0}),o(il)!=="svelte-1ndkpnt"&&(il.innerHTML=Bl),ls=p(l),d(yl.$$.fragment,l),i=p(l),f=c(l,"P",{"data-svelte-h":!0}),o(f)!=="svelte-cf3i8n"&&(f.textContent=pn),nt=p(l),rl.l(l),Se=p(l),d(ss.$$.fragment,l),Mt=p(l),es=c(l,"P",{"data-svelte-h":!0}),o(es)!=="svelte-1dm43wd"&&(es.textContent=yn),pt=p(l),d(ts.$$.fragment,l),it=p(l),as=c(l,"P",{"data-svelte-h":!0}),o(as)!=="svelte-21d9jb"&&(as.innerHTML=Jn),yt=p(l),d(ns.$$.fragment,l),Jt=p(l),d(Ms.$$.fragment,l),Ut=p(l),ps=c(l,"P",{"data-svelte-h":!0}),o(ps)!=="svelte-nx50u9"&&(ps.innerHTML=Un),rt=p(l),d(is.$$.fragment,l),Tt=p(l),d(ys.$$.fragment,l),ct=p(l),Js=c(l,"P",{"data-svelte-h":!0}),o(Js)!=="svelte-3ke16o"&&(Js.innerHTML=rn),ot=p(l),d(Al.$$.fragment,l),wt=p(l),Us=c(l,"P",{"data-svelte-h":!0}),o(Us)!=="svelte-3nwj2w"&&(Us.innerHTML=Tn),dt=p(l),d(rs.$$.fragment,l),mt=p(l),d(Ts.$$.fragment,l),jt=p(l),cs=c(l,"P",{"data-svelte-h":!0}),o(cs)!=="svelte-nwkxlk"&&(cs.textContent=cn),ut=p(l),os=c(l,"P",{"data-svelte-h":!0}),o(os)!=="svelte-1xc8vjj"&&(os.innerHTML=on),bt=p(l),d(ws.$$.fragment,l),ht=p(l),d(ds.$$.fragment,l),ft=p(l),ms=c(l,"P",{"data-svelte-h":!0}),o(ms)!=="svelte-7tc6je"&&(ms.innerHTML=wn),It=p(l),js=c(l,"P",{"data-svelte-h":!0}),o(js)!=="svelte-z5pgj0"&&(js.innerHTML=dn),Ct=p(l),d(us.$$.fragment,l),_t=p(l),d(bs.$$.fragment,l),Gt=p(l),hs=c(l,"P",{"data-svelte-h":!0}),o(hs)!=="svelte-pn1o2i"&&(hs.innerHTML=mn),Zt=p(l),d(xl.$$.fragment,l),Bt=p(l),fs=c(l,"P",{"data-svelte-h":!0}),o(fs)!=="svelte-91hcc0"&&(fs.textContent=jn),kt=p(l),d(Is.$$.fragment,l),gt=p(l),d(Ql.$$.fragment,l),Rt=p(l),Cs=c(l,"P",{"data-svelte-h":!0}),o(Cs)!=="svelte-184h38y"&&(Cs.textContent=un),Xt=p(l),d(_s.$$.fragment,l),Wt=p(l),d(Gs.$$.fragment,l),$t=p(l),Zs=c(l,"P",{"data-svelte-h":!0}),o(Zs)!=="svelte-1og0f1d"&&(Zs.textContent=bn),Vt=p(l),d(Bs.$$.fragment,l),zt=p(l),d(ks.$$.fragment,l),Nt=p(l),gs=c(l,"P",{"data-svelte-h":!0}),o(gs)!=="svelte-yzip16"&&(gs.textContent=hn),At=p(l),Rs=c(l,"P",{"data-svelte-h":!0}),o(Rs)!=="svelte-4nalou"&&(Rs.innerHTML=fn),xt=p(l),d(Xs.$$.fragment,l),Qt=p(l),d(Ws.$$.fragment,l),vt=p(l),$s=c(l,"P",{"data-svelte-h":!0}),o($s)!=="svelte-b0250q"&&($s.textContent=In),Yt=p(l),Vs=c(l,"UL",{"data-svelte-h":!0}),o(Vs)!=="svelte-lnos2g"&&(Vs.innerHTML=Cn),Ft=p(l),zs=c(l,"P",{"data-svelte-h":!0}),o(zs)!=="svelte-18lnk9g"&&(zs.textContent=_n),Et=p(l),d(Ns.$$.fragment,l),St=p(l),As=c(l,"P",{"data-svelte-h":!0}),o(As)!=="svelte-63fwyj"&&(As.innerHTML=Gn),Ht=p(l),xs=c(l,"P",{"data-svelte-h":!0}),o(xs)!=="svelte-1ri0cnp"&&(xs.innerHTML=Zn),Lt=p(l),d(Qs.$$.fragment,l),qt=p(l),d(vs.$$.fragment,l),Dt=p(l),Ys=c(l,"P",{"data-svelte-h":!0}),o(Ys)!=="svelte-1g2nzec"&&(Ys.innerHTML=Bn),Kt=p(l),d(Fs.$$.fragment,l),Pt=p(l),d(Es.$$.fragment,l),Ot=p(l),Ss=c(l,"P",{"data-svelte-h":!0}),o(Ss)!=="svelte-1irg7g7"&&(Ss.textContent=kn),la=p(l),d(Hs.$$.fragment,l),sa=p(l),d(Ls.$$.fragment,l),ea=p(l),qs=c(l,"P",{"data-svelte-h":!0}),o(qs)!=="svelte-s4xz4w"&&(qs.innerHTML=gn),ta=p(l),d(Ds.$$.fragment,l),aa=p(l),Ks=c(l,"P",{"data-svelte-h":!0}),o(Ks)!=="svelte-1f1lty1"&&(Ks.innerHTML=Rn),na=p(l),d(Ps.$$.fragment,l),Ma=p(l),Os=c(l,"P",{"data-svelte-h":!0}),o(Os)!=="svelte-1b09b1b"&&(Os.innerHTML=Xn),pa=p(l),d(le.$$.fragment,l),ia=p(l),d(se.$$.fragment,l),ya=p(l),ee=c(l,"P",{"data-svelte-h":!0}),o(ee)!=="svelte-2q4mmn"&&(ee.innerHTML=Wn),Ja=p(l),te=c(l,"P",{"data-svelte-h":!0}),o(te)!=="svelte-uq17ce"&&(te.innerHTML=$n),Ua=p(l),d(vl.$$.fragment,l),ra=p(l),D&&D.l(l),He=p(l),ae=c(l,"P",{"data-svelte-h":!0}),o(ae)!=="svelte-spzldp"&&(ae.innerHTML=Vn),Ta=p(l),ne=c(l,"P",{"data-svelte-h":!0}),o(ne)!=="svelte-s3slxv"&&(ne.textContent=zn),ca=p(l),Me=c(l,"P",{"data-svelte-h":!0}),o(Me)!=="svelte-13ry3kd"&&(Me.innerHTML=Nn),oa=p(l),cl.l(l),Le=p(l),pe=c(l,"P",{"data-svelte-h":!0}),o(pe)!=="svelte-1mvkuj"&&(pe.textContent=An),wa=p(l),d(ie.$$.fragment,l),da=p(l),d(ye.$$.fragment,l),ma=p(l),d(Yl.$$.fragment,l),ja=p(l),Je=c(l,"P",{"data-svelte-h":!0}),o(Je)!=="svelte-1ya2flu"&&(Je.innerHTML=xn),ua=p(l),d(Ue.$$.fragment,l),ba=p(l),d(re.$$.fragment,l),ha=p(l),Te=c(l,"P",{"data-svelte-h":!0}),o(Te)!=="svelte-16ngp5n"&&(Te.innerHTML=Qn),fa=p(l),ce=c(l,"P",{"data-svelte-h":!0}),o(ce)!=="svelte-21p96x"&&(ce.textContent=vn),Ia=p(l),d(oe.$$.fragment,l),Ca=p(l),we=c(l,"P",{"data-svelte-h":!0}),o(we)!=="svelte-10bgzfw"&&(we.textContent=Yn),_a=p(l),d(de.$$.fragment,l),Ga=p(l),me=c(l,"P",{"data-svelte-h":!0}),o(me)!=="svelte-x85tce"&&(me.textContent=Fn),Za=p(l),wl.l(l),qe=p(l),d(je.$$.fragment,l),Ba=p(l),d(ue.$$.fragment,l),ka=p(l),be=c(l,"P",{"data-svelte-h":!0}),o(be)!=="svelte-1mohva3"&&(be.textContent=En),ga=p(l),he=c(l,"P",{"data-svelte-h":!0}),o(he)!=="svelte-2uh2py"&&(he.textContent=Sn),Ra=p(l),ml.l(l),De=p(l),d(fe.$$.fragment,l),Xa=p(l),Ie=c(l,"P",{"data-svelte-h":!0}),o(Ie)!=="svelte-kt8zxr"&&(Ie.textContent=Hn),Wa=p(l),ul.l(l),Ke=p(l),Ce=c(l,"P",{"data-svelte-h":!0}),o(Ce)!=="svelte-7ylmlo"&&(Ce.textContent=Ln),$a=p(l),hl.l(l),Pe=p(l),d(_e.$$.fragment,l),Va=p(l),Ge=c(l,"P",{"data-svelte-h":!0}),o(Ge)!=="svelte-1026zzo"&&(Ge.textContent=qn),za=p(l),x&&x.l(l),Oe=p(l),d(Fl.$$.fragment,l),Na=p(l),Q&&Q.l(l),lt=p(l),d(Ze.$$.fragment,l),Aa=p(l),Be=c(l,"P",{"data-svelte-h":!0}),o(Be)!=="svelte-s3mo0k"&&(Be.innerHTML=Dn),xa=p(l),d(ke.$$.fragment,l),Qa=p(l),ge=c(l,"P",{"data-svelte-h":!0}),o(ge)!=="svelte-z09cbh"&&(ge.textContent=Kn),va=p(l),d(Re.$$.fragment,l),Ya=p(l),d(Xe.$$.fragment,l),Fa=p(l),We=c(l,"P",{"data-svelte-h":!0}),o(We)!=="svelte-7lqmqg"&&(We.textContent=Pn),Ea=p(l),d($e.$$.fragment,l),Sa=p(l),Ve=c(l,"P",{"data-svelte-h":!0}),o(Ve)!=="svelte-hns90r"&&(Ve.innerHTML=On),Ha=p(l),d(El.$$.fragment,l),La=p(l),d(ze.$$.fragment,l),qa=p(l),at=c(l,"P",{}),Mn(at).forEach(e),this.h()},h(){fl(a,"name","hf:doc:metadata"),fl(a,"content",yp),fl(V,"class","flex justify-center"),kM(N.src,ql="https://course-demos-distilbert-base-uncased-finetune-7400b54.hf.space")||fl(N,"src",ql),fl(N,"frameborder","0"),fl(N,"height","300"),fl(N,"title","Gradio app"),fl(N,"class","block dark:hidden container p-0 flex-grow space-iframe"),fl(N,"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"),fl(N,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),fl(Y,"class","flex justify-center")},m(l,s){$M(document.head,a),t(l,r,s),t(l,n,s),t(l,U,s),m(G,l,s),t(l,u,s),m(R,l,s),t(l,W,s),Ne[_].m(l,s),t(l,g,s),t(l,k,s),t(l,Z,s),t(l,z,s),t(l,C,s),t(l,$,s),t(l,B,s),t(l,V,s),t(l,Rl,s),t(l,S,s),t(l,Xl,s),t(l,N,s),t(l,P,s),t(l,Cl,s),t(l,O,s),m(ll,l,s),t(l,sl,s),m(Jl,l,s),t(l,Wl,s),m(H,l,s),t(l,$l,s),t(l,L,s),t(l,Vl,s),t(l,Y,s),t(l,el,s),t(l,_l,s),t(l,tl,s),t(l,al,s),t(l,zl,s),t(l,q,s),t(l,Nl,s),Ae[A].m(l,s),t(l,K,s),t(l,Zl,s),t(l,nl,s),m(Ml,l,s),t(l,pl,s),t(l,il,s),t(l,ls,s),m(yl,l,s),t(l,i,s),t(l,f,s),t(l,nt,s),xe[Ul].m(l,s),t(l,Se,s),m(ss,l,s),t(l,Mt,s),t(l,es,s),t(l,pt,s),m(ts,l,s),t(l,it,s),t(l,as,s),t(l,yt,s),m(ns,l,s),t(l,Jt,s),m(Ms,l,s),t(l,Ut,s),t(l,ps,s),t(l,rt,s),m(is,l,s),t(l,Tt,s),m(ys,l,s),t(l,ct,s),t(l,Js,s),t(l,ot,s),m(Al,l,s),t(l,wt,s),t(l,Us,s),t(l,dt,s),m(rs,l,s),t(l,mt,s),m(Ts,l,s),t(l,jt,s),t(l,cs,s),t(l,ut,s),t(l,os,s),t(l,bt,s),m(ws,l,s),t(l,ht,s),m(ds,l,s),t(l,ft,s),t(l,ms,s),t(l,It,s),t(l,js,s),t(l,Ct,s),m(us,l,s),t(l,_t,s),m(bs,l,s),t(l,Gt,s),t(l,hs,s),t(l,Zt,s),m(xl,l,s),t(l,Bt,s),t(l,fs,s),t(l,kt,s),m(Is,l,s),t(l,gt,s),m(Ql,l,s),t(l,Rt,s),t(l,Cs,s),t(l,Xt,s),m(_s,l,s),t(l,Wt,s),m(Gs,l,s),t(l,$t,s),t(l,Zs,s),t(l,Vt,s),m(Bs,l,s),t(l,zt,s),m(ks,l,s),t(l,Nt,s),t(l,gs,s),t(l,At,s),t(l,Rs,s),t(l,xt,s),m(Xs,l,s),t(l,Qt,s),m(Ws,l,s),t(l,vt,s),t(l,$s,s),t(l,Yt,s),t(l,Vs,s),t(l,Ft,s),t(l,zs,s),t(l,Et,s),m(Ns,l,s),t(l,St,s),t(l,As,s),t(l,Ht,s),t(l,xs,s),t(l,Lt,s),m(Qs,l,s),t(l,qt,s),m(vs,l,s),t(l,Dt,s),t(l,Ys,s),t(l,Kt,s),m(Fs,l,s),t(l,Pt,s),m(Es,l,s),t(l,Ot,s),t(l,Ss,s),t(l,la,s),m(Hs,l,s),t(l,sa,s),m(Ls,l,s),t(l,ea,s),t(l,qs,s),t(l,ta,s),m(Ds,l,s),t(l,aa,s),t(l,Ks,s),t(l,na,s),m(Ps,l,s),t(l,Ma,s),t(l,Os,s),t(l,pa,s),m(le,l,s),t(l,ia,s),m(se,l,s),t(l,ya,s),t(l,ee,s),t(l,Ja,s),t(l,te,s),t(l,Ua,s),m(vl,l,s),t(l,ra,s),D&&D.m(l,s),t(l,He,s),t(l,ae,s),t(l,Ta,s),t(l,ne,s),t(l,ca,s),t(l,Me,s),t(l,oa,s),Qe[Tl].m(l,s),t(l,Le,s),t(l,pe,s),t(l,wa,s),m(ie,l,s),t(l,da,s),m(ye,l,s),t(l,ma,s),m(Yl,l,s),t(l,ja,s),t(l,Je,s),t(l,ua,s),m(Ue,l,s),t(l,ba,s),m(re,l,s),t(l,ha,s),t(l,Te,s),t(l,fa,s),t(l,ce,s),t(l,Ia,s),m(oe,l,s),t(l,Ca,s),t(l,we,s),t(l,_a,s),m(de,l,s),t(l,Ga,s),t(l,me,s),t(l,Za,s),ve[ol].m(l,s),t(l,qe,s),m(je,l,s),t(l,Ba,s),m(ue,l,s),t(l,ka,s),t(l,be,s),t(l,ga,s),t(l,he,s),t(l,Ra,s),Ye[dl].m(l,s),t(l,De,s),m(fe,l,s),t(l,Xa,s),t(l,Ie,s),t(l,Wa,s),Fe[jl].m(l,s),t(l,Ke,s),t(l,Ce,s),t(l,$a,s),Ee[bl].m(l,s),t(l,Pe,s),m(_e,l,s),t(l,Va,s),t(l,Ge,s),t(l,za,s),x&&x.m(l,s),t(l,Oe,s),m(Fl,l,s),t(l,Na,s),Q&&Q.m(l,s),t(l,lt,s),m(Ze,l,s),t(l,Aa,s),t(l,Be,s),t(l,xa,s),m(ke,l,s),t(l,Qa,s),t(l,ge,s),t(l,va,s),m(Re,l,s),t(l,Ya,s),m(Xe,l,s),t(l,Fa,s),t(l,We,s),t(l,Ea,s),m($e,l,s),t(l,Sa,s),t(l,Ve,s),t(l,Ha,s),m(El,l,s),t(l,La,s),m(ze,l,s),t(l,qa,s),t(l,at,s),Da=!0},p(l,[s]){const wM={};s&1&&(wM.fw=l[0]),G.$set(wM);let Pa=_;_=sM(l),_!==Pa&&(gl(),J(Ne[Pa],1,1,()=>{Ne[Pa]=null}),kl(),X=Ne[_],X||(X=Ne[_]=lM[_](l),X.c()),y(X,1),X.m(g.parentNode,g));const dM={};s&2&&(dM.$$scope={dirty:s,ctx:l}),Jl.$set(dM);let Oa=A;A=tM(l),A!==Oa&&(gl(),J(Ae[Oa],1,1,()=>{Ae[Oa]=null}),kl(),F=Ae[A],F||(F=Ae[A]=eM[A](l),F.c()),y(F,1),F.m(K.parentNode,K));let ln=Ul;Ul=nM(l),Ul!==ln&&(gl(),J(xe[ln],1,1,()=>{xe[ln]=null}),kl(),rl=xe[Ul],rl||(rl=xe[Ul]=aM[Ul](l),rl.c()),y(rl,1),rl.m(Se.parentNode,Se));const mM={};s&2&&(mM.$$scope={dirty:s,ctx:l}),Al.$set(mM);const jM={};s&2&&(jM.$$scope={dirty:s,ctx:l}),xl.$set(jM);const uM={};s&2&&(uM.$$scope={dirty:s,ctx:l}),Ql.$set(uM);const bM={};s&2&&(bM.$$scope={dirty:s,ctx:l}),vl.$set(bM),l[0]==="pt"?D||(D=CM(),D.c(),D.m(He.parentNode,He)):D&&(D.d(1),D=null);let sn=Tl;Tl=pM(l),Tl!==sn&&(gl(),J(Qe[sn],1,1,()=>{Qe[sn]=null}),kl(),cl=Qe[Tl],cl||(cl=Qe[Tl]=MM[Tl](l),cl.c()),y(cl,1),cl.m(Le.parentNode,Le));const hM={};s&2&&(hM.$$scope={dirty:s,ctx:l}),Yl.$set(hM);let en=ol;ol=yM(l),ol!==en&&(gl(),J(ve[en],1,1,()=>{ve[en]=null}),kl(),wl=ve[ol],wl||(wl=ve[ol]=iM[ol](l),wl.c()),y(wl,1),wl.m(qe.parentNode,qe));let tn=dl;dl=UM(l),dl!==tn&&(gl(),J(Ye[tn],1,1,()=>{Ye[tn]=null}),kl(),ml=Ye[dl],ml||(ml=Ye[dl]=JM[dl](l),ml.c()),y(ml,1),ml.m(De.parentNode,De));let an=jl;jl=TM(l),jl!==an&&(gl(),J(Fe[an],1,1,()=>{Fe[an]=null}),kl(),ul=Fe[jl],ul||(ul=Fe[jl]=rM[jl](l),ul.c()),y(ul,1),ul.m(Ke.parentNode,Ke));let nn=bl;bl=oM(l),bl!==nn&&(gl(),J(Ee[nn],1,1,()=>{Ee[nn]=null}),kl(),hl=Ee[bl],hl||(hl=Ee[bl]=cM[bl](l),hl.c()),y(hl,1),hl.m(Pe.parentNode,Pe)),l[0]==="pt"?x?s&1&&y(x,1):(x=_M(),x.c(),y(x,1),x.m(Oe.parentNode,Oe)):x&&(gl(),J(x,1,1,()=>{x=null}),kl());const fM={};s&2&&(fM.$$scope={dirty:s,ctx:l}),Fl.$set(fM),l[0]==="pt"?Q?s&1&&y(Q,1):(Q=GM(),Q.c(),y(Q,1),Q.m(lt.parentNode,lt)):Q&&(gl(),J(Q,1,1,()=>{Q=null}),kl());const IM={};s&2&&(IM.$$scope={dirty:s,ctx:l}),El.$set(IM)},i(l){Da||(y(G.$$.fragment,l),y(R.$$.fragment,l),y(X),y(ll.$$.fragment,l),y(Jl.$$.fragment,l),y(H.$$.fragment,l),y(F),y(Ml.$$.fragment,l),y(yl.$$.fragment,l),y(rl),y(ss.$$.fragment,l),y(ts.$$.fragment,l),y(ns.$$.fragment,l),y(Ms.$$.fragment,l),y(is.$$.fragment,l),y(ys.$$.fragment,l),y(Al.$$.fragment,l),y(rs.$$.fragment,l),y(Ts.$$.fragment,l),y(ws.$$.fragment,l),y(ds.$$.fragment,l),y(us.$$.fragment,l),y(bs.$$.fragment,l),y(xl.$$.fragment,l),y(Is.$$.fragment,l),y(Ql.$$.fragment,l),y(_s.$$.fragment,l),y(Gs.$$.fragment,l),y(Bs.$$.fragment,l),y(ks.$$.fragment,l),y(Xs.$$.fragment,l),y(Ws.$$.fragment,l),y(Ns.$$.fragment,l),y(Qs.$$.fragment,l),y(vs.$$.fragment,l),y(Fs.$$.fragment,l),y(Es.$$.fragment,l),y(Hs.$$.fragment,l),y(Ls.$$.fragment,l),y(Ds.$$.fragment,l),y(Ps.$$.fragment,l),y(le.$$.fragment,l),y(se.$$.fragment,l),y(vl.$$.fragment,l),y(cl),y(ie.$$.fragment,l),y(ye.$$.fragment,l),y(Yl.$$.fragment,l),y(Ue.$$.fragment,l),y(re.$$.fragment,l),y(oe.$$.fragment,l),y(de.$$.fragment,l),y(wl),y(je.$$.fragment,l),y(ue.$$.fragment,l),y(ml),y(fe.$$.fragment,l),y(ul),y(hl),y(_e.$$.fragment,l),y(x),y(Fl.$$.fragment,l),y(Q),y(Ze.$$.fragment,l),y(ke.$$.fragment,l),y(Re.$$.fragment,l),y(Xe.$$.fragment,l),y($e.$$.fragment,l),y(El.$$.fragment,l),y(ze.$$.fragment,l),Da=!0)},o(l){J(G.$$.fragment,l),J(R.$$.fragment,l),J(X),J(ll.$$.fragment,l),J(Jl.$$.fragment,l),J(H.$$.fragment,l),J(F),J(Ml.$$.fragment,l),J(yl.$$.fragment,l),J(rl),J(ss.$$.fragment,l),J(ts.$$.fragment,l),J(ns.$$.fragment,l),J(Ms.$$.fragment,l),J(is.$$.fragment,l),J(ys.$$.fragment,l),J(Al.$$.fragment,l),J(rs.$$.fragment,l),J(Ts.$$.fragment,l),J(ws.$$.fragment,l),J(ds.$$.fragment,l),J(us.$$.fragment,l),J(bs.$$.fragment,l),J(xl.$$.fragment,l),J(Is.$$.fragment,l),J(Ql.$$.fragment,l),J(_s.$$.fragment,l),J(Gs.$$.fragment,l),J(Bs.$$.fragment,l),J(ks.$$.fragment,l),J(Xs.$$.fragment,l),J(Ws.$$.fragment,l),J(Ns.$$.fragment,l),J(Qs.$$.fragment,l),J(vs.$$.fragment,l),J(Fs.$$.fragment,l),J(Es.$$.fragment,l),J(Hs.$$.fragment,l),J(Ls.$$.fragment,l),J(Ds.$$.fragment,l),J(Ps.$$.fragment,l),J(le.$$.fragment,l),J(se.$$.fragment,l),J(vl.$$.fragment,l),J(cl),J(ie.$$.fragment,l),J(ye.$$.fragment,l),J(Yl.$$.fragment,l),J(Ue.$$.fragment,l),J(re.$$.fragment,l),J(oe.$$.fragment,l),J(de.$$.fragment,l),J(wl),J(je.$$.fragment,l),J(ue.$$.fragment,l),J(ml),J(fe.$$.fragment,l),J(ul),J(hl),J(_e.$$.fragment,l),J(x),J(Fl.$$.fragment,l),J(Q),J(Ze.$$.fragment,l),J(ke.$$.fragment,l),J(Re.$$.fragment,l),J(Xe.$$.fragment,l),J($e.$$.fragment,l),J(El.$$.fragment,l),J(ze.$$.fragment,l),Da=!1},d(l){l&&(e(r),e(n),e(U),e(u),e(W),e(g),e(k),e(Z),e(z),e(C),e($),e(B),e(V),e(Rl),e(S),e(Xl),e(N),e(P),e(Cl),e(O),e(sl),e(Wl),e($l),e(L),e(Vl),e(Y),e(el),e(_l),e(tl),e(al),e(zl),e(q),e(Nl),e(K),e(Zl),e(nl),e(pl),e(il),e(ls),e(i),e(f),e(nt),e(Se),e(Mt),e(es),e(pt),e(it),e(as),e(yt),e(Jt),e(Ut),e(ps),e(rt),e(Tt),e(ct),e(Js),e(ot),e(wt),e(Us),e(dt),e(mt),e(jt),e(cs),e(ut),e(os),e(bt),e(ht),e(ft),e(ms),e(It),e(js),e(Ct),e(_t),e(Gt),e(hs),e(Zt),e(Bt),e(fs),e(kt),e(gt),e(Rt),e(Cs),e(Xt),e(Wt),e($t),e(Zs),e(Vt),e(zt),e(Nt),e(gs),e(At),e(Rs),e(xt),e(Qt),e(vt),e($s),e(Yt),e(Vs),e(Ft),e(zs),e(Et),e(St),e(As),e(Ht),e(xs),e(Lt),e(qt),e(Dt),e(Ys),e(Kt),e(Pt),e(Ot),e(Ss),e(la),e(sa),e(ea),e(qs),e(ta),e(aa),e(Ks),e(na),e(Ma),e(Os),e(pa),e(ia),e(ya),e(ee),e(Ja),e(te),e(Ua),e(ra),e(He),e(ae),e(Ta),e(ne),e(ca),e(Me),e(oa),e(Le),e(pe),e(wa),e(da),e(ma),e(ja),e(Je),e(ua),e(ba),e(ha),e(Te),e(fa),e(ce),e(Ia),e(Ca),e(we),e(_a),e(Ga),e(me),e(Za),e(qe),e(Ba),e(ka),e(be),e(ga),e(he),e(Ra),e(De),e(Xa),e(Ie),e(Wa),e(Ke),e(Ce),e($a),e(Pe),e(Va),e(Ge),e(za),e(Oe),e(Na),e(lt),e(Aa),e(Be),e(xa),e(Qa),e(ge),e(va),e(Ya),e(Fa),e(We),e(Ea),e(Sa),e(Ve),e(Ha),e(La),e(qa),e(at)),e(a),j(G,l),j(R,l),Ne[_].d(l),j(ll,l),j(Jl,l),j(H,l),Ae[A].d(l),j(Ml,l),j(yl,l),xe[Ul].d(l),j(ss,l),j(ts,l),j(ns,l),j(Ms,l),j(is,l),j(ys,l),j(Al,l),j(rs,l),j(Ts,l),j(ws,l),j(ds,l),j(us,l),j(bs,l),j(xl,l),j(Is,l),j(Ql,l),j(_s,l),j(Gs,l),j(Bs,l),j(ks,l),j(Xs,l),j(Ws,l),j(Ns,l),j(Qs,l),j(vs,l),j(Fs,l),j(Es,l),j(Hs,l),j(Ls,l),j(Ds,l),j(Ps,l),j(le,l),j(se,l),j(vl,l),D&&D.d(l),Qe[Tl].d(l),j(ie,l),j(ye,l),j(Yl,l),j(Ue,l),j(re,l),j(oe,l),j(de,l),ve[ol].d(l),j(je,l),j(ue,l),Ye[dl].d(l),j(fe,l),Fe[jl].d(l),Ee[bl].d(l),j(_e,l),x&&x.d(l),j(Fl,l),Q&&Q.d(l),j(Ze,l),j(ke,l),j(Re,l),j(Xe,l),j($e,l),j(El,l),j(ze,l)}}}const yp='{"title":"マスク言語モデルの微調整","local":"マスク言語モデルの微調整","sections":[{"title":"マスク言語モデリング用の事前学習済みモデルの選択","local":"マスク言語モデリング用の事前学習済みモデルの選択","sections":[],"depth":2},{"title":"データセット","local":"データセット","sections":[],"depth":2},{"title":"データの前処理","local":"データの前処理","sections":[],"depth":2},{"title":"DistilBERTを Trainer APIで微調整する","local":"distilbertを-trainer-apiで微調整する","sections":[{"title":"言語モデルのパープレキシティ","local":"言語モデルのパープレキシティ","sections":[],"depth":3}],"depth":2},{"title":"DistilBERTを🤗 Accelerateを使って微調整する","local":"distilbertを-accelerateを使って微調整する","sections":[],"depth":2},{"title":"微調整したモデルを使う","local":"微調整したモデルを使う","sections":[],"depth":2}],"depth":1}';function Jp(I,a,r){let n="pt";return gM(()=>{const U=new URLSearchParams(window.location.search);r(0,n=U.get("fw")||"pt")}),[n]}class jp extends RM{constructor(a){super(),XM(this,a,Jp,ip,BM,{})}}export{jp as component};
