import{s as et,o as st,n as Pl}from"../chunks/scheduler.37c15a92.js";import{S as lt,i as tt,g as b,s as i,r as m,A as nt,h as f,f as l,c as r,j as Ll,u as y,x as T,k as Ke,l as cl,y as at,a as t,v as U,t as c,b as nl,d as p,w as h,p as al}from"../chunks/index.2bf4358c.js";import{T as Kl}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 Ol}from"../chunks/CourseFloatingBanner.6add7356.js";import{F as it}from"../chunks/FrameworkSwitchCourse.8d4d4ab6.js";import{H as Pe,E as rt}from"../chunks/getInferenceSnippets.24b50994.js";function ut(C){let n,M;return n=new Ol({props:{chapter:5,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter5/section6_tf.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter5/section6_tf.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter5/section6_tf.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter5/section6_tf.ipynb"}]}}),{c(){m(n.$$.fragment)},l(a){y(n.$$.fragment,a)},m(a,w){U(n,a,w),M=!0},i(a){M||(p(n.$$.fragment,a),M=!0)},o(a){c(n.$$.fragment,a),M=!1},d(a){h(n,a)}}}function ct(C){let n,M;return n=new Ol({props:{chapter:5,classNames:"absolute z-10 right-0 top-0",notebooks:[{label:"English",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/en/chapter5/section6_pt.ipynb"},{label:"Français",value:"https://colab.research.google.com/github/huggingface/notebooks/blob/master/course/fr/chapter5/section6_pt.ipynb"},{label:"English",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/en/chapter5/section6_pt.ipynb"},{label:"Français",value:"https://studiolab.sagemaker.aws/import/github/huggingface/notebooks/blob/master/course/fr/chapter5/section6_pt.ipynb"}]}}),{c(){m(n.$$.fragment)},l(a){y(n.$$.fragment,a)},m(a,w){U(n,a,w),M=!0},i(a){M||(p(n.$$.fragment,a),M=!0)},o(a){c(n.$$.fragment,a),M=!1},d(a){h(n,a)}}}function pt(C){let n,M='✏️ <strong>Essayez !</strong> Voyez si vous pouvez utiliser <code>Dataset.map()</code> pour exploser la colonne <code>comments</code> de <code>issues_dataset</code> <em>sans</em> recourir à l’utilisation de Pandas. C’est un peu délicat. La section <a href="https://huggingface.co/docs/datasets/about_map_batch#batch-mapping" rel="nofollow">« Batch mapping »</a> de la documentation 🤗 <em>Datasets</em> peut être utile pour cette tâche.';return{c(){n=b("p"),n.innerHTML=M},l(a){n=f(a,"P",{"data-svelte-h":!0}),T(n)!=="svelte-19dmo8j"&&(n.innerHTML=M)},m(a,w){t(a,n,w)},p:Pl,d(a){a&&l(n)}}}function Mt(C){let n,M,a,w="Notez que nous avons défini <code>from_pt=True</code> comme argument de la méthode <code>from_pretrained()</code>. C’est parce que le point de contrôle <code>multi-qa-mpnet-base-dot-v1</code> n’a que des poids PyTorch. Donc définir <code>from_pt=True</code> converti automatiquement au format TensorFlow pour nous. Comme vous pouvez le voir, il est très simple de passer d’un <em>framework</em> à l’autre dans 🤗 <em>Transformers</em> !",u;return n=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(){m(n.$$.fragment),M=i(),a=b("p"),a.innerHTML=w},l(d){y(n.$$.fragment,d),M=r(d),a=f(d,"P",{"data-svelte-h":!0}),T(a)!=="svelte-nnecfn"&&(a.innerHTML=w)},m(d,G){U(n,d,G),t(d,M,G),t(d,a,G),u=!0},i(d){u||(p(n.$$.fragment,d),u=!0)},o(d){c(n.$$.fragment,d),u=!1},d(d){d&&(l(M),l(a)),h(n,d)}}}function dt(C){let n,M,a,w="Pour accélérer le processus, il est utile de placer le modèle et les entrées sur un périphérique GPU, alors faisons-le maintenant :",u,d,G;return n=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}}),d=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(){m(n.$$.fragment),M=i(),a=b("p"),a.textContent=w,u=i(),m(d.$$.fragment)},l(J){y(n.$$.fragment,J),M=r(J),a=f(J,"P",{"data-svelte-h":!0}),T(a)!=="svelte-1m0h1ny"&&(a.textContent=w),u=r(J),y(d.$$.fragment,J)},m(J,Q){U(n,J,Q),t(J,M,Q),t(J,a,Q),t(J,u,Q),U(d,J,Q),G=!0},i(J){G||(p(n.$$.fragment,J),p(d.$$.fragment,J),G=!0)},o(J){c(n.$$.fragment,J),c(d.$$.fragment,J),G=!1},d(J){J&&(l(M),l(a),l(u)),h(n,J),h(d,J)}}}function mt(C){let n,M,a,w="Nous pouvons tester le fonctionnement de la fonction en lui donnant la première entrée textuelle de notre corpus et en inspectant la forme de sortie :",u,d,G,J,Q,Z,R="Super ! Nous avons converti la première entrée de notre corpus en un vecteur à 768 dimensions. Nous pouvons utiliser <code>Dataset.map()</code> pour appliquer notre fonction <code>get_embeddings()</code> à chaque ligne de notre corpus. Créons donc une nouvelle colonne <code>embeddings</code> comme suit :",k,I,$;return n=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}}),d=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(){m(n.$$.fragment),M=i(),a=b("p"),a.textContent=w,u=i(),m(d.$$.fragment),G=i(),m(J.$$.fragment),Q=i(),Z=b("p"),Z.innerHTML=R,k=i(),m(I.$$.fragment)},l(o){y(n.$$.fragment,o),M=r(o),a=f(o,"P",{"data-svelte-h":!0}),T(a)!=="svelte-1wcjyg0"&&(a.textContent=w),u=r(o),y(d.$$.fragment,o),G=r(o),y(J.$$.fragment,o),Q=r(o),Z=f(o,"P",{"data-svelte-h":!0}),T(Z)!=="svelte-fug72j"&&(Z.innerHTML=R),k=r(o),y(I.$$.fragment,o)},m(o,g){U(n,o,g),t(o,M,g),t(o,a,g),t(o,u,g),U(d,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){$||(p(n.$$.fragment,o),p(d.$$.fragment,o),p(J.$$.fragment,o),p(I.$$.fragment,o),$=!0)},o(o){c(n.$$.fragment,o),c(d.$$.fragment,o),c(J.$$.fragment,o),c(I.$$.fragment,o),$=!1},d(o){o&&(l(M),l(a),l(u),l(G),l(Q),l(Z),l(k)),h(n,o),h(d,o),h(J,o),h(I,o)}}}function yt(C){let n,M,a,w="Nous pouvons tester le fonctionnement de la fonction en lui donnant la première entrée textuelle de notre corpus et en inspectant la forme de sortie :",u,d,G,J,Q,Z,R="Super ! Nous avons converti la première entrée de notre corpus en un vecteur à 768 dimensions. Nous pouvons utiliser <code>Dataset.map()</code> pour appliquer notre fonction <code>get_embeddings()</code> à chaque ligne de notre corpus. Créons donc une nouvelle colonne <code>embeddings</code> comme suit :",k,I,$;return n=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}}),d=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(){m(n.$$.fragment),M=i(),a=b("p"),a.textContent=w,u=i(),m(d.$$.fragment),G=i(),m(J.$$.fragment),Q=i(),Z=b("p"),Z.innerHTML=R,k=i(),m(I.$$.fragment)},l(o){y(n.$$.fragment,o),M=r(o),a=f(o,"P",{"data-svelte-h":!0}),T(a)!=="svelte-1wcjyg0"&&(a.textContent=w),u=r(o),y(d.$$.fragment,o),G=r(o),y(J.$$.fragment,o),Q=r(o),Z=f(o,"P",{"data-svelte-h":!0}),T(Z)!=="svelte-fug72j"&&(Z.innerHTML=R),k=r(o),y(I.$$.fragment,o)},m(o,g){U(n,o,g),t(o,M,g),t(o,a,g),t(o,u,g),U(d,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){$||(p(n.$$.fragment,o),p(d.$$.fragment,o),p(J.$$.fragment,o),p(I.$$.fragment,o),$=!0)},o(o){c(n.$$.fragment,o),c(d.$$.fragment,o),c(J.$$.fragment,o),c(I.$$.fragment,o),$=!1},d(o){o&&(l(M),l(a),l(u),l(G),l(Q),l(Z),l(k)),h(n,o),h(d,o),h(J,o),h(I,o)}}}function Ut(C){let n,M,a,w;return n=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}}),a=new j({props:{code:"KDElMkMlMjA3Njgp",highlighted:'(<span class="hljs-number">1</span>, <span class="hljs-number">768</span>)',wrap:!1}}),{c(){m(n.$$.fragment),M=i(),m(a.$$.fragment)},l(u){y(n.$$.fragment,u),M=r(u),y(a.$$.fragment,u)},m(u,d){U(n,u,d),t(u,M,d),U(a,u,d),w=!0},i(u){w||(p(n.$$.fragment,u),p(a.$$.fragment,u),w=!0)},o(u){c(n.$$.fragment,u),c(a.$$.fragment,u),w=!1},d(u){u&&l(M),h(n,u),h(a,u)}}}function ht(C){let n,M,a,w;return n=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}}),a=new j({props:{code:"dG9yY2guU2l6ZSglNUIxJTJDJTIwNzY4JTVEKQ==",highlighted:'torch.Size([<span class="hljs-number">1</span>, <span class="hljs-number">768</span>])',wrap:!1}}),{c(){m(n.$$.fragment),M=i(),m(a.$$.fragment)},l(u){y(n.$$.fragment,u),M=r(u),y(a.$$.fragment,u)},m(u,d){U(n,u,d),t(u,M,d),U(a,u,d),w=!0},i(u){w||(p(n.$$.fragment,u),p(a.$$.fragment,u),w=!0)},o(u){c(n.$$.fragment,u),c(a.$$.fragment,u),w=!1},d(u){u&&l(M),h(n,u),h(a,u)}}}function Jt(C){let n,M="✏️ <strong>Essayez !</strong> Créez votre propre requête et voyez si vous pouvez trouver une réponse dans les documents récupérés. Vous devrez peut-être augmenter le paramètre <code>k</code> dans <code>Dataset.get_nearest_examples()</code> pour élargir la recherche.";return{c(){n=b("p"),n.innerHTML=M},l(a){n=f(a,"P",{"data-svelte-h":!0}),T(n)!=="svelte-1ad6xd7"&&(n.innerHTML=M)},m(a,w){t(a,n,w)},p:Pl,d(a){a&&l(n)}}}function bt(C){let n,M,a,w,u,d,G,J,Q,Z,R,k,I='Dans <a href="/course/fr/chapter5/5">section 5</a>, nous avons créé un jeu de données de problèmes et de commentaires GitHub à partir du dépôt 🤗 <em>Datasets</em>. Dans cette section, nous utilisons ces informations pour créer un moteur de recherche qui peut nous aider à trouver des réponses à nos questions les plus urgentes sur la bibliothèque !',$,o,g,F,Oe,S,pl='Comme nous l’avons vu dans le <a href="/course/fr/chapter1">chapitre 1</a>, les modèles de langage basés sur les <em>transformers</em> représentent chaque <em>token</em> dans une étendue de texte sous la forme d’un <em>enchâssement</em>. Il s’avère que l’on peut regrouper les enchâssements individuels pour créer une représentation vectorielle pour des phrases entières, des paragraphes ou (dans certains cas) des documents. Ces enchâssements peuvent ensuite être utilisés pour trouver des documents similaires dans le corpus en calculant la similarité du produit scalaire (ou une autre métrique de similarité) entre chaque enchâssement et en renvoyant les documents avec le plus grand chevauchement.',es,E,Ml="Dans cette section, nous utilisons les enchâssements pour développer un moteur de recherche sémantique. Ces moteurs de recherche offrent plusieurs avantages par rapport aux approches conventionnelles basées sur la correspondance des mots-clés dans une requête avec les documents.",ss,W,dl='<img class="block dark:hidden" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter5/semantic-search.svg" alt="Recherche sémantique."/> <img class="hidden dark:block" src="https://huggingface.co/datasets/huggingface-course/documentation-images/resolve/main/en/chapter5/semantic-search-dark.svg" alt="Recherche sémantique."/>',ls,q,ts,H,ml="La première chose que nous devons faire est de télécharger notre jeu de données de problèmes GitHub. Utilisons la bibliothèque 🤗 <em>Hub</em> pour résoudre l’URL où notre fichier est stocké sur le <em>Hub</em> d’Hugging Face :",ns,A,as,D,yl='Avec l’URL stocké dans <code>data_files</code>, nous pouvons ensuite charger le jeu de données distant en utilisant la méthode introduite dans <a href="/course/fr/chapter5/2">section 2</a> :',os,L,is,K,rs,P,Ul="Ici, nous avons spécifié l’échantillon <code>train</code> par défaut dans <code>load_dataset()</code>, de sorte que cela renvoie un <code>Dataset</code> au lieu d’un <code>DatasetDict</code>. La première chose à faire est de filtrer les <em>pull requests</em> car celles-ci ont tendance à être rarement utilisées pour répondre aux requêtes des utilisateurs et introduiront du bruit dans notre moteur de recherche. Comme cela devrait être familier maintenant, nous pouvons utiliser la fonction <code>Dataset.filter()</code> pour exclure ces lignes de notre jeu de données. Pendant que nous y sommes, filtrons également les lignes sans commentaires, car celles-ci ne fournissent aucune réponse aux requêtes des utilisateurs :",us,O,cs,ee,ps,se,hl="Nous pouvons voir qu’il y a beaucoup de colonnes dans notre jeu de données, dont la plupart n’ont pas besoin de construire notre moteur de recherche. Du point de vue de la recherche, les colonnes les plus informatives sont <code>title</code>, <code>body</code> et <code>comments</code>, tandis que <code>html_url</code> nous fournit un lien vers le problème source. Utilisons la fonction <code>Dataset.remove_columns()</code> pour supprimer le reste :",Ms,le,ds,te,ms,ne,Jl='Pour créer nos enchâssements, nous ajoutons à chaque commentaire le titre et le corps du problème, car ces champs contiennent des informations contextuelles utiles. Étant donné que notre colonne <code>comments</code> est actuellement une liste de commentaires pour chaque problème, nous devons « éclater » la colonne afin que chaque ligne se compose d’un <em>tuple</em> <code>(html_url, title, body, comment)</code>. Dans Pandas, nous pouvons le faire avec la fonction <a href="https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.explode.html" rel="nofollow"><code>DataFrame.explode()</code></a>, qui crée une nouvelle ligne pour chaque élément dans une colonne de type liste, tout en répliquant toutes les autres valeurs de colonne. Pour voir cela en action, passons d’abord au format <code>DataFrame</code> de Pandas :',ys,ae,Us,oe,bl="Si nous inspectons la première ligne de ce <code>DataFrame</code>, nous pouvons voir qu’il y a quatre commentaires associés à ce problème :",hs,ie,Js,re,bs,ue,fl="Lorsque nous décomposons <code>df</code>, nous nous attendons à obtenir une ligne pour chacun de ces commentaires. Vérifions si c’est le cas :",fs,ce,js,v,jl='<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>',Ts,pe,Tl="Génial, nous pouvons voir que les lignes ont été répliquées, avec la colonne <code>comments</code> contenant les commentaires individuels ! Maintenant que nous en avons fini avec Pandas, nous pouvons rapidement revenir à un <code>Dataset</code> en chargeant le <code>DataFrame</code> en mémoire :",ws,Me,gs,de,Qs,me,wl="D’accord, cela nous a donné quelques milliers de commentaires avec lesquels travailler !",Zs,z,Gs,ye,gl="Maintenant que nous avons un commentaire par ligne, créons une nouvelle colonne <code>comments_length</code> contenant le nombre de mots par commentaire :",Cs,Ue,Is,he,Ql="Nous pouvons utiliser cette nouvelle colonne pour filtrer les commentaires courts incluant généralement des éléments tels que « cc @lewtun » ou « Merci ! » qui ne sont pas pertinents pour notre moteur de recherche. Il n’y a pas de nombre précis à sélectionner pour le filtre mais 15 mots semblent être un bon début :",ks,Je,$s,be,Rs,fe,Zl="Après avoir un peu nettoyé notre jeu de données, concaténons le titre, la description et les commentaires du problème dans une nouvelle colonne <code>text</code>. Comme d’habitude, nous allons écrire une fonction simple que nous pouvons passer à <code>Dataset.map()</code> :",vs,je,Ns,Te,Gl="Nous sommes enfin prêts à créer des enchâssements ! Jetons un coup d’œil.",_s,we,xs,ge,Cl='Nous avons vu dans <a href="/course/fr/chapter2">chapitre 2</a> que nous pouvons obtenir des enchâssements de <em>tokens</em> en utilisant la classe <code>AutoModel</code>. Tout ce que nous avons à faire est de choisir un <em>checkpoint</em> approprié à partir duquel charger le modèle. Heureusement, il existe une bibliothèque appelée <code>sentence-transformers</code> dédiée à la création d’enchâssements. Comme décrit dans la <a href="https://www.sbert.net/examples/applications/semantic-search/README.html#symmetric-vs-asymmetric-semantic-search" rel="nofollow">documentation de la bibliothèque</a>, notre cas d’utilisation est un exemple de <em>recherche sémantique asymétrique</em>. En effet, nous avons une requête courte dont nous aimerions trouver la réponse dans un document plus long, par exemple un commentaire à un problème. Le <a href="https://www.sbert.net/docs/pretrained_models.html#model-overview" rel="nofollow">tableau de présentation des modèles</a> de la documentation indique que le <em>checkpoint</em> <code>multi-qa-mpnet-base-dot-v1</code> a les meilleures performances pour la recherche sémantique. Utilisons donc le pour notre application. Nous allons également charger le <em>tokenizer</em> en utilisant le même <em>checkpoint</em> :',Bs,N,_,He,Qe,Il="Comme nous l’avons mentionné précédemment, nous aimerions représenter chaque entrée dans notre corpus de problèmes GitHub comme un vecteur unique. Nous devons donc regrouper ou faire la moyenne de nos enchâssements de <em>tokens</em> d’une manière ou d’une autre. Une approche populaire consiste à effectuer un <em>regroupement CLS</em> sur les sorties de notre modèle, où nous collectons simplement le dernier état caché pour le <em>token</em> spécial <code>[CLS]</code>. La fonction suivante fait ça pour nous :",Xs,Ze,Vs,Ge,kl="Ensuite, nous allons créer une fonction utile qui va tokeniser une liste de documents, placer les tenseurs dans le GPU, les donner au modèle et enfin appliquer le regroupement CLS aux sorties :",Ws,x,B,Ae,Ce,$l="Notez que nous avons converti les enchâssements en tableaux NumPy. C’est parce que 🤗 <em>Datasets</em> nécessite ce format lorsque nous essayons de les indexer avec FAISS, ce que nous ferons ensuite.",zs,Ie,Ys,ke,Rl='Maintenant que nous avons un jeu de données d’incorporations, nous avons besoin d’un moyen de les rechercher. Pour ce faire, nous utiliserons une structure de données spéciale dans 🤗 <em>Datasets</em> appelée <em>FAISS index</em>. <a href="https://faiss.ai/" rel="nofollow">FAISS</a> (abréviation de <em>Facebook AI Similarity Search</em>) est une bibliothèque qui fournit des algorithmes efficaces pour rechercher et regrouper rapidement des vecteurs d’intégration.',Fs,$e,vl="L’idée de base derrière FAISS est de créer une structure de données spéciale appelée un <em>index</em> qui permet de trouver quels plongements sont similaires à un plongement d’entrée. Créer un index FAISS dans 🤗 <em>Datasets</em> est simple — nous utilisons la fonction <code>Dataset.add_faiss_index()</code> et spécifions quelle colonne de notre jeu de données nous aimerions indexer :",Ss,Re,Es,ve,Nl="Nous pouvons maintenant effectuer des requêtes sur cet index en effectuant une recherche des voisins les plus proches avec la fonction <code>Dataset.get_nearest_examples()</code>. Testons cela en enchâssant d’abord une question comme suit :",qs,X,V,De,Ne,_l="Tout comme avec les documents, nous avons maintenant un vecteur de 768 dimensions représentant la requête. Nous pouvons le comparer à l’ensemble du corpus pour trouver les enchâssements les plus similaires :",Hs,_e,As,xe,xl="La fonction <code>Dataset.get_nearest_examples()</code> renvoie un <em>tuple</em> de scores qui classent le chevauchement entre la requête et le document, et un jeu correspondant d’échantillons (ici, les 5 meilleures correspondances). Collectons-les dans un <code>pandas.DataFrame</code> afin de pouvoir les trier facilement :",Ds,Be,Ls,Xe,Bl="Nous pouvons maintenant parcourir les premières lignes pour voir dans quelle mesure notre requête correspond aux commentaires disponibles :",Ks,Ve,Ps,We,Os,ze,Xl="Pas mal ! Notre deuxième résultat semble correspondre à la requête.",el,Y,sl,Ye,ll,Le,tl;u=new it({props:{fw:C[0]}}),G=new Pe({props:{title:"Recherche sémantique avec FAISS",local:"recherche-sémantique-avec-faiss",headingTag:"h1"}});const Vl=[ct,ut],Fe=[];function Wl(e,s){return e[0]==="pt"?0:1}Q=Wl(C),Z=Fe[Q]=Vl[Q](C),o=new ot({props:{id:"OATCgQtNX2o"}}),F=new Pe({props:{title:"Utilisation des enchâssements pour la recherche sémantique",local:"utilisation-des-enchâssements-pour-la-recherche-sémantique",headingTag:"h2"}}),q=new Pe({props:{title:"Chargement et préparation du jeu de données",local:"chargement-et-préparation-du-jeu-de-données",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}}),K=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}}),le=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}}),ae=new j({props:{code:"aXNzdWVzX2RhdGFzZXQuc2V0X2Zvcm1hdCglMjJwYW5kYXMlMjIpJTBBZGYlMjAlM0QlMjBpc3N1ZXNfZGF0YXNldCU1QiUzQSU1RA==",highlighted:`issues_dataset.set_format(<span class="hljs-string">&quot;pandas&quot;</span>)
df = issues_dataset[:]`,wrap:!1}}),ie=new j({props:{code:"ZGYlNUIlMjJjb21tZW50cyUyMiU1RCU1QjAlNUQudG9saXN0KCk=",highlighted:'df[<span class="hljs-string">&quot;comments&quot;</span>][<span class="hljs-number">0</span>].tolist()',wrap:!1}}),re=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}}),ce=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}}),Me=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}}),de=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 Kl({props:{$$slots:{default:[pt]},$$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}}),be=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 Pe({props:{title:"Création d’enchâssements pour les textes",local:"création-denchâssements-pour-les-textes",headingTag:"h2"}});const zl=[dt,Mt],Se=[];function Yl(e,s){return e[0]==="pt"?0:1}N=Yl(C),_=Se[N]=zl[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 Fl=[yt,mt],Ee=[];function Sl(e,s){return e[0]==="pt"?0:1}x=Sl(C),B=Ee[x]=Fl[x](C),Ie=new Pe({props:{title:"Utilisation de FAISS pour une recherche de similarité efficace",local:"utilisation-de-faiss-pour-une-recherche-de-similarité-efficace",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 El=[ht,Ut],qe=[];function ql(e,s){return e[0]==="pt"?0:1}return X=ql(C),V=qe[X]=El[X](C),_e=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}}),Be=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 Kl({props:{$$slots:{default:[Jt]},$$scope:{ctx:C}}}),Ye=new rt({props:{source:"https://github.com/huggingface/course/blob/main/chapters/fr/chapter5/6.mdx"}}),{c(){n=b("meta"),M=i(),a=b("p"),w=i(),m(u.$$.fragment),d=i(),m(G.$$.fragment),J=i(),Z.c(),R=i(),k=b("p"),k.innerHTML=I,$=i(),m(o.$$.fragment),g=i(),m(F.$$.fragment),Oe=i(),S=b("p"),S.innerHTML=pl,es=i(),E=b("p"),E.textContent=Ml,ss=i(),W=b("div"),W.innerHTML=dl,ls=i(),m(q.$$.fragment),ts=i(),H=b("p"),H.innerHTML=ml,ns=i(),m(A.$$.fragment),as=i(),D=b("p"),D.innerHTML=yl,os=i(),m(L.$$.fragment),is=i(),m(K.$$.fragment),rs=i(),P=b("p"),P.innerHTML=Ul,us=i(),m(O.$$.fragment),cs=i(),m(ee.$$.fragment),ps=i(),se=b("p"),se.innerHTML=hl,Ms=i(),m(le.$$.fragment),ds=i(),m(te.$$.fragment),ms=i(),ne=b("p"),ne.innerHTML=Jl,ys=i(),m(ae.$$.fragment),Us=i(),oe=b("p"),oe.innerHTML=bl,hs=i(),m(ie.$$.fragment),Js=i(),m(re.$$.fragment),bs=i(),ue=b("p"),ue.innerHTML=fl,fs=i(),m(ce.$$.fragment),js=i(),v=b("table"),v.innerHTML=jl,Ts=i(),pe=b("p"),pe.innerHTML=Tl,ws=i(),m(Me.$$.fragment),gs=i(),m(de.$$.fragment),Qs=i(),me=b("p"),me.textContent=wl,Zs=i(),m(z.$$.fragment),Gs=i(),ye=b("p"),ye.innerHTML=gl,Cs=i(),m(Ue.$$.fragment),Is=i(),he=b("p"),he.textContent=Ql,ks=i(),m(Je.$$.fragment),$s=i(),m(be.$$.fragment),Rs=i(),fe=b("p"),fe.innerHTML=Zl,vs=i(),m(je.$$.fragment),Ns=i(),Te=b("p"),Te.textContent=Gl,_s=i(),m(we.$$.fragment),xs=i(),ge=b("p"),ge.innerHTML=Cl,Bs=i(),_.c(),He=i(),Qe=b("p"),Qe.innerHTML=Il,Xs=i(),m(Ze.$$.fragment),Vs=i(),Ge=b("p"),Ge.textContent=kl,Ws=i(),B.c(),Ae=i(),Ce=b("p"),Ce.innerHTML=$l,zs=i(),m(Ie.$$.fragment),Ys=i(),ke=b("p"),ke.innerHTML=Rl,Fs=i(),$e=b("p"),$e.innerHTML=vl,Ss=i(),m(Re.$$.fragment),Es=i(),ve=b("p"),ve.innerHTML=Nl,qs=i(),V.c(),De=i(),Ne=b("p"),Ne.textContent=_l,Hs=i(),m(_e.$$.fragment),As=i(),xe=b("p"),xe.innerHTML=xl,Ds=i(),m(Be.$$.fragment),Ls=i(),Xe=b("p"),Xe.textContent=Bl,Ks=i(),m(Ve.$$.fragment),Ps=i(),m(We.$$.fragment),Os=i(),ze=b("p"),ze.textContent=Xl,el=i(),m(Y.$$.fragment),sl=i(),m(Ye.$$.fragment),ll=i(),Le=b("p"),this.h()},l(e){const s=nt("svelte-u9bgzb",document.head);n=f(s,"META",{name:!0,content:!0}),s.forEach(l),M=r(e),a=f(e,"P",{}),Ll(a).forEach(l),w=r(e),y(u.$$.fragment,e),d=r(e),y(G.$$.fragment,e),J=r(e),Z.l(e),R=r(e),k=f(e,"P",{"data-svelte-h":!0}),T(k)!=="svelte-g453z0"&&(k.innerHTML=I),$=r(e),y(o.$$.fragment,e),g=r(e),y(F.$$.fragment,e),Oe=r(e),S=f(e,"P",{"data-svelte-h":!0}),T(S)!=="svelte-nzpp3o"&&(S.innerHTML=pl),es=r(e),E=f(e,"P",{"data-svelte-h":!0}),T(E)!=="svelte-dcpi9a"&&(E.textContent=Ml),ss=r(e),W=f(e,"DIV",{class:!0,"data-svelte-h":!0}),T(W)!=="svelte-w2yidl"&&(W.innerHTML=dl),ls=r(e),y(q.$$.fragment,e),ts=r(e),H=f(e,"P",{"data-svelte-h":!0}),T(H)!=="svelte-1tqvpff"&&(H.innerHTML=ml),ns=r(e),y(A.$$.fragment,e),as=r(e),D=f(e,"P",{"data-svelte-h":!0}),T(D)!=="svelte-4fgai5"&&(D.innerHTML=yl),os=r(e),y(L.$$.fragment,e),is=r(e),y(K.$$.fragment,e),rs=r(e),P=f(e,"P",{"data-svelte-h":!0}),T(P)!=="svelte-19jgbir"&&(P.innerHTML=Ul),us=r(e),y(O.$$.fragment,e),cs=r(e),y(ee.$$.fragment,e),ps=r(e),se=f(e,"P",{"data-svelte-h":!0}),T(se)!=="svelte-19gal8m"&&(se.innerHTML=hl),Ms=r(e),y(le.$$.fragment,e),ds=r(e),y(te.$$.fragment,e),ms=r(e),ne=f(e,"P",{"data-svelte-h":!0}),T(ne)!=="svelte-1orepz7"&&(ne.innerHTML=Jl),ys=r(e),y(ae.$$.fragment,e),Us=r(e),oe=f(e,"P",{"data-svelte-h":!0}),T(oe)!=="svelte-1op0ytr"&&(oe.innerHTML=bl),hs=r(e),y(ie.$$.fragment,e),Js=r(e),y(re.$$.fragment,e),bs=r(e),ue=f(e,"P",{"data-svelte-h":!0}),T(ue)!=="svelte-yeckxp"&&(ue.innerHTML=fl),fs=r(e),y(ce.$$.fragment,e),js=r(e),v=f(e,"TABLE",{border:!0,class:!0,style:!0,"data-svelte-h":!0}),T(v)!=="svelte-1g5whzd"&&(v.innerHTML=jl),Ts=r(e),pe=f(e,"P",{"data-svelte-h":!0}),T(pe)!=="svelte-1hju2sl"&&(pe.innerHTML=Tl),ws=r(e),y(Me.$$.fragment,e),gs=r(e),y(de.$$.fragment,e),Qs=r(e),me=f(e,"P",{"data-svelte-h":!0}),T(me)!=="svelte-wgc24a"&&(me.textContent=wl),Zs=r(e),y(z.$$.fragment,e),Gs=r(e),ye=f(e,"P",{"data-svelte-h":!0}),T(ye)!=="svelte-1yihtam"&&(ye.innerHTML=gl),Cs=r(e),y(Ue.$$.fragment,e),Is=r(e),he=f(e,"P",{"data-svelte-h":!0}),T(he)!=="svelte-1o9cnrz"&&(he.textContent=Ql),ks=r(e),y(Je.$$.fragment,e),$s=r(e),y(be.$$.fragment,e),Rs=r(e),fe=f(e,"P",{"data-svelte-h":!0}),T(fe)!=="svelte-813lg6"&&(fe.innerHTML=Zl),vs=r(e),y(je.$$.fragment,e),Ns=r(e),Te=f(e,"P",{"data-svelte-h":!0}),T(Te)!=="svelte-1ib5u0u"&&(Te.textContent=Gl),_s=r(e),y(we.$$.fragment,e),xs=r(e),ge=f(e,"P",{"data-svelte-h":!0}),T(ge)!=="svelte-t003t9"&&(ge.innerHTML=Cl),Bs=r(e),_.l(e),He=r(e),Qe=f(e,"P",{"data-svelte-h":!0}),T(Qe)!=="svelte-x2hn4x"&&(Qe.innerHTML=Il),Xs=r(e),y(Ze.$$.fragment,e),Vs=r(e),Ge=f(e,"P",{"data-svelte-h":!0}),T(Ge)!=="svelte-15c9368"&&(Ge.textContent=kl),Ws=r(e),B.l(e),Ae=r(e),Ce=f(e,"P",{"data-svelte-h":!0}),T(Ce)!=="svelte-1lvl2ge"&&(Ce.innerHTML=$l),zs=r(e),y(Ie.$$.fragment,e),Ys=r(e),ke=f(e,"P",{"data-svelte-h":!0}),T(ke)!=="svelte-z2qr3l"&&(ke.innerHTML=Rl),Fs=r(e),$e=f(e,"P",{"data-svelte-h":!0}),T($e)!=="svelte-nuxq3m"&&($e.innerHTML=vl),Ss=r(e),y(Re.$$.fragment,e),Es=r(e),ve=f(e,"P",{"data-svelte-h":!0}),T(ve)!=="svelte-155710n"&&(ve.innerHTML=Nl),qs=r(e),V.l(e),De=r(e),Ne=f(e,"P",{"data-svelte-h":!0}),T(Ne)!=="svelte-ydla52"&&(Ne.textContent=_l),Hs=r(e),y(_e.$$.fragment,e),As=r(e),xe=f(e,"P",{"data-svelte-h":!0}),T(xe)!=="svelte-n43esl"&&(xe.innerHTML=xl),Ds=r(e),y(Be.$$.fragment,e),Ls=r(e),Xe=f(e,"P",{"data-svelte-h":!0}),T(Xe)!=="svelte-yc6jv5"&&(Xe.textContent=Bl),Ks=r(e),y(Ve.$$.fragment,e),Ps=r(e),y(We.$$.fragment,e),Os=r(e),ze=f(e,"P",{"data-svelte-h":!0}),T(ze)!=="svelte-1o63v1"&&(ze.textContent=Xl),el=r(e),y(Y.$$.fragment,e),sl=r(e),y(Ye.$$.fragment,e),ll=r(e),Le=f(e,"P",{}),Ll(Le).forEach(l),this.h()},h(){Ke(n,"name","hf:doc:metadata"),Ke(n,"content",ft),Ke(W,"class","flex justify-center"),Ke(v,"border","1"),Ke(v,"class","dataframe"),cl(v,"table-layout","fixed"),cl(v,"word-wrap","break-word"),cl(v,"width","100%")},m(e,s){at(document.head,n),t(e,M,s),t(e,a,s),t(e,w,s),U(u,e,s),t(e,d,s),U(G,e,s),t(e,J,s),Fe[Q].m(e,s),t(e,R,s),t(e,k,s),t(e,$,s),U(o,e,s),t(e,g,s),U(F,e,s),t(e,Oe,s),t(e,S,s),t(e,es,s),t(e,E,s),t(e,ss,s),t(e,W,s),t(e,ls,s),U(q,e,s),t(e,ts,s),t(e,H,s),t(e,ns,s),U(A,e,s),t(e,as,s),t(e,D,s),t(e,os,s),U(L,e,s),t(e,is,s),U(K,e,s),t(e,rs,s),t(e,P,s),t(e,us,s),U(O,e,s),t(e,cs,s),U(ee,e,s),t(e,ps,s),t(e,se,s),t(e,Ms,s),U(le,e,s),t(e,ds,s),U(te,e,s),t(e,ms,s),t(e,ne,s),t(e,ys,s),U(ae,e,s),t(e,Us,s),t(e,oe,s),t(e,hs,s),U(ie,e,s),t(e,Js,s),U(re,e,s),t(e,bs,s),t(e,ue,s),t(e,fs,s),U(ce,e,s),t(e,js,s),t(e,v,s),t(e,Ts,s),t(e,pe,s),t(e,ws,s),U(Me,e,s),t(e,gs,s),U(de,e,s),t(e,Qs,s),t(e,me,s),t(e,Zs,s),U(z,e,s),t(e,Gs,s),t(e,ye,s),t(e,Cs,s),U(Ue,e,s),t(e,Is,s),t(e,he,s),t(e,ks,s),U(Je,e,s),t(e,$s,s),U(be,e,s),t(e,Rs,s),t(e,fe,s),t(e,vs,s),U(je,e,s),t(e,Ns,s),t(e,Te,s),t(e,_s,s),U(we,e,s),t(e,xs,s),t(e,ge,s),t(e,Bs,s),Se[N].m(e,s),t(e,He,s),t(e,Qe,s),t(e,Xs,s),U(Ze,e,s),t(e,Vs,s),t(e,Ge,s),t(e,Ws,s),Ee[x].m(e,s),t(e,Ae,s),t(e,Ce,s),t(e,zs,s),U(Ie,e,s),t(e,Ys,s),t(e,ke,s),t(e,Fs,s),t(e,$e,s),t(e,Ss,s),U(Re,e,s),t(e,Es,s),t(e,ve,s),t(e,qs,s),qe[X].m(e,s),t(e,De,s),t(e,Ne,s),t(e,Hs,s),U(_e,e,s),t(e,As,s),t(e,xe,s),t(e,Ds,s),U(Be,e,s),t(e,Ls,s),t(e,Xe,s),t(e,Ks,s),U(Ve,e,s),t(e,Ps,s),U(We,e,s),t(e,Os,s),t(e,ze,s),t(e,el,s),U(Y,e,s),t(e,sl,s),U(Ye,e,s),t(e,ll,s),t(e,Le,s),tl=!0},p(e,[s]){const Hl={};s&1&&(Hl.fw=e[0]),u.$set(Hl);let ol=Q;Q=Wl(e),Q!==ol&&(al(),c(Fe[ol],1,1,()=>{Fe[ol]=null}),nl(),Z=Fe[Q],Z||(Z=Fe[Q]=Vl[Q](e),Z.c()),p(Z,1),Z.m(R.parentNode,R));const Al={};s&2&&(Al.$$scope={dirty:s,ctx:e}),z.$set(Al);let il=N;N=Yl(e),N!==il&&(al(),c(Se[il],1,1,()=>{Se[il]=null}),nl(),_=Se[N],_||(_=Se[N]=zl[N](e),_.c()),p(_,1),_.m(He.parentNode,He));let rl=x;x=Sl(e),x!==rl&&(al(),c(Ee[rl],1,1,()=>{Ee[rl]=null}),nl(),B=Ee[x],B||(B=Ee[x]=Fl[x](e),B.c()),p(B,1),B.m(Ae.parentNode,Ae));let ul=X;X=ql(e),X!==ul&&(al(),c(qe[ul],1,1,()=>{qe[ul]=null}),nl(),V=qe[X],V||(V=qe[X]=El[X](e),V.c()),p(V,1),V.m(De.parentNode,De));const Dl={};s&2&&(Dl.$$scope={dirty:s,ctx:e}),Y.$set(Dl)},i(e){tl||(p(u.$$.fragment,e),p(G.$$.fragment,e),p(Z),p(o.$$.fragment,e),p(F.$$.fragment,e),p(q.$$.fragment,e),p(A.$$.fragment,e),p(L.$$.fragment,e),p(K.$$.fragment,e),p(O.$$.fragment,e),p(ee.$$.fragment,e),p(le.$$.fragment,e),p(te.$$.fragment,e),p(ae.$$.fragment,e),p(ie.$$.fragment,e),p(re.$$.fragment,e),p(ce.$$.fragment,e),p(Me.$$.fragment,e),p(de.$$.fragment,e),p(z.$$.fragment,e),p(Ue.$$.fragment,e),p(Je.$$.fragment,e),p(be.$$.fragment,e),p(je.$$.fragment,e),p(we.$$.fragment,e),p(_),p(Ze.$$.fragment,e),p(B),p(Ie.$$.fragment,e),p(Re.$$.fragment,e),p(V),p(_e.$$.fragment,e),p(Be.$$.fragment,e),p(Ve.$$.fragment,e),p(We.$$.fragment,e),p(Y.$$.fragment,e),p(Ye.$$.fragment,e),tl=!0)},o(e){c(u.$$.fragment,e),c(G.$$.fragment,e),c(Z),c(o.$$.fragment,e),c(F.$$.fragment,e),c(q.$$.fragment,e),c(A.$$.fragment,e),c(L.$$.fragment,e),c(K.$$.fragment,e),c(O.$$.fragment,e),c(ee.$$.fragment,e),c(le.$$.fragment,e),c(te.$$.fragment,e),c(ae.$$.fragment,e),c(ie.$$.fragment,e),c(re.$$.fragment,e),c(ce.$$.fragment,e),c(Me.$$.fragment,e),c(de.$$.fragment,e),c(z.$$.fragment,e),c(Ue.$$.fragment,e),c(Je.$$.fragment,e),c(be.$$.fragment,e),c(je.$$.fragment,e),c(we.$$.fragment,e),c(_),c(Ze.$$.fragment,e),c(B),c(Ie.$$.fragment,e),c(Re.$$.fragment,e),c(V),c(_e.$$.fragment,e),c(Be.$$.fragment,e),c(Ve.$$.fragment,e),c(We.$$.fragment,e),c(Y.$$.fragment,e),c(Ye.$$.fragment,e),tl=!1},d(e){e&&(l(M),l(a),l(w),l(d),l(J),l(R),l(k),l($),l(g),l(Oe),l(S),l(es),l(E),l(ss),l(W),l(ls),l(ts),l(H),l(ns),l(as),l(D),l(os),l(is),l(rs),l(P),l(us),l(cs),l(ps),l(se),l(Ms),l(ds),l(ms),l(ne),l(ys),l(Us),l(oe),l(hs),l(Js),l(bs),l(ue),l(fs),l(js),l(v),l(Ts),l(pe),l(ws),l(gs),l(Qs),l(me),l(Zs),l(Gs),l(ye),l(Cs),l(Is),l(he),l(ks),l($s),l(Rs),l(fe),l(vs),l(Ns),l(Te),l(_s),l(xs),l(ge),l(Bs),l(He),l(Qe),l(Xs),l(Vs),l(Ge),l(Ws),l(Ae),l(Ce),l(zs),l(Ys),l(ke),l(Fs),l($e),l(Ss),l(Es),l(ve),l(qs),l(De),l(Ne),l(Hs),l(As),l(xe),l(Ds),l(Ls),l(Xe),l(Ks),l(Ps),l(Os),l(ze),l(el),l(sl),l(ll),l(Le)),l(n),h(u,e),h(G,e),Fe[Q].d(e),h(o,e),h(F,e),h(q,e),h(A,e),h(L,e),h(K,e),h(O,e),h(ee,e),h(le,e),h(te,e),h(ae,e),h(ie,e),h(re,e),h(ce,e),h(Me,e),h(de,e),h(z,e),h(Ue,e),h(Je,e),h(be,e),h(je,e),h(we,e),Se[N].d(e),h(Ze,e),Ee[x].d(e),h(Ie,e),h(Re,e),qe[X].d(e),h(_e,e),h(Be,e),h(Ve,e),h(We,e),h(Y,e),h(Ye,e)}}}const ft='{"title":"Recherche sémantique avec FAISS","local":"recherche-sémantique-avec-faiss","sections":[{"title":"Utilisation des enchâssements pour la recherche sémantique","local":"utilisation-des-enchâssements-pour-la-recherche-sémantique","sections":[],"depth":2},{"title":"Chargement et préparation du jeu de données","local":"chargement-et-préparation-du-jeu-de-données","sections":[],"depth":2},{"title":"Création d’enchâssements pour les textes","local":"création-denchâssements-pour-les-textes","sections":[],"depth":2},{"title":"Utilisation de FAISS pour une recherche de similarité efficace","local":"utilisation-de-faiss-pour-une-recherche-de-similarité-efficace","sections":[],"depth":2}],"depth":1}';function jt(C,n,M){let a="pt";return st(()=>{const w=new URLSearchParams(window.location.search);M(0,a=w.get("fw")||"pt")}),[a]}class kt extends lt{constructor(n){super(),tt(this,n,jt,bt,et,{})}}export{kt as component};
