Buckets:

rtrm's picture
download
raw
145 kB
import{s as Sn,a as Ln,o as Dn,n as En}from"../chunks/scheduler.ddeee2a5.js";import{S as qn,i as Pn,e as c,s as a,c as w,h as On,a as J,d as e,b as p,f as jn,g as o,j as y,k as ll,l as Kn,m as t,n as b,o as j,q as oe,t as T,p as u,r as be}from"../chunks/index.b5ed4bbb.js";import{C as la,H as wl,E as sa}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.59602dc4.js";import{Y as Hn}from"../chunks/Youtube.08e6a733.js";import{C as f}from"../chunks/CodeBlock.b7df1902.js";import{C as Fn}from"../chunks/CourseFloatingBanner.e70be405.js";import{F as ea}from"../chunks/FrameworkSwitchCourse.f26cbc91.js";function ta(A){let r,C;return r=new Fn({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/section2_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ja/chapter7/section2_tf.ipynb"}]}}),{c(){w(r.$$.fragment)},l(m){o(r.$$.fragment,m)},m(m,h){b(r,m,h),C=!0},i(m){C||(T(r.$$.fragment,m),C=!0)},o(m){j(r.$$.fragment,m),C=!1},d(m){u(r,m)}}}function na(A){let r,C;return r=new Fn({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/section2_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/ja/chapter7/section2_pt.ipynb"}]}}),{c(){w(r.$$.fragment)},l(m){o(r.$$.fragment,m)},m(m,h){b(r,m,h),C=!0},i(m){C||(T(r.$$.fragment,m),C=!0)},o(m){j(r.$$.fragment,m),C=!1},d(m){u(r,m)}}}function aa(A){let r,C,m,h="Kerasを使った実際のコードは、これまでとほとんど同じで、データをバッチ化する方法と、指標計算の関数が変わるだけです。",Z;return r=new wl({props:{title:"Keras を使ってモデルを微調整する",local:"keras-を使ってモデルを微調整する",headingTag:"h2"}}),{c(){w(r.$$.fragment),C=a(),m=c("p"),m.textContent=h},l(d){o(r.$$.fragment,d),C=p(d),m=J(d,"P",{"data-svelte-h":!0}),y(m)!=="svelte-1q9rhmk"&&(m.textContent=h)},m(d,k){b(r,d,k),t(d,C,k),t(d,m,k),Z=!0},i(d){Z||(T(r.$$.fragment,d),Z=!0)},o(d){j(r.$$.fragment,d),Z=!1},d(d){d&&(e(C),e(m)),u(r,d)}}}function pa(A){let r,C,m,h="実際に <code>Trainer</code> を使用するコードは、これまでと同じです。変更点は、データをバッチ化する方法と、指標を計算する関数だけです。",Z;return r=new wl({props:{title:"Trainer API でモデルを微調整する",local:"trainer-api-でモデルを微調整する",headingTag:"h2"}}),{c(){w(r.$$.fragment),C=a(),m=c("p"),m.innerHTML=h},l(d){o(r.$$.fragment,d),C=p(d),m=J(d,"P",{"data-svelte-h":!0}),y(m)!=="svelte-odws7v"&&(m.innerHTML=h)},m(d,k){b(r,d,k),t(d,C,k),t(d,m,k),Z=!0},i(d){Z||(T(r.$$.fragment,d),Z=!0)},o(d){j(r.$$.fragment,d),Z=!1},d(d){d&&(e(C),e(m)),u(r,d)}}}function Ma(A){let r,C;return r=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvckZvclRva2VuQ2xhc3NpZmljYXRpb24lMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGF0YUNvbGxhdG9yRm9yVG9rZW5DbGFzc2lmaWNhdGlvbiglMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMjByZXR1cm5fdGVuc29ycyUzRCUyMnRmJTIyJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorForTokenClassification
data_collator = DataCollatorForTokenClassification(
tokenizer=tokenizer, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>
)`,wrap:!1}}),{c(){w(r.$$.fragment)},l(m){o(r.$$.fragment,m)},m(m,h){b(r,m,h),C=!0},i(m){C||(T(r.$$.fragment,m),C=!0)},o(m){j(r.$$.fragment,m),C=!1},d(m){u(r,m)}}}function ia(A){let r,C;return r=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMERhdGFDb2xsYXRvckZvclRva2VuQ2xhc3NpZmljYXRpb24lMEElMEFkYXRhX2NvbGxhdG9yJTIwJTNEJTIwRGF0YUNvbGxhdG9yRm9yVG9rZW5DbGFzc2lmaWNhdGlvbih0b2tlbml6ZXIlM0R0b2tlbml6ZXIp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> DataCollatorForTokenClassification
data_collator = DataCollatorForTokenClassification(tokenizer=tokenizer)`,wrap:!1}}),{c(){w(r.$$.fragment)},l(m){o(r.$$.fragment,m)},m(m,h){b(r,m,h),C=!0},i(m){C||(T(r.$$.fragment,m),C=!0)},o(m){j(r.$$.fragment,m),C=!1},d(m){u(r,m)}}}function ra(A){let r,C=`データ照合の準備ができました!
では、これを使って <code>tf.data.Dataset</code> を <code>to_tf_dataset()</code> メソッドを使って作ってみましょう。`,m,h,Z,d,k="次は、モデル本体です。",W;return h=new f({props:{code:"dGZfdHJhaW5fZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELnRvX3RmX2RhdGFzZXQoJTBBJTIwJTIwJTIwJTIwY29sdW1ucyUzRCU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTJDJTIwJTIyaW5wdXRfaWRzJTIyJTJDJTIwJTIybGFiZWxzJTIyJTJDJTIwJTIydG9rZW5fdHlwZV9pZHMlMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBjb2xsYXRlX2ZuJTNEZGF0YV9jb2xsYXRvciUyQyUwQSUyMCUyMCUyMCUyMHNodWZmbGUlM0RUcnVlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDE2JTJDJTBBKSUwQSUwQXRmX2V2YWxfZGF0YXNldCUyMCUzRCUyMHRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnZhbGlkYXRpb24lMjIlNUQudG9fdGZfZGF0YXNldCglMEElMjAlMjAlMjAlMjBjb2x1bW5zJTNEJTVCJTIyYXR0ZW50aW9uX21hc2slMjIlMkMlMjAlMjJpbnB1dF9pZHMlMjIlMkMlMjAlMjJsYWJlbHMlMjIlMkMlMjAlMjJ0b2tlbl90eXBlX2lkcyUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwc2h1ZmZsZSUzREZhbHNlJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDE2JTJDJTBBKQ==",highlighted:`tf_train_dataset = tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>].to_tf_dataset(
columns=[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>],
collate_fn=data_collator,
shuffle=<span class="hljs-literal">True</span>,
batch_size=<span class="hljs-number">16</span>,
)
tf_eval_dataset = tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>].to_tf_dataset(
columns=[<span class="hljs-string">&quot;attention_mask&quot;</span>, <span class="hljs-string">&quot;input_ids&quot;</span>, <span class="hljs-string">&quot;labels&quot;</span>, <span class="hljs-string">&quot;token_type_ids&quot;</span>],
collate_fn=data_collator,
shuffle=<span class="hljs-literal">False</span>,
batch_size=<span class="hljs-number">16</span>,
)`,wrap:!1}}),{c(){r=c("p"),r.innerHTML=C,m=a(),w(h.$$.fragment),Z=a(),d=c("p"),d.textContent=k},l(U){r=J(U,"P",{"data-svelte-h":!0}),y(r)!=="svelte-x9hmxz"&&(r.innerHTML=C),m=p(U),o(h.$$.fragment,U),Z=p(U),d=J(U,"P",{"data-svelte-h":!0}),y(d)!=="svelte-jzzcpi"&&(d.textContent=k)},m(U,B){t(U,r,B),t(U,m,B),b(h,U,B),t(U,Z,B),t(U,d,B),W=!0},i(U){W||(T(h.$$.fragment,U),W=!0)},o(U){j(h.$$.fragment,U),W=!1},d(U){U&&(e(r),e(m),e(Z),e(d)),u(h,U)}}}function ca(A){let r,C="見ての通り、2つ目のラベルのセットは最初のラベルの長さに <code>-100</code>s を使ってパディングされています.";return{c(){r=c("p"),r.innerHTML=C},l(m){r=J(m,"P",{"data-svelte-h":!0}),y(r)!=="svelte-1s0xhtd"&&(r.innerHTML=C)},m(m,h){t(m,r,h)},i:En,o:En,d(m){m&&e(r)}}}function Nn(A){let r,C,m,h="今回はトークン分類の問題を扱うので、 <code>TFAutoModelForTokenClassification</code> クラスを使用します。このモデルを定義する際に覚えておくべきことは、ラベルの数に関する情報を渡すことです。最も簡単な方法は <code>num_labels</code> 引数でその数を渡すことですが、このセクションの最初に見たような素敵な推論ウィジェットを動作させたい場合は、代わりに正しいラベルの対応関係を設定した方が良いでしょう。",Z,d,k="id2label<code>と</code>label2id` という 2 つの辞書型データがあり、ID からラベル、ラベルから ID へのマッピングを設定することができます。",W,U,B,g,x="あとはそれらを <code>TFAutoModelForTokenClassification.from_pretrained()</code> メソッドに渡せば、モデルの設定にセットされ、適切に保存されてHubにアップロードされるでしょう。",G,$,_,v,Dl='<a href="/course/ja/chapter3">第3章</a> で <code>TFAutoModelForSequenceClassification</code> を定義したときのように、モデルを作成すると、いくつかの重みが使われていない(事前学習済みモデルのヘッド部の重み)、他のいくつかの重みがランダムに初期化されている(新しく接続したトークン分類ヘッドの重み)、このモデルはトレーニングする必要があるという警告が表示されます。トレーニングはすぐにでも実行できますが、まずはこのモデルが正しい数のラベルを持つことを再確認しましょう。',Pl,S,al,L,pl,D,gs="<p>⚠️ ラベルの数が間違っているモデルがあると、後で <code>model.fit()</code> を呼び出すときによくわからないエラーが発生します。このエラーはデバッグの際に厄介なので、このチェックを必ず行い、期待通りのラベル数であることを確認してください。</p>",Y,sl,Xl,V,Te=`これでモデルを学習する準備が整いました!
しかし、その前にもう少しだけやるべきことがあります。Hugging Faceにログインし、学習用ハイパーパラメータを定義する必要があります。もしNotebookで作業しているなら、これを助ける便利な関数があります。`,Ql,X,Bs,Ml,el="これにより、Hugging Faceのログイン情報を入力するウィジェットが表示されます。",El,Q,je="Notebookで作業していない場合は、ターミナルに次の行を入力するだけです。",Hl,R,Ws,il,tl="ログインしたら、モデルをコンパイルするために必要なものをすべて準備します。",Nl,E,me="🤗 Transformers は便利な <code>create_optimizer()</code> 関数を提供しており、重みの減衰と学習率の減衰を適切に設定した <code>AdamW</code> オプティマイザが得られます。この2つの設定は、組み込みの <code>Adam</code> オプティマイザと比較してあなたのモデルの性能を向上させるでしょう。",zl,H,Fl,N,we="また、<code>compile()</code>に <code>loss</code>引数を与えないことにも注意してください。これは、モデルが内部的に損失を計算することができるからです。損失なしでコンパイルして、入力辞書にラベルを指定すると(私たちのデータセットで行っているように)、モデルはその内部損失を使用して学習し、それは選んだタスクとモデルタイプに適したものになるでしょう。",Sl,z,Gs="次に、学習中にモデルをHubにアップロードするための<code>PushToHubCallback</code>を定義し、そのコールバックでモデルをフィットさせます。",rl,q,ol,bl,ul='<code>hub_model_id</code> 引数には、プッシュしたいリポジトリのフルネームを指定できます。 (特に、特定の組織(organization)にプッシュする場合はこの引数を使用する必要があります)。例えば、モデルを <a href="https://huggingface.co/huggingface-course" rel="nofollow"><code>huggingface-course</code> organization</a> にプッシュする場合、 <code>hub_model_id=&quot;huggingface-course/bert-finetuned-ner&quot;</code> を追加します。デフォルトでは、使用されるリポジトリはあなたの名前が使われ、設定した出力ディレクトリにちなんだ名前、例えば <code>&quot;cool_huggingface_user/bert-finetuned-ner&quot;</code> となります。',Ul,yl,Tl="<p>💡 使用している出力ディレクトリがすでに存在する場合は、プッシュしたいリポジトリのローカルクローンである必要があります。そうでない場合は、<code>model.fit()</code> を呼び出すときにエラーが発生し、新しい名前を設定する必要があります。</p>",dl,cl,nl="学習が行われている間、モデルが保存されるたびに(今回の例ではエポックごとに)バックグラウンドでHubにアップロードされることに注意してください。このようにしておけば、必要に応じて別のマシンで学習を再開することができます。この段階で、Model Hub上の推論ウィジェットを使ってモデルをテストし、友人と共有することができます。",Ol,P,ql="これでトークン分類タスクのモデル微調整に成功しました。おめでとうございます!",Ll,F,As="しかし、このモデルの実力はいかほどでしょうか?それを知るために、いくつかの指標を使って評価する必要があります。",Jl;return r=new wl({props:{title:"モデルの定義",local:"モデルの定義",headingTag:"h3"}}),U=new f({props:{code:"aWQybGFiZWwlMjAlM0QlMjAlN0JpJTNBJTIwbGFiZWwlMjBmb3IlMjBpJTJDJTIwbGFiZWwlMjBpbiUyMGVudW1lcmF0ZShsYWJlbF9uYW1lcyklN0QlMEFsYWJlbDJpZCUyMCUzRCUyMCU3QnYlM0ElMjBrJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGlkMmxhYmVsLml0ZW1zKCklN0Q=",highlighted:`id2label = {i: label <span class="hljs-keyword">for</span> i, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(label_names)}
label2id = {v: k <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> id2label.items()}`,wrap:!1}}),$=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRGQXV0b01vZGVsRm9yVG9rZW5DbGFzc2lmaWNhdGlvbiUwQSUwQW1vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JUb2tlbkNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjBtb2RlbF9jaGVja3BvaW50JTJDJTBBJTIwJTIwJTIwJTIwaWQybGFiZWwlM0RpZDJsYWJlbCUyQyUwQSUyMCUyMCUyMCUyMGxhYmVsMmlkJTNEbGFiZWwyaWQlMkMlMEEp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TFAutoModelForTokenClassification
model = TFAutoModelForTokenClassification.from_pretrained(
model_checkpoint,
id2label=id2label,
label2id=label2id,
)`,wrap:!1}}),S=new f({props:{code:"bW9kZWwuY29uZmlnLm51bV9sYWJlbHM=",highlighted:"model.config.num_labels",wrap:!1}}),L=new f({props:{code:"OQ==",highlighted:'<span class="hljs-number">9</span>',wrap:!1}}),sl=new wl({props:{title:"モデルの微調整",local:"モデルの微調整",headingTag:"h3"}}),X=new f({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login
notebook_login()`,wrap:!1}}),R=new f({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}}),H=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMGNyZWF0ZV9vcHRpbWl6ZXIlMEFpbXBvcnQlMjB0ZW5zb3JmbG93JTIwYXMlMjB0ZiUwQSUwQSUyMyUyMFRyYWluJTIwaW4lMjBtaXhlZC1wcmVjaXNpb24lMjBmbG9hdDE2JTBBJTIzJTIwQ29tbWVudCUyMHRoaXMlMjBsaW5lJTIwb3V0JTIwaWYlMjB5b3UncmUlMjB1c2luZyUyMGElMjBHUFUlMjB0aGF0JTIwd2lsbCUyMG5vdCUyMGJlbmVmaXQlMjBmcm9tJTIwdGhpcyUwQXRmLmtlcmFzLm1peGVkX3ByZWNpc2lvbi5zZXRfZ2xvYmFsX3BvbGljeSglMjJtaXhlZF9mbG9hdDE2JTIyKSUwQSUwQSUyMyUyMFRoZSUyMG51bWJlciUyMG9mJTIwdHJhaW5pbmclMjBzdGVwcyUyMGlzJTIwdGhlJTIwbnVtYmVyJTIwb2YlMjBzYW1wbGVzJTIwaW4lMjB0aGUlMjBkYXRhc2V0JTJDJTIwZGl2aWRlZCUyMGJ5JTIwdGhlJTIwYmF0Y2glMjBzaXplJTIwdGhlbiUyMG11bHRpcGxpZWQlMEElMjMlMjBieSUyMHRoZSUyMHRvdGFsJTIwbnVtYmVyJTIwb2YlMjBlcG9jaHMuJTIwTm90ZSUyMHRoYXQlMjB0aGUlMjB0Zl90cmFpbl9kYXRhc2V0JTIwaGVyZSUyMGlzJTIwYSUyMGJhdGNoZWQlMjB0Zi5kYXRhLkRhdGFzZXQlMkMlMEElMjMlMjBub3QlMjB0aGUlMjBvcmlnaW5hbCUyMEh1Z2dpbmclMjBGYWNlJTIwRGF0YXNldCUyQyUyMHNvJTIwaXRzJTIwbGVuKCklMjBpcyUyMGFscmVhZHklMjBudW1fc2FtcGxlcyUyMCUyRiUyRiUyMGJhdGNoX3NpemUuJTBBbnVtX2Vwb2NocyUyMCUzRCUyMDMlMEFudW1fdHJhaW5fc3RlcHMlMjAlM0QlMjBsZW4odGZfdHJhaW5fZGF0YXNldCklMjAqJTIwbnVtX2Vwb2NocyUwQSUwQW9wdGltaXplciUyQyUyMHNjaGVkdWxlJTIwJTNEJTIwY3JlYXRlX29wdGltaXplciglMEElMjAlMjAlMjAlMjBpbml0X2xyJTNEMmUtNSUyQyUwQSUyMCUyMCUyMCUyMG51bV93YXJtdXBfc3RlcHMlM0QwJTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluX3N0ZXBzJTNEbnVtX3RyYWluX3N0ZXBzJTJDJTBBJTIwJTIwJTIwJTIwd2VpZ2h0X2RlY2F5X3JhdGUlM0QwLjAxJTJDJTBBKSUwQW1vZGVsLmNvbXBpbGUob3B0aW1pemVyJTNEb3B0aW1pemVyKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> create_optimizer
<span class="hljs-keyword">import</span> tensorflow <span class="hljs-keyword">as</span> tf
<span class="hljs-comment"># Train in mixed-precision float16</span>
<span class="hljs-comment"># Comment this line out if you&#x27;re using a GPU that will not benefit from this</span>
tf.keras.mixed_precision.set_global_policy(<span class="hljs-string">&quot;mixed_float16&quot;</span>)
<span class="hljs-comment"># The number of training steps is the number of samples in the dataset, divided by the batch size then multiplied</span>
<span class="hljs-comment"># by the total number of epochs. Note that the tf_train_dataset here is a batched tf.data.Dataset,</span>
<span class="hljs-comment"># not the original Hugging Face Dataset, so its len() is already num_samples // batch_size.</span>
num_epochs = <span class="hljs-number">3</span>
num_train_steps = <span class="hljs-built_in">len</span>(tf_train_dataset) * num_epochs
optimizer, schedule = create_optimizer(
init_lr=<span class="hljs-number">2e-5</span>,
num_warmup_steps=<span class="hljs-number">0</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)`,wrap:!1}}),q=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycy5rZXJhc19jYWxsYmFja3MlMjBpbXBvcnQlMjBQdXNoVG9IdWJDYWxsYmFjayUwQSUwQWNhbGxiYWNrJTIwJTNEJTIwUHVzaFRvSHViQ2FsbGJhY2sob3V0cHV0X2RpciUzRCUyMmJlcnQtZmluZXR1bmVkLW5lciUyMiUyQyUyMHRva2VuaXplciUzRHRva2VuaXplciklMEElMEFtb2RlbC5maXQoJTBBJTIwJTIwJTIwJTIwdGZfdHJhaW5fZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMHZhbGlkYXRpb25fZGF0YSUzRHRmX2V2YWxfZGF0YXNldCUyQyUwQSUyMCUyMCUyMCUyMGNhbGxiYWNrcyUzRCU1QmNhbGxiYWNrJTVEJTJDJTBBJTIwJTIwJTIwJTIwZXBvY2hzJTNEbnVtX2Vwb2NocyUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers.keras_callbacks <span class="hljs-keyword">import</span> PushToHubCallback
callback = PushToHubCallback(output_dir=<span class="hljs-string">&quot;bert-finetuned-ner&quot;</span>, tokenizer=tokenizer)
model.fit(
tf_train_dataset,
validation_data=tf_eval_dataset,
callbacks=[callback],
epochs=num_epochs,
)`,wrap:!1}}),{c(){w(r.$$.fragment),C=a(),m=c("p"),m.innerHTML=h,Z=a(),d=c("p"),d.innerHTML=k,W=a(),w(U.$$.fragment),B=a(),g=c("p"),g.innerHTML=x,G=a(),w($.$$.fragment),_=a(),v=c("p"),v.innerHTML=Dl,Pl=a(),w(S.$$.fragment),al=a(),w(L.$$.fragment),pl=a(),D=c("blockquote"),D.innerHTML=gs,Y=a(),w(sl.$$.fragment),Xl=a(),V=c("p"),V.textContent=Te,Ql=a(),w(X.$$.fragment),Bs=a(),Ml=c("p"),Ml.textContent=el,El=a(),Q=c("p"),Q.textContent=je,Hl=a(),w(R.$$.fragment),Ws=a(),il=c("p"),il.textContent=tl,Nl=a(),E=c("p"),E.innerHTML=me,zl=a(),w(H.$$.fragment),Fl=a(),N=c("p"),N.innerHTML=we,Sl=a(),z=c("p"),z.innerHTML=Gs,rl=a(),w(q.$$.fragment),ol=a(),bl=c("p"),bl.innerHTML=ul,Ul=a(),yl=c("blockquote"),yl.innerHTML=Tl,dl=a(),cl=c("p"),cl.textContent=nl,Ol=a(),P=c("p"),P.textContent=ql,Ll=a(),F=c("p"),F.textContent=As,this.h()},l(M){o(r.$$.fragment,M),C=p(M),m=J(M,"P",{"data-svelte-h":!0}),y(m)!=="svelte-tt0yj7"&&(m.innerHTML=h),Z=p(M),d=J(M,"P",{"data-svelte-h":!0}),y(d)!=="svelte-1jx7tpx"&&(d.innerHTML=k),W=p(M),o(U.$$.fragment,M),B=p(M),g=J(M,"P",{"data-svelte-h":!0}),y(g)!=="svelte-dnmwi6"&&(g.innerHTML=x),G=p(M),o($.$$.fragment,M),_=p(M),v=J(M,"P",{"data-svelte-h":!0}),y(v)!=="svelte-1hvrgr5"&&(v.innerHTML=Dl),Pl=p(M),o(S.$$.fragment,M),al=p(M),o(L.$$.fragment,M),pl=p(M),D=J(M,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(D)!=="svelte-103bgqm"&&(D.innerHTML=gs),Y=p(M),o(sl.$$.fragment,M),Xl=p(M),V=J(M,"P",{"data-svelte-h":!0}),y(V)!=="svelte-1cq74hn"&&(V.textContent=Te),Ql=p(M),o(X.$$.fragment,M),Bs=p(M),Ml=J(M,"P",{"data-svelte-h":!0}),y(Ml)!=="svelte-1372a9m"&&(Ml.textContent=el),El=p(M),Q=J(M,"P",{"data-svelte-h":!0}),y(Q)!=="svelte-dwyd4a"&&(Q.textContent=je),Hl=p(M),o(R.$$.fragment,M),Ws=p(M),il=J(M,"P",{"data-svelte-h":!0}),y(il)!=="svelte-1mxzyww"&&(il.textContent=tl),Nl=p(M),E=J(M,"P",{"data-svelte-h":!0}),y(E)!=="svelte-1i4cfvk"&&(E.innerHTML=me),zl=p(M),o(H.$$.fragment,M),Fl=p(M),N=J(M,"P",{"data-svelte-h":!0}),y(N)!=="svelte-9p9gn3"&&(N.innerHTML=we),Sl=p(M),z=J(M,"P",{"data-svelte-h":!0}),y(z)!=="svelte-whqppa"&&(z.innerHTML=Gs),rl=p(M),o(q.$$.fragment,M),ol=p(M),bl=J(M,"P",{"data-svelte-h":!0}),y(bl)!=="svelte-1jpfkyo"&&(bl.innerHTML=ul),Ul=p(M),yl=J(M,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(yl)!=="svelte-rshjyu"&&(yl.innerHTML=Tl),dl=p(M),cl=J(M,"P",{"data-svelte-h":!0}),y(cl)!=="svelte-1mf6br9"&&(cl.textContent=nl),Ol=p(M),P=J(M,"P",{"data-svelte-h":!0}),y(P)!=="svelte-1hk22j"&&(P.textContent=ql),Ll=p(M),F=J(M,"P",{"data-svelte-h":!0}),y(F)!=="svelte-18irabm"&&(F.textContent=As),this.h()},h(){ll(D,"class","warning"),ll(yl,"class","tip")},m(M,I){b(r,M,I),t(M,C,I),t(M,m,I),t(M,Z,I),t(M,d,I),t(M,W,I),b(U,M,I),t(M,B,I),t(M,g,I),t(M,G,I),b($,M,I),t(M,_,I),t(M,v,I),t(M,Pl,I),b(S,M,I),t(M,al,I),b(L,M,I),t(M,pl,I),t(M,D,I),t(M,Y,I),b(sl,M,I),t(M,Xl,I),t(M,V,I),t(M,Ql,I),b(X,M,I),t(M,Bs,I),t(M,Ml,I),t(M,El,I),t(M,Q,I),t(M,Hl,I),b(R,M,I),t(M,Ws,I),t(M,il,I),t(M,Nl,I),t(M,E,I),t(M,zl,I),b(H,M,I),t(M,Fl,I),t(M,N,I),t(M,Sl,I),t(M,z,I),t(M,rl,I),b(q,M,I),t(M,ol,I),t(M,bl,I),t(M,Ul,I),t(M,yl,I),t(M,dl,I),t(M,cl,I),t(M,Ol,I),t(M,P,I),t(M,Ll,I),t(M,F,I),Jl=!0},i(M){Jl||(T(r.$$.fragment,M),T(U.$$.fragment,M),T($.$$.fragment,M),T(S.$$.fragment,M),T(L.$$.fragment,M),T(sl.$$.fragment,M),T(X.$$.fragment,M),T(R.$$.fragment,M),T(H.$$.fragment,M),T(q.$$.fragment,M),Jl=!0)},o(M){j(r.$$.fragment,M),j(U.$$.fragment,M),j($.$$.fragment,M),j(S.$$.fragment,M),j(L.$$.fragment,M),j(sl.$$.fragment,M),j(X.$$.fragment,M),j(R.$$.fragment,M),j(H.$$.fragment,M),j(q.$$.fragment,M),Jl=!1},d(M){M&&(e(C),e(m),e(Z),e(d),e(W),e(B),e(g),e(G),e(_),e(v),e(Pl),e(al),e(pl),e(D),e(Y),e(Xl),e(V),e(Ql),e(Bs),e(Ml),e(El),e(Q),e(Hl),e(Ws),e(il),e(Nl),e(E),e(zl),e(Fl),e(N),e(Sl),e(z),e(rl),e(ol),e(bl),e(Ul),e(yl),e(dl),e(cl),e(Ol),e(P),e(Ll),e(F)),u(r,M),u(U,M),u($,M),u(S,M),u(L,M),u(sl,M),u(X,M),u(R,M),u(H,M),u(q,M)}}}function Ja(A){let r,C='トークン分類予測の評価に使われる伝統的な枠組みは<a href="https://github.com/chakki-works/seqeval" rel="nofollow"><em>seqeval</em></a>です。この評価指標を使うには、まず<em>seqeval</em>ライブラリをインストールする必要があります。',m,h,Z,d,k='そして、<a href="/course/ja/chapter3">第3章</a> で行ったように <code>evaluate.load()</code> 関数で読み込むことができるようになります。',W;return h=new f({props:{code:"IXBpcCUyMGluc3RhbGwlMjBzZXFldmFs",highlighted:"!pip install seqeval",wrap:!1}}),{c(){r=c("p"),r.innerHTML=C,m=a(),w(h.$$.fragment),Z=a(),d=c("p"),d.innerHTML=k},l(U){r=J(U,"P",{"data-svelte-h":!0}),y(r)!=="svelte-43w2fw"&&(r.innerHTML=C),m=p(U),o(h.$$.fragment,U),Z=p(U),d=J(U,"P",{"data-svelte-h":!0}),y(d)!=="svelte-1f8834e"&&(d.innerHTML=k)},m(U,B){t(U,r,B),t(U,m,B),b(h,U,B),t(U,Z,B),t(U,d,B),W=!0},i(U){W||(T(h.$$.fragment,U),W=!0)},o(U){j(h.$$.fragment,U),W=!1},d(U){U&&(e(r),e(m),e(Z),e(d)),u(h,U)}}}function ya(A){let r,C="<code>Trainer</code> にエポック毎に指標を計算させるためには、<code>compute_metrics()</code> 関数を定義する必要があります。これは予測とラベルの配列を受け取り、指標の名前と値を含む辞書を返す関数です。",m,h,Z='トークン分類予測の評価に使われる伝統的な枠組みは<a href="https://github.com/chakki-works/seqeval" rel="nofollow"><em>seqeval</em></a>です。この指標を使うには、まず <em>seqeval</em> ライブラリをインストールする必要があります。',d,k,W,U,B='そして、<a href="/course/ja/chapter3">第3章</a> で行ったように <code>evaluate.load()</code> 関数で読み込むことができるようになります。',g;return k=new f({props:{code:"IXBpcCUyMGluc3RhbGwlMjBzZXFldmFs",highlighted:"!pip install seqeval",wrap:!1}}),{c(){r=c("p"),r.innerHTML=C,m=a(),h=c("p"),h.innerHTML=Z,d=a(),w(k.$$.fragment),W=a(),U=c("p"),U.innerHTML=B},l(x){r=J(x,"P",{"data-svelte-h":!0}),y(r)!=="svelte-zz9jbj"&&(r.innerHTML=C),m=p(x),h=J(x,"P",{"data-svelte-h":!0}),y(h)!=="svelte-1u9e40q"&&(h.innerHTML=Z),d=p(x),o(k.$$.fragment,x),W=p(x),U=J(x,"P",{"data-svelte-h":!0}),y(U)!=="svelte-1f8834e"&&(U.innerHTML=B)},m(x,G){t(x,r,G),t(x,m,G),t(x,h,G),t(x,d,G),b(k,x,G),t(x,W,G),t(x,U,G),g=!0},i(x){g||(T(k.$$.fragment,x),g=!0)},o(x){j(k.$$.fragment,x),g=!1},d(x){x&&(e(r),e(m),e(h),e(d),e(W),e(U)),u(k,x)}}}function Ta(A){let r,C=`とても多くの情報を取得しています!
各エンティティの精度、再現率、F1スコア、そして総合的なスコアです。
では、実際にモデルの予測値を使ってスコアを計算してみるとどうなるか見てみましょう。`,m,h,Z="TensorFlowは予測値を連結することを好みません。なぜなら、予測値は可変長であるからです。つまり、<code>model.predict()</code>をそのまま使うことはできないのです。しかし、だからといってここで止めるつもりはありません。一度にいくつかの予測をバッチで実行して取得し、それらを一つの大きな長いリストに連結し、マスキングやパディングを示す <code>-100</code> トークンを削除します。",d,k,W,U,B,g,x=`あなたのモデルは、私たちのモデルと比較して、どうでしたか?
もし、同じような数値が出たのなら、トレーニングは成功です。`,G;return k=new f({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBYWxsX3ByZWRpY3Rpb25zJTIwJTNEJTIwJTVCJTVEJTBBYWxsX2xhYmVscyUyMCUzRCUyMCU1QiU1RCUwQWZvciUyMGJhdGNoJTIwaW4lMjB0Zl9ldmFsX2RhdGFzZXQlM0ElMEElMjAlMjAlMjAlMjBsb2dpdHMlMjAlM0QlMjBtb2RlbC5wcmVkaWN0KGJhdGNoKSU1QiUyMmxvZ2l0cyUyMiU1RCUwQSUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMGJhdGNoJTVCJTIybGFiZWxzJTIyJTVEJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlMjAlM0QlMjBucC5hcmdtYXgobG9naXRzJTJDJTIwYXhpcyUzRC0xKSUwQSUyMCUyMCUyMCUyMGZvciUyMHByZWRpY3Rpb24lMkMlMjBsYWJlbCUyMGluJTIwemlwKHByZWRpY3Rpb25zJTJDJTIwbGFiZWxzKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMHByZWRpY3RlZF9pZHglMkMlMjBsYWJlbF9pZHglMjBpbiUyMHppcChwcmVkaWN0aW9uJTJDJTIwbGFiZWwpJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsYWJlbF9pZHglMjAlM0QlM0QlMjAtMTAwJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwY29udGludWUlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhbGxfcHJlZGljdGlvbnMuYXBwZW5kKGxhYmVsX25hbWVzJTVCcHJlZGljdGVkX2lkeCU1RCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhbGxfbGFiZWxzLmFwcGVuZChsYWJlbF9uYW1lcyU1QmxhYmVsX2lkeCU1RCklMEFtZXRyaWMuY29tcHV0ZShwcmVkaWN0aW9ucyUzRCU1QmFsbF9wcmVkaWN0aW9ucyU1RCUyQyUyMHJlZmVyZW5jZXMlM0QlNUJhbGxfbGFiZWxzJTVEKQ==",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
all_predictions = []
all_labels = []
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> tf_eval_dataset:
logits = model.predict(batch)[<span class="hljs-string">&quot;logits&quot;</span>]
labels = batch[<span class="hljs-string">&quot;labels&quot;</span>]
predictions = np.argmax(logits, axis=-<span class="hljs-number">1</span>)
<span class="hljs-keyword">for</span> prediction, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(predictions, labels):
<span class="hljs-keyword">for</span> predicted_idx, label_idx <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(prediction, label):
<span class="hljs-keyword">if</span> label_idx == -<span class="hljs-number">100</span>:
<span class="hljs-keyword">continue</span>
all_predictions.append(label_names[predicted_idx])
all_labels.append(label_names[label_idx])
metric.compute(predictions=[all_predictions], references=[all_labels])`,wrap:!1}}),U=new f({props:{code:"JTdCJ0xPQyclM0ElMjAlN0IncHJlY2lzaW9uJyUzQSUyMDAuOTElMkMlMjAncmVjYWxsJyUzQSUyMDAuOTIlMkMlMjAnZjEnJTNBJTIwMC45MSUyQyUyMCdudW1iZXInJTNBJTIwMTY2OCU3RCUyQyUwQSUyMCdNSVNDJyUzQSUyMCU3QidwcmVjaXNpb24nJTNBJTIwMC43MCUyQyUyMCdyZWNhbGwnJTNBJTIwMC43OSUyQyUyMCdmMSclM0ElMjAwLjc0JTJDJTIwJ251bWJlciclM0ElMjA3MDIlN0QlMkMlMEElMjAnT1JHJyUzQSUyMCU3QidwcmVjaXNpb24nJTNBJTIwMC44NSUyQyUyMCdyZWNhbGwnJTNBJTIwMC45MCUyQyUyMCdmMSclM0ElMjAwLjg4JTJDJTIwJ251bWJlciclM0ElMjAxNjYxJTdEJTJDJTBBJTIwJ1BFUiclM0ElMjAlN0IncHJlY2lzaW9uJyUzQSUyMDAuOTUlMkMlMjAncmVjYWxsJyUzQSUyMDAuOTUlMkMlMjAnZjEnJTNBJTIwMC45NSUyQyUyMCdudW1iZXInJTNBJTIwMTYxNyU3RCUyQyUwQSUyMCdvdmVyYWxsX3ByZWNpc2lvbiclM0ElMjAwLjg3JTJDJTBBJTIwJ292ZXJhbGxfcmVjYWxsJyUzQSUyMDAuOTElMkMlMEElMjAnb3ZlcmFsbF9mMSclM0ElMjAwLjg5JTJDJTBBJTIwJ292ZXJhbGxfYWNjdXJhY3knJTNBJTIwMC45NyU3RA==",highlighted:`{<span class="hljs-string">&#x27;LOC&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">0.91</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.92</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.91</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">1668</span>},
<span class="hljs-string">&#x27;MISC&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">0.70</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.79</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.74</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">702</span>},
<span class="hljs-string">&#x27;ORG&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">0.85</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.90</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.88</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">1661</span>},
<span class="hljs-string">&#x27;PER&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">0.95</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.95</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.95</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">1617</span>},
<span class="hljs-string">&#x27;overall_precision&#x27;</span>: <span class="hljs-number">0.87</span>,
<span class="hljs-string">&#x27;overall_recall&#x27;</span>: <span class="hljs-number">0.91</span>,
<span class="hljs-string">&#x27;overall_f1&#x27;</span>: <span class="hljs-number">0.89</span>,
<span class="hljs-string">&#x27;overall_accuracy&#x27;</span>: <span class="hljs-number">0.97</span>}`,wrap:!1}}),{c(){r=c("p"),r.textContent=C,m=a(),h=c("p"),h.innerHTML=Z,d=a(),w(k.$$.fragment),W=a(),w(U.$$.fragment),B=a(),g=c("p"),g.textContent=x},l($){r=J($,"P",{"data-svelte-h":!0}),y(r)!=="svelte-rgzx96"&&(r.textContent=C),m=p($),h=J($,"P",{"data-svelte-h":!0}),y(h)!=="svelte-1sio7uq"&&(h.innerHTML=Z),d=p($),o(k.$$.fragment,$),W=p($),o(U.$$.fragment,$),B=p($),g=J($,"P",{"data-svelte-h":!0}),y(g)!=="svelte-1qbr4bc"&&(g.textContent=x)},m($,_){t($,r,_),t($,m,_),t($,h,_),t($,d,_),b(k,$,_),t($,W,_),b(U,$,_),t($,B,_),t($,g,_),G=!0},i($){G||(T(k.$$.fragment,$),T(U.$$.fragment,$),G=!0)},o($){j(k.$$.fragment,$),j(U.$$.fragment,$),G=!1},d($){$&&(e(r),e(m),e(h),e(d),e(W),e(B),e(g)),u(k,$),u(U,$)}}}function ja(A){let r,C=`とても多くの情報を取得しています!
各エンティティの精度、再現率、F1スコア、そして総合的なスコアです。`,m,h,Z=`私達の指標計算では、総合的なスコアのみを保持することにします。
しかし、お望みなら<code>compute_metrics()</code>関数を微調整して、報告させたいすべての指標を返すこともできます。`,d,k,W="この <code>compute_metrics()</code> 関数は、まず 最終レイヤーが出力するベクトルの最大値を予測値に変換します(最終レイヤーが出力する生の値は通常は確率に変換されますが、最大値は確率に変換しなくとも同じなので、softmax で確率に変換させる必要はありません)。次に、ラベルと予測値の両方を整数から文字列に変換する必要があります。ラベルが <code>-100</code> である値をすべて削除し、その結果を <code>metric.compute()</code> メソッドに渡します。",U,B,g,x,G="これで、<code>Trainer</code> を定義する準備はほぼ整いました。あとは微調整をするための <code>model</code> が必要です。",$;return B=new f({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBJTBBZGVmJTIwY29tcHV0ZV9tZXRyaWNzKGV2YWxfcHJlZHMpJTNBJTBBJTIwJTIwJTIwJTIwbG9naXRzJTJDJTIwbGFiZWxzJTIwJTNEJTIwZXZhbF9wcmVkcyUwQSUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwbnAuYXJnbWF4KGxvZ2l0cyUyQyUyMGF4aXMlM0QtMSklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBSZW1vdmUlMjBpZ25vcmVkJTIwaW5kZXglMjAoc3BlY2lhbCUyMHRva2VucyklMjBhbmQlMjBjb252ZXJ0JTIwdG8lMjBsYWJlbHMlMEElMjAlMjAlMjAlMjB0cnVlX2xhYmVscyUyMCUzRCUyMCU1QiU1QmxhYmVsX25hbWVzJTVCbCU1RCUyMGZvciUyMGwlMjBpbiUyMGxhYmVsJTIwaWYlMjBsJTIwISUzRCUyMC0xMDAlNUQlMjBmb3IlMjBsYWJlbCUyMGluJTIwbGFiZWxzJTVEJTBBJTIwJTIwJTIwJTIwdHJ1ZV9wcmVkaWN0aW9ucyUyMCUzRCUyMCU1QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1QmxhYmVsX25hbWVzJTVCcCU1RCUyMGZvciUyMChwJTJDJTIwbCklMjBpbiUyMHppcChwcmVkaWN0aW9uJTJDJTIwbGFiZWwpJTIwaWYlMjBsJTIwISUzRCUyMC0xMDAlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBmb3IlMjBwcmVkaWN0aW9uJTJDJTIwbGFiZWwlMjBpbiUyMHppcChwcmVkaWN0aW9ucyUyQyUyMGxhYmVscyklMEElMjAlMjAlMjAlMjAlNUQlMEElMjAlMjAlMjAlMjBhbGxfbWV0cmljcyUyMCUzRCUyMG1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEdHJ1ZV9wcmVkaWN0aW9ucyUyQyUyMHJlZmVyZW5jZXMlM0R0cnVlX2xhYmVscyklMEElMjAlMjAlMjAlMjByZXR1cm4lMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJwcmVjaXNpb24lMjIlM0ElMjBhbGxfbWV0cmljcyU1QiUyMm92ZXJhbGxfcHJlY2lzaW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIycmVjYWxsJTIyJTNBJTIwYWxsX21ldHJpY3MlNUIlMjJvdmVyYWxsX3JlY2FsbCUyMiU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMmYxJTIyJTNBJTIwYWxsX21ldHJpY3MlNUIlMjJvdmVyYWxsX2YxJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIyYWNjdXJhY3klMjIlM0ElMjBhbGxfbWV0cmljcyU1QiUyMm92ZXJhbGxfYWNjdXJhY3klMjIlNUQlMkMlMEElMjAlMjAlMjAlMjAlN0Q=",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np
<span class="hljs-keyword">def</span> <span class="hljs-title function_">compute_metrics</span>(<span class="hljs-params">eval_preds</span>):
logits, labels = eval_preds
predictions = np.argmax(logits, axis=-<span class="hljs-number">1</span>)
<span class="hljs-comment"># Remove ignored index (special tokens) and convert to labels</span>
true_labels = [[label_names[l] <span class="hljs-keyword">for</span> l <span class="hljs-keyword">in</span> label <span class="hljs-keyword">if</span> l != -<span class="hljs-number">100</span>] <span class="hljs-keyword">for</span> label <span class="hljs-keyword">in</span> labels]
true_predictions = [
[label_names[p] <span class="hljs-keyword">for</span> (p, l) <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(prediction, label) <span class="hljs-keyword">if</span> l != -<span class="hljs-number">100</span>]
<span class="hljs-keyword">for</span> prediction, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(predictions, labels)
]
all_metrics = metric.compute(predictions=true_predictions, references=true_labels)
<span class="hljs-keyword">return</span> {
<span class="hljs-string">&quot;precision&quot;</span>: all_metrics[<span class="hljs-string">&quot;overall_precision&quot;</span>],
<span class="hljs-string">&quot;recall&quot;</span>: all_metrics[<span class="hljs-string">&quot;overall_recall&quot;</span>],
<span class="hljs-string">&quot;f1&quot;</span>: all_metrics[<span class="hljs-string">&quot;overall_f1&quot;</span>],
<span class="hljs-string">&quot;accuracy&quot;</span>: all_metrics[<span class="hljs-string">&quot;overall_accuracy&quot;</span>],
}`,wrap:!1}}),{c(){r=c("p"),r.textContent=C,m=a(),h=c("p"),h.innerHTML=Z,d=a(),k=c("p"),k.innerHTML=W,U=a(),w(B.$$.fragment),g=a(),x=c("p"),x.innerHTML=G},l(_){r=J(_,"P",{"data-svelte-h":!0}),y(r)!=="svelte-kmkf4v"&&(r.textContent=C),m=p(_),h=J(_,"P",{"data-svelte-h":!0}),y(h)!=="svelte-16xe1tf"&&(h.innerHTML=Z),d=p(_),k=J(_,"P",{"data-svelte-h":!0}),y(k)!=="svelte-ray3pm"&&(k.innerHTML=W),U=p(_),o(B.$$.fragment,_),g=p(_),x=J(_,"P",{"data-svelte-h":!0}),y(x)!=="svelte-dc3uz"&&(x.innerHTML=G)},m(_,v){t(_,r,v),t(_,m,v),t(_,h,v),t(_,d,v),t(_,k,v),t(_,U,v),b(B,_,v),t(_,g,v),t(_,x,v),$=!0},i(_){$||(T(B.$$.fragment,_),$=!0)},o(_){j(B.$$.fragment,_),$=!1},d(_){_&&(e(r),e(m),e(h),e(d),e(k),e(U),e(g),e(x)),u(B,_)}}}function zn(A){let r,C,m,h="今回はトークン分類の問題を扱うので、 <code>AutoModelForTokenClassification</code> クラスを使用します。このモデルを定義する際に覚えておくべきことは、ラベルの数に関する情報を渡すことです。最も簡単な方法は <code>num_labels</code> 引数でその数を渡すことですが、このセクションの最初に見たような素敵な推論ウィジェットを動作させたい場合は、代わりに正しいラベルの対応関係を設定した方が良いでしょう。",Z,d,k="id2label<code>と</code>label2id` という 2 つの辞書型データがあり、ID からラベル、ラベルから ID へのマッピングを設定することができます。",W,U,B,g,x="あとはそれらを <code>AutoModelForTokenClassification.from_pretrained()</code> メソッドに渡せば、モデルの構成に設定され、適切に保存されて Hub にアップロードされます。",G,$,_,v,Dl='<a href="/course/ja/chapter3">第3章</a> で <code>AutoModelForSequenceClassification</code> を定義したときのように、モデルを作成すると、いくつかの重みが使われていない(事前学習済みモデルのヘッド部の重み)、他のいくつかの重みがランダムに初期化されている(新しく接続したトークン分類ヘッドの重み)、このモデルはトレーニングする必要があるという警告が表示されます。トレーニングはすぐにでも実行できますが、まずはこのモデルが正しい数のラベルを持つことを再確認しましょう。',Pl,S,al,L,pl,D,gs="<p>⚠️ ラベルの数が間違っているモデルがあると、後で <code>model.fit()</code> を呼び出すときによくわからないエラー(“CUDA error: device-side assert triggered”のようなエラー)が発生します。このようなエラーはユーザーから報告されるバグの原因として一番多いものです。このチェックを必ず行い、期待通りのラベル数であることを確認してください。</p>",Y,sl,Xl,V,Te=`これでモデルを学習する準備が整いました!
しかし、<code>Trainer</code>を定義する前に、最後に2つのことをする必要があります。`,Ql,X,Bs="Hugging Faceにログインし、学習用ハイパーパラメータを定義する必要があります。もしNotebookで作業しているなら、これを助ける便利な関数があります。",Ml,el,El,Q,je="これにより、Hugging Faceのログイン情報を入力するウィジェットが表示されます。",Hl,R,Ws="Notebookで作業していない場合は、ターミナルに次の行を入力するだけです。",il,tl,Nl,E,me="完了したら、<code>TrainingArguments</code>を定義する事ができるようになります。",zl,H,Fl,N,we="これらのパラメータのほとんどは以前に見たことがあると思います。",Sl,z,Gs="ハイパーパラメータ(学習率、学習エポック数、ウェイト減衰など)を設定し、<code>push_to_hub=True</code> を指定して、モデルを保存して各エポック終了時に評価し、その結果をモデルハブにアップロードすることを指示します。",rl,q,ol='なお、 <code>hub_model_id</code> 引数でプッシュ先のリポジトリ名を指定できます (特に、特定の組織(organization)にプッシュする場合は、この引数を使用する必要があります)。例えば、<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/bert-finetuned-ner&quot;</code> を追加しました。',bl,ul,Ul="デフォルトでは、使用されるリポジトリはあなたの名前が使われ、設定した出力ディレクトリちなんだ名前、例えば今回の例では <code>&quot;sgugger/bert-finetuned-ner&quot;</code> となります。",yl,Tl,dl="<p>💡 使用する出力ディレクトリが既に存在する場合は、プッシュしたいリポジトリのローカルクローンである必要があります。そうでない場合は、<code>Trainer</code> を定義する際にエラーが発生し、新しい名前を設定する必要があります。</p>",cl,nl,Ol="最後に、すべてを <code>Trainer</code> に渡して、トレーニングを開始するだけです。",P,ql,Ll,F,As="学習が行われている間、モデルが保存されるたびに(ここではエポックごとに)バックグラウンドでHubにアップロードされることに注意してください。このようにして、必要に応じて別のマシンで学習を再開することができます。",Jl,M,I="学習が完了したら、<code>push_to_hub()</code> メソッドを使用して、最新バージョンのモデルをアップロードするようにします。",ue,Kl,ls,ss,vs="このコマンドは、今行ったコミットの URL を返すので、それを検査したい場合は、このコマンドを使用します。",Ss,fl,Ue,es,Vs=`また、<code>Trainer</code>はすべての評価結果を含むモデルカードを起草し、アップロードします。この段階で、Model Hub上の推論ウィジェットを使ってモデルをテストし、友人と共有することができます。これで、トークン分類タスクのモデル微調整に成功しました。
おめでとうございます!`,Ls,hl,de="もう少し深く学習ループについて学びたい場合は、🤗 Accelerate を使って同じことをする方法を紹介します。",ts,Rs,Ds,Cl,dt='それでは、必要な部分を簡単にカスタマイズできるように、トレーニングループの全体像を見てみましょう。これは、<a href="/course/ja/chapter3/4">第3章</a> で行ったこととよく似ていますが、評価のために少し変更が加えられています。',qs,Il,fe,ns,Ys="まず、データセットから <code>DataLoader</code> を作成する必要があります。ここでは、<code>data_collator</code> を <code>collate_fn</code> として再利用し、トレーニングセットをシャッフルします。ただし、検証セットはシャッフルしません。",Ps,$l,Os,kl,ft="次に、モデルの再定義を行います。これは、以前の微調整を継続するのではなく、BERTで事前学習したモデルから再び開始することを確認するためです。",Ks,xl,le,_l,ht="それから、オプティマイザが必要になります。ここでは、古典的な <code>AdamW</code> を使用します。これは <code>Adam</code> のようなものですが、重みの減衰の適用方法を修正したものです。",se,jl,he,as,Xs="これらのオブジェクトをすべて取得したら、それらを <code>accelerator.prepare()</code> メソッドに送ります。",ee,Zl,te,ml,Ct='<p>🚨 TPUでトレーニングする場合は、上のセルから始まるコードを全て専用のトレーニング関数に移動する必要があります。詳しくは<a href="/course/ja/chapter3">第3章</a>を参照してください。</p>',ne,gl,It="これで <code>train_dataloader</code> を <code>accelerator.prepare()</code> に送ったので、そのデータ長を用いて学習ステップ数を計算することができます。このメソッドはdataloaderの長さを変更するので、常にdataloaderを準備した後に行う必要があることを忘れないでください。ここでは、学習率から0まで古典的な線形スケジュールを使用します。",ae,Bl,pe,Wl,$t="最後に、モデルをHubにプッシュするために、作業フォルダに <code>Repository</code> オブジェクトを作業フォルダに作成する必要があります。まず、まだログインしていなければHugging Faceにログインしてください。モデルに付与したいモデルIDからリポジトリ名を決定します。(<code>repo_name</code>は自由に置き換えてください;ユーザー名を含む必要があるだけで、これは関数 <code>get_full_repo_name()</code> が行っている事です)。",Me,Gl,Ce,ps,Ms,is,Qs="そして、そのリポジトリをローカルフォルダーにクローンすることができます。すでに存在するのであれば、このローカルフォルダーは作業中のリポジトリの既存のクローンであるべきです。",ie,Al,Ie,rs,Es="これで <code>repo.push_to_hub()</code> メソッドを呼び出すことで、<code>output_dir</code> に保存したものをアップロードできるようになりました。これにより、各エポック終了時に中間モデルをアップロードすることができます。",re,vl,ce,Vl,kt=`これで学習ループを書く準備ができました。
評価部分を簡略化するため、<code>postprocess()</code> 関数を簡単に定義します。
この関数は予測値とラベルを受け取って <code>metric</code> オブジェクトが期待するような文字列のリストに変換します。`,Je,Rl,$e,cs,Hs="次に、トレーニングループを書きます。トレーニングの進捗を確認するためのプログレスバーを定義した後、ループは3つのパートに分かれます。",ye,Yl,ke="<li><p>学習そのもの。<code>train_dataloader</code>に対する古典的な繰り返しで、モデルを前方に伝播させ、後方に逆伝播させ、最適化のステップを行います。</p></li> <li><p>評価。モデルの出力をバッチで取得した後に、新しい事をします。2つのプロセスで入力とラベルを異なる形状にパディングしているかもしれないので、<code>gather()</code>メソッドを呼ぶ前に <code>accelerator.pad_across_processes()</code> を使って予測値とラベルを同じ形状にする必要があるのです。これを行わないと、評価がエラーになるか、永遠にハングアップします。そして、結果を <code>metric.add_batch()</code> に送り、評価ループが終了したら <code>metric.compute()</code> を呼び出します。</p></li> <li><p>保存とアップロード。まずモデルとtokenizerを保存し、次に <code>repo.push_to_hub()</code> を呼び出します。引数 <code>blocking=False</code> を使って、🤗 Hub libraryに非同期処理でプッシュするように指示していることに注意してください。この指定をすると、トレーニングは通常通り行われ、この(長い時間のかかる)命令はバックグラウンドで実行されます。</p></li>",Js,Ns,xe="以下は、トレーニングループの完全なコードです。",ys,Ts,js,zs,_e="今回初めて🤗 Accelerateで保存されたモデルをご覧になる方のために、それに付随する3行のコードを少し点検してみましょう。",ms,ws,os,bs,Fs="最初の行は明らかです。この行は、すべてのプロセスに、全プロセスがその行に達するまで、処理を待つよう指示します。これは、保存する前に、すべてのプロセスが同じモデルになっている事を確認するためです。次に <code>unwrapped_model</code> を取得します。これは定義したベースモデルです。<code>accelerator.prepare()</code> メソッドは分散して学習するようにモデルを変更するので、<code>save_pretrained()</code> メソッドを持たなくなります。<code>accelerator.unwrap_model()</code> メソッドはそのステップを元に戻します。最後に、<code>save_pretrained()</code> を呼び出しますが、このメソッドには <code>torch.save()</code> の代わりに <code>accelerator.save()</code> を使用するように指示します。",Ze,us,Us='これが完了すると、<code>Trainer</code> で学習したものとほぼ同じ結果を得ることができるモデルができあがります。このコードを使って学習したモデルは <a href="https://huggingface.co/huggingface-course/bert-finetuned-ner-accelerate" rel="nofollow"><em>huggingface-course/bert-finetuned-ner-accelerate</em></a> で確認することができます。また、学習ループの微調整を試したい場合は、上に示したコードを編集することで直接実装することができます!',ge;return r=new wl({props:{title:"モデルを定義",local:"モデルを定義",headingTag:"h3"}}),U=new f({props:{code:"aWQybGFiZWwlMjAlM0QlMjAlN0JpJTNBJTIwbGFiZWwlMjBmb3IlMjBpJTJDJTIwbGFiZWwlMjBpbiUyMGVudW1lcmF0ZShsYWJlbF9uYW1lcyklN0QlMEFsYWJlbDJpZCUyMCUzRCUyMCU3QnYlM0ElMjBrJTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGlkMmxhYmVsLml0ZW1zKCklN0Q=",highlighted:`id2label = {i: label <span class="hljs-keyword">for</span> i, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(label_names)}
label2id = {v: k <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> id2label.items()}`,wrap:!1}}),$=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Nb2RlbEZvclRva2VuQ2xhc3NpZmljYXRpb24lMEElMEFtb2RlbCUyMCUzRCUyMEF1dG9Nb2RlbEZvclRva2VuQ2xhc3NpZmljYXRpb24uZnJvbV9wcmV0cmFpbmVkKCUwQSUyMCUyMCUyMCUyMG1vZGVsX2NoZWNrcG9pbnQlMkMlMEElMjAlMjAlMjAlMjBpZDJsYWJlbCUzRGlkMmxhYmVsJTJDJTBBJTIwJTIwJTIwJTIwbGFiZWwyaWQlM0RsYWJlbDJpZCUyQyUwQSk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoModelForTokenClassification
model = AutoModelForTokenClassification.from_pretrained(
model_checkpoint,
id2label=id2label,
label2id=label2id,
)`,wrap:!1}}),S=new f({props:{code:"bW9kZWwuY29uZmlnLm51bV9sYWJlbHM=",highlighted:"model.config.num_labels",wrap:!1}}),L=new f({props:{code:"OQ==",highlighted:'<span class="hljs-number">9</span>',wrap:!1}}),sl=new wl({props:{title:"モデルの微調整",local:"モデルの微調整",headingTag:"h3"}}),el=new f({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMG5vdGVib29rX2xvZ2luJTBBJTBBbm90ZWJvb2tfbG9naW4oKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> notebook_login
notebook_login()`,wrap:!1}}),tl=new f({props:{code:"aHVnZ2luZ2ZhY2UtY2xpJTIwbG9naW4=",highlighted:"huggingface-cli login",wrap:!1}}),H=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluaW5nQXJndW1lbnRzJTBBJTBBYXJncyUyMCUzRCUyMFRyYWluaW5nQXJndW1lbnRzKCUwQSUyMCUyMCUyMCUyMCUyMmJlcnQtZmluZXR1bmVkLW5lciUyMiUyQyUwQSUyMCUyMCUyMCUyMGV2YWx1YXRpb25fc3RyYXRlZ3klM0QlMjJlcG9jaCUyMiUyQyUwQSUyMCUyMCUyMCUyMHNhdmVfc3RyYXRlZ3klM0QlMjJlcG9jaCUyMiUyQyUwQSUyMCUyMCUyMCUyMGxlYXJuaW5nX3JhdGUlM0QyZS01JTJDJTBBJTIwJTIwJTIwJTIwbnVtX3RyYWluX2Vwb2NocyUzRDMlMkMlMEElMjAlMjAlMjAlMjB3ZWlnaHRfZGVjYXklM0QwLjAxJTJDJTBBJTIwJTIwJTIwJTIwcHVzaF90b19odWIlM0RUcnVlJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> TrainingArguments
args = TrainingArguments(
<span class="hljs-string">&quot;bert-finetuned-ner&quot;</span>,
evaluation_strategy=<span class="hljs-string">&quot;epoch&quot;</span>,
save_strategy=<span class="hljs-string">&quot;epoch&quot;</span>,
learning_rate=<span class="hljs-number">2e-5</span>,
num_train_epochs=<span class="hljs-number">3</span>,
weight_decay=<span class="hljs-number">0.01</span>,
push_to_hub=<span class="hljs-literal">True</span>,
)`,wrap:!1}}),ql=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMFRyYWluZXIlMEElMEF0cmFpbmVyJTIwJTNEJTIwVHJhaW5lciglMEElMjAlMjAlMjAlMjBtb2RlbCUzRG1vZGVsJTJDJTBBJTIwJTIwJTIwJTIwYXJncyUzRGFyZ3MlMkMlMEElMjAlMjAlMjAlMjB0cmFpbl9kYXRhc2V0JTNEdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBldmFsX2RhdGFzZXQlM0R0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTBBJTIwJTIwJTIwJTIwZGF0YV9jb2xsYXRvciUzRGRhdGFfY29sbGF0b3IlMkMlMEElMjAlMjAlMjAlMjBjb21wdXRlX21ldHJpY3MlM0Rjb21wdXRlX21ldHJpY3MlMkMlMEElMjAlMjAlMjAlMjB0b2tlbml6ZXIlM0R0b2tlbml6ZXIlMkMlMEEpJTBBdHJhaW5lci50cmFpbigp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> Trainer
trainer = Trainer(
model=model,
args=args,
train_dataset=tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
eval_dataset=tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>],
data_collator=data_collator,
compute_metrics=compute_metrics,
tokenizer=tokenizer,
)
trainer.train()`,wrap:!1}}),Kl=new f({props:{code:"dHJhaW5lci5wdXNoX3RvX2h1Yihjb21taXRfbWVzc2FnZSUzRCUyMlRyYWluaW5nJTIwY29tcGxldGUlMjIp",highlighted:'trainer.push_to_hub(commit_message=<span class="hljs-string">&quot;Training complete&quot;</span>)',wrap:!1}}),fl=new f({props:{code:"J2h0dHBzJTNBJTJGJTJGaHVnZ2luZ2ZhY2UuY28lMkZzZ3VnZ2VyJTJGYmVydC1maW5ldHVuZWQtbmVyJTJGY29tbWl0JTJGMjZhYjIxZTViMTU2OGY5YWZlY2NkYWVkMmQ4NzE1ZjU3MWQ3ODZlZCc=",highlighted:'<span class="hljs-string">&#x27;https://huggingface.co/sgugger/bert-finetuned-ner/commit/26ab21e5b1568f9afeccdaed2d8715f571d786ed&#x27;</span>',wrap:!1}}),Rs=new wl({props:{title:"カスタムトレーニングループ",local:"カスタムトレーニングループ",headingTag:"h2"}}),Il=new wl({props:{title:"トレーニングのための準備",local:"トレーニングのための準備",headingTag:"h3"}}),$l=new f({props:{code:"ZnJvbSUyMHRvcmNoLnV0aWxzLmRhdGElMjBpbXBvcnQlMjBEYXRhTG9hZGVyJTBBJTBBdHJhaW5fZGF0YWxvYWRlciUyMCUzRCUyMERhdGFMb2FkZXIoJTBBJTIwJTIwJTIwJTIwdG9rZW5pemVkX2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlMkMlMEElMjAlMjAlMjAlMjBzaHVmZmxlJTNEVHJ1ZSUyQyUwQSUyMCUyMCUyMCUyMGNvbGxhdGVfZm4lM0RkYXRhX2NvbGxhdG9yJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hfc2l6ZSUzRDglMkMlMEEpJTBBZXZhbF9kYXRhbG9hZGVyJTIwJTNEJTIwRGF0YUxvYWRlciglMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ2YWxpZGF0aW9uJTIyJTVEJTJDJTIwY29sbGF0ZV9mbiUzRGRhdGFfY29sbGF0b3IlMkMlMjBiYXRjaF9zaXplJTNEOCUwQSk=",highlighted:`<span class="hljs-keyword">from</span> torch.utils.data <span class="hljs-keyword">import</span> DataLoader
train_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>],
shuffle=<span class="hljs-literal">True</span>,
collate_fn=data_collator,
batch_size=<span class="hljs-number">8</span>,
)
eval_dataloader = DataLoader(
tokenized_datasets[<span class="hljs-string">&quot;validation&quot;</span>], collate_fn=data_collator, batch_size=<span class="hljs-number">8</span>
)`,wrap:!1}}),xl=new f({props:{code:"bW9kZWwlMjAlM0QlMjBBdXRvTW9kZWxGb3JUb2tlbkNsYXNzaWZpY2F0aW9uLmZyb21fcHJldHJhaW5lZCglMEElMjAlMjAlMjAlMjBtb2RlbF9jaGVja3BvaW50JTJDJTBBJTIwJTIwJTIwJTIwaWQybGFiZWwlM0RpZDJsYWJlbCUyQyUwQSUyMCUyMCUyMCUyMGxhYmVsMmlkJTNEbGFiZWwyaWQlMkMlMEEp",highlighted:`model = AutoModelForTokenClassification.from_pretrained(
model_checkpoint,
id2label=id2label,
label2id=label2id,
)`,wrap:!1}}),jl=new f({props:{code:"ZnJvbSUyMHRvcmNoLm9wdGltJTIwaW1wb3J0JTIwQWRhbVclMEElMEFvcHRpbWl6ZXIlMjAlM0QlMjBBZGFtVyhtb2RlbC5wYXJhbWV0ZXJzKCklMkMlMjBsciUzRDJlLTUp",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">2e-5</span>)`,wrap:!1}}),Zl=new f({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}}),Bl=new f({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}}),Gl=new f({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMFJlcG9zaXRvcnklMkMlMjBnZXRfZnVsbF9yZXBvX25hbWUlMEElMEFtb2RlbF9uYW1lJTIwJTNEJTIwJTIyYmVydC1maW5ldHVuZWQtbmVyLWFjY2VsZXJhdGUlMjIlMEFyZXBvX25hbWUlMjAlM0QlMjBnZXRfZnVsbF9yZXBvX25hbWUobW9kZWxfbmFtZSklMEFyZXBvX25hbWU=",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> Repository, get_full_repo_name
model_name = <span class="hljs-string">&quot;bert-finetuned-ner-accelerate&quot;</span>
repo_name = get_full_repo_name(model_name)
repo_name`,wrap:!1}}),ps=new f({props:{code:"J3NndWdnZXIlMkZiZXJ0LWZpbmV0dW5lZC1uZXItYWNjZWxlcmF0ZSc=",highlighted:'<span class="hljs-string">&#x27;sgugger/bert-finetuned-ner-accelerate&#x27;</span>',wrap:!1}}),Al=new f({props:{code:"b3V0cHV0X2RpciUyMCUzRCUyMCUyMmJlcnQtZmluZXR1bmVkLW5lci1hY2NlbGVyYXRlJTIyJTBBcmVwbyUyMCUzRCUyMFJlcG9zaXRvcnkob3V0cHV0X2RpciUyQyUyMGNsb25lX2Zyb20lM0RyZXBvX25hbWUp",highlighted:`output_dir = <span class="hljs-string">&quot;bert-finetuned-ner-accelerate&quot;</span>
repo = Repository(output_dir, clone_from=repo_name)`,wrap:!1}}),vl=new wl({props:{title:"学習ループ",local:"学習ループ",headingTag:"h3"}}),Rl=new f({props:{code:"ZGVmJTIwcG9zdHByb2Nlc3MocHJlZGljdGlvbnMlMkMlMjBsYWJlbHMpJTNBJTBBJTIwJTIwJTIwJTIwcHJlZGljdGlvbnMlMjAlM0QlMjBwcmVkaWN0aW9ucy5kZXRhY2goKS5jcHUoKS5jbG9uZSgpLm51bXB5KCklMEElMjAlMjAlMjAlMjBsYWJlbHMlMjAlM0QlMjBsYWJlbHMuZGV0YWNoKCkuY3B1KCkuY2xvbmUoKS5udW1weSgpJTBBJTBBJTIwJTIwJTIwJTIwJTIzJTIwUmVtb3ZlJTIwaWdub3JlZCUyMGluZGV4JTIwKHNwZWNpYWwlMjB0b2tlbnMpJTIwYW5kJTIwY29udmVydCUyMHRvJTIwbGFiZWxzJTBBJTIwJTIwJTIwJTIwdHJ1ZV9sYWJlbHMlMjAlM0QlMjAlNUIlNUJsYWJlbF9uYW1lcyU1QmwlNUQlMjBmb3IlMjBsJTIwaW4lMjBsYWJlbCUyMGlmJTIwbCUyMCElM0QlMjAtMTAwJTVEJTIwZm9yJTIwbGFiZWwlMjBpbiUyMGxhYmVscyU1RCUwQSUyMCUyMCUyMCUyMHRydWVfcHJlZGljdGlvbnMlMjAlM0QlMjAlNUIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlNUJsYWJlbF9uYW1lcyU1QnAlNUQlMjBmb3IlMjAocCUyQyUyMGwpJTIwaW4lMjB6aXAocHJlZGljdGlvbiUyQyUyMGxhYmVsKSUyMGlmJTIwbCUyMCElM0QlMjAtMTAwJTVEJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZm9yJTIwcHJlZGljdGlvbiUyQyUyMGxhYmVsJTIwaW4lMjB6aXAocHJlZGljdGlvbnMlMkMlMjBsYWJlbHMpJTBBJTIwJTIwJTIwJTIwJTVEJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdHJ1ZV9sYWJlbHMlMkMlMjB0cnVlX3ByZWRpY3Rpb25z",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">postprocess</span>(<span class="hljs-params">predictions, labels</span>):
predictions = predictions.detach().cpu().clone().numpy()
labels = labels.detach().cpu().clone().numpy()
<span class="hljs-comment"># Remove ignored index (special tokens) and convert to labels</span>
true_labels = [[label_names[l] <span class="hljs-keyword">for</span> l <span class="hljs-keyword">in</span> label <span class="hljs-keyword">if</span> l != -<span class="hljs-number">100</span>] <span class="hljs-keyword">for</span> label <span class="hljs-keyword">in</span> labels]
true_predictions = [
[label_names[p] <span class="hljs-keyword">for</span> (p, l) <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(prediction, label) <span class="hljs-keyword">if</span> l != -<span class="hljs-number">100</span>]
<span class="hljs-keyword">for</span> prediction, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(predictions, labels)
]
<span class="hljs-keyword">return</span> true_labels, true_predictions`,wrap:!1}}),Ts=new f({props:{code:"ZnJvbSUyMHRxZG0uYXV0byUyMGltcG9ydCUyMHRxZG0lMEFpbXBvcnQlMjB0b3JjaCUwQSUwQXByb2dyZXNzX2JhciUyMCUzRCUyMHRxZG0ocmFuZ2UobnVtX3RyYWluaW5nX3N0ZXBzKSklMEElMEFmb3IlMjBlcG9jaCUyMGluJTIwcmFuZ2UobnVtX3RyYWluX2Vwb2NocyklM0ElMEElMjAlMjAlMjAlMjAlMjMlMjBUcmFpbmluZyUwQSUyMCUyMCUyMCUyMG1vZGVsLnRyYWluKCklMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyMGluJTIwdHJhaW5fZGF0YWxvYWRlciUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxvc3MlMjAlM0QlMjBvdXRwdXRzLmxvc3MlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBhY2NlbGVyYXRvci5iYWNrd2FyZChsb3NzKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG9wdGltaXplci5zdGVwKCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBscl9zY2hlZHVsZXIuc3RlcCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwb3B0aW1pemVyLnplcm9fZ3JhZCgpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJvZ3Jlc3NfYmFyLnVwZGF0ZSgxKSUwQSUwQSUyMCUyMCUyMCUyMCUyMyUyMEV2YWx1YXRpb24lMEElMjAlMjAlMjAlMjBtb2RlbC5ldmFsKCklMEElMjAlMjAlMjAlMjBmb3IlMjBiYXRjaCUyMGluJTIwZXZhbF9kYXRhbG9hZGVyJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwd2l0aCUyMHRvcmNoLm5vX2dyYWQoKSUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG91dHB1dHMlMjAlM0QlMjBtb2RlbCgqKmJhdGNoKSUwQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHByZWRpY3Rpb25zJTIwJTNEJTIwb3V0cHV0cy5sb2dpdHMuYXJnbWF4KGRpbSUzRC0xKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGxhYmVscyUyMCUzRCUyMGJhdGNoJTVCJTIybGFiZWxzJTIyJTVEJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwTmVjZXNzYXJ5JTIwdG8lMjBwYWQlMjBwcmVkaWN0aW9ucyUyMGFuZCUyMGxhYmVscyUyMGZvciUyMGJlaW5nJTIwZ2F0aGVyZWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBwcmVkaWN0aW9ucyUyMCUzRCUyMGFjY2VsZXJhdG9yLnBhZF9hY3Jvc3NfcHJvY2Vzc2VzKHByZWRpY3Rpb25zJTJDJTIwZGltJTNEMSUyQyUyMHBhZF9pbmRleCUzRC0xMDApJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzJTIwJTNEJTIwYWNjZWxlcmF0b3IucGFkX2Fjcm9zc19wcm9jZXNzZXMobGFiZWxzJTJDJTIwZGltJTNEMSUyQyUyMHBhZF9pbmRleCUzRC0xMDApJTBBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwcHJlZGljdGlvbnNfZ2F0aGVyZWQlMjAlM0QlMjBhY2NlbGVyYXRvci5nYXRoZXIocHJlZGljdGlvbnMpJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWxzX2dhdGhlcmVkJTIwJTNEJTIwYWNjZWxlcmF0b3IuZ2F0aGVyKGxhYmVscyklMEElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB0cnVlX3ByZWRpY3Rpb25zJTJDJTIwdHJ1ZV9sYWJlbHMlMjAlM0QlMjBwb3N0cHJvY2VzcyhwcmVkaWN0aW9uc19nYXRoZXJlZCUyQyUyMGxhYmVsc19nYXRoZXJlZCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBtZXRyaWMuYWRkX2JhdGNoKHByZWRpY3Rpb25zJTNEdHJ1ZV9wcmVkaWN0aW9ucyUyQyUyMHJlZmVyZW5jZXMlM0R0cnVlX2xhYmVscyklMEElMEElMjAlMjAlMjAlMjByZXN1bHRzJTIwJTNEJTIwbWV0cmljLmNvbXB1dGUoKSUwQSUyMCUyMCUyMCUyMHByaW50KCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGYlMjJlcG9jaCUyMCU3QmVwb2NoJTdEJTNBJTIyJTJDJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwa2V5JTNBJTIwcmVzdWx0cyU1QmYlMjJvdmVyYWxsXyU3QmtleSU3RCUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZvciUyMGtleSUyMGluJTIwJTVCJTIycHJlY2lzaW9uJTIyJTJDJTIwJTIycmVjYWxsJTIyJTJDJTIwJTIyZjElMjIlMkMlMjAlMjJhY2N1cmFjeSUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU3RCUyQyUwQSUyMCUyMCUyMCUyMCklMEElMEElMjAlMjAlMjAlMjAlMjMlMjBTYXZlJTIwYW5kJTIwdXBsb2FkJTBBJTIwJTIwJTIwJTIwYWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQSUyMCUyMCUyMCUyMHVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEElMjAlMjAlMjAlMjB1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSklMEElMjAlMjAlMjAlMjBpZiUyMGFjY2VsZXJhdG9yLmlzX21haW5fcHJvY2VzcyUzQSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMHRva2VuaXplci5zYXZlX3ByZXRyYWluZWQob3V0cHV0X2RpciklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjByZXBvLnB1c2hfdG9faHViKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGNvbW1pdF9tZXNzYWdlJTNEZiUyMlRyYWluaW5nJTIwaW4lMjBwcm9ncmVzcyUyMGVwb2NoJTIwJTdCZXBvY2glN0QlMjIlMkMlMjBibG9ja2luZyUzREZhbHNlJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwKQ==",highlighted:`<span class="hljs-keyword">from</span> tqdm.auto <span class="hljs-keyword">import</span> tqdm
<span class="hljs-keyword">import</span> torch
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>()
<span class="hljs-keyword">for</span> batch <span class="hljs-keyword">in</span> eval_dataloader:
<span class="hljs-keyword">with</span> torch.no_grad():
outputs = model(**batch)
predictions = outputs.logits.argmax(dim=-<span class="hljs-number">1</span>)
labels = batch[<span class="hljs-string">&quot;labels&quot;</span>]
<span class="hljs-comment"># Necessary to pad predictions and labels for being gathered</span>
predictions = accelerator.pad_across_processes(predictions, dim=<span class="hljs-number">1</span>, pad_index=-<span class="hljs-number">100</span>)
labels = accelerator.pad_across_processes(labels, dim=<span class="hljs-number">1</span>, pad_index=-<span class="hljs-number">100</span>)
predictions_gathered = accelerator.gather(predictions)
labels_gathered = accelerator.gather(labels)
true_predictions, true_labels = postprocess(predictions_gathered, labels_gathered)
metric.add_batch(predictions=true_predictions, references=true_labels)
results = metric.compute()
<span class="hljs-built_in">print</span>(
<span class="hljs-string">f&quot;epoch <span class="hljs-subst">{epoch}</span>:&quot;</span>,
{
key: results[<span class="hljs-string">f&quot;overall_<span class="hljs-subst">{key}</span>&quot;</span>]
<span class="hljs-keyword">for</span> key <span class="hljs-keyword">in</span> [<span class="hljs-string">&quot;precision&quot;</span>, <span class="hljs-string">&quot;recall&quot;</span>, <span class="hljs-string">&quot;f1&quot;</span>, <span class="hljs-string">&quot;accuracy&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}}),ws=new f({props:{code:"YWNjZWxlcmF0b3Iud2FpdF9mb3JfZXZlcnlvbmUoKSUwQXVud3JhcHBlZF9tb2RlbCUyMCUzRCUyMGFjY2VsZXJhdG9yLnVud3JhcF9tb2RlbChtb2RlbCklMEF1bndyYXBwZWRfbW9kZWwuc2F2ZV9wcmV0cmFpbmVkKG91dHB1dF9kaXIlMkMlMjBzYXZlX2Z1bmN0aW9uJTNEYWNjZWxlcmF0b3Iuc2F2ZSk=",highlighted:`accelerator.wait_for_everyone()
unwrapped_model = accelerator.unwrap_model(model)
unwrapped_model.save_pretrained(output_dir, save_function=accelerator.save)`,wrap:!1}}),{c(){w(r.$$.fragment),C=a(),m=c("p"),m.innerHTML=h,Z=a(),d=c("p"),d.innerHTML=k,W=a(),w(U.$$.fragment),B=a(),g=c("p"),g.innerHTML=x,G=a(),w($.$$.fragment),_=a(),v=c("p"),v.innerHTML=Dl,Pl=a(),w(S.$$.fragment),al=a(),w(L.$$.fragment),pl=a(),D=c("blockquote"),D.innerHTML=gs,Y=a(),w(sl.$$.fragment),Xl=a(),V=c("p"),V.innerHTML=Te,Ql=a(),X=c("p"),X.textContent=Bs,Ml=a(),w(el.$$.fragment),El=a(),Q=c("p"),Q.textContent=je,Hl=a(),R=c("p"),R.textContent=Ws,il=a(),w(tl.$$.fragment),Nl=a(),E=c("p"),E.innerHTML=me,zl=a(),w(H.$$.fragment),Fl=a(),N=c("p"),N.textContent=we,Sl=a(),z=c("p"),z.innerHTML=Gs,rl=a(),q=c("p"),q.innerHTML=ol,bl=a(),ul=c("p"),ul.innerHTML=Ul,yl=a(),Tl=c("blockquote"),Tl.innerHTML=dl,cl=a(),nl=c("p"),nl.innerHTML=Ol,P=a(),w(ql.$$.fragment),Ll=a(),F=c("p"),F.textContent=As,Jl=a(),M=c("p"),M.innerHTML=I,ue=a(),w(Kl.$$.fragment),ls=a(),ss=c("p"),ss.textContent=vs,Ss=a(),w(fl.$$.fragment),Ue=a(),es=c("p"),es.innerHTML=Vs,Ls=a(),hl=c("p"),hl.textContent=de,ts=a(),w(Rs.$$.fragment),Ds=a(),Cl=c("p"),Cl.innerHTML=dt,qs=a(),w(Il.$$.fragment),fe=a(),ns=c("p"),ns.innerHTML=Ys,Ps=a(),w($l.$$.fragment),Os=a(),kl=c("p"),kl.textContent=ft,Ks=a(),w(xl.$$.fragment),le=a(),_l=c("p"),_l.innerHTML=ht,se=a(),w(jl.$$.fragment),he=a(),as=c("p"),as.innerHTML=Xs,ee=a(),w(Zl.$$.fragment),te=a(),ml=c("blockquote"),ml.innerHTML=Ct,ne=a(),gl=c("p"),gl.innerHTML=It,ae=a(),w(Bl.$$.fragment),pe=a(),Wl=c("p"),Wl.innerHTML=$t,Me=a(),w(Gl.$$.fragment),Ce=a(),w(ps.$$.fragment),Ms=a(),is=c("p"),is.textContent=Qs,ie=a(),w(Al.$$.fragment),Ie=a(),rs=c("p"),rs.innerHTML=Es,re=a(),w(vl.$$.fragment),ce=a(),Vl=c("p"),Vl.innerHTML=kt,Je=a(),w(Rl.$$.fragment),$e=a(),cs=c("p"),cs.textContent=Hs,ye=a(),Yl=c("ul"),Yl.innerHTML=ke,Js=a(),Ns=c("p"),Ns.textContent=xe,ys=a(),w(Ts.$$.fragment),js=a(),zs=c("p"),zs.textContent=_e,ms=a(),w(ws.$$.fragment),os=a(),bs=c("p"),bs.innerHTML=Fs,Ze=a(),us=c("p"),us.innerHTML=Us,this.h()},l(s){o(r.$$.fragment,s),C=p(s),m=J(s,"P",{"data-svelte-h":!0}),y(m)!=="svelte-119yf65"&&(m.innerHTML=h),Z=p(s),d=J(s,"P",{"data-svelte-h":!0}),y(d)!=="svelte-1jx7tpx"&&(d.innerHTML=k),W=p(s),o(U.$$.fragment,s),B=p(s),g=J(s,"P",{"data-svelte-h":!0}),y(g)!=="svelte-1ddjjpy"&&(g.innerHTML=x),G=p(s),o($.$$.fragment,s),_=p(s),v=J(s,"P",{"data-svelte-h":!0}),y(v)!=="svelte-19xz1fj"&&(v.innerHTML=Dl),Pl=p(s),o(S.$$.fragment,s),al=p(s),o(L.$$.fragment,s),pl=p(s),D=J(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(D)!=="svelte-ih7cjp"&&(D.innerHTML=gs),Y=p(s),o(sl.$$.fragment,s),Xl=p(s),V=J(s,"P",{"data-svelte-h":!0}),y(V)!=="svelte-1r6x9z"&&(V.innerHTML=Te),Ql=p(s),X=J(s,"P",{"data-svelte-h":!0}),y(X)!=="svelte-fgirds"&&(X.textContent=Bs),Ml=p(s),o(el.$$.fragment,s),El=p(s),Q=J(s,"P",{"data-svelte-h":!0}),y(Q)!=="svelte-1372a9m"&&(Q.textContent=je),Hl=p(s),R=J(s,"P",{"data-svelte-h":!0}),y(R)!=="svelte-dwyd4a"&&(R.textContent=Ws),il=p(s),o(tl.$$.fragment,s),Nl=p(s),E=J(s,"P",{"data-svelte-h":!0}),y(E)!=="svelte-lemxsi"&&(E.innerHTML=me),zl=p(s),o(H.$$.fragment,s),Fl=p(s),N=J(s,"P",{"data-svelte-h":!0}),y(N)!=="svelte-1s5dxxd"&&(N.textContent=we),Sl=p(s),z=J(s,"P",{"data-svelte-h":!0}),y(z)!=="svelte-2ujowh"&&(z.innerHTML=Gs),rl=p(s),q=J(s,"P",{"data-svelte-h":!0}),y(q)!=="svelte-1tb4v8w"&&(q.innerHTML=ol),bl=p(s),ul=J(s,"P",{"data-svelte-h":!0}),y(ul)!=="svelte-4uvnkj"&&(ul.innerHTML=Ul),yl=p(s),Tl=J(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(Tl)!=="svelte-1xxqhlt"&&(Tl.innerHTML=dl),cl=p(s),nl=J(s,"P",{"data-svelte-h":!0}),y(nl)!=="svelte-rxg0sz"&&(nl.innerHTML=Ol),P=p(s),o(ql.$$.fragment,s),Ll=p(s),F=J(s,"P",{"data-svelte-h":!0}),y(F)!=="svelte-as74zy"&&(F.textContent=As),Jl=p(s),M=J(s,"P",{"data-svelte-h":!0}),y(M)!=="svelte-yl9kgs"&&(M.innerHTML=I),ue=p(s),o(Kl.$$.fragment,s),ls=p(s),ss=J(s,"P",{"data-svelte-h":!0}),y(ss)!=="svelte-nz50q"&&(ss.textContent=vs),Ss=p(s),o(fl.$$.fragment,s),Ue=p(s),es=J(s,"P",{"data-svelte-h":!0}),y(es)!=="svelte-jxwm8d"&&(es.innerHTML=Vs),Ls=p(s),hl=J(s,"P",{"data-svelte-h":!0}),y(hl)!=="svelte-1k5czjc"&&(hl.textContent=de),ts=p(s),o(Rs.$$.fragment,s),Ds=p(s),Cl=J(s,"P",{"data-svelte-h":!0}),y(Cl)!=="svelte-hcw7lo"&&(Cl.innerHTML=dt),qs=p(s),o(Il.$$.fragment,s),fe=p(s),ns=J(s,"P",{"data-svelte-h":!0}),y(ns)!=="svelte-1vjxy07"&&(ns.innerHTML=Ys),Ps=p(s),o($l.$$.fragment,s),Os=p(s),kl=J(s,"P",{"data-svelte-h":!0}),y(kl)!=="svelte-swk9nn"&&(kl.textContent=ft),Ks=p(s),o(xl.$$.fragment,s),le=p(s),_l=J(s,"P",{"data-svelte-h":!0}),y(_l)!=="svelte-1tgjm4f"&&(_l.innerHTML=ht),se=p(s),o(jl.$$.fragment,s),he=p(s),as=J(s,"P",{"data-svelte-h":!0}),y(as)!=="svelte-1936h7o"&&(as.innerHTML=Xs),ee=p(s),o(Zl.$$.fragment,s),te=p(s),ml=J(s,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(ml)!=="svelte-a3gft5"&&(ml.innerHTML=Ct),ne=p(s),gl=J(s,"P",{"data-svelte-h":!0}),y(gl)!=="svelte-bic0io"&&(gl.innerHTML=It),ae=p(s),o(Bl.$$.fragment,s),pe=p(s),Wl=J(s,"P",{"data-svelte-h":!0}),y(Wl)!=="svelte-16s1hen"&&(Wl.innerHTML=$t),Me=p(s),o(Gl.$$.fragment,s),Ce=p(s),o(ps.$$.fragment,s),Ms=p(s),is=J(s,"P",{"data-svelte-h":!0}),y(is)!=="svelte-18fmna4"&&(is.textContent=Qs),ie=p(s),o(Al.$$.fragment,s),Ie=p(s),rs=J(s,"P",{"data-svelte-h":!0}),y(rs)!=="svelte-eo772a"&&(rs.innerHTML=Es),re=p(s),o(vl.$$.fragment,s),ce=p(s),Vl=J(s,"P",{"data-svelte-h":!0}),y(Vl)!=="svelte-18oofot"&&(Vl.innerHTML=kt),Je=p(s),o(Rl.$$.fragment,s),$e=p(s),cs=J(s,"P",{"data-svelte-h":!0}),y(cs)!=="svelte-1ala6ru"&&(cs.textContent=Hs),ye=p(s),Yl=J(s,"UL",{"data-svelte-h":!0}),y(Yl)!=="svelte-w81t7j"&&(Yl.innerHTML=ke),Js=p(s),Ns=J(s,"P",{"data-svelte-h":!0}),y(Ns)!=="svelte-15pjc92"&&(Ns.textContent=xe),ys=p(s),o(Ts.$$.fragment,s),js=p(s),zs=J(s,"P",{"data-svelte-h":!0}),y(zs)!=="svelte-82wm2j"&&(zs.textContent=_e),ms=p(s),o(ws.$$.fragment,s),os=p(s),bs=J(s,"P",{"data-svelte-h":!0}),y(bs)!=="svelte-3lg0vl"&&(bs.innerHTML=Fs),Ze=p(s),us=J(s,"P",{"data-svelte-h":!0}),y(us)!=="svelte-ze09ah"&&(us.innerHTML=Us),this.h()},h(){ll(D,"class","warning"),ll(Tl,"class","tip"),ll(ml,"class","tip")},m(s,i){b(r,s,i),t(s,C,i),t(s,m,i),t(s,Z,i),t(s,d,i),t(s,W,i),b(U,s,i),t(s,B,i),t(s,g,i),t(s,G,i),b($,s,i),t(s,_,i),t(s,v,i),t(s,Pl,i),b(S,s,i),t(s,al,i),b(L,s,i),t(s,pl,i),t(s,D,i),t(s,Y,i),b(sl,s,i),t(s,Xl,i),t(s,V,i),t(s,Ql,i),t(s,X,i),t(s,Ml,i),b(el,s,i),t(s,El,i),t(s,Q,i),t(s,Hl,i),t(s,R,i),t(s,il,i),b(tl,s,i),t(s,Nl,i),t(s,E,i),t(s,zl,i),b(H,s,i),t(s,Fl,i),t(s,N,i),t(s,Sl,i),t(s,z,i),t(s,rl,i),t(s,q,i),t(s,bl,i),t(s,ul,i),t(s,yl,i),t(s,Tl,i),t(s,cl,i),t(s,nl,i),t(s,P,i),b(ql,s,i),t(s,Ll,i),t(s,F,i),t(s,Jl,i),t(s,M,i),t(s,ue,i),b(Kl,s,i),t(s,ls,i),t(s,ss,i),t(s,Ss,i),b(fl,s,i),t(s,Ue,i),t(s,es,i),t(s,Ls,i),t(s,hl,i),t(s,ts,i),b(Rs,s,i),t(s,Ds,i),t(s,Cl,i),t(s,qs,i),b(Il,s,i),t(s,fe,i),t(s,ns,i),t(s,Ps,i),b($l,s,i),t(s,Os,i),t(s,kl,i),t(s,Ks,i),b(xl,s,i),t(s,le,i),t(s,_l,i),t(s,se,i),b(jl,s,i),t(s,he,i),t(s,as,i),t(s,ee,i),b(Zl,s,i),t(s,te,i),t(s,ml,i),t(s,ne,i),t(s,gl,i),t(s,ae,i),b(Bl,s,i),t(s,pe,i),t(s,Wl,i),t(s,Me,i),b(Gl,s,i),t(s,Ce,i),b(ps,s,i),t(s,Ms,i),t(s,is,i),t(s,ie,i),b(Al,s,i),t(s,Ie,i),t(s,rs,i),t(s,re,i),b(vl,s,i),t(s,ce,i),t(s,Vl,i),t(s,Je,i),b(Rl,s,i),t(s,$e,i),t(s,cs,i),t(s,ye,i),t(s,Yl,i),t(s,Js,i),t(s,Ns,i),t(s,ys,i),b(Ts,s,i),t(s,js,i),t(s,zs,i),t(s,ms,i),b(ws,s,i),t(s,os,i),t(s,bs,i),t(s,Ze,i),t(s,us,i),ge=!0},i(s){ge||(T(r.$$.fragment,s),T(U.$$.fragment,s),T($.$$.fragment,s),T(S.$$.fragment,s),T(L.$$.fragment,s),T(sl.$$.fragment,s),T(el.$$.fragment,s),T(tl.$$.fragment,s),T(H.$$.fragment,s),T(ql.$$.fragment,s),T(Kl.$$.fragment,s),T(fl.$$.fragment,s),T(Rs.$$.fragment,s),T(Il.$$.fragment,s),T($l.$$.fragment,s),T(xl.$$.fragment,s),T(jl.$$.fragment,s),T(Zl.$$.fragment,s),T(Bl.$$.fragment,s),T(Gl.$$.fragment,s),T(ps.$$.fragment,s),T(Al.$$.fragment,s),T(vl.$$.fragment,s),T(Rl.$$.fragment,s),T(Ts.$$.fragment,s),T(ws.$$.fragment,s),ge=!0)},o(s){j(r.$$.fragment,s),j(U.$$.fragment,s),j($.$$.fragment,s),j(S.$$.fragment,s),j(L.$$.fragment,s),j(sl.$$.fragment,s),j(el.$$.fragment,s),j(tl.$$.fragment,s),j(H.$$.fragment,s),j(ql.$$.fragment,s),j(Kl.$$.fragment,s),j(fl.$$.fragment,s),j(Rs.$$.fragment,s),j(Il.$$.fragment,s),j($l.$$.fragment,s),j(xl.$$.fragment,s),j(jl.$$.fragment,s),j(Zl.$$.fragment,s),j(Bl.$$.fragment,s),j(Gl.$$.fragment,s),j(ps.$$.fragment,s),j(Al.$$.fragment,s),j(vl.$$.fragment,s),j(Rl.$$.fragment,s),j(Ts.$$.fragment,s),j(ws.$$.fragment,s),ge=!1},d(s){s&&(e(C),e(m),e(Z),e(d),e(W),e(B),e(g),e(G),e(_),e(v),e(Pl),e(al),e(pl),e(D),e(Y),e(Xl),e(V),e(Ql),e(X),e(Ml),e(El),e(Q),e(Hl),e(R),e(il),e(Nl),e(E),e(zl),e(Fl),e(N),e(Sl),e(z),e(rl),e(q),e(bl),e(ul),e(yl),e(Tl),e(cl),e(nl),e(P),e(Ll),e(F),e(Jl),e(M),e(ue),e(ls),e(ss),e(Ss),e(Ue),e(es),e(Ls),e(hl),e(ts),e(Ds),e(Cl),e(qs),e(fe),e(ns),e(Ps),e(Os),e(kl),e(Ks),e(le),e(_l),e(se),e(he),e(as),e(ee),e(te),e(ml),e(ne),e(gl),e(ae),e(pe),e(Wl),e(Me),e(Ce),e(Ms),e(is),e(ie),e(Ie),e(rs),e(re),e(ce),e(Vl),e(Je),e($e),e(cs),e(ye),e(Yl),e(Js),e(Ns),e(ys),e(js),e(zs),e(ms),e(os),e(bs),e(Ze),e(us)),u(r,s),u(U,s),u($,s),u(S,s),u(L,s),u(sl,s),u(el,s),u(tl,s),u(H,s),u(ql,s),u(Kl,s),u(fl,s),u(Rs,s),u(Il,s),u($l,s),u(xl,s),u(jl,s),u(Zl,s),u(Bl,s),u(Gl,s),u(ps,s),u(Al,s),u(vl,s),u(Rl,s),u(Ts,s),u(ws,s)}}}function ma(A){let r,C,m,h,Z,d,k,W,U,B,g,x,G,$,_="最初に紹介するアプリケーションは、トークン分類です。この汎用的なタスクは「文中の各トークンにラベルを付ける」と定義可能な、以下のような問題を含みます。",v,Dl,Pl="<li><strong>固有表現認識(NER)</strong>: 文中に含まれる人名、地名、組織名などの固有のエンティティを検出します。これは、固有エンティティを1クラス、固有エンティティなしを1クラスとして、各トークンにラベルを付与するタスクと定義できます。</li> <li><strong>品詞タグ付け(POS)</strong>: 文中の各単語を特定の品詞(名詞、動詞、形容詞など)に対応するものとしてマークします。</li> <li><strong>チャンキング(chunking)</strong>: 同じエンティティに属するトークンを見つけます。このタスク(POSやNERと組み合わせることができます)は、チャンクの先頭にあるトークンには一つのラベル(通常 <code>B-</code>)、チャンクの中にあるトークンには別のラベル(通常 <code>I-</code>)、どのチャンクにも属さないトークンには三つ目のラベル(通常 <code>O</code>)を付けることと定義できます。。</li>",S,al,L,pl,D="もちろん、トークン分類問題には他にも多くの問題があり、これらは代表的な例に過ぎません。このセクションでは、NERタスクでモデル(BERT)を微調整し、以下のような予測計算ができるようにします。",gs,Y,sl,Xl,V,Te='<img class="block dark:hidden lg:w-3/5" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/model-eval-bert-finetuned-ner.png" alt="One-hot encoded labels for question answering."/> <img class="hidden dark:block lg:w-3/5" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter7/model-eval-bert-finetuned-ner-dark.png" alt="One-hot encoded labels for question answering."/>',Ql,X,Bs='あなたは学習済みモデルをHubで探したり、Hubにアップロードし、その予測値を<a href="https://huggingface.co/huggingface-course/bert-finetuned-ner?text=My+name+is+Sylvain+and+I+work+at+Hugging+Face+in+Brooklyn" rel="nofollow">ここで</a>再確認することができます 。',Ml,el,El,Q,je='まず最初に、トークン分類に適したデータセットが必要です。このセクションでは、<a href="https://huggingface.co/datasets/conll2003" rel="nofollow">CoNLL-2003 dataset</a>を使います。このデータセットはロイターが配信するニュース記事を含みます。',Hl,R,Ws='<p>💡 単語とそれに対応するラベルに分割されたテキストからなるデータセットであれば、ここで説明するデータ処理を自分のデータセットに適用することができます。独自のデータを <code>Dataset</code> にロードする方法について復習が必要な場合は、<a href="/course/ja/chapter5">第5章</a> を参照してください。</p>',il,tl,Nl,E,me="CoNLL-2003のデータセットをロードするために、🤗 Datasetsライブラリの <code>load_dataset()</code> メソッドを使用します。",zl,H,Fl,N,we='これはデータセットをダウンロードしキャッシュします。<a href="/course/ja/chapter3">第3章</a>でGLUE MRPC datasetを扱ったときと同じです。このオブジェクトを調べると、定義された列と、トレーニングセット、検証セット、テストセットの3つに分割されている事がわかります。',Sl,z,Gs,rl,q,ol,bl="特に、このデータセットには、先に述べた3つのタスク用のラベル、NER、POS、チャンキングが含まれていることがわかります。他のデータセットとの大きな違いは、入力テキストが文や文書としてではなく、単語のリストとして表示されていることです(最後の列は<code>tokens</code>呼ばれていますが、これはトークン化前の入力で、まだサブワード トークン化のためにtokenizer処理する必要があるという意味で単語を含んでいます)。",ul,Ul,yl="それでは、学習セットの最初の要素を見てみましょう。",Tl,dl,cl,nl,Ol,P,ql="今回は固有表現認識を行いたいので、NERタグを見ることにします。",Ll,F,As,Jl,M,I,ue="これは学習時に使われるラベルのため整数値で格納されています。データを調べるときには必ずしも便利ではありません。テキスト分類のように、データセットの <code>features</code> 属性を見れば、これらの整数値が何のラベルであるか調べる事ができます。",Kl,ls,ss,vs,Ss,fl,Ue="つまり、このカラムは <code>ClassLabel</code> の要素を含んでいます。各要素の型は、この <code>ner_feature</code> の <code>feature</code> 属性にあり、その <code>feature</code> の <code>names</code> 属性を見ることで名前のリストを確認する事ができます。",es,Vs,Ls,hl,de,ts,Rs='これらのラベルは<a href="/course/ja/chapter6/3">第6章</a>で、<code>token-classification</code>パイプラインを学んだときに掘り下げましたが、簡単に復習しておきましょう。',Ds,Cl,dt="<li><code>O</code> はその単語がどのエンティティにも対応しないことを意味します。</li> <li><code>B-PER</code>/<code>I-PER</code> は、その単語が <em>人(person)</em> エンティティの先頭、または内部であることを意味します。</li> <li><code>B-ORG</code>/<code>I-ORG</code> は、その単語が <em>組織(organization)</em> エンティティの先頭、または内部であることを意味します。</li> <li><code>B-LOC</code>/<code>I-LOC</code> は、その単語が <em>場所(location)</em> エンティティの先頭、または内部であることを意味します。</li> <li><code>B-MISC</code>/<code>I-MISC</code> は、その単語が <em>その他(miscellaneous)</em> エンティティの先頭、または内部であることを意味します。</li>",qs,Il,fe="さて、先ほどのラベルをデコードすると、以下のようになります。",ns,Ys,Ps,$l,Os,kl,ft="また、<code>B-</code> と <code>I-</code>のラベルを混在させた例として、学習セットの4番目の要素について同じコードを実行すると、以下のようになります。",Ks,xl,le,_l,ht="このように、“European Union” と “Werner Zwingmann” のように2つの単語にまたがるエンティティは、最初の単語には <code>B-</code> ラベルが、2番目の単語には <code>I-</code> ラベルが付与されます。",se,jl,he="<p>✏️ <strong>あなたの番です!</strong> 同じ2つの文をPOSラベルまたはチャンキングラベルと一緒に出力してください。</p>",as,Xs,ee,Zl,te,ml,Ct='いつものように、モデルが意味を理解できるようにするために、テキストはトークンIDに変換される必要があります。<a href="/course/ja/chapter6/">第6章</a>で見たように、トークン分類タスクの場合の大きな違いは、入力があらかじめトークン化されていると言う事です。幸いなことに、tokenizer API はこの点をかなり簡単に処理できます。特別なフラグを指定して <code>tokenizer</code> に警告するだけです。',ne,gl,It="まず最初に、<code>tokenizer</code> オブジェクトを作成しましょう。前に述べたように、事前学習済みBERTモデルを使用する予定なので、関連するtokenizerをダウンロードしてキャッシュすることから始めます。",ae,Bl,pe,Wl,$t='あなたは<code>model_checkpoint</code> を自由に置き換える事ができます。<a href="https://huggingface.co/models" rel="nofollow">Hub</a> にある好きなモデルや、自分の端末に保存した事前学習済みモデルやtokenizerをで置き換えることができます。',Me,Gl,Ce='唯一の制約は、tokenizerが 🤗 Tokenizers ライブラリによってバックアップされる必要があることです。これにより「高速」バージョンが用意されます。<a href="https://huggingface.co/transformers/#supported-frameworks" rel="nofollow">この大きなテーブル</a> で高速バージョンを持つ全てのアーキテクチャを見ることができます。使用している <code>tokenizer</code> オブジェクトが本当に 🤗 Tokenizers でバックアップされているかどうかを確認するには、<code>is_fast</code> 属性を見る事が確認できます。',ps,Ms,is,Qs,ie,Al,Ie="トークン化前の入力をトークン化するには、普段通り <code>tokenizer</code> を使用して、 <code>is_split_into_words=True</code> を追加するだけです。",rs,Es,re,vl,ce,Vl,kt="見ての通り、トークン化はモデルが使用する特殊なトークン(先頭の <code>[CLS]</code> と末尾の <code>[SEP]</code> )を追加し、ほとんどの単語はそのままにしました。しかし、<code>lamb</code>という単語は<code>la</code>と<code>##mb</code>という2つのサブワードにトークン化されました。このため、入力とラベルの間にミスマッチが生じます。ラベルのリストには9つの要素しかありませんが、入力のリストには12のトークンがあります。特殊なトークンを考慮するのは簡単ですが(最初と最後にあることが分かっています)、すべてのラベルを適切な単語に揃えることも必要です。",Je,Rl,$e='幸い、高速なtokenizerを使っているので、🤗 Tokenizers のスーパーパワーにアクセスすることができ、それぞれのトークンを対応する単語に簡単にマッピングすることができます (これは <a href="/course/ja/chapter6/3">第6章</a> で見たとおりです)。',cs,Hs,ye,Yl,ke,Js,Ns="ほんの少しの作業で、トークンにマッチするようにラベルリストを拡張することができます。最初に適用するルールは、特殊なトークンには <code>-100</code> というラベルを付けるというものです。これはデフォルトで <code>-100</code> がこれから使う損失関数(クロスエントロピー)で無視される数だからです。次に、単語内の各トークンは単語の先頭のトークンと同じラベルが付与されます。これは同じエンティティの一部であるためです。単語の内部にあり、かつ先頭にないトークンについては、<code>B-</code> を <code>I-</code> に置き換えます(そのトークンはエンティティを開始しないためです)。",xe,ys,Ts,js,zs="それでは、最初の文章で試してみましょう。",_e,ms,ws,os,bs,Fs,Ze="見てわかるように、この関数は最初と最後の2つの特別なトークンに対して <code>-100</code> を追加し、2つのトークンに分割された単語に対して新たに <code>0</code> を追加しています。",us,Us,ge="<p>✏️ <strong>あなたの番です!</strong> 研究者の中には、1つの単語には1つのラベルしか付けず、与えられた単語内の他のサブトークンに<code>-100</code>を割り当てることを好む人もいます。これは、多くのサブトークンに分割される長い単語が学習時の損失に大きく寄与するのを避けるためです。このルールに従って、ラベルと入力IDを一致させるように、前の関数を変更してみましょう。</p>",s,i,mn="データセット全体の前処理として、すべての入力をトークン化し、すべてのラベルに対して <code>align_labels_with_tokens()</code> を適用する必要があります。高速なtokenizerの速度を活かすには、たくさんのテキストを同時にトークン化するのがよいでしょう。そこで、サンプルのリストを処理する関数を書いて、 <code>Dataset.map()</code> メソッドに <code>batched=True</code> オプションを付けて使用することにしましょう。以前の例と唯一違うのは、tokenizerへの入力がテキストのリスト(この場合は単語のリストのリスト)である場合、 <code>word_ids()</code> 関数は単語IDが欲しいリストのインデックスを必要とするので、これも追加します。",_t,Be,Zt,We,wn=`まだ、入力をパディングしていないことに注意してください。
これは後でデータ照合ツールでバッチを作成するときにやることにします。`,gt,Ge,on="これで、データセットの分割に対して、すべての前処理を一度に適用することができるようになりました。",Bt,Ae,Wt,ve,bn=`一番大変なところをやりましたね!
データの前処理が終わったので、実際の学習は<a href="/course/ja/chapter3">第3章</a>でやったような感じになりますね。`,Gt,ds,fs,jt,Ve,At,Re,un='<a href="/course/ja/chapter3">第3章</a> にあるような <code>DataCollatorWithPadding</code> は入力 (入力 ID、アテンションマスク、トークンタイプ ID) のみをパディングするので使えません。ここでは、ラベルのサイズが変わらないように、入力と全く同じ方法でパディングを行います。値として <code>-100</code> を使用し、対応する予測値が損失計算で無視されるようにします。',vt,Ye,Un='これは全て <a href="https://huggingface.co/transformers/main_classes/data_collator.html#datacollatorfortokenclassification" rel="nofollow"><code>DataCollatorForTokenClassification</code></a> によって行われます。DataCollatorWithPadding<code>と同様に、入力の前処理に使用される</code>tokenizer` を受け取ります。',Vt,hs,Cs,mt,Xe,dn="これをいくつかのサンプルでテストするには、トークン化されたトレーニングセットからサンプルのリストに対して呼び出すだけでよいのです。",Rt,Qe,Yt,Ee,Xt,He,fn="これをデータセットの1番目と2番目の要素のラベルと比較してみましょう。",Qt,Ne,Et,ze,Ht,Is,$s,wt,ot,Fe,Nt,ks,xs,bt,Se,zt,Le,hn="この指標は標準的な精度指標のように動作しません:実際にはラベルのリストを整数ではなく文字列として受け取るので、予測値とラベルを指標に渡す前に完全にデコードする必要があります。",Ft,De,Cn="それでは、どのように動作するか見てみましょう。まず、最初の学習サンプルに対するラベルを取得します。",St,qe,Lt,Pe,Dt,Oe,In="そして、インデックス2の値を変更するだけで、それらの疑似予測を作成することができます。",qt,Ke,Pt,lt,$n="この指標は予測値のリスト(1つだけではない)とラベルのリストを受け取ることに注意してください。以下はその出力です。",Ot,st,Kt,_s,Zs,ut,Ut,et,ln,tt,kn="Model Hubで微調整したモデルを推論ウィジェットで使用する方法は既に紹介しました。ローカル環境の<code>pipeline</code>で使用する場合は、モデル識別子を指定します。",sn,nt,en,at,tn,pt,xn=`素晴らしい!
私たちのモデルは、このパイプラインのデフォルトのものと同じように動作しています!`,nn,Mt,an,xt,pn;Z=new ea({props:{fw:A[0]}}),k=new la({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),U=new wl({props:{title:"トークン分類",local:"トークン分類",headingTag:"h1"}});const _n=[na,ta],it=[];function Zn(l,n){return l[0]==="pt"?0:1}g=Zn(A),x=it[g]=_n[g](A),al=new Hn({props:{id:"wVHdVlPScxA"}}),el=new wl({props:{title:"データの準備",local:"データの準備",headingTag:"h2"}}),tl=new wl({props:{title:"The CoNLL-2003 dataset",local:"the-conll-2003-dataset",headingTag:"h3"}}),H=new f({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBcmF3X2RhdGFzZXRzJTIwJTNEJTIwbG9hZF9kYXRhc2V0KCUyMmNvbmxsMjAwMyUyMik=",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset
raw_datasets = load_dataset(<span class="hljs-string">&quot;conll2003&quot;</span>)`,wrap:!1}}),z=new f({props:{code:"cmF3X2RhdGFzZXRz",highlighted:"raw_datasets",wrap:!1}}),rl=new f({props:{code:"RGF0YXNldERpY3QoJTdCJTBBJTIwJTIwJTIwJTIwdHJhaW4lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2NodW5rX3RhZ3MnJTJDJTIwJ2lkJyUyQyUyMCduZXJfdGFncyclMkMlMjAncG9zX3RhZ3MnJTJDJTIwJ3Rva2VucyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDE0MDQxJTBBJTIwJTIwJTIwJTIwJTdEKSUwQSUyMCUyMCUyMCUyMHZhbGlkYXRpb24lM0ElMjBEYXRhc2V0KCU3QiUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGZlYXR1cmVzJTNBJTIwJTVCJ2NodW5rX3RhZ3MnJTJDJTIwJ2lkJyUyQyUyMCduZXJfdGFncyclMkMlMjAncG9zX3RhZ3MnJTJDJTIwJ3Rva2VucyclNUQlMkMlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDMyNTAlMEElMjAlMjAlMjAlMjAlN0QpJTBBJTIwJTIwJTIwJTIwdGVzdCUzQSUyMERhdGFzZXQoJTdCJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZmVhdHVyZXMlM0ElMjAlNUInY2h1bmtfdGFncyclMkMlMjAnaWQnJTJDJTIwJ25lcl90YWdzJyUyQyUyMCdwb3NfdGFncyclMkMlMjAndG9rZW5zJyU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMzQ1MyUwQSUyMCUyMCUyMCUyMCU3RCklMEElN0Qp",highlighted:`DatasetDict({
train: Dataset({
features: [<span class="hljs-string">&#x27;chunk_tags&#x27;</span>, <span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;ner_tags&#x27;</span>, <span class="hljs-string">&#x27;pos_tags&#x27;</span>, <span class="hljs-string">&#x27;tokens&#x27;</span>],
num_rows: <span class="hljs-number">14041</span>
})
validation: Dataset({
features: [<span class="hljs-string">&#x27;chunk_tags&#x27;</span>, <span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;ner_tags&#x27;</span>, <span class="hljs-string">&#x27;pos_tags&#x27;</span>, <span class="hljs-string">&#x27;tokens&#x27;</span>],
num_rows: <span class="hljs-number">3250</span>
})
test: Dataset({
features: [<span class="hljs-string">&#x27;chunk_tags&#x27;</span>, <span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;ner_tags&#x27;</span>, <span class="hljs-string">&#x27;pos_tags&#x27;</span>, <span class="hljs-string">&#x27;tokens&#x27;</span>],
num_rows: <span class="hljs-number">3453</span>
})
})`,wrap:!1}}),dl=new f({props:{code:"cmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIwJTVEJTVCJTIydG9rZW5zJTIyJTVE",highlighted:'raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;tokens&quot;</span>]',wrap:!1}}),nl=new f({props:{code:"JTVCJ0VVJyUyQyUyMCdyZWplY3RzJyUyQyUyMCdHZXJtYW4nJTJDJTIwJ2NhbGwnJTJDJTIwJ3RvJyUyQyUyMCdib3ljb3R0JyUyQyUyMCdCcml0aXNoJyUyQyUyMCdsYW1iJyUyQyUyMCcuJyU1RA==",highlighted:'[<span class="hljs-string">&#x27;EU&#x27;</span>, <span class="hljs-string">&#x27;rejects&#x27;</span>, <span class="hljs-string">&#x27;German&#x27;</span>, <span class="hljs-string">&#x27;call&#x27;</span>, <span class="hljs-string">&#x27;to&#x27;</span>, <span class="hljs-string">&#x27;boycott&#x27;</span>, <span class="hljs-string">&#x27;British&#x27;</span>, <span class="hljs-string">&#x27;lamb&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>]',wrap:!1}}),F=new f({props:{code:"cmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIwJTVEJTVCJTIybmVyX3RhZ3MlMjIlNUQ=",highlighted:'raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;ner_tags&quot;</span>]',wrap:!1}}),Jl=new f({props:{code:"JTVCMyUyQyUyMDAlMkMlMjA3JTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwNyUyQyUyMDAlMkMlMjAwJTVE",highlighted:'[<span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]',wrap:!1}}),ls=new f({props:{code:"bmVyX2ZlYXR1cmUlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RC5mZWF0dXJlcyU1QiUyMm5lcl90YWdzJTIyJTVEJTBBbmVyX2ZlYXR1cmU=",highlighted:`ner_feature = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>].features[<span class="hljs-string">&quot;ner_tags&quot;</span>]
ner_feature`,wrap:!1}}),vs=new f({props:{code:"U2VxdWVuY2UoZmVhdHVyZSUzRENsYXNzTGFiZWwobnVtX2NsYXNzZXMlM0Q5JTJDJTIwbmFtZXMlM0QlNUInTyclMkMlMjAnQi1QRVInJTJDJTIwJ0ktUEVSJyUyQyUyMCdCLU9SRyclMkMlMjAnSS1PUkcnJTJDJTIwJ0ItTE9DJyUyQyUyMCdJLUxPQyclMkMlMjAnQi1NSVNDJyUyQyUyMCdJLU1JU0MnJTVEJTJDJTIwbmFtZXNfZmlsZSUzRE5vbmUlMkMlMjBpZCUzRE5vbmUpJTJDJTIwbGVuZ3RoJTNELTElMkMlMjBpZCUzRE5vbmUp",highlighted:'<span class="hljs-type">Sequence</span>(feature=ClassLabel(num_classes=<span class="hljs-number">9</span>, names=[<span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;B-PER&#x27;</span>, <span class="hljs-string">&#x27;I-PER&#x27;</span>, <span class="hljs-string">&#x27;B-ORG&#x27;</span>, <span class="hljs-string">&#x27;I-ORG&#x27;</span>, <span class="hljs-string">&#x27;B-LOC&#x27;</span>, <span class="hljs-string">&#x27;I-LOC&#x27;</span>, <span class="hljs-string">&#x27;B-MISC&#x27;</span>, <span class="hljs-string">&#x27;I-MISC&#x27;</span>], names_file=<span class="hljs-literal">None</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>), length=-<span class="hljs-number">1</span>, <span class="hljs-built_in">id</span>=<span class="hljs-literal">None</span>)',wrap:!1}}),Vs=new f({props:{code:"bGFiZWxfbmFtZXMlMjAlM0QlMjBuZXJfZmVhdHVyZS5mZWF0dXJlLm5hbWVzJTBBbGFiZWxfbmFtZXM=",highlighted:`label_names = ner_feature.feature.names
label_names`,wrap:!1}}),hl=new f({props:{code:"JTVCJ08nJTJDJTIwJ0ItUEVSJyUyQyUyMCdJLVBFUiclMkMlMjAnQi1PUkcnJTJDJTIwJ0ktT1JHJyUyQyUyMCdCLUxPQyclMkMlMjAnSS1MT0MnJTJDJTIwJ0ItTUlTQyclMkMlMjAnSS1NSVNDJyU1RA==",highlighted:'[<span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;B-PER&#x27;</span>, <span class="hljs-string">&#x27;I-PER&#x27;</span>, <span class="hljs-string">&#x27;B-ORG&#x27;</span>, <span class="hljs-string">&#x27;I-ORG&#x27;</span>, <span class="hljs-string">&#x27;B-LOC&#x27;</span>, <span class="hljs-string">&#x27;I-LOC&#x27;</span>, <span class="hljs-string">&#x27;B-MISC&#x27;</span>, <span class="hljs-string">&#x27;I-MISC&#x27;</span>]',wrap:!1}}),Ys=new f({props:{code:"d29yZHMlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjAlNUQlNUIlMjJ0b2tlbnMlMjIlNUQlMEFsYWJlbHMlMjAlM0QlMjByYXdfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QjAlNUQlNUIlMjJuZXJfdGFncyUyMiU1RCUwQWxpbmUxJTIwJTNEJTIwJTIyJTIyJTBBbGluZTIlMjAlM0QlMjAlMjIlMjIlMEFmb3IlMjB3b3JkJTJDJTIwbGFiZWwlMjBpbiUyMHppcCh3b3JkcyUyQyUyMGxhYmVscyklM0ElMEElMjAlMjAlMjAlMjBmdWxsX2xhYmVsJTIwJTNEJTIwbGFiZWxfbmFtZXMlNUJsYWJlbCU1RCUwQSUyMCUyMCUyMCUyMG1heF9sZW5ndGglMjAlM0QlMjBtYXgobGVuKHdvcmQpJTJDJTIwbGVuKGZ1bGxfbGFiZWwpKSUwQSUyMCUyMCUyMCUyMGxpbmUxJTIwJTJCJTNEJTIwd29yZCUyMCUyQiUyMCUyMiUyMCUyMiUyMColMjAobWF4X2xlbmd0aCUyMC0lMjBsZW4od29yZCklMjAlMkIlMjAxKSUwQSUyMCUyMCUyMCUyMGxpbmUyJTIwJTJCJTNEJTIwZnVsbF9sYWJlbCUyMCUyQiUyMCUyMiUyMCUyMiUyMColMjAobWF4X2xlbmd0aCUyMC0lMjBsZW4oZnVsbF9sYWJlbCklMjAlMkIlMjAxKSUwQSUwQXByaW50KGxpbmUxKSUwQXByaW50KGxpbmUyKQ==",highlighted:`words = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;tokens&quot;</span>]
labels = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;ner_tags&quot;</span>]
line1 = <span class="hljs-string">&quot;&quot;</span>
line2 = <span class="hljs-string">&quot;&quot;</span>
<span class="hljs-keyword">for</span> word, label <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(words, labels):
full_label = label_names[label]
max_length = <span class="hljs-built_in">max</span>(<span class="hljs-built_in">len</span>(word), <span class="hljs-built_in">len</span>(full_label))
line1 += word + <span class="hljs-string">&quot; &quot;</span> * (max_length - <span class="hljs-built_in">len</span>(word) + <span class="hljs-number">1</span>)
line2 += full_label + <span class="hljs-string">&quot; &quot;</span> * (max_length - <span class="hljs-built_in">len</span>(full_label) + <span class="hljs-number">1</span>)
<span class="hljs-built_in">print</span>(line1)
<span class="hljs-built_in">print</span>(line2)`,wrap:!1}}),$l=new f({props:{code:"J0VVJTIwJTIwJTIwJTIwcmVqZWN0cyUyMEdlcm1hbiUyMGNhbGwlMjB0byUyMGJveWNvdHQlMjBCcml0aXNoJTIwbGFtYiUyMC4nJTBBJ0ItT1JHJTIwTyUyMCUyMCUyMCUyMCUyMCUyMCUyMEItTUlTQyUyME8lMjAlMjAlMjAlMjBPJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyMCUyMEItTUlTQyUyMCUyME8lMjAlMjAlMjAlMjBPJw==",highlighted:`<span class="hljs-string">&#x27;EU rejects German call to boycott British lamb .&#x27;</span>
<span class="hljs-string">&#x27;B-ORG O B-MISC O O O B-MISC O O&#x27;</span>`,wrap:!1}}),xl=new f({props:{code:"J0dlcm1hbnklMjAlNUMncyUyMHJlcHJlc2VudGF0aXZlJTIwdG8lMjB0aGUlMjBFdXJvcGVhbiUyMFVuaW9uJTIwJTVDJ3MlMjB2ZXRlcmluYXJ5JTIwY29tbWl0dGVlJTIwV2VybmVyJTIwWndpbmdtYW5uJTIwc2FpZCUyMG9uJTIwV2VkbmVzZGF5JTIwY29uc3VtZXJzJTIwc2hvdWxkJTIwYnV5JTIwc2hlZXBtZWF0JTIwZnJvbSUyMGNvdW50cmllcyUyMG90aGVyJTIwdGhhbiUyMEJyaXRhaW4lMjB1bnRpbCUyMHRoZSUyMHNjaWVudGlmaWMlMjBhZHZpY2UlMjB3YXMlMjBjbGVhcmVyJTIwLiclMEEnQi1MT0MlMjAlMjAlMjBPJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyME8lMjAlMjBPJTIwJTIwJTIwQi1PUkclMjAlMjAlMjAlMjBJLU9SRyUyME8lMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMEItUEVSJTIwJTIwSS1QRVIlMjAlMjAlMjAlMjAlMjBPJTIwJTIwJTIwJTIwTyUyMCUyME8lMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyME8lMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyME8lMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyMEItTE9DJTIwJTIwJTIwTyUyMCUyMCUyMCUyMCUyME8lMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyUyMCUyMCUyMCUyMCUyMCUyME8lMjAlMjAlMjBPJTIwJTIwJTIwJTIwJTIwJTIwJTIwTyc=",highlighted:`<span class="hljs-string">&#x27;Germany \\&#x27;s representative to the European Union \\&#x27;s veterinary committee Werner Zwingmann said on Wednesday consumers should buy sheepmeat from countries other than Britain until the scientific advice was clearer .&#x27;</span>
<span class="hljs-string">&#x27;B-LOC O O O O B-ORG I-ORG O O O B-PER I-PER O O O O O O O O O O O B-LOC O O O O O O O&#x27;</span>`,wrap:!1}}),Xs=new wl({props:{title:"データの処理",local:"データの処理",headingTag:"h3"}}),Zl=new Hn({props:{id:"iY2AZYdZAr0"}}),Bl=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMEElMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIyYmVydC1iYXNlLWNhc2VkJTIyJTBBdG9rZW5pemVyJTIwJTNEJTIwQXV0b1Rva2VuaXplci5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCk=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer
model_checkpoint = <span class="hljs-string">&quot;bert-base-cased&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_checkpoint)`,wrap:!1}}),Ms=new f({props:{code:"dG9rZW5pemVyLmlzX2Zhc3Q=",highlighted:"tokenizer.is_fast",wrap:!1}}),Qs=new f({props:{code:"VHJ1ZQ==",highlighted:'<span class="hljs-literal">True</span>',wrap:!1}}),Es=new f({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCMCU1RCU1QiUyMnRva2VucyUyMiU1RCUyQyUyMGlzX3NwbGl0X2ludG9fd29yZHMlM0RUcnVlKSUwQWlucHV0cy50b2tlbnMoKQ==",highlighted:`inputs = tokenizer(raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;tokens&quot;</span>], is_split_into_words=<span class="hljs-literal">True</span>)
inputs.tokens()`,wrap:!1}}),vl=new f({props:{code:"JTVCJyU1QkNMUyU1RCclMkMlMjAnRVUnJTJDJTIwJ3JlamVjdHMnJTJDJTIwJ0dlcm1hbiclMkMlMjAnY2FsbCclMkMlMjAndG8nJTJDJTIwJ2JveWNvdHQnJTJDJTIwJ0JyaXRpc2gnJTJDJTIwJ2xhJyUyQyUyMCclMjMlMjNtYiclMkMlMjAnLiclMkMlMjAnJTVCU0VQJTVEJyU1RA==",highlighted:'[<span class="hljs-string">&#x27;[CLS]&#x27;</span>, <span class="hljs-string">&#x27;EU&#x27;</span>, <span class="hljs-string">&#x27;rejects&#x27;</span>, <span class="hljs-string">&#x27;German&#x27;</span>, <span class="hljs-string">&#x27;call&#x27;</span>, <span class="hljs-string">&#x27;to&#x27;</span>, <span class="hljs-string">&#x27;boycott&#x27;</span>, <span class="hljs-string">&#x27;British&#x27;</span>, <span class="hljs-string">&#x27;la&#x27;</span>, <span class="hljs-string">&#x27;##mb&#x27;</span>, <span class="hljs-string">&#x27;.&#x27;</span>, <span class="hljs-string">&#x27;[SEP]&#x27;</span>]',wrap:!1}}),Hs=new f({props:{code:"aW5wdXRzLndvcmRfaWRzKCk=",highlighted:"inputs.word_ids()",wrap:!1}}),Yl=new f({props:{code:"JTVCTm9uZSUyQyUyMDAlMkMlMjAxJTJDJTIwMiUyQyUyMDMlMkMlMjA0JTJDJTIwNSUyQyUyMDYlMkMlMjA3JTJDJTIwNyUyQyUyMDglMkMlMjBOb25lJTVE",highlighted:'[<span class="hljs-literal">None</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, <span class="hljs-number">3</span>, <span class="hljs-number">4</span>, <span class="hljs-number">5</span>, <span class="hljs-number">6</span>, <span class="hljs-number">7</span>, <span class="hljs-number">7</span>, <span class="hljs-number">8</span>, <span class="hljs-literal">None</span>]',wrap:!1}}),ys=new f({props:{code:"ZGVmJTIwYWxpZ25fbGFiZWxzX3dpdGhfdG9rZW5zKGxhYmVscyUyQyUyMHdvcmRfaWRzKSUzQSUwQSUyMCUyMCUyMCUyMG5ld19sYWJlbHMlMjAlM0QlMjAlNUIlNUQlMEElMjAlMjAlMjAlMjBjdXJyZW50X3dvcmQlMjAlM0QlMjBOb25lJTBBJTIwJTIwJTIwJTIwZm9yJTIwd29yZF9pZCUyMGluJTIwd29yZF9pZHMlM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBpZiUyMHdvcmRfaWQlMjAhJTNEJTIwY3VycmVudF93b3JkJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU3RhcnQlMjBvZiUyMGElMjBuZXclMjB3b3JkISUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGN1cnJlbnRfd29yZCUyMCUzRCUyMHdvcmRfaWQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbCUyMCUzRCUyMC0xMDAlMjBpZiUyMHdvcmRfaWQlMjBpcyUyME5vbmUlMjBlbHNlJTIwbGFiZWxzJTVCd29yZF9pZCU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMG5ld19sYWJlbHMuYXBwZW5kKGxhYmVsKSUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGVsaWYlMjB3b3JkX2lkJTIwaXMlMjBOb25lJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU3BlY2lhbCUyMHRva2VuJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmV3X2xhYmVscy5hcHBlbmQoLTEwMCklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBlbHNlJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIzJTIwU2FtZSUyMHdvcmQlMjBhcyUyMHByZXZpb3VzJTIwdG9rZW4lMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBsYWJlbCUyMCUzRCUyMGxhYmVscyU1QndvcmRfaWQlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBJZiUyMHRoZSUyMGxhYmVsJTIwaXMlMjBCLVhYWCUyMHdlJTIwY2hhbmdlJTIwaXQlMjB0byUyMEktWFhYJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwaWYlMjBsYWJlbCUyMCUyNSUyMDIlMjAlM0QlM0QlMjAxJTNBJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbGFiZWwlMjAlMkIlM0QlMjAxJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwbmV3X2xhYmVscy5hcHBlbmQobGFiZWwpJTBBJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwbmV3X2xhYmVscw==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">align_labels_with_tokens</span>(<span class="hljs-params">labels, word_ids</span>):
new_labels = []
current_word = <span class="hljs-literal">None</span>
<span class="hljs-keyword">for</span> word_id <span class="hljs-keyword">in</span> word_ids:
<span class="hljs-keyword">if</span> word_id != current_word:
<span class="hljs-comment"># Start of a new word!</span>
current_word = word_id
label = -<span class="hljs-number">100</span> <span class="hljs-keyword">if</span> word_id <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span> <span class="hljs-keyword">else</span> labels[word_id]
new_labels.append(label)
<span class="hljs-keyword">elif</span> word_id <span class="hljs-keyword">is</span> <span class="hljs-literal">None</span>:
<span class="hljs-comment"># Special token</span>
new_labels.append(-<span class="hljs-number">100</span>)
<span class="hljs-keyword">else</span>:
<span class="hljs-comment"># Same word as previous token</span>
label = labels[word_id]
<span class="hljs-comment"># If the label is B-XXX we change it to I-XXX</span>
<span class="hljs-keyword">if</span> label % <span class="hljs-number">2</span> == <span class="hljs-number">1</span>:
label += <span class="hljs-number">1</span>
new_labels.append(label)
<span class="hljs-keyword">return</span> new_labels`,wrap:!1}}),ms=new f({props:{code:"bGFiZWxzJTIwJTNEJTIwcmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIwJTVEJTVCJTIybmVyX3RhZ3MlMjIlNUQlMEF3b3JkX2lkcyUyMCUzRCUyMGlucHV0cy53b3JkX2lkcygpJTBBcHJpbnQobGFiZWxzKSUwQXByaW50KGFsaWduX2xhYmVsc193aXRoX3Rva2VucyhsYWJlbHMlMkMlMjB3b3JkX2lkcykp",highlighted:`labels = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;ner_tags&quot;</span>]
word_ids = inputs.word_ids()
<span class="hljs-built_in">print</span>(labels)
<span class="hljs-built_in">print</span>(align_labels_with_tokens(labels, word_ids))`,wrap:!1}}),os=new f({props:{code:"JTVCMyUyQyUyMDAlMkMlMjA3JTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwNyUyQyUyMDAlMkMlMjAwJTVEJTBBJTVCLTEwMCUyQyUyMDMlMkMlMjAwJTJDJTIwNyUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDclMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAtMTAwJTVE",highlighted:`[<span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]
[-<span class="hljs-number">100</span>, <span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">100</span>]`,wrap:!1}}),Be=new f({props:{code:"ZGVmJTIwdG9rZW5pemVfYW5kX2FsaWduX2xhYmVscyhleGFtcGxlcyklM0ElMEElMjAlMjAlMjAlMjB0b2tlbml6ZWRfaW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMGV4YW1wbGVzJTVCJTIydG9rZW5zJTIyJTVEJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjBpc19zcGxpdF9pbnRvX3dvcmRzJTNEVHJ1ZSUwQSUyMCUyMCUyMCUyMCklMEElMjAlMjAlMjAlMjBhbGxfbGFiZWxzJTIwJTNEJTIwZXhhbXBsZXMlNUIlMjJuZXJfdGFncyUyMiU1RCUwQSUyMCUyMCUyMCUyMG5ld19sYWJlbHMlMjAlM0QlMjAlNUIlNUQlMEElMjAlMjAlMjAlMjBmb3IlMjBpJTJDJTIwbGFiZWxzJTIwaW4lMjBlbnVtZXJhdGUoYWxsX2xhYmVscyklM0ElMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjB3b3JkX2lkcyUyMCUzRCUyMHRva2VuaXplZF9pbnB1dHMud29yZF9pZHMoaSklMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBuZXdfbGFiZWxzLmFwcGVuZChhbGlnbl9sYWJlbHNfd2l0aF90b2tlbnMobGFiZWxzJTJDJTIwd29yZF9pZHMpKSUwQSUwQSUyMCUyMCUyMCUyMHRva2VuaXplZF9pbnB1dHMlNUIlMjJsYWJlbHMlMjIlNUQlMjAlM0QlMjBuZXdfbGFiZWxzJTBBJTIwJTIwJTIwJTIwcmV0dXJuJTIwdG9rZW5pemVkX2lucHV0cw==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">tokenize_and_align_labels</span>(<span class="hljs-params">examples</span>):
tokenized_inputs = tokenizer(
examples[<span class="hljs-string">&quot;tokens&quot;</span>], truncation=<span class="hljs-literal">True</span>, is_split_into_words=<span class="hljs-literal">True</span>
)
all_labels = examples[<span class="hljs-string">&quot;ner_tags&quot;</span>]
new_labels = []
<span class="hljs-keyword">for</span> i, labels <span class="hljs-keyword">in</span> <span class="hljs-built_in">enumerate</span>(all_labels):
word_ids = tokenized_inputs.word_ids(i)
new_labels.append(align_labels_with_tokens(labels, word_ids))
tokenized_inputs[<span class="hljs-string">&quot;labels&quot;</span>] = new_labels
<span class="hljs-keyword">return</span> tokenized_inputs`,wrap:!1}}),Ae=new f({props:{code:"dG9rZW5pemVkX2RhdGFzZXRzJTIwJTNEJTIwcmF3X2RhdGFzZXRzLm1hcCglMEElMjAlMjAlMjAlMjB0b2tlbml6ZV9hbmRfYWxpZ25fbGFiZWxzJTJDJTBBJTIwJTIwJTIwJTIwYmF0Y2hlZCUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZW1vdmVfY29sdW1ucyUzRHJhd19kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVELmNvbHVtbl9uYW1lcyUyQyUwQSk=",highlighted:`tokenized_datasets = raw_datasets.<span class="hljs-built_in">map</span>(
tokenize_and_align_labels,
batched=<span class="hljs-literal">True</span>,
remove_columns=raw_datasets[<span class="hljs-string">&quot;train&quot;</span>].column_names,
)`,wrap:!1}});const gn=[pa,aa],rt=[];function Bn(l,n){return l[0]==="pt"?0:1}ds=Bn(A),fs=rt[ds]=gn[ds](A),Ve=new wl({props:{title:"データ照合",local:"データ照合",headingTag:"h3"}});const Wn=[ia,Ma],ct=[];function Gn(l,n){return l[0]==="pt"?0:1}hs=Gn(A),Cs=ct[hs]=Wn[hs](A),Qe=new f({props:{code:"YmF0Y2glMjAlM0QlMjBkYXRhX2NvbGxhdG9yKCU1QnRva2VuaXplZF9kYXRhc2V0cyU1QiUyMnRyYWluJTIyJTVEJTVCaSU1RCUyMGZvciUyMGklMjBpbiUyMHJhbmdlKDIpJTVEKSUwQWJhdGNoJTVCJTIybGFiZWxzJTIyJTVE",highlighted:`batch = data_collator([tokenized_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[<span class="hljs-string">&quot;labels&quot;</span>]`,wrap:!1}}),Ee=new f({props:{code:"dGVuc29yKCU1QiU1Qi0xMDAlMkMlMjAlMjAlMjAlMjAzJTJDJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMDclMkMlMjAlMjAlMjAlMjAwJTJDJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjA3JTJDJTIwJTIwJTIwJTIwMCUyQyUyMCUyMCUyMCUyMDAlMkMlMjAlMjAlMjAlMjAwJTJDJTIwLTEwMCU1RCUyQyUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCU1Qi0xMDAlMkMlMjAlMjAlMjAlMjAxJTJDJTIwJTIwJTIwJTIwMiUyQyUyMC0xMDAlMkMlMjAtMTAwJTJDJTIwLTEwMCUyQyUyMC0xMDAlMkMlMjAtMTAwJTJDJTIwLTEwMCUyQyUyMC0xMDAlMkMlMjAtMTAwJTJDJTIwLTEwMCU1RCU1RCk=",highlighted:`tensor([[-<span class="hljs-number">100</span>, <span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">100</span>],
[-<span class="hljs-number">100</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>, -<span class="hljs-number">100</span>]])`,wrap:!1}}),Ne=new f({props:{code:"Zm9yJTIwaSUyMGluJTIwcmFuZ2UoMiklM0ElMEElMjAlMjAlMjAlMjBwcmludCh0b2tlbml6ZWRfZGF0YXNldHMlNUIlMjJ0cmFpbiUyMiU1RCU1QmklNUQlNUIlMjJsYWJlbHMlMjIlNUQp",highlighted:`<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-built_in">print</span>(tokenized_datasets[<span class="hljs-string">&quot;train&quot;</span>][i][<span class="hljs-string">&quot;labels&quot;</span>])`,wrap:!1}}),ze=new f({props:{code:"JTVCLTEwMCUyQyUyMDMlMkMlMjAwJTJDJTIwNyUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDclMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAtMTAwJTVEJTBBJTVCLTEwMCUyQyUyMDElMkMlMjAyJTJDJTIwLTEwMCU1RA==",highlighted:`[-<span class="hljs-number">100</span>, <span class="hljs-number">3</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">7</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, -<span class="hljs-number">100</span>]
[-<span class="hljs-number">100</span>, <span class="hljs-number">1</span>, <span class="hljs-number">2</span>, -<span class="hljs-number">100</span>]`,wrap:!1}});const An=[ca,ra],Jt=[];function vn(l,n){return l[0]==="pt"?0:1}Is=vn(A),$s=Jt[Is]=An[Is](A);let O=A[0]==="tf"&&Nn();Fe=new wl({props:{title:"指標",local:"指標",headingTag:"h3"}});const Vn=[ya,Ja],yt=[];function Rn(l,n){return l[0]==="pt"?0:1}ks=Rn(A),xs=yt[ks]=Vn[ks](A),Se=new f({props:{code:"aW1wb3J0JTIwZXZhbHVhdGUlMEElMEFtZXRyaWMlMjAlM0QlMjBldmFsdWF0ZS5sb2FkKCUyMnNlcWV2YWwlMjIp",highlighted:`<span class="hljs-keyword">import</span> evaluate
metric = evaluate.load(<span class="hljs-string">&quot;seqeval&quot;</span>)`,wrap:!1}}),qe=new f({props:{code:"bGFiZWxzJTIwJTNEJTIwcmF3X2RhdGFzZXRzJTVCJTIydHJhaW4lMjIlNUQlNUIwJTVEJTVCJTIybmVyX3RhZ3MlMjIlNUQlMEFsYWJlbHMlMjAlM0QlMjAlNUJsYWJlbF9uYW1lcyU1QmklNUQlMjBmb3IlMjBpJTIwaW4lMjBsYWJlbHMlNUQlMEFsYWJlbHM=",highlighted:`labels = raw_datasets[<span class="hljs-string">&quot;train&quot;</span>][<span class="hljs-number">0</span>][<span class="hljs-string">&quot;ner_tags&quot;</span>]
labels = [label_names[i] <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> labels]
labels`,wrap:!1}}),Pe=new f({props:{code:"JTVCJ0ItT1JHJyUyQyUyMCdPJyUyQyUyMCdCLU1JU0MnJTJDJTIwJ08nJTJDJTIwJ08nJTJDJTIwJ08nJTJDJTIwJ0ItTUlTQyclMkMlMjAnTyclMkMlMjAnTyclNUQ=",highlighted:'[<span class="hljs-string">&#x27;B-ORG&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;B-MISC&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;B-MISC&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>, <span class="hljs-string">&#x27;O&#x27;</span>]',wrap:!1}}),Ke=new f({props:{code:"cHJlZGljdGlvbnMlMjAlM0QlMjBsYWJlbHMuY29weSgpJTBBcHJlZGljdGlvbnMlNUIyJTVEJTIwJTNEJTIwJTIyTyUyMiUwQW1ldHJpYy5jb21wdXRlKHByZWRpY3Rpb25zJTNEJTVCcHJlZGljdGlvbnMlNUQlMkMlMjByZWZlcmVuY2VzJTNEJTVCbGFiZWxzJTVEKQ==",highlighted:`predictions = labels.copy()
predictions[<span class="hljs-number">2</span>] = <span class="hljs-string">&quot;O&quot;</span>
metric.compute(predictions=[predictions], references=[labels])`,wrap:!1}}),st=new f({props:{code:"JTdCJ01JU0MnJTNBJTIwJTdCJ3ByZWNpc2lvbiclM0ElMjAxLjAlMkMlMjAncmVjYWxsJyUzQSUyMDAuNSUyQyUyMCdmMSclM0ElMjAwLjY3JTJDJTIwJ251bWJlciclM0ElMjAyJTdEJTJDJTBBJTIwJ09SRyclM0ElMjAlN0IncHJlY2lzaW9uJyUzQSUyMDEuMCUyQyUyMCdyZWNhbGwnJTNBJTIwMS4wJTJDJTIwJ2YxJyUzQSUyMDEuMCUyQyUyMCdudW1iZXInJTNBJTIwMSU3RCUyQyUwQSUyMCdvdmVyYWxsX3ByZWNpc2lvbiclM0ElMjAxLjAlMkMlMEElMjAnb3ZlcmFsbF9yZWNhbGwnJTNBJTIwMC42NyUyQyUwQSUyMCdvdmVyYWxsX2YxJyUzQSUyMDAuOCUyQyUwQSUyMCdvdmVyYWxsX2FjY3VyYWN5JyUzQSUyMDAuODklN0Q=",highlighted:`{<span class="hljs-string">&#x27;MISC&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">1.0</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">0.5</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">0.67</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">2</span>},
<span class="hljs-string">&#x27;ORG&#x27;</span>: {<span class="hljs-string">&#x27;precision&#x27;</span>: <span class="hljs-number">1.0</span>, <span class="hljs-string">&#x27;recall&#x27;</span>: <span class="hljs-number">1.0</span>, <span class="hljs-string">&#x27;f1&#x27;</span>: <span class="hljs-number">1.0</span>, <span class="hljs-string">&#x27;number&#x27;</span>: <span class="hljs-number">1</span>},
<span class="hljs-string">&#x27;overall_precision&#x27;</span>: <span class="hljs-number">1.0</span>,
<span class="hljs-string">&#x27;overall_recall&#x27;</span>: <span class="hljs-number">0.67</span>,
<span class="hljs-string">&#x27;overall_f1&#x27;</span>: <span class="hljs-number">0.8</span>,
<span class="hljs-string">&#x27;overall_accuracy&#x27;</span>: <span class="hljs-number">0.89</span>}`,wrap:!1}});const Yn=[ja,Ta],Tt=[];function Xn(l,n){return l[0]==="pt"?0:1}_s=Xn(A),Zs=Tt[_s]=Yn[_s](A);let K=A[0]==="pt"&&zn();return et=new wl({props:{title:"微調整したモデルを使う",local:"微調整したモデルを使う",headingTag:"h2"}}),nt=new f({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBJTIzJTIwUmVwbGFjZSUyMHRoaXMlMjB3aXRoJTIweW91ciUyMG93biUyMGNoZWNrcG9pbnQlMEFtb2RlbF9jaGVja3BvaW50JTIwJTNEJTIwJTIyaHVnZ2luZ2ZhY2UtY291cnNlJTJGYmVydC1maW5ldHVuZWQtbmVyJTIyJTBBdG9rZW5fY2xhc3NpZmllciUyMCUzRCUyMHBpcGVsaW5lKCUwQSUyMCUyMCUyMCUyMCUyMnRva2VuLWNsYXNzaWZpY2F0aW9uJTIyJTJDJTIwbW9kZWwlM0Rtb2RlbF9jaGVja3BvaW50JTJDJTIwYWdncmVnYXRpb25fc3RyYXRlZ3klM0QlMjJzaW1wbGUlMjIlMEEpJTBBdG9rZW5fY2xhc3NpZmllciglMjJNeSUyMG5hbWUlMjBpcyUyMFN5bHZhaW4lMjBhbmQlMjBJJTIwd29yayUyMGF0JTIwSHVnZ2luZyUyMEZhY2UlMjBpbiUyMEJyb29rbHluLiUyMik=",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline
<span class="hljs-comment"># Replace this with your own checkpoint</span>
model_checkpoint = <span class="hljs-string">&quot;huggingface-course/bert-finetuned-ner&quot;</span>
token_classifier = pipeline(
<span class="hljs-string">&quot;token-classification&quot;</span>, model=model_checkpoint, aggregation_strategy=<span class="hljs-string">&quot;simple&quot;</span>
)
token_classifier(<span class="hljs-string">&quot;My name is Sylvain and I work at Hugging Face in Brooklyn.&quot;</span>)`,wrap:!1}}),at=new f({props:{code:"JTVCJTdCJ2VudGl0eV9ncm91cCclM0ElMjAnUEVSJyUyQyUyMCdzY29yZSclM0ElMjAwLjk5ODg1MDYlMkMlMjAnd29yZCclM0ElMjAnU3lsdmFpbiclMkMlMjAnc3RhcnQnJTNBJTIwMTElMkMlMjAnZW5kJyUzQSUyMDE4JTdEJTJDJTBBJTIwJTdCJ2VudGl0eV9ncm91cCclM0ElMjAnT1JHJyUyQyUyMCdzY29yZSclM0ElMjAwLjk2NDc2MjUlMkMlMjAnd29yZCclM0ElMjAnSHVnZ2luZyUyMEZhY2UnJTJDJTIwJ3N0YXJ0JyUzQSUyMDMzJTJDJTIwJ2VuZCclM0ElMjA0NSU3RCUyQyUwQSUyMCU3QidlbnRpdHlfZ3JvdXAnJTNBJTIwJ0xPQyclMkMlMjAnc2NvcmUnJTNBJTIwMC45OTg2MTE4JTJDJTIwJ3dvcmQnJTNBJTIwJ0Jyb29rbHluJyUyQyUyMCdzdGFydCclM0ElMjA0OSUyQyUyMCdlbmQnJTNBJTIwNTclN0QlNUQ=",highlighted:`[{<span class="hljs-string">&#x27;entity_group&#x27;</span>: <span class="hljs-string">&#x27;PER&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9988506</span>, <span class="hljs-string">&#x27;word&#x27;</span>: <span class="hljs-string">&#x27;Sylvain&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">11</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">18</span>},
{<span class="hljs-string">&#x27;entity_group&#x27;</span>: <span class="hljs-string">&#x27;ORG&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9647625</span>, <span class="hljs-string">&#x27;word&#x27;</span>: <span class="hljs-string">&#x27;Hugging Face&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">33</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">45</span>},
{<span class="hljs-string">&#x27;entity_group&#x27;</span>: <span class="hljs-string">&#x27;LOC&#x27;</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.9986118</span>, <span class="hljs-string">&#x27;word&#x27;</span>: <span class="hljs-string">&#x27;Brooklyn&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">49</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">57</span>}]`,wrap:!1}}),Mt=new sa({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ja/chapter7/2.mdx"}}),{c(){r=c("meta"),C=a(),m=c("p"),h=a(),w(Z.$$.fragment),d=a(),w(k.$$.fragment),W=a(),w(U.$$.fragment),B=a(),x.c(),G=a(),$=c("p"),$.textContent=_,v=a(),Dl=c("ul"),Dl.innerHTML=Pl,S=a(),w(al.$$.fragment),L=a(),pl=c("p"),pl.textContent=D,gs=a(),Y=c("iframe"),Xl=a(),V=c("a"),V.innerHTML=Te,Ql=a(),X=c("p"),X.innerHTML=Bs,Ml=a(),w(el.$$.fragment),El=a(),Q=c("p"),Q.innerHTML=je,Hl=a(),R=c("blockquote"),R.innerHTML=Ws,il=a(),w(tl.$$.fragment),Nl=a(),E=c("p"),E.innerHTML=me,zl=a(),w(H.$$.fragment),Fl=a(),N=c("p"),N.innerHTML=we,Sl=a(),w(z.$$.fragment),Gs=a(),w(rl.$$.fragment),q=a(),ol=c("p"),ol.innerHTML=bl,ul=a(),Ul=c("p"),Ul.textContent=yl,Tl=a(),w(dl.$$.fragment),cl=a(),w(nl.$$.fragment),Ol=a(),P=c("p"),P.textContent=ql,Ll=a(),w(F.$$.fragment),As=a(),w(Jl.$$.fragment),M=a(),I=c("p"),I.innerHTML=ue,Kl=a(),w(ls.$$.fragment),ss=a(),w(vs.$$.fragment),Ss=a(),fl=c("p"),fl.innerHTML=Ue,es=a(),w(Vs.$$.fragment),Ls=a(),w(hl.$$.fragment),de=a(),ts=c("p"),ts.innerHTML=Rs,Ds=a(),Cl=c("ul"),Cl.innerHTML=dt,qs=a(),Il=c("p"),Il.textContent=fe,ns=a(),w(Ys.$$.fragment),Ps=a(),w($l.$$.fragment),Os=a(),kl=c("p"),kl.innerHTML=ft,Ks=a(),w(xl.$$.fragment),le=a(),_l=c("p"),_l.innerHTML=ht,se=a(),jl=c("blockquote"),jl.innerHTML=he,as=a(),w(Xs.$$.fragment),ee=a(),w(Zl.$$.fragment),te=a(),ml=c("p"),ml.innerHTML=Ct,ne=a(),gl=c("p"),gl.innerHTML=It,ae=a(),w(Bl.$$.fragment),pe=a(),Wl=c("p"),Wl.innerHTML=$t,Me=a(),Gl=c("p"),Gl.innerHTML=Ce,ps=a(),w(Ms.$$.fragment),is=a(),w(Qs.$$.fragment),ie=a(),Al=c("p"),Al.innerHTML=Ie,rs=a(),w(Es.$$.fragment),re=a(),w(vl.$$.fragment),ce=a(),Vl=c("p"),Vl.innerHTML=kt,Je=a(),Rl=c("p"),Rl.innerHTML=$e,cs=a(),w(Hs.$$.fragment),ye=a(),w(Yl.$$.fragment),ke=a(),Js=c("p"),Js.innerHTML=Ns,xe=a(),w(ys.$$.fragment),Ts=a(),js=c("p"),js.textContent=zs,_e=a(),w(ms.$$.fragment),ws=a(),w(os.$$.fragment),bs=a(),Fs=c("p"),Fs.innerHTML=Ze,us=a(),Us=c("blockquote"),Us.innerHTML=ge,s=a(),i=c("p"),i.innerHTML=mn,_t=a(),w(Be.$$.fragment),Zt=a(),We=c("p"),We.textContent=wn,gt=a(),Ge=c("p"),Ge.textContent=on,Bt=a(),w(Ae.$$.fragment),Wt=a(),ve=c("p"),ve.innerHTML=bn,Gt=a(),fs.c(),jt=a(),w(Ve.$$.fragment),At=a(),Re=c("p"),Re.innerHTML=un,vt=a(),Ye=c("p"),Ye.innerHTML=Un,Vt=a(),Cs.c(),mt=a(),Xe=c("p"),Xe.textContent=dn,Rt=a(),w(Qe.$$.fragment),Yt=a(),w(Ee.$$.fragment),Xt=a(),He=c("p"),He.textContent=fn,Qt=a(),w(Ne.$$.fragment),Et=a(),w(ze.$$.fragment),Ht=a(),$s.c(),wt=a(),O&&O.c(),ot=a(),w(Fe.$$.fragment),Nt=a(),xs.c(),bt=a(),w(Se.$$.fragment),zt=a(),Le=c("p"),Le.textContent=hn,Ft=a(),De=c("p"),De.textContent=Cn,St=a(),w(qe.$$.fragment),Lt=a(),w(Pe.$$.fragment),Dt=a(),Oe=c("p"),Oe.textContent=In,qt=a(),w(Ke.$$.fragment),Pt=a(),lt=c("p"),lt.textContent=$n,Ot=a(),w(st.$$.fragment),Kt=a(),Zs.c(),ut=a(),K&&K.c(),Ut=a(),w(et.$$.fragment),ln=a(),tt=c("p"),tt.innerHTML=kn,sn=a(),w(nt.$$.fragment),en=a(),w(at.$$.fragment),tn=a(),pt=c("p"),pt.textContent=xn,nn=a(),w(Mt.$$.fragment),an=a(),xt=c("p"),this.h()},l(l){const n=On("svelte-u9bgzb",document.head);r=J(n,"META",{name:!0,content:!0}),n.forEach(e),C=p(l),m=J(l,"P",{}),jn(m).forEach(e),h=p(l),o(Z.$$.fragment,l),d=p(l),o(k.$$.fragment,l),W=p(l),o(U.$$.fragment,l),B=p(l),x.l(l),G=p(l),$=J(l,"P",{"data-svelte-h":!0}),y($)!=="svelte-svo6en"&&($.textContent=_),v=p(l),Dl=J(l,"UL",{"data-svelte-h":!0}),y(Dl)!=="svelte-uu67t6"&&(Dl.innerHTML=Pl),S=p(l),o(al.$$.fragment,l),L=p(l),pl=J(l,"P",{"data-svelte-h":!0}),y(pl)!=="svelte-5yn93d"&&(pl.textContent=D),gs=p(l),Y=J(l,"IFRAME",{src:!0,frameborder:!0,height:!0,title:!0,class:!0,allow:!0,sandbox:!0}),jn(Y).forEach(e),Xl=p(l),V=J(l,"A",{class:!0,href:!0,"data-svelte-h":!0}),y(V)!=="svelte-1n7oe9l"&&(V.innerHTML=Te),Ql=p(l),X=J(l,"P",{"data-svelte-h":!0}),y(X)!=="svelte-hjhjjm"&&(X.innerHTML=Bs),Ml=p(l),o(el.$$.fragment,l),El=p(l),Q=J(l,"P",{"data-svelte-h":!0}),y(Q)!=="svelte-1mq6d9b"&&(Q.innerHTML=je),Hl=p(l),R=J(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(R)!=="svelte-hqttcs"&&(R.innerHTML=Ws),il=p(l),o(tl.$$.fragment,l),Nl=p(l),E=J(l,"P",{"data-svelte-h":!0}),y(E)!=="svelte-15573kq"&&(E.innerHTML=me),zl=p(l),o(H.$$.fragment,l),Fl=p(l),N=J(l,"P",{"data-svelte-h":!0}),y(N)!=="svelte-1vkea73"&&(N.innerHTML=we),Sl=p(l),o(z.$$.fragment,l),Gs=p(l),o(rl.$$.fragment,l),q=p(l),ol=J(l,"P",{"data-svelte-h":!0}),y(ol)!=="svelte-t17zid"&&(ol.innerHTML=bl),ul=p(l),Ul=J(l,"P",{"data-svelte-h":!0}),y(Ul)!=="svelte-uxn87c"&&(Ul.textContent=yl),Tl=p(l),o(dl.$$.fragment,l),cl=p(l),o(nl.$$.fragment,l),Ol=p(l),P=J(l,"P",{"data-svelte-h":!0}),y(P)!=="svelte-h2zmru"&&(P.textContent=ql),Ll=p(l),o(F.$$.fragment,l),As=p(l),o(Jl.$$.fragment,l),M=p(l),I=J(l,"P",{"data-svelte-h":!0}),y(I)!=="svelte-tm1xf8"&&(I.innerHTML=ue),Kl=p(l),o(ls.$$.fragment,l),ss=p(l),o(vs.$$.fragment,l),Ss=p(l),fl=J(l,"P",{"data-svelte-h":!0}),y(fl)!=="svelte-jzvnsf"&&(fl.innerHTML=Ue),es=p(l),o(Vs.$$.fragment,l),Ls=p(l),o(hl.$$.fragment,l),de=p(l),ts=J(l,"P",{"data-svelte-h":!0}),y(ts)!=="svelte-1msafbs"&&(ts.innerHTML=Rs),Ds=p(l),Cl=J(l,"UL",{"data-svelte-h":!0}),y(Cl)!=="svelte-1kuf9h6"&&(Cl.innerHTML=dt),qs=p(l),Il=J(l,"P",{"data-svelte-h":!0}),y(Il)!=="svelte-c8thof"&&(Il.textContent=fe),ns=p(l),o(Ys.$$.fragment,l),Ps=p(l),o($l.$$.fragment,l),Os=p(l),kl=J(l,"P",{"data-svelte-h":!0}),y(kl)!=="svelte-1vqafwd"&&(kl.innerHTML=ft),Ks=p(l),o(xl.$$.fragment,l),le=p(l),_l=J(l,"P",{"data-svelte-h":!0}),y(_l)!=="svelte-17p132z"&&(_l.innerHTML=ht),se=p(l),jl=J(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(jl)!=="svelte-15f1kz5"&&(jl.innerHTML=he),as=p(l),o(Xs.$$.fragment,l),ee=p(l),o(Zl.$$.fragment,l),te=p(l),ml=J(l,"P",{"data-svelte-h":!0}),y(ml)!=="svelte-1olimm5"&&(ml.innerHTML=Ct),ne=p(l),gl=J(l,"P",{"data-svelte-h":!0}),y(gl)!=="svelte-12fiftu"&&(gl.innerHTML=It),ae=p(l),o(Bl.$$.fragment,l),pe=p(l),Wl=J(l,"P",{"data-svelte-h":!0}),y(Wl)!=="svelte-16hllzz"&&(Wl.innerHTML=$t),Me=p(l),Gl=J(l,"P",{"data-svelte-h":!0}),y(Gl)!=="svelte-1r7va8g"&&(Gl.innerHTML=Ce),ps=p(l),o(Ms.$$.fragment,l),is=p(l),o(Qs.$$.fragment,l),ie=p(l),Al=J(l,"P",{"data-svelte-h":!0}),y(Al)!=="svelte-rpbpai"&&(Al.innerHTML=Ie),rs=p(l),o(Es.$$.fragment,l),re=p(l),o(vl.$$.fragment,l),ce=p(l),Vl=J(l,"P",{"data-svelte-h":!0}),y(Vl)!=="svelte-5wk6j8"&&(Vl.innerHTML=kt),Je=p(l),Rl=J(l,"P",{"data-svelte-h":!0}),y(Rl)!=="svelte-pjktnw"&&(Rl.innerHTML=$e),cs=p(l),o(Hs.$$.fragment,l),ye=p(l),o(Yl.$$.fragment,l),ke=p(l),Js=J(l,"P",{"data-svelte-h":!0}),y(Js)!=="svelte-1hxu3ua"&&(Js.innerHTML=Ns),xe=p(l),o(ys.$$.fragment,l),Ts=p(l),js=J(l,"P",{"data-svelte-h":!0}),y(js)!=="svelte-uggqx7"&&(js.textContent=zs),_e=p(l),o(ms.$$.fragment,l),ws=p(l),o(os.$$.fragment,l),bs=p(l),Fs=J(l,"P",{"data-svelte-h":!0}),y(Fs)!=="svelte-s09piw"&&(Fs.innerHTML=Ze),us=p(l),Us=J(l,"BLOCKQUOTE",{class:!0,"data-svelte-h":!0}),y(Us)!=="svelte-1y6qhjd"&&(Us.innerHTML=ge),s=p(l),i=J(l,"P",{"data-svelte-h":!0}),y(i)!=="svelte-1sdf1xp"&&(i.innerHTML=mn),_t=p(l),o(Be.$$.fragment,l),Zt=p(l),We=J(l,"P",{"data-svelte-h":!0}),y(We)!=="svelte-1p1icix"&&(We.textContent=wn),gt=p(l),Ge=J(l,"P",{"data-svelte-h":!0}),y(Ge)!=="svelte-6xsdto"&&(Ge.textContent=on),Bt=p(l),o(Ae.$$.fragment,l),Wt=p(l),ve=J(l,"P",{"data-svelte-h":!0}),y(ve)!=="svelte-f1ps9f"&&(ve.innerHTML=bn),Gt=p(l),fs.l(l),jt=p(l),o(Ve.$$.fragment,l),At=p(l),Re=J(l,"P",{"data-svelte-h":!0}),y(Re)!=="svelte-139j8d2"&&(Re.innerHTML=un),vt=p(l),Ye=J(l,"P",{"data-svelte-h":!0}),y(Ye)!=="svelte-1j845aq"&&(Ye.innerHTML=Un),Vt=p(l),Cs.l(l),mt=p(l),Xe=J(l,"P",{"data-svelte-h":!0}),y(Xe)!=="svelte-1hl0461"&&(Xe.textContent=dn),Rt=p(l),o(Qe.$$.fragment,l),Yt=p(l),o(Ee.$$.fragment,l),Xt=p(l),He=J(l,"P",{"data-svelte-h":!0}),y(He)!=="svelte-77lkc7"&&(He.textContent=fn),Qt=p(l),o(Ne.$$.fragment,l),Et=p(l),o(ze.$$.fragment,l),Ht=p(l),$s.l(l),wt=p(l),O&&O.l(l),ot=p(l),o(Fe.$$.fragment,l),Nt=p(l),xs.l(l),bt=p(l),o(Se.$$.fragment,l),zt=p(l),Le=J(l,"P",{"data-svelte-h":!0}),y(Le)!=="svelte-18y0vl7"&&(Le.textContent=hn),Ft=p(l),De=J(l,"P",{"data-svelte-h":!0}),y(De)!=="svelte-it18kn"&&(De.textContent=Cn),St=p(l),o(qe.$$.fragment,l),Lt=p(l),o(Pe.$$.fragment,l),Dt=p(l),Oe=J(l,"P",{"data-svelte-h":!0}),y(Oe)!=="svelte-16fhq4b"&&(Oe.textContent=In),qt=p(l),o(Ke.$$.fragment,l),Pt=p(l),lt=J(l,"P",{"data-svelte-h":!0}),y(lt)!=="svelte-l83l3k"&&(lt.textContent=$n),Ot=p(l),o(st.$$.fragment,l),Kt=p(l),Zs.l(l),ut=p(l),K&&K.l(l),Ut=p(l),o(et.$$.fragment,l),ln=p(l),tt=J(l,"P",{"data-svelte-h":!0}),y(tt)!=="svelte-2zp2k5"&&(tt.innerHTML=kn),sn=p(l),o(nt.$$.fragment,l),en=p(l),o(at.$$.fragment,l),tn=p(l),pt=J(l,"P",{"data-svelte-h":!0}),y(pt)!=="svelte-mi13go"&&(pt.textContent=xn),nn=p(l),o(Mt.$$.fragment,l),an=p(l),xt=J(l,"P",{}),jn(xt).forEach(e),this.h()},h(){ll(r,"name","hf:doc:metadata"),ll(r,"content",wa),Ln(Y.src,sl="https://course-demos-bert-finetuned-ner.hf.space")||ll(Y,"src",sl),ll(Y,"frameborder","0"),ll(Y,"height","350"),ll(Y,"title","Gradio app"),ll(Y,"class","block dark:hidden container p-0 flex-grow space-iframe"),ll(Y,"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"),ll(Y,"sandbox","allow-forms allow-modals allow-popups allow-popups-to-escape-sandbox allow-same-origin allow-scripts allow-downloads"),ll(V,"class","flex justify-center"),ll(V,"href","/huggingface-course/bert-finetuned-ner"),ll(R,"class","tip"),ll(jl,"class","tip"),ll(Us,"class","tip")},m(l,n){Kn(document.head,r),t(l,C,n),t(l,m,n),t(l,h,n),b(Z,l,n),t(l,d,n),b(k,l,n),t(l,W,n),b(U,l,n),t(l,B,n),it[g].m(l,n),t(l,G,n),t(l,$,n),t(l,v,n),t(l,Dl,n),t(l,S,n),b(al,l,n),t(l,L,n),t(l,pl,n),t(l,gs,n),t(l,Y,n),t(l,Xl,n),t(l,V,n),t(l,Ql,n),t(l,X,n),t(l,Ml,n),b(el,l,n),t(l,El,n),t(l,Q,n),t(l,Hl,n),t(l,R,n),t(l,il,n),b(tl,l,n),t(l,Nl,n),t(l,E,n),t(l,zl,n),b(H,l,n),t(l,Fl,n),t(l,N,n),t(l,Sl,n),b(z,l,n),t(l,Gs,n),b(rl,l,n),t(l,q,n),t(l,ol,n),t(l,ul,n),t(l,Ul,n),t(l,Tl,n),b(dl,l,n),t(l,cl,n),b(nl,l,n),t(l,Ol,n),t(l,P,n),t(l,Ll,n),b(F,l,n),t(l,As,n),b(Jl,l,n),t(l,M,n),t(l,I,n),t(l,Kl,n),b(ls,l,n),t(l,ss,n),b(vs,l,n),t(l,Ss,n),t(l,fl,n),t(l,es,n),b(Vs,l,n),t(l,Ls,n),b(hl,l,n),t(l,de,n),t(l,ts,n),t(l,Ds,n),t(l,Cl,n),t(l,qs,n),t(l,Il,n),t(l,ns,n),b(Ys,l,n),t(l,Ps,n),b($l,l,n),t(l,Os,n),t(l,kl,n),t(l,Ks,n),b(xl,l,n),t(l,le,n),t(l,_l,n),t(l,se,n),t(l,jl,n),t(l,as,n),b(Xs,l,n),t(l,ee,n),b(Zl,l,n),t(l,te,n),t(l,ml,n),t(l,ne,n),t(l,gl,n),t(l,ae,n),b(Bl,l,n),t(l,pe,n),t(l,Wl,n),t(l,Me,n),t(l,Gl,n),t(l,ps,n),b(Ms,l,n),t(l,is,n),b(Qs,l,n),t(l,ie,n),t(l,Al,n),t(l,rs,n),b(Es,l,n),t(l,re,n),b(vl,l,n),t(l,ce,n),t(l,Vl,n),t(l,Je,n),t(l,Rl,n),t(l,cs,n),b(Hs,l,n),t(l,ye,n),b(Yl,l,n),t(l,ke,n),t(l,Js,n),t(l,xe,n),b(ys,l,n),t(l,Ts,n),t(l,js,n),t(l,_e,n),b(ms,l,n),t(l,ws,n),b(os,l,n),t(l,bs,n),t(l,Fs,n),t(l,us,n),t(l,Us,n),t(l,s,n),t(l,i,n),t(l,_t,n),b(Be,l,n),t(l,Zt,n),t(l,We,n),t(l,gt,n),t(l,Ge,n),t(l,Bt,n),b(Ae,l,n),t(l,Wt,n),t(l,ve,n),t(l,Gt,n),rt[ds].m(l,n),t(l,jt,n),b(Ve,l,n),t(l,At,n),t(l,Re,n),t(l,vt,n),t(l,Ye,n),t(l,Vt,n),ct[hs].m(l,n),t(l,mt,n),t(l,Xe,n),t(l,Rt,n),b(Qe,l,n),t(l,Yt,n),b(Ee,l,n),t(l,Xt,n),t(l,He,n),t(l,Qt,n),b(Ne,l,n),t(l,Et,n),b(ze,l,n),t(l,Ht,n),Jt[Is].m(l,n),t(l,wt,n),O&&O.m(l,n),t(l,ot,n),b(Fe,l,n),t(l,Nt,n),yt[ks].m(l,n),t(l,bt,n),b(Se,l,n),t(l,zt,n),t(l,Le,n),t(l,Ft,n),t(l,De,n),t(l,St,n),b(qe,l,n),t(l,Lt,n),b(Pe,l,n),t(l,Dt,n),t(l,Oe,n),t(l,qt,n),b(Ke,l,n),t(l,Pt,n),t(l,lt,n),t(l,Ot,n),b(st,l,n),t(l,Kt,n),Tt[_s].m(l,n),t(l,ut,n),K&&K.m(l,n),t(l,Ut,n),b(et,l,n),t(l,ln,n),t(l,tt,n),t(l,sn,n),b(nt,l,n),t(l,en,n),b(at,l,n),t(l,tn,n),t(l,pt,n),t(l,nn,n),b(Mt,l,n),t(l,an,n),t(l,xt,n),pn=!0},p(l,[n]){const Qn={};n&1&&(Qn.fw=l[0]),Z.$set(Qn);let Mn=g;g=Zn(l),g!==Mn&&(be(),j(it[Mn],1,1,()=>{it[Mn]=null}),oe(),x=it[g],x||(x=it[g]=_n[g](l),x.c()),T(x,1),x.m(G.parentNode,G));let rn=ds;ds=Bn(l),ds!==rn&&(be(),j(rt[rn],1,1,()=>{rt[rn]=null}),oe(),fs=rt[ds],fs||(fs=rt[ds]=gn[ds](l),fs.c()),T(fs,1),fs.m(jt.parentNode,jt));let cn=hs;hs=Gn(l),hs!==cn&&(be(),j(ct[cn],1,1,()=>{ct[cn]=null}),oe(),Cs=ct[hs],Cs||(Cs=ct[hs]=Wn[hs](l),Cs.c()),T(Cs,1),Cs.m(mt.parentNode,mt));let Jn=Is;Is=vn(l),Is!==Jn&&(be(),j(Jt[Jn],1,1,()=>{Jt[Jn]=null}),oe(),$s=Jt[Is],$s||($s=Jt[Is]=An[Is](l),$s.c()),T($s,1),$s.m(wt.parentNode,wt)),l[0]==="tf"?O?n&1&&T(O,1):(O=Nn(),O.c(),T(O,1),O.m(ot.parentNode,ot)):O&&(be(),j(O,1,1,()=>{O=null}),oe());let yn=ks;ks=Rn(l),ks!==yn&&(be(),j(yt[yn],1,1,()=>{yt[yn]=null}),oe(),xs=yt[ks],xs||(xs=yt[ks]=Vn[ks](l),xs.c()),T(xs,1),xs.m(bt.parentNode,bt));let Tn=_s;_s=Xn(l),_s!==Tn&&(be(),j(Tt[Tn],1,1,()=>{Tt[Tn]=null}),oe(),Zs=Tt[_s],Zs||(Zs=Tt[_s]=Yn[_s](l),Zs.c()),T(Zs,1),Zs.m(ut.parentNode,ut)),l[0]==="pt"?K?n&1&&T(K,1):(K=zn(),K.c(),T(K,1),K.m(Ut.parentNode,Ut)):K&&(be(),j(K,1,1,()=>{K=null}),oe())},i(l){pn||(T(Z.$$.fragment,l),T(k.$$.fragment,l),T(U.$$.fragment,l),T(x),T(al.$$.fragment,l),T(el.$$.fragment,l),T(tl.$$.fragment,l),T(H.$$.fragment,l),T(z.$$.fragment,l),T(rl.$$.fragment,l),T(dl.$$.fragment,l),T(nl.$$.fragment,l),T(F.$$.fragment,l),T(Jl.$$.fragment,l),T(ls.$$.fragment,l),T(vs.$$.fragment,l),T(Vs.$$.fragment,l),T(hl.$$.fragment,l),T(Ys.$$.fragment,l),T($l.$$.fragment,l),T(xl.$$.fragment,l),T(Xs.$$.fragment,l),T(Zl.$$.fragment,l),T(Bl.$$.fragment,l),T(Ms.$$.fragment,l),T(Qs.$$.fragment,l),T(Es.$$.fragment,l),T(vl.$$.fragment,l),T(Hs.$$.fragment,l),T(Yl.$$.fragment,l),T(ys.$$.fragment,l),T(ms.$$.fragment,l),T(os.$$.fragment,l),T(Be.$$.fragment,l),T(Ae.$$.fragment,l),T(fs),T(Ve.$$.fragment,l),T(Cs),T(Qe.$$.fragment,l),T(Ee.$$.fragment,l),T(Ne.$$.fragment,l),T(ze.$$.fragment,l),T($s),T(O),T(Fe.$$.fragment,l),T(xs),T(Se.$$.fragment,l),T(qe.$$.fragment,l),T(Pe.$$.fragment,l),T(Ke.$$.fragment,l),T(st.$$.fragment,l),T(Zs),T(K),T(et.$$.fragment,l),T(nt.$$.fragment,l),T(at.$$.fragment,l),T(Mt.$$.fragment,l),pn=!0)},o(l){j(Z.$$.fragment,l),j(k.$$.fragment,l),j(U.$$.fragment,l),j(x),j(al.$$.fragment,l),j(el.$$.fragment,l),j(tl.$$.fragment,l),j(H.$$.fragment,l),j(z.$$.fragment,l),j(rl.$$.fragment,l),j(dl.$$.fragment,l),j(nl.$$.fragment,l),j(F.$$.fragment,l),j(Jl.$$.fragment,l),j(ls.$$.fragment,l),j(vs.$$.fragment,l),j(Vs.$$.fragment,l),j(hl.$$.fragment,l),j(Ys.$$.fragment,l),j($l.$$.fragment,l),j(xl.$$.fragment,l),j(Xs.$$.fragment,l),j(Zl.$$.fragment,l),j(Bl.$$.fragment,l),j(Ms.$$.fragment,l),j(Qs.$$.fragment,l),j(Es.$$.fragment,l),j(vl.$$.fragment,l),j(Hs.$$.fragment,l),j(Yl.$$.fragment,l),j(ys.$$.fragment,l),j(ms.$$.fragment,l),j(os.$$.fragment,l),j(Be.$$.fragment,l),j(Ae.$$.fragment,l),j(fs),j(Ve.$$.fragment,l),j(Cs),j(Qe.$$.fragment,l),j(Ee.$$.fragment,l),j(Ne.$$.fragment,l),j(ze.$$.fragment,l),j($s),j(O),j(Fe.$$.fragment,l),j(xs),j(Se.$$.fragment,l),j(qe.$$.fragment,l),j(Pe.$$.fragment,l),j(Ke.$$.fragment,l),j(st.$$.fragment,l),j(Zs),j(K),j(et.$$.fragment,l),j(nt.$$.fragment,l),j(at.$$.fragment,l),j(Mt.$$.fragment,l),pn=!1},d(l){l&&(e(C),e(m),e(h),e(d),e(W),e(B),e(G),e($),e(v),e(Dl),e(S),e(L),e(pl),e(gs),e(Y),e(Xl),e(V),e(Ql),e(X),e(Ml),e(El),e(Q),e(Hl),e(R),e(il),e(Nl),e(E),e(zl),e(Fl),e(N),e(Sl),e(Gs),e(q),e(ol),e(ul),e(Ul),e(Tl),e(cl),e(Ol),e(P),e(Ll),e(As),e(M),e(I),e(Kl),e(ss),e(Ss),e(fl),e(es),e(Ls),e(de),e(ts),e(Ds),e(Cl),e(qs),e(Il),e(ns),e(Ps),e(Os),e(kl),e(Ks),e(le),e(_l),e(se),e(jl),e(as),e(ee),e(te),e(ml),e(ne),e(gl),e(ae),e(pe),e(Wl),e(Me),e(Gl),e(ps),e(is),e(ie),e(Al),e(rs),e(re),e(ce),e(Vl),e(Je),e(Rl),e(cs),e(ye),e(ke),e(Js),e(xe),e(Ts),e(js),e(_e),e(ws),e(bs),e(Fs),e(us),e(Us),e(s),e(i),e(_t),e(Zt),e(We),e(gt),e(Ge),e(Bt),e(Wt),e(ve),e(Gt),e(jt),e(At),e(Re),e(vt),e(Ye),e(Vt),e(mt),e(Xe),e(Rt),e(Yt),e(Xt),e(He),e(Qt),e(Et),e(Ht),e(wt),e(ot),e(Nt),e(bt),e(zt),e(Le),e(Ft),e(De),e(St),e(Lt),e(Dt),e(Oe),e(qt),e(Pt),e(lt),e(Ot),e(Kt),e(ut),e(Ut),e(ln),e(tt),e(sn),e(en),e(tn),e(pt),e(nn),e(an),e(xt)),e(r),u(Z,l),u(k,l),u(U,l),it[g].d(l),u(al,l),u(el,l),u(tl,l),u(H,l),u(z,l),u(rl,l),u(dl,l),u(nl,l),u(F,l),u(Jl,l),u(ls,l),u(vs,l),u(Vs,l),u(hl,l),u(Ys,l),u($l,l),u(xl,l),u(Xs,l),u(Zl,l),u(Bl,l),u(Ms,l),u(Qs,l),u(Es,l),u(vl,l),u(Hs,l),u(Yl,l),u(ys,l),u(ms,l),u(os,l),u(Be,l),u(Ae,l),rt[ds].d(l),u(Ve,l),ct[hs].d(l),u(Qe,l),u(Ee,l),u(Ne,l),u(ze,l),Jt[Is].d(l),O&&O.d(l),u(Fe,l),yt[ks].d(l),u(Se,l),u(qe,l),u(Pe,l),u(Ke,l),u(st,l),Tt[_s].d(l),K&&K.d(l),u(et,l),u(nt,l),u(at,l),u(Mt,l)}}}const wa='{"title":"トークン分類","local":"トークン分類","sections":[{"title":"データの準備","local":"データの準備","sections":[{"title":"The CoNLL-2003 dataset","local":"the-conll-2003-dataset","sections":[],"depth":3},{"title":"データの処理","local":"データの処理","sections":[],"depth":3}],"depth":2},{"title":"Trainer API でモデルを微調整する","local":"trainer-api-でモデルを微調整する","sections":[],"depth":2},{"title":"Keras を使ってモデルを微調整する","local":"keras-を使ってモデルを微調整する","sections":[{"title":"データ照合","local":"データ照合","sections":[],"depth":3},{"title":"モデルの定義","local":"モデルの定義","sections":[],"depth":3},{"title":"モデルの微調整","local":"モデルの微調整","sections":[],"depth":3},{"title":"指標","local":"指標","sections":[],"depth":3},{"title":"モデルを定義","local":"モデルを定義","sections":[],"depth":3},{"title":"モデルの微調整","local":"モデルの微調整","sections":[],"depth":3}],"depth":2},{"title":"カスタムトレーニングループ","local":"カスタムトレーニングループ","sections":[{"title":"トレーニングのための準備","local":"トレーニングのための準備","sections":[],"depth":3},{"title":"学習ループ","local":"学習ループ","sections":[],"depth":3}],"depth":2},{"title":"微調整したモデルを使う","local":"微調整したモデルを使う","sections":[],"depth":2}],"depth":1}';function oa(A,r,C){let m="pt";return Dn(()=>{const h=new URLSearchParams(window.location.search);C(0,m=h.get("fw")||"pt")}),[m]}class Ia extends qn{constructor(r){super(),Pn(this,r,oa,ma,Sn,{})}}export{Ia as component};

Xet Storage Details

Size:
145 kB
·
Xet hash:
f2e7cff2d76d8a2b8bed270176fb10e345e2b45c47b04b5f114867a132170541

Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.