Construire et former des modèles NLP
Introduction
Comme nous l’avons vu dans l’épisode 1, les bons ensembles de données sont la base de toute intelligence artificielle réussie, en particulier pour le NLP. Une fois notre base de données correctement mise en place et structurée, les étapes suivantes sont beaucoup plus simples.
Aujourd’hui, nous allons voir comment notre base de données nous permettra de construire des ensembles de requêtes spécifiques, que nous pourrons ensuite annoter et enrichir, à partir d’autres sources ou de variations d’exemples connus. Enfin, nous verrons comment former et affiner notre modèle pour le perfectionner.
Objectif
Nous disposons désormais d’une quantité exceptionnelle de données, correctement classées et structurées. L’objectif est d’utiliser ces données pour construire une intelligence artificielle capable d’analyser les demandes commerciales. Ces données devront ensuite être annotées, enrichies et intégrées dans un modèle que nous devrons évaluer, ajuster et améliorer.
Construire des sous-ensembles pertinents à partir de notre base de données
Grâce à la classification de nos données (décrite dans l’épisode 1), nous pouvons extraire des données liées à de nombreux domaines commerciaux à partir d’une requête précise. Bien sûr, cela nécessite une connaissance détaillée des domaines commerciaux concernés. Il est donc nécessaire de réfléchir judicieusement à votre demande.
Par exemple, si nous prenons le cas des RFQs (Request for Quotes) telles que les demandes de prix d’actions, nous sommes sûrs de trouver dans les e-mails contenant de telles demandes des références à des termes liés aux actions, tels que « valeur boursière » ou « actions ». Une requête et une analyse rapide des résultats sur Kibana permettront de trouver des exemples pertinents. Grâce à notre structure, il est alors extrêmement facile d’identifier l’expéditeur, le destinataire ou la conversation dans laquelle se trouve le mail, et de pouvoir récupérer, avec cette méthode, de nombreux mails liés, et ainsi de nombreux autres exemples.
Pour construire un sous-ensemble pertinent dans un domaine commercial donné, il faut au moins dix exemples différents. Évidemment, plus les exemples sont variés, plus il sera facile de travailler à la construction d’un modèle performant, et moins il aura besoin d’être enrichi. Il est donc obligatoire de passer en revue toutes les sources d’e-mails mentionnées ci-dessus pour s’assurer que nous avons extrait le maximum de potentiel de notre ensemble de données.
Une fois ces données extraites, elles doivent être annotées pour permettre la formation de notre IA. Cette étape consistera à séparer nos différents exemples de l’ensemble de données en différentes « intentions ».
- Tout d’abord, nous devrons séparer les e-mails récupérés en demandes pertinentes et parties « décoratives ». Ces dernières nous permettront de former notre IA sur les phrases introductives, la politesse, les bavardages, etc.
- Ensuite, nous pourrons séparer nos demandes en « intentions » correspondant à des actions spécifiques, par exemple : « demande d’actions », « demande d’obligations », etc.
- Ensuite, dans chacune de nos intentions, nous devrons déterminer les « entités ». Ces entités sont des valeurs clés pour reconnaître les éléments pertinents appartenant à une ou plusieurs intentions. Par exemple, avec l’Intention « demande d’actions », nous pouvons imaginer retenir les entités « actif », « quantité », « livre », etc.
- Après cela, nous devons annoter nos données. Pour cette partie, nous pourrions nous appuyer sur cet outil, qui a beaucoup simplifié notre travail : https://spacy.io/universe/project/prodigy. Après avoir annoté le texte, un simple script de transformation, utilisant des expressions régulières, permet de modifier les annotations pour les adapter à l’outil d’apprentissage choisi.
Le besoin d’enrichir nos sous-ensembles
Une fois cela fait, vous pouvez théoriquement entraîner vos premiers modèles. Cependant, vous constaterez que certains de vos sous-ensembles ne sont pas assez complets ou ne couvrent pas suffisamment de terrain. Même si vous avez épuisé le lot d’exemples disponibles dans votre ensemble de données, il existe encore une solution : créer des variations sur les exemples que vous avez déjà.
Nous allons examiner l’exemple spécifique des demandes concernant les actions. Imaginons que nous ayons pris quelques exemples de notre ensemble de données, que nous avons annotés :
Dupliquez les exemples écrits précédemment, modifiez les entités annotées ou leur ordre, sans changer le sens général de la demande. Cette méthode permettra de mieux intégrer quelles notions sont nécessaires pour définir une Intention particulière, sans introduire de biais.
Une fois que nous avons suffisamment de données annotées, nous sommes prêts à entraîner notre modèle.
Former et ajuster notre modèle
Pour construire notre modèle, nous nous sommes appuyés sur des modèles standards. S’appuyer sur un modèle existant présente l’avantage de simplifier la reconnaissance des entités et des intentions, car le modèle existant pourra associer les entités de notre modèle à ses propres entités.
Cela était particulièrement pertinent dans notre cas, avec l’Intention liée aux transactions d’actions. Par exemple, il est important de pouvoir différencier la requête « Quel est le prix des actions Microsoft ? » et la requête « Quel est le prix d’une guitare ? », et ainsi de pouvoir différencier implicitement les noms d’entreprises et les instruments de musique.
Nous avons donc formé nos premiers modèles à partir des données annotées précédemment. Nous devons maintenant évaluer ces résultats pour vérifier s’ils répondent à nos besoins. Pour ce besoin spécifique, nous allons générer des matrices de confusion pour notre modèle.
Les matrices de confusion sont un outil fondamental pour évaluer la performance d’une IA sur un terrain connu : elles nous donnent une idée des capacités de l’IA sur les données que nous avons annotées. Les résultats attendus doivent donc être parfaits. Si ce n’est pas le cas, il sera nécessaire de retravailler notre modèle pour éliminer les confusions, même avant de le tester sur des éléments inconnus.
Les matrices montrent quelles entités ont été correctement prédites et, si ce n’est pas le cas, avec lesquelles elles sont confondues. Nous avons la même chose pour les intentions. Voici un
exemple sur l’Intention « demande d’actions » décrite ci-dessus.
Il peut arriver que certaines entités ou intentions soient confondues entre elles. Des ajustements seront alors nécessaires. Parfois, la définition des intentions et des entités devra être repensée pour éliminer les ambiguïtés.
Une fois votre modèle ayant réussi tous ces tests parfaitement, il est temps de le tester dans des conditions réelles. Mais cela sera pour le prochain épisode !
Conclusion
Dans ce deuxième épisode, nous avons vu :
- Comment préparer notre modèle à partir de l’ensemble de données créé précédemment
- Comment l’enrichir
- Et enfin, comment l’entraîner et l’ajuster
Ces 3 étapes sont particulièrement importantes : seul un modèle solide pourra faire du NLP de manière efficace. En effet, vous aurez des utilisateurs humains face à votre modèle, capables d’exprimer une demande de nombreuses façons.
Construire une IA capable de répondre de manière autonome aux demandes générées par des personnes humaines est un processus graduel. De notre côté, le développement a nécessité un travail rigoureux et méticuleux de recherche de données, d’enrichissement, d’annotation et d’ajustement avant de pouvoir déployer notre IA en production et traiter de véritables transactions.
C’est précisément cette dernière étape que nous aborderons dans le prochain épisode ! Nous verrons comment aborder vos premières phases de test en conditions réelles, ce que vous pouvez attendre de votre IA et comment l’adapter.
Restez à l’écoute pour l’épisode 3 !