import{s as et,o as lt,n as Ks}from"../chunks/scheduler.37c15a92.js";import{S as st,i as tt,g as T,s as r,r as u,A as at,h,f as s,c as i,j as Ls,u as y,x as f,k as Pe,l as Ms,y as nt,a as t,v as U,t as M,b as as,d as c,w as b,p as ns}from"../chunks/index.2bf4358c.js";import{T as Ps}from"../chunks/Tip.363c041f.js";import{Y as ot}from"../chunks/Youtube.1e50a667.js";import{C as j}from"../chunks/CodeBlock.4e987730.js";import{C as Os}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as rt}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Ke}from"../chunks/Heading.8ada512a.js";import{E as it}from"../chunks/getInferenceSnippets.54ddb825.js";function dt(C){let a,p;return a=new Os({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,w){U(a,n,w),p=!0},i(n){p||(c(a.$$.fragment,n),p=!0)},o(n){M(a.$$.fragment,n),p=!1},d(n){b(a,n)}}}function Mt(C){let a,p;return a=new Os({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,w){U(a,n,w),p=!0},i(n){p||(c(a.$$.fragment,n),p=!0)},o(n){M(a.$$.fragment,n),p=!1},d(n){b(a,n)}}}function ct(C){let a,p='✏️ <strong>¡Inténtalo!</strong> Prueba si puedes usar la función <code>Dataset.map()</code> para “explotar” la columna <code>comments</code> en <code>issues_dataset</code> <em>sin</em> necesidad de usar Pandas. Esto es un poco complejo; te recomendamos revisar la sección de <a href="https://huggingface.co/docs/datasets/about_map_batch#batch-mapping" rel="nofollow">“Batch mapping”</a> de la documentación de 🤗 Datasets para completar esta tarea.';return{c(){a=T("p"),a.innerHTML=p},l(n){a=h(n,"P",{"data-svelte-h":!0}),f(a)!=="svelte-1ci8mqx"&&(a.innerHTML=p)},m(n,w){t(n,a,w)},p:Ks,d(n){n&&s(a)}}}function pt(C){let a,p,n,w="Ten en cuenta que hemos definido <code>from_pt=True</code> como un argumento del método <code>from_pretrained()</code>. Esto es porque el punto de control <code>multi-qa-mpnet-base-dot-v1</code> sólo tiene pesos de PyTorch, asi que usar <code>from_pt=True</code> los va a convertir automáticamente al formato TensorFlow. Como puedes ver, ¡es múy fácil cambiar entre frameworks usando 🤗 Transformers!",d;return a=new j({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),p=r(),n=T("p"),n.innerHTML=w},l(m){y(a.$$.fragment,m),p=i(m),n=h(m,"P",{"data-svelte-h":!0}),f(n)!=="svelte-cwrwkx"&&(n.innerHTML=w)},m(m,G){U(a,m,G),t(m,p,G),t(m,n,G),d=!0},i(m){d||(c(a.$$.fragment,m),d=!0)},o(m){M(a.$$.fragment,m),d=!1},d(m){m&&(s(p),s(n)),b(a,m)}}}function mt(C){let a,p,n,w="Para acelerar el proceso de <em>embedding</em>, es útil ubicar el modelo y los inputs en un dispositivo GPU, así que hagámoslo:",d,m,G;return a=new j({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}}),m=new j({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),p=r(),n=T("p"),n.innerHTML=w,d=r(),u(m.$$.fragment)},l(J){y(a.$$.fragment,J),p=i(J),n=h(J,"P",{"data-svelte-h":!0}),f(n)!=="svelte-qmz6pg"&&(n.innerHTML=w),d=i(J),y(m.$$.fragment,J)},m(J,Q){U(a,J,Q),t(J,p,Q),t(J,n,Q),t(J,d,Q),U(m,J,Q),G=!0},i(J){G||(c(a.$$.fragment,J),c(m.$$.fragment,J),G=!0)},o(J){M(a.$$.fragment,J),M(m.$$.fragment,J),G=!1},d(J){J&&(s(p),s(n),s(d)),b(a,J),b(m,J)}}}function ut(C){let a,p,n,w="Podemos probar que la función sirve al pasarle la primera entrada de texto en el corpus e inspeccionando la forma de la salida:",d,m,G,J,Q,Z,R="¡Hemos convertido la primera entrada del corpus en un vector de 768 dimensiones! Ahora podemos usar <code>Dataset.map()</code> para aplicar nuestra función <code>get_embeddings()</code> a cada fila del corpus, así que creemos una columna <code>embeddings</code> así:",k,I,$;return a=new j({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}}),m=new j({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}}),J=new j({props:{code:"VGVuc29yU2hhcGUoJTVCMSUyQyUyMDc2OCU1RCk=",highlighted:'TensorShape([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),I=new j({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),p=r(),n=T("p"),n.textContent=w,d=r(),u(m.$$.fragment),G=r(),u(J.$$.fragment),Q=r(),Z=T("p"),Z.innerHTML=R,k=r(),u(I.$$.fragment)},l(o){y(a.$$.fragment,o),p=i(o),n=h(o,"P",{"data-svelte-h":!0}),f(n)!=="svelte-178z0tw"&&(n.textContent=w),d=i(o),y(m.$$.fragment,o),G=i(o),y(J.$$.fragment,o),Q=i(o),Z=h(o,"P",{"data-svelte-h":!0}),f(Z)!=="svelte-1lugv4h"&&(Z.innerHTML=R),k=i(o),y(I.$$.fragment,o)},m(o,g){U(a,o,g),t(o,p,g),t(o,n,g),t(o,d,g),U(m,o,g),t(o,G,g),U(J,o,g),t(o,Q,g),t(o,Z,g),t(o,k,g),U(I,o,g),$=!0},i(o){$||(c(a.$$.fragment,o),c(m.$$.fragment,o),c(J.$$.fragment,o),c(I.$$.fragment,o),$=!0)},o(o){M(a.$$.fragment,o),M(m.$$.fragment,o),M(J.$$.fragment,o),M(I.$$.fragment,o),$=!1},d(o){o&&(s(p),s(n),s(d),s(G),s(Q),s(Z),s(k)),b(a,o),b(m,o),b(J,o),b(I,o)}}}function yt(C){let a,p,n,w="Podemos probar que la función sirve al pasarle la primera entrada de texto en el corpus e inspeccionando la forma de la salida:",d,m,G,J,Q,Z,R="¡Hemos convertido la primera entrada del corpus en un vector de 768 dimensiones! Ahora podemos usar <code>Dataset.map()</code> para aplicar nuestra función <code>get_embeddings()</code> a cada fila del corpus, así que creemos una columna <code>embeddings</code> así:",k,I,$;return a=new j({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}}),m=new j({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}}),J=new j({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNzY4JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),I=new j({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),p=r(),n=T("p"),n.textContent=w,d=r(),u(m.$$.fragment),G=r(),u(J.$$.fragment),Q=r(),Z=T("p"),Z.innerHTML=R,k=r(),u(I.$$.fragment)},l(o){y(a.$$.fragment,o),p=i(o),n=h(o,"P",{"data-svelte-h":!0}),f(n)!=="svelte-178z0tw"&&(n.textContent=w),d=i(o),y(m.$$.fragment,o),G=i(o),y(J.$$.fragment,o),Q=i(o),Z=h(o,"P",{"data-svelte-h":!0}),f(Z)!=="svelte-1lugv4h"&&(Z.innerHTML=R),k=i(o),y(I.$$.fragment,o)},m(o,g){U(a,o,g),t(o,p,g),t(o,n,g),t(o,d,g),U(m,o,g),t(o,G,g),U(J,o,g),t(o,Q,g),t(o,Z,g),t(o,k,g),U(I,o,g),$=!0},i(o){$||(c(a.$$.fragment,o),c(m.$$.fragment,o),c(J.$$.fragment,o),c(I.$$.fragment,o),$=!0)},o(o){M(a.$$.fragment,o),M(m.$$.fragment,o),M(J.$$.fragment,o),M(I.$$.fragment,o),$=!1},d(o){o&&(s(p),s(n),s(d),s(G),s(Q),s(Z),s(k)),b(a,o),b(m,o),b(J,o),b(I,o)}}}function Ut(C){let a,p,n,w;return a=new j({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 j({props:{code:"KDElMkMlMjA3Njgp",highlighted:'(<span class="hljs-number">1</span>, <span class="hljs-number">768</span>)',wrap:!1}}),{c(){u(a.$$.fragment),p=r(),u(n.$$.fragment)},l(d){y(a.$$.fragment,d),p=i(d),y(n.$$.fragment,d)},m(d,m){U(a,d,m),t(d,p,m),U(n,d,m),w=!0},i(d){w||(c(a.$$.fragment,d),c(n.$$.fragment,d),w=!0)},o(d){M(a.$$.fragment,d),M(n.$$.fragment,d),w=!1},d(d){d&&s(p),b(a,d),b(n,d)}}}function bt(C){let a,p,n,w;return a=new j({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 j({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNzY4JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),{c(){u(a.$$.fragment),p=r(),u(n.$$.fragment)},l(d){y(a.$$.fragment,d),p=i(d),y(n.$$.fragment,d)},m(d,m){U(a,d,m),t(d,p,m),U(n,d,m),w=!0},i(d){w||(c(a.$$.fragment,d),c(n.$$.fragment,d),w=!0)},o(d){M(a.$$.fragment,d),M(n.$$.fragment,d),w=!1},d(d){d&&s(p),b(a,d),b(n,d)}}}function Jt(C){let a,p="✏️ <strong>¡Inténtalo!</strong> Crea tu propia pregunta y prueba si puedes encontrar una respuesta en los documentos devueltos. Puede que tengas que incrementar el parámetro <code>k</code> en <code>Dataset.get_nearest_examples()</code> para aumentar la búsqueda.";return{c(){a=T("p"),a.innerHTML=p},l(n){a=h(n,"P",{"data-svelte-h":!0}),f(a)!=="svelte-19niqd5"&&(a.innerHTML=p)},m(n,w){t(n,a,w)},p:Ks,d(n){n&&s(a)}}}function Tt(C){let a,p,n,w,d,m,G,J,Q,Z,R,k,I='En la <a href="/course/chapter5/5">sección 5</a> creamos un dataset de issues y comentarios del repositorio de GitHub de 🤗 Datasets. En esta sección usaremos esta información para construir un motor de búsqueda que nos ayude a responder nuestras preguntas más apremiantes sobre la librería.',$,o,g,S,Oe,F,cs='Como vimos en el <a href="/course/chapter1">Capítulo 1</a>, los modelos de lenguaje basados en Transformers representan cada token en un texto como un <em>vector de embeddings</em>. Resulta que podemos agrupar los <em>embeddings</em> individuales en representaciones vectoriales para oraciones, párrafos o (en algunos casos) documentos completos. Estos <em>embeddings</em> pueden ser usados para encontrar documentos similares en el corpus al calcular la similaridad del producto punto (o alguna otra métrica de similaridad) entre cada <em>embedding</em> y devolver los documentos con la mayor coincidencia.',el,E,ps="En esta sección vamos a usar <em>embeddings</em> para desarrollar un motor de búsqueda semántica. Estos motores de búsqueda tienen varias ventajas sobre abordajes convencionales basados en la coincidencia de palabras clave en una búsqueda con los documentos.",ll,W,ms='<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."/>',sl,H,tl,q,us="Lo primero que tenemos que hacer es descargar el dataset de issues de GitHub, así que usaremos la librería 🤗 Hub para resolver la URL en la que está almacenado nuestro archivo en el Hub de Hugging Face:",al,A,nl,D,ys='Con la URL almacenada en <code>data_files</code>, podemos cargar el dataset remoto usando el método introducido en la <a href="/course/chapter5/2">sección 2</a>:',ol,L,rl,P,il,K,Us="Hemos especificado el conjunto <code>train</code> por defecto en <code>load_dataset()</code>, de tal manera que devuelva un objeto <code>Dataset</code> en vez de un <code>DatasetDict</code>. Lo primero que debemos hacer es filtrar los pull requests, dado que estos no se suelen usar para resolver preguntas de usuarios e introducirán ruido en nuestro motor de búsqueda. Como ya debe ser familiar para ti, podemos usar la función <code>Dataset.filter()</code> para excluir estas filas en nuestro dataset. A su vez, filtremos las filas que no tienen comentarios, dado que no van a darnos respuestas para las preguntas de los usuarios.",dl,O,Ml,ee,cl,le,bs="Podemos ver que hay un gran número de columnas en nuestro dataset, muchas de las cuales no necesitamos para construir nuestro motor de búsqueda. Desde la perspectiva de la búsqueda, las columnas más informativas son <code>title</code>, <code>body</code> y <code>comments</code>, mientras que <code>html_url</code> nos indica un link al issue correspondiente. Usemos la función <code>Dataset.remove_columns()</code> para eliminar el resto:",pl,se,ml,te,ul,ae,Js='Para crear nuestros <em>embeddings</em>, vamos a ampliar cada comentario añadiéndole el título y el cuerpo del issue, dado que estos campos suelen incluir información de contexto útil. Dado que nuestra función <code>comments</code> es una lista de comentarios para cada issue, necesitamos “explotar” la columna para que cada fila sea una tupla <code>(html_url, title, body, comment)</code>. Podemos hacer esto en Pandas con la <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html" rel="nofollow">función <code>DataFrame.explode()</code></a>, que crea una nueva fila para cada elemento en una columna que está en forma de lista, al tiempo que replica el resto de los valores de las otras columnas. Para verlo en acción, primero debemos cambiar al formato <code>DataFrame</code> de Pandas:',yl,ne,Ul,oe,Ts="Si inspeccionamos la primera fila en este <code>DataFrame</code> podemos ver que hay 4 comentarios asociados con este issue:",bl,re,Jl,ie,Tl,de,hs="Cuando “explotamos” <code>df</code>, queremos obtener una fila para cada uno de estos comentarios. Veamos si este es el caso:",hl,Me,jl,_,js='<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>',fl,ce,fs="Genial, podemos ver que las filas se han replicado y que la columna <code>comments</code> incluye los comentarios individuales. Ahora que hemos terminado con Pandas, podemos volver a cambiar el formato a <code>Dataset</code> cargando el <code>DataFrame</code> en memoria:",wl,pe,gl,me,Ql,ue,ws="¡Esto nos ha dado varios miles de comentarios con los que trabajar!",Zl,z,Gl,ye,gs="Ahora que tenemos un comentario para cada fila, creemos una columna <code>comments_length</code> que contenga el número de palabras por comentario:",Cl,Ue,Il,be,Qs="Podemos usar esta nueva columna para filtrar los comentarios cortos, que típicamente incluyen cosas como “cc @letwun” o “¡Gracias!”, que no son relevantes para nuestro motor de búsqueda. No hay un número preciso que debamos filtrar, pero alrededor de 15 palabras es un buen comienzo:",kl,Je,$l,Te,Rl,he,Zs="Ahora que hemos limpiado un poco el dataset, vamos a concatenar el título, la descripción y los comentarios del issue en una nueva columna <code>text</code>. Como lo hemos venido haciendo, escribiremos una función para pasarla a <code>Dataset.map()</code>:",_l,je,Nl,fe,Gs="¡Por fin estamos listos para crear <em>embeddings</em>!",Bl,we,Xl,ge,Cs='En el <a href="/course/chapter2">Capítulo 2</a> vimos que podemos obtener <em>embeddings</em> usando la clase <code>AutoModel</code>. Todo lo que tenemos que hacer es escoger un punto de control adecuado para cargar el modelo. Afortunadamente, existe una librería llamada <code>sentence-transformers</code> que se especializa en crear <em>embeddings</em>. Como se describe en la <a href="https://www.sbert.net/examples/applications/semantic-search/README.html#symmetric-vs-asymmetric-semantic-search" rel="nofollow">documentación</a> de esta librería, nuestro caso de uso es un ejemplo de <em>búsqueda semántica asimétrica</em> porque tenemos una pregunta corta cuya respuesta queremos encontrar en un documento más grande, como un comentario de un issue. La tabla de <a href="https://www.sbert.net/docs/pretrained_models.html#model-overview" rel="nofollow">resumen de modelos</a> en la documentación nos indica que el punto de control <code>multi-qa-mpnet-base-dot-v1</code> tiene el mejor desempeño para la búsqueda semántica, así que lo usaremos para nuestra aplicación. También cargaremos el tokenizador usando el mismo punto de control:',xl,N,B,qe,Qe,Is="Como mencionamos con anterioridad, queremos representar cada entrada en el corpus de issues de GitHub como un vector individual, así que necesitamos agrupar o promediar nuestros <em>embeddings</em> de tokes de alguna manera. Un abordaje popular es ejecutar <em>CLS pooling</em> en los outputs de nuestro modelo, donde simplemente vamos a recolectar el último estado oculto para el token especial <code>[CLS]</code>. La siguiente función nos ayudará con esto:",vl,Ze,Vl,Ge,ks="Ahora crearemos una función que va a tokenizar una lista de documentos, ubicar los tensores en la GPU, alimentarlos al modelo y aplicar CLS pooling a los outputs:",Wl,X,x,Ae,Ce,$s="Los <em>embeddings</em> se han convertido en arrays de NumPy, esto es porque 🤗 Datasets los necesita en este formato cuando queremos indexarlos con FAISS, que es lo que haremos a continuación.",zl,Ie,Yl,ke,Rs='Ahora que tenemos un dataset de embeddings, necesitamos una manera de buscar sobre ellos. Para hacerlo, usaremos una estructura especial de datos en 🤗 Datasets llamada <em>índice FAISS</em>. [FAISS] (<a href="https://faiss.ai/" rel="nofollow">https://faiss.ai/</a>) (siglas para <em>Facebook AI Similarity Search</em>) es una librería que contiene algoritmos eficientes para buscar y agrupar rápidamente vectores de <em>embeddings</em>.',Sl,$e,_s="La idea básica detrás de FAISS es que crea una estructura especial de datos, llamada <em>índice</em>, que te permite encontrar cuáles embeddings son parecidos a un <em>embedding</em> de entrada. La creación de un índice FAISS en 🤗 Datasets es muy simple: usamos la función <code>Dataset.add_faiss_index()</code> y especificamos cuál columna del dataset queremos indexar:",Fl,Re,El,_e,Ns="Ahora podemos hacer búsquedas sobre este índice al hacer una búsqueda del vecino más cercano con la función <code>Dataset.get_nearest_examples()</code>. Probémoslo al hacer el <em>embedding</em> de una pregunta de la siguiente manera:",Hl,v,V,De,Ne,Bs="Tal como en los documentos, ahora tenemos un vector de 768 dimensiones que representa la pregunta, que podemos comparar con el corpus entero para encontrar los <em>embeddings</em> más parecidos:",ql,Be,Al,Xe,Xs="La función <code>Dataset.get_nearest_examples()</code> devuelve una tupla de puntajes que calcula un ranking de la coincidencia entre la pregunta y el documento, así como un conjunto correspondiente de muestras (en este caso, los 5 mejores resultados). Recojámoslos en un <code>pandas.DataFrame</code> para ordenarlos fácilmente:",Dl,xe,Ll,ve,xs="Podemos iterar sobre las primeras filas para ver qué tanto coincide la pregunta con los comentarios disponibles:",Pl,Ve,Kl,We,Ol,ze,vs="¡No está mal! El segundo comentario parece responder la pregunta.",es,Y,ls,Ye,ss,Le,ts;d=new rt({props:{fw:C[0]}}),G=new Ke({props:{title:"Búsqueda semántica con FAISS",local:"búsqueda-semántica-con-faiss",headingTag:"h1"}});const Vs=[Mt,dt],Se=[];function Ws(e,l){return e[0]==="pt"?0:1}Q=Ws(C),Z=Se[Q]=Vs[Q](C),o=new ot({props:{id:"OATCgQtNX2o"}}),S=new Ke({props:{title:"Usando embeddings para la búsqueda semántica",local:"usando-embeddings-para-la-búsqueda-semántica",headingTag:"h2"}}),H=new Ke({props:{title:"Cargando y preparando el dataset",local:"cargando-y-preparando-el-dataset",headingTag:"h2"}}),A=new j({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 j({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 j({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 j({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}}),ee=new j({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}}),se=new j({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}}),te=new j({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}}),ne=new j({props:{code:"aXNzdWVzX2RhdGFzZXQuc2V0X2Zvcm1hdCglMjJwYW5kYXMlMjIpJTBBZGYlMjAlM0QlMjBpc3N1ZXNfZGF0YXNldCU1QiUzQSU1RA==",highlighted:`issues_dataset.set_format(<span class="hljs-string">&quot;pandas&quot;</span>)
df = issues_dataset[:]`,wrap:!1}}),re=new j({props:{code:"ZGYlNUIlMjJjb21tZW50cyUyMiU1RCU1QjAlNUQudG9saXN0KCk=",highlighted:'df[<span class="hljs-string">&quot;comments&quot;</span>][<span class="hljs-number">0</span>].tolist()',wrap:!1}}),ie=new j({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}}),Me=new j({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}}),pe=new j({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}}),me=new j({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 Ps({props:{$$slots:{default:[ct]},$$scope:{ctx:C}}}),Ue=new j({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}}),Je=new j({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}}),Te=new j({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}}),je=new j({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}}),we=new Ke({props:{title:"Creando embeddings de texto",local:"creando-embeddings-de-texto",headingTag:"h2"}});const zs=[mt,pt],Fe=[];function Ys(e,l){return e[0]==="pt"?0:1}N=Ys(C),B=Fe[N]=zs[N](C),Ze=new j({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 Ss=[yt,ut],Ee=[];function Fs(e,l){return e[0]==="pt"?0:1}X=Fs(C),x=Ee[X]=Ss[X](C),Ie=new Ke({props:{title:"Usando FAISS para una búsqueda eficiente por similaridad",local:"usando-faiss-para-una-búsqueda-eficiente-por-similaridad",headingTag:"h2"}}),Re=new j({props:{code:"ZW1iZWRkaW5nc19kYXRhc2V0LmFkZF9mYWlzc19pbmRleChjb2x1bW4lM0QlMjJlbWJlZGRpbmdzJTIyKQ==",highlighted:'embeddings_dataset.add_faiss_index(column=<span class="hljs-string">&quot;embeddings&quot;</span>)',wrap:!1}});const Es=[bt,Ut],He=[];function Hs(e,l){return e[0]==="pt"?0:1}return v=Hs(C),V=He[v]=Es[v](C),Be=new j({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}}),xe=new j({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}}),Ve=new j({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}}),We=new j({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}}),Y=new Ps({props:{$$slots:{default:[Jt]},$$scope:{ctx:C}}}),Ye=new it({props:{source:"https://github.com/huggingface/course/blob/main/chapters/es/chapter5/6.mdx"}}),{c(){a=T("meta"),p=r(),n=T("p"),w=r(),u(d.$$.fragment),m=r(),u(G.$$.fragment),J=r(),Z.c(),R=r(),k=T("p"),k.innerHTML=I,$=r(),u(o.$$.fragment),g=r(),u(S.$$.fragment),Oe=r(),F=T("p"),F.innerHTML=cs,el=r(),E=T("p"),E.innerHTML=ps,ll=r(),W=T("div"),W.innerHTML=ms,sl=r(),u(H.$$.fragment),tl=r(),q=T("p"),q.textContent=us,al=r(),u(A.$$.fragment),nl=r(),D=T("p"),D.innerHTML=ys,ol=r(),u(L.$$.fragment),rl=r(),u(P.$$.fragment),il=r(),K=T("p"),K.innerHTML=Us,dl=r(),u(O.$$.fragment),Ml=r(),u(ee.$$.fragment),cl=r(),le=T("p"),le.innerHTML=bs,pl=r(),u(se.$$.fragment),ml=r(),u(te.$$.fragment),ul=r(),ae=T("p"),ae.innerHTML=Js,yl=r(),u(ne.$$.fragment),Ul=r(),oe=T("p"),oe.innerHTML=Ts,bl=r(),u(re.$$.fragment),Jl=r(),u(ie.$$.fragment),Tl=r(),de=T("p"),de.innerHTML=hs,hl=r(),u(Me.$$.fragment),jl=r(),_=T("table"),_.innerHTML=js,fl=r(),ce=T("p"),ce.innerHTML=fs,wl=r(),u(pe.$$.fragment),gl=r(),u(me.$$.fragment),Ql=r(),ue=T("p"),ue.textContent=ws,Zl=r(),u(z.$$.fragment),Gl=r(),ye=T("p"),ye.innerHTML=gs,Cl=r(),u(Ue.$$.fragment),Il=r(),be=T("p"),be.textContent=Qs,kl=r(),u(Je.$$.fragment),$l=r(),u(Te.$$.fragment),Rl=r(),he=T("p"),he.innerHTML=Zs,_l=r(),u(je.$$.fragment),Nl=r(),fe=T("p"),fe.innerHTML=Gs,Bl=r(),u(we.$$.fragment),Xl=r(),ge=T("p"),ge.innerHTML=Cs,xl=r(),B.c(),qe=r(),Qe=T("p"),Qe.innerHTML=Is,vl=r(),u(Ze.$$.fragment),Vl=r(),Ge=T("p"),Ge.textContent=ks,Wl=r(),x.c(),Ae=r(),Ce=T("p"),Ce.innerHTML=$s,zl=r(),u(Ie.$$.fragment),Yl=r(),ke=T("p"),ke.innerHTML=Rs,Sl=r(),$e=T("p"),$e.innerHTML=_s,Fl=r(),u(Re.$$.fragment),El=r(),_e=T("p"),_e.innerHTML=Ns,Hl=r(),V.c(),De=r(),Ne=T("p"),Ne.innerHTML=Bs,ql=r(),u(Be.$$.fragment),Al=r(),Xe=T("p"),Xe.innerHTML=Xs,Dl=r(),u(xe.$$.fragment),Ll=r(),ve=T("p"),ve.textContent=xs,Pl=r(),u(Ve.$$.fragment),Kl=r(),u(We.$$.fragment),Ol=r(),ze=T("p"),ze.textContent=vs,es=r(),u(Y.$$.fragment),ls=r(),u(Ye.$$.fragment),ss=r(),Le=T("p"),this.h()},l(e){const l=at("svelte-u9bgzb",document.head);a=h(l,"META",{name:!0,content:!0}),l.forEach(s),p=i(e),n=h(e,"P",{}),Ls(n).forEach(s),w=i(e),y(d.$$.fragment,e),m=i(e),y(G.$$.fragment,e),J=i(e),Z.l(e),R=i(e),k=h(e,"P",{"data-svelte-h":!0}),f(k)!=="svelte-t7bal5"&&(k.innerHTML=I),$=i(e),y(o.$$.fragment,e),g=i(e),y(S.$$.fragment,e),Oe=i(e),F=h(e,"P",{"data-svelte-h":!0}),f(F)!=="svelte-1nnlfu0"&&(F.innerHTML=cs),el=i(e),E=h(e,"P",{"data-svelte-h":!0}),f(E)!=="svelte-1f5fzan"&&(E.innerHTML=ps),ll=i(e),W=h(e,"DIV",{class:!0,"data-svelte-h":!0}),f(W)!=="svelte-yxatr"&&(W.innerHTML=ms),sl=i(e),y(H.$$.fragment,e),tl=i(e),q=h(e,"P",{"data-svelte-h":!0}),f(q)!=="svelte-1dfvkf6"&&(q.textContent=us),al=i(e),y(A.$$.fragment,e),nl=i(e),D=h(e,"P",{"data-svelte-h":!0}),f(D)!=="svelte-y7co8v"&&(D.innerHTML=ys),ol=i(e),y(L.$$.fragment,e),rl=i(e),y(P.$$.fragment,e),il=i(e),K=h(e,"P",{"data-svelte-h":!0}),f(K)!=="svelte-14kxsrj"&&(K.innerHTML=Us),dl=i(e),y(O.$$.fragment,e),Ml=i(e),y(ee.$$.fragment,e),cl=i(e),le=h(e,"P",{"data-svelte-h":!0}),f(le)!=="svelte-1we9cmg"&&(le.innerHTML=bs),pl=i(e),y(se.$$.fragment,e),ml=i(e),y(te.$$.fragment,e),ul=i(e),ae=h(e,"P",{"data-svelte-h":!0}),f(ae)!=="svelte-1brypuz"&&(ae.innerHTML=Js),yl=i(e),y(ne.$$.fragment,e),Ul=i(e),oe=h(e,"P",{"data-svelte-h":!0}),f(oe)!=="svelte-1kpvxm7"&&(oe.innerHTML=Ts),bl=i(e),y(re.$$.fragment,e),Jl=i(e),y(ie.$$.fragment,e),Tl=i(e),de=h(e,"P",{"data-svelte-h":!0}),f(de)!=="svelte-1ucd0z"&&(de.innerHTML=hs),hl=i(e),y(Me.$$.fragment,e),jl=i(e),_=h(e,"TABLE",{border:!0,class:!0,style:!0,"data-svelte-h":!0}),f(_)!=="svelte-1g5whzd"&&(_.innerHTML=js),fl=i(e),ce=h(e,"P",{"data-svelte-h":!0}),f(ce)!=="svelte-yda2cc"&&(ce.innerHTML=fs),wl=i(e),y(pe.$$.fragment,e),gl=i(e),y(me.$$.fragment,e),Ql=i(e),ue=h(e,"P",{"data-svelte-h":!0}),f(ue)!=="svelte-3cnpb7"&&(ue.textContent=ws),Zl=i(e),y(z.$$.fragment,e),Gl=i(e),ye=h(e,"P",{"data-svelte-h":!0}),f(ye)!=="svelte-n47nuk"&&(ye.innerHTML=gs),Cl=i(e),y(Ue.$$.fragment,e),Il=i(e),be=h(e,"P",{"data-svelte-h":!0}),f(be)!=="svelte-15horgb"&&(be.textContent=Qs),kl=i(e),y(Je.$$.fragment,e),$l=i(e),y(Te.$$.fragment,e),Rl=i(e),he=h(e,"P",{"data-svelte-h":!0}),f(he)!=="svelte-nt47w8"&&(he.innerHTML=Zs),_l=i(e),y(je.$$.fragment,e),Nl=i(e),fe=h(e,"P",{"data-svelte-h":!0}),f(fe)!=="svelte-1ggzwc6"&&(fe.innerHTML=Gs),Bl=i(e),y(we.$$.fragment,e),Xl=i(e),ge=h(e,"P",{"data-svelte-h":!0}),f(ge)!=="svelte-11yqbvg"&&(ge.innerHTML=Cs),xl=i(e),B.l(e),qe=i(e),Qe=h(e,"P",{"data-svelte-h":!0}),f(Qe)!=="svelte-168rkr9"&&(Qe.innerHTML=Is),vl=i(e),y(Ze.$$.fragment,e),Vl=i(e),Ge=h(e,"P",{"data-svelte-h":!0}),f(Ge)!=="svelte-1q464ym"&&(Ge.textContent=ks),Wl=i(e),x.l(e),Ae=i(e),Ce=h(e,"P",{"data-svelte-h":!0}),f(Ce)!=="svelte-1dvt39m"&&(Ce.innerHTML=$s),zl=i(e),y(Ie.$$.fragment,e),Yl=i(e),ke=h(e,"P",{"data-svelte-h":!0}),f(ke)!=="svelte-1aedk3a"&&(ke.innerHTML=Rs),Sl=i(e),$e=h(e,"P",{"data-svelte-h":!0}),f($e)!=="svelte-14lzovr"&&($e.innerHTML=_s),Fl=i(e),y(Re.$$.fragment,e),El=i(e),_e=h(e,"P",{"data-svelte-h":!0}),f(_e)!=="svelte-1przd6c"&&(_e.innerHTML=Ns),Hl=i(e),V.l(e),De=i(e),Ne=h(e,"P",{"data-svelte-h":!0}),f(Ne)!=="svelte-1dijurl"&&(Ne.innerHTML=Bs),ql=i(e),y(Be.$$.fragment,e),Al=i(e),Xe=h(e,"P",{"data-svelte-h":!0}),f(Xe)!=="svelte-1icvnkv"&&(Xe.innerHTML=Xs),Dl=i(e),y(xe.$$.fragment,e),Ll=i(e),ve=h(e,"P",{"data-svelte-h":!0}),f(ve)!=="svelte-vtb026"&&(ve.textContent=xs),Pl=i(e),y(Ve.$$.fragment,e),Kl=i(e),y(We.$$.fragment,e),Ol=i(e),ze=h(e,"P",{"data-svelte-h":!0}),f(ze)!=="svelte-1ierf80"&&(ze.textContent=vs),es=i(e),y(Y.$$.fragment,e),ls=i(e),y(Ye.$$.fragment,e),ss=i(e),Le=h(e,"P",{}),Ls(Le).forEach(s),this.h()},h(){Pe(a,"name","hf:doc:metadata"),Pe(a,"content",ht),Pe(W,"class","flex justify-center"),Pe(_,"border","1"),Pe(_,"class","dataframe"),Ms(_,"table-layout","fixed"),Ms(_,"word-wrap","break-word"),Ms(_,"width","100%")},m(e,l){nt(document.head,a),t(e,p,l),t(e,n,l),t(e,w,l),U(d,e,l),t(e,m,l),U(G,e,l),t(e,J,l),Se[Q].m(e,l),t(e,R,l),t(e,k,l),t(e,$,l),U(o,e,l),t(e,g,l),U(S,e,l),t(e,Oe,l),t(e,F,l),t(e,el,l),t(e,E,l),t(e,ll,l),t(e,W,l),t(e,sl,l),U(H,e,l),t(e,tl,l),t(e,q,l),t(e,al,l),U(A,e,l),t(e,nl,l),t(e,D,l),t(e,ol,l),U(L,e,l),t(e,rl,l),U(P,e,l),t(e,il,l),t(e,K,l),t(e,dl,l),U(O,e,l),t(e,Ml,l),U(ee,e,l),t(e,cl,l),t(e,le,l),t(e,pl,l),U(se,e,l),t(e,ml,l),U(te,e,l),t(e,ul,l),t(e,ae,l),t(e,yl,l),U(ne,e,l),t(e,Ul,l),t(e,oe,l),t(e,bl,l),U(re,e,l),t(e,Jl,l),U(ie,e,l),t(e,Tl,l),t(e,de,l),t(e,hl,l),U(Me,e,l),t(e,jl,l),t(e,_,l),t(e,fl,l),t(e,ce,l),t(e,wl,l),U(pe,e,l),t(e,gl,l),U(me,e,l),t(e,Ql,l),t(e,ue,l),t(e,Zl,l),U(z,e,l),t(e,Gl,l),t(e,ye,l),t(e,Cl,l),U(Ue,e,l),t(e,Il,l),t(e,be,l),t(e,kl,l),U(Je,e,l),t(e,$l,l),U(Te,e,l),t(e,Rl,l),t(e,he,l),t(e,_l,l),U(je,e,l),t(e,Nl,l),t(e,fe,l),t(e,Bl,l),U(we,e,l),t(e,Xl,l),t(e,ge,l),t(e,xl,l),Fe[N].m(e,l),t(e,qe,l),t(e,Qe,l),t(e,vl,l),U(Ze,e,l),t(e,Vl,l),t(e,Ge,l),t(e,Wl,l),Ee[X].m(e,l),t(e,Ae,l),t(e,Ce,l),t(e,zl,l),U(Ie,e,l),t(e,Yl,l),t(e,ke,l),t(e,Sl,l),t(e,$e,l),t(e,Fl,l),U(Re,e,l),t(e,El,l),t(e,_e,l),t(e,Hl,l),He[v].m(e,l),t(e,De,l),t(e,Ne,l),t(e,ql,l),U(Be,e,l),t(e,Al,l),t(e,Xe,l),t(e,Dl,l),U(xe,e,l),t(e,Ll,l),t(e,ve,l),t(e,Pl,l),U(Ve,e,l),t(e,Kl,l),U(We,e,l),t(e,Ol,l),t(e,ze,l),t(e,es,l),U(Y,e,l),t(e,ls,l),U(Ye,e,l),t(e,ss,l),t(e,Le,l),ts=!0},p(e,[l]){const qs={};l&1&&(qs.fw=e[0]),d.$set(qs);let os=Q;Q=Ws(e),Q!==os&&(ns(),M(Se[os],1,1,()=>{Se[os]=null}),as(),Z=Se[Q],Z||(Z=Se[Q]=Vs[Q](e),Z.c()),c(Z,1),Z.m(R.parentNode,R));const As={};l&2&&(As.$$scope={dirty:l,ctx:e}),z.$set(As);let rs=N;N=Ys(e),N!==rs&&(ns(),M(Fe[rs],1,1,()=>{Fe[rs]=null}),as(),B=Fe[N],B||(B=Fe[N]=zs[N](e),B.c()),c(B,1),B.m(qe.parentNode,qe));let is=X;X=Fs(e),X!==is&&(ns(),M(Ee[is],1,1,()=>{Ee[is]=null}),as(),x=Ee[X],x||(x=Ee[X]=Ss[X](e),x.c()),c(x,1),x.m(Ae.parentNode,Ae));let ds=v;v=Hs(e),v!==ds&&(ns(),M(He[ds],1,1,()=>{He[ds]=null}),as(),V=He[v],V||(V=He[v]=Es[v](e),V.c()),c(V,1),V.m(De.parentNode,De));const Ds={};l&2&&(Ds.$$scope={dirty:l,ctx:e}),Y.$set(Ds)},i(e){ts||(c(d.$$.fragment,e),c(G.$$.fragment,e),c(Z),c(o.$$.fragment,e),c(S.$$.fragment,e),c(H.$$.fragment,e),c(A.$$.fragment,e),c(L.$$.fragment,e),c(P.$$.fragment,e),c(O.$$.fragment,e),c(ee.$$.fragment,e),c(se.$$.fragment,e),c(te.$$.fragment,e),c(ne.$$.fragment,e),c(re.$$.fragment,e),c(ie.$$.fragment,e),c(Me.$$.fragment,e),c(pe.$$.fragment,e),c(me.$$.fragment,e),c(z.$$.fragment,e),c(Ue.$$.fragment,e),c(Je.$$.fragment,e),c(Te.$$.fragment,e),c(je.$$.fragment,e),c(we.$$.fragment,e),c(B),c(Ze.$$.fragment,e),c(x),c(Ie.$$.fragment,e),c(Re.$$.fragment,e),c(V),c(Be.$$.fragment,e),c(xe.$$.fragment,e),c(Ve.$$.fragment,e),c(We.$$.fragment,e),c(Y.$$.fragment,e),c(Ye.$$.fragment,e),ts=!0)},o(e){M(d.$$.fragment,e),M(G.$$.fragment,e),M(Z),M(o.$$.fragment,e),M(S.$$.fragment,e),M(H.$$.fragment,e),M(A.$$.fragment,e),M(L.$$.fragment,e),M(P.$$.fragment,e),M(O.$$.fragment,e),M(ee.$$.fragment,e),M(se.$$.fragment,e),M(te.$$.fragment,e),M(ne.$$.fragment,e),M(re.$$.fragment,e),M(ie.$$.fragment,e),M(Me.$$.fragment,e),M(pe.$$.fragment,e),M(me.$$.fragment,e),M(z.$$.fragment,e),M(Ue.$$.fragment,e),M(Je.$$.fragment,e),M(Te.$$.fragment,e),M(je.$$.fragment,e),M(we.$$.fragment,e),M(B),M(Ze.$$.fragment,e),M(x),M(Ie.$$.fragment,e),M(Re.$$.fragment,e),M(V),M(Be.$$.fragment,e),M(xe.$$.fragment,e),M(Ve.$$.fragment,e),M(We.$$.fragment,e),M(Y.$$.fragment,e),M(Ye.$$.fragment,e),ts=!1},d(e){e&&(s(p),s(n),s(w),s(m),s(J),s(R),s(k),s($),s(g),s(Oe),s(F),s(el),s(E),s(ll),s(W),s(sl),s(tl),s(q),s(al),s(nl),s(D),s(ol),s(rl),s(il),s(K),s(dl),s(Ml),s(cl),s(le),s(pl),s(ml),s(ul),s(ae),s(yl),s(Ul),s(oe),s(bl),s(Jl),s(Tl),s(de),s(hl),s(jl),s(_),s(fl),s(ce),s(wl),s(gl),s(Ql),s(ue),s(Zl),s(Gl),s(ye),s(Cl),s(Il),s(be),s(kl),s($l),s(Rl),s(he),s(_l),s(Nl),s(fe),s(Bl),s(Xl),s(ge),s(xl),s(qe),s(Qe),s(vl),s(Vl),s(Ge),s(Wl),s(Ae),s(Ce),s(zl),s(Yl),s(ke),s(Sl),s($e),s(Fl),s(El),s(_e),s(Hl),s(De),s(Ne),s(ql),s(Al),s(Xe),s(Dl),s(Ll),s(ve),s(Pl),s(Kl),s(Ol),s(ze),s(es),s(ls),s(ss),s(Le)),s(a),b(d,e),b(G,e),Se[Q].d(e),b(o,e),b(S,e),b(H,e),b(A,e),b(L,e),b(P,e),b(O,e),b(ee,e),b(se,e),b(te,e),b(ne,e),b(re,e),b(ie,e),b(Me,e),b(pe,e),b(me,e),b(z,e),b(Ue,e),b(Je,e),b(Te,e),b(je,e),b(we,e),Fe[N].d(e),b(Ze,e),Ee[X].d(e),b(Ie,e),b(Re,e),He[v].d(e),b(Be,e),b(xe,e),b(Ve,e),b(We,e),b(Y,e),b(Ye,e)}}}const ht='{"title":"Búsqueda semántica con FAISS","local":"búsqueda-semántica-con-faiss","sections":[{"title":"Usando embeddings para la búsqueda semántica","local":"usando-embeddings-para-la-búsqueda-semántica","sections":[],"depth":2},{"title":"Cargando y preparando el dataset","local":"cargando-y-preparando-el-dataset","sections":[],"depth":2},{"title":"Creando embeddings de texto","local":"creando-embeddings-de-texto","sections":[],"depth":2},{"title":"Usando FAISS para una búsqueda eficiente por similaridad","local":"usando-faiss-para-una-búsqueda-eficiente-por-similaridad","sections":[],"depth":2}],"depth":1}';function jt(C,a,p){let n="pt";return lt(()=>{const w=new URLSearchParams(window.location.search);p(0,n=w.get("fw")||"pt")}),[n]}class $t extends st{constructor(a){super(),tt(this,a,jt,Tt,et,{})}}export{$t as component};
