# Embedding model (représentations vectorielles)

##### <u>****Qu'est-ce qu'un embedding ?****</u>

<span style="white-space: pre-wrap;">Un </span>****embedding****<span style="white-space: pre-wrap;"> est une représentation vectorielle d'un mot, d'une phrase ou même d'un texte complet dans un espace mathématique de haute dimension. L'objectif est de transformer des éléments de texte en vecteurs (des suites de nombres) qui capturent leur signification.</span>

Par exemple, prenons les mots suivants :

- "chat"
- "chien"
- "voiture"

<span style="white-space: pre-wrap;">Un modèle d'embedding va attribuer à ces mots des </span>****vecteurs numériques****. Ces vecteurs seront placés dans un espace multidimensionnel, et la distance entre ces vecteurs peut refléter la similarité sémantique entre les mots. Par exemple :

- Les vecteurs de "chat" et "chien" devraient être proches dans l'espace vectoriel car ces mots sont sémantiquement similaires (ce sont des animaux domestiques).
- Le vecteur de "voiture" serait éloigné de ceux de "chat" et "chien", car ce sont des concepts différents.

##### <u>****Contexte d'un mot et fenêtre de tokens :****</u>

L'un des éléments clés d'un modèle d'****embedding****<span style="white-space: pre-wrap;"> performant est sa capacité à comprendre le </span>****contexte****<span style="white-space: pre-wrap;"> dans lequel un mot apparaît. Par exemple, le mot "banc" peut signifier "un meuble" ou "une institution financière" en fonction du contexte.</span>

<span style="white-space: pre-wrap;">Voici deux exemples avec la même </span>****fenêtre de contexte****<span style="white-space: pre-wrap;"> :</span>

- ****Phrase 1****<span style="white-space: pre-wrap;"> : "Je suis allé au banc de touche."</span>
- ****Phrase 2****<span style="white-space: pre-wrap;"> : "J'ai ouvert un compte au banc."</span>

<span style="white-space: pre-wrap;">Un modèle avec une </span>****fenêtre de contexte large****<span style="white-space: pre-wrap;"> va prendre en compte non seulement le mot "banc" lui-même, mais aussi les mots qui l'entourent, comme "de touche" dans le premier cas et "compte" dans le second. Grâce à une grande fenêtre de contexte, il comprendra que "banc" se réfère à un </span>****siège****<span style="white-space: pre-wrap;"> dans le premier exemple, et à une </span>****institution financière****<span style="white-space: pre-wrap;"> dans le deuxième.</span>

##### <u>****Pourquoi une grande fenêtre de contexte est importante ?****</u>

<span style="white-space: pre-wrap;">Un modèle avec une </span>****fenêtre de contexte large****<span style="white-space: pre-wrap;"> peut prendre en compte plus de mots autour du mot cible pour mieux comprendre son sens. Par exemple :</span>

- Dans la phrase : "Le chat mange une souris."
- La fenêtre de contexte pour le mot "mange" pourrait inclure les mots "chat" et "souris", ce qui aide le modèle à comprendre que "mange" fait référence à une action de nourriture, et non à une autre signification possible (comme "manger un repas" dans un autre contexte).

<span style="white-space: pre-wrap;">Une </span>****fenêtre de contexte large****<span style="white-space: pre-wrap;"> signifie que le modèle peut analyser des sections plus longues du texte, ce qui améliore la compréhension du sens d'un mot, même dans des phrases complexes.</span>

##### <u>****Exemples concrets avec "nomic-embed-text" :****</u>

<span style="white-space: pre-wrap;">Supposons que nous utilisions un modèle </span>****"nomic-embed-text"****<span style="white-space: pre-wrap;"> pour générer des embeddings pour ces deux phrases :</span>

1. ****Phrase 1****<span style="white-space: pre-wrap;"> : "Le chat dort sur le canapé."</span>
2. ****Phrase 2****<span style="white-space: pre-wrap;"> : "Le chat a attrapé une souris."</span>

Le modèle va générer des embeddings pour chaque mot en prenant en compte le contexte autour d’eux.

- Pour le mot "chat", le modèle pourrait produire un vecteur similaire dans les deux phrases, car il est utilisé dans des contextes relativement similaires (un animal domestique). Cependant, le modèle prendra aussi en compte des mots comme "dort" dans la première phrase et "attrapé" dans la deuxième, ajustant l'embedding de "chat" pour capturer les différences de contexte.
- Le mot "dort" dans "Le chat dort sur le canapé" aura un contexte avec "chat" et "canapé", ce qui le placera près d’autres mots associés à des actions de repos ou de sommeil, comme "dormir" ou "repos".
- Le mot "attrapé" dans "Le chat a attrapé une souris" aura un contexte avec "chat" et "souris", plaçant ce mot plus près de mots liés à l'action de chasser ou de capturer.

##### <u>****Conclusion :****</u>

<span style="white-space: pre-wrap;">Le modèle </span>****"nomic-embed-text"****<span style="white-space: pre-wrap;"> est un modèle performant qui utilise une </span>****fenêtre de contexte large****<span style="white-space: pre-wrap;"> pour analyser les relations entre les mots dans un texte. Cela lui permet de produire des </span>****embeddings****<span style="white-space: pre-wrap;"> plus précis et contextuellement adaptés, ce qui est essentiel pour des tâches telles que la recherche sémantique, la traduction automatique ou l'analyse de texte, où il est important de comprendre le sens global d'un mot en fonction de son contexte spécifique.</span>

En résumé, une grande fenêtre de contexte permet au modèle de mieux "comprendre" le texte dans son ensemble et de produire des embeddings qui reflètent correctement le sens des mots dans chaque situation.