L'un des principaux défis à relever pour exploiter la valeur des données textuelles réside dans la nature non structurée du langage naturel. Ce format de données a du sens pour nous, les humains, mais il est très difficile à traiter de manière automatisée. Cependant, malgré ce défi, on estime que 80 à 90 % des données d'une entreprise sont des textes [1].
La valeur ajoutée potentielle de cette source de données ne doit pas être sous-estimée. Par exemple, les avocats consacrent en moyenne 11,2 heures par semaine à des tâches liées à la recherche d'informations [2]. Un système de recherche efficace pourrait permettre d'exploiter ces données.
- Imaginez que vous puissiez parcourir efficacement des millions de fichiers PDF contenant des textes juridiques pour trouver la loi qui s'applique à votre situation.
- Imaginez que vous puissiez parcourir instantanément des quantités massives de manuels techniques pour trouver le paragraphe qui explique exactement comment résoudre le problème auquel vous êtes confronté.
Cela semble utile, n'est-ce pas ?
C'est là qu'intervient la recherche d'information, et en particulier la recherche sémantique, qui est précisément la branche du NLP (Natural Language Processing) qui vise à résoudre ce problème. Dans ce billet de blog, nous étudierons ce sujet d'un point de vue très pratique. Si vous ne vous sentez pas l'âme d'un mathématicien ou d'un programmeur expert, ne cliquez pas tout de suite.
L'objectif est d'avoir une idée de ce qu'est la recherche sémantique et des défis auxquels vous serez probablement confronté lors de la mise en œuvre d'un moteur de recherche sémantique dans un contexte pratique. À la fin du cours, vous devriez avoir une bonne idée de (1) ce qu'est la recherche sémantique, (2) quand utiliser la recherche sémantique et (3) comment aborder la mise en œuvre d'un moteur de recherche sémantique.
Nous ne couvrirons pas ici les aspects techniques en profondeur, mais nous publierons un autre billet de blog qui traitera des mêmes sujets, mais d'un point de vue plus technique. L'accent sera mis ici sur le "pourquoi" plutôt que sur le "comment".
N'allons pas trop vite en besogne et examinons brièvement ce qu'est exactement la recherche sémantique et comment elle fonctionne. Essentiellement, la recherche sémantique tente de faire correspondre les requêtes aux documents pertinents en se basant sur le sens plutôt que sur la syntaxe pure. En pratique, les principaux avantages d'une telle approche sont doubles :
(1) La formulation exacte devient moins pertinente 📝
Imaginez que vous travaillez pour une société immobilière et que vous disposez d'une base de données remplie d'articles sur les propriétés. Supposons que vous recherchiez un article sur une maison spécifique que vous avez en tête. Vous créez donc une requête contenant les informations dont vous vous souvenez à propos de cette maison. Vous obtiendrez probablement une requête ressemblant à ceci : "une maison de deux chambres à coucher à Los Angeles". Supposons maintenant que l'article que vous recherchiez fasse référence à cette propriété comme étant "une résidence avec 2 chambres dans la Californie ensoleillée".
Si vous utilisiez un moteur de recherche non sémantique, vous ne trouveriez pas ce résultat simplement parce que votre requête ne partage aucun mot commun avec le résultat que vous recherchez. Un article sur une propriété décrite comme "une maison à deux étages à Los Angeles" serait, par exemple, jugé beaucoup plus pertinent, car cette description partage de nombreux mots communs avec votre requête initiale, même s'il existe une différence de sens importante entre "une maison à deux étages à Los Angeles" et " une maison à deux étages à Los Angeles". deux chambre et "une maison de deux étage maison à deux étages".
Toutefois, étant donné qu'un moteur de recherche sémantique s'intéresse au sens plutôt qu'à la syntaxe, il reconnaîtrait par exemple que "résidence" et "maison", "Los Angeles" et "Californie", etc. sont étroitement liés et vous trouveriez probablement ce que vous cherchez. Il saurait ainsi que "une maison de deux chambres à Los Angeles" est plus proche de "une résidence de deux chambres sous le soleil de Californie" que de "une maison de deux étages à Los Angeles".
Il y a souvent une différence entre la formulation utilisée dans votre requête et la formulation utilisée dans les résultats que vous recherchez. Les moteurs de recherche sémantiques peuvent traiter cette différence alors que les moteurs de recherche classiques non sémantiques ne le peuvent pas.
(2) Le contexte est pris en compte 📖
Les gens utilisent souvent les moteurs de recherche pour rechercher des informations basées sur la description d'un concept plutôt que sur un ensemble de mots-clés littéraux. Par exemple, lorsque vous recherchez "Python", un document intitulé "learn 5 fun facts about Python snakes" et un document intitulé "Python programming tutorial" sont tous deux des résultats potentiellement pertinents, car il n'est pas clair à quel type de Python vous faites référence.
Cependant, lorsque vous recherchez "apprendre Python", un moteur de recherche sémantique reconnaîtra que le mot "Python" dans ce contexte est plus susceptible de faire référence au langage de programmation qu'au type de serpent. Il considérera donc que le tutoriel de programmation est plus pertinent. Vous ne me faites pas confiance ? Essayez vous-même : recherchez " Python" dans les images Google et "apprendre Python" ensuite, et regardez les serpents disparaître.
En revanche, un moteur de recherche classique non sémantique considérera que "Apprendre 5 faits amusants sur les serpents Python" est plus pertinent, car ce titre contient plus de mots communs avec votre requête, puisqu'il contient à la fois "apprendre" et "Python".
Vous vous demandez peut-être comment tout cela fonctionne. 🤔
En bref, la recherche sémantique fonctionne en comparant les enchâssements de phrases : vous recherchez un résultat dont l'enchâssement de phrases est proche de celui de votre requête. Cela vous a-t-il semblé logique ? Parfait, n'hésitez pas à sauter cette partie. Si ce n'est pas le cas, ne vous inquiétez pas, je vais vous donner un cours accéléré de PNL.
Les embeddings jouent un rôle central dans presque toutes les applications NLP. Fondamentalement, un embedding est un vecteur de nombres qui représente le sens d'un mot. Concrètement, cela signifie que les mots ayant des significations similaires ont des embeddings similaires et vice versa. Le graphique ci-dessous permet de visualiser les encastrements (en trois dimensions). Vous pouvez clairement voir que les mots ayant des significations similaires ont des enchâssements similaires. Par exemple, nous remarquons que les mots liés à l'école ont des valeurs X faibles et des valeurs Z faibles, les mots liés au sport ont des valeurs X élevées et des valeurs Z élevées, etc.
Comment en arrive-t-on à ces enchâssements, demanderez-vous ? Eh bien, de nos jours, par le biais de modèles de langage basés sur des transformateurs [3]. Vous pouvez généralement reconnaître ces modèles parce que leur nom est un jeu de mots sur le nom BERT. Après tout, les chercheurs en TAL sont des passionnés du langage, et les jeux de mots sont donc inévitables.
Vous vous dites peut-être "Transformers, ce n'est pas le film sur les voitures-robots ? Désolé de vous décevoir, mais non. Techniquement, oui, mais malheureusement, Shia LaBeouf ne fait pas vraiment de NLP (pour l'instant). En simplifiant à l'extrême, les transformateurs sont des modèles de langage qui traitent d'énormes quantités de texte et tentent de déterminer les mots qui apparaissent souvent dans le même contexte (généralement via une technique appelée modélisation du langage masqué [4]) et de placer les enchâssements de ces mots à proximité les uns des autres, car ils peuvent être utilisés (en quelque sorte) de manière interchangeable.
À ce stade, vous devriez être familiarisé (à un niveau élevé) avec ce que sont les ancrages de mots. Les embeddings de phrases sont la contrepartie totalement analogue des embeddings de mots, la principale différence étant qu'ils produisent un embedding pour une séquence de mots plutôt qu'un embedding pour chaque mot individuellement. Ainsi, les textes dont les significations sont similaires ont des encastrements de phrases qui sont proches les uns des autres.
Maintenant que vous êtes également familiarisé avec les " sentence embeddings ", examinons à nouveau l'affirmation faite au début de ce paragraphe : "La recherche sémantique fonctionne en comparant les enchâssements de phrases : vous recherchez un résultat dont l'enchâssement de phrases est proche de l'enchâssement de phrases de votre requête. Est-ce que cela a plus de sens maintenant ? C'est parfait. (Je suppose que vous avez répondu oui 🤞).
Comme vous le découvrirez bientôt, la recherche sémantique est un sujet vaste et très nuancé. C'est pourquoi, afin de structurer nos pensées, nous suivrons l'organigramme ci-dessous comme guide tout au long de notre voyage dans le désert de la recherche sémantique.
Cela n'a peut-être pas l'air très instructif pour l'instant, mais cela prendra tout son sens bientôt, je vous le promets.
Avant de passer directement à la mise en œuvre, arrêtons-nous un instant et demandons-nous si la recherche sémantique est adaptée à votre cas d'utilisation. Comme indiqué précédemment, les principaux avantages de la recherche sémantique sont la possibilité de traiter les synonymes et le contexte. Il est donc important de faire un raisonnement critique pour déterminer si l'un ou l'autre de ces avantages est pertinent dans votre cas d'utilisation.
Supposons par exemple que vous disposiez d'une base de données de documents médicaux et que vous l'utilisiez pour rechercher des documents contenant des noms de maladies ou des noms de code spécifiques. Dans ce cas, les synonymes ne vous sont pas d'une grande utilité (une maladie n'a qu'un seul nom) et si vous ne recherchez que le nom de la maladie, il n'y a pas non plus beaucoup de contexte à prendre en compte.
Par conséquent, la valeur ajoutée apportée par la recherche sémantique est probablement très limitée et il est préférable d'opter pour un moteur de recherche lexical. TF-IDF [5] ou surtout BM25 [6] sont (du moins au moment où j'écris ces lignes) des algorithmes de recherche lexicale solides à considérer. Je ne m'étendrai pas sur le fonctionnement de ces algorithmes, mais si cela vous intéresse, jetez un œil à notre prochain article plus technique sur la recherche sémantique.
En conclusion, il y a deux considérations importantes à prendre en compte :
(1) Vos utilisateurs vont-ils rechercher des concepts ? Par exemple, vos utilisateurs chercheront-ils une "maison" ou une "villa de deux chambres à coucher à Los Angeles avec piscine extérieure" ? La prise en compte du contexte n'est réellement bénéfique que pour le second.
(2) Disposez-vous d'un ensemble de données diversifié ? Par exemple, souhaitez-vous effectuer une recherche dans les contrats des employés du service financier ou dans tous les documents de votre entreprise ? Dans le cas de données diverses, la formulation exacte fait une plus grande différence et la recherche sémantique est donc plus rentable.
Maintenant que vous avez décidé que la recherche sémantique est adaptée à votre cas d'utilisation spécifique, vous avez besoin d'un transformateur de phrases pour commencer. De nos jours, il existe de nombreuses options open-source parmi lesquelles choisir. Consultez-les ici. Si le domaine (par exemple, les textes juridiques, les manuels techniques, etc.) de vos données est assez générique, comme les nouvelles en anglais, les articles en espagnol, etc., vous trouverez probablement un transformateur de phrases adapté non seulement à votre langue, mais aussi à votre domaine.
Cependant, peut-être vous considérez-vous comme un aficionado des documents médicaux islandais. Peut-être aimez-vous les textes juridiques slovènes ? Honnêtement, qui peut vous en vouloir ? N'est-ce pas le cas de tout le monde ?
Malheureusement, pour ces situations spécifiques, il vous sera probablement difficile de trouver un modèle de langage spécifiquement adapté à ce domaine. Les modèles de langage formés sur un texte générique dans cette langue sont probablement la meilleure option que vous puissiez trouver.
Cependant, je pense que vous pouvez imaginer que les textes "quotidiens" sont très différents des textes médicaux. Un modèle linguistique islandais polyvalent a probablement rarement rencontré les mots du jargon médical (noms de maladies, mots anatomiques, etc.) qui jouent un rôle important dans les documents médicaux. ) qui jouent un rôle important dans les documents médicaux. Par conséquent, un modèle linguistique polyvalent aura probablement du mal à déterminer avec précision le sens des textes médicaux.
Dans un tel scénario, vous souhaiteriez utiliser une technique appelée "adaptation au domaine". Essentiellement, cela signifie que vous prenez votre modèle de langage polyvalent qui a été formé sur du texte général et que vous continuez à le former sur des données de votre domaine d'intérêt. Encore une fois, je n'entrerai pas dans les détails du fonctionnement de cette technique : consultez notre prochain article de blog plus technique à ce sujet.
Cependant, vous devriez voir ce processus comme suit. Supposons que vous ne parliez pas un mot de slovène. La formation d'un modèle linguistique consisterait alors à vous donner des quantités massives de textes slovènes de tous les jours à étudier. À la fin, vous serez probablement assez familier avec le slovène. Toutefois, si je vous donnais un texte juridique slovène et que je vous posais des questions à son sujet, vous ne seriez probablement toujours pas en mesure d'y répondre. L'adaptation du domaine impliquerait de vous envoyer dans une école de droit slovène et de vous faire étudier des textes juridiques slovènes. Bien que cette expérience semble assez désagréable (mes excuses aux juristes slovènes qui lisent ces lignes), vous seriez en mesure de saisir le sens des textes juridiques slovènes par la suite.
À ce stade, vous êtes assez proche d'un système de recherche sémantique opérationnel. Vous avez déjà pris la décision d'opter pour la recherche sémantique plutôt que pour d'autres solutions et vous disposez d'un modèle linguistique approprié qui sera à la base de votre solution. Concentrons-nous à présent sur un inconvénient de la recherche sémantique: elle peut être assez lente et gourmande en ressources informatiques. Si les ressources informatiques et la latence ne sont pas des problèmes pour vous, vous pouvez simplement accepter cet inconvénient et vous avez un moteur de recherche (félicitations 🎊).
Dans la plupart des cas (pratiques), cependant, il s'agit de problèmes importants. Mais ne vous inquiétez pas, il existe une solution ! Cette solution s'appelle "Récupérer et repositionner". Il s'agit essentiellement d'utiliser un algorithme de recherche lexicale (rapide et peu coûteux) (tel que TF-IDF ou BM25, comme nous l'avons vu plus haut) pour filtrer les documents non pertinents de votre base de données afin d'obtenir un sous-ensemble plus restreint de "documents candidats" qui pourraient tous être potentiellement pertinents. Il s'agit de l'étape de "récupération". Vous utilisez ensuite votre moteur de recherche sémantique pour rechercher uniquement dans ces "documents candidats" plutôt que dans tous les documents de votre base de données. C'est l'étape du "reclassement". Graphiquement, le flux ressemblera au graphique ci-dessous.
Illustrons cela par un exemple très pratique. Vous disposez d'une base de données contenant 100 000 documents. Disons qu'une recherche lexicale dans 1 000 documents prend environ 1 ms (= 0,001 seconde) tandis qu'une recherche sémantique dans 1 000 documents prend environ 50 ms (= 0,05 seconde). Une recherche sémantique complète dans les 100 000 documents prendrait donc (0,05 * 100 =) 5 secondes.
Supposons maintenant que nous fassions d'abord une recherche lexicale dans les 100 000 documents et que nous ne conservions que les 5 000 premiers documents. Cela prend (0,001 * 100 =) 0,1 seconde. Nous pouvons ensuite effectuer une recherche sémantique dans ces 5 000 documents. Cela prend (0,05 *5 =) 0,25 seconde. Nous obtiendrons probablement des résultats largement similaires dans les deux cas, bien que l'approche de recherche sémantique complète ait pris 5 secondes, alors que l'approche de récupération et de classement n'a pris que 0,35 seconde et a utilisé moins de ressources informatiques.
Si vous êtes arrivé à ce point de l'article, vous devriez avoir une solide compréhension (de haut niveau) de la recherche sémantique ainsi que des principales considérations pratiques qui entrent en jeu lorsque vous essayez de mettre en œuvre un système de recherche sémantique dans un scénario de la vie réelle.
J'ai déjà fait quelques annonces éhontées mais si vous êtes intéressé par les aspects techniques liés à la recherche sémantique, n'hésitez pas à consulter notre prochain article de blog plus technique sur le sujet.
Si vous souhaitez en savoir plus sur des cas concrets d'utilisation de la recherche sémantique, je vous recommande vivement de jeter un coup d'œil aux études de cas sur notre travail pour Fednot (fédération belge des notaires) et Funke (groupe de médias allemand).
J'espère que ce billet correspond à ce que vous cherchiez ! (jeu de mots très intentionnel)
[1] : Bill Inmon. (28 juin 2016). Pourquoi appelons-nous les textes "non structurés" ?
https://tdwi.org/articles/2016/06/28/text-unstructured.aspx
[2] : Enquête d'IDC sur les travailleurs de l'information. (juin 2012).
https://metajure.com/lawyers-waste-six-hours-a-week-on-document-management-issues-2/
[3] : Devlin, et al. (24 mai 2019). BERT : Pré-entraînement de transformateurs bidirectionnels profonds pour la compréhension du langage.
https://arxiv.org/pdf/1810.04805.pdf
[4] : James Briggs. (19 mai 2021). Modélisation en langage masqué avec BERT
https://towardsdatascience.com/masked-language-modelling-with-bert-7d49793e5d2c
[5] : Anirudha Simha. (6 octobre 2021). Comprendre TF-IDF pour l'apprentissage automatique
https://www.capitalone.com/tech/machine-learning/understanding-tf-idf/
[6] : Vinh Nguyên. (1er septembre 2019). Okapi BM25 avec Game of Thrones
https://blog.mimacom.com/bm25-got/