import{s as Js,o as ws,n as Gt}from"../chunks/scheduler.36a0863c.js";import{S as Ts,i as gs,g as h,s as r,r as d,m as ia,H as cs,A as js,h as J,f as l,c as m,j as It,u as c,x as T,n as ra,B as Ms,k as qt,y as _,a as s,v as M,t as p,b as I,d as u,w as b,p as W}from"../chunks/index.156fee99.js";import{T as Wt}from"../chunks/Tip.8a648467.js";import{Y as bs}from"../chunks/Youtube.a5d6d567.js";import{C as w}from"../chunks/CodeBlock.4cf998e6.js";import{C as ys}from"../chunks/CourseFloatingBanner.16bb8bff.js";import{F as Us}from"../chunks/FrameworkSwitchCourse.d8719b67.js";import{H as Bt,E as fs}from"../chunks/getInferenceSnippets.472bc46d.js";function _s(y){let e,i;return e=new ys({props:{chapter:6,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_tf.ipynb"}]}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function Is(y){let e,i;return e=new ys({props:{chapter:6,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"Google Colab",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter6/section3b_pt.ipynb"}]}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function Ws(y){let e,i;return e=new bs({props:{id:"b3u8RzBCX9Y"}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function Bs(y){let e,i;return e=new bs({props:{id:"_wxyB3j3mk4"}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function Gs(y){let e,i;return e=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbEZvclF1ZXN0aW9uQW5zd2VyaW5nJTBBJTBBbW9kZWxfY2hlY2twb2ludCUyMCUzRCUyMCUyMmRpc3RpbGJlcnQtYmFzZS1jYXNlZC1kaXN0aWxsZWQtc3F1YWQlMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChtb2RlbF9jaGVja3BvaW50KSUwQW1vZGVsJTIwJTNEJTIwVEZBdXRvTW9kZWxGb3JRdWVzdGlvbkFuc3dlcmluZy5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2hlY2twb2ludCklMEElMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIocXVlc3Rpb24lMkMlMjBjb250ZXh0JTJDJTIwcmV0dXJuX3RlbnNvcnMlM0QlMjJ0ZiUyMiklMEFvdXRwdXRzJTIwJTNEJTIwbW9kZWwoKippbnB1dHMp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModelForQuestionAnswering

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

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

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

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

sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Mask semua kecuali token dari konteks</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Jangan mask token [CLS]</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
mask = tf.constant(mask)[<span class="hljs-literal">None</span>]

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

sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Mask semua kecuali token dari konteks</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Jangan mask token [CLS]</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
mask = torch.tensor(mask)[<span class="hljs-literal">None</span>]

start_logits[mask] = -<span class="hljs-number">10000</span>
end_logits[mask] = -<span class="hljs-number">10000</span>`,wrap:!1}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function Ns(y){let e,i;return e=new w({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRmLm1hdGguc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBheGlzJTNELTEpJTVCMCU1RC5udW1weSgpJTBBZW5kX3Byb2JhYmlsaXRpZXMlMjAlM0QlMjB0Zi5tYXRoLnNvZnRtYXgoZW5kX2xvZ2l0cyUyQyUyMGF4aXMlM0QtMSklNUIwJTVELm51bXB5KCk=",highlighted:`start_probabilities = tf.math.softmax(start_logits, axis=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>].numpy()
end_probabilities = tf.math.softmax(end_logits, axis=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>].numpy()`,wrap:!1}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function vs(y){let e,i;return e=new w({props:{code:"c3RhcnRfcHJvYmFiaWxpdGllcyUyMCUzRCUyMHRvcmNoLm5uLmZ1bmN0aW9uYWwuc29mdG1heChzdGFydF9sb2dpdHMlMkMlMjBkaW0lM0QtMSklNUIwJTVEJTBBZW5kX3Byb2JhYmlsaXRpZXMlMjAlM0QlMjB0b3JjaC5ubi5mdW5jdGlvbmFsLnNvZnRtYXgoZW5kX2xvZ2l0cyUyQyUyMGRpbSUzRC0xKSU1QjAlNUQ=",highlighted:`start_probabilities = torch.nn.functional.softmax(start_logits, dim=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>]
end_probabilities = torch.nn.functional.softmax(end_logits, dim=-<span class="hljs-number">1</span>)[<span class="hljs-number">0</span>]`,wrap:!1}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function xs(y){let e,i="Then we’ll mask the values where <code>start_index &gt; end_index</code> by setting them to <code>0</code> (the other probabilities are all positive numbers). The <code>np.triu()</code> function returns the upper triangular part of the 2D tensor passed as an argument, so it will do that masking for us:",n,o,k;return o=new w({props:{code:"aW1wb3J0JTIwbnVtcHklMjBhcyUyMG5wJTBBJTBBc2NvcmVzJTIwJTNEJTIwbnAudHJpdShzY29yZXMp",highlighted:`<span class="hljs-keyword">import</span> numpy <span class="hljs-keyword">as</span> np

scores = np.triu(scores)`,wrap:!1}}),{c(){e=h("p"),e.innerHTML=i,n=r(),d(o.$$.fragment)},l(g){e=J(g,"P",{"data-svelte-h":!0}),T(e)!=="svelte-sxoqrk"&&(e.innerHTML=i),n=m(g),c(o.$$.fragment,g)},m(g,j){s(g,e,j),s(g,n,j),M(o,g,j),k=!0},i(g){k||(u(o.$$.fragment,g),k=!0)},o(g){p(o.$$.fragment,g),k=!1},d(g){g&&(l(e),l(n)),b(o,g)}}}function Xs(y){let e,i="Kemudian kita akan melakukan masking terhadap nilai-nilai di mana <code>start_index &gt; end_index</code> dengan mengaturnya menjadi <code>0</code> (karena probabilitas lainnya semuanya bernilai positif). Fungsi <code>torch.triu()</code> akan mengembalikan bagian segitiga atas dari tensor 2D yang diberikan sebagai argumen, sehingga fungsi ini akan melakukan masking tersebut untuk kita:",n,o,k;return o=new w({props:{code:"c2NvcmVzJTIwJTNEJTIwdG9yY2gudHJpdShzY29yZXMp",highlighted:"scores = torch.triu(scores)",wrap:!1}}),{c(){e=h("p"),e.innerHTML=i,n=r(),d(o.$$.fragment)},l(g){e=J(g,"P",{"data-svelte-h":!0}),T(e)!=="svelte-nwgi0a"&&(e.innerHTML=i),n=m(g),c(o.$$.fragment,g)},m(g,j){s(g,e,j),s(g,n,j),M(o,g,j),k=!0},i(g){k||(u(o.$$.fragment,g),k=!0)},o(g){p(o.$$.fragment,g),k=!1},d(g){g&&(l(e),l(n)),b(o,g)}}}function Ys(y){let e,i="✏️ <strong>Coba sendiri!</strong> Hitung indeks <code>start</code> dan <code>end</code> untuk lima jawaban yang paling mungkin.";return{c(){e=h("p"),e.innerHTML=i},l(n){e=J(n,"P",{"data-svelte-h":!0}),T(e)!=="svelte-1gbpud1"&&(e.innerHTML=i)},m(n,o){s(n,e,o)},p:Gt,d(n){n&&l(e)}}}function Fs(y){let e,i="✏️ <strong>Coba sendiri!</strong> Gunakan skor terbaik yang sudah dihitung sebelumnya untuk menampilkan lima jawaban yang paling mungkin. Untuk membandingkan hasilnya, jalankan kembali pipeline pertama dan atur <code>top_k=5</code>.";return{c(){e=h("p"),e.innerHTML=i},l(n){e=J(n,"P",{"data-svelte-h":!0}),T(e)!=="svelte-ir4rno"&&(e.innerHTML=i)},m(n,o){s(n,e,o)},p:Gt,d(n){n&&l(e)}}}function zs(y){let e,i,n,o;return e=new w({props:{code:"XyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIpJTBBb2Zmc2V0cyUyMCUzRCUyMGlucHV0cy5wb3AoJTIyb2Zmc2V0X21hcHBpbmclMjIpJTBBJTBBaW5wdXRzJTIwJTNEJTIwaW5wdXRzLmNvbnZlcnRfdG9fdGVuc29ycyglMjJ0ZiUyMiklMEFwcmludChpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQuc2hhcGUp",highlighted:`_ = inputs.pop(<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>)
offsets = inputs.pop(<span class="hljs-string">&quot;offset_mapping&quot;</span>)

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

inputs = inputs.convert_to_tensors(<span class="hljs-string">&quot;pt&quot;</span>)
<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>].shape)`,wrap:!1}}),n=new w({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMzg0JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>])',wrap:!1}}),{c(){d(e.$$.fragment),i=r(),d(n.$$.fragment)},l(k){c(e.$$.fragment,k),i=m(k),c(n.$$.fragment,k)},m(k,g){M(e,k,g),s(k,i,g),M(n,k,g),o=!0},i(k){o||(u(e.$$.fragment,k),u(n.$$.fragment,k),o=!0)},o(k){p(e.$$.fragment,k),p(n.$$.fragment,k),o=!1},d(k){k&&l(i),b(e,k),b(n,k)}}}function Hs(y){let e,i;return e=new w({props:{code:"KDIlMkMlMjAzODQpJTIwKDIlMkMlMjAzODQp",highlighted:'(<span class="hljs-number">2</span>, <span class="hljs-number">384</span>) (<span class="hljs-number">2</span>, <span class="hljs-number">384</span>)',wrap:!1}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function Es(y){let e,i;return e=new w({props:{code:"dG9yY2guU2l6ZSglNUIyJTJDJTIwMzg0JTVEKSUyMHRvcmNoLlNpemUoJTVCMiUyQyUyMDM4NCU1RCk=",highlighted:'torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>]) torch.Size([<span class="hljs-number">2</span>, <span class="hljs-number">384</span>])',wrap:!1}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function Ss(y){let e,i;return e=new w({props:{code:"c2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcygpJTBBJTIzJTIwTWFza2luZyUyMHNlbXVhJTIwdG9rZW4lMjBrZWN1YWxpJTIwdG9rZW4lMjBkYXJpJTIwa29udGVrcyUwQW1hc2slMjAlM0QlMjAlNUJpJTIwISUzRCUyMDElMjBmb3IlMjBpJTIwaW4lMjBzZXF1ZW5jZV9pZHMlNUQlMEElMjMlMjBKYW5nYW4lMjBtYXNraW5nJTIwdG9rZW4lMjAlNUJDTFMlNUQlMEFtYXNrJTVCMCU1RCUyMCUzRCUyMEZhbHNlJTBBJTIzJTIwTWFza2luZyUyMHNlbXVhJTIwdG9rZW4lMjAlNUJQQUQlNUQlMEFtYXNrJTIwJTNEJTIwdGYubWF0aC5sb2dpY2FsX29yKHRmLmNvbnN0YW50KG1hc2spJTVCTm9uZSU1RCUyQyUyMGlucHV0cyU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTVEJTIwJTNEJTNEJTIwMCklMEElMEFzdGFydF9sb2dpdHMlMjAlM0QlMjB0Zi53aGVyZShtYXNrJTJDJTIwLTEwMDAwJTJDJTIwc3RhcnRfbG9naXRzKSUwQWVuZF9sb2dpdHMlMjAlM0QlMjB0Zi53aGVyZShtYXNrJTJDJTIwLTEwMDAwJTJDJTIwZW5kX2xvZ2l0cyk=",highlighted:`sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Masking semua token kecuali token dari konteks</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Jangan masking token [CLS]</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
<span class="hljs-comment"># Masking semua token [PAD]</span>
mask = tf.math.logical_or(tf.constant(mask)[<span class="hljs-literal">None</span>], inputs[<span class="hljs-string">&quot;attention_mask&quot;</span>] == <span class="hljs-number">0</span>)

start_logits = tf.where(mask, -<span class="hljs-number">10000</span>, start_logits)
end_logits = tf.where(mask, -<span class="hljs-number">10000</span>, end_logits)`,wrap:!1}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function As(y){let e,i;return e=new w({props:{code:"c2VxdWVuY2VfaWRzJTIwJTNEJTIwaW5wdXRzLnNlcXVlbmNlX2lkcygpJTBBJTIzJTIwTWFza2luZyUyMHNlbXVhJTIwdG9rZW4lMjBrZWN1YWxpJTIwdG9rZW4lMjBkYXJpJTIwa29udGVrcyUwQW1hc2slMjAlM0QlMjAlNUJpJTIwISUzRCUyMDElMjBmb3IlMjBpJTIwaW4lMjBzZXF1ZW5jZV9pZHMlNUQlMEElMjMlMjBKYW5nYW4lMjBtYXNraW5nJTIwdG9rZW4lMjAlNUJDTFMlNUQlMEFtYXNrJTVCMCU1RCUyMCUzRCUyMEZhbHNlJTBBJTIzJTIwTWFza2luZyUyMHNlbXVhJTIwdG9rZW4lMjAlNUJQQUQlNUQlMEFtYXNrJTIwJTNEJTIwdG9yY2gubG9naWNhbF9vcih0b3JjaC50ZW5zb3IobWFzayklNUJOb25lJTVEJTJDJTIwKGlucHV0cyU1QiUyMmF0dGVudGlvbl9tYXNrJTIyJTVEJTIwJTNEJTNEJTIwMCkpJTBBJTBBc3RhcnRfbG9naXRzJTVCbWFzayU1RCUyMCUzRCUyMC0xMDAwMCUwQWVuZF9sb2dpdHMlNUJtYXNrJTVEJTIwJTNEJTIwLTEwMDAw",highlighted:`sequence_ids = inputs.sequence_ids()
<span class="hljs-comment"># Masking semua token kecuali token dari konteks</span>
mask = [i != <span class="hljs-number">1</span> <span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> sequence_ids]
<span class="hljs-comment"># Jangan masking token [CLS]</span>
mask[<span class="hljs-number">0</span>] = <span class="hljs-literal">False</span>
<span class="hljs-comment"># Masking semua token [PAD]</span>
mask = torch.logical_or(torch.tensor(mask)[<span class="hljs-literal">None</span>], (inputs[<span class="hljs-string">&quot;attention_mask&quot;</span>] == <span class="hljs-number">0</span>))

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

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

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

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

<span class="hljs-built_in">print</span>(candidates)`,wrap:!1}}),{c(){d(e.$$.fragment)},l(n){c(e.$$.fragment,n)},m(n,o){M(e,n,o),i=!0},i(n){i||(u(e.$$.fragment,n),i=!0)},o(n){p(e.$$.fragment,n),i=!1},d(n){b(e,n)}}}function Ks(y){let e,i="✏️ <strong>Coba sendiri!</strong> Sesuaikan kode di atas untuk mengembalikan 5 kandidat jawaban paling mungkin dari seluruh konteks (bukan per bagian).";return{c(){e=h("p"),e.innerHTML=i},l(n){e=J(n,"P",{"data-svelte-h":!0}),T(e)!=="svelte-1t1ma6p"&&(e.innerHTML=i)},m(n,o){s(n,e,o)},p:Gt,d(n){n&&l(e)}}}function Os(y){let e,i="✏️ <strong>Coba sendiri!</strong> Gunakan skor terbaik yang sudah dihitung sebelumnya untuk menampilkan lima jawaban paling mungkin dari seluruh konteks. Untuk membandingkan hasil, gunakan pipeline dengan <code>top_k=5</code>.";return{c(){e=h("p"),e.innerHTML=i},l(n){e=J(n,"P",{"data-svelte-h":!0}),T(e)!=="svelte-i9fj86"&&(e.innerHTML=i)},m(n,o){s(n,e,o)},p:Gt,d(n){n&&l(e)}}}function ai(y){let e,i,n,o,k,g,j,ae,B,G,Nn,ma,Dt="Sekarang kita akan menyelami pipeline <code>question-answering</code> dan melihat bagaimana memanfaatkan offset untuk mengambil jawaban dari konteks, mirip seperti yang kita lakukan saat mengelompokkan entitas pada bagian sebelumnya. Setelah itu, kita juga akan melihat bagaimana menangani konteks yang sangat panjang hingga perlu dipotong. Anda bisa melewati bagian ini jika tidak tertarik dengan tugas question answering.",ne,Z,$,vn,pa,ee,ua,Pt='Seperti yang kita lihat di <a href="/course/chapter1">Bab 1</a>, kita bisa menggunakan pipeline <code>question-answering</code> seperti ini untuk mendapatkan jawaban atas sebuah pertanyaan:',te,oa,le,da,se,ca,Kt="Berbeda dengan pipeline lain yang tidak bisa menangani input lebih panjang dari batas maksimum model (sehingga bisa melewatkan informasi penting di akhir dokumen), pipeline ini dapat menangani konteks yang sangat panjang dan tetap mengembalikan jawaban walaupun berada di bagian paling akhir:",ie,Ma,re,ba,me,ya,Ot="Mari kita lihat bagaimana semua ini dilakukan!",pe,ka,ue,ha,al='Seperti pipeline lainnya, kita mulai dengan men-tokenisasi input dan mengirimkannya ke dalam model. Checkpoint default yang digunakan oleh pipeline <code>question-answering</code> adalah <a href="https://huggingface.co/distilbert-base-cased-distilled-squad" rel="nofollow"><code>distilbert-base-cased-distilled-squad</code></a> (nama “squad” berasal dari dataset tempat model ini di-<em>fine-tune</em>, yang akan dibahas lebih lanjut di <a href="/course/chapter7/7">Bab 7</a>).',oe,C,V,xn,Ja,nl="Perhatikan bahwa kita men-tokenisasi pertanyaan dan konteks sebagai sepasang input, dengan pertanyaan berada di awal.",de,na,el='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/question_tokens.svg" alt="Contoh tokenisasi pertanyaan dan konteks"/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter6/question_tokens-dark.svg" alt="Contoh tokenisasi pertanyaan dan konteks"/>',ce,wa,tl="Model untuk question answering bekerja sedikit berbeda dari model yang kita lihat sebelumnya. Model ini dilatih untuk memprediksi indeks token tempat jawaban <strong>dimulai</strong> (misalnya 21) dan tempat jawaban <strong>berakhir</strong> (misalnya 24). Oleh karena itu, model ini mengembalikan dua tensor logits: satu untuk posisi awal, satu untuk posisi akhir. Misalnya, jika input memiliki 66 token:",Me,Ta,be,R,N,Xn,ga,ll="Untuk mengubah logit menjadi probabilitas, kita akan menerapkan fungsi softmax — tetapi sebelum itu, kita perlu memastikan bahwa kita melakukan masking terhadap indeks-indeks yang bukan bagian dari konteks. Input kita berbentuk <code>[CLS] question [SEP] context [SEP]</code>, jadi kita perlu melakukan masking terhadap token-token dari pertanyaan serta token <code>[SEP]</code>. Namun, kita akan tetap menyertakan token <code>[CLS]</code>, karena beberapa model menggunakannya untuk menunjukkan bahwa jawaban tidak terdapat dalam konteks.",ye,ja,sl="Karena kita akan menerapkan softmax setelahnya, kita cukup mengganti nilai logits pada posisi yang ingin dimask dengan angka negatif yang sangat besar, misalnya <code>-10000</code>.",ke,v,x,Yn,Ua,il="Sekarang kita bisa menerapkan softmax:",he,X,Y,Fn,fa,rl="Pada tahap ini, kita sebenarnya bisa mengambil argmax dari probabilitas indeks awal dan akhir — tetapi kita mungkin saja mendapatkan indeks awal yang lebih besar dari indeks akhir, jadi kita perlu mengambil beberapa langkah tambahan. Kita akan menghitung probabilitas untuk setiap kemungkinan pasangan <code>start_index</code> dan <code>end_index</code> di mana <code>start_index &lt;= end_index</code>, lalu memilih pasangan <code>(start_index, end_index)</code> dengan probabilitas tertinggi.",Je,U,Zt,zn,ml="start_index",$t,Qn,pl="end_index",Ct,Hn,ul="start_index",Vt,En,ol="end_index",Rt,we,ks='<span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo><mo>×</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">\\mathrm{start\\_probabilities}[\\mathrm{start\\_index}] \\times \\mathrm{end\\_probabilities}[\\mathrm{end\\_index}]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">start_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">start_index</span></span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">end_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">end_index</span></span><span class="mclose">]</span></span></span></span></span>',Te,O,Nt,ge,hs='<span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">s</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo><mo>×</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">p</mi><mi mathvariant="normal">r</mi><mi mathvariant="normal">o</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">a</mi><mi mathvariant="normal">b</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">l</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">t</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">s</mi></mrow><mo stretchy="false">[</mo><mrow><mi mathvariant="normal">e</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">_</mi><mi mathvariant="normal">i</mi><mi mathvariant="normal">n</mi><mi mathvariant="normal">d</mi><mi mathvariant="normal">e</mi><mi mathvariant="normal">x</mi></mrow><mo stretchy="false">]</mo></mrow><annotation encoding="application/x-tex">\\mathrm{start\\_probabilities}[\\mathrm{start\\_index}] \\times \\mathrm{end\\_probabilities}[\\mathrm{end\\_index}]</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">start_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">start_index</span></span><span class="mclose">]</span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">×</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:1.06em;vertical-align:-0.31em;"></span><span class="mord"><span class="mord mathrm">end_probabilities</span></span><span class="mopen">[</span><span class="mord"><span class="mord mathrm">end_index</span></span><span class="mclose">]</span></span></span></span>',je,Sn,dl="start_index <= end_index",vt,Ue,_a,cl="Pertama, mari kita hitung semua kemungkinan hasil perkaliannya:",fe,Ia,_e,F,z,An,Wa,Ml="Sekarang kita hanya perlu mengambil indeks dengan nilai maksimum. Karena PyTorch akan mengembalikan indeks dalam bentuk tensor datar (flattened), kita perlu menggunakan operasi pembagian bulat <code>//</code> dan modulus <code>%</code> untuk mendapatkan <code>start_index</code> dan <code>end_index</code>:",Ie,Ba,We,Ga,bl="Kita belum benar-benar selesai, tetapi setidaknya kita sudah mendapatkan skor yang benar untuk jawabannya (Anda bisa memverifikasinya dengan membandingkannya dengan hasil pertama di bagian sebelumnya):",Be,Za,Ge,ea,Ze,$a,yl="Kita sudah memiliki <code>start_index</code> dan <code>end_index</code> jawaban dalam bentuk indeks token, sekarang kita hanya perlu mengubahnya ke indeks karakter dalam konteks. Di sinilah offset sangat berguna, seperti yang kita lakukan di tugas klasifikasi token:",$e,Ca,Ce,Va,kl="Sekarang kita hanya perlu menyusun hasilnya:",Ve,Ra,Re,Na,Ne,va,hl="Hebat! Ini adalah hasil yang sama dengan pipeline pertama kita!",ve,ta,xe,xa,Xe,Xa,Jl="Jika kita mencoba men-tokenisasi pertanyaan dan konteks panjang yang digunakan sebelumnya, hasilnya akan melebihi panjang maksimum yang digunakan dalam pipeline <code>question-answering</code> (yaitu 384 token):",Ye,Ya,Fe,Fa,ze,za,wl="Jadi, kita perlu memangkas input pada panjang maksimum tersebut. Ada beberapa cara untuk melakukannya, tetapi kita <strong>tidak ingin memotong pertanyaannya</strong>, hanya konteksnya. Karena konteks adalah kalimat kedua, kita bisa menggunakan strategi pemangkasan <code>&quot;only_second&quot;</code>. Masalahnya: jawaban dari pertanyaan mungkin tidak ada dalam konteks yang sudah dipotong. Sebagai contoh, pertanyaan kita memiliki jawaban di akhir konteks. Ketika konteks tersebut dipotong, jawaban tidak lagi ada di dalamnya:",Qe,Qa,He,Ha,Ee,Ea,Tl="Ini berarti model akan kesulitan dalam memilih jawaban yang benar. Untuk mengatasi hal ini, pipeline <code>question-answering</code> memungkinkan kita untuk membagi konteks menjadi potongan-potongan yang lebih kecil, dengan menentukan panjang maksimum. Agar kita tidak membagi konteks tepat di tempat yang salah yang membuat jawaban menjadi tidak dapat ditemukan, pipeline ini juga menyertakan sedikit tumpang tindih antar potongan.",Se,Sa,gl="Kita bisa meminta tokenizer (baik yang cepat maupun yang lambat) untuk melakukan ini dengan menambahkan <code>return_overflowing_tokens=True</code>, dan kita bisa menentukan jumlah tumpang tindih yang diinginkan dengan argumen <code>stride</code>. Berikut adalah contohnya, menggunakan kalimat yang lebih pendek:",Ae,Aa,Le,La,qe,qa,jl="Seperti yang bisa kita lihat, kalimat telah dibagi menjadi beberapa potongan sedemikian rupa sehingga setiap entri dalam <code>inputs[&quot;input_ids&quot;]</code> memiliki maksimal 6 token (kita perlu menambahkan padding agar entri terakhir memiliki ukuran yang sama dengan yang lainnya), dan terdapat tumpang tindih sebanyak 2 token antara setiap entri.",De,Da,Ul="Mari kita lihat lebih dalam hasil tokenisasi:",Pe,Pa,Ke,Ka,Oe,Oa,fl="Seperti yang diharapkan, kita mendapatkan <code>input_ids</code> dan <code>attention_mask</code>. Kunci terakhir, <code>overflow_to_sample_mapping</code>, adalah peta yang menunjukkan <strong>dari kalimat ke berapa</strong> setiap hasil berasal — dalam kasus ini, ketujuh hasil berasal dari satu kalimat:",at,an,nt,nn,et,en,_l="Ini akan menjadi lebih berguna ketika kita men-tokenisasi <strong>beberapa</strong> kalimat sekaligus. Misalnya, pada kasus berikut:",tt,tn,lt,ln,Il="Hasilnya:",st,sn,it,rn,Wl="Artinya, kalimat pertama dipecah menjadi 7 bagian seperti sebelumnya, dan 4 bagian selanjutnya berasal dari kalimat kedua.",rt,mn,Bl="Sekarang mari kita kembali ke konteks panjang kita. Secara default, pipeline <code>question-answering</code> menggunakan panjang maksimum 384 token dan <code>stride</code> sebesar 128 — sesuai dengan cara model di-<em>fine-tune</em>. (Parameter ini bisa disesuaikan lewat <code>max_seq_len</code> dan <code>stride</code> saat memanggil pipeline). Maka, kita akan menggunakan parameter tersebut saat melakukan tokenisasi. Kita juga akan menambahkan padding agar semua sampel memiliki panjang yang sama, dan meminta offset:",mt,pn,pt,un,Gl="<code>inputs</code> tersebut akan berisi input ID dan attention mask yang dibutuhkan oleh model, serta offset dan <code>overflow_to_sample_mapping</code> yang baru saja kita bahas. Karena dua elemen terakhir tersebut bukan parameter yang digunakan oleh model, kita akan menghapusnya dari <code>inputs</code> (dan kita tidak akan menyimpan mapping-nya, karena tidak berguna di sini) sebelum mengonversinya menjadi tensor:",ut,Q,H,Ln,on,Zl="Konteks panjang kita dipecah menjadi 2 bagian, artinya setelah melalui model, kita akan memiliki dua set <code>start_logits</code> dan <code>end_logits</code>:",ot,dn,dt,E,S,qn,cn,$l="Seperti sebelumnya, kita mask token yang bukan bagian dari konteks <strong>dan</strong> token padding sebelum menerapkan softmax:",ct,A,L,Dn,Mn,Cl="Kemudian kita ubah <code>logits</code> menjadi probabilitas:",Mt,q,D,Pn,bn,Vl="Langkah berikutnya mirip seperti pada konteks pendek, tapi diulang untuk setiap bagian. Kita hitung skor untuk semua pasangan <code>(start, end)</code> dan pilih span dengan skor terbaik:",bt,P,K,Kn,yn,yt,kn,Rl="Kedua kandidat tersebut merupakan jawaban terbaik yang berhasil ditemukan model di masing-masing potongan konteks. Model jauh lebih yakin bahwa jawaban yang benar ada di bagian kedua (dan itu pertanda baik!). Sekarang kita hanya perlu memetakan kedua rentang token tersebut ke rentang karakter dalam konteks (kita sebenarnya hanya perlu memetakan bagian kedua untuk mendapatkan jawabannya, tetapi menarik juga untuk melihat apa yang dipilih model pada potongan pertama).",kt,la,ht,hn,Nl="Objek <code>offsets</code> adalah daftar offset, satu untuk setiap bagian konteks:",Jt,Jn,wt,wn,Tt,Tn,vl="Jika kita abaikan hasil pertama, kita mendapatkan jawaban <strong>yang sama persis</strong> dengan pipeline untuk konteks panjang ini — keren!",gt,sa,jt,gn,xl="Dengan ini, kita selesai membahas secara mendalam kemampuan tokenizer. Semua yang telah Anda pelajari di bab ini akan kita praktikkan lagi di bab berikutnya, ketika kita menunjukkan cara <em>fine-tuning</em> model untuk berbagai tugas NLP umum.",Ut,jn,ft,On,_t;k=new Us({props:{fw:y[0]}}),j=new Bt({props:{title:"Kekuatan Tokenizer Cepat dalam Pipeline QA",local:"fast-tokenizers-in-the-qa-pipeline",headingTag:"h1"}});const Xl=[Is,_s],Un=[];function Yl(a,t){return a[0]==="pt"?0:1}B=Yl(y),G=Un[B]=Xl[B](y);const Fl=[Bs,Ws],fn=[];function zl(a,t){return a[0]==="pt"?0:1}Z=zl(y),$=fn[Z]=Fl[Z](y),pa=new Bt({props:{title:"Menggunakan Pipeline question-answering",local:"using-the-question-answering-pipeline",headingTag:"h2"}}),oa=new w({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMHBpcGVsaW5lJTBBJTBBcXVlc3Rpb25fYW5zd2VyZXIlMjAlM0QlMjBwaXBlbGluZSglMjJxdWVzdGlvbi1hbnN3ZXJpbmclMjIpJTBBY29udGV4dCUyMCUzRCUyMCUyMiUyMiUyMiUwQSVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUyMGlzJTIwYmFja2VkJTIwYnklMjB0aGUlMjB0aHJlZSUyMG1vc3QlMjBwb3B1bGFyJTIwZGVlcCUyMGxlYXJuaW5nJTIwbGlicmFyaWVzJTIwJUUyJTgwJTk0JTIwSmF4JTJDJTIwUHlUb3JjaCUyQyUyMGFuZCUyMFRlbnNvckZsb3clMjAlRTIlODAlOTQlMjB3aXRoJTIwYSUyMHNlYW1sZXNzJTIwaW50ZWdyYXRpb24lMEFiZXR3ZWVuJTIwdGhlbS4lMjBJdCdzJTIwc3RyYWlnaHRmb3J3YXJkJTIwdG8lMjB0cmFpbiUyMHlvdXIlMjBtb2RlbHMlMjB3aXRoJTIwb25lJTIwYmVmb3JlJTIwbG9hZGluZyUyMHRoZW0lMjBmb3IlMjBpbmZlcmVuY2UlMjB3aXRoJTIwdGhlJTIwb3RoZXIuJTBBJTIyJTIyJTIyJTBBcXVlc3Rpb24lMjAlM0QlMjAlMjJXaGljaCUyMGRlZXAlMjBsZWFybmluZyUyMGxpYnJhcmllcyUyMGJhY2slMjAlRjAlOUYlQTQlOTclMjBUcmFuc2Zvcm1lcnMlM0YlMjIlMEFxdWVzdGlvbl9hbnN3ZXJlcihxdWVzdGlvbiUzRHF1ZXN0aW9uJTJDJTIwY29udGV4dCUzRGNvbnRleHQp",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> pipeline

question_answerer = pipeline(<span class="hljs-string">&quot;question-answering&quot;</span>)
context = <span class="hljs-string">&quot;&quot;&quot;
🤗 Transformers is backed by the three most popular deep learning libraries — Jax, PyTorch, and TensorFlow — with a seamless integration
between them. It&#x27;s straightforward to train your models with one before loading them for inference with the other.
&quot;&quot;&quot;</span>
question = <span class="hljs-string">&quot;Which deep learning libraries back 🤗 Transformers?&quot;</span>
question_answerer(question=question, context=context)`,wrap:!1}}),da=new w({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTc3NzMlMkMlMEElMjAnc3RhcnQnJTNBJTIwNzglMkMlMEElMjAnZW5kJyUzQSUyMDEwNSUyQyUwQSUyMCdhbnN3ZXInJTNBJTIwJ0pheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JyU3RA==",highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97773</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">78</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">105</span>,
 <span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>}`,wrap:!1}}),Ma=new w({props:{code:" ",highlighted:`long_context = <span class="hljs-string">&quot;&quot;&quot; 
🤗 Transformers: NLP Mutakhir

🤗 Transformers menyediakan ribuan model pralatih untuk melakukan berbagai tugas pada teks seperti klasifikasi, ekstraksi informasi, 
penjawaban pertanyaan, peringkasan, terjemahan, pembuatan teks, dan lainnya dalam lebih dari 100 bahasa. 
Tujuannya adalah untuk mempermudah penggunaan NLP mutakhir bagi semua orang.

🤗 Transformers menyediakan API untuk dengan cepat mengunduh dan menggunakan model-model pralatih tersebut pada teks tertentu, 
menyesuaikannya (fine-tune) dengan dataset milik Anda sendiri, dan kemudian membagikannya dengan komunitas di model hub kami. 
Pada saat yang sama, setiap modul Python yang mendefinisikan sebuah arsitektur bersifat mandiri sepenuhnya dan dapat dimodifikasi 
untuk mendukung eksperimen penelitian dengan cepat.

Mengapa saya harus menggunakan Transformers?

1. Model mutakhir yang mudah digunakan:
  - Performa tinggi untuk tugas NLU dan NLG.
  - Hambatan masuk yang rendah bagi pendidik dan praktisi.
  - Abstraksi minimal dengan hanya tiga kelas yang perlu dipelajari.
  - API terpadu untuk menggunakan semua model pralatih kami.
  - Biaya komputasi lebih rendah, jejak karbon lebih kecil.

2. Peneliti dapat membagikan model yang telah dilatih alih-alih selalu melatih dari awal.
  - Praktisi dapat mengurangi waktu komputasi dan biaya produksi.
  - Puluhan arsitektur dengan lebih dari 10.000 model pralatih, beberapa dalam lebih dari 100 bahasa.

3. Pilih kerangka kerja yang tepat untuk setiap tahap siklus hidup model:
  - Latih model mutakhir hanya dengan 3 baris kode.
  - Pindahkan satu model antar kerangka kerja TF2.0/PyTorch secara fleksibel.
  - Pilih kerangka kerja yang sesuai untuk pelatihan, evaluasi, dan produksi dengan mudah.

4. Mudah menyesuaikan model atau contoh sesuai kebutuhan Anda:
  - Kami menyediakan contoh untuk setiap arsitektur guna mereproduksi hasil yang diterbitkan oleh penulis aslinya.
  - Internal model diekspos se-konsisten mungkin.
  - File model dapat digunakan secara independen dari pustaka untuk eksperimen cepat.

🤗 Transformers didukung oleh tiga pustaka pembelajaran mendalam paling populer — Jax, PyTorch, dan TensorFlow — 
dengan integrasi yang mulus di antara ketiganya. 
Sangat mudah untuk melatih model Anda dengan salah satunya, lalu memuatnya untuk inferensi dengan yang lain.
&quot;&quot;&quot;</span>
question_answerer(question=question, context=long_context)`,wrap:!1}}),ba=new w({props:{code:"JTdCJ3Njb3JlJyUzQSUyMDAuOTcxNDklMkMlMEElMjAnc3RhcnQnJTNBJTIwMTg5MiUyQyUwQSUyMCdlbmQnJTNBJTIwMTkxOSUyQyUwQSUyMCdhbnN3ZXInJTNBJTIwJ0pheCUyQyUyMFB5VG9yY2glMjBhbmQlMjBUZW5zb3JGbG93JyU3RA==",highlighted:`{<span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97149</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">1892</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">1919</span>,
 <span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>}`,wrap:!1}}),ka=new Bt({props:{title:"Menggunakan Model untuk Question Answering",local:"using-a-model-for-question-answering",headingTag:"h2"}});const Ql=[Zs,Gs],_n=[];function Hl(a,t){return a[0]==="pt"?0:1}C=Hl(y),V=_n[C]=Ql[C](y),Ta=new w({props:{code:"c3RhcnRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5zdGFydF9sb2dpdHMlMEFlbmRfbG9naXRzJTIwJTNEJTIwb3V0cHV0cy5lbmRfbG9naXRzJTBBcHJpbnQoc3RhcnRfbG9naXRzLnNoYXBlJTJDJTIwZW5kX2xvZ2l0cy5zaGFwZSk=",highlighted:`start_logits = outputs.start_logits
end_logits = outputs.end_logits
<span class="hljs-built_in">print</span>(start_logits.shape, end_logits.shape)`,wrap:!1}});const El=[Cs,$s],In=[];function Sl(a,t){return a[0]==="pt"?0:1}R=Sl(y),N=In[R]=El[R](y);const Al=[Rs,Vs],Wn=[];function Ll(a,t){return a[0]==="pt"?0:1}v=Ll(y),x=Wn[v]=Al[v](y);const ql=[vs,Ns],Bn=[];function Dl(a,t){return a[0]==="pt"?0:1}X=Dl(y),Y=Bn[X]=ql[X](y),Ia=new w({props:{code:"c2NvcmVzJTIwJTNEJTIwc3RhcnRfcHJvYmFiaWxpdGllcyU1QiUzQSUyQyUyME5vbmUlNUQlMjAqJTIwZW5kX3Byb2JhYmlsaXRpZXMlNUJOb25lJTJDJTIwJTNBJTVE",highlighted:'scores = start_probabilities[:, <span class="hljs-literal">None</span>] * end_probabilities[<span class="hljs-literal">None</span>, :]',wrap:!1}});const Pl=[Xs,xs],Gn=[];function Kl(a,t){return a[0]==="pt"?0:1}F=Kl(y),z=Gn[F]=Pl[F](y),Ba=new w({props:{code:"bWF4X2luZGV4JTIwJTNEJTIwc2NvcmVzLmFyZ21heCgpLml0ZW0oKSUwQXN0YXJ0X2luZGV4JTIwJTNEJTIwbWF4X2luZGV4JTIwJTJGJTJGJTIwc2NvcmVzLnNoYXBlJTVCMSU1RCUwQWVuZF9pbmRleCUyMCUzRCUyMG1heF9pbmRleCUyMCUyNSUyMHNjb3Jlcy5zaGFwZSU1QjElNUQlMEFwcmludChzY29yZXMlNUJzdGFydF9pbmRleCUyQyUyMGVuZF9pbmRleCU1RCk=",highlighted:`max_index = scores.argmax().item()
start_index = max_index // scores.shape[<span class="hljs-number">1</span>]
end_index = max_index % scores.shape[<span class="hljs-number">1</span>]
<span class="hljs-built_in">print</span>(scores[start_index, end_index])`,wrap:!1}}),Za=new w({props:{code:"MC45Nzc3Mw==",highlighted:'<span class="hljs-number">0.97773</span>',wrap:!1}}),ea=new Wt({props:{$$slots:{default:[Ys]},$$scope:{ctx:y}}}),Ca=new w({props:{code:"aW5wdXRzX3dpdGhfb2Zmc2V0cyUyMCUzRCUyMHRva2VuaXplcihxdWVzdGlvbiUyQyUyMGNvbnRleHQlMkMlMjByZXR1cm5fb2Zmc2V0c19tYXBwaW5nJTNEVHJ1ZSklMEFvZmZzZXRzJTIwJTNEJTIwaW5wdXRzX3dpdGhfb2Zmc2V0cyU1QiUyMm9mZnNldF9tYXBwaW5nJTIyJTVEJTBBJTBBc3RhcnRfY2hhciUyQyUyMF8lMjAlM0QlMjBvZmZzZXRzJTVCc3RhcnRfaW5kZXglNUQlMEFfJTJDJTIwZW5kX2NoYXIlMjAlM0QlMjBvZmZzZXRzJTVCZW5kX2luZGV4JTVEJTBBYW5zd2VyJTIwJTNEJTIwY29udGV4dCU1QnN0YXJ0X2NoYXIlM0FlbmRfY2hhciU1RA==",highlighted:`inputs_with_offsets = tokenizer(question, context, return_offsets_mapping=<span class="hljs-literal">True</span>)
offsets = inputs_with_offsets[<span class="hljs-string">&quot;offset_mapping&quot;</span>]

start_char, _ = offsets[start_index]
_, end_char = offsets[end_index]
answer = context[start_char:end_char]`,wrap:!1}}),Ra=new w({props:{code:"cmVzdWx0JTIwJTNEJTIwJTdCJTBBJTIwJTIwJTIwJTIwJTIyYW5zd2VyJTIyJTNBJTIwYW5zd2VyJTJDJTBBJTIwJTIwJTIwJTIwJTIyc3RhcnQlMjIlM0ElMjBzdGFydF9jaGFyJTJDJTBBJTIwJTIwJTIwJTIwJTIyZW5kJTIyJTNBJTIwZW5kX2NoYXIlMkMlMEElMjAlMjAlMjAlMjAlMjJzY29yZSUyMiUzQSUyMHNjb3JlcyU1QnN0YXJ0X2luZGV4JTJDJTIwZW5kX2luZGV4JTVEJTJDJTBBJTdEJTBBcHJpbnQocmVzdWx0KQ==",highlighted:`result = {
    <span class="hljs-string">&quot;answer&quot;</span>: answer,
    <span class="hljs-string">&quot;start&quot;</span>: start_char,
    <span class="hljs-string">&quot;end&quot;</span>: end_char,
    <span class="hljs-string">&quot;score&quot;</span>: scores[start_index, end_index],
}
<span class="hljs-built_in">print</span>(result)`,wrap:!1}}),Na=new w({props:{code:"JTdCJ2Fuc3dlciclM0ElMjAnSmF4JTJDJTIwUHlUb3JjaCUyMGFuZCUyMFRlbnNvckZsb3cnJTJDJTBBJTIwJ3N0YXJ0JyUzQSUyMDc4JTJDJTBBJTIwJ2VuZCclM0ElMjAxMDUlMkMlMEElMjAnc2NvcmUnJTNBJTIwMC45Nzc3MyU3RA==",highlighted:`{<span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>,
 <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">78</span>,
 <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">105</span>,
 <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97773</span>}`,wrap:!1}}),ta=new Wt({props:{$$slots:{default:[Fs]},$$scope:{ctx:y}}}),xa=new Bt({props:{title:"Menangani K konteks panjang",local:"handling-long-contexts",headingTag:"h2"}}),Ya=new w({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHF1ZXN0aW9uJTJDJTIwbG9uZ19jb250ZXh0KSUwQXByaW50KGxlbihpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQpKQ==",highlighted:`inputs = tokenizer(question, long_context)
<span class="hljs-built_in">print</span>(<span class="hljs-built_in">len</span>(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]))`,wrap:!1}}),Fa=new w({props:{code:"NDYx",highlighted:'<span class="hljs-number">461</span>',wrap:!1}}),Qa=new w({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKHF1ZXN0aW9uJTJDJTIwbG9uZ19jb250ZXh0JTJDJTIwbWF4X2xlbmd0aCUzRDM4NCUyQyUyMHRydW5jYXRpb24lM0QlMjJvbmx5X3NlY29uZCUyMiklMEFwcmludCh0b2tlbml6ZXIuZGVjb2RlKGlucHV0cyU1QiUyMmlucHV0X2lkcyUyMiU1RCkp",highlighted:`inputs = tokenizer(question, long_context, max_length=<span class="hljs-number">384</span>, truncation=<span class="hljs-string">&quot;only_second&quot;</span>)
<span class="hljs-built_in">print</span>(tokenizer.decode(inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]))`,wrap:!1}}),Ha=new w({props:{code:"JTIyJTIyJTIyJTBBJTVCQ0xTJTVEJTIwUHVzdGFrYSUyMGRlZXAlMjBsZWFybmluZyUyMGFwYSUyMHlhbmclMjBtZW5kdWt1bmclMjAlNUJVTkslNUQlMjBUcmFuc2Zvcm1lcnMlM0YlMjAlNUJTRVAlNUQlMjAlNUJVTkslNUQlMjBUcmFuc2Zvcm1lcnMlM0ElMjBOTFAlMjBNdXRha2hpciUwQSUwQSU1QlVOSyU1RCUyMFRyYW5zZm9ybWVycyUyMG1lbnllZGlha2FuJTIwcmlidWFuJTIwbW9kZWwlMjBwcmFsYXRpaCUyMHVudHVrJTIwbWVsYWt1a2FuJTIwdHVnYXMlMjBwYWRhJTIwdGVrcyUyMHNlcGVydGklMjBrbGFzaWZpa2FzaSUyQyUyMGVrc3RyYWtzaSUyMGluZm9ybWFzaSUyQyUwQXBlbmphd2FiYW4lMjBwZXJ0YW55YWFuJTJDJTIwcGVyaW5na2FzYW4lMkMlMjB0ZXJqZW1haGFuJTJDJTIwcGVtYnVhdGFuJTIwdGVrcyUyQyUyMGRhbiUyMGxhaW5ueWElMjBkYWxhbSUyMGxlYmloJTIwZGFyaSUyMDEwMCUyMGJhaGFzYS4lMEFUdWp1YW5ueWElMjBhZGFsYWglMjB1bnR1ayUyMG1lbXBlcm11ZGFoJTIwcGVuZ2d1bmFhbiUyME5MUCUyMG11dGFraGlyJTIwYmFnaSUyMHNlbXVhJTIwb3JhbmcuJTBBJTBBJTVCVU5LJTVEJTIwVHJhbnNmb3JtZXJzJTIwbWVueWVkaWFrYW4lMjBBUEklMjB1bnR1ayUyMGRlbmdhbiUyMGNlcGF0JTIwbWVuZ3VuZHVoJTIwZGFuJTIwbWVuZ2d1bmFrYW4lMjBtb2RlbC1tb2RlbCUyMHByYWxhdGloJTIwdGVyc2VidXQlMjBwYWRhJTIwdGVrcyUyMHRlcnRlbnR1JTJDJTIwJTBBbWVsYWt1a2FuJTIwZmluZS10dW5lJTIwZGVuZ2FuJTIwZGF0YXNldCUyMG1pbGlrJTIwQW5kYSUyMHNlbmRpcmklMkMlMjBkYW4lMjBrZW11ZGlhbiUyMG1lbWJhZ2lrYW5ueWElMjBkZW5nYW4lMjBrb211bml0YXMlMjBkaSUyMG1vZGVsJTIwaHViJTIwa2FtaS4lMjAlMEFQYWRhJTIwc2FhdCUyMHlhbmclMjBzYW1hJTJDJTIwc2V0aWFwJTIwbW9kdWwlMjBQeXRob24lMjB5YW5nJTIwbWVuZGVmaW5pc2lrYW4lMjBzZWJ1YWglMjBhcnNpdGVrdHVyJTIwYmVyc2lmYXQlMjBtYW5kaXJpJTIwc2VwZW51aG55YSUyMGRhbiUyMGRhcGF0JTIwZGltb2RpZmlrYXNpJTIwJTBBdW50dWslMjBtZW5kdWt1bmclMjBla3NwZXJpbWVuJTIwcGVuZWxpdGlhbiUyMHNlY2FyYSUyMGNlcGF0LiUwQSUwQU1lbmdhcGElMjBzYXlhJTIwaGFydXMlMjBtZW5nZ3VuYWthbiUyMFRyYW5zZm9ybWVycyUzRiUwQSUwQTEuJTIwTW9kZWwlMjBtdXRha2hpciUyMHlhbmclMjBtdWRhaCUyMGRpZ3VuYWthbiUzQSUwQSUyMCUyMC0lMjBQZXJmb3JtYSUyMHRpbmdnaSUyMHVudHVrJTIwdHVnYXMlMjBOTFUlMjBkYW4lMjBOTEcuJTBBJTIwJTIwLSUyMEhhbWJhdGFuJTIwbWFzdWslMjB5YW5nJTIwcmVuZGFoJTIwYmFnaSUyMHBlbmRpZGlrJTIwZGFuJTIwcHJha3Rpc2kuJTBBJTIwJTIwLSUyMEhhbnlhJTIwc2VkaWtpdCUyMGFic3RyYWtzaSUyMHlhbmclMjBwZXJsdSUyMGRpcGFoYW1pJTIwb2xlaCUyMHBlbmdndW5hJTJDJTIwY3VrdXAlMjBkZW5nYW4lMjBtZW1wZWxhamFyaSUyMHRpZ2ElMjBrZWxhcy4lMEElMjAlMjAtJTIwQVBJJTIwdGVycGFkdSUyMHVudHVrJTIwbWVuZ2d1bmFrYW4lMjBzZW11YSUyMG1vZGVsJTIwcHJhbGF0aWglMjBrYW1pLiUwQSUyMCUyMC0lMjBCaWF5YSUyMGtvbXB1dGFzaSUyMGxlYmloJTIwcmVuZGFoJTJDJTIwamVqYWslMjBrYXJib24lMjBsZWJpaCUyMGtlY2lsLiUwQSUwQTIuJTIwUGVuZWxpdGklMjBkYXBhdCUyMG1lbWJhZ2lrYW4lMjBtb2RlbCUyMHlhbmclMjB0ZWxhaCUyMGRpbGF0aWglMjBhbGloLWFsaWglMjBzZWxhbHUlMjBtZWxhdGloJTIwdWxhbmclMjBkYXJpJTIwYXdhbC4lMEElMjAlMjAtJTIwUHJha3Rpc2klMjBkYXBhdCUyMG1lbmd1cmFuZ2klMjB3YWt0dSUyMGtvbXB1dGFzaSUyMGRhbiUyMGJpYXlhJTIwcHJvZHVrc2kuJTBBJTIwJTIwLSUyMFB1bHVoYW4lMjBhcnNpdGVrdHVyJTIwZGVuZ2FuJTIwbGViaWglMjBkYXJpJTIwMTAuMDAwJTIwbW9kZWwlMjBwcmFsYXRpaCUyQyUyMGJlYmVyYXBhJTIwdGVyc2VkaWElMjBkYWxhbSUyMGxlYmloJTIwZGFyaSUyMDEwMCUyMGJhaGFzYS4lMEElMEEzLiUyMFBpbGloJTIwa2VyYW5na2ElMjBrZXJqYSUyMHlhbmclMjB0ZXBhdCUyMHVudHVrJTIwc2V0aWFwJTIwdGFoYXAlMjBzaWtsdXMlMjBoaWR1cCUyMG1vZGVsJTNBJTBBJTIwJTIwLSUyMExhdGloJTIwbW9kZWwlMjBtdXRha2hpciUyMGhhbnlhJTIwZGVuZ2FuJTIwMyUyMGJhcmlzJTIwa29kZS4lMEElMjAlMjAtJTIwUGluZGFoa2FuJTIwc2F0dSUyMG1vZGVsJTIwYW50YXIlMjBrZXJhbmdrYSUyMGtlcmphJTIwVEYyLjAlMkZQeVRvcmNoJTIwc2VjYXJhJTIwZmxla3NpYmVsLiUwQSUyMCUyMC0lMjBQaWxpaCUyMGtlcmFuZ2thJTIwa2VyamElMjB5YW5nJTIwc2VzdWFpJTIwdW50dWslMjBwZWxhdGloYW4lMkMlMjBldmFsdWFzaSUyQyUyMGRhbiUyMHByb2R1a3NpJTIwZGVuZ2FuJTIwbXVsdXMuJTBBJTBBNC4lMjBNdWRhaCUyMG1lbnllc3VhaWthbiUyMG1vZGVsJTIwYXRhdSUyMGNvbnRvaCUyMHNlc3VhaSUyMGtlYnV0dWhhbiUyMEFuZGElM0ElMEElMjAlMjAtJTIwS2FtaSUyMG1lbnllZGlha2FuJTIwY29udG9oJTIwdW50dWslMjBzZXRpYXAlMjBhcnNpdGVrdHVyJTIwZ3VuYSUyMG1lcmVwcm9kdWtzaSUyMGhhc2lsJTIweWFuZyUyMGRpdGVyYml0a2FuJTIwb2xlaCUyMHBlbnVsaXMlMjBhc2xpbnlhLiUwQSUyMCUyMC0lMjBJbnRlcm5hbCUyMG1vZGVsJTIwJTVCU0VQJTVEJTBBJTIyJTIyJTIy",highlighted:`<span class="hljs-string">&quot;&quot;&quot;
[CLS] Pustaka deep learning apa yang mendukung [UNK] Transformers? [SEP] [UNK] Transformers: NLP Mutakhir

[UNK] Transformers menyediakan ribuan model pralatih untuk melakukan tugas pada teks seperti klasifikasi, ekstraksi informasi,
penjawaban pertanyaan, peringkasan, terjemahan, pembuatan teks, dan lainnya dalam lebih dari 100 bahasa.
Tujuannya adalah untuk mempermudah penggunaan NLP mutakhir bagi semua orang.

[UNK] Transformers menyediakan API untuk dengan cepat mengunduh dan menggunakan model-model pralatih tersebut pada teks tertentu, 
melakukan fine-tune dengan dataset milik Anda sendiri, dan kemudian membagikannya dengan komunitas di model hub kami. 
Pada saat yang sama, setiap modul Python yang mendefinisikan sebuah arsitektur bersifat mandiri sepenuhnya dan dapat dimodifikasi 
untuk mendukung eksperimen penelitian secara cepat.

Mengapa saya harus menggunakan Transformers?

1. Model mutakhir yang mudah digunakan:
  - Performa tinggi untuk tugas NLU dan NLG.
  - Hambatan masuk yang rendah bagi pendidik dan praktisi.
  - Hanya sedikit abstraksi yang perlu dipahami oleh pengguna, cukup dengan mempelajari tiga kelas.
  - API terpadu untuk menggunakan semua model pralatih kami.
  - Biaya komputasi lebih rendah, jejak karbon lebih kecil.

2. Peneliti dapat membagikan model yang telah dilatih alih-alih selalu melatih ulang dari awal.
  - Praktisi dapat mengurangi waktu komputasi dan biaya produksi.
  - Puluhan arsitektur dengan lebih dari 10.000 model pralatih, beberapa tersedia dalam lebih dari 100 bahasa.

3. Pilih kerangka kerja yang tepat untuk setiap tahap siklus hidup model:
  - Latih model mutakhir hanya dengan 3 baris kode.
  - Pindahkan satu model antar kerangka kerja TF2.0/PyTorch secara fleksibel.
  - Pilih kerangka kerja yang sesuai untuk pelatihan, evaluasi, dan produksi dengan mulus.

4. Mudah menyesuaikan model atau contoh sesuai kebutuhan Anda:
  - Kami menyediakan contoh untuk setiap arsitektur guna mereproduksi hasil yang diterbitkan oleh penulis aslinya.
  - Internal model [SEP]
&quot;&quot;&quot;</span>`,wrap:!1}}),Aa=new w({props:{code:"c2VudGVuY2UlMjAlM0QlMjAlMjJUaGlzJTIwc2VudGVuY2UlMjBpcyUyMG5vdCUyMHRvbyUyMGxvbmclMjBidXQlMjB3ZSUyMGFyZSUyMGdvaW5nJTIwdG8lMjBzcGxpdCUyMGl0JTIwYW55d2F5LiUyMiUwQWlucHV0cyUyMCUzRCUyMHRva2VuaXplciglMEElMjAlMjAlMjAlMjBzZW50ZW5jZSUyQyUyMHRydW5jYXRpb24lM0RUcnVlJTJDJTIwcmV0dXJuX292ZXJmbG93aW5nX3Rva2VucyUzRFRydWUlMkMlMjBtYXhfbGVuZ3RoJTNENiUyQyUyMHN0cmlkZSUzRDIlMEEpJTBBJTBBZm9yJTIwaWRzJTIwaW4lMjBpbnB1dHMlNUIlMjJpbnB1dF9pZHMlMjIlNUQlM0ElMEElMjAlMjAlMjAlMjBwcmludCh0b2tlbml6ZXIuZGVjb2RlKGlkcykp",highlighted:`sentence = <span class="hljs-string">&quot;This sentence is not too long but we are going to split it anyway.&quot;</span>
inputs = tokenizer(
    sentence, truncation=<span class="hljs-literal">True</span>, return_overflowing_tokens=<span class="hljs-literal">True</span>, max_length=<span class="hljs-number">6</span>, stride=<span class="hljs-number">2</span>
)

<span class="hljs-keyword">for</span> ids <span class="hljs-keyword">in</span> inputs[<span class="hljs-string">&quot;input_ids&quot;</span>]:
    <span class="hljs-built_in">print</span>(tokenizer.decode(ids))`,wrap:!1}}),La=new w({props:{code:"JyU1QkNMUyU1RCUyMFRoaXMlMjBzZW50ZW5jZSUyMGlzJTIwbm90JTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjBpcyUyMG5vdCUyMHRvbyUyMGxvbmclMjAlNUJTRVAlNUQnJTBBJyU1QkNMUyU1RCUyMHRvbyUyMGxvbmclMjBidXQlMjB3ZSUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwYnV0JTIwd2UlMjBhcmUlMjBnb2luZyUyMCU1QlNFUCU1RCclMEEnJTVCQ0xTJTVEJTIwYXJlJTIwZ29pbmclMjB0byUyMHNwbGl0JTIwJTVCU0VQJTVEJyUwQSclNUJDTFMlNUQlMjB0byUyMHNwbGl0JTIwaXQlMjBhbnl3YXklMjAlNUJTRVAlNUQnJTBBJyU1QkNMUyU1RCUyMGl0JTIwYW55d2F5LiUyMCU1QlNFUCU1RCc=",highlighted:`<span class="hljs-string">&#x27;[CLS] This sentence is not [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] is not too long [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] too long but we [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] but we are going [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] are going to split [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] to split it anyway [SEP]&#x27;</span>
<span class="hljs-string">&#x27;[CLS] it anyway. [SEP]&#x27;</span>`,wrap:!1}}),Pa=new w({props:{code:"cHJpbnQoaW5wdXRzLmtleXMoKSk=",highlighted:'<span class="hljs-built_in">print</span>(inputs.keys())',wrap:!1}}),Ka=new w({props:{code:"ZGljdF9rZXlzKCU1QidpbnB1dF9pZHMnJTJDJTIwJ2F0dGVudGlvbl9tYXNrJyUyQyUyMCdvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyclNUQp",highlighted:'dict_keys([<span class="hljs-string">&#x27;input_ids&#x27;</span>, <span class="hljs-string">&#x27;attention_mask&#x27;</span>, <span class="hljs-string">&#x27;overflow_to_sample_mapping&#x27;</span>])',wrap:!1}}),an=new w({props:{code:"cHJpbnQoaW5wdXRzJTVCJTIyb3ZlcmZsb3dfdG9fc2FtcGxlX21hcHBpbmclMjIlNUQp",highlighted:'<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>])',wrap:!1}}),nn=new w({props:{code:"JTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCU1RA==",highlighted:'[<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>]',wrap:!1}}),tn=new w({props:{code:"c2VudGVuY2VzJTIwJTNEJTIwJTVCJTBBJTIwJTIwJTIwJTIwJTIyVGhpcyUyMHNlbnRlbmNlJTIwaXMlMjBub3QlMjB0b28lMjBsb25nJTIwYnV0JTIwd2UlMjBhcmUlMjBnb2luZyUyMHRvJTIwc3BsaXQlMjBpdCUyMGFueXdheS4lMjIlMkMlMEElMjAlMjAlMjAlMjAlMjJUaGlzJTIwc2VudGVuY2UlMjBpcyUyMHNob3J0ZXIlMjBidXQlMjB3aWxsJTIwc3RpbGwlMjBnZXQlMjBzcGxpdC4lMjIlMkMlMEElNUQlMEFpbnB1dHMlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwc2VudGVuY2VzJTJDJTIwdHJ1bmNhdGlvbiUzRFRydWUlMkMlMjByZXR1cm5fb3ZlcmZsb3dpbmdfdG9rZW5zJTNEVHJ1ZSUyQyUyMG1heF9sZW5ndGglM0Q2JTJDJTIwc3RyaWRlJTNEMiUwQSklMEElMEFwcmludChpbnB1dHMlNUIlMjJvdmVyZmxvd190b19zYW1wbGVfbWFwcGluZyUyMiU1RCk=",highlighted:`sentences = [
    <span class="hljs-string">&quot;This sentence is not too long but we are going to split it anyway.&quot;</span>,
    <span class="hljs-string">&quot;This sentence is shorter but will still get split.&quot;</span>,
]
inputs = tokenizer(
    sentences, truncation=<span class="hljs-literal">True</span>, return_overflowing_tokens=<span class="hljs-literal">True</span>, max_length=<span class="hljs-number">6</span>, stride=<span class="hljs-number">2</span>
)

<span class="hljs-built_in">print</span>(inputs[<span class="hljs-string">&quot;overflow_to_sample_mapping&quot;</span>])`,wrap:!1}}),sn=new w({props:{code:"JTVCMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDAlMkMlMjAwJTJDJTIwMCUyQyUyMDElMkMlMjAxJTJDJTIwMSUyQyUyMDElNUQ=",highlighted:'[<span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>, <span class="hljs-number">1</span>]',wrap:!1}}),pn=new w({props:{code:"aW5wdXRzJTIwJTNEJTIwdG9rZW5pemVyKCUwQSUyMCUyMCUyMCUyMHF1ZXN0aW9uJTJDJTBBJTIwJTIwJTIwJTIwbG9uZ19jb250ZXh0JTJDJTBBJTIwJTIwJTIwJTIwc3RyaWRlJTNEMTI4JTJDJTBBJTIwJTIwJTIwJTIwbWF4X2xlbmd0aCUzRDM4NCUyQyUwQSUyMCUyMCUyMCUyMHBhZGRpbmclM0QlMjJsb25nZXN0JTIyJTJDJTBBJTIwJTIwJTIwJTIwdHJ1bmNhdGlvbiUzRCUyMm9ubHlfc2Vjb25kJTIyJTJDJTBBJTIwJTIwJTIwJTIwcmV0dXJuX292ZXJmbG93aW5nX3Rva2VucyUzRFRydWUlMkMlMEElMjAlMjAlMjAlMjByZXR1cm5fb2Zmc2V0c19tYXBwaW5nJTNEVHJ1ZSUyQyUwQSk=",highlighted:`inputs = tokenizer(
    question,
    long_context,
    stride=<span class="hljs-number">128</span>,
    max_length=<span class="hljs-number">384</span>,
    padding=<span class="hljs-string">&quot;longest&quot;</span>,
    truncation=<span class="hljs-string">&quot;only_second&quot;</span>,
    return_overflowing_tokens=<span class="hljs-literal">True</span>,
    return_offsets_mapping=<span class="hljs-literal">True</span>,
)`,wrap:!1}});const Ol=[Qs,zs],Zn=[];function as(a,t){return a[0]==="pt"?0:1}Q=as(y),H=Zn[Q]=Ol[Q](y),dn=new w({props:{code:"b3V0cHV0cyUyMCUzRCUyMG1vZGVsKCoqaW5wdXRzKSUwQSUwQXN0YXJ0X2xvZ2l0cyUyMCUzRCUyMG91dHB1dHMuc3RhcnRfbG9naXRzJTBBZW5kX2xvZ2l0cyUyMCUzRCUyMG91dHB1dHMuZW5kX2xvZ2l0cyUwQXByaW50KHN0YXJ0X2xvZ2l0cy5zaGFwZSUyQyUyMGVuZF9sb2dpdHMuc2hhcGUp",highlighted:`outputs = model(**inputs)

start_logits = outputs.start_logits
end_logits = outputs.end_logits
<span class="hljs-built_in">print</span>(start_logits.shape, end_logits.shape)`,wrap:!1}});const ns=[Es,Hs],$n=[];function es(a,t){return a[0]==="pt"?0:1}E=es(y),S=$n[E]=ns[E](y);const ts=[As,Ss],Cn=[];function ls(a,t){return a[0]==="pt"?0:1}A=ls(y),L=Cn[A]=ts[A](y);const ss=[qs,Ls],Vn=[];function is(a,t){return a[0]==="pt"?0:1}q=is(y),D=Vn[q]=ss[q](y);const rs=[Ps,Ds],Rn=[];function ms(a,t){return a[0]==="pt"?0:1}return P=ms(y),K=Rn[P]=rs[P](y),yn=new w({props:{code:"JTVCKDAlMkMlMjAxOCUyQyUyMDAuMzM4NjcpJTJDJTIwKDE3MyUyQyUyMDE4NCUyQyUyMDAuOTcxNDkpJTVE",highlighted:'[(<span class="hljs-number">0</span>, <span class="hljs-number">18</span>, <span class="hljs-number">0.33867</span>), (<span class="hljs-number">173</span>, <span class="hljs-number">184</span>, <span class="hljs-number">0.97149</span>)]',wrap:!1}}),la=new Wt({props:{$$slots:{default:[Ks]},$$scope:{ctx:y}}}),Jn=new w({props:{code:"Zm9yJTIwY2FuZGlkYXRlJTJDJTIwb2Zmc2V0JTIwaW4lMjB6aXAoY2FuZGlkYXRlcyUyQyUyMG9mZnNldHMpJTNBJTBBJTIwJTIwJTIwJTIwc3RhcnRfdG9rZW4lMkMlMjBlbmRfdG9rZW4lMkMlMjBzY29yZSUyMCUzRCUyMGNhbmRpZGF0ZSUwQSUyMCUyMCUyMCUyMHN0YXJ0X2NoYXIlMkMlMjBfJTIwJTNEJTIwb2Zmc2V0JTVCc3RhcnRfdG9rZW4lNUQlMEElMjAlMjAlMjAlMjBfJTJDJTIwZW5kX2NoYXIlMjAlM0QlMjBvZmZzZXQlNUJlbmRfdG9rZW4lNUQlMEElMjAlMjAlMjAlMjBhbnN3ZXIlMjAlM0QlMjBsb25nX2NvbnRleHQlNUJzdGFydF9jaGFyJTNBZW5kX2NoYXIlNUQlMEElMjAlMjAlMjAlMjByZXN1bHQlMjAlM0QlMjAlN0IlMjJhbnN3ZXIlMjIlM0ElMjBhbnN3ZXIlMkMlMjAlMjJzdGFydCUyMiUzQSUyMHN0YXJ0X2NoYXIlMkMlMjAlMjJlbmQlMjIlM0ElMjBlbmRfY2hhciUyQyUyMCUyMnNjb3JlJTIyJTNBJTIwc2NvcmUlN0QlMEElMjAlMjAlMjAlMjBwcmludChyZXN1bHQp",highlighted:`<span class="hljs-keyword">for</span> candidate, offset <span class="hljs-keyword">in</span> <span class="hljs-built_in">zip</span>(candidates, offsets):
    start_token, end_token, score = candidate
    start_char, _ = offset[start_token]
    _, end_char = offset[end_token]
    answer = long_context[start_char:end_char]
    result = {<span class="hljs-string">&quot;answer&quot;</span>: answer, <span class="hljs-string">&quot;start&quot;</span>: start_char, <span class="hljs-string">&quot;end&quot;</span>: end_char, <span class="hljs-string">&quot;score&quot;</span>: score}
    <span class="hljs-built_in">print</span>(result)`,wrap:!1}}),wn=new w({props:{code:"JTdCJ2Fuc3dlciclM0ElMjAnJTVDbiVGMCU5RiVBNCU5NyUyMFRyYW5zZm9ybWVycyUzQSUyMFN0YXRlJTIwb2YlMjB0aGUlMjBBcnQlMjBOTFAnJTJDJTIwJ3N0YXJ0JyUzQSUyMDAlMkMlMjAnZW5kJyUzQSUyMDM3JTJDJTIwJ3Njb3JlJyUzQSUyMDAuMzM4NjclN0QlMEElN0InYW5zd2VyJyUzQSUyMCdKYXglMkMlMjBQeVRvcmNoJTIwYW5kJTIwVGVuc29yRmxvdyclMkMlMjAnc3RhcnQnJTNBJTIwMTg5MiUyQyUyMCdlbmQnJTNBJTIwMTkxOSUyQyUyMCdzY29yZSclM0ElMjAwLjk3MTQ5JTdE",highlighted:`{<span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;\\n🤗 Transformers: State of the Art NLP&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">0</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">37</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.33867</span>}
{<span class="hljs-string">&#x27;answer&#x27;</span>: <span class="hljs-string">&#x27;Jax, PyTorch and TensorFlow&#x27;</span>, <span class="hljs-string">&#x27;start&#x27;</span>: <span class="hljs-number">1892</span>, <span class="hljs-string">&#x27;end&#x27;</span>: <span class="hljs-number">1919</span>, <span class="hljs-string">&#x27;score&#x27;</span>: <span class="hljs-number">0.97149</span>}`,wrap:!1}}),sa=new Wt({props:{$$slots:{default:[Os]},$$scope:{ctx:y}}}),jn=new fs({props:{source:"https://github.com/huggingface/course/blob/main/chapters/id/chapter6/3b.mdx"}}),{c(){e=h("meta"),i=r(),n=h("p"),o=r(),d(k.$$.fragment),g=r(),d(j.$$.fragment),ae=r(),G.c(),Nn=r(),ma=h("p"),ma.innerHTML=Dt,ne=r(),$.c(),vn=r(),d(pa.$$.fragment),ee=r(),ua=h("p"),ua.innerHTML=Pt,te=r(),d(oa.$$.fragment),le=r(),d(da.$$.fragment),se=r(),ca=h("p"),ca.textContent=Kt,ie=r(),d(Ma.$$.fragment),re=r(),d(ba.$$.fragment),me=r(),ya=h("p"),ya.textContent=Ot,pe=r(),d(ka.$$.fragment),ue=r(),ha=h("p"),ha.innerHTML=al,oe=r(),V.c(),xn=r(),Ja=h("p"),Ja.textContent=nl,de=r(),na=h("div"),na.innerHTML=el,ce=r(),wa=h("p"),wa.innerHTML=tl,Me=r(),d(Ta.$$.fragment),be=r(),N.c(),Xn=r(),ga=h("p"),ga.innerHTML=ll,ye=r(),ja=h("p"),ja.innerHTML=sl,ke=r(),x.c(),Yn=r(),Ua=h("p"),Ua.textContent=il,he=r(),Y.c(),Fn=r(),fa=h("p"),fa.innerHTML=rl,Je=r(),U=h("p"),Zt=ia("Dengan mengasumsikan bahwa kejadian “Jawaban dimulai pada "),zn=h("code"),zn.textContent=ml,$t=ia("” dan “Jawaban berakhir pada "),Qn=h("code"),Qn.textContent=pl,Ct=ia("” bersifat independen, maka probabilitas bahwa jawaban dimulai pada "),Hn=h("code"),Hn.textContent=ul,Vt=ia(" dan berakhir pada "),En=h("code"),En.textContent=ol,Rt=ia(` adalah:
`),we=new cs(!1),Te=r(),O=h("p"),Nt=ia("Jadi, untuk menghitung semua skor, kita hanya perlu menghitung semua hasil perkalian"),ge=new cs(!1),je=ia(" di mana "),Sn=h("code"),Sn.textContent=dl,vt=ia("."),Ue=r(),_a=h("p"),_a.textContent=cl,fe=r(),d(Ia.$$.fragment),_e=r(),z.c(),An=r(),Wa=h("p"),Wa.innerHTML=Ml,Ie=r(),d(Ba.$$.fragment),We=r(),Ga=h("p"),Ga.textContent=bl,Be=r(),d(Za.$$.fragment),Ge=r(),d(ea.$$.fragment),Ze=r(),$a=h("p"),$a.innerHTML=yl,$e=r(),d(Ca.$$.fragment),Ce=r(),Va=h("p"),Va.textContent=kl,Ve=r(),d(Ra.$$.fragment),Re=r(),d(Na.$$.fragment),Ne=r(),va=h("p"),va.textContent=hl,ve=r(),d(ta.$$.fragment),xe=r(),d(xa.$$.fragment),Xe=r(),Xa=h("p"),Xa.innerHTML=Jl,Ye=r(),d(Ya.$$.fragment),Fe=r(),d(Fa.$$.fragment),ze=r(),za=h("p"),za.innerHTML=wl,Qe=r(),d(Qa.$$.fragment),He=r(),d(Ha.$$.fragment),Ee=r(),Ea=h("p"),Ea.innerHTML=Tl,Se=r(),Sa=h("p"),Sa.innerHTML=gl,Ae=r(),d(Aa.$$.fragment),Le=r(),d(La.$$.fragment),qe=r(),qa=h("p"),qa.innerHTML=jl,De=r(),Da=h("p"),Da.textContent=Ul,Pe=r(),d(Pa.$$.fragment),Ke=r(),d(Ka.$$.fragment),Oe=r(),Oa=h("p"),Oa.innerHTML=fl,at=r(),d(an.$$.fragment),nt=r(),d(nn.$$.fragment),et=r(),en=h("p"),en.innerHTML=_l,tt=r(),d(tn.$$.fragment),lt=r(),ln=h("p"),ln.textContent=Il,st=r(),d(sn.$$.fragment),it=r(),rn=h("p"),rn.textContent=Wl,rt=r(),mn=h("p"),mn.innerHTML=Bl,mt=r(),d(pn.$$.fragment),pt=r(),un=h("p"),un.innerHTML=Gl,ut=r(),H.c(),Ln=r(),on=h("p"),on.innerHTML=Zl,ot=r(),d(dn.$$.fragment),dt=r(),S.c(),qn=r(),cn=h("p"),cn.innerHTML=$l,ct=r(),L.c(),Dn=r(),Mn=h("p"),Mn.innerHTML=Cl,Mt=r(),D.c(),Pn=r(),bn=h("p"),bn.innerHTML=Vl,bt=r(),K.c(),Kn=r(),d(yn.$$.fragment),yt=r(),kn=h("p"),kn.textContent=Rl,kt=r(),d(la.$$.fragment),ht=r(),hn=h("p"),hn.innerHTML=Nl,Jt=r(),d(Jn.$$.fragment),wt=r(),d(wn.$$.fragment),Tt=r(),Tn=h("p"),Tn.innerHTML=vl,gt=r(),d(sa.$$.fragment),jt=r(),gn=h("p"),gn.innerHTML=xl,Ut=r(),d(jn.$$.fragment),ft=r(),On=h("p"),this.h()},l(a){const t=js("svelte-u9bgzb",document.head);e=J(t,"META",{name:!0,content:!0}),t.forEach(l),i=m(a),n=J(a,"P",{}),It(n).forEach(l),o=m(a),c(k.$$.fragment,a),g=m(a),c(j.$$.fragment,a),ae=m(a),G.l(a),Nn=m(a),ma=J(a,"P",{"data-svelte-h":!0}),T(ma)!=="svelte-4qzft9"&&(ma.innerHTML=Dt),ne=m(a),$.l(a),vn=m(a),c(pa.$$.fragment,a),ee=m(a),ua=J(a,"P",{"data-svelte-h":!0}),T(ua)!=="svelte-hs03y8"&&(ua.innerHTML=Pt),te=m(a),c(oa.$$.fragment,a),le=m(a),c(da.$$.fragment,a),se=m(a),ca=J(a,"P",{"data-svelte-h":!0}),T(ca)!=="svelte-edwfk3"&&(ca.textContent=Kt),ie=m(a),c(Ma.$$.fragment,a),re=m(a),c(ba.$$.fragment,a),me=m(a),ya=J(a,"P",{"data-svelte-h":!0}),T(ya)!=="svelte-11zspq1"&&(ya.textContent=Ot),pe=m(a),c(ka.$$.fragment,a),ue=m(a),ha=J(a,"P",{"data-svelte-h":!0}),T(ha)!=="svelte-o3vnmv"&&(ha.innerHTML=al),oe=m(a),V.l(a),xn=m(a),Ja=J(a,"P",{"data-svelte-h":!0}),T(Ja)!=="svelte-j1pbka"&&(Ja.textContent=nl),de=m(a),na=J(a,"DIV",{class:!0,"data-svelte-h":!0}),T(na)!=="svelte-1yreny3"&&(na.innerHTML=el),ce=m(a),wa=J(a,"P",{"data-svelte-h":!0}),T(wa)!=="svelte-1kn4s91"&&(wa.innerHTML=tl),Me=m(a),c(Ta.$$.fragment,a),be=m(a),N.l(a),Xn=m(a),ga=J(a,"P",{"data-svelte-h":!0}),T(ga)!=="svelte-1kcpgfp"&&(ga.innerHTML=ll),ye=m(a),ja=J(a,"P",{"data-svelte-h":!0}),T(ja)!=="svelte-rmytrs"&&(ja.innerHTML=sl),ke=m(a),x.l(a),Yn=m(a),Ua=J(a,"P",{"data-svelte-h":!0}),T(Ua)!=="svelte-10hew5m"&&(Ua.textContent=il),he=m(a),Y.l(a),Fn=m(a),fa=J(a,"P",{"data-svelte-h":!0}),T(fa)!=="svelte-l95znd"&&(fa.innerHTML=rl),Je=m(a),U=J(a,"P",{});var f=It(U);Zt=ra(f,"Dengan mengasumsikan bahwa kejadian “Jawaban dimulai pada "),zn=J(f,"CODE",{"data-svelte-h":!0}),T(zn)!=="svelte-8eqb3b"&&(zn.textContent=ml),$t=ra(f,"” dan “Jawaban berakhir pada "),Qn=J(f,"CODE",{"data-svelte-h":!0}),T(Qn)!=="svelte-9cistc"&&(Qn.textContent=pl),Ct=ra(f,"” bersifat independen, maka probabilitas bahwa jawaban dimulai pada "),Hn=J(f,"CODE",{"data-svelte-h":!0}),T(Hn)!=="svelte-8eqb3b"&&(Hn.textContent=ul),Vt=ra(f," dan berakhir pada "),En=J(f,"CODE",{"data-svelte-h":!0}),T(En)!=="svelte-9cistc"&&(En.textContent=ol),Rt=ra(f,` adalah:
`),we=Ms(f,!1),f.forEach(l),Te=m(a),O=J(a,"P",{});var aa=It(O);Nt=ra(aa,"Jadi, untuk menghitung semua skor, kita hanya perlu menghitung semua hasil perkalian"),ge=Ms(aa,!1),je=ra(aa," di mana "),Sn=J(aa,"CODE",{"data-svelte-h":!0}),T(Sn)!=="svelte-1kp3szf"&&(Sn.textContent=dl),vt=ra(aa,"."),aa.forEach(l),Ue=m(a),_a=J(a,"P",{"data-svelte-h":!0}),T(_a)!=="svelte-uiusxo"&&(_a.textContent=cl),fe=m(a),c(Ia.$$.fragment,a),_e=m(a),z.l(a),An=m(a),Wa=J(a,"P",{"data-svelte-h":!0}),T(Wa)!=="svelte-1wqe9w6"&&(Wa.innerHTML=Ml),Ie=m(a),c(Ba.$$.fragment,a),We=m(a),Ga=J(a,"P",{"data-svelte-h":!0}),T(Ga)!=="svelte-1ypind9"&&(Ga.textContent=bl),Be=m(a),c(Za.$$.fragment,a),Ge=m(a),c(ea.$$.fragment,a),Ze=m(a),$a=J(a,"P",{"data-svelte-h":!0}),T($a)!=="svelte-5pdidw"&&($a.innerHTML=yl),$e=m(a),c(Ca.$$.fragment,a),Ce=m(a),Va=J(a,"P",{"data-svelte-h":!0}),T(Va)!=="svelte-12fagux"&&(Va.textContent=kl),Ve=m(a),c(Ra.$$.fragment,a),Re=m(a),c(Na.$$.fragment,a),Ne=m(a),va=J(a,"P",{"data-svelte-h":!0}),T(va)!=="svelte-1itbqkn"&&(va.textContent=hl),ve=m(a),c(ta.$$.fragment,a),xe=m(a),c(xa.$$.fragment,a),Xe=m(a),Xa=J(a,"P",{"data-svelte-h":!0}),T(Xa)!=="svelte-1w26qvr"&&(Xa.innerHTML=Jl),Ye=m(a),c(Ya.$$.fragment,a),Fe=m(a),c(Fa.$$.fragment,a),ze=m(a),za=J(a,"P",{"data-svelte-h":!0}),T(za)!=="svelte-mcrvc6"&&(za.innerHTML=wl),Qe=m(a),c(Qa.$$.fragment,a),He=m(a),c(Ha.$$.fragment,a),Ee=m(a),Ea=J(a,"P",{"data-svelte-h":!0}),T(Ea)!=="svelte-1ii7jzd"&&(Ea.innerHTML=Tl),Se=m(a),Sa=J(a,"P",{"data-svelte-h":!0}),T(Sa)!=="svelte-1neuab4"&&(Sa.innerHTML=gl),Ae=m(a),c(Aa.$$.fragment,a),Le=m(a),c(La.$$.fragment,a),qe=m(a),qa=J(a,"P",{"data-svelte-h":!0}),T(qa)!=="svelte-1m0ceio"&&(qa.innerHTML=jl),De=m(a),Da=J(a,"P",{"data-svelte-h":!0}),T(Da)!=="svelte-o7p2w4"&&(Da.textContent=Ul),Pe=m(a),c(Pa.$$.fragment,a),Ke=m(a),c(Ka.$$.fragment,a),Oe=m(a),Oa=J(a,"P",{"data-svelte-h":!0}),T(Oa)!=="svelte-x0z14p"&&(Oa.innerHTML=fl),at=m(a),c(an.$$.fragment,a),nt=m(a),c(nn.$$.fragment,a),et=m(a),en=J(a,"P",{"data-svelte-h":!0}),T(en)!=="svelte-1yyfivp"&&(en.innerHTML=_l),tt=m(a),c(tn.$$.fragment,a),lt=m(a),ln=J(a,"P",{"data-svelte-h":!0}),T(ln)!=="svelte-14e9nln"&&(ln.textContent=Il),st=m(a),c(sn.$$.fragment,a),it=m(a),rn=J(a,"P",{"data-svelte-h":!0}),T(rn)!=="svelte-1xyapaz"&&(rn.textContent=Wl),rt=m(a),mn=J(a,"P",{"data-svelte-h":!0}),T(mn)!=="svelte-1jygnt8"&&(mn.innerHTML=Bl),mt=m(a),c(pn.$$.fragment,a),pt=m(a),un=J(a,"P",{"data-svelte-h":!0}),T(un)!=="svelte-53ayzi"&&(un.innerHTML=Gl),ut=m(a),H.l(a),Ln=m(a),on=J(a,"P",{"data-svelte-h":!0}),T(on)!=="svelte-1k0m302"&&(on.innerHTML=Zl),ot=m(a),c(dn.$$.fragment,a),dt=m(a),S.l(a),qn=m(a),cn=J(a,"P",{"data-svelte-h":!0}),T(cn)!=="svelte-4naiad"&&(cn.innerHTML=$l),ct=m(a),L.l(a),Dn=m(a),Mn=J(a,"P",{"data-svelte-h":!0}),T(Mn)!=="svelte-16f01h4"&&(Mn.innerHTML=Cl),Mt=m(a),D.l(a),Pn=m(a),bn=J(a,"P",{"data-svelte-h":!0}),T(bn)!=="svelte-1szx8la"&&(bn.innerHTML=Vl),bt=m(a),K.l(a),Kn=m(a),c(yn.$$.fragment,a),yt=m(a),kn=J(a,"P",{"data-svelte-h":!0}),T(kn)!=="svelte-1dmec0r"&&(kn.textContent=Rl),kt=m(a),c(la.$$.fragment,a),ht=m(a),hn=J(a,"P",{"data-svelte-h":!0}),T(hn)!=="svelte-eyu7tl"&&(hn.innerHTML=Nl),Jt=m(a),c(Jn.$$.fragment,a),wt=m(a),c(wn.$$.fragment,a),Tt=m(a),Tn=J(a,"P",{"data-svelte-h":!0}),T(Tn)!=="svelte-9vgo2h"&&(Tn.innerHTML=vl),gt=m(a),c(sa.$$.fragment,a),jt=m(a),gn=J(a,"P",{"data-svelte-h":!0}),T(gn)!=="svelte-sdmiqb"&&(gn.innerHTML=xl),Ut=m(a),c(jn.$$.fragment,a),ft=m(a),On=J(a,"P",{}),It(On).forEach(l),this.h()},h(){qt(e,"name","hf:doc:metadata"),qt(e,"content",ni),qt(na,"class","flex justify-center"),we.a=null,ge.a=je},m(a,t){_(document.head,e),s(a,i,t),s(a,n,t),s(a,o,t),M(k,a,t),s(a,g,t),M(j,a,t),s(a,ae,t),Un[B].m(a,t),s(a,Nn,t),s(a,ma,t),s(a,ne,t),fn[Z].m(a,t),s(a,vn,t),M(pa,a,t),s(a,ee,t),s(a,ua,t),s(a,te,t),M(oa,a,t),s(a,le,t),M(da,a,t),s(a,se,t),s(a,ca,t),s(a,ie,t),M(Ma,a,t),s(a,re,t),M(ba,a,t),s(a,me,t),s(a,ya,t),s(a,pe,t),M(ka,a,t),s(a,ue,t),s(a,ha,t),s(a,oe,t),_n[C].m(a,t),s(a,xn,t),s(a,Ja,t),s(a,de,t),s(a,na,t),s(a,ce,t),s(a,wa,t),s(a,Me,t),M(Ta,a,t),s(a,be,t),In[R].m(a,t),s(a,Xn,t),s(a,ga,t),s(a,ye,t),s(a,ja,t),s(a,ke,t),Wn[v].m(a,t),s(a,Yn,t),s(a,Ua,t),s(a,he,t),Bn[X].m(a,t),s(a,Fn,t),s(a,fa,t),s(a,Je,t),s(a,U,t),_(U,Zt),_(U,zn),_(U,$t),_(U,Qn),_(U,Ct),_(U,Hn),_(U,Vt),_(U,En),_(U,Rt),we.m(ks,U),s(a,Te,t),s(a,O,t),_(O,Nt),ge.m(hs,O),_(O,je),_(O,Sn),_(O,vt),s(a,Ue,t),s(a,_a,t),s(a,fe,t),M(Ia,a,t),s(a,_e,t),Gn[F].m(a,t),s(a,An,t),s(a,Wa,t),s(a,Ie,t),M(Ba,a,t),s(a,We,t),s(a,Ga,t),s(a,Be,t),M(Za,a,t),s(a,Ge,t),M(ea,a,t),s(a,Ze,t),s(a,$a,t),s(a,$e,t),M(Ca,a,t),s(a,Ce,t),s(a,Va,t),s(a,Ve,t),M(Ra,a,t),s(a,Re,t),M(Na,a,t),s(a,Ne,t),s(a,va,t),s(a,ve,t),M(ta,a,t),s(a,xe,t),M(xa,a,t),s(a,Xe,t),s(a,Xa,t),s(a,Ye,t),M(Ya,a,t),s(a,Fe,t),M(Fa,a,t),s(a,ze,t),s(a,za,t),s(a,Qe,t),M(Qa,a,t),s(a,He,t),M(Ha,a,t),s(a,Ee,t),s(a,Ea,t),s(a,Se,t),s(a,Sa,t),s(a,Ae,t),M(Aa,a,t),s(a,Le,t),M(La,a,t),s(a,qe,t),s(a,qa,t),s(a,De,t),s(a,Da,t),s(a,Pe,t),M(Pa,a,t),s(a,Ke,t),M(Ka,a,t),s(a,Oe,t),s(a,Oa,t),s(a,at,t),M(an,a,t),s(a,nt,t),M(nn,a,t),s(a,et,t),s(a,en,t),s(a,tt,t),M(tn,a,t),s(a,lt,t),s(a,ln,t),s(a,st,t),M(sn,a,t),s(a,it,t),s(a,rn,t),s(a,rt,t),s(a,mn,t),s(a,mt,t),M(pn,a,t),s(a,pt,t),s(a,un,t),s(a,ut,t),Zn[Q].m(a,t),s(a,Ln,t),s(a,on,t),s(a,ot,t),M(dn,a,t),s(a,dt,t),$n[E].m(a,t),s(a,qn,t),s(a,cn,t),s(a,ct,t),Cn[A].m(a,t),s(a,Dn,t),s(a,Mn,t),s(a,Mt,t),Vn[q].m(a,t),s(a,Pn,t),s(a,bn,t),s(a,bt,t),Rn[P].m(a,t),s(a,Kn,t),M(yn,a,t),s(a,yt,t),s(a,kn,t),s(a,kt,t),M(la,a,t),s(a,ht,t),s(a,hn,t),s(a,Jt,t),M(Jn,a,t),s(a,wt,t),M(wn,a,t),s(a,Tt,t),s(a,Tn,t),s(a,gt,t),M(sa,a,t),s(a,jt,t),s(a,gn,t),s(a,Ut,t),M(jn,a,t),s(a,ft,t),s(a,On,t),_t=!0},p(a,[t]){const f={};t&1&&(f.fw=a[0]),k.$set(f);let aa=B;B=Yl(a),B!==aa&&(W(),p(Un[aa],1,1,()=>{Un[aa]=null}),I(),G=Un[B],G||(G=Un[B]=Xl[B](a),G.c()),u(G,1),G.m(Nn.parentNode,Nn));let xt=Z;Z=zl(a),Z!==xt&&(W(),p(fn[xt],1,1,()=>{fn[xt]=null}),I(),$=fn[Z],$||($=fn[Z]=Fl[Z](a),$.c()),u($,1),$.m(vn.parentNode,vn));let Xt=C;C=Hl(a),C!==Xt&&(W(),p(_n[Xt],1,1,()=>{_n[Xt]=null}),I(),V=_n[C],V||(V=_n[C]=Ql[C](a),V.c()),u(V,1),V.m(xn.parentNode,xn));let Yt=R;R=Sl(a),R!==Yt&&(W(),p(In[Yt],1,1,()=>{In[Yt]=null}),I(),N=In[R],N||(N=In[R]=El[R](a),N.c()),u(N,1),N.m(Xn.parentNode,Xn));let Ft=v;v=Ll(a),v!==Ft&&(W(),p(Wn[Ft],1,1,()=>{Wn[Ft]=null}),I(),x=Wn[v],x||(x=Wn[v]=Al[v](a),x.c()),u(x,1),x.m(Yn.parentNode,Yn));let zt=X;X=Dl(a),X!==zt&&(W(),p(Bn[zt],1,1,()=>{Bn[zt]=null}),I(),Y=Bn[X],Y||(Y=Bn[X]=ql[X](a),Y.c()),u(Y,1),Y.m(Fn.parentNode,Fn));let Qt=F;F=Kl(a),F!==Qt&&(W(),p(Gn[Qt],1,1,()=>{Gn[Qt]=null}),I(),z=Gn[F],z||(z=Gn[F]=Pl[F](a),z.c()),u(z,1),z.m(An.parentNode,An));const ps={};t&2&&(ps.$$scope={dirty:t,ctx:a}),ea.$set(ps);const us={};t&2&&(us.$$scope={dirty:t,ctx:a}),ta.$set(us);let Ht=Q;Q=as(a),Q!==Ht&&(W(),p(Zn[Ht],1,1,()=>{Zn[Ht]=null}),I(),H=Zn[Q],H||(H=Zn[Q]=Ol[Q](a),H.c()),u(H,1),H.m(Ln.parentNode,Ln));let Et=E;E=es(a),E!==Et&&(W(),p($n[Et],1,1,()=>{$n[Et]=null}),I(),S=$n[E],S||(S=$n[E]=ns[E](a),S.c()),u(S,1),S.m(qn.parentNode,qn));let St=A;A=ls(a),A!==St&&(W(),p(Cn[St],1,1,()=>{Cn[St]=null}),I(),L=Cn[A],L||(L=Cn[A]=ts[A](a),L.c()),u(L,1),L.m(Dn.parentNode,Dn));let At=q;q=is(a),q!==At&&(W(),p(Vn[At],1,1,()=>{Vn[At]=null}),I(),D=Vn[q],D||(D=Vn[q]=ss[q](a),D.c()),u(D,1),D.m(Pn.parentNode,Pn));let Lt=P;P=ms(a),P!==Lt&&(W(),p(Rn[Lt],1,1,()=>{Rn[Lt]=null}),I(),K=Rn[P],K||(K=Rn[P]=rs[P](a),K.c()),u(K,1),K.m(Kn.parentNode,Kn));const os={};t&2&&(os.$$scope={dirty:t,ctx:a}),la.$set(os);const ds={};t&2&&(ds.$$scope={dirty:t,ctx:a}),sa.$set(ds)},i(a){_t||(u(k.$$.fragment,a),u(j.$$.fragment,a),u(G),u($),u(pa.$$.fragment,a),u(oa.$$.fragment,a),u(da.$$.fragment,a),u(Ma.$$.fragment,a),u(ba.$$.fragment,a),u(ka.$$.fragment,a),u(V),u(Ta.$$.fragment,a),u(N),u(x),u(Y),u(Ia.$$.fragment,a),u(z),u(Ba.$$.fragment,a),u(Za.$$.fragment,a),u(ea.$$.fragment,a),u(Ca.$$.fragment,a),u(Ra.$$.fragment,a),u(Na.$$.fragment,a),u(ta.$$.fragment,a),u(xa.$$.fragment,a),u(Ya.$$.fragment,a),u(Fa.$$.fragment,a),u(Qa.$$.fragment,a),u(Ha.$$.fragment,a),u(Aa.$$.fragment,a),u(La.$$.fragment,a),u(Pa.$$.fragment,a),u(Ka.$$.fragment,a),u(an.$$.fragment,a),u(nn.$$.fragment,a),u(tn.$$.fragment,a),u(sn.$$.fragment,a),u(pn.$$.fragment,a),u(H),u(dn.$$.fragment,a),u(S),u(L),u(D),u(K),u(yn.$$.fragment,a),u(la.$$.fragment,a),u(Jn.$$.fragment,a),u(wn.$$.fragment,a),u(sa.$$.fragment,a),u(jn.$$.fragment,a),_t=!0)},o(a){p(k.$$.fragment,a),p(j.$$.fragment,a),p(G),p($),p(pa.$$.fragment,a),p(oa.$$.fragment,a),p(da.$$.fragment,a),p(Ma.$$.fragment,a),p(ba.$$.fragment,a),p(ka.$$.fragment,a),p(V),p(Ta.$$.fragment,a),p(N),p(x),p(Y),p(Ia.$$.fragment,a),p(z),p(Ba.$$.fragment,a),p(Za.$$.fragment,a),p(ea.$$.fragment,a),p(Ca.$$.fragment,a),p(Ra.$$.fragment,a),p(Na.$$.fragment,a),p(ta.$$.fragment,a),p(xa.$$.fragment,a),p(Ya.$$.fragment,a),p(Fa.$$.fragment,a),p(Qa.$$.fragment,a),p(Ha.$$.fragment,a),p(Aa.$$.fragment,a),p(La.$$.fragment,a),p(Pa.$$.fragment,a),p(Ka.$$.fragment,a),p(an.$$.fragment,a),p(nn.$$.fragment,a),p(tn.$$.fragment,a),p(sn.$$.fragment,a),p(pn.$$.fragment,a),p(H),p(dn.$$.fragment,a),p(S),p(L),p(D),p(K),p(yn.$$.fragment,a),p(la.$$.fragment,a),p(Jn.$$.fragment,a),p(wn.$$.fragment,a),p(sa.$$.fragment,a),p(jn.$$.fragment,a),_t=!1},d(a){a&&(l(i),l(n),l(o),l(g),l(ae),l(Nn),l(ma),l(ne),l(vn),l(ee),l(ua),l(te),l(le),l(se),l(ca),l(ie),l(re),l(me),l(ya),l(pe),l(ue),l(ha),l(oe),l(xn),l(Ja),l(de),l(na),l(ce),l(wa),l(Me),l(be),l(Xn),l(ga),l(ye),l(ja),l(ke),l(Yn),l(Ua),l(he),l(Fn),l(fa),l(Je),l(U),l(Te),l(O),l(Ue),l(_a),l(fe),l(_e),l(An),l(Wa),l(Ie),l(We),l(Ga),l(Be),l(Ge),l(Ze),l($a),l($e),l(Ce),l(Va),l(Ve),l(Re),l(Ne),l(va),l(ve),l(xe),l(Xe),l(Xa),l(Ye),l(Fe),l(ze),l(za),l(Qe),l(He),l(Ee),l(Ea),l(Se),l(Sa),l(Ae),l(Le),l(qe),l(qa),l(De),l(Da),l(Pe),l(Ke),l(Oe),l(Oa),l(at),l(nt),l(et),l(en),l(tt),l(lt),l(ln),l(st),l(it),l(rn),l(rt),l(mn),l(mt),l(pt),l(un),l(ut),l(Ln),l(on),l(ot),l(dt),l(qn),l(cn),l(ct),l(Dn),l(Mn),l(Mt),l(Pn),l(bn),l(bt),l(Kn),l(yt),l(kn),l(kt),l(ht),l(hn),l(Jt),l(wt),l(Tt),l(Tn),l(gt),l(jt),l(gn),l(Ut),l(ft),l(On)),l(e),b(k,a),b(j,a),Un[B].d(a),fn[Z].d(a),b(pa,a),b(oa,a),b(da,a),b(Ma,a),b(ba,a),b(ka,a),_n[C].d(a),b(Ta,a),In[R].d(a),Wn[v].d(a),Bn[X].d(a),b(Ia,a),Gn[F].d(a),b(Ba,a),b(Za,a),b(ea,a),b(Ca,a),b(Ra,a),b(Na,a),b(ta,a),b(xa,a),b(Ya,a),b(Fa,a),b(Qa,a),b(Ha,a),b(Aa,a),b(La,a),b(Pa,a),b(Ka,a),b(an,a),b(nn,a),b(tn,a),b(sn,a),b(pn,a),Zn[Q].d(a),b(dn,a),$n[E].d(a),Cn[A].d(a),Vn[q].d(a),Rn[P].d(a),b(yn,a),b(la,a),b(Jn,a),b(wn,a),b(sa,a),b(jn,a)}}}const ni='{"title":"Kekuatan Tokenizer Cepat dalam Pipeline QA","local":"fast-tokenizers-in-the-qa-pipeline","sections":[{"title":"Menggunakan Pipeline question-answering","local":"using-the-question-answering-pipeline","sections":[],"depth":2},{"title":"Menggunakan Model untuk Question Answering","local":"using-a-model-for-question-answering","sections":[],"depth":2},{"title":"Menangani K konteks panjang","local":"handling-long-contexts","sections":[],"depth":2}],"depth":1}';function ei(y,e,i){let n="pt";return ws(()=>{const o=new URLSearchParams(window.location.search);i(0,n=o.get("fw")||"pt")}),[n]}class oi extends Ts{constructor(e){super(),gs(this,e,ei,ai,Js,{})}}export{oi as component};
