Cet article est le premier d’une série qui mettra en évidence les similitudes et les différences entre le développement de logiciels d’intelligence artificielle et le développement de logiciels sans intelligence artificielle. Dans cet article, nous allons nous concentrer sur l’architecture logicielle d’une solution complète d’intelligence artificielle.

Le développement de composants logiciels d’intelligence artificielle (IA) à l’aide de techniques telles que Deep Learning (DL) ou Machine Learning (ML) implique certaines modifications dans la manière dont vous produisez une solution logicielle. Dans le développement logiciel «traditionnel» (logiciel non IA), les ingénieurs écrivent le code source dans un langage de programmation (python, java, C ++, etc.) pour implémenter un algorithme. D’autre part, le développement de logiciels d’intelligence artificielle n’implique pas beaucoup de programmation. Les data scientist choisissent des données significatives, puis sélectionnent, accordent et entrainent un modèle de réseau neuronal tiers existant (Tensorflow, Theano, Caffe) qui générera un logiciel de prévision. Si ces différences apparaissent comme un changement important dans le processus de création de composants algorithmiques, nous verrons dans cet article que cela n’a pas d’impact considérable sur la création de l’architecture complète des solutions logicielles.

Pour illustrer notre sujet, nous allons considérer une solution de traitement vidéo, accessible via une plateforme en ligne, pour ajouter automatiquement des sous-titres aux vidéos (en utilisant le traitement automatique du langage naturel). La solution attend une vidéo en entrée et produit une vidéo avec des sous-titres insérés en sortie.

Le Back-End – Le noyau IA

Pour développer un composant ML ou DL fournissant une solution de prédiction, vous n’écrivez pas de code algorithmique dans un langage de programmation. Au lieu de cela, vous écrivez du code (souvent des scripts) qui appelle des bibliothèques de réseaux neuronaux tiers. Ces bibliothèques sont utilisées pour former un modèle avec des données sélectionnées avec précision et des paramètres ajustés. Notez que ce code écrit ne sera pas en production.

Le processus de développement se compose de plusieurs itérations sur 3 étapes:

  1. Sélection et raffinement des données
  2. Réglage du modèle et training sur les données pour générer le logiciel de prévision
  3. Évaluation du composant de prévision produit par la phase de training

Ce processus itératif est largement répandu, et de nombreux articles l’expliquent. (Voir un aperçu).

Le composant de prévision généré par la phase de formation agira comme une boîte noire; ce qui signifie que vous ne savez pas comment il se comporte en interne pour produire ses résultats. Vous ne pouvez pas le déboguer et lier des résultats spécifiques à une donnée ou à un chemin spécifique dans un code. Ce logiciel de prédiction sera votre composant IA. Il sera au cœur de la valeur de votre solution que vous investirez l’essentiel de vos efforts d’ingénierie dans vos premières versions.

Pour développer un algorithme qui exécuterait une tâche de prédiction similaire, vous investiriez également la plus grande partie de vos efforts d’ingénierie, mais le développement serait très différent. Vous suivriez le processus de développement logiciel classique:

  1. Sélectionner une bibliothèque tierce utilisée par votre composant [facultatif]
  2. Écrire un code algorithmique et le compiler [la compilation est facultative]
  3. Tester et évaluer le composant généré

Ici, votre composant de prédiction serait une combinaison d’une sous-composante de boîte noire (bibliothèques tierces et d’un compilateur) et de boîte blanche (votre code). Le code exécuté peut également être vu comme une boîte noire, mais vous pouvez le déboguer et lier les résultats à un chemin spécifique dans le code source. Une analogie possible est est de comparer la phase de training du développement de l’IA à la phase de compilation du développement de logiciels classiques. Dans le développement de ces derniers, le compilateur attend les fichiers source et les paramètres du compilateur en entrée. Il génère également un fichier binaire exécutable. En mode ML / DL, le modèle attend des fichiers de source de données et des paramètres de formation, et génère un algorithme de prédiction.

La couche Middle-End – Processing sur les données

Une fois que vous avez votre composant de prédiction de l’IA, ce n’est que le début. Votre algorithme de prédiction d’arrière-plan attend des données formatées et génère des données de sortie brutes. Pour que votre solution soit utilisable par d’autres personnes, ainsi que par des experts en données informatiques et des ingénieurs logiciels (et c’est ce que tout le monde souhaite: étendre le produit au plus grand nombre d’utilisateurs !), Vous devez ajouter des couches pour donner accès votre solution aux divers utilisateurs.

