Avec l’importance croissante de la recherche vectorielle dans les applications d’intelligence artificielle telles que la recherche sémantique, les moteurs de recommandation et le traitement du langage naturel, 4D introduit un support natif pour les requêtes vectorielles dans la fonction query(). Cette amélioration apporte des comparaisons de similarité vectorielle directement dans le langage de DataClass.query() et EntitySelection.query().
Recherche par similarité vectorielle
Vous pouvez désormais rechercher des entités dont les champs vectoriels sont similaires à un vecteur de référence en utilisant des opérateurs de comparaison familiers : >, >=, < et <=.
La syntaxe de base est la suivante :
// Call the OpenAI embeddings API to generate the vector for the input text
var $result:=$clientAI.embeddings.create("A general manager living in France"; $model)
Var $inputEmbedding:=$result.vector
var $results := ds.MyClass.query("myVectorField > :1"; {vector: $inputEmbedding})
Ceci renvoie les entités dont la similarité avec $myVector est supérieure au seuil par défaut (0,5), en utilisant la métrique de similarité par défaut : la similarité cosinusoïdale.
Vous pouvez affiner votre recherche en définissant explicitement les deux :
-
la métrique de similarité la plus pertinente pour votre cas d’utilisation à l’aide de l’attribut métrique
-
le degré de similarité d’un résultat avec votre vecteur de référence pour qu’il soit considéré comme pertinent (attribut threshold ).
var $comparisonVector := {vector: $inputEmbedding; metric: mk cosine; threshold: 0.4}
var $results := ds.MyTable.query("myVectorField <= :1"; $comparisonVector)
COMBINAISON DE LA RECHERCHE SÉMANTIQUE ET DE L’INTERROGATION CLASSIQUE
L’un des principaux avantages de l’approche de 4D est que les requêtes sémantiques peuvent être combinées avec des filtres ORDA traditionnels dans la même requête.
Cela vous permet de créer des recherches puissantes et précises qui combinent une découverte basée sur le sens avec des critères structurés.
var $comparisonVector := {vector: $myVector; metric: mk cosine; threshold: 0.4}
var $results := ds.MyTable.query("myVectorField <= :1 AND salary>100000"; $comparisonVector)
Dans cet exemple, la requête extrait les employés dont les descriptions de poste sont sémantiquement proches du texte d’entrée et dont le salaire est supérieur à 100 000 euros.
QUAND UTILISER (ET QUAND NE PAS UTILISER)
La recherche sémantique (requête) est idéale lorsque vous souhaitez que votre application comprenne le sens plutôt que les correspondances exactes.
Elle est idéale pour
-
les recherches floues ou contextuelles (par exemple, « trouver des documents similaires à celui-ci »)
-
Les requêtes en langage naturel (par exemple, « employés travaillant dans le marketing et la conception »).
-
les moteurs de recommandation et les fonctions de découverte de connaissances.
Cependant, il n’est pas conçu pour des tâches analytiques structurées.
Si votre requête est du type « les 10 employés les mieux payés », une requête classique est plus rapide et plus appropriée.
En combinant les deux approches, vous pouvez créer des expériences de recherche à la fois intelligentes et précises. La recherche sémantique apporte une puissance remarquable et se marie parfaitement avec les requêtes traditionnelles ORDA basées sur les attributs.
Conclusion
Avec la recherche sémantique (query) désormais intégrée à 4D, vous pouvez facilement créer des fonctions de recherche et de découverte pilotées par l’IA dans vos applications.
Sélectionnez la métrique de similarité qui convient le mieux à votre cas d’utilisation, ajustez le seuil de pertinence et combinez des filtres sémantiques et structurés pour des résultats optimaux.
Cette nouvelle fonctionnalité apporte la puissance de la compréhension basée sur l’IA directement dans votre modèle de données 4D, ouvrant la voie à des requêtes plus intelligentes et contextuelles.
Actuellement, les champs vectoriels ne sont pas indexés, mais la prise en charge de l’indexation sera introduite dans une prochaine version de 4D. Cette amélioration future permettra d’accroître considérablement les performances et de rendre la recherche sémantique encore plus rapide et plus efficace pour les grands ensembles de données.
