import{s as se,o as ee,n as le}from"../chunks/scheduler.cc52f4b9.js";import{S as ae,i as ne,e as j,s as M,c as U,h as Me,a as T,d as s,b as p,f as Ps,g as y,j as w,k as Pl,w as os,l as pe,m as e,n as u,o as m,u as Ms,t as c,p as J,v as ps}from"../chunks/index.9480bb2b.js";import{T as Os}from"../chunks/Tip.f7b80743.js";import{C as ie,H as Ol,E as de}from"../chunks/MermaidChart.svelte_svelte_type_style_lang.e0b4ce23.js";import{Y as me}from"../chunks/Youtube.7b12d9e8.js";import{C as h}from"../chunks/CodeBlock.d991436c.js";import{C as te}from"../chunks/CourseFloatingBanner.0ea490da.js";import{F as ce}from"../chunks/FrameworkSwitchCourse.42d12053.js";function oe(g){let a,o;return a=new te({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(){U(a.$$.fragment)},l(n){y(a.$$.fragment,n)},m(n,f){u(a,n,f),o=!0},i(n){o||(c(a.$$.fragment,n),o=!0)},o(n){m(a.$$.fragment,n),o=!1},d(n){J(a,n)}}}function re(g){let a,o;return a=new te({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(){U(a.$$.fragment)},l(n){y(a.$$.fragment,n)},m(n,f){u(a,n,f),o=!0},i(n){o||(c(a.$$.fragment,n),o=!0)},o(n){m(a.$$.fragment,n),o=!1},d(n){J(a,n)}}}function Ue(g){let a,o='✏️ <strong>Попробуйте!</strong> Посмотрите, сможете ли вы использовать <code>Dataset.map()</code>, чтобы развернуть столбец <code>comments</code> столбца <code>issues_dataset</code> <em>без</em> использования Pandas. Это немного сложно; вы можете найти раздел <a href="https://huggingface.co/docs/datasets/about_map_batch#batch-mapping" rel="nofollow">“Batch mapping”</a> документации 🤗 Datasets, полезным для этой задачи.';return{c(){a=j("p"),a.innerHTML=o},l(n){a=T(n,"P",{"data-svelte-h":!0}),w(a)!=="svelte-3jhlkr"&&(a.innerHTML=o)},m(n,f){e(n,a,f)},p:le,d(n){n&&s(a)}}}function ye(g){let a,o,n,f="Обратите внимание, что мы установили <code>from_pt=True</code> в качестве аргумента метода <code>from_pretrained()</code>. Это связано с тем, что контрольная точка <code>multi-qa-mpnet-base-dot-v1</code> имеет только веса PyTorch, поэтому установка <code>from_pt=True</code> автоматически преобразует их в формат TensorFlow для нас. Как видите, переключаться между фреймворками в 🤗 Трансформеры очень просто!",d;return a=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(){U(a.$$.fragment),o=M(),n=j("p"),n.innerHTML=f},l(r){y(a.$$.fragment,r),o=p(r),n=T(r,"P",{"data-svelte-h":!0}),w(n)!=="svelte-w4ef9a"&&(n.innerHTML=f)},m(r,Z){u(a,r,Z),e(r,o,Z),e(r,n,Z),d=!0},i(r){d||(c(a.$$.fragment,r),d=!0)},o(r){m(a.$$.fragment,r),d=!1},d(r){r&&(s(o),s(n)),J(a,r)}}}function ue(g){let a,o,n,f="Чтобы ускорить процесс построения эмбеддингов, рекомендуется переместить модель и входные данные на устройстве с графическим процессором, поэтому давайте сделаем это сейчас:",d,r,Z;return a=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}}),r=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(){U(a.$$.fragment),o=M(),n=j("p"),n.textContent=f,d=M(),U(r.$$.fragment)},l(b){y(a.$$.fragment,b),o=p(b),n=T(b,"P",{"data-svelte-h":!0}),w(n)!=="svelte-inum91"&&(n.textContent=f),d=p(b),y(r.$$.fragment,b)},m(b,G){u(a,b,G),e(b,o,G),e(b,n,G),e(b,d,G),u(r,b,G),Z=!0},i(b){Z||(c(a.$$.fragment,b),c(r.$$.fragment,b),Z=!0)},o(b){m(a.$$.fragment,b),m(r.$$.fragment,b),Z=!1},d(b){b&&(s(o),s(n),s(d)),J(a,b),J(r,b)}}}function Je(g){let a,o,n,f="Мы можем проверить работу функции, передав ей первую текстовую запись в нашем корпусе и проверив размерности данных на выходе:",d,r,Z,b,G,$,k="Отлично, мы преобразовали первую запись в нашем корпусе в 768-мерный вектор! Мы можем использовать <code>Dataset.map()</code>, чтобы применить нашу функцию <code>get_embeddings()</code> к каждой строке в нашем корпусе, поэтому давайте создадим новый столбец <code>embeddings</code> следующим образом:",I,C,R;return a=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}}),r=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}}),b=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(){U(a.$$.fragment),o=M(),n=j("p"),n.textContent=f,d=M(),U(r.$$.fragment),Z=M(),U(b.$$.fragment),G=M(),$=j("p"),$.innerHTML=k,I=M(),U(C.$$.fragment)},l(i){y(a.$$.fragment,i),o=p(i),n=T(i,"P",{"data-svelte-h":!0}),w(n)!=="svelte-1arf6dc"&&(n.textContent=f),d=p(i),y(r.$$.fragment,i),Z=p(i),y(b.$$.fragment,i),G=p(i),$=T(i,"P",{"data-svelte-h":!0}),w($)!=="svelte-1lqreox"&&($.innerHTML=k),I=p(i),y(C.$$.fragment,i)},m(i,Q){u(a,i,Q),e(i,o,Q),e(i,n,Q),e(i,d,Q),u(r,i,Q),e(i,Z,Q),u(b,i,Q),e(i,G,Q),e(i,$,Q),e(i,I,Q),u(C,i,Q),R=!0},i(i){R||(c(a.$$.fragment,i),c(r.$$.fragment,i),c(b.$$.fragment,i),c(C.$$.fragment,i),R=!0)},o(i){m(a.$$.fragment,i),m(r.$$.fragment,i),m(b.$$.fragment,i),m(C.$$.fragment,i),R=!1},d(i){i&&(s(o),s(n),s(d),s(Z),s(G),s($),s(I)),J(a,i),J(r,i),J(b,i),J(C,i)}}}function be(g){let a,o,n,f="Мы можем проверить работу функции, передав ей первую текстовую запись в нашем корпусе и проверив размерности данных на выходе:",d,r,Z,b,G,$,k="Отлично, мы преобразовали первую запись в нашем корпусе в 768-мерный вектор! Мы можем использовать <code>Dataset.map()</code>, чтобы применить нашу функцию <code>get_embeddings()</code> к каждой строке в нашем корпусе, поэтому давайте создадим новый столбец <code>embeddings</code> следующим образом:",I,C,R;return a=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}}),r=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}}),b=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(){U(a.$$.fragment),o=M(),n=j("p"),n.textContent=f,d=M(),U(r.$$.fragment),Z=M(),U(b.$$.fragment),G=M(),$=j("p"),$.innerHTML=k,I=M(),U(C.$$.fragment)},l(i){y(a.$$.fragment,i),o=p(i),n=T(i,"P",{"data-svelte-h":!0}),w(n)!=="svelte-1arf6dc"&&(n.textContent=f),d=p(i),y(r.$$.fragment,i),Z=p(i),y(b.$$.fragment,i),G=p(i),$=T(i,"P",{"data-svelte-h":!0}),w($)!=="svelte-1lqreox"&&($.innerHTML=k),I=p(i),y(C.$$.fragment,i)},m(i,Q){u(a,i,Q),e(i,o,Q),e(i,n,Q),e(i,d,Q),u(r,i,Q),e(i,Z,Q),u(b,i,Q),e(i,G,Q),e(i,$,Q),e(i,I,Q),u(C,i,Q),R=!0},i(i){R||(c(a.$$.fragment,i),c(r.$$.fragment,i),c(b.$$.fragment,i),c(C.$$.fragment,i),R=!0)},o(i){m(a.$$.fragment,i),m(r.$$.fragment,i),m(b.$$.fragment,i),m(C.$$.fragment,i),R=!1},d(i){i&&(s(o),s(n),s(d),s(Z),s(G),s($),s(I)),J(a,i),J(r,i),J(b,i),J(C,i)}}}function je(g){let a,o,n,f;return a=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}}),n=new h({props:{code:"KDElMkMlMjA3Njgp",highlighted:'(<span class="hljs-number">1</span>, <span class="hljs-number">768</span>)',wrap:!1}}),{c(){U(a.$$.fragment),o=M(),U(n.$$.fragment)},l(d){y(a.$$.fragment,d),o=p(d),y(n.$$.fragment,d)},m(d,r){u(a,d,r),e(d,o,r),u(n,d,r),f=!0},i(d){f||(c(a.$$.fragment,d),c(n.$$.fragment,d),f=!0)},o(d){m(a.$$.fragment,d),m(n.$$.fragment,d),f=!1},d(d){d&&s(o),J(a,d),J(n,d)}}}function Te(g){let a,o,n,f;return a=new h({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}}),n=new h({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNzY4JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),{c(){U(a.$$.fragment),o=M(),U(n.$$.fragment)},l(d){y(a.$$.fragment,d),o=p(d),y(n.$$.fragment,d)},m(d,r){u(a,d,r),e(d,o,r),u(n,d,r),f=!0},i(d){f||(c(a.$$.fragment,d),c(n.$$.fragment,d),f=!0)},o(d){m(a.$$.fragment,d),m(n.$$.fragment,d),f=!1},d(d){d&&s(o),J(a,d),J(n,d)}}}function he(g){let a,o="✏️ <strong>Попробуйте!</strong> Создайте свой собственный запрос и посмотрите, сможете ли вы найти ответ в найденных документах. Возможно, вам придется увеличить параметр <code>k</code> в <code>Dataset.get_nearest_examples()</code>, чтобы расширить поиск.";return{c(){a=j("p"),a.innerHTML=o},l(n){a=T(n,"P",{"data-svelte-h":!0}),w(a)!=="svelte-slam50"&&(a.innerHTML=o)},m(n,f){e(n,a,f)},p:le,d(n){n&&s(a)}}}function we(g){let a,o,n,f,d,r,Z,b,G,$,k,I,C,R,i='В <a href="../chapter5/5">разделе 5</a> мы создали набор данных о issues и комментариях GitHub из репозитория 🤗 Datasets. В этом разделе мы будем использовать эту информацию для создания поисковой системы, которая поможет нам найти ответы на самые насущные вопросы о библиотеке!',Q,F,lt,v,tt,E,rs='Как мы видели в <a href="../chapter1/1">Главе 1</a>, языковые модели на основе Transformer представляют каждую лексему в текстовом фрагменте как <em>эмбеддинг-вектор</em>. Оказывается, можно «объединить» отдельные вложения, чтобы создать векторное представление для целых предложений, абзацев или (в некоторых случаях) документов. Затем эти вложения можно использовать для поиска похожих документов в корпусе путем вычисления скалярного произведения (или какой-либо другой метрики сходства) между каждым вложением и возврата документов с наибольшим перекрытием.',st,H,Us="В этом разделе мы будем использовать вложения для разработки семантической поисковой системы. Эти поисковые системы предлагают несколько преимуществ по сравнению с традиционными подходами, основанными на сопоставлении ключевых слов в запросе с документами.",et,Y,ys='<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."/>',at,A,nt,D,us="Первое, что нам нужно сделать, это загрузить наш набор данных об issues GitHub, поэтому давайте воспользуемся библиотекой 🤗 Hub для получения URL-адреса, по которому наш файл хранится в Hugging Face Hub:",Mt,q,pt,L,Js='С URL-адресом, сохраненным в <code>data_files</code>, мы можем загрузить удаленный набор данных, используя метод, представленный в <a href="../chapter5/2">раздел 2</a>:',it,K,dt,P,mt,O,bs="Здесь мы указали подвыборку <code>train</code> по умолчанию в <code>load_dataset()</code>, поэтому он возвращает <code>Dataset</code> вместо <code>DatasetDict</code>. Первым делом нужно отфильтровать запросы на pull-requests, поскольку они, как правило, редко используются для ответов на вопросы пользователей и создают шум в нашей поисковой системе. Как должно быть уже известно, мы можем использовать функцию <code>Dataset.filter()</code>, чтобы исключить эти строки из нашего набора данных. Давайте также отфильтруем строки без комментариев, поскольку они не дают ответов на запросы пользователей:",ct,ll,ot,tl,rt,sl,js="Мы видим, что в нашем наборе данных много столбцов, большинство из которых нам не нужно для создания нашей поисковой системы. С точки зрения поиска наиболее информативными столбцами являются <code>title</code>, <code>body</code> и <code>comments</code>, а <code>html_url</code> содержит нам ссылку на исходную проблему. Давайте воспользуемся функцией <code>Dataset.remove_columns()</code>, чтобы удалить остальные столбцы:",Ut,el,yt,al,ut,nl,Ts='Чтобы создать наши эмбеддинги, мы дополним каждый комментарий заголовком и телом проблемы, поскольку эти поля часто содержат полезную контекстную информацию. Поскольку наш столбец <code>comments</code> в настоящее время представляет собой список комментариев для каждой проблемы, нам нужно «развернуть» столбец, чтобы каждая строка состояла из кортежа <code>(html_url, title, body, comment)</code>. В Pandas мы можем сделать это с помощью функции <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html" rel="nofollow"><code>DataFrame.explode()</code></a>, которая создает новую строку для каждого элемента в столбце, похожем на список, при копировании всех других значений столбца. Чтобы увидеть это в действии, давайте сначала переключимся на формат Pandas <code>DataFrame</code>:',Jt,Ml,bt,pl,hs="Если мы проверим первую строку в этом <code>DataFrame</code>, мы увидим, что есть четыре комментария, связанных с этой проблемой:",jt,il,Tt,dl,ht,ml,ws="Когда мы «развернем» <code>df</code>, мы ожидаем получить по одной строке для каждого из этих комментариев. Проверим, так ли это:",wt,cl,ft,_,fs='<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>',Qt,ol,Qs="Отлично, мы видим, что строки были скопированы, а столбец <code>comments</code> содержит отдельные комментарии! Теперь, когда мы закончили с Pandas, мы можем быстро вернуться к <code>Dataset</code>, загрузив <code>DataFrame</code> в память:",Zt,rl,gt,Ul,Gt,yl,Zs="Хорошо, это дало нам несколько тысяч комментариев для работы!",Ct,z,It,ul,gs="Теперь, когда у нас есть один комментарий в строке, давайте создадим новый столбец <code>comments_length</code>, содержащий количество слов в комментарии:",$t,Jl,kt,bl,Gs="Мы можем использовать этот новый столбец для фильтрации коротких комментариев, которые обычно содержат такие слова, как «cc @lewtun» или Thanks!», которые не имеют отношения к нашей поисковой системе. Нет точного числа для выбора порога числа слов, но около 15 слов кажется хорошим началом:",Rt,jl,_t,Tl,Bt,hl,Cs="Немного очистив наш набор данных, давайте соединим название issue, описание и комментарии вместе в новом столбце <code>text</code>. Как обычно, мы напишем простую функцию, которую мы можем передать в <code>Dataset.map()</code>:",Nt,wl,Xt,fl,Is="Наконец-то мы готовы создать несколько эмбеддингов’! Давайте взглянем.",xt,Ql,Vt,Zl,$s='В <a href="../chapter2/1">Главе 2</a> мы видели, что можно получить эмбеддингов токенов с помощью класса AutoModel. Все, что нам нужно сделать, это выбрать подходящую контрольную точку для загрузки модели. К счастью, есть библиотека под названием <code>sentence-transformers</code>, предназначенная для создания эмбеддингов. Как описано в <a href="https://www.sbert.net/examples/applications/semantic-search/README.html#%D1%81%D0%B8%D0%BC%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D0%B9-vs-%D0%B0%D1%81%D0%B8%D0%BC%D0%BC%D0%B5%D1%82%D1%80%D0%B8%D1%87%D0%BD%D1%8B%D0%B9-semantic-search" rel="nofollow">документации</a> библиотеки, наш вариант использования является примером <em>асимметричного семантического поиска</em> потому что у нас есть короткий запрос, ответ на который мы хотели бы найти в более длинном документе, например, в комментарии к проблеме. В удобной <a href="https://www.sbert.net/docs/pretrained_models.html#model-overview" rel="nofollow">таблице обзора модели</a> в документации указано, что контрольная точка <code>multi-qa-mpnet-base-dot-v1</code> имеет лучшую производительность для семантического поиска, поэтому мы будем использовать её для нашего приложения. Мы также загрузим токенизатор, используя ту же контрольную точку:',Wt,B,N,Dl,gl,ks="Как мы упоминали ранее, мы хотели бы представить каждую запись в нашем корпусе issues GitHub как единый вектор, поэтому нам нужно каким-то образом «объединить» или усреднить наши вложения токенов. Одним из популярных подходов является выполнение <em>CLS pooling</em> выходных данных нашей модели, когда мы просто собираем последнее скрытое состояние для специального токена <code>[CLS]</code>. Следующая функция поможет нам:",Yt,Gl,zt,Cl,Rs="Далее мы создадим вспомогательную функцию, которая разметит список документов, поместит тензоры в GPU, передаст их в модель и, наконец, применит CLS pooling к выходным данным:",St,X,x,ql,Il,_s="Обратите внимание, что мы преобразовали вложения в массивы NumPy — это потому, что 🤗 Datasets требуют этого формата, когда мы пытаемся проиндексировать их с помощью FAISS, что мы сделаем дальше.",Ft,$l,vt,kl,Bs='Теперь, когда у нас есть датасет с эмбеддингами, нам нужен способ поиска по ним. Для этого мы будем использовать специальную структуру данных из 🤗 Datasets, называемую <em>FAISS index</em>. <a href="https://faiss.ai/" rel="nofollow">FAISS</a> (сокращение от Facebook AI Similarity Search) — это библиотека, предоставляющая эффективные алгоритмы для быстрого поиска и кластеризации эмбеддингов.',Et,Rl,Ns="Основная идея FAISS состоит в том, чтобы создать специальную структуру данных, называемую <em>index</em>, которая позволяет найти, какие эмбеддинги подобны входным эмбеддингам. Создать индекс FAISS в 🤗 Datasets очень просто — мы используем функцию <code>Dataset.add_faiss_index()</code> и указываем, какой столбец нашего набора данных мы хотим проиндексировать:",Ht,_l,At,Bl,Xs="Теперь мы можем выполнять запросы к этому индексу, выполняя поиск ближайшего соседа с помощью функции <code>Dataset.get_nearest_examples()</code>. Давайте проверим это, сначала внедрив вопрос следующим образом:",Dt,V,W,Ll,Nl,xs="Как и в случае с документами, теперь у нас есть 768-мерный вектор, представляющий запрос, который мы можем сравнить со всем корпусом, чтобы найти наиболее похожие объекты:",qt,Xl,Lt,xl,Vs="Функция <code>Dataset.get_nearest_examples()</code> возвращает набор оценок, которые ранжируют совпадение между запросом и документом, и соответствующий набор образцов (здесь 5 лучших совпадений). Давайте соберем их в <code>pandas.DataFrame</code>, чтобы мы могли легко их отсортировать:",Kt,Vl,Pt,Wl,Ws="Теперь мы можем пройтись по первым нескольким строкам, чтобы увидеть, насколько наш запрос соответствует имеющимся комментариям:",Ot,Yl,ls,zl,ts,Sl,Ys="Неплохо! Наше второе обращение, кажется, соответствует запросу.",ss,S,es,Fl,as,Kl,ns;d=new ce({props:{fw:g[0]}}),Z=new ie({props:{containerStyle:"float: right; margin-left: 10px; display: inline-flex; position: relative; z-index: 10;"}}),G=new Ol({props:{title:"Семантический поиск с помощью FAISS",local:"семантический-поиск-с-помощью-faiss",headingTag:"h1"}});const zs=[re,oe],vl=[];function Ss(l,t){return l[0]==="pt"?0:1}k=Ss(g),I=vl[k]=zs[k](g),F=new me({props:{id:"OATCgQtNX2o"}}),v=new Ol({props:{title:"Использование эмбеддингов для семанического поиска",local:"использование-эмбеддингов-для-семанического-поиска",headingTag:"h2"}}),A=new Ol({props:{title:"Загрузка и подготовка датасета",local:"загрузка-и-подготовка-датасета",headingTag:"h2"}}),q=new h({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}}),K=new h({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}}),P=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}}),ll=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}}),tl=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}}),el=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}}),al=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}}),Ml=new h({props:{code:"aXNzdWVzX2RhdGFzZXQuc2V0X2Zvcm1hdCglMjJwYW5kYXMlMjIpJTBBZGYlMjAlM0QlMjBpc3N1ZXNfZGF0YXNldCU1QiUzQSU1RA==",highlighted:`issues_dataset.set_format(<span class="hljs-string">&quot;pandas&quot;</span>)
df = issues_dataset[:]`,wrap:!1}}),il=new h({props:{code:"ZGYlNUIlMjJjb21tZW50cyUyMiU1RCU1QjAlNUQudG9saXN0KCk=",highlighted:'df[<span class="hljs-string">&quot;comments&quot;</span>][<span class="hljs-number">0</span>].tolist()',wrap:!1}}),dl=new h({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}}),cl=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}}),rl=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}}),Ul=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}}),z=new Os({props:{$$slots:{default:[Ue]},$$scope:{ctx:g}}}),Jl=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}}),jl=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}}),Tl=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}}),wl=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}}),Ql=new Ol({props:{title:"Создание текстовых эмбединнгов",local:"создание-текстовых-эмбединнгов",headingTag:"h2"}});const Fs=[ue,ye],El=[];function vs(l,t){return l[0]==="pt"?0:1}B=vs(g),N=El[B]=Fs[B](g),Gl=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 Es=[be,Je],Hl=[];function Hs(l,t){return l[0]==="pt"?0:1}X=Hs(g),x=Hl[X]=Es[X](g),$l=new Ol({props:{title:"Использование FAISS для эффективного семантического поиска",local:"использование-faiss-для-эффективного-семантического-поиска",headingTag:"h2"}}),_l=new h({props:{code:"ZW1iZWRkaW5nc19kYXRhc2V0LmFkZF9mYWlzc19pbmRleChjb2x1bW4lM0QlMjJlbWJlZGRpbmdzJTIyKQ==",highlighted:'embeddings_dataset.add_faiss_index(column=<span class="hljs-string">&quot;embeddings&quot;</span>)',wrap:!1}});const As=[Te,je],Al=[];function Ds(l,t){return l[0]==="pt"?0:1}return V=Ds(g),W=Al[V]=As[V](g),Xl=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}}),Vl=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}}),Yl=new h({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}}),zl=new h({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}}),S=new Os({props:{$$slots:{default:[he]},$$scope:{ctx:g}}}),Fl=new de({props:{source:"https://github.com/huggingface/course/blob/main/chapters/ru/chapter5/6.mdx"}}),{c(){a=j("meta"),o=M(),n=j("p"),f=M(),U(d.$$.fragment),r=M(),U(Z.$$.fragment),b=M(),U(G.$$.fragment),$=M(),I.c(),C=M(),R=j("p"),R.innerHTML=i,Q=M(),U(F.$$.fragment),lt=M(),U(v.$$.fragment),tt=M(),E=j("p"),E.innerHTML=rs,st=M(),H=j("p"),H.textContent=Us,et=M(),Y=j("div"),Y.innerHTML=ys,at=M(),U(A.$$.fragment),nt=M(),D=j("p"),D.textContent=us,Mt=M(),U(q.$$.fragment),pt=M(),L=j("p"),L.innerHTML=Js,it=M(),U(K.$$.fragment),dt=M(),U(P.$$.fragment),mt=M(),O=j("p"),O.innerHTML=bs,ct=M(),U(ll.$$.fragment),ot=M(),U(tl.$$.fragment),rt=M(),sl=j("p"),sl.innerHTML=js,Ut=M(),U(el.$$.fragment),yt=M(),U(al.$$.fragment),ut=M(),nl=j("p"),nl.innerHTML=Ts,Jt=M(),U(Ml.$$.fragment),bt=M(),pl=j("p"),pl.innerHTML=hs,jt=M(),U(il.$$.fragment),Tt=M(),U(dl.$$.fragment),ht=M(),ml=j("p"),ml.innerHTML=ws,wt=M(),U(cl.$$.fragment),ft=M(),_=j("table"),_.innerHTML=fs,Qt=M(),ol=j("p"),ol.innerHTML=Qs,Zt=M(),U(rl.$$.fragment),gt=M(),U(Ul.$$.fragment),Gt=M(),yl=j("p"),yl.textContent=Zs,Ct=M(),U(z.$$.fragment),It=M(),ul=j("p"),ul.innerHTML=gs,$t=M(),U(Jl.$$.fragment),kt=M(),bl=j("p"),bl.textContent=Gs,Rt=M(),U(jl.$$.fragment),_t=M(),U(Tl.$$.fragment),Bt=M(),hl=j("p"),hl.innerHTML=Cs,Nt=M(),U(wl.$$.fragment),Xt=M(),fl=j("p"),fl.textContent=Is,xt=M(),U(Ql.$$.fragment),Vt=M(),Zl=j("p"),Zl.innerHTML=$s,Wt=M(),N.c(),Dl=M(),gl=j("p"),gl.innerHTML=ks,Yt=M(),U(Gl.$$.fragment),zt=M(),Cl=j("p"),Cl.textContent=Rs,St=M(),x.c(),ql=M(),Il=j("p"),Il.textContent=_s,Ft=M(),U($l.$$.fragment),vt=M(),kl=j("p"),kl.innerHTML=Bs,Et=M(),Rl=j("p"),Rl.innerHTML=Ns,Ht=M(),U(_l.$$.fragment),At=M(),Bl=j("p"),Bl.innerHTML=Xs,Dt=M(),W.c(),Ll=M(),Nl=j("p"),Nl.textContent=xs,qt=M(),U(Xl.$$.fragment),Lt=M(),xl=j("p"),xl.innerHTML=Vs,Kt=M(),U(Vl.$$.fragment),Pt=M(),Wl=j("p"),Wl.textContent=Ws,Ot=M(),U(Yl.$$.fragment),ls=M(),U(zl.$$.fragment),ts=M(),Sl=j("p"),Sl.textContent=Ys,ss=M(),U(S.$$.fragment),es=M(),U(Fl.$$.fragment),as=M(),Kl=j("p"),this.h()},l(l){const t=Me("svelte-u9bgzb",document.head);a=T(t,"META",{name:!0,content:!0}),t.forEach(s),o=p(l),n=T(l,"P",{}),Ps(n).forEach(s),f=p(l),y(d.$$.fragment,l),r=p(l),y(Z.$$.fragment,l),b=p(l),y(G.$$.fragment,l),$=p(l),I.l(l),C=p(l),R=T(l,"P",{"data-svelte-h":!0}),w(R)!=="svelte-1kqyvl2"&&(R.innerHTML=i),Q=p(l),y(F.$$.fragment,l),lt=p(l),y(v.$$.fragment,l),tt=p(l),E=T(l,"P",{"data-svelte-h":!0}),w(E)!=="svelte-u7ovj5"&&(E.innerHTML=rs),st=p(l),H=T(l,"P",{"data-svelte-h":!0}),w(H)!=="svelte-dm8pdq"&&(H.textContent=Us),et=p(l),Y=T(l,"DIV",{class:!0,"data-svelte-h":!0}),w(Y)!=="svelte-yxatr"&&(Y.innerHTML=ys),at=p(l),y(A.$$.fragment,l),nt=p(l),D=T(l,"P",{"data-svelte-h":!0}),w(D)!=="svelte-8ar22o"&&(D.textContent=us),Mt=p(l),y(q.$$.fragment,l),pt=p(l),L=T(l,"P",{"data-svelte-h":!0}),w(L)!=="svelte-1ucdqs"&&(L.innerHTML=Js),it=p(l),y(K.$$.fragment,l),dt=p(l),y(P.$$.fragment,l),mt=p(l),O=T(l,"P",{"data-svelte-h":!0}),w(O)!=="svelte-1ab3s1i"&&(O.innerHTML=bs),ct=p(l),y(ll.$$.fragment,l),ot=p(l),y(tl.$$.fragment,l),rt=p(l),sl=T(l,"P",{"data-svelte-h":!0}),w(sl)!=="svelte-g25nn8"&&(sl.innerHTML=js),Ut=p(l),y(el.$$.fragment,l),yt=p(l),y(al.$$.fragment,l),ut=p(l),nl=T(l,"P",{"data-svelte-h":!0}),w(nl)!=="svelte-kf244j"&&(nl.innerHTML=Ts),Jt=p(l),y(Ml.$$.fragment,l),bt=p(l),pl=T(l,"P",{"data-svelte-h":!0}),w(pl)!=="svelte-garzmz"&&(pl.innerHTML=hs),jt=p(l),y(il.$$.fragment,l),Tt=p(l),y(dl.$$.fragment,l),ht=p(l),ml=T(l,"P",{"data-svelte-h":!0}),w(ml)!=="svelte-81f1dh"&&(ml.innerHTML=ws),wt=p(l),y(cl.$$.fragment,l),ft=p(l),_=T(l,"TABLE",{border:!0,class:!0,style:!0,"data-svelte-h":!0}),w(_)!=="svelte-1g5whzd"&&(_.innerHTML=fs),Qt=p(l),ol=T(l,"P",{"data-svelte-h":!0}),w(ol)!=="svelte-s611ju"&&(ol.innerHTML=Qs),Zt=p(l),y(rl.$$.fragment,l),gt=p(l),y(Ul.$$.fragment,l),Gt=p(l),yl=T(l,"P",{"data-svelte-h":!0}),w(yl)!=="svelte-iyjal4"&&(yl.textContent=Zs),Ct=p(l),y(z.$$.fragment,l),It=p(l),ul=T(l,"P",{"data-svelte-h":!0}),w(ul)!=="svelte-opu2kq"&&(ul.innerHTML=gs),$t=p(l),y(Jl.$$.fragment,l),kt=p(l),bl=T(l,"P",{"data-svelte-h":!0}),w(bl)!=="svelte-7k4b3c"&&(bl.textContent=Gs),Rt=p(l),y(jl.$$.fragment,l),_t=p(l),y(Tl.$$.fragment,l),Bt=p(l),hl=T(l,"P",{"data-svelte-h":!0}),w(hl)!=="svelte-qjfuzk"&&(hl.innerHTML=Cs),Nt=p(l),y(wl.$$.fragment,l),Xt=p(l),fl=T(l,"P",{"data-svelte-h":!0}),w(fl)!=="svelte-12xaa86"&&(fl.textContent=Is),xt=p(l),y(Ql.$$.fragment,l),Vt=p(l),Zl=T(l,"P",{"data-svelte-h":!0}),w(Zl)!=="svelte-m3fi2j"&&(Zl.innerHTML=$s),Wt=p(l),N.l(l),Dl=p(l),gl=T(l,"P",{"data-svelte-h":!0}),w(gl)!=="svelte-1hrvssd"&&(gl.innerHTML=ks),Yt=p(l),y(Gl.$$.fragment,l),zt=p(l),Cl=T(l,"P",{"data-svelte-h":!0}),w(Cl)!=="svelte-x8q51b"&&(Cl.textContent=Rs),St=p(l),x.l(l),ql=p(l),Il=T(l,"P",{"data-svelte-h":!0}),w(Il)!=="svelte-1o2epj6"&&(Il.textContent=_s),Ft=p(l),y($l.$$.fragment,l),vt=p(l),kl=T(l,"P",{"data-svelte-h":!0}),w(kl)!=="svelte-l8ge7o"&&(kl.innerHTML=Bs),Et=p(l),Rl=T(l,"P",{"data-svelte-h":!0}),w(Rl)!=="svelte-u31vl5"&&(Rl.innerHTML=Ns),Ht=p(l),y(_l.$$.fragment,l),At=p(l),Bl=T(l,"P",{"data-svelte-h":!0}),w(Bl)!=="svelte-1uma1g4"&&(Bl.innerHTML=Xs),Dt=p(l),W.l(l),Ll=p(l),Nl=T(l,"P",{"data-svelte-h":!0}),w(Nl)!=="svelte-eam6de"&&(Nl.textContent=xs),qt=p(l),y(Xl.$$.fragment,l),Lt=p(l),xl=T(l,"P",{"data-svelte-h":!0}),w(xl)!=="svelte-8i9jhj"&&(xl.innerHTML=Vs),Kt=p(l),y(Vl.$$.fragment,l),Pt=p(l),Wl=T(l,"P",{"data-svelte-h":!0}),w(Wl)!=="svelte-j9fzh3"&&(Wl.textContent=Ws),Ot=p(l),y(Yl.$$.fragment,l),ls=p(l),y(zl.$$.fragment,l),ts=p(l),Sl=T(l,"P",{"data-svelte-h":!0}),w(Sl)!=="svelte-bi04jq"&&(Sl.textContent=Ys),ss=p(l),y(S.$$.fragment,l),es=p(l),y(Fl.$$.fragment,l),as=p(l),Kl=T(l,"P",{}),Ps(Kl).forEach(s),this.h()},h(){Pl(a,"name","hf:doc:metadata"),Pl(a,"content",fe),Pl(Y,"class","flex justify-center"),Pl(_,"border","1"),Pl(_,"class","dataframe"),os(_,"table-layout","fixed"),os(_,"word-wrap","break-word"),os(_,"width","100%")},m(l,t){pe(document.head,a),e(l,o,t),e(l,n,t),e(l,f,t),u(d,l,t),e(l,r,t),u(Z,l,t),e(l,b,t),u(G,l,t),e(l,$,t),vl[k].m(l,t),e(l,C,t),e(l,R,t),e(l,Q,t),u(F,l,t),e(l,lt,t),u(v,l,t),e(l,tt,t),e(l,E,t),e(l,st,t),e(l,H,t),e(l,et,t),e(l,Y,t),e(l,at,t),u(A,l,t),e(l,nt,t),e(l,D,t),e(l,Mt,t),u(q,l,t),e(l,pt,t),e(l,L,t),e(l,it,t),u(K,l,t),e(l,dt,t),u(P,l,t),e(l,mt,t),e(l,O,t),e(l,ct,t),u(ll,l,t),e(l,ot,t),u(tl,l,t),e(l,rt,t),e(l,sl,t),e(l,Ut,t),u(el,l,t),e(l,yt,t),u(al,l,t),e(l,ut,t),e(l,nl,t),e(l,Jt,t),u(Ml,l,t),e(l,bt,t),e(l,pl,t),e(l,jt,t),u(il,l,t),e(l,Tt,t),u(dl,l,t),e(l,ht,t),e(l,ml,t),e(l,wt,t),u(cl,l,t),e(l,ft,t),e(l,_,t),e(l,Qt,t),e(l,ol,t),e(l,Zt,t),u(rl,l,t),e(l,gt,t),u(Ul,l,t),e(l,Gt,t),e(l,yl,t),e(l,Ct,t),u(z,l,t),e(l,It,t),e(l,ul,t),e(l,$t,t),u(Jl,l,t),e(l,kt,t),e(l,bl,t),e(l,Rt,t),u(jl,l,t),e(l,_t,t),u(Tl,l,t),e(l,Bt,t),e(l,hl,t),e(l,Nt,t),u(wl,l,t),e(l,Xt,t),e(l,fl,t),e(l,xt,t),u(Ql,l,t),e(l,Vt,t),e(l,Zl,t),e(l,Wt,t),El[B].m(l,t),e(l,Dl,t),e(l,gl,t),e(l,Yt,t),u(Gl,l,t),e(l,zt,t),e(l,Cl,t),e(l,St,t),Hl[X].m(l,t),e(l,ql,t),e(l,Il,t),e(l,Ft,t),u($l,l,t),e(l,vt,t),e(l,kl,t),e(l,Et,t),e(l,Rl,t),e(l,Ht,t),u(_l,l,t),e(l,At,t),e(l,Bl,t),e(l,Dt,t),Al[V].m(l,t),e(l,Ll,t),e(l,Nl,t),e(l,qt,t),u(Xl,l,t),e(l,Lt,t),e(l,xl,t),e(l,Kt,t),u(Vl,l,t),e(l,Pt,t),e(l,Wl,t),e(l,Ot,t),u(Yl,l,t),e(l,ls,t),u(zl,l,t),e(l,ts,t),e(l,Sl,t),e(l,ss,t),u(S,l,t),e(l,es,t),u(Fl,l,t),e(l,as,t),e(l,Kl,t),ns=!0},p(l,[t]){const qs={};t&1&&(qs.fw=l[0]),d.$set(qs);let is=k;k=Ss(l),k!==is&&(ps(),m(vl[is],1,1,()=>{vl[is]=null}),Ms(),I=vl[k],I||(I=vl[k]=zs[k](l),I.c()),c(I,1),I.m(C.parentNode,C));const Ls={};t&2&&(Ls.$$scope={dirty:t,ctx:l}),z.$set(Ls);let ds=B;B=vs(l),B!==ds&&(ps(),m(El[ds],1,1,()=>{El[ds]=null}),Ms(),N=El[B],N||(N=El[B]=Fs[B](l),N.c()),c(N,1),N.m(Dl.parentNode,Dl));let ms=X;X=Hs(l),X!==ms&&(ps(),m(Hl[ms],1,1,()=>{Hl[ms]=null}),Ms(),x=Hl[X],x||(x=Hl[X]=Es[X](l),x.c()),c(x,1),x.m(ql.parentNode,ql));let cs=V;V=Ds(l),V!==cs&&(ps(),m(Al[cs],1,1,()=>{Al[cs]=null}),Ms(),W=Al[V],W||(W=Al[V]=As[V](l),W.c()),c(W,1),W.m(Ll.parentNode,Ll));const Ks={};t&2&&(Ks.$$scope={dirty:t,ctx:l}),S.$set(Ks)},i(l){ns||(c(d.$$.fragment,l),c(Z.$$.fragment,l),c(G.$$.fragment,l),c(I),c(F.$$.fragment,l),c(v.$$.fragment,l),c(A.$$.fragment,l),c(q.$$.fragment,l),c(K.$$.fragment,l),c(P.$$.fragment,l),c(ll.$$.fragment,l),c(tl.$$.fragment,l),c(el.$$.fragment,l),c(al.$$.fragment,l),c(Ml.$$.fragment,l),c(il.$$.fragment,l),c(dl.$$.fragment,l),c(cl.$$.fragment,l),c(rl.$$.fragment,l),c(Ul.$$.fragment,l),c(z.$$.fragment,l),c(Jl.$$.fragment,l),c(jl.$$.fragment,l),c(Tl.$$.fragment,l),c(wl.$$.fragment,l),c(Ql.$$.fragment,l),c(N),c(Gl.$$.fragment,l),c(x),c($l.$$.fragment,l),c(_l.$$.fragment,l),c(W),c(Xl.$$.fragment,l),c(Vl.$$.fragment,l),c(Yl.$$.fragment,l),c(zl.$$.fragment,l),c(S.$$.fragment,l),c(Fl.$$.fragment,l),ns=!0)},o(l){m(d.$$.fragment,l),m(Z.$$.fragment,l),m(G.$$.fragment,l),m(I),m(F.$$.fragment,l),m(v.$$.fragment,l),m(A.$$.fragment,l),m(q.$$.fragment,l),m(K.$$.fragment,l),m(P.$$.fragment,l),m(ll.$$.fragment,l),m(tl.$$.fragment,l),m(el.$$.fragment,l),m(al.$$.fragment,l),m(Ml.$$.fragment,l),m(il.$$.fragment,l),m(dl.$$.fragment,l),m(cl.$$.fragment,l),m(rl.$$.fragment,l),m(Ul.$$.fragment,l),m(z.$$.fragment,l),m(Jl.$$.fragment,l),m(jl.$$.fragment,l),m(Tl.$$.fragment,l),m(wl.$$.fragment,l),m(Ql.$$.fragment,l),m(N),m(Gl.$$.fragment,l),m(x),m($l.$$.fragment,l),m(_l.$$.fragment,l),m(W),m(Xl.$$.fragment,l),m(Vl.$$.fragment,l),m(Yl.$$.fragment,l),m(zl.$$.fragment,l),m(S.$$.fragment,l),m(Fl.$$.fragment,l),ns=!1},d(l){l&&(s(o),s(n),s(f),s(r),s(b),s($),s(C),s(R),s(Q),s(lt),s(tt),s(E),s(st),s(H),s(et),s(Y),s(at),s(nt),s(D),s(Mt),s(pt),s(L),s(it),s(dt),s(mt),s(O),s(ct),s(ot),s(rt),s(sl),s(Ut),s(yt),s(ut),s(nl),s(Jt),s(bt),s(pl),s(jt),s(Tt),s(ht),s(ml),s(wt),s(ft),s(_),s(Qt),s(ol),s(Zt),s(gt),s(Gt),s(yl),s(Ct),s(It),s(ul),s($t),s(kt),s(bl),s(Rt),s(_t),s(Bt),s(hl),s(Nt),s(Xt),s(fl),s(xt),s(Vt),s(Zl),s(Wt),s(Dl),s(gl),s(Yt),s(zt),s(Cl),s(St),s(ql),s(Il),s(Ft),s(vt),s(kl),s(Et),s(Rl),s(Ht),s(At),s(Bl),s(Dt),s(Ll),s(Nl),s(qt),s(Lt),s(xl),s(Kt),s(Pt),s(Wl),s(Ot),s(ls),s(ts),s(Sl),s(ss),s(es),s(as),s(Kl)),s(a),J(d,l),J(Z,l),J(G,l),vl[k].d(l),J(F,l),J(v,l),J(A,l),J(q,l),J(K,l),J(P,l),J(ll,l),J(tl,l),J(el,l),J(al,l),J(Ml,l),J(il,l),J(dl,l),J(cl,l),J(rl,l),J(Ul,l),J(z,l),J(Jl,l),J(jl,l),J(Tl,l),J(wl,l),J(Ql,l),El[B].d(l),J(Gl,l),Hl[X].d(l),J($l,l),J(_l,l),Al[V].d(l),J(Xl,l),J(Vl,l),J(Yl,l),J(zl,l),J(S,l),J(Fl,l)}}}const fe='{"title":"Семантический поиск с помощью FAISS","local":"семантический-поиск-с-помощью-faiss","sections":[{"title":"Использование эмбеддингов для семанического поиска","local":"использование-эмбеддингов-для-семанического-поиска","sections":[],"depth":2},{"title":"Загрузка и подготовка датасета","local":"загрузка-и-подготовка-датасета","sections":[],"depth":2},{"title":"Создание текстовых эмбединнгов","local":"создание-текстовых-эмбединнгов","sections":[],"depth":2},{"title":"Использование FAISS для эффективного семантического поиска","local":"использование-faiss-для-эффективного-семантического-поиска","sections":[],"depth":2}],"depth":1}';function Qe(g,a,o){let n="pt";return ee(()=>{const f=new URLSearchParams(window.location.search);o(0,n=f.get("fw")||"pt")}),[n]}class _e extends ae{constructor(a){super(),ne(this,a,Qe,we,se,{})}}export{_e as component};
