import{s as ls,o as ns,n as On}from"../chunks/scheduler.37c15a92.js";import{S as ss,i as es,g as b,s as i,r,A as as,h as J,f as n,c as M,j as Kn,u,x as j,k as Kt,l as mn,y as cs,a as s,v as y,t as p,b as en,d as m,w as g,p as an}from"../chunks/index.2bf4358c.js";import{T as Pn}from"../chunks/Tip.363c041f.js";import{Y as is}from"../chunks/Youtube.1e50a667.js";import{C as T}from"../chunks/CodeBlock.4f5fc1ad.js";import{C as ts}from"../chunks/CourseFloatingBanner.06521e8b.js";import{F as Ms}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Pt,E as hs}from"../chunks/EditOnGithub.8916dc7c.js";function ps(k){let e,d;return e=new ts({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/vi/chapter5/section6_tf.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/vi/chapter5/section6_tf.ipynb"}]}}),{c(){r(e.$$.fragment)},l(a){u(e.$$.fragment,a)},m(a,w){y(e,a,w),d=!0},i(a){d||(m(e.$$.fragment,a),d=!0)},o(a){p(e.$$.fragment,a),d=!1},d(a){g(e,a)}}}function ms(k){let e,d;return e=new ts({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/vi/chapter5/section6_pt.ipynb"},{label:"Aws Studio",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/vi/chapter5/section6_pt.ipynb"}]}}),{c(){r(e.$$.fragment)},l(a){u(e.$$.fragment,a)},m(a,w){y(e,a,w),d=!0},i(a){d||(m(e.$$.fragment,a),d=!0)},o(a){p(e.$$.fragment,a),d=!1},d(a){g(e,a)}}}function ds(k){let e,d='✏️ <strong>Thử nghiệm thôi!</strong> Cùng xem liệu bạn có thể sử dụng <code>Dataset.map()</code> để khám phá cột <code>comments</code> của <code>issues_dataset</code> <em>mà không cần</em> sử dụng Pandas hay không. Nó sẽ hơi khó khăn một chút; bạn có thể xem phần <a href="https://huggingface.co/docs/datasets/about_map_batch#batch-mapping" rel="nofollow">“Batch mapping”</a> của tài liệu 🤗 Datasets, một tài liệu hữu ích cho tác vụ này.';return{c(){e=b("p"),e.innerHTML=d},l(a){e=J(a,"P",{"data-svelte-h":!0}),j(e)!=="svelte-1bngzpp"&&(e.innerHTML=d)},m(a,w){s(a,e,w)},p:On,d(a){a&&n(e)}}}function os(k){let e,d,a,w="Lưu ý rằng chúng ta đặt <code>from_pt=True</code> như một tham số của phương thức <code>from_pretrained()</code>. Điều này là bởi checkpoint <code>multi-qa-mpnet-base-dot-v1</code> chỉ có trọng số Pytorch, vì vậy thiết lập <code>from_pt=True</code> sẽ tự động chuyển chúng về định dạng TensorFlow cho chúng ta. Như có thể thấy, nó rất đơn giản để chuyển giữa hai khung này trong 🤗 Transformers!",h;return e=new T({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(){r(e.$$.fragment),d=i(),a=b("p"),a.innerHTML=w},l(o){u(e.$$.fragment,o),d=M(o),a=J(o,"P",{"data-svelte-h":!0}),j(a)!=="svelte-1sfsjzw"&&(a.innerHTML=w)},m(o,G){y(e,o,G),s(o,d,G),s(o,a,G),h=!0},i(o){h||(m(e.$$.fragment,o),h=!0)},o(o){p(e.$$.fragment,o),h=!1},d(o){o&&(n(d),n(a)),g(e,o)}}}function rs(k){let e,d,a,w="Để tăng tốc quá trình biểu diễn, ta sẽ giúp đặt mô hình và đầu vào trên thiết bị GPU, vì vậy hãy làm điều đó ngay bây giờ thôi:",h,o,G;return e=new T({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}}),o=new T({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(){r(e.$$.fragment),d=i(),a=b("p"),a.textContent=w,h=i(),r(o.$$.fragment)},l(U){u(e.$$.fragment,U),d=M(U),a=J(U,"P",{"data-svelte-h":!0}),j(a)!=="svelte-1uiwaat"&&(a.textContent=w),h=M(U),u(o.$$.fragment,U)},m(U,Q){y(e,U,Q),s(U,d,Q),s(U,a,Q),s(U,h,Q),y(o,U,Q),G=!0},i(U){G||(m(e.$$.fragment,U),m(o.$$.fragment,U),G=!0)},o(U){p(e.$$.fragment,U),p(o.$$.fragment,U),G=!1},d(U){U&&(n(d),n(a),n(h)),g(e,U),g(o,U)}}}function us(k){let e,d,a,w="Chúng tôi có thể kiểm tra hàm có hoạt động không bằng cách cung cấp cho nó văn bản đầu tiên trong kho tài liệu và kiểm tra hình dạng đầu ra:",h,o,G,U,Q,Z,v="Tuyệt vời, chúng ta đã chuyển đổi mục nhập đầu tiên trong kho tài liệu của mình thành một vectơ 768 chiều! Chúng ta có thể sử dụng <code>Dataset.map()</code> để áp dụng hàm <code>get_embeddings()</code> cho mỗi hàng trong kho tài liệu của mình, vì vậy hãy tạo một cột <code>embeddings</code> mới như sau:",I,C,$;return e=new T({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}}),o=new T({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}}),U=new T({props:{code:"VGVuc29yU2hhcGUoJTVCMSUyQyUyMDc2OCU1RCk=",highlighted:'TensorShape([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),C=new T({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(){r(e.$$.fragment),d=i(),a=b("p"),a.textContent=w,h=i(),r(o.$$.fragment),G=i(),r(U.$$.fragment),Q=i(),Z=b("p"),Z.innerHTML=v,I=i(),r(C.$$.fragment)},l(c){u(e.$$.fragment,c),d=M(c),a=J(c,"P",{"data-svelte-h":!0}),j(a)!=="svelte-9shedj"&&(a.textContent=w),h=M(c),u(o.$$.fragment,c),G=M(c),u(U.$$.fragment,c),Q=M(c),Z=J(c,"P",{"data-svelte-h":!0}),j(Z)!=="svelte-w4nr22"&&(Z.innerHTML=v),I=M(c),u(C.$$.fragment,c)},m(c,f){y(e,c,f),s(c,d,f),s(c,a,f),s(c,h,f),y(o,c,f),s(c,G,f),y(U,c,f),s(c,Q,f),s(c,Z,f),s(c,I,f),y(C,c,f),$=!0},i(c){$||(m(e.$$.fragment,c),m(o.$$.fragment,c),m(U.$$.fragment,c),m(C.$$.fragment,c),$=!0)},o(c){p(e.$$.fragment,c),p(o.$$.fragment,c),p(U.$$.fragment,c),p(C.$$.fragment,c),$=!1},d(c){c&&(n(d),n(a),n(h),n(G),n(Q),n(Z),n(I)),g(e,c),g(o,c),g(U,c),g(C,c)}}}function ys(k){let e,d,a,w="Chúng ta có thể kiểm tra chức năng hoạt động bằng cách cung cấp cho nó đoạn văn bản đầu tiên trong kho tài liệu và kiểm tra hình dạng đầu ra:",h,o,G,U,Q,Z,v="Tuyệt vời, chúng ta đã chuyển đổi mục nhập đầu tiên trong kho tài liệu của mình thành một vectơ 768 chiều! Chúng ta có thể sử dụng <code>Dataset.map()</code> để áp dụng hàm <code>get_embeddings()</code> cho mỗi hàng trong kho tài liệu của mình, vì vậy hãy tạo một cột <code>embeddings</code> mới như sau:",I,C,$;return e=new T({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}}),o=new T({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}}),U=new T({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNzY4JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),C=new T({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(){r(e.$$.fragment),d=i(),a=b("p"),a.textContent=w,h=i(),r(o.$$.fragment),G=i(),r(U.$$.fragment),Q=i(),Z=b("p"),Z.innerHTML=v,I=i(),r(C.$$.fragment)},l(c){u(e.$$.fragment,c),d=M(c),a=J(c,"P",{"data-svelte-h":!0}),j(a)!=="svelte-h4j4tk"&&(a.textContent=w),h=M(c),u(o.$$.fragment,c),G=M(c),u(U.$$.fragment,c),Q=M(c),Z=J(c,"P",{"data-svelte-h":!0}),j(Z)!=="svelte-w4nr22"&&(Z.innerHTML=v),I=M(c),u(C.$$.fragment,c)},m(c,f){y(e,c,f),s(c,d,f),s(c,a,f),s(c,h,f),y(o,c,f),s(c,G,f),y(U,c,f),s(c,Q,f),s(c,Z,f),s(c,I,f),y(C,c,f),$=!0},i(c){$||(m(e.$$.fragment,c),m(o.$$.fragment,c),m(U.$$.fragment,c),m(C.$$.fragment,c),$=!0)},o(c){p(e.$$.fragment,c),p(o.$$.fragment,c),p(U.$$.fragment,c),p(C.$$.fragment,c),$=!1},d(c){c&&(n(d),n(a),n(h),n(G),n(Q),n(Z),n(I)),g(e,c),g(o,c),g(U,c),g(C,c)}}}function gs(k){let e,d,a,w;return e=new T({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}}),a=new T({props:{code:"KDElMkMlMjA3Njgp",highlighted:'(<span class="hljs-number">1</span>, <span class="hljs-number">768</span>)',wrap:!1}}),{c(){r(e.$$.fragment),d=i(),r(a.$$.fragment)},l(h){u(e.$$.fragment,h),d=M(h),u(a.$$.fragment,h)},m(h,o){y(e,h,o),s(h,d,o),y(a,h,o),w=!0},i(h){w||(m(e.$$.fragment,h),m(a.$$.fragment,h),w=!0)},o(h){p(e.$$.fragment,h),p(a.$$.fragment,h),w=!1},d(h){h&&n(d),g(e,h),g(a,h)}}}function Us(k){let e,d,a,w;return e=new T({props:{code:"cXVlc3Rpb24lMjAlM0QlMjAlMjJIb3clMjBjYW4lMjBJJTIwbG9hZCUyMGElMjBkYXRhc2V0JTIwb2ZmbGluZSUzRiUyMiUwQXF1ZXN0aW9uX2VtYmVkZGluZyUyMCUzRCUyMGdldF9lbWJlZGRpbmdzKCU1QnF1ZXN0aW9uJTVEKS5jcHUoKS5kZXRhY2goKS5udW1weSgpJTBBcXVlc3Rpb25fZW1iZWRkaW5nLnNoYXBl",highlighted:`question = <span class="hljs-string">&quot;How can I load a dataset offline?&quot;</span>
question_embedding = get_embeddings([question]).cpu().detach().numpy()
question_embedding.shape`,wrap:!1}}),a=new T({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNzY4JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),{c(){r(e.$$.fragment),d=i(),r(a.$$.fragment)},l(h){u(e.$$.fragment,h),d=M(h),u(a.$$.fragment,h)},m(h,o){y(e,h,o),s(h,d,o),y(a,h,o),w=!0},i(h){w||(m(e.$$.fragment,h),m(a.$$.fragment,h),w=!0)},o(h){p(e.$$.fragment,h),p(a.$$.fragment,h),w=!1},d(h){h&&n(d),g(e,h),g(a,h)}}}function bs(k){let e,d="✏️ <strong>Thử nghiệm thôi!</strong> Tạo truy vấn của riêng bạn và xem liệu bạn có thể tìm thấy câu trả lời trong các tài liệu đã truy xuất hay không. Bạn có thể phải tăng tham số <code>k</code> trong <code>Dataset.get_nearest_examples()</code> để mở rộng tìm kiếm.";return{c(){e=b("p"),e.innerHTML=d},l(a){e=J(a,"P",{"data-svelte-h":!0}),j(e)!=="svelte-5w1wgf"&&(e.innerHTML=d)},m(a,w){s(a,e,w)},p:On,d(a){a&&n(e)}}}function Js(k){let e,d,a,w,h,o,G,U,Q,Z,v,I,C='Trong <a href="/course/chapter5/5">phần 5</a>, chúng ta đã tạo tập dữ liệu về các vấn đề GitHub và nhận xét từ kho lưu trữ 🤗 Datasets. Trong phần này, chúng ta sẽ sử dụng thông tin này để xây dựng một công cụ tìm kiếm có thể giúp ta tìm câu trả lời cho những câu hỏi cấp bách nhất về thư viện!',$,c,f,S,Ot,F,dn='Như chúng ta đã thấy trong <a href="/course/chapter1">Chương 1</a>, các mô hình ngôn ngữ dựa trên Transformer đại diện cho mỗi token trong một khoảng văn bản dưới dạng một <em>vector nhugns biểu diễn từ</em>. Hóa ra người ta có thể “gộp” các biểu diễn riêng lẻ để tạo biểu diễn vectơ cho toàn bộ câu, đoạn văn hoặc toàn bộ (trong một số trường hợp) tài liệu. Sau đó, các phép nhúng này có thể được sử dụng để tìm các tài liệu tương tự trong kho tài liệu bằng cách tính toán độ tương tự của sản phẩm (hoặc một số chỉ số tương tự khác) giữa mỗi biễu diễn và trả về các tài liệu có độ tương đồng lớn nhất.',tl,E,on="Trong phần này, chúng ta sẽ sử dụng các biểu diễn từ để phát triển một công cụ tìm kiếm ngữ nghĩa. Các công cụ tìm kiếm này cung cấp một số lợi thế so với các phương pháp tiếp cận thông thường dựa trên việc kết hợp các từ khóa trong một truy vấn với các tài liệu.",ll,W,rn='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter5/semantic-search.svg" alt="Semantic search."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter5/semantic-search-dark.svg" alt="Semantic search."/>',nl,H,sl,A,un="Điều đầu tiên chúng ta cần làm là tải xuống tập dữ liệu về các sự cố GitHub, vì vậy hãy sử dụng thư viện 🤗 Hub để giải quyết URL nơi tệp của chúng ta được lưu trữ trên Hugging Face Hub:",el,q,al,D,yn='Với URL được lưu trữ trong <code>data_files</code>, sau đó chúng ta có thể tải tập dữ liệu từ xa bằng phương pháp đã được giới thiệu trong <a href="/course/chapter5/2">phần 2</a>:',cl,L,il,K,Ml,P,gn="Ở đây chúng ta đã chỉ định tách <code>train</code> mặc định trong <code>load_dataset()</code>, vì vậy nó trả về một <code>Dataset</code> thay vì <code>DatasetDict</code>. Trình tự đầu tiên của doanh nghiệp là lọc ra các yêu cầu kéo, vì những yêu cầu này có xu hướng hiếm khi được sử dụng để trả lời các truy vấn của người dùng và sẽ tạo ra nhiễu trong công cụ tìm kiếm mình. Chúng ta có thể sử dụng hàm <code>Dataset.filter()</code> đã quen thuộc với bạn để loại trừ các hàng này trong tập dữ liệu của mình. Cùng lúc đó, hãy cùng lọc ra các hàng không có nhận xét, vì những hàng này không cung cấp câu trả lời cho các truy vấn của người dùng:",hl,O,pl,tt,ml,lt,Un="Chúng ta có thể thấy rằng có rất nhiều cột trong tập dữ liệu của chúng ta, hầu hết trong số đó chúng ta không cần phải xây dựng công cụ tìm kiếm của mình. Từ góc độ tìm kiếm, các cột chứa nhiều thông tin nhất là <code>title</code>, <code>body</code>, và <code>comments</code>,  trong khi <code>html_url</code> cung cấp cho chúng ta một liên kết trỏ về nguồn. Hãy sử dụng hàm <code>Dataset.remove_columns()</code> để xóa phần còn lại:",dl,nt,ol,st,rl,et,bn='Để tạo các biểu diễn, chúng ta sẽ bổ sung mỗi nhận xét với tiêu đề và nội dung của vấn đề, vì các trường này thường bao gồm thông tin ngữ cảnh hữu ích. Vì cột <code>comments</code> của hiện là danh sách các nhận xét cho từng vấn đề, chúng tôi cần khám phá các cột để mỗi hàng bao gồm một tuple <code>(html_url, title, body, comment)</code>. Trong Pandas, chúng ta có thể thực hiện việc này bằng hàm <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html" rel="nofollow">hàm <code>DataFrame.explode()</code></a>, tạo một hàng mới cho mỗi phần tử trong cột giống như danh sách, trong khi sao chép tất cả các giá trị cột khác. Để xem điều này hoạt động, trước tiên chúng ta hãy chúng chuyển thành định dạng Pandas <code>DataFrame</code>:',ul,at,yl,ct,Jn="Nếu ta kiểm tra hàng đầu tiên trong <code>DataFrame</code> này, chúng ta có thể thấy có bốn nhận xét liên quan đến vấn đề này:",gl,it,Ul,Mt,bl,ht,Tn="Khi chúng ta khám phá <code>df</code>, chúng tôi mong đợi nhận được một hàng cho mỗi nhận xét này. Hãy kiểm tra xem nó đã đúng chưa:",Jl,pt,Tl,R,jn='<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>the bug code locate in ：\\r\\n    if data_args.task_name is not None...</td> <td>Hello,\\r\\nI am trying to run run_glue.py and it gives me this error...</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>Hi @jinec,\\r\\n\\r\\nFrom time to time we get this kind of `ConnectionError` coming from the github.com website: https://raw.githubusercontent.com...</td> <td>Hello,\\r\\nI am trying to run run_glue.py and it gives me this error...</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>cannot connect，even by Web browser，please check that  there is some  problems。</td> <td>Hello,\\r\\nI am trying to run run_glue.py and it gives me this error...</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>I can access https://raw.githubusercontent.com/huggingface/datasets/1.7.0/datasets/glue/glue.py without problem...</td> <td>Hello,\\r\\nI am trying to run run_glue.py and it gives me this error...</td></tr></tbody>',jl,mt,wn="Tuyệt vời, chúng ta có thể thấy các hàng đã được nhân rộng, với cột <code>comments</code> chứa các nhận xét riêng lẻ! Bây giờ chúng ta đã hoàn thành với Pandas, chúng ta có thể nhanh chóng chuyển trở lại <code>Dataset</code> bằng cách tải <code>DataFrame</code> vào bộ nhớ:",wl,dt,fl,ot,Ql,rt,fn="Được rồi, điều này đã cho chúng ta vài nghìn nhận xét để làm việc cùng!",Zl,Y,Gl,ut,Qn="Bây giờ chúng ta đã có một nhận xét trên mỗi hàng, hãy tạo một cột <code>comments_length</code> mới chứa số từ trên mỗi nhận xét:",kl,yt,Cl,gt,Zn="Chúng ta có thể sử dụng cột mới này để lọc ra các nhận xét ngắn, thường bao gồm những thứ như “cc @lewtun” hoặc “Thanks!” không liên quan đến công cụ tìm kiếm của mình. Không có con số chính xác để chọn cho bộ lọc, nhưng khoảng 15 từ có vẻ như là một khởi đầu tốt:",Il,Ut,$l,bt,vl,Jt,Gn="Sau khi dọn dẹp tập dữ liệu một chút, hãy ghép tiêu đề, mô tả và nhận xét của vấn đề với nhau trong một cột <code>text</code> mới. Như thường lệ, chúng ta sẽ viết một hàm đơn giản mà chúng ta có thể truyền vào <code>Dataset.map()</code>:",Rl,Tt,_l,jt,kn="Cuối cùng thì chúng ta cũng đã sẵn sàng để tạo một số biểu điễn! Chúng ta hãy xem nào.",Nl,wt,xl,ft,Cn='Chúng ta đã thấy trong <a href="/course/chapter2">Chương 2</a> rằng ta có thể nhận được token biễu diễn nhúng bằng cách sử dụng lớp <code>AutoModel</code>. Tất cả những gì chúng ta cần làm là chọn một checkpoint phù hợp để tải mô hình từ đó. May mắn thay, có một thư viện tên là  <code>sentence-transformers</code> dành riêng cho việc tạo các biểu diễn này. Như được mô tả trong <a href="https://www.sbert.net/examples/appices/semantic-search/README.html#symmetric-vs-asymmetric-semantic-search" rel="nofollow">tài liệu</a> của thư viện, trường hợp sử dụng của ta là một ví dụ về <em>tìm kiếm ngữ nghĩa phi đối xứng</em> bởi vì chúng ta có một truy vấn ngắn có câu trả lời ta muốn tìm thấy trong một tài liệu lại dài hơn nhiều, chẳng hạn như một nhận xét về vấn đề. <a href="https://www.sbert.net/docs/pretrained_models.html#model-overview" rel="nofollow">Bảng tổng quan về mô hình</a> trong phần tài liệu chỉ ra rằng checkpoint <code>multi-qa-mpnet-base-dot-v1</code> có hiệu suất tốt nhất cho tìm kiếm ngữ nghĩa, vì vậy chúng ta sẽ sử dụng nó cho ứng dụng của mình. Chúng ta cũng sẽ tải tokenizer bằng cách sử dụng cùng một checkpoint:',Bl,_,N,At,Qt,In="Như đã đề cập trước đó, chúng ta muốn biểu diễn mỗi mục trong kho dữ liệu các vấn đề GitHub của mình dưới dạng một vectơ duy nhất, vì vậy chúng ta cần “gộp” hoặc tính trung bình các lần biễu diễn token theo một cách nào đó. Một cách tiếp cận phổ biến là thực hiện <em>CLS pooling</em> trên đầu ra của mô hình, nơi ta chỉ cần thu thập trạng thái ẩn cuối cùng cho token đặc biệt <code>[CLS]</code>. Hàm sau thực hiện thủ thuật này cho chúng ta:",Xl,Zt,Vl,Gt,$n="Tiếp theo, chúng tôi sẽ tạo một chức năng trợ giúp sẽ tokanize danh sách các tài liệu, đặt các tensor trên GPU, đưa chúng vào mô hình và cuối cùng áp dụng CLS gộp cho các đầu ra:",Wl,x,B,qt,kt,vn="Lưu ý rằng chúng ta đã chuyển đổi các biểu diễn sang thành mảng NumPy - đó là vì 🤗 Datasets yêu cầu định dạng này khi ta cố gắng lập chỉ mục chúng bằng FAISS, điều mà ta sẽ thực hiện tiếp theo.",Yl,Ct,zl,It,Rn='Bây giờ chúng ta đã có một tập dữ liệu về các biểu diễn, chúng ta cần một số cách để tìm kiếm chúng. Để làm điều này, chúng ta sẽ sử dụng một cấu trúc dữ liệu đặc biệt trong 🤗 Datasets được gọi là <em>FAISS index</em>. <a href="https://faiss.ai/" rel="nofollow">FAISS</a> (viết tắt của Facebook AI Similarity Search) là một thư viện cung cấp các thuật toán hiệu quả để nhanh chóng tìm kiếm và phân cụm các vectơ nhúng biểu diễn.',Sl,$t,_n="Ý tưởng cơ bản đằng sau FAISS là tạo ra một cấu trúc dữ liệu đặc biệt được gọi là <em>index</em> hay <em>chỉ mục</em> cho phép người ta tìm thấy các biểu diễn nhúng nào tương tự như biểu diễn nhúng đầu vào. Tạo chỉ mục FAISS trong 🤗 Datasets rất đơn giản - ta sử dụng hàm <code>Dataset.add_faiss_index()</code> và chỉ định cột nào trong tập dữ liệu mà ta muốn lập chỉ mục:",Fl,vt,El,Rt,Nn="Bây giờ chúng ta có thể thực hiện các truy vấn trên chỉ mục này bằng cách thực hiện tra cứu những mẫu lân cận nhất thông qua hàm <code>Dataset.get_nearest_examples()</code>. Hãy kiểm tra điều này bằng cách biểu diễn một câu hỏi như sau:",Hl,X,V,Dt,_t,xn="Cũng giống như các tài liệu, giờ đây chúng ta có một vectơ 768 chiều đại diện cho truy vấn, mà chúng ta có thể so sánh với toàn bộ kho dữ liệu để tìm ra các cách biểu diễn tương tự nhất:",Al,Nt,ql,xt,Bn="Hàm <code>Dataset.get_nearest_examples()</code> trả về một loạt điểm xếp hạng sự tương đồng giữa truy vấn và tài liệu và một tập hợp các mẫu tương ứng (ở đây, là 5 kết quả phù hợp nhất). Hãy thu thập những thứ này vào một <code>pandas.DataFrame</code> để chúng ta có thể dễ dàng sắp xếp chúng:",Dl,Bt,Ll,Xt,Xn="Bây giờ chúng ta có thể lặp lại một vài hàng đầu tiên để xem truy vấn của chúng ta khớp với các nhận xét có sẵn như thế nào:",Kl,Vt,Pl,Wt,Ol,Yt,Vn="Không tệ! Lần truy cập thứ hai của chúng ta dường như phù hợp với truy vấn.",tn,z,ln,zt,nn,Lt,sn;h=new Ms({props:{fw:k[0]}}),G=new Pt({props:{title:"Tìm kiếm ngữ nghĩa với FAISS",local:"tìm-kiếm-ngữ-nghĩa-với-faiss",headingTag:"h1"}});const Wn=[ms,ps],St=[];function Yn(t,l){return t[0]==="pt"?0:1}Q=Yn(k),Z=St[Q]=Wn[Q](k),c=new is({props:{id:"OATCgQtNX2o"}}),S=new Pt({props:{title:"Sử dụng nhúng biểu diễn từ cho tìm kiếm ngữ nghĩa",local:"sử-dụng-nhúng-biểu-diễn-từ-cho-tìm-kiếm-ngữ-nghĩa",headingTag:"h2"}}),H=new Pt({props:{title:"Tải và chuẩn bị tập dữ liệu",local:"tải-và-chuẩn-bị-tập-dữ-liệu",headingTag:"h2"}}),q=new T({props:{code:"ZnJvbSUyMGh1Z2dpbmdmYWNlX2h1YiUyMGltcG9ydCUyMGhmX2h1Yl91cmwlMEElMEFkYXRhX2ZpbGVzJTIwJTNEJTIwaGZfaHViX3VybCglMEElMjAlMjAlMjAlMjByZXBvX2lkJTNEJTIybGV3dHVuJTJGZ2l0aHViLWlzc3VlcyUyMiUyQyUwQSUyMCUyMCUyMCUyMGZpbGVuYW1lJTNEJTIyZGF0YXNldHMtaXNzdWVzLXdpdGgtY29tbWVudHMuanNvbmwlMjIlMkMlMEElMjAlMjAlMjAlMjByZXBvX3R5cGUlM0QlMjJkYXRhc2V0JTIyJTJDJTBBKQ==",highlighted:`<span class="hljs-keyword">from</span> huggingface_hub <span class="hljs-keyword">import</span> hf_hub_url

data_files = hf_hub_url(
    repo_id=<span class="hljs-string">&quot;lewtun/github-issues&quot;</span>,
    filename=<span class="hljs-string">&quot;datasets-issues-with-comments.jsonl&quot;</span>,
    repo_type=<span class="hljs-string">&quot;dataset&quot;</span>,
)`,wrap:!1}}),L=new T({props:{code:"ZnJvbSUyMGRhdGFzZXRzJTIwaW1wb3J0JTIwbG9hZF9kYXRhc2V0JTBBJTBBaXNzdWVzX2RhdGFzZXQlMjAlM0QlMjBsb2FkX2RhdGFzZXQoJTIyanNvbiUyMiUyQyUyMGRhdGFfZmlsZXMlM0RkYXRhX2ZpbGVzJTJDJTIwc3BsaXQlM0QlMjJ0cmFpbiUyMiklMEFpc3N1ZXNfZGF0YXNldA==",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;json&quot;</span>, data_files=data_files, split=<span class="hljs-string">&quot;train&quot;</span>)
issues_dataset`,wrap:!1}}),K=new T({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}}),O=new T({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}}),tt=new T({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}}),nt=new T({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}}),st=new T({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}}),at=new T({props:{code:"aXNzdWVzX2RhdGFzZXQuc2V0X2Zvcm1hdCglMjJwYW5kYXMlMjIpJTBBZGYlMjAlM0QlMjBpc3N1ZXNfZGF0YXNldCU1QiUzQSU1RA==",highlighted:`issues_dataset.set_format(<span class="hljs-string">&quot;pandas&quot;</span>)
df = issues_dataset[:]`,wrap:!1}}),it=new T({props:{code:"ZGYlNUIlMjJjb21tZW50cyUyMiU1RCU1QjAlNUQudG9saXN0KCk=",highlighted:'df[<span class="hljs-string">&quot;comments&quot;</span>][<span class="hljs-number">0</span>].tolist()',wrap:!1}}),Mt=new T({props:{code:"JTVCJ3RoZSUyMGJ1ZyUyMGNvZGUlMjBsb2NhdGUlMjBpbiUyMCVFRiVCQyU5QSU1Q3IlNUNuJTIwJTIwJTIwJTIwaWYlMjBkYXRhX2FyZ3MudGFza19uYW1lJTIwaXMlMjBub3QlMjBOb25lJTNBJTVDciU1Q24lMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjMlMjBEb3dubG9hZGluZyUyMGFuZCUyMGxvYWRpbmclMjBhJTIwZGF0YXNldCUyMGZyb20lMjB0aGUlMjBodWIuJTVDciU1Q24lMjAlMjAlMjAlMjAlMjAlMjAlMjAlMjBkYXRhc2V0cyUyMCUzRCUyMGxvYWRfZGF0YXNldCglMjJnbHVlJTIyJTJDJTIwZGF0YV9hcmdzLnRhc2tfbmFtZSUyQyUyMGNhY2hlX2RpciUzRG1vZGVsX2FyZ3MuY2FjaGVfZGlyKSclMkMlMEElMjAnSGklMjAlNDBqaW5lYyUyQyU1Q3IlNUNuJTVDciU1Q25Gcm9tJTIwdGltZSUyMHRvJTIwdGltZSUyMHdlJTIwZ2V0JTIwdGhpcyUyMGtpbmQlMjBvZiUyMCU2MENvbm5lY3Rpb25FcnJvciU2MCUyMGNvbWluZyUyMGZyb20lMjB0aGUlMjBnaXRodWIuY29tJTIwd2Vic2l0ZSUzQSUyMGh0dHBzJTNBJTJGJTJGcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSU1Q3IlNUNuJTVDciU1Q25Ob3JtYWxseSUyQyUyMGl0JTIwc2hvdWxkJTIwd29yayUyMGlmJTIweW91JTIwd2FpdCUyMGElMjBsaXR0bGUlMjBhbmQlMjB0aGVuJTIwcmV0cnkuJTVDciU1Q24lNUNyJTVDbkNvdWxkJTIweW91JTIwcGxlYXNlJTIwY29uZmlybSUyMGlmJTIwdGhlJTIwcHJvYmxlbSUyMHBlcnNpc3RzJTNGJyUyQyUwQSUyMCdjYW5ub3QlMjBjb25uZWN0JUVGJUJDJThDZXZlbiUyMGJ5JTIwV2ViJTIwYnJvd3NlciVFRiVCQyU4Q3BsZWFzZSUyMGNoZWNrJTIwdGhhdCUyMCUyMHRoZXJlJTIwaXMlMjBzb21lJTIwJTIwcHJvYmxlbXMlRTMlODAlODInJTJDJTBBJTIwJ0klMjBjYW4lMjBhY2Nlc3MlMjBodHRwcyUzQSUyRiUyRnJhdy5naXRodWJ1c2VyY29udGVudC5jb20lMkZodWdnaW5nZmFjZSUyRmRhdGFzZXRzJTJGMS43LjAlMkZkYXRhc2V0cyUyRmdsdWUlMkZnbHVlLnB5JTIwd2l0aG91dCUyMHByb2JsZW0uLi4nJTVE",highlighted:`[<span class="hljs-string">&#x27;the bug code locate in ：\\r\\n    if data_args.task_name is not None:\\r\\n        # Downloading and loading a dataset from the 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;Hi @jinec,\\r\\n\\r\\nFrom time to time we get this kind of \`ConnectionError\` coming from the github.com website: https://raw.githubusercontent.com\\r\\n\\r\\nNormally, it should work if you wait a little and then retry.\\r\\n\\r\\nCould you please confirm if the problem persists?&#x27;</span>,
 <span class="hljs-string">&#x27;cannot connect，even by Web browser，please check that  there is some  problems。&#x27;</span>,
 <span class="hljs-string">&#x27;I can access https://raw.githubusercontent.com/huggingface/datasets/1.7.0/datasets/glue/glue.py without problem...&#x27;</span>]`,wrap:!1}}),pt=new T({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}}),dt=new T({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}}),ot=new T({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}}),Y=new Pn({props:{$$slots:{default:[ds]},$$scope:{ctx:k}}}),yt=new T({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}}),Ut=new T({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}}),bt=new T({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}}),Tt=new T({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}}),wt=new Pt({props:{title:"Tạo ra biểu diễn văn bản",local:"tạo-ra-biểu-diễn-văn-bản",headingTag:"h2"}});const zn=[rs,os],Ft=[];function Sn(t,l){return t[0]==="pt"?0:1}_=Sn(k),N=Ft[_]=zn[_](k),Zt=new T({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 Fn=[ys,us],Et=[];function En(t,l){return t[0]==="pt"?0:1}x=En(k),B=Et[x]=Fn[x](k),Ct=new Pt({props:{title:"Sử dụng FAISS để tìm kiếm điểm tương đồng hiệu quả",local:"sử-dụng-faiss-để-tìm-kiếm-điểm-tương-đồng-hiệu-quả",headingTag:"h2"}}),vt=new T({props:{code:"ZW1iZWRkaW5nc19kYXRhc2V0LmFkZF9mYWlzc19pbmRleChjb2x1bW4lM0QlMjJlbWJlZGRpbmdzJTIyKQ==",highlighted:'embeddings_dataset.add_faiss_index(column=<span class="hljs-string">&quot;embeddings&quot;</span>)',wrap:!1}});const Hn=[Us,gs],Ht=[];function An(t,l){return t[0]==="pt"?0:1}return X=An(k),V=Ht[X]=Hn[X](k),Nt=new T({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}}),Bt=new T({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}}),Vt=new T({props:{code:"Zm9yJTIwXyUyQyUyMHJvdyUyMGluJTIwc2FtcGxlc19kZi5pdGVycm93cygpJTNBJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMkNPTU1FTlQlM0ElMjAlN0Jyb3cuY29tbWVudHMlN0QlMjIpJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMlNDT1JFJTNBJTIwJTdCcm93LnNjb3JlcyU3RCUyMiklMEElMjAlMjAlMjAlMjBwcmludChmJTIyVElUTEUlM0ElMjAlN0Jyb3cudGl0bGUlN0QlMjIpJTBBJTIwJTIwJTIwJTIwcHJpbnQoZiUyMlVSTCUzQSUyMCU3QnJvdy5odG1sX3VybCU3RCUyMiklMEElMjAlMjAlMjAlMjBwcmludCglMjIlM0QlMjIlMjAqJTIwNTApJTBBJTIwJTIwJTIwJTIwcHJpbnQoKQ==",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;COMMENT: <span class="hljs-subst">{row.comments}</span>&quot;</span>)
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;SCORE: <span class="hljs-subst">{row.scores}</span>&quot;</span>)
    <span class="hljs-built_in">print</span>(<span class="hljs-string">f&quot;TITLE: <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}}),Wt=new T({props:{code:" ",highlighted:`<span class="hljs-string">&quot;&quot;&quot;
COMMENT: Requiring online connection is a deal breaker in some cases unfortunately so it&#x27;d be great if offline mode is added similar to how \`transformers\` loads models offline fine.

@mandubian&#x27;s second bullet point suggests that there&#x27;s a workaround allowing you to use your offline (custom?) dataset with \`datasets\`. Could you please elaborate on how that should look like?
SCORE: 25.505046844482422
TITLE: Discussion using datasets in offline mode
URL: https://github.com/huggingface/datasets/issues/824
==================================================

COMMENT: The local dataset builders (csv, text , json and pandas) are now part of the \`datasets\` package since #1726 :)
You can now use them offline
\\\`\\\`\\\`python
datasets = load_dataset(&quot;text&quot;, data_files=data_files)
\\\`\\\`\\\`

We&#x27;ll do a new release soon
SCORE: 24.555509567260742
TITLE: Discussion using datasets in offline mode
URL: https://github.com/huggingface/datasets/issues/824
==================================================

COMMENT: I opened a PR that allows to reload modules that have already been loaded once even if there&#x27;s no internet.

Let me know if you know other ways that can make the offline mode experience better. I&#x27;d be happy to add them :)

I already note the &quot;freeze&quot; modules option, to prevent local modules updates. It would be a cool feature.

----------

&gt; @mandubian&#x27;s second bullet point suggests that there&#x27;s a workaround allowing you to use your offline (custom?) dataset with \`datasets\`. Could you please elaborate on how that should look like?

Indeed \`load_dataset\` allows to load remote dataset script (squad, glue, etc.) but also you own local ones.
For example if you have a dataset script at \`./my_dataset/my_dataset.py\` then you can do
\\\`\\\`\\\`python
load_dataset(&quot;./my_dataset&quot;)
\\\`\\\`\\\`
and the dataset script will generate your dataset once and for all.

----------

About I&#x27;m looking into having \`csv\`, \`json\`, \`text\`, \`pandas\` dataset builders already included in the \`datasets\` package, so that they are available offline by default, as opposed to the other datasets that require the script to be downloaded.
cf #1724
SCORE: 24.14896583557129
TITLE: Discussion using datasets in offline mode
URL: https://github.com/huggingface/datasets/issues/824
==================================================

COMMENT: &gt; here is my way to load a dataset offline, but it **requires** an online machine
&gt;
&gt; 1. (online machine)
&gt;
&gt; \`\`\`
&gt;
&gt; import datasets
&gt;
&gt; data = datasets.load_dataset(...)
&gt;
&gt; data.save_to_disk(/YOUR/DATASET/DIR)
&gt;
&gt; \`\`\`
&gt;
&gt; 2. copy the dir from online to the offline machine
&gt;
&gt; 3. (offline machine)
&gt;
&gt; \`\`\`
&gt;
&gt; import datasets
&gt;
&gt; data = datasets.load_from_disk(/SAVED/DATA/DIR)
&gt;
&gt; \`\`\`
&gt;
&gt;
&gt;
&gt; HTH.


SCORE: 22.893993377685547
TITLE: Discussion using datasets in offline mode
URL: https://github.com/huggingface/datasets/issues/824
==================================================

COMMENT: here is my way to load a dataset offline, but it **requires** an online machine
1. (online machine)
\\\`\\\`\\\`
import datasets
data = datasets.load_dataset(...)
data.save_to_disk(/YOUR/DATASET/DIR)
\\\`\\\`\\\`
2. copy the dir from online to the offline machine
3. (offline machine)
\\\`\\\`\\\`
import datasets
data = datasets.load_from_disk(/SAVED/DATA/DIR)
\\\`\\\`\\\`

HTH.
SCORE: 22.406635284423828
TITLE: Discussion using datasets in offline mode
URL: https://github.com/huggingface/datasets/issues/824
==================================================
&quot;&quot;&quot;</span>`,wrap:!1}}),z=new Pn({props:{$$slots:{default:[bs]},$$scope:{ctx:k}}}),zt=new hs({props:{source:"https://github.com/huggingface/course/blob/main/chapters/vi/chapter5/6.mdx"}}),{c(){e=b("meta"),d=i(),a=b("p"),w=i(),r(h.$$.fragment),o=i(),r(G.$$.fragment),U=i(),Z.c(),v=i(),I=b("p"),I.innerHTML=C,$=i(),r(c.$$.fragment),f=i(),r(S.$$.fragment),Ot=i(),F=b("p"),F.innerHTML=dn,tl=i(),E=b("p"),E.textContent=on,ll=i(),W=b("div"),W.innerHTML=rn,nl=i(),r(H.$$.fragment),sl=i(),A=b("p"),A.textContent=un,el=i(),r(q.$$.fragment),al=i(),D=b("p"),D.innerHTML=yn,cl=i(),r(L.$$.fragment),il=i(),r(K.$$.fragment),Ml=i(),P=b("p"),P.innerHTML=gn,hl=i(),r(O.$$.fragment),pl=i(),r(tt.$$.fragment),ml=i(),lt=b("p"),lt.innerHTML=Un,dl=i(),r(nt.$$.fragment),ol=i(),r(st.$$.fragment),rl=i(),et=b("p"),et.innerHTML=bn,ul=i(),r(at.$$.fragment),yl=i(),ct=b("p"),ct.innerHTML=Jn,gl=i(),r(it.$$.fragment),Ul=i(),r(Mt.$$.fragment),bl=i(),ht=b("p"),ht.innerHTML=Tn,Jl=i(),r(pt.$$.fragment),Tl=i(),R=b("table"),R.innerHTML=jn,jl=i(),mt=b("p"),mt.innerHTML=wn,wl=i(),r(dt.$$.fragment),fl=i(),r(ot.$$.fragment),Ql=i(),rt=b("p"),rt.textContent=fn,Zl=i(),r(Y.$$.fragment),Gl=i(),ut=b("p"),ut.innerHTML=Qn,kl=i(),r(yt.$$.fragment),Cl=i(),gt=b("p"),gt.textContent=Zn,Il=i(),r(Ut.$$.fragment),$l=i(),r(bt.$$.fragment),vl=i(),Jt=b("p"),Jt.innerHTML=Gn,Rl=i(),r(Tt.$$.fragment),_l=i(),jt=b("p"),jt.textContent=kn,Nl=i(),r(wt.$$.fragment),xl=i(),ft=b("p"),ft.innerHTML=Cn,Bl=i(),N.c(),At=i(),Qt=b("p"),Qt.innerHTML=In,Xl=i(),r(Zt.$$.fragment),Vl=i(),Gt=b("p"),Gt.textContent=$n,Wl=i(),B.c(),qt=i(),kt=b("p"),kt.textContent=vn,Yl=i(),r(Ct.$$.fragment),zl=i(),It=b("p"),It.innerHTML=Rn,Sl=i(),$t=b("p"),$t.innerHTML=_n,Fl=i(),r(vt.$$.fragment),El=i(),Rt=b("p"),Rt.innerHTML=Nn,Hl=i(),V.c(),Dt=i(),_t=b("p"),_t.textContent=xn,Al=i(),r(Nt.$$.fragment),ql=i(),xt=b("p"),xt.innerHTML=Bn,Dl=i(),r(Bt.$$.fragment),Ll=i(),Xt=b("p"),Xt.textContent=Xn,Kl=i(),r(Vt.$$.fragment),Pl=i(),r(Wt.$$.fragment),Ol=i(),Yt=b("p"),Yt.textContent=Vn,tn=i(),r(z.$$.fragment),ln=i(),r(zt.$$.fragment),nn=i(),Lt=b("p"),this.h()},l(t){const l=as("svelte-u9bgzb",document.head);e=J(l,"META",{name:!0,content:!0}),l.forEach(n),d=M(t),a=J(t,"P",{}),Kn(a).forEach(n),w=M(t),u(h.$$.fragment,t),o=M(t),u(G.$$.fragment,t),U=M(t),Z.l(t),v=M(t),I=J(t,"P",{"data-svelte-h":!0}),j(I)!=="svelte-1q2vb10"&&(I.innerHTML=C),$=M(t),u(c.$$.fragment,t),f=M(t),u(S.$$.fragment,t),Ot=M(t),F=J(t,"P",{"data-svelte-h":!0}),j(F)!=="svelte-x24dzi"&&(F.innerHTML=dn),tl=M(t),E=J(t,"P",{"data-svelte-h":!0}),j(E)!=="svelte-614ts8"&&(E.textContent=on),ll=M(t),W=J(t,"DIV",{class:!0,"data-svelte-h":!0}),j(W)!=="svelte-yxatr"&&(W.innerHTML=rn),nl=M(t),u(H.$$.fragment,t),sl=M(t),A=J(t,"P",{"data-svelte-h":!0}),j(A)!=="svelte-17g6xig"&&(A.textContent=un),el=M(t),u(q.$$.fragment,t),al=M(t),D=J(t,"P",{"data-svelte-h":!0}),j(D)!=="svelte-1waqrbo"&&(D.innerHTML=yn),cl=M(t),u(L.$$.fragment,t),il=M(t),u(K.$$.fragment,t),Ml=M(t),P=J(t,"P",{"data-svelte-h":!0}),j(P)!=="svelte-1u4ur3k"&&(P.innerHTML=gn),hl=M(t),u(O.$$.fragment,t),pl=M(t),u(tt.$$.fragment,t),ml=M(t),lt=J(t,"P",{"data-svelte-h":!0}),j(lt)!=="svelte-ya6zww"&&(lt.innerHTML=Un),dl=M(t),u(nt.$$.fragment,t),ol=M(t),u(st.$$.fragment,t),rl=M(t),et=J(t,"P",{"data-svelte-h":!0}),j(et)!=="svelte-wsml0h"&&(et.innerHTML=bn),ul=M(t),u(at.$$.fragment,t),yl=M(t),ct=J(t,"P",{"data-svelte-h":!0}),j(ct)!=="svelte-rpepz9"&&(ct.innerHTML=Jn),gl=M(t),u(it.$$.fragment,t),Ul=M(t),u(Mt.$$.fragment,t),bl=M(t),ht=J(t,"P",{"data-svelte-h":!0}),j(ht)!=="svelte-1v3prle"&&(ht.innerHTML=Tn),Jl=M(t),u(pt.$$.fragment,t),Tl=M(t),R=J(t,"TABLE",{border:!0,class:!0,style:!0,"data-svelte-h":!0}),j(R)!=="svelte-1g5whzd"&&(R.innerHTML=jn),jl=M(t),mt=J(t,"P",{"data-svelte-h":!0}),j(mt)!=="svelte-1xsg8b4"&&(mt.innerHTML=wn),wl=M(t),u(dt.$$.fragment,t),fl=M(t),u(ot.$$.fragment,t),Ql=M(t),rt=J(t,"P",{"data-svelte-h":!0}),j(rt)!=="svelte-1y0j8ro"&&(rt.textContent=fn),Zl=M(t),u(Y.$$.fragment,t),Gl=M(t),ut=J(t,"P",{"data-svelte-h":!0}),j(ut)!=="svelte-1ouaptl"&&(ut.innerHTML=Qn),kl=M(t),u(yt.$$.fragment,t),Cl=M(t),gt=J(t,"P",{"data-svelte-h":!0}),j(gt)!=="svelte-hewvic"&&(gt.textContent=Zn),Il=M(t),u(Ut.$$.fragment,t),$l=M(t),u(bt.$$.fragment,t),vl=M(t),Jt=J(t,"P",{"data-svelte-h":!0}),j(Jt)!=="svelte-16q8ufb"&&(Jt.innerHTML=Gn),Rl=M(t),u(Tt.$$.fragment,t),_l=M(t),jt=J(t,"P",{"data-svelte-h":!0}),j(jt)!=="svelte-126lgrk"&&(jt.textContent=kn),Nl=M(t),u(wt.$$.fragment,t),xl=M(t),ft=J(t,"P",{"data-svelte-h":!0}),j(ft)!=="svelte-e47tp7"&&(ft.innerHTML=Cn),Bl=M(t),N.l(t),At=M(t),Qt=J(t,"P",{"data-svelte-h":!0}),j(Qt)!=="svelte-pcq8gm"&&(Qt.innerHTML=In),Xl=M(t),u(Zt.$$.fragment,t),Vl=M(t),Gt=J(t,"P",{"data-svelte-h":!0}),j(Gt)!=="svelte-1syb0ck"&&(Gt.textContent=$n),Wl=M(t),B.l(t),qt=M(t),kt=J(t,"P",{"data-svelte-h":!0}),j(kt)!=="svelte-1aht20c"&&(kt.textContent=vn),Yl=M(t),u(Ct.$$.fragment,t),zl=M(t),It=J(t,"P",{"data-svelte-h":!0}),j(It)!=="svelte-1avbau7"&&(It.innerHTML=Rn),Sl=M(t),$t=J(t,"P",{"data-svelte-h":!0}),j($t)!=="svelte-1a87ua4"&&($t.innerHTML=_n),Fl=M(t),u(vt.$$.fragment,t),El=M(t),Rt=J(t,"P",{"data-svelte-h":!0}),j(Rt)!=="svelte-o1tche"&&(Rt.innerHTML=Nn),Hl=M(t),V.l(t),Dt=M(t),_t=J(t,"P",{"data-svelte-h":!0}),j(_t)!=="svelte-6b27se"&&(_t.textContent=xn),Al=M(t),u(Nt.$$.fragment,t),ql=M(t),xt=J(t,"P",{"data-svelte-h":!0}),j(xt)!=="svelte-1cvx6mp"&&(xt.innerHTML=Bn),Dl=M(t),u(Bt.$$.fragment,t),Ll=M(t),Xt=J(t,"P",{"data-svelte-h":!0}),j(Xt)!=="svelte-1dvqrjh"&&(Xt.textContent=Xn),Kl=M(t),u(Vt.$$.fragment,t),Pl=M(t),u(Wt.$$.fragment,t),Ol=M(t),Yt=J(t,"P",{"data-svelte-h":!0}),j(Yt)!=="svelte-13fvq4p"&&(Yt.textContent=Vn),tn=M(t),u(z.$$.fragment,t),ln=M(t),u(zt.$$.fragment,t),nn=M(t),Lt=J(t,"P",{}),Kn(Lt).forEach(n),this.h()},h(){Kt(e,"name","hf:doc:metadata"),Kt(e,"content",Ts),Kt(W,"class","flex justify-center"),Kt(R,"border","1"),Kt(R,"class","dataframe"),mn(R,"table-layout","fixed"),mn(R,"word-wrap","break-word"),mn(R,"width","100%")},m(t,l){cs(document.head,e),s(t,d,l),s(t,a,l),s(t,w,l),y(h,t,l),s(t,o,l),y(G,t,l),s(t,U,l),St[Q].m(t,l),s(t,v,l),s(t,I,l),s(t,$,l),y(c,t,l),s(t,f,l),y(S,t,l),s(t,Ot,l),s(t,F,l),s(t,tl,l),s(t,E,l),s(t,ll,l),s(t,W,l),s(t,nl,l),y(H,t,l),s(t,sl,l),s(t,A,l),s(t,el,l),y(q,t,l),s(t,al,l),s(t,D,l),s(t,cl,l),y(L,t,l),s(t,il,l),y(K,t,l),s(t,Ml,l),s(t,P,l),s(t,hl,l),y(O,t,l),s(t,pl,l),y(tt,t,l),s(t,ml,l),s(t,lt,l),s(t,dl,l),y(nt,t,l),s(t,ol,l),y(st,t,l),s(t,rl,l),s(t,et,l),s(t,ul,l),y(at,t,l),s(t,yl,l),s(t,ct,l),s(t,gl,l),y(it,t,l),s(t,Ul,l),y(Mt,t,l),s(t,bl,l),s(t,ht,l),s(t,Jl,l),y(pt,t,l),s(t,Tl,l),s(t,R,l),s(t,jl,l),s(t,mt,l),s(t,wl,l),y(dt,t,l),s(t,fl,l),y(ot,t,l),s(t,Ql,l),s(t,rt,l),s(t,Zl,l),y(Y,t,l),s(t,Gl,l),s(t,ut,l),s(t,kl,l),y(yt,t,l),s(t,Cl,l),s(t,gt,l),s(t,Il,l),y(Ut,t,l),s(t,$l,l),y(bt,t,l),s(t,vl,l),s(t,Jt,l),s(t,Rl,l),y(Tt,t,l),s(t,_l,l),s(t,jt,l),s(t,Nl,l),y(wt,t,l),s(t,xl,l),s(t,ft,l),s(t,Bl,l),Ft[_].m(t,l),s(t,At,l),s(t,Qt,l),s(t,Xl,l),y(Zt,t,l),s(t,Vl,l),s(t,Gt,l),s(t,Wl,l),Et[x].m(t,l),s(t,qt,l),s(t,kt,l),s(t,Yl,l),y(Ct,t,l),s(t,zl,l),s(t,It,l),s(t,Sl,l),s(t,$t,l),s(t,Fl,l),y(vt,t,l),s(t,El,l),s(t,Rt,l),s(t,Hl,l),Ht[X].m(t,l),s(t,Dt,l),s(t,_t,l),s(t,Al,l),y(Nt,t,l),s(t,ql,l),s(t,xt,l),s(t,Dl,l),y(Bt,t,l),s(t,Ll,l),s(t,Xt,l),s(t,Kl,l),y(Vt,t,l),s(t,Pl,l),y(Wt,t,l),s(t,Ol,l),s(t,Yt,l),s(t,tn,l),y(z,t,l),s(t,ln,l),y(zt,t,l),s(t,nn,l),s(t,Lt,l),sn=!0},p(t,[l]){const qn={};l&1&&(qn.fw=t[0]),h.$set(qn);let cn=Q;Q=Yn(t),Q!==cn&&(an(),p(St[cn],1,1,()=>{St[cn]=null}),en(),Z=St[Q],Z||(Z=St[Q]=Wn[Q](t),Z.c()),m(Z,1),Z.m(v.parentNode,v));const Dn={};l&2&&(Dn.$$scope={dirty:l,ctx:t}),Y.$set(Dn);let Mn=_;_=Sn(t),_!==Mn&&(an(),p(Ft[Mn],1,1,()=>{Ft[Mn]=null}),en(),N=Ft[_],N||(N=Ft[_]=zn[_](t),N.c()),m(N,1),N.m(At.parentNode,At));let hn=x;x=En(t),x!==hn&&(an(),p(Et[hn],1,1,()=>{Et[hn]=null}),en(),B=Et[x],B||(B=Et[x]=Fn[x](t),B.c()),m(B,1),B.m(qt.parentNode,qt));let pn=X;X=An(t),X!==pn&&(an(),p(Ht[pn],1,1,()=>{Ht[pn]=null}),en(),V=Ht[X],V||(V=Ht[X]=Hn[X](t),V.c()),m(V,1),V.m(Dt.parentNode,Dt));const Ln={};l&2&&(Ln.$$scope={dirty:l,ctx:t}),z.$set(Ln)},i(t){sn||(m(h.$$.fragment,t),m(G.$$.fragment,t),m(Z),m(c.$$.fragment,t),m(S.$$.fragment,t),m(H.$$.fragment,t),m(q.$$.fragment,t),m(L.$$.fragment,t),m(K.$$.fragment,t),m(O.$$.fragment,t),m(tt.$$.fragment,t),m(nt.$$.fragment,t),m(st.$$.fragment,t),m(at.$$.fragment,t),m(it.$$.fragment,t),m(Mt.$$.fragment,t),m(pt.$$.fragment,t),m(dt.$$.fragment,t),m(ot.$$.fragment,t),m(Y.$$.fragment,t),m(yt.$$.fragment,t),m(Ut.$$.fragment,t),m(bt.$$.fragment,t),m(Tt.$$.fragment,t),m(wt.$$.fragment,t),m(N),m(Zt.$$.fragment,t),m(B),m(Ct.$$.fragment,t),m(vt.$$.fragment,t),m(V),m(Nt.$$.fragment,t),m(Bt.$$.fragment,t),m(Vt.$$.fragment,t),m(Wt.$$.fragment,t),m(z.$$.fragment,t),m(zt.$$.fragment,t),sn=!0)},o(t){p(h.$$.fragment,t),p(G.$$.fragment,t),p(Z),p(c.$$.fragment,t),p(S.$$.fragment,t),p(H.$$.fragment,t),p(q.$$.fragment,t),p(L.$$.fragment,t),p(K.$$.fragment,t),p(O.$$.fragment,t),p(tt.$$.fragment,t),p(nt.$$.fragment,t),p(st.$$.fragment,t),p(at.$$.fragment,t),p(it.$$.fragment,t),p(Mt.$$.fragment,t),p(pt.$$.fragment,t),p(dt.$$.fragment,t),p(ot.$$.fragment,t),p(Y.$$.fragment,t),p(yt.$$.fragment,t),p(Ut.$$.fragment,t),p(bt.$$.fragment,t),p(Tt.$$.fragment,t),p(wt.$$.fragment,t),p(N),p(Zt.$$.fragment,t),p(B),p(Ct.$$.fragment,t),p(vt.$$.fragment,t),p(V),p(Nt.$$.fragment,t),p(Bt.$$.fragment,t),p(Vt.$$.fragment,t),p(Wt.$$.fragment,t),p(z.$$.fragment,t),p(zt.$$.fragment,t),sn=!1},d(t){t&&(n(d),n(a),n(w),n(o),n(U),n(v),n(I),n($),n(f),n(Ot),n(F),n(tl),n(E),n(ll),n(W),n(nl),n(sl),n(A),n(el),n(al),n(D),n(cl),n(il),n(Ml),n(P),n(hl),n(pl),n(ml),n(lt),n(dl),n(ol),n(rl),n(et),n(ul),n(yl),n(ct),n(gl),n(Ul),n(bl),n(ht),n(Jl),n(Tl),n(R),n(jl),n(mt),n(wl),n(fl),n(Ql),n(rt),n(Zl),n(Gl),n(ut),n(kl),n(Cl),n(gt),n(Il),n($l),n(vl),n(Jt),n(Rl),n(_l),n(jt),n(Nl),n(xl),n(ft),n(Bl),n(At),n(Qt),n(Xl),n(Vl),n(Gt),n(Wl),n(qt),n(kt),n(Yl),n(zl),n(It),n(Sl),n($t),n(Fl),n(El),n(Rt),n(Hl),n(Dt),n(_t),n(Al),n(ql),n(xt),n(Dl),n(Ll),n(Xt),n(Kl),n(Pl),n(Ol),n(Yt),n(tn),n(ln),n(nn),n(Lt)),n(e),g(h,t),g(G,t),St[Q].d(t),g(c,t),g(S,t),g(H,t),g(q,t),g(L,t),g(K,t),g(O,t),g(tt,t),g(nt,t),g(st,t),g(at,t),g(it,t),g(Mt,t),g(pt,t),g(dt,t),g(ot,t),g(Y,t),g(yt,t),g(Ut,t),g(bt,t),g(Tt,t),g(wt,t),Ft[_].d(t),g(Zt,t),Et[x].d(t),g(Ct,t),g(vt,t),Ht[X].d(t),g(Nt,t),g(Bt,t),g(Vt,t),g(Wt,t),g(z,t),g(zt,t)}}}const Ts='{"title":"Tìm kiếm ngữ nghĩa với FAISS","local":"tìm-kiếm-ngữ-nghĩa-với-faiss","sections":[{"title":"Sử dụng nhúng biểu diễn từ cho tìm kiếm ngữ nghĩa","local":"sử-dụng-nhúng-biểu-diễn-từ-cho-tìm-kiếm-ngữ-nghĩa","sections":[],"depth":2},{"title":"Tải và chuẩn bị tập dữ liệu","local":"tải-và-chuẩn-bị-tập-dữ-liệu","sections":[],"depth":2},{"title":"Tạo ra biểu diễn văn bản","local":"tạo-ra-biểu-diễn-văn-bản","sections":[],"depth":2},{"title":"Sử dụng FAISS để tìm kiếm điểm tương đồng hiệu quả","local":"sử-dụng-faiss-để-tìm-kiếm-điểm-tương-đồng-hiệu-quả","sections":[],"depth":2}],"depth":1}';function js(k,e,d){let a="pt";return ns(()=>{const w=new URLSearchParams(window.location.search);d(0,a=w.get("fw")||"pt")}),[a]}class $s extends ss{constructor(e){super(),es(this,e,js,Js,ls,{})}}export{$s as component};
