import{s as Dt,o as Lt,n as Ht}from"../chunks/scheduler.36a0863c.js";import{S as Kt,i as Pt,g as T,s as m,r as b,A as Ot,h as U,f as t,c as d,j as vt,u as o,x as j,k as Da,l as it,y as as,a as s,v as c,t as p,b as at,d as u,w as J,p as et}from"../chunks/index.156fee99.js";import{T as At}from"../chunks/Tip.8a648467.js";import{Y as es}from"../chunks/Youtube.a5d6d567.js";import{C as h}from"../chunks/CodeBlock.4cf998e6.js";import{C as qt}from"../chunks/CourseFloatingBanner.16bb8bff.js";import{F as ts}from"../chunks/FrameworkSwitchCourse.d8719b67.js";import{H as La,E as ss}from"../chunks/getInferenceSnippets.472bc46d.js";function ns(G){let n,M;return n=new qt({props:{chapter:5,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/chapter5/section6_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter5/section6_tf.ipynb"}]}}),{c(){b(n.$$.fragment)},l(l){o(n.$$.fragment,l)},m(l,g){c(n,l,g),M=!0},i(l){M||(u(n.$$.fragment,l),M=!0)},o(l){p(n.$$.fragment,l),M=!1},d(l){J(n,l)}}}function ls(G){let n,M;return n=new qt({props:{chapter:5,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/chapter5/section6_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter5/section6_pt.ipynb"}]}}),{c(){b(n.$$.fragment)},l(l){o(n.$$.fragment,l)},m(l,g){c(n,l,g),M=!0},i(l){M||(u(n.$$.fragment,l),M=!0)},o(l){p(n.$$.fragment,l),M=!1},d(l){J(n,l)}}}function is(G){let n,M='✏️ <strong>Coba sendiri!</strong> Lihat apakah Anda bisa menggunakan <code>Dataset.map()</code> untuk meledakkan kolom <code>comments</code> dari <code>issues_dataset</code> <em>tanpa</em> menggunakan Pandas. Ini agak rumit; Anda mungkin akan terbantu dengan bagian <a href="https://huggingface.co/docs/datasets/about_map_batch#batch-mapping" rel="nofollow">“Batch mapping”</a> dari dokumentasi 🤗 Datasets.';return{c(){n=T("p"),n.innerHTML=M},l(l){n=U(l,"P",{"data-svelte-h":!0}),j(n)!=="svelte-5qpnme"&&(n.innerHTML=M)},m(l,g){s(l,n,g)},p:Ht,d(l){l&&t(n)}}}function ms(G){let n,M,l,g="Perhatikan bahwa kita menetapkan from_pt=True sebagai argumen dari metode from_pretrained(). Ini karena checkpoint multi-qa-mpnet-base-dot-v1 hanya memiliki bobot (weights) dalam format PyTorch, sehingga dengan menyetel from_pt=True, bobot tersebut akan secara otomatis dikonversi ke format TensorFlow. Seperti yang bisa Anda lihat, sangat mudah untuk beralih antar framework di 🤗 Transformers!",r;return n=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBURkF1dG9Nb2RlbCUwQSUwQW1vZGVsX2NrcHQlMjAlM0QlMjAlMjJzZW50ZW5jZS10cmFuc2Zvcm1lcnMlMkZtdWx0aS1xYS1tcG5ldC1iYXNlLWRvdC12MSUyMiUwQXRva2VuaXplciUyMCUzRCUyMEF1dG9Ub2tlbml6ZXIuZnJvbV9wcmV0cmFpbmVkKG1vZGVsX2NrcHQpJTBBbW9kZWwlMjAlM0QlMjBURkF1dG9Nb2RlbC5mcm9tX3ByZXRyYWluZWQobW9kZWxfY2twdCUyQyUyMGZyb21fcHQlM0RUcnVlKQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, TFAutoModel

model_ckpt = <span class="hljs-string">&quot;sentence-transformers/multi-qa-mpnet-base-dot-v1&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)
model = TFAutoModel.from_pretrained(model_ckpt, from_pt=<span class="hljs-literal">True</span>)`,wrap:!1}}),{c(){b(n.$$.fragment),M=m(),l=T("p"),l.textContent=g},l(k){o(n.$$.fragment,k),M=d(k),l=U(k,"P",{"data-svelte-h":!0}),j(l)!=="svelte-1wd6x7c"&&(l.textContent=g)},m(k,Z){c(n,k,Z),s(k,M,Z),s(k,l,Z),r=!0},i(k){r||(u(n.$$.fragment,k),r=!0)},o(k){p(n.$$.fragment,k),r=!1},d(k){k&&(t(M),t(l)),J(n,k)}}}function ds(G){let n,M,l,g="Untuk mempercepat proses pembuatan embedding, sebaiknya model dan input ditempatkan di perangkat GPU. Mari kita lakukan sekarang:",r,k,Z;return n=new h({props:{code:"ZnJvbSUyMHRyYW5zZm9ybWVycyUyMGltcG9ydCUyMEF1dG9Ub2tlbml6ZXIlMkMlMjBBdXRvTW9kZWwlMEElMEFtb2RlbF9ja3B0JTIwJTNEJTIwJTIyc2VudGVuY2UtdHJhbnNmb3JtZXJzJTJGbXVsdGktcWEtbXBuZXQtYmFzZS1kb3QtdjElMjIlMEF0b2tlbml6ZXIlMjAlM0QlMjBBdXRvVG9rZW5pemVyLmZyb21fcHJldHJhaW5lZChtb2RlbF9ja3B0KSUwQW1vZGVsJTIwJTNEJTIwQXV0b01vZGVsLmZyb21fcHJldHJhaW5lZChtb2RlbF9ja3B0KQ==",highlighted:`<span class="hljs-keyword">from</span> transformers <span class="hljs-keyword">import</span> AutoTokenizer, AutoModel

model_ckpt = <span class="hljs-string">&quot;sentence-transformers/multi-qa-mpnet-base-dot-v1&quot;</span>
tokenizer = AutoTokenizer.from_pretrained(model_ckpt)
model = AutoModel.from_pretrained(model_ckpt)`,wrap:!1}}),k=new h({props:{code:"aW1wb3J0JTIwdG9yY2glMEElMEFkZXZpY2UlMjAlM0QlMjB0b3JjaC5kZXZpY2UoJTIyY3VkYSUyMiklMEFtb2RlbC50byhkZXZpY2Up",highlighted:`<span class="hljs-keyword">import</span> torch

device = torch.device(<span class="hljs-string">&quot;cuda&quot;</span>)
model.to(device)`,wrap:!1}}),{c(){b(n.$$.fragment),M=m(),l=T("p"),l.textContent=g,r=m(),b(k.$$.fragment)},l(y){o(n.$$.fragment,y),M=d(y),l=U(y,"P",{"data-svelte-h":!0}),j(l)!=="svelte-1p9ryn6"&&(l.textContent=g),r=d(y),o(k.$$.fragment,y)},m(y,w){c(n,y,w),s(y,M,w),s(y,l,w),s(y,r,w),c(k,y,w),Z=!0},i(y){Z||(u(n.$$.fragment,y),u(k.$$.fragment,y),Z=!0)},o(y){p(n.$$.fragment,y),p(k.$$.fragment,y),Z=!1},d(y){y&&(t(M),t(l),t(r)),J(n,y),J(k,y)}}}function rs(G){let n,M,l,g="Kita dapat menguji apakah fungsi tersebut bekerja dengan memberikannya entri teks pertama dari korpus kita dan memeriksa bentuk output-nya:",r,k,Z,y,w,N,$="Hebat, kita telah mengubah entri pertama dalam korpus kita menjadi vektor berdimensi 768! Kita dapat menggunakan <code>Dataset.map()</code> untuk menerapkan fungsi <code>get_embeddings()</code> ke setiap baris dalam korpus kita, jadi mari kita buat kolom baru bernama <code>embeddings</code> seperti berikut:",W,C,R;return n=new h({props:{code:"ZGVmJTIwZ2V0X2VtYmVkZGluZ3ModGV4dF9saXN0KSUzQSUwQSUyMCUyMCUyMCUyMGVuY29kZWRfaW5wdXQlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdGV4dF9saXN0JTJDJTIwcGFkZGluZyUzRFRydWUlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIydGYlMjIlMEElMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwZW5jb2RlZF9pbnB1dCUyMCUzRCUyMCU3QmslM0ElMjB2JTIwZm9yJTIwayUyQyUyMHYlMjBpbiUyMGVuY29kZWRfaW5wdXQuaXRlbXMoKSU3RCUwQSUyMCUyMCUyMCUyMG1vZGVsX291dHB1dCUyMCUzRCUyMG1vZGVsKCoqZW5jb2RlZF9pbnB1dCklMEElMjAlMjAlMjAlMjByZXR1cm4lMjBjbHNfcG9vbGluZyhtb2RlbF9vdXRwdXQp",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_embeddings</span>(<span class="hljs-params">text_list</span>):
    encoded_input = tokenizer(
        text_list, padding=<span class="hljs-literal">True</span>, truncation=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;tf&quot;</span>
    )
    encoded_input = {k: v <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> encoded_input.items()}
    model_output = model(**encoded_input)
    <span class="hljs-keyword">return</span> cls_pooling(model_output)`,wrap:!1}}),k=new h({props:{code:"ZW1iZWRkaW5nJTIwJTNEJTIwZ2V0X2VtYmVkZGluZ3MoY29tbWVudHNfZGF0YXNldCU1QiUyMnRleHQlMjIlNUQlNUIwJTVEKSUwQWVtYmVkZGluZy5zaGFwZQ==",highlighted:`embedding = get_embeddings(comments_dataset[<span class="hljs-string">&quot;text&quot;</span>][<span class="hljs-number">0</span>])
embedding.shape`,wrap:!1}}),y=new h({props:{code:"VGVuc29yU2hhcGUoJTVCMSUyQyUyMDc2OCU1RCk=",highlighted:'TensorShape([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),C=new h({props:{code:"ZW1iZWRkaW5nc19kYXRhc2V0JTIwJTNEJTIwY29tbWVudHNfZGF0YXNldC5tYXAoJTBBJTIwJTIwJTIwJTIwbGFtYmRhJTIweCUzQSUyMCU3QiUyMmVtYmVkZGluZ3MlMjIlM0ElMjBnZXRfZW1iZWRkaW5ncyh4JTVCJTIydGV4dCUyMiU1RCkubnVtcHkoKSU1QjAlNUQlN0QlMEEp",highlighted:`embeddings_dataset = comments_dataset.<span class="hljs-built_in">map</span>(
    <span class="hljs-keyword">lambda</span> x: {<span class="hljs-string">&quot;embeddings&quot;</span>: get_embeddings(x[<span class="hljs-string">&quot;text&quot;</span>]).numpy()[<span class="hljs-number">0</span>]}
)`,wrap:!1}}),{c(){b(n.$$.fragment),M=m(),l=T("p"),l.textContent=g,r=m(),b(k.$$.fragment),Z=m(),b(y.$$.fragment),w=m(),N=T("p"),N.innerHTML=$,W=m(),b(C.$$.fragment)},l(i){o(n.$$.fragment,i),M=d(i),l=U(i,"P",{"data-svelte-h":!0}),j(l)!=="svelte-ocf5jc"&&(l.textContent=g),r=d(i),o(k.$$.fragment,i),Z=d(i),o(y.$$.fragment,i),w=d(i),N=U(i,"P",{"data-svelte-h":!0}),j(N)!=="svelte-ycv6nq"&&(N.innerHTML=$),W=d(i),o(C.$$.fragment,i)},m(i,f){c(n,i,f),s(i,M,f),s(i,l,f),s(i,r,f),c(k,i,f),s(i,Z,f),c(y,i,f),s(i,w,f),s(i,N,f),s(i,W,f),c(C,i,f),R=!0},i(i){R||(u(n.$$.fragment,i),u(k.$$.fragment,i),u(y.$$.fragment,i),u(C.$$.fragment,i),R=!0)},o(i){p(n.$$.fragment,i),p(k.$$.fragment,i),p(y.$$.fragment,i),p(C.$$.fragment,i),R=!1},d(i){i&&(t(M),t(l),t(r),t(Z),t(w),t(N),t(W)),J(n,i),J(k,i),J(y,i),J(C,i)}}}function ps(G){let n,M,l,g="Kita bisa menguji fungsi tersebut dengan memberikan entri teks pertama dari korpus dan memeriksa bentuk output-nya:",r,k,Z,y,w,N,$="Bagus, kita telah mengubah entri pertama dari korpus menjadi vektor berdimensi 768! Kita bisa menggunakan <code>Dataset.map()</code> untuk menerapkan fungsi <code>get_embeddings()</code> ke setiap baris dalam korpus, dan membuat kolom baru <code>embeddings</code> seperti berikut:",W,C,R;return n=new h({props:{code:"ZGVmJTIwZ2V0X2VtYmVkZGluZ3ModGV4dF9saXN0KSUzQSUwQSUyMCUyMCUyMCUyMGVuY29kZWRfaW5wdXQlMjAlM0QlMjB0b2tlbml6ZXIoJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwdGV4dF9saXN0JTJDJTIwcGFkZGluZyUzRFRydWUlMkMlMjB0cnVuY2F0aW9uJTNEVHJ1ZSUyQyUyMHJldHVybl90ZW5zb3JzJTNEJTIycHQlMjIlMEElMjAlMjAlMjAlMjApJTBBJTIwJTIwJTIwJTIwZW5jb2RlZF9pbnB1dCUyMCUzRCUyMCU3QmslM0ElMjB2LnRvKGRldmljZSklMjBmb3IlMjBrJTJDJTIwdiUyMGluJTIwZW5jb2RlZF9pbnB1dC5pdGVtcygpJTdEJTBBJTIwJTIwJTIwJTIwbW9kZWxfb3V0cHV0JTIwJTNEJTIwbW9kZWwoKiplbmNvZGVkX2lucHV0KSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMGNsc19wb29saW5nKG1vZGVsX291dHB1dCk=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">get_embeddings</span>(<span class="hljs-params">text_list</span>):
    encoded_input = tokenizer(
        text_list, padding=<span class="hljs-literal">True</span>, truncation=<span class="hljs-literal">True</span>, return_tensors=<span class="hljs-string">&quot;pt&quot;</span>
    )
    encoded_input = {k: v.to(device) <span class="hljs-keyword">for</span> k, v <span class="hljs-keyword">in</span> encoded_input.items()}
    model_output = model(**encoded_input)
    <span class="hljs-keyword">return</span> cls_pooling(model_output)`,wrap:!1}}),k=new h({props:{code:"ZW1iZWRkaW5nJTIwJTNEJTIwZ2V0X2VtYmVkZGluZ3MoY29tbWVudHNfZGF0YXNldCU1QiUyMnRleHQlMjIlNUQlNUIwJTVEKSUwQWVtYmVkZGluZy5zaGFwZQ==",highlighted:`embedding = get_embeddings(comments_dataset[<span class="hljs-string">&quot;text&quot;</span>][<span class="hljs-number">0</span>])
embedding.shape`,wrap:!1}}),y=new h({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNzY4JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),C=new h({props:{code:"ZW1iZWRkaW5nc19kYXRhc2V0JTIwJTNEJTIwY29tbWVudHNfZGF0YXNldC5tYXAoJTBBJTIwJTIwJTIwJTIwbGFtYmRhJTIweCUzQSUyMCU3QiUyMmVtYmVkZGluZ3MlMjIlM0ElMjBnZXRfZW1iZWRkaW5ncyh4JTVCJTIydGV4dCUyMiU1RCkuZGV0YWNoKCkuY3B1KCkubnVtcHkoKSU1QjAlNUQlN0QlMEEp",highlighted:`embeddings_dataset = comments_dataset.<span class="hljs-built_in">map</span>(
    <span class="hljs-keyword">lambda</span> x: {<span class="hljs-string">&quot;embeddings&quot;</span>: get_embeddings(x[<span class="hljs-string">&quot;text&quot;</span>]).detach().cpu().numpy()[<span class="hljs-number">0</span>]}
)`,wrap:!1}}),{c(){b(n.$$.fragment),M=m(),l=T("p"),l.textContent=g,r=m(),b(k.$$.fragment),Z=m(),b(y.$$.fragment),w=m(),N=T("p"),N.innerHTML=$,W=m(),b(C.$$.fragment)},l(i){o(n.$$.fragment,i),M=d(i),l=U(i,"P",{"data-svelte-h":!0}),j(l)!=="svelte-1t6x9nc"&&(l.textContent=g),r=d(i),o(k.$$.fragment,i),Z=d(i),o(y.$$.fragment,i),w=d(i),N=U(i,"P",{"data-svelte-h":!0}),j(N)!=="svelte-16afjzm"&&(N.innerHTML=$),W=d(i),o(C.$$.fragment,i)},m(i,f){c(n,i,f),s(i,M,f),s(i,l,f),s(i,r,f),c(k,i,f),s(i,Z,f),c(y,i,f),s(i,w,f),s(i,N,f),s(i,W,f),c(C,i,f),R=!0},i(i){R||(u(n.$$.fragment,i),u(k.$$.fragment,i),u(y.$$.fragment,i),u(C.$$.fragment,i),R=!0)},o(i){p(n.$$.fragment,i),p(k.$$.fragment,i),p(y.$$.fragment,i),p(C.$$.fragment,i),R=!1},d(i){i&&(t(M),t(l),t(r),t(Z),t(w),t(N),t(W)),J(n,i),J(k,i),J(y,i),J(C,i)}}}function us(G){let n,M,l,g;return n=new h({props:{code:"cXVlc3Rpb24lMjAlM0QlMjAlMjJIb3clMjBjYW4lMjBJJTIwbG9hZCUyMGElMjBkYXRhc2V0JTIwb2ZmbGluZSUzRiUyMiUwQXF1ZXN0aW9uX2VtYmVkZGluZyUyMCUzRCUyMGdldF9lbWJlZGRpbmdzKCU1QnF1ZXN0aW9uJTVEKS5udW1weSgpJTBBcXVlc3Rpb25fZW1iZWRkaW5nLnNoYXBl",highlighted:`question = <span class="hljs-string">&quot;How can I load a dataset offline?&quot;</span>
question_embedding = get_embeddings([question]).numpy()
question_embedding.shape`,wrap:!1}}),l=new h({props:{code:"KDElMkMlMjA3Njgp",highlighted:'(<span class="hljs-number">1</span>, <span class="hljs-number">768</span>)',wrap:!1}}),{c(){b(n.$$.fragment),M=m(),b(l.$$.fragment)},l(r){o(n.$$.fragment,r),M=d(r),o(l.$$.fragment,r)},m(r,k){c(n,r,k),s(r,M,k),c(l,r,k),g=!0},i(r){g||(u(n.$$.fragment,r),u(l.$$.fragment,r),g=!0)},o(r){p(n.$$.fragment,r),p(l.$$.fragment,r),g=!1},d(r){r&&t(M),J(n,r),J(l,r)}}}function Ms(G){let n,M,l,g;return n=new h({props:{code:"cXVlc3Rpb24lMjAlM0QlMjAlMjJCYWdhaW1hbmElMjBjYXJhJTIwbWVtdWF0JTIwZGF0YXNldCUyMHNlY2FyYSUyMG9mZmxpbmUlM0YlMjIlMEFxdWVzdGlvbl9lbWJlZGRpbmclMjAlM0QlMjBnZXRfZW1iZWRkaW5ncyglNUJxdWVzdGlvbiU1RCkuY3B1KCkuZGV0YWNoKCkubnVtcHkoKSUwQXF1ZXN0aW9uX2VtYmVkZGluZy5zaGFwZQ==",highlighted:`question = <span class="hljs-string">&quot;Bagaimana cara memuat dataset secara offline?&quot;</span>
question_embedding = get_embeddings([question]).cpu().detach().numpy()
question_embedding.shape`,wrap:!1}}),l=new h({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNzY4JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),{c(){b(n.$$.fragment),M=m(),b(l.$$.fragment)},l(r){o(n.$$.fragment,r),M=d(r),o(l.$$.fragment,r)},m(r,k){c(n,r,k),s(r,M,k),c(l,r,k),g=!0},i(r){g||(u(n.$$.fragment,r),u(l.$$.fragment,r),g=!0)},o(r){p(n.$$.fragment,r),p(l.$$.fragment,r),g=!1},d(r){r&&t(M),J(n,r),J(l,r)}}}function ks(G){let n,M="✏️ <strong>Coba sendiri!</strong> Buat kueri Anda sendiri dan lihat apakah Anda bisa menemukan jawabannya dalam dokumen yang ditemukan. Anda mungkin perlu menaikkan nilai parameter <code>k</code> dalam <code>Dataset.get_nearest_examples()</code> untuk memperluas pencarian.";return{c(){n=T("p"),n.innerHTML=M},l(l){n=U(l,"P",{"data-svelte-h":!0}),j(n)!=="svelte-5o0ibi"&&(n.innerHTML=M)},m(l,g){s(l,n,g)},p:Ht,d(l){l&&t(n)}}}function bs(G){let n,M,l,g,r,k,Z,y,w,N,$,W,C='Pada <a href="/course/chapter5/5">bagian 5</a>, kita telah membuat dataset dari isu dan komentar GitHub dari repositori 🤗 Datasets. Di bagian ini, kita akan menggunakan informasi tersebut untuk membangun mesin pencari yang dapat membantu kita menemukan jawaban atas pertanyaan penting tentang pustaka tersebut!',R,i,f,S,Ka,z,mt='Seperti yang telah kita lihat di <a href="/course/chapter1">Bab 1</a>, model bahasa berbasis Transformer merepresentasikan setiap token dalam teks sebagai <em>vektor embedding</em>. Ternyata, kita bisa “menggabungkan” embedding individual ini untuk membuat representasi vektor dari satu kalimat, paragraf, atau bahkan dokumen secara keseluruhan. Embedding ini kemudian dapat digunakan untuk menemukan dokumen serupa dalam korpus dengan menghitung kemiripan dot-product (atau metrik kemiripan lainnya) antara setiap embedding dan mengembalikan dokumen yang memiliki tumpang tindih tertinggi.',Pa,v,dt="Di bagian ini kita akan menggunakan embedding untuk mengembangkan mesin pencari semantik. Mesin pencari semantik memiliki beberapa keunggulan dibanding pendekatan konvensional yang berbasis pencocokan kata kunci dalam kueri terhadap dokumen.",Oa,Y,rt='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter5/semantic-search.svg" alt="Pencarian semantik."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter5/semantic-search-dark.svg" alt="Pencarian semantik."/>',ae,A,ee,H,pt="Hal pertama yang perlu kita lakukan adalah mengunduh dataset isu GitHub kita. Mari kita gunakan fungsi <code>load_dataset()</code> seperti biasa:",te,q,se,D,ne,L,ut="Di sini kita menentukan split <code>train</code> secara default dalam <code>load_dataset()</code>, sehingga ia mengembalikan sebuah objek <code>Dataset</code> bukan <code>DatasetDict</code>. Langkah pertama kita adalah menyaring <em>pull request</em>, karena biasanya tidak berguna untuk menjawab pertanyaan pengguna dan justru akan menambah noise dalam mesin pencari. Seperti yang sudah sering kita lakukan, kita bisa menggunakan fungsi <code>Dataset.filter()</code> untuk mengecualikan baris-baris ini. Sekalian, mari juga kita buang baris yang tidak memiliki komentar, karena komentar adalah bagian yang menyediakan jawaban:",le,K,ie,P,me,O,Mt="Kita bisa lihat bahwa ada banyak kolom dalam dataset ini, namun sebagian besar tidak kita butuhkan untuk membangun mesin pencari. Dari sudut pandang pencarian, kolom yang paling informatif adalah <code>title</code>, <code>body</code>, dan <code>comments</code>, sementara <code>html_url</code> menyediakan tautan ke isu sumber. Mari kita gunakan <code>Dataset.remove_columns()</code> untuk menghapus kolom-kolom lain:",de,aa,re,ea,pe,ta,kt='Untuk membuat embedding, kita akan menambahkan setiap komentar dengan <code>title</code> dan <code>body</code> dari isu terkait, karena informasi kontekstual sering kali ada di bagian tersebut. Karena kolom <code>comments</code> saat ini merupakan daftar komentar untuk setiap isu, kita perlu “meledakkan” kolom tersebut agar setiap baris hanya berisi satu pasangan <code>(html_url, title, body, comment)</code>. Dalam Pandas, kita bisa melakukannya dengan fungsi <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html" rel="nofollow"><code>DataFrame.explode()</code></a>, yang membuat baris baru untuk setiap elemen dalam kolom berisi daftar, sambil menggandakan nilai kolom lain. Untuk melihatnya secara langsung, mari kita ubah terlebih dahulu ke format <code>DataFrame</code> Pandas:',ue,sa,Me,na,bt="Jika kita lihat baris pertama dalam <code>DataFrame</code> ini, kita akan melihat ada empat komentar terkait dengan isu tersebut:",ke,la,be,ia,oe,ma,ot="Saat kita melakukan <em>explode</em> pada <code>df</code>, kita harapkan akan mendapatkan satu baris untuk setiap komentar tersebut. Mari kita periksa apakah hasilnya sesuai ekspektasi:",ce,da,Je,I,ct='<thead><tr style="text-align: right;"><th></th> <th>html_url</th> <th>title</th> <th>comments</th> <th>body</th></tr></thead> <tbody><tr><th>0</th> <td>https://github.com/huggingface/datasets/issues/2787</td> <td>ConnectionError: Couldn&#39;t reach https://raw.githubusercontent.com</td> <td>kode bug terletak di:\\r\\n    if data_args.task_name is not None...</td> <td>Halo,\\r\\nSaya mencoba menjalankan run_glue.py dan mendapatkan error berikut...</td></tr> <tr><th>1</th> <td>https://github.com/huggingface/datasets/issues/2787</td> <td>ConnectionError: Couldn&#39;t reach https://raw.githubusercontent.com</td> <td>Hai @jinec,\\r\\n\\r\\nSesekali kami mendapat `ConnectionError` seperti ini dari situs github.com: https://raw.githubusercontent.com...</td> <td>Halo,\\r\\nSaya mencoba menjalankan run_glue.py dan mendapatkan error berikut...</td></tr> <tr><th>2</th> <td>https://github.com/huggingface/datasets/issues/2787</td> <td>ConnectionError: Couldn&#39;t reach https://raw.githubusercontent.com</td> <td>tidak bisa konek, bahkan lewat browser, tolong dicek apakah ada masalah.</td> <td>Halo,\\r\\nSaya mencoba menjalankan run_glue.py dan mendapatkan error berikut...</td></tr> <tr><th>3</th> <td>https://github.com/huggingface/datasets/issues/2787</td> <td>ConnectionError: Couldn&#39;t reach https://raw.githubusercontent.com</td> <td>Saya bisa mengakses https://raw.githubusercontent.com/huggingface/datasets/1.7.0/datasets/glue/glue.py tanpa masalah...</td> <td>Halo,\\r\\nSaya mencoba menjalankan run_glue.py dan mendapatkan error berikut...</td></tr></tbody>',ye,ra,Jt="Bagus, kita bisa lihat baris-baris telah direplikasi, dengan kolom <code>comments</code> sekarang berisi komentar individual! Sekarang kita sudah selesai menggunakan Pandas, kita bisa dengan cepat kembali ke format <code>Dataset</code> dengan memuat <code>DataFrame</code> ke memori:",Te,pa,Ue,ua,he,Ma,yt="Oke, sekarang kita punya beberapa ribu komentar untuk digunakan!",ge,x,je,ka,Tt="Sekarang kita sudah punya satu komentar per baris, mari buat kolom baru <code>comment_length</code> yang berisi jumlah kata per komentar:",fe,ba,we,oa,Ut="Kita bisa menggunakan kolom ini untuk menyaring komentar yang terlalu pendek, seperti “cc @lewtun” atau “Terima kasih!” yang tidak relevan untuk mesin pencari. Tidak ada batasan pasti, tapi sekitar 15 kata sepertinya jumlah yang baik untuk disaring:",Ne,ca,Ze,Ja,Ge,ya,ht="Setelah membersihkan dataset, mari kita gabungkan judul isu, deskripsi, dan komentar ke dalam kolom baru <code>text</code>. Seperti biasa, kita akan menulis fungsi sederhana untuk digunakan dengan <code>Dataset.map()</code>:",Ce,Ta,We,Ua,gt="Akhirnya kita siap untuk membuat embedding! Mari kita lihat bagaimana caranya.",Re,ha,$e,ga,jt='Kita telah melihat di <a href="/course/chapter2">Bab 2</a> bahwa kita bisa mendapatkan token embedding menggunakan kelas <code>AutoModel</code>. Yang kita butuhkan hanya memilih <em>checkpoint</em> yang cocok untuk memuat model. Untungnya, ada pustaka bernama <code>sentence-transformers</code> yang memang ditujukan untuk membuat embedding. Seperti yang dijelaskan dalam <a href="https://www.sbert.net/examples/applications/semantic-search/README.html#symmetric-vs-asymmetric-semantic-search" rel="nofollow">dokumentasi pustaka</a>, kasus penggunaan kita adalah contoh dari <em>asymmetric semantic search</em>, karena kita memiliki kueri pendek dan ingin menemukan jawabannya dalam dokumen yang lebih panjang, seperti komentar isu.  Tabel <a href="https://www.sbert.net/docs/pretrained_models.html#model-overview" rel="nofollow">ringkasan model</a> di dokumentasi menunjukkan bahwa checkpoint <code>multi-qa-mpnet-base-dot-v1</code> memiliki performa terbaik untuk pencarian semantik, jadi kita akan gunakan itu untuk aplikasi ini. Kita juga akan memuat tokenizer menggunakan checkpoint yang sama:',Ie,B,E,va,ja,ft="Seperti yang telah disebutkan sebelumnya, kita ingin merepresentasikan setiap entri dalam korpus GitHub Issues kita sebagai sebuah vektor tunggal, jadi kita perlu melakukan “pooling” atau merata-ratakan embedding token dengan cara tertentu. Salah satu pendekatan populer adalah melakukan CLS pooling pada output model, di mana kita cukup mengambil last hidden state untuk token spesial [CLS]. Fungsi berikut akan melakukan hal tersebut untuk kita:",Be,fa,Ee,wa,wt="Selanjutnya, kita akan membuat fungsi bantu untuk melakukan tokenisasi pada daftar dokumen, menempatkan tensor di GPU, mengoperasikannya ke model, lalu menerapkan <em>CLS pooling</em> pada output:",_e,_,Q,Aa,Na,Nt="Perhatikan bahwa kita telah mengubah embeddings ke dalam format array NumPy — ini karena 🤗 Datasets memerlukan format ini ketika kita mencoba mengindeksnya dengan FAISS, yang akan kita lakukan selanjutnya.",Qe,Za,Ve,Ga,Zt='Sekarang kita memiliki dataset berisi embedding, kita butuh cara untuk mencari di dalamnya. Untuk itu, kita akan menggunakan struktur data khusus dari 🤗 Datasets yang disebut <em>FAISS index</em>. <a href="https://faiss.ai/" rel="nofollow">FAISS</a> (singkatan dari Facebook AI Similarity Search) adalah pustaka yang menyediakan algoritma efisien untuk mencari dan mengelompokkan vektor embedding dengan cepat.',Xe,Ca,Gt="Ide dasar dari FAISS adalah membuat struktur data khusus bernama <em>index</em> yang memungkinkan kita menemukan embedding yang paling mirip dengan embedding input. Membuat FAISS index dalam 🤗 Datasets cukup sederhana — kita cukup gunakan fungsi <code>Dataset.add_faiss_index()</code> dan menentukan kolom mana yang ingin diindeks:",Ye,Wa,xe,Ra,Ct="Sekarang kita bisa melakukan pencarian dengan melakukan pencocokan <em>nearest neighbor</em> menggunakan fungsi <code>Dataset.get_nearest_examples()</code>. Mari kita coba dengan mengubah sebuah pertanyaan menjadi embedding terlebih dahulu:",Fe,V,X,Ha,$a,Wt="Sama seperti pada dokumen, sekarang kita memiliki vektor berdimensi 768 yang merepresentasikan pertanyaan, yang dapat kita bandingkan dengan seluruh korpus untuk menemukan embeddings yang paling mirip:",Se,Ia,ze,Ba,Rt="Fungsi <code>Dataset.get_nearest_examples()</code> mengembalikan tuple berisi skor (yang menunjukkan tingkat kemiripan) dan sampel dokumen (dalam hal ini 5 hasil terbaik). Mari kita ubah ini menjadi <code>pandas.DataFrame</code> agar mudah untuk disortir:",ve,Ea,Ae,_a,$t="Sekarang kita bisa menelusuri beberapa baris pertama untuk melihat seberapa baik kueri kita dicocokkan dengan komentar yang tersedia:",He,Qa,qe,Va,De,Xa,It="Tidak buruk! Hasil kedua kita tampaknya cocok dengan kueri yang diberikan.",Le,F,Ke,Ya,Pe,qa,Oe;r=new ts({props:{fw:G[0]}}),Z=new La({props:{title:"Pencarian Semantik dengan FAISS",local:"semantic-search-with-faiss",headingTag:"h1"}});const Bt=[ls,ns],xa=[];function Et(a,e){return a[0]==="pt"?0:1}w=Et(G),N=xa[w]=Bt[w](G),i=new es({props:{id:"OATCgQtNX2o"}}),S=new La({props:{title:"Menggunakan Embedding untuk Pencarian Semantik",local:"using-embeddings-for-semantic-search",headingTag:"h2"}}),A=new La({props:{title:"Memuat dan Menyiapkan Dataset",local:"loading-and-preparing-the-dataset",headingTag:"h2"}}),q=new h({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBaXNzdWVzX2RhdGFzZXQlMjAlM0QlMjBsb2FkX2RhdGFzZXQoJTIybGV3dHVuJTJGZ2l0aHViLWlzc3VlcyUyMiUyQyUyMHNwbGl0JTNEJTIydHJhaW4lMjIpJTBBaXNzdWVzX2RhdGFzZXQ=",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> load_dataset

issues_dataset = load_dataset(<span class="hljs-string">&quot;lewtun/github-issues&quot;</span>, split=<span class="hljs-string">&quot;train&quot;</span>)
issues_dataset`,wrap:!1}}),D=new h({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1Qid1cmwnJTJDJTIwJ3JlcG9zaXRvcnlfdXJsJyUyQyUyMCdsYWJlbHNfdXJsJyUyQyUyMCdjb21tZW50c191cmwnJTJDJTIwJ2V2ZW50c191cmwnJTJDJTIwJ2h0bWxfdXJsJyUyQyUyMCdpZCclMkMlMjAnbm9kZV9pZCclMkMlMjAnbnVtYmVyJyUyQyUyMCd0aXRsZSclMkMlMjAndXNlciclMkMlMjAnbGFiZWxzJyUyQyUyMCdzdGF0ZSclMkMlMjAnbG9ja2VkJyUyQyUyMCdhc3NpZ25lZSclMkMlMjAnYXNzaWduZWVzJyUyQyUyMCdtaWxlc3RvbmUnJTJDJTIwJ2NvbW1lbnRzJyUyQyUyMCdjcmVhdGVkX2F0JyUyQyUyMCd1cGRhdGVkX2F0JyUyQyUyMCdjbG9zZWRfYXQnJTJDJTIwJ2F1dGhvcl9hc3NvY2lhdGlvbiclMkMlMjAnYWN0aXZlX2xvY2tfcmVhc29uJyUyQyUyMCdwdWxsX3JlcXVlc3QnJTJDJTIwJ2JvZHknJTJDJTIwJ3BlcmZvcm1lZF92aWFfZ2l0aHViX2FwcCclMkMlMjAnaXNfcHVsbF9yZXF1ZXN0JyU1RCUyQyUwQSUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMjg1NSUwQSU3RCk=",highlighted:`Dataset({
    features: [<span class="hljs-string">&#x27;url&#x27;</span>, <span class="hljs-string">&#x27;repository_url&#x27;</span>, <span class="hljs-string">&#x27;labels_url&#x27;</span>, <span class="hljs-string">&#x27;comments_url&#x27;</span>, <span class="hljs-string">&#x27;events_url&#x27;</span>, <span class="hljs-string">&#x27;html_url&#x27;</span>, <span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;node_id&#x27;</span>, <span class="hljs-string">&#x27;number&#x27;</span>, <span class="hljs-string">&#x27;title&#x27;</span>, <span class="hljs-string">&#x27;user&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;state&#x27;</span>, <span class="hljs-string">&#x27;locked&#x27;</span>, <span class="hljs-string">&#x27;assignee&#x27;</span>, <span class="hljs-string">&#x27;assignees&#x27;</span>, <span class="hljs-string">&#x27;milestone&#x27;</span>, <span class="hljs-string">&#x27;comments&#x27;</span>, <span class="hljs-string">&#x27;created_at&#x27;</span>, <span class="hljs-string">&#x27;updated_at&#x27;</span>, <span class="hljs-string">&#x27;closed_at&#x27;</span>, <span class="hljs-string">&#x27;author_association&#x27;</span>, <span class="hljs-string">&#x27;active_lock_reason&#x27;</span>, <span class="hljs-string">&#x27;pull_request&#x27;</span>, <span class="hljs-string">&#x27;body&#x27;</span>, <span class="hljs-string">&#x27;performed_via_github_app&#x27;</span>, <span class="hljs-string">&#x27;is_pull_request&#x27;</span>],
    num_rows: <span class="hljs-number">2855</span>
})`,wrap:!1}}),K=new h({props:{code:"aXNzdWVzX2RhdGFzZXQlMjAlM0QlMjBpc3N1ZXNfZGF0YXNldC5maWx0ZXIoJTBBJTIwJTIwJTIwJTIwbGFtYmRhJTIweCUzQSUyMCh4JTVCJTIyaXNfcHVsbF9yZXF1ZXN0JTIyJTVEJTIwJTNEJTNEJTIwRmFsc2UlMjBhbmQlMjBsZW4oeCU1QiUyMmNvbW1lbnRzJTIyJTVEKSUyMCUzRSUyMDApJTBBKSUwQWlzc3Vlc19kYXRhc2V0",highlighted:`issues_dataset = issues_dataset.<span class="hljs-built_in">filter</span>(
    <span class="hljs-keyword">lambda</span> x: (x[<span class="hljs-string">&quot;is_pull_request&quot;</span>] == <span class="hljs-literal">False</span> <span class="hljs-keyword">and</span> <span class="hljs-built_in">len</span>(x[<span class="hljs-string">&quot;comments&quot;</span>]) &gt; <span class="hljs-number">0</span>)
)
issues_dataset`,wrap:!1}}),P=new h({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1Qid1cmwnJTJDJTIwJ3JlcG9zaXRvcnlfdXJsJyUyQyUyMCdsYWJlbHNfdXJsJyUyQyUyMCdjb21tZW50c191cmwnJTJDJTIwJ2V2ZW50c191cmwnJTJDJTIwJ2h0bWxfdXJsJyUyQyUyMCdpZCclMkMlMjAnbm9kZV9pZCclMkMlMjAnbnVtYmVyJyUyQyUyMCd0aXRsZSclMkMlMjAndXNlciclMkMlMjAnbGFiZWxzJyUyQyUyMCdzdGF0ZSclMkMlMjAnbG9ja2VkJyUyQyUyMCdhc3NpZ25lZSclMkMlMjAnYXNzaWduZWVzJyUyQyUyMCdtaWxlc3RvbmUnJTJDJTIwJ2NvbW1lbnRzJyUyQyUyMCdjcmVhdGVkX2F0JyUyQyUyMCd1cGRhdGVkX2F0JyUyQyUyMCdjbG9zZWRfYXQnJTJDJTIwJ2F1dGhvcl9hc3NvY2lhdGlvbiclMkMlMjAnYWN0aXZlX2xvY2tfcmVhc29uJyUyQyUyMCdwdWxsX3JlcXVlc3QnJTJDJTIwJ2JvZHknJTJDJTIwJ3BlcmZvcm1lZF92aWFfZ2l0aHViX2FwcCclMkMlMjAnaXNfcHVsbF9yZXF1ZXN0JyU1RCUyQyUwQSUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNzcxJTBBJTdEKQ==",highlighted:`Dataset({
    features: [<span class="hljs-string">&#x27;url&#x27;</span>, <span class="hljs-string">&#x27;repository_url&#x27;</span>, <span class="hljs-string">&#x27;labels_url&#x27;</span>, <span class="hljs-string">&#x27;comments_url&#x27;</span>, <span class="hljs-string">&#x27;events_url&#x27;</span>, <span class="hljs-string">&#x27;html_url&#x27;</span>, <span class="hljs-string">&#x27;id&#x27;</span>, <span class="hljs-string">&#x27;node_id&#x27;</span>, <span class="hljs-string">&#x27;number&#x27;</span>, <span class="hljs-string">&#x27;title&#x27;</span>, <span class="hljs-string">&#x27;user&#x27;</span>, <span class="hljs-string">&#x27;labels&#x27;</span>, <span class="hljs-string">&#x27;state&#x27;</span>, <span class="hljs-string">&#x27;locked&#x27;</span>, <span class="hljs-string">&#x27;assignee&#x27;</span>, <span class="hljs-string">&#x27;assignees&#x27;</span>, <span class="hljs-string">&#x27;milestone&#x27;</span>, <span class="hljs-string">&#x27;comments&#x27;</span>, <span class="hljs-string">&#x27;created_at&#x27;</span>, <span class="hljs-string">&#x27;updated_at&#x27;</span>, <span class="hljs-string">&#x27;closed_at&#x27;</span>, <span class="hljs-string">&#x27;author_association&#x27;</span>, <span class="hljs-string">&#x27;active_lock_reason&#x27;</span>, <span class="hljs-string">&#x27;pull_request&#x27;</span>, <span class="hljs-string">&#x27;body&#x27;</span>, <span class="hljs-string">&#x27;performed_via_github_app&#x27;</span>, <span class="hljs-string">&#x27;is_pull_request&#x27;</span>],
    num_rows: <span class="hljs-number">771</span>
})`,wrap:!1}}),aa=new h({props:{code:"Y29sdW1ucyUyMCUzRCUyMGlzc3Vlc19kYXRhc2V0LmNvbHVtbl9uYW1lcyUwQWNvbHVtbnNfdG9fa2VlcCUyMCUzRCUyMCU1QiUyMnRpdGxlJTIyJTJDJTIwJTIyYm9keSUyMiUyQyUyMCUyMmh0bWxfdXJsJTIyJTJDJTIwJTIyY29tbWVudHMlMjIlNUQlMEFjb2x1bW5zX3RvX3JlbW92ZSUyMCUzRCUyMHNldChjb2x1bW5zX3RvX2tlZXApLnN5bW1ldHJpY19kaWZmZXJlbmNlKGNvbHVtbnMpJTBBaXNzdWVzX2RhdGFzZXQlMjAlM0QlMjBpc3N1ZXNfZGF0YXNldC5yZW1vdmVfY29sdW1ucyhjb2x1bW5zX3RvX3JlbW92ZSklMEFpc3N1ZXNfZGF0YXNldA==",highlighted:`columns = issues_dataset.column_names
columns_to_keep = [<span class="hljs-string">&quot;title&quot;</span>, <span class="hljs-string">&quot;body&quot;</span>, <span class="hljs-string">&quot;html_url&quot;</span>, <span class="hljs-string">&quot;comments&quot;</span>]
columns_to_remove = <span class="hljs-built_in">set</span>(columns_to_keep).symmetric_difference(columns)
issues_dataset = issues_dataset.remove_columns(columns_to_remove)
issues_dataset`,wrap:!1}}),ea=new h({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidodG1sX3VybCclMkMlMjAndGl0bGUnJTJDJTIwJ2NvbW1lbnRzJyUyQyUyMCdib2R5JyU1RCUyQyUwQSUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwNzcxJTBBJTdEKQ==",highlighted:`Dataset({
    features: [<span class="hljs-string">&#x27;html_url&#x27;</span>, <span class="hljs-string">&#x27;title&#x27;</span>, <span class="hljs-string">&#x27;comments&#x27;</span>, <span class="hljs-string">&#x27;body&#x27;</span>],
    num_rows: <span class="hljs-number">771</span>
})`,wrap:!1}}),sa=new h({props:{code:"aXNzdWVzX2RhdGFzZXQuc2V0X2Zvcm1hdCglMjJwYW5kYXMlMjIpJTBBZGYlMjAlM0QlMjBpc3N1ZXNfZGF0YXNldCU1QiUzQSU1RA==",highlighted:`issues_dataset.set_format(<span class="hljs-string">&quot;pandas&quot;</span>)
df = issues_dataset[:]`,wrap:!1}}),la=new h({props:{code:"ZGYlNUIlMjJjb21tZW50cyUyMiU1RCU1QjAlNUQudG9saXN0KCk=",highlighted:'df[<span class="hljs-string">&quot;comments&quot;</span>][<span class="hljs-number">0</span>].tolist()',wrap:!1}}),ia=new h({props:{code:"JTVCJ2tvZGUlMjBidWclMjB0ZXJsZXRhayUyMGRpJTNBJTVDciU1Q24lMjAlMjAlMjAlMjBpZiUyMGRhdGFfYXJncy50YXNrX25hbWUlMjBpcyUyMG5vdCUyME5vbmUlM0ElNUNyJTVDbiUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMyUyME1lbmd1bmR1aCUyMGRhbiUyMG1lbXVhdCUyMGRhdGFzZXQlMjBkYXJpJTIwaHViLiU1Q3IlNUNuJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwZGF0YXNldHMlMjAlM0QlMjBsb2FkX2RhdGFzZXQoJTIyZ2x1ZSUyMiUyQyUyMGRhdGFfYXJncy50YXNrX25hbWUlMkMlMjBjYWNoZV9kaXIlM0Rtb2RlbF9hcmdzLmNhY2hlX2RpciknJTJDJTBBJTIwJ0hhaSUyMCU0MGppbmVjJTJDJTVDciU1Q24lNUNyJTVDblNlc2VrYWxpJTIwa2FtaSUyMG1lbmVyaW1hJTIwJTYwQ29ubmVjdGlvbkVycm9yJTYwJTIwc2VwZXJ0aSUyMGluaSUyMGRhcmklMjBzaXR1cyUyMGdpdGh1Yi5jb20lM0ElMjBodHRwcyUzQSUyRiUyRnJhdy5naXRodWJ1c2VyY29udGVudC5jb20lNUNyJTVDbiU1Q3IlNUNuQmlhc2FueWElMkMlMjBoYWwlMjBpbmklMjBiaXNhJTIwZGlhdGFzaSUyMGRlbmdhbiUyMG1lbnVuZ2d1JTIwc2VqZW5hayUyMGRhbiUyMG1lbmNvYmElMjBrZW1iYWxpLiU1Q3IlNUNuJTVDciU1Q25CaXNha2FoJTIwQW5kYSUyMGtvbmZpcm1hc2klMjBhcGFrYWglMjBtYXNhbGFobnlhJTIwbWFzaWglMjB0ZXJqYWRpJTNGJyUyQyUwQSUyMCd0aWRhayUyMGJpc2ElMjBrb25layUyQyUyMGJhaGthbiUyMGxld2F0JTIwYnJvd3NlciUyQyUyMHRvbG9uZyUyMGRpY2VrJTIwYXBha2FoJTIwYWRhJTIwbWFzYWxhaC4nJTJDJTBBJTIwJ1NheWElMjBiaXNhJTIwbWVuZ2Frc2VzJTIwaHR0cHMlM0ElMkYlMkZyYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tJTJGaHVnZ2luZ2ZhY2UlMkZkYXRhc2V0cyUyRjEuNy4wJTJGZGF0YXNldHMlMkZnbHVlJTJGZ2x1ZS5weSUyMHRhbnBhJTIwbWFzYWxhaC4uLiclNUQ=",highlighted:`[<span class="hljs-string">&#x27;kode bug terletak di:\\r\\n    if data_args.task_name is not None:\\r\\n        # Mengunduh dan memuat dataset dari hub.\\r\\n        datasets = load_dataset(&quot;glue&quot;, data_args.task_name, cache_dir=model_args.cache_dir)&#x27;</span>,
 <span class="hljs-string">&#x27;Hai @jinec,\\r\\n\\r\\nSesekali kami menerima \`ConnectionError\` seperti ini dari situs github.com: https://raw.githubusercontent.com\\r\\n\\r\\nBiasanya, hal ini bisa diatasi dengan menunggu sejenak dan mencoba kembali.\\r\\n\\r\\nBisakah Anda konfirmasi apakah masalahnya masih terjadi?&#x27;</span>,
 <span class="hljs-string">&#x27;tidak bisa konek, bahkan lewat browser, tolong dicek apakah ada masalah.&#x27;</span>,
 <span class="hljs-string">&#x27;Saya bisa mengakses https://raw.githubusercontent.com/huggingface/datasets/1.7.0/datasets/glue/glue.py tanpa masalah...&#x27;</span>]`,wrap:!1}}),da=new h({props:{code:"Y29tbWVudHNfZGYlMjAlM0QlMjBkZi5leHBsb2RlKCUyMmNvbW1lbnRzJTIyJTJDJTIwaWdub3JlX2luZGV4JTNEVHJ1ZSklMEFjb21tZW50c19kZi5oZWFkKDQp",highlighted:`comments_df = df.explode(<span class="hljs-string">&quot;comments&quot;</span>, ignore_index=<span class="hljs-literal">True</span>)
comments_df.head(<span class="hljs-number">4</span>)`,wrap:!1}}),pa=new h({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwRGF0YXNldCUwQSUwQWNvbW1lbnRzX2RhdGFzZXQlMjAlM0QlMjBEYXRhc2V0LmZyb21fcGFuZGFzKGNvbW1lbnRzX2RmKSUwQWNvbW1lbnRzX2RhdGFzZXQ=",highlighted:`<span class="hljs-keyword">from</span> datasets <span class="hljs-keyword">import</span> Dataset

comments_dataset = Dataset.from_pandas(comments_df)
comments_dataset`,wrap:!1}}),ua=new h({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidodG1sX3VybCclMkMlMjAndGl0bGUnJTJDJTIwJ2NvbW1lbnRzJyUyQyUyMCdib2R5JyU1RCUyQyUwQSUyMCUyMCUyMCUyMG51bV9yb3dzJTNBJTIwMjg0MiUwQSU3RCk=",highlighted:`Dataset({
    features: [<span class="hljs-string">&#x27;html_url&#x27;</span>, <span class="hljs-string">&#x27;title&#x27;</span>, <span class="hljs-string">&#x27;comments&#x27;</span>, <span class="hljs-string">&#x27;body&#x27;</span>],
    num_rows: <span class="hljs-number">2842</span>
})`,wrap:!1}}),x=new At({props:{$$slots:{default:[is]},$$scope:{ctx:G}}}),ba=new h({props:{code:"Y29tbWVudHNfZGF0YXNldCUyMCUzRCUyMGNvbW1lbnRzX2RhdGFzZXQubWFwKCUwQSUyMCUyMCUyMCUyMGxhbWJkYSUyMHglM0ElMjAlN0IlMjJjb21tZW50X2xlbmd0aCUyMiUzQSUyMGxlbih4JTVCJTIyY29tbWVudHMlMjIlNUQuc3BsaXQoKSklN0QlMEEp",highlighted:`comments_dataset = comments_dataset.<span class="hljs-built_in">map</span>(
    <span class="hljs-keyword">lambda</span> x: {<span class="hljs-string">&quot;comment_length&quot;</span>: <span class="hljs-built_in">len</span>(x[<span class="hljs-string">&quot;comments&quot;</span>].split())}
)`,wrap:!1}}),ca=new h({props:{code:"Y29tbWVudHNfZGF0YXNldCUyMCUzRCUyMGNvbW1lbnRzX2RhdGFzZXQuZmlsdGVyKGxhbWJkYSUyMHglM0ElMjB4JTVCJTIyY29tbWVudF9sZW5ndGglMjIlNUQlMjAlM0UlMjAxNSklMEFjb21tZW50c19kYXRhc2V0",highlighted:`comments_dataset = comments_dataset.<span class="hljs-built_in">filter</span>(<span class="hljs-keyword">lambda</span> x: x[<span class="hljs-string">&quot;comment_length&quot;</span>] &gt; <span class="hljs-number">15</span>)
comments_dataset`,wrap:!1}}),Ja=new h({props:{code:"RGF0YXNldCglN0IlMEElMjAlMjAlMjAlMjBmZWF0dXJlcyUzQSUyMCU1QidodG1sX3VybCclMkMlMjAndGl0bGUnJTJDJTIwJ2NvbW1lbnRzJyUyQyUyMCdib2R5JyUyQyUyMCdjb21tZW50X2xlbmd0aCclNUQlMkMlMEElMjAlMjAlMjAlMjBudW1fcm93cyUzQSUyMDIwOTglMEElN0Qp",highlighted:`Dataset({
    features: [<span class="hljs-string">&#x27;html_url&#x27;</span>, <span class="hljs-string">&#x27;title&#x27;</span>, <span class="hljs-string">&#x27;comments&#x27;</span>, <span class="hljs-string">&#x27;body&#x27;</span>, <span class="hljs-string">&#x27;comment_length&#x27;</span>],
    num_rows: <span class="hljs-number">2098</span>
})`,wrap:!1}}),Ta=new h({props:{code:"ZGVmJTIwY29uY2F0ZW5hdGVfdGV4dChleGFtcGxlcyklM0ElMEElMjAlMjAlMjAlMjByZXR1cm4lMjAlN0IlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjJ0ZXh0JTIyJTNBJTIwZXhhbXBsZXMlNUIlMjJ0aXRsZSUyMiU1RCUwQSUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyMCUyQiUyMCUyMiUyMCU1Q24lMjAlMjIlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkIlMjBleGFtcGxlcyU1QiUyMmJvZHklMjIlNUQlMEElMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMkIlMjAlMjIlMjAlNUNuJTIwJTIyJTBBJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTIwJTJCJTIwZXhhbXBsZXMlNUIlMjJjb21tZW50cyUyMiU1RCUwQSUyMCUyMCUyMCUyMCU3RCUwQSUwQSUwQWNvbW1lbnRzX2RhdGFzZXQlMjAlM0QlMjBjb21tZW50c19kYXRhc2V0Lm1hcChjb25jYXRlbmF0ZV90ZXh0KQ==",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">concatenate_text</span>(<span class="hljs-params">examples</span>):
    <span class="hljs-keyword">return</span> {
        <span class="hljs-string">&quot;text&quot;</span>: examples[<span class="hljs-string">&quot;title&quot;</span>]
        + <span class="hljs-string">&quot; \\n &quot;</span>
        + examples[<span class="hljs-string">&quot;body&quot;</span>]
        + <span class="hljs-string">&quot; \\n &quot;</span>
        + examples[<span class="hljs-string">&quot;comments&quot;</span>]
    }


comments_dataset = comments_dataset.<span class="hljs-built_in">map</span>(concatenate_text)`,wrap:!1}}),ha=new La({props:{title:"Membuat Embedding Teks",local:"creating-text-embeddings",headingTag:"h2"}});const _t=[ds,ms],Fa=[];function Qt(a,e){return a[0]==="pt"?0:1}B=Qt(G),E=Fa[B]=_t[B](G),fa=new h({props:{code:"ZGVmJTIwY2xzX3Bvb2xpbmcobW9kZWxfb3V0cHV0KSUzQSUwQSUyMCUyMCUyMCUyMHJldHVybiUyMG1vZGVsX291dHB1dC5sYXN0X2hpZGRlbl9zdGF0ZSU1QiUzQSUyQyUyMDAlNUQ=",highlighted:`<span class="hljs-keyword">def</span> <span class="hljs-title function_">cls_pooling</span>(<span class="hljs-params">model_output</span>):
    <span class="hljs-keyword">return</span> model_output.last_hidden_state[:, <span class="hljs-number">0</span>]`,wrap:!1}});const Vt=[ps,rs],Sa=[];function Xt(a,e){return a[0]==="pt"?0:1}_=Xt(G),Q=Sa[_]=Vt[_](G),Za=new La({props:{title:"Menggunakan FAISS untuk pencarian kemiripan yang efisien",local:"using-faiss-for-efficient-similarity-search",headingTag:"h2"}}),Wa=new h({props:{code:"ZW1iZWRkaW5nc19kYXRhc2V0LmFkZF9mYWlzc19pbmRleChjb2x1bW4lM0QlMjJlbWJlZGRpbmdzJTIyKQ==",highlighted:'embeddings_dataset.add_faiss_index(column=<span class="hljs-string">&quot;embeddings&quot;</span>)',wrap:!1}});const Yt=[Ms,us],za=[];function xt(a,e){return a[0]==="pt"?0:1}return V=xt(G),X=za[V]=Yt[V](G),Ia=new h({props:{code:"c2NvcmVzJTJDJTIwc2FtcGxlcyUyMCUzRCUyMGVtYmVkZGluZ3NfZGF0YXNldC5nZXRfbmVhcmVzdF9leGFtcGxlcyglMEElMjAlMjAlMjAlMjAlMjJlbWJlZGRpbmdzJTIyJTJDJTIwcXVlc3Rpb25fZW1iZWRkaW5nJTJDJTIwayUzRDUlMEEp",highlighted:`scores, samples = embeddings_dataset.get_nearest_examples(
    <span class="hljs-string">&quot;embeddings&quot;</span>, question_embedding, k=<span class="hljs-number">5</span>
)`,wrap:!1}}),Ea=new h({props:{code:"aW1wb3J0JTIwcGFuZGFzJTIwYXMlMjBwZCUwQSUwQXNhbXBsZXNfZGYlMjAlM0QlMjBwZC5EYXRhRnJhbWUuZnJvbV9kaWN0KHNhbXBsZXMpJTBBc2FtcGxlc19kZiU1QiUyMnNjb3JlcyUyMiU1RCUyMCUzRCUyMHNjb3JlcyUwQXNhbXBsZXNfZGYuc29ydF92YWx1ZXMoJTIyc2NvcmVzJTIyJTJDJTIwYXNjZW5kaW5nJTNERmFsc2UlMkMlMjBpbnBsYWNlJTNEVHJ1ZSk=",highlighted:`<span class="hljs-keyword">import</span> pandas <span class="hljs-keyword">as</span> pd

samples_df = pd.DataFrame.from_dict(samples)
samples_df[<span class="hljs-string">&quot;scores&quot;</span>] = scores
samples_df.sort_values(<span class="hljs-string">&quot;scores&quot;</span>, ascending=<span class="hljs-literal">False</span>, inplace=<span class="hljs-literal">True</span>)`,wrap:!1}}),Qa=new h({props:{code:"Zm9yJTIwXyUyQyUyMHJvdyUyMGluJTIwc2FtcGxlc19kZi5pdGVycm93cygpJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMktPTUVOVEFSJTNBJTIwJTdCcm93LmNvbW1lbnRzJTdEJTIyKSUwQSUyMCUyMCUyMCUyMHByaW50KGYlMjJTS09SJTNBJTIwJTdCcm93LnNjb3JlcyU3RCUyMiklMEElMjAlMjAlMjAlMjBwcmludChmJTIySlVEVUwlM0ElMjAlN0Jyb3cudGl0bGUlN0QlMjIpJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMlVSTCUzQSUyMCU3QnJvdy5odG1sX3VybCU3RCUyMiklMEElMjAlMjAlMjAlMjBwcmludCglMjIlM0QlMjIlMjAqJTIwNTApJTBBJTIwJTIwJTIwJTIwcHJpbnQoKQ==",highlighted:`<span class="hljs-keyword">for</span> _, row <span class="hljs-keyword">in</span> samples_df.iterrows():
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;KOMENTAR: <span class="hljs-subst">{row.comments}</span>&quot;</span>)
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;SKOR: <span class="hljs-subst">{row.scores}</span>&quot;</span>)
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;JUDUL: <span class="hljs-subst">{row.title}</span>&quot;</span>)
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;URL: <span class="hljs-subst">{row.html_url}</span>&quot;</span>)
    <span class="hljs-built_in">print</span>(<span class="hljs-string">&quot;=&quot;</span> * <span class="hljs-number">50</span>)
    <span class="hljs-built_in">print</span>()`,wrap:!1}}),Va=new h({props:{code:" ",highlighted:`<span class="hljs-string">&quot;&quot;&quot;
KOMENTAR: Membutuhkan koneksi online adalah hal yang menyulitkan dalam beberapa kasus, jadi akan sangat bagus jika mode offline ditambahkan — seperti bagaimana \`transformers\` memuat model secara offline dengan baik.

Poin kedua dari @mandubian menyarankan bahwa ada solusi alternatif yang memungkinkan Anda menggunakan dataset offline (kustom?) dengan \`datasets\`. Bisakah Anda jelaskan bagaimana cara melakukannya?
SKOR: 25.505046844482422
JUDUL: Diskusi penggunaan datasets dalam mode offline
URL: https://github.com/huggingface/datasets/issues/824
==================================================

KOMENTAR: Builder dataset lokal (csv, text, json, dan pandas) sekarang sudah menjadi bagian dari paket \`datasets\` sejak #1726 :)
Sekarang Anda bisa menggunakannya secara offline
\\\`\\\`\\\`python
datasets = load_dataset(&quot;text&quot;, data_files=data_files)
\\\`\\\`\\\`

Kami akan merilis versi baru segera
SKOR: 24.555509567260742
JUDUL: Diskusi penggunaan datasets dalam mode offline
URL: https://github.com/huggingface/datasets/issues/824
==================================================

KOMENTAR: Saya membuka PR yang memungkinkan modul yang sudah pernah dimuat dapat dimuat ulang meskipun tidak ada koneksi internet.

Beri tahu saya jika Anda tahu cara lain untuk membuat pengalaman mode offline jadi lebih baik. Saya akan senang menambahkannya :)

Saya juga mencatat opsi &quot;freeze modules&quot;, untuk mencegah pembaruan modul lokal. Itu akan jadi fitur keren.

----------

&gt; Poin kedua dari @mandubian menyarankan bahwa ada solusi alternatif untuk menggunakan dataset offline (kustom?) dengan \`datasets\`. Bisakah Anda jelaskan bagaimana bentuknya?

Memang benar bahwa \`load_dataset\` memungkinkan untuk memuat skrip dataset jarak jauh (squad, glue, dll.) tetapi juga yang lokal.
Misalnya jika Anda punya skrip dataset di \`./my_dataset/my_dataset.py\` maka Anda bisa jalankan
\\\`\\\`\\\`python
load_dataset(&quot;./my_dataset&quot;)
\\\`\\\`\\\`
dan skrip dataset tersebut akan menghasilkan dataset Anda secara permanen.

----------

Saya sedang meneliti agar builder dataset \`csv\`, \`json\`, \`text\`, \`pandas\` sudah termasuk dalam paket \`datasets\`, supaya tersedia offline secara default — berbeda dengan dataset lain yang masih perlu mengunduh skrip.
lihat #1724
SKOR: 24.14896583557129
JUDUL: Diskusi penggunaan datasets dalam mode offline
URL: https://github.com/huggingface/datasets/issues/824
==================================================

KOMENTAR: &gt; ini adalah cara saya untuk memuat dataset secara offline, tetapi **memerlukan** mesin yang terhubung ke internet
&gt;
&gt; 1. (mesin yang online)
&gt;
&gt; \`\`\`
&gt;
&gt; import datasets
&gt;
&gt; data = datasets.load_dataset(...)
&gt;
&gt; data.save_to_disk(/DIREKTORI/DATASET/ANDA)
&gt;
&gt; \`\`\`
&gt;
&gt; 2. salin direktori dari mesin online ke mesin offline
&gt;
&gt; 3. (mesin offline)
&gt;
&gt; \`\`\`
&gt;
&gt; import datasets
&gt;
&gt; data = datasets.load_from_disk(/DIREKTORI/DATA/YANG/DISIMPAN)
&gt;
&gt; \`\`\`
&gt;
&gt;
&gt;
&gt; Semoga membantu.

SKOR: 22.893993377685547  
JUDUL: Diskusi penggunaan datasets dalam mode offline
URL: https://github.com/huggingface/datasets/issues/824
==================================================

KOMENTAR: Berikut cara saya memuat dataset secara offline, tapi **memerlukan** mesin yang terhubung ke internet
1. (mesin online)
\\\`\\\`\\\`
import datasets
data = datasets.load_dataset(...)
data.save_to_disk(/YOUR/DATASET/DIR)
\\\`\\\`\\\`
2. salin direktori dari mesin online ke mesin offline
3. (mesin offline)
\\\`\\\`\\\`
import datasets
data = datasets.load_from_disk(/SAVED/DATA/DIR)
\\\`\\\`\\\`

Semoga membantu.
SKOR: 22.406635284423828
JUDUL: Diskusi penggunaan datasets dalam mode offline
URL: https://github.com/huggingface/datasets/issues/824
==================================================
&quot;&quot;&quot;</span>`,wrap:!1}}),F=new At({props:{$$slots:{default:[ks]},$$scope:{ctx:G}}}),Ya=new ss({props:{source:"https://github.com/huggingface/course/blob/main/chapters/id/chapter5/6.mdx"}}),{c(){n=T("meta"),M=m(),l=T("p"),g=m(),b(r.$$.fragment),k=m(),b(Z.$$.fragment),y=m(),N.c(),$=m(),W=T("p"),W.innerHTML=C,R=m(),b(i.$$.fragment),f=m(),b(S.$$.fragment),Ka=m(),z=T("p"),z.innerHTML=mt,Pa=m(),v=T("p"),v.textContent=dt,Oa=m(),Y=T("div"),Y.innerHTML=rt,ae=m(),b(A.$$.fragment),ee=m(),H=T("p"),H.innerHTML=pt,te=m(),b(q.$$.fragment),se=m(),b(D.$$.fragment),ne=m(),L=T("p"),L.innerHTML=ut,le=m(),b(K.$$.fragment),ie=m(),b(P.$$.fragment),me=m(),O=T("p"),O.innerHTML=Mt,de=m(),b(aa.$$.fragment),re=m(),b(ea.$$.fragment),pe=m(),ta=T("p"),ta.innerHTML=kt,ue=m(),b(sa.$$.fragment),Me=m(),na=T("p"),na.innerHTML=bt,ke=m(),b(la.$$.fragment),be=m(),b(ia.$$.fragment),oe=m(),ma=T("p"),ma.innerHTML=ot,ce=m(),b(da.$$.fragment),Je=m(),I=T("table"),I.innerHTML=ct,ye=m(),ra=T("p"),ra.innerHTML=Jt,Te=m(),b(pa.$$.fragment),Ue=m(),b(ua.$$.fragment),he=m(),Ma=T("p"),Ma.textContent=yt,ge=m(),b(x.$$.fragment),je=m(),ka=T("p"),ka.innerHTML=Tt,fe=m(),b(ba.$$.fragment),we=m(),oa=T("p"),oa.textContent=Ut,Ne=m(),b(ca.$$.fragment),Ze=m(),b(Ja.$$.fragment),Ge=m(),ya=T("p"),ya.innerHTML=ht,Ce=m(),b(Ta.$$.fragment),We=m(),Ua=T("p"),Ua.textContent=gt,Re=m(),b(ha.$$.fragment),$e=m(),ga=T("p"),ga.innerHTML=jt,Ie=m(),E.c(),va=m(),ja=T("p"),ja.textContent=ft,Be=m(),b(fa.$$.fragment),Ee=m(),wa=T("p"),wa.innerHTML=wt,_e=m(),Q.c(),Aa=m(),Na=T("p"),Na.textContent=Nt,Qe=m(),b(Za.$$.fragment),Ve=m(),Ga=T("p"),Ga.innerHTML=Zt,Xe=m(),Ca=T("p"),Ca.innerHTML=Gt,Ye=m(),b(Wa.$$.fragment),xe=m(),Ra=T("p"),Ra.innerHTML=Ct,Fe=m(),X.c(),Ha=m(),$a=T("p"),$a.textContent=Wt,Se=m(),b(Ia.$$.fragment),ze=m(),Ba=T("p"),Ba.innerHTML=Rt,ve=m(),b(Ea.$$.fragment),Ae=m(),_a=T("p"),_a.textContent=$t,He=m(),b(Qa.$$.fragment),qe=m(),b(Va.$$.fragment),De=m(),Xa=T("p"),Xa.textContent=It,Le=m(),b(F.$$.fragment),Ke=m(),b(Ya.$$.fragment),Pe=m(),qa=T("p"),this.h()},l(a){const e=Ot("svelte-u9bgzb",document.head);n=U(e,"META",{name:!0,content:!0}),e.forEach(t),M=d(a),l=U(a,"P",{}),vt(l).forEach(t),g=d(a),o(r.$$.fragment,a),k=d(a),o(Z.$$.fragment,a),y=d(a),N.l(a),$=d(a),W=U(a,"P",{"data-svelte-h":!0}),j(W)!=="svelte-4so45j"&&(W.innerHTML=C),R=d(a),o(i.$$.fragment,a),f=d(a),o(S.$$.fragment,a),Ka=d(a),z=U(a,"P",{"data-svelte-h":!0}),j(z)!=="svelte-1bmlxz"&&(z.innerHTML=mt),Pa=d(a),v=U(a,"P",{"data-svelte-h":!0}),j(v)!=="svelte-i5pq0r"&&(v.textContent=dt),Oa=d(a),Y=U(a,"DIV",{class:!0,"data-svelte-h":!0}),j(Y)!=="svelte-riqps5"&&(Y.innerHTML=rt),ae=d(a),o(A.$$.fragment,a),ee=d(a),H=U(a,"P",{"data-svelte-h":!0}),j(H)!=="svelte-1153oa3"&&(H.innerHTML=pt),te=d(a),o(q.$$.fragment,a),se=d(a),o(D.$$.fragment,a),ne=d(a),L=U(a,"P",{"data-svelte-h":!0}),j(L)!=="svelte-12eofec"&&(L.innerHTML=ut),le=d(a),o(K.$$.fragment,a),ie=d(a),o(P.$$.fragment,a),me=d(a),O=U(a,"P",{"data-svelte-h":!0}),j(O)!=="svelte-1vls9az"&&(O.innerHTML=Mt),de=d(a),o(aa.$$.fragment,a),re=d(a),o(ea.$$.fragment,a),pe=d(a),ta=U(a,"P",{"data-svelte-h":!0}),j(ta)!=="svelte-br76tp"&&(ta.innerHTML=kt),ue=d(a),o(sa.$$.fragment,a),Me=d(a),na=U(a,"P",{"data-svelte-h":!0}),j(na)!=="svelte-69gbu8"&&(na.innerHTML=bt),ke=d(a),o(la.$$.fragment,a),be=d(a),o(ia.$$.fragment,a),oe=d(a),ma=U(a,"P",{"data-svelte-h":!0}),j(ma)!=="svelte-foklvq"&&(ma.innerHTML=ot),ce=d(a),o(da.$$.fragment,a),Je=d(a),I=U(a,"TABLE",{border:!0,class:!0,style:!0,"data-svelte-h":!0}),j(I)!=="svelte-1s5esfi"&&(I.innerHTML=ct),ye=d(a),ra=U(a,"P",{"data-svelte-h":!0}),j(ra)!=="svelte-w5sxd2"&&(ra.innerHTML=Jt),Te=d(a),o(pa.$$.fragment,a),Ue=d(a),o(ua.$$.fragment,a),he=d(a),Ma=U(a,"P",{"data-svelte-h":!0}),j(Ma)!=="svelte-1803dtq"&&(Ma.textContent=yt),ge=d(a),o(x.$$.fragment,a),je=d(a),ka=U(a,"P",{"data-svelte-h":!0}),j(ka)!=="svelte-1srfkd0"&&(ka.innerHTML=Tt),fe=d(a),o(ba.$$.fragment,a),we=d(a),oa=U(a,"P",{"data-svelte-h":!0}),j(oa)!=="svelte-ho3t4p"&&(oa.textContent=Ut),Ne=d(a),o(ca.$$.fragment,a),Ze=d(a),o(Ja.$$.fragment,a),Ge=d(a),ya=U(a,"P",{"data-svelte-h":!0}),j(ya)!=="svelte-14id6zy"&&(ya.innerHTML=ht),Ce=d(a),o(Ta.$$.fragment,a),We=d(a),Ua=U(a,"P",{"data-svelte-h":!0}),j(Ua)!=="svelte-jrw0mf"&&(Ua.textContent=gt),Re=d(a),o(ha.$$.fragment,a),$e=d(a),ga=U(a,"P",{"data-svelte-h":!0}),j(ga)!=="svelte-8cg0i2"&&(ga.innerHTML=jt),Ie=d(a),E.l(a),va=d(a),ja=U(a,"P",{"data-svelte-h":!0}),j(ja)!=="svelte-12kl0sx"&&(ja.textContent=ft),Be=d(a),o(fa.$$.fragment,a),Ee=d(a),wa=U(a,"P",{"data-svelte-h":!0}),j(wa)!=="svelte-r5hf90"&&(wa.innerHTML=wt),_e=d(a),Q.l(a),Aa=d(a),Na=U(a,"P",{"data-svelte-h":!0}),j(Na)!=="svelte-2304sx"&&(Na.textContent=Nt),Qe=d(a),o(Za.$$.fragment,a),Ve=d(a),Ga=U(a,"P",{"data-svelte-h":!0}),j(Ga)!=="svelte-1rbpw2b"&&(Ga.innerHTML=Zt),Xe=d(a),Ca=U(a,"P",{"data-svelte-h":!0}),j(Ca)!=="svelte-1nx7oga"&&(Ca.innerHTML=Gt),Ye=d(a),o(Wa.$$.fragment,a),xe=d(a),Ra=U(a,"P",{"data-svelte-h":!0}),j(Ra)!=="svelte-r0ou10"&&(Ra.innerHTML=Ct),Fe=d(a),X.l(a),Ha=d(a),$a=U(a,"P",{"data-svelte-h":!0}),j($a)!=="svelte-1qvddx7"&&($a.textContent=Wt),Se=d(a),o(Ia.$$.fragment,a),ze=d(a),Ba=U(a,"P",{"data-svelte-h":!0}),j(Ba)!=="svelte-174as1p"&&(Ba.innerHTML=Rt),ve=d(a),o(Ea.$$.fragment,a),Ae=d(a),_a=U(a,"P",{"data-svelte-h":!0}),j(_a)!=="svelte-9rjm6g"&&(_a.textContent=$t),He=d(a),o(Qa.$$.fragment,a),qe=d(a),o(Va.$$.fragment,a),De=d(a),Xa=U(a,"P",{"data-svelte-h":!0}),j(Xa)!=="svelte-imonpv"&&(Xa.textContent=It),Le=d(a),o(F.$$.fragment,a),Ke=d(a),o(Ya.$$.fragment,a),Pe=d(a),qa=U(a,"P",{}),vt(qa).forEach(t),this.h()},h(){Da(n,"name","hf:doc:metadata"),Da(n,"content",os),Da(Y,"class","flex justify-center"),Da(I,"border","1"),Da(I,"class","dataframe"),it(I,"table-layout","fixed"),it(I,"word-wrap","break-word"),it(I,"width","100%")},m(a,e){as(document.head,n),s(a,M,e),s(a,l,e),s(a,g,e),c(r,a,e),s(a,k,e),c(Z,a,e),s(a,y,e),xa[w].m(a,e),s(a,$,e),s(a,W,e),s(a,R,e),c(i,a,e),s(a,f,e),c(S,a,e),s(a,Ka,e),s(a,z,e),s(a,Pa,e),s(a,v,e),s(a,Oa,e),s(a,Y,e),s(a,ae,e),c(A,a,e),s(a,ee,e),s(a,H,e),s(a,te,e),c(q,a,e),s(a,se,e),c(D,a,e),s(a,ne,e),s(a,L,e),s(a,le,e),c(K,a,e),s(a,ie,e),c(P,a,e),s(a,me,e),s(a,O,e),s(a,de,e),c(aa,a,e),s(a,re,e),c(ea,a,e),s(a,pe,e),s(a,ta,e),s(a,ue,e),c(sa,a,e),s(a,Me,e),s(a,na,e),s(a,ke,e),c(la,a,e),s(a,be,e),c(ia,a,e),s(a,oe,e),s(a,ma,e),s(a,ce,e),c(da,a,e),s(a,Je,e),s(a,I,e),s(a,ye,e),s(a,ra,e),s(a,Te,e),c(pa,a,e),s(a,Ue,e),c(ua,a,e),s(a,he,e),s(a,Ma,e),s(a,ge,e),c(x,a,e),s(a,je,e),s(a,ka,e),s(a,fe,e),c(ba,a,e),s(a,we,e),s(a,oa,e),s(a,Ne,e),c(ca,a,e),s(a,Ze,e),c(Ja,a,e),s(a,Ge,e),s(a,ya,e),s(a,Ce,e),c(Ta,a,e),s(a,We,e),s(a,Ua,e),s(a,Re,e),c(ha,a,e),s(a,$e,e),s(a,ga,e),s(a,Ie,e),Fa[B].m(a,e),s(a,va,e),s(a,ja,e),s(a,Be,e),c(fa,a,e),s(a,Ee,e),s(a,wa,e),s(a,_e,e),Sa[_].m(a,e),s(a,Aa,e),s(a,Na,e),s(a,Qe,e),c(Za,a,e),s(a,Ve,e),s(a,Ga,e),s(a,Xe,e),s(a,Ca,e),s(a,Ye,e),c(Wa,a,e),s(a,xe,e),s(a,Ra,e),s(a,Fe,e),za[V].m(a,e),s(a,Ha,e),s(a,$a,e),s(a,Se,e),c(Ia,a,e),s(a,ze,e),s(a,Ba,e),s(a,ve,e),c(Ea,a,e),s(a,Ae,e),s(a,_a,e),s(a,He,e),c(Qa,a,e),s(a,qe,e),c(Va,a,e),s(a,De,e),s(a,Xa,e),s(a,Le,e),c(F,a,e),s(a,Ke,e),c(Ya,a,e),s(a,Pe,e),s(a,qa,e),Oe=!0},p(a,[e]){const Ft={};e&1&&(Ft.fw=a[0]),r.$set(Ft);let tt=w;w=Et(a),w!==tt&&(et(),p(xa[tt],1,1,()=>{xa[tt]=null}),at(),N=xa[w],N||(N=xa[w]=Bt[w](a),N.c()),u(N,1),N.m($.parentNode,$));const St={};e&2&&(St.$$scope={dirty:e,ctx:a}),x.$set(St);let st=B;B=Qt(a),B!==st&&(et(),p(Fa[st],1,1,()=>{Fa[st]=null}),at(),E=Fa[B],E||(E=Fa[B]=_t[B](a),E.c()),u(E,1),E.m(va.parentNode,va));let nt=_;_=Xt(a),_!==nt&&(et(),p(Sa[nt],1,1,()=>{Sa[nt]=null}),at(),Q=Sa[_],Q||(Q=Sa[_]=Vt[_](a),Q.c()),u(Q,1),Q.m(Aa.parentNode,Aa));let lt=V;V=xt(a),V!==lt&&(et(),p(za[lt],1,1,()=>{za[lt]=null}),at(),X=za[V],X||(X=za[V]=Yt[V](a),X.c()),u(X,1),X.m(Ha.parentNode,Ha));const zt={};e&2&&(zt.$$scope={dirty:e,ctx:a}),F.$set(zt)},i(a){Oe||(u(r.$$.fragment,a),u(Z.$$.fragment,a),u(N),u(i.$$.fragment,a),u(S.$$.fragment,a),u(A.$$.fragment,a),u(q.$$.fragment,a),u(D.$$.fragment,a),u(K.$$.fragment,a),u(P.$$.fragment,a),u(aa.$$.fragment,a),u(ea.$$.fragment,a),u(sa.$$.fragment,a),u(la.$$.fragment,a),u(ia.$$.fragment,a),u(da.$$.fragment,a),u(pa.$$.fragment,a),u(ua.$$.fragment,a),u(x.$$.fragment,a),u(ba.$$.fragment,a),u(ca.$$.fragment,a),u(Ja.$$.fragment,a),u(Ta.$$.fragment,a),u(ha.$$.fragment,a),u(E),u(fa.$$.fragment,a),u(Q),u(Za.$$.fragment,a),u(Wa.$$.fragment,a),u(X),u(Ia.$$.fragment,a),u(Ea.$$.fragment,a),u(Qa.$$.fragment,a),u(Va.$$.fragment,a),u(F.$$.fragment,a),u(Ya.$$.fragment,a),Oe=!0)},o(a){p(r.$$.fragment,a),p(Z.$$.fragment,a),p(N),p(i.$$.fragment,a),p(S.$$.fragment,a),p(A.$$.fragment,a),p(q.$$.fragment,a),p(D.$$.fragment,a),p(K.$$.fragment,a),p(P.$$.fragment,a),p(aa.$$.fragment,a),p(ea.$$.fragment,a),p(sa.$$.fragment,a),p(la.$$.fragment,a),p(ia.$$.fragment,a),p(da.$$.fragment,a),p(pa.$$.fragment,a),p(ua.$$.fragment,a),p(x.$$.fragment,a),p(ba.$$.fragment,a),p(ca.$$.fragment,a),p(Ja.$$.fragment,a),p(Ta.$$.fragment,a),p(ha.$$.fragment,a),p(E),p(fa.$$.fragment,a),p(Q),p(Za.$$.fragment,a),p(Wa.$$.fragment,a),p(X),p(Ia.$$.fragment,a),p(Ea.$$.fragment,a),p(Qa.$$.fragment,a),p(Va.$$.fragment,a),p(F.$$.fragment,a),p(Ya.$$.fragment,a),Oe=!1},d(a){a&&(t(M),t(l),t(g),t(k),t(y),t($),t(W),t(R),t(f),t(Ka),t(z),t(Pa),t(v),t(Oa),t(Y),t(ae),t(ee),t(H),t(te),t(se),t(ne),t(L),t(le),t(ie),t(me),t(O),t(de),t(re),t(pe),t(ta),t(ue),t(Me),t(na),t(ke),t(be),t(oe),t(ma),t(ce),t(Je),t(I),t(ye),t(ra),t(Te),t(Ue),t(he),t(Ma),t(ge),t(je),t(ka),t(fe),t(we),t(oa),t(Ne),t(Ze),t(Ge),t(ya),t(Ce),t(We),t(Ua),t(Re),t($e),t(ga),t(Ie),t(va),t(ja),t(Be),t(Ee),t(wa),t(_e),t(Aa),t(Na),t(Qe),t(Ve),t(Ga),t(Xe),t(Ca),t(Ye),t(xe),t(Ra),t(Fe),t(Ha),t($a),t(Se),t(ze),t(Ba),t(ve),t(Ae),t(_a),t(He),t(qe),t(De),t(Xa),t(Le),t(Ke),t(Pe),t(qa)),t(n),J(r,a),J(Z,a),xa[w].d(a),J(i,a),J(S,a),J(A,a),J(q,a),J(D,a),J(K,a),J(P,a),J(aa,a),J(ea,a),J(sa,a),J(la,a),J(ia,a),J(da,a),J(pa,a),J(ua,a),J(x,a),J(ba,a),J(ca,a),J(Ja,a),J(Ta,a),J(ha,a),Fa[B].d(a),J(fa,a),Sa[_].d(a),J(Za,a),J(Wa,a),za[V].d(a),J(Ia,a),J(Ea,a),J(Qa,a),J(Va,a),J(F,a),J(Ya,a)}}}const os='{"title":"Pencarian Semantik dengan FAISS","local":"semantic-search-with-faiss","sections":[{"title":"Menggunakan Embedding untuk Pencarian Semantik","local":"using-embeddings-for-semantic-search","sections":[],"depth":2},{"title":"Memuat dan Menyiapkan Dataset","local":"loading-and-preparing-the-dataset","sections":[],"depth":2},{"title":"Membuat Embedding Teks","local":"creating-text-embeddings","sections":[],"depth":2},{"title":"Menggunakan FAISS untuk pencarian kemiripan yang efisien","local":"using-faiss-for-efficient-similarity-search","sections":[],"depth":2}],"depth":1}';function cs(G,n,M){let l="pt";return Lt(()=>{const g=new URLSearchParams(window.location.search);M(0,l=g.get("fw")||"pt")}),[l]}class ws extends Kt{constructor(n){super(),Pt(this,n,cs,bs,Dt,{})}}export{ws as component};