Tout d’abord, vous devrez prétraiter vos données d’entrée. Il s’agit d’une étape importante pour assurer l’efficacité des composants d’IA pour de nombreux algorithmes ML / DL. Ensuite, vous devrez ajouter un autre composant qui répondra aux exigences de votre produit et aux flux de travail de l’utilisateur:

  • Formater les données d’entrée pour alimenter le composant AI (mapping de format de fichier, réduction de la taille des données d’entrée, etc.)
  • Analyser les paramètres utilisateur permettant différents comportements

Enfin, une fois que la prévision a été effectuée et a généré une sortie, vous devrez post-traiter cette sortie pour fournir une version utilisable des résultats. Cela peut aller du calcul d’une certaine quantité au formatage du texte, en passant par la transformation d’un fichier de sortie en un format de fichier pris en charge par l’utilisateur.

Toutes ces traitements nécessiteront un développement logiciel. Il utilisera certainement un développement logiciel «standard»: script ou code compilé. Plus votre solution sera mature, plus vous aurez d’utilisateurs et plus ces pièces deviendront importantes.

En ce qui concerne notre exemple de traitement vidéo, cette solution devrait certainement prendre en charge différents formats d’entrée pour les images (AVI, MPEG, etc.) afin de les convertir en un format interne sur lequel la prédiction s’appliquerait. Vous devez également vérifier la qualité vidéo (son, résolution, etc.) pour vous assurer qu’elle correspond à vos exigences en matière d’entrée. Ensuite, vous devez extraire l’audio de la vidéo et pré-traiter les données audio avant d’appeler votre composant IA. Une fois la prédiction ML / DL terminée, votre application doit inclure les sous-titres générés dans la vidéo de sortie, au bon endroit et au bon moment. Enfin, vous devrez convertir la vidéo générée au format fourni par l’utilisateur.

La couche UI – Accès à la solution d’IA pour les utilisateurs finaux

Enfin, vous souhaitez fournir votre solution à vos utilisateurs finaux via une interface utilisateur. La couche d’interface utilisateur dépendra de votre modèle d’entreprise:

  • Une application en ligne de commande
  • Une API si le consommateur de votre solution est un logiciel tiers
  • Un client lourd si votre solution doit être installée sur l’ordinateur de l’utilisateur
  • Une application web si votre solution doit être disponible en ligne

Cette interface utilisateur permettra l’interaction avec votre composant IA pour:

  1. Effectuer une prédiction (avec toutes les étapes de pré et post-traitement requises)
  2. Accès aux résultats de votre analyse de l’IA. Cela peut être en générant un rapport sur les résultats des analyses d’intelligence artificielle ou en accédant à une interface utilisateur graphique affichant les résultats calculés.

Il est extrêmement important que votre interface utilisateur et votre API soient indépendantes de vos couches de calculs (composants principaux et pré / post-traitement), pour plusieurs raisons: ce ne sont généralement pas les mêmes développeurs qui gèrent chaque composant, les technologies utilisées pour chaque composant sont différentes, et cela facilitera la construction, les tests, le débogage et le déploiement.

Dans notre exemple de traitement de vidéo en ligne, la solution est hébergée sur le Web, et l’accès pour l’utilisateur est possible via votre propre portail Web ou via l’application des partenaires. Vous devrez proposer une API Web (généralement une interface REST) ​​ainsi qu’une interface Web.

Conclusion

La plupart des produits d’intelligence artificielle seront créés à l’aide de cette architecture à 3 couches:

Cette architecture est assez similaire à celle des logiciels non-AI. La manière de développer et de tester ces différentes solutions est identique pour la UI et le Middle-End. En ce qui concerne le développement de logiciels classiques, une bonne pratique vous pousse à concevoir soigneusement chaque composant et à le rendre aussi indépendant que possible. Cela permettra une construction plus rapide de votre produit, un meilleur débogage et des tests plus efficaces. Notez que plus votre produit évoluera, plus vous consacrerez d’efforts aux composants non essentiels de l’intelligence artificielle afin de prendre en charge la diversité de tous les flux de travail de vos utilisateurs et de vos clients.

La principale différence entre le développement de solutions d’intelligence artificielle et de non d’intelligence artificielle semble concerner le composant principal ML / DL, où le paradigme de développement est en train de changer et où différents outils et processus sont nécessaires. Les tests et l’évaluation de l’efficacité sont également différents. Ce sera le sujet de notre prochain post dans cette série.

Share