Adopt

1

Apache Parquet

Stocker ses datasets au bon format est souvent une non-question en data science tellement le format CSV est un standard. Pourtant, les limites de ce format sont clairement identifiées :

  • Les fichiers CSV peuvent devenir volumineux et lents à lire et à écrire pour de grandes quantités de données.

  • Les CSV ne sont pas typés ; c’est donc au logiciel lisant le fichier d’inférer les types, ce qui peut conduire à différents bugs. Les structures complexes, comme les listes ou les dictionnaires, sont, par exemple, par défaut interprétées comme des chaînes de caractères.

  • Enfin, il est tentant d’éditer les fichiers CSV manuellement, ce qui peut entraîner des erreurs. Il arrive par exemple qu’on veuille directement renommer des labels erronés dans un CSV d’annotations, sans afficher les images correspondantes pour s’assurer qu’on a bien compris le problème.

Apache Parquet est un format de données open-source orienté colonnes. Sa conception le rend particulièrement efficace pour les opérations de lecture et d’écriture sur de grands ensembles de données.

Le format de fichier Parquet résout chacun des 3 points précédents :

Il est en moyenne dix fois plus léger que les fichiers CSV et considérablement plus rapide à lire et à écrire.

Il gère correctement tous les types de données, y compris les structures complexes.

Enfin, le fichier Parquet n’est pas facilement modifiable manuellement, ce qui encourage l’utilisation de scripts ou d’interfaces graphiques dédiées (outils de labellisation ou Streamlit sur-mesure) pour effectuer les modifications dans de meilleures conditions.

Ce format permet plus d’optimisation comme le partitionnement ou la compression du fichier. Les librairies de Dataframe comme Polars ou Pandas gérant nativement le format Parquet (avec des méthodes read _ parquet et to _ parquet équivalentes aux méthodesread_csv etto_csv), il est très facile de migrer d’un format à un autre.

L’inconvénient de ce format est qu’il est moins accessible pour un profil non-tech qui pouvait ouvrir un CSV sur un logiciel de tableur.

 

NOTRE POINT DE VUE

Bien que ce format soit couramment utilisé par les Data Engineers, nous avons choisi de l’intégrer dans nos recommandations pour ce tech radar IA, car il reste sous-utilisé par les Data Scientists.

Pour gagner en performance et réduire le risque de bugs, nous recommandons aux Data Scientists de remplacer leurs fichiers CSV par des fichiers au format Parquet pour stocker leurs données tabulaires. Nous l’utilisons en combinaison avec des outils permettant de visualiser et d'éditer les données en question de manière efficace et rigoureuse, par exemple via Streamlit.

2

DVC

Le versioning du code est une bonne pratique standard sur la grande majorité des projets de Machine Learning, mais ce n’est malheureusement pas encore le cas du versioning des données. Beaucoup de data scientists ont en effet déjà connu cette frustration de ne pas remettre la main sur tel dataset ou tel modèle si performant. DVC (pour Data Version Control) est une librairie Python open- source lancée en 2017 par Iterative pour éviter ce genre de cafouillages.

L’outil permet de versionner n’importe quels fichiers de données en capitalisant sur le versioning de Git. Il enregistre les données sur le stockage distant choisi (Google Cloud Storage ou S3 par exemple), et versionne les métadonnées correspondantes via Git.

DVC permet également de définir des pipelines de données, de les exécuter et de versionner les différents runs. Ainsi, il est possible de retracer les différentes étapes qui ont mené à la création de chacun des fichiers et de les reproduire.

Il existe d’autres systèmes de versioning de données et de pipelines, comme Pachyderm, mais aucun d’entre eux n’égalent DVC en termes de facilité de mise en place et d’utilisation.

D’autres outils permettent par ailleurs de tracker les expériences de ML, comme MLFlow ou Weights & Biases. La force de DVC par rapport à ces derniers est de s’intégrer de manière beaucoup plus transparente dans le workflow Git et dans la code base du projet :

  • L’historique de DVC nativement lié à celui de Git permet d’avoir au même endroit les itérations sur le code, les données et les expériences, facilitant l’exploration du passé.

  • Le logging des paramètres, inputs et outputs est fait en dehors du code, évitant ainsi de l’alourdir avec des opérations spécifiques au tracking (comme c’est le cas avec MLFlow).

Pour explorer facilement les expériences dans une interface graphique, plusieurs options sont possibles :

  • Iterative Studio : une app web développée par l’entreprise derrière DVC, assez complète, mais coûtant 50 $ par utilisateur par mois à partir de 2 utilisateurs

  • L’extension DVC pour VSCode : gratuite, mais moins complète en termes de collaboration et seulement disponible sur VSCode

  • Un dashboard sur-mesure de tracking d’expérience que l’on peut construire en combinant DVC et un outil de visualisation comme Streamlit, pour explorer les expériences de son projet en affichant exactement les informations dont on a besoin sur le projet

 

NOTRE POINT DE VUE

À l’instar de Git, une fois qu’on a pris l’habitude d’utiliser DVC, on se demande comment on a pu travailler sans.

Pour visualiser les expériences trackées par DVC avec un maximum de flexibilité et sans avoir à utiliser de solution payante, nous suggérons de combiner DVC avec Streamlit. C’est l’approche que nous avons adoptée chez Sicara et dont Sicarator facilite la mise en place.

Attention, DVC est conçu pour la gestion du flux d’expérimentation. Nous ne recommandons pas son usage pour des pipelines en production : un outil comme Airflow sera plus approprié.

3

Polars

Pandas s’est imposé ces dernières années pour l’analyse et la transformation des données tabulaires en Python. Il atteint ses limites sur les gros volumes de données car ses traitements sont non parallélisables et la donnée traitée doit entièrement être chargée en mémoire.

Polars est une bibliothèque open-source de Dataframes écrite en Rust, rendue publique en 2021. Elle dépasse les limites de Pandas en rendant possible d’effectuer des calculs parallélisables. Le lazy evaluation améliore encore plus la performance en optimisant les transformations et les calculs par batch pour gérer des volumes de données plus grand que la mémoire.

Sa syntaxe expressive permet une grande variété de transformations, comparables à celles réalisables avec Pandas. Passer de Pandas à Polars est assez simple car Polars reprend la syntaxe des fonctions et méthodes de Pandas.

Cependant, Polars est récent et n’a pas encore la richesse de Pandas. Néanmoins, grâce à l’implémentation du format de données Arrow, il est facile de transformer un dataframe polars en Pandas et ainsi de rebasculer vers Pandas pour des traitements spécifiques.

 

NOTRE POINT DE VUE

Nous recommandons donc d’utiliser Polars au lieu de Pandas pour tout nouveau projet utilisant des DataFrames et de ne conserver cette dernière librairie qu’en contexte de code legacy.

4

Prodigy

Annoter des datasets est une tâche non-trivale . Prodigy permet de faciliter l’annotation, la sauvegarder, permettre des annotateurs parallèles. C'est un outil d’annotation de données textuelles, qui permet la classification de ces données, la reconnaissance des entités ou l’analyse des phrases.

Prodigy présente de nombreux avantages. Il intègre :

  • Une interface user-friendly

  • L’apprentissage actif (active learning) qui, intégré à Prodigy, améliore l’efficacité du processus d’annotation en dirigeant les utilisateurs vers les exemples les plus pertinents.

  • Une pré-annotation des textes pour des tâches telles que la reconnaissance d’entités nommées (NER) et la classification de texte, en utilisant des LLMs. Attention tout de même à la confidentialité des données dans le cas d’utilisation de LLMs accessibles via des services tiers.

  • La possibilité d’être scripté pour personnaliser les workflows d’annotation.

  • Un coût compétitif : 490 $ pour une license à vie.

 

Il s’intègre très bien à SpaCy (developpé par la même équipe). Néanmoins, des alternatives open- sources telles que Doccano ou Label Studio peuvent aussi être envisagées. 

NOTRE POINT DE VUE

Nous utilisons Prodigy sur nos projets d’annotations textuels et notamment la feature d’active learning. Nous vous recommendons de faire de même en particulier si vous utilisez SpaCy.



5

Pydantic

Python étant un langage interprété, les garanties sur les types de données sont moins fortes que sur les langages compilés. Par ailleurs, les modèles de langages génèrent des sorties dont la structure n’est pas toujours garantie.
 

Pydantic est une bibliothèque Python open source, permettant de définir et valider automatiquement une structure de donnée attendue via des types python décrits par annotations. L’utilisation de Pydantic permet de répondre à la question : Comment améliorer la fiabilité et la précision des sorties des modèles de langage ?

Pydantic répond à ces interrogations en offrant un cadre structuré pour la définition et la validation des données. Cette approche est encore plus pertinente lorsqu’il s’agit d’intégrer la sortie de modèles de langage dans des applications, où la cohérence et la précision des données sont cruciales.

La communauté s’en rend de plus en plus compte et des outils comme Marvin, Instructor ou Outlines émergent et utilisent Pydantic pour créer des interfaces robustes avec des modèles. Pydantic est aussi une brique clé dans les output parsers de LangChain.

Comme Pydantic se base sur les types de Python, pour exploiter pleinement ses capacités, il est essentiel d’avoir une connaissance approfondie de la gestion des types de données en Python et de leurs limites, ainsi que de comprendre comment ces types peuvent être utilisés et transformés pour modéliser efficacement des données complexes et structurées.

 

NOTRE POINT DE VUE

Nous utilisions Pydantic depuis plusieurs années pour nos projets de Data Engineering.

Avec l’émergence du besoin dans les projets LLMs, Pydantic s’est imposé aussi comme un outil indispensable des projets IA. L’adoption de Pydantic représente un choix stratégique pour garantir une gestion robuste des données.

Un effet secondaire bénéfique de son utilisation sur nos projets a été de clarifier les modèles de données attendus, documentant et explicitant les interfaces entre composants.  Nous recommandons donc pydantic pour toutes les équipes ayant une connaissance suffisante de Python.

 

6

Streamlit

Les data scientists ont besoin de support visuel pour discuter entre eux et avec le métier. Générer des applications sur-mesure rapidement est essentiel.

Streamlit est une librairie Python permettant de créer des applications web sans nécessité de connaissances en langages de développement web. C’est utile pour partager des rapports d’investigations techniques sur le web d’une manière plus visuel pour une personne du métier qu’un notebook.

La librairie se combine simplement avec DVC ce qui permet de comparer rapidement les performances et résultats de plusieurs modèles entraînés.

Pour aller plus loin, il est possible d’installer des composants créés par la communauté, dont la taille permet une bonne couverture des besoins.

On peut facilement  et gratuitement partager des pages webs via le Streamlit Community Cloud. Mais un déploiement manuel sera nécessaire dans le cas d’une application que l’on souhaite garder privée.

Surtout, Streamlit convient pour des web apps simples et dont la rapidité n’est pas critique. Dans les autres cas, nous recommandons tout de même de s’intéresser à des frameworks web dédiés pour avoir toute la main sur la création de l’application et pouvoir créer des composants spécifiques plus facilement.

 

NOTRE POINT DE VUE

À Sicara, nous l’utilisons sur quasiment tous les projets pour faire des proof of concept et tracks d’investigation. Nous développons généralement des solutions customisées pour aller en production.

Nous vous conseillons de l’essayer puisque le coût d’entrée et de création d’une app est très faible et permet de gagner beaucoup de temps sur le long terme.

 

Trial

7

Bases de données vectorielles dédiées

L’information sémantique de texte ou d’image est habituellement encodée sous formes de vecteurs de taille fixe, appelés embeddings. Manipuler et requêter de tels vecteurs demande un outillage spécifique. Dès les années 2010, des librairies de recherche vectorielle se développent mais il n’y a pas de stockage associé.

Les bases de données vectorielles dédiées apparaissent en 2019 avec Milvus et Pinecone.
Par rapport à une recherche
vectorielle avec des bases de données standards (comme celles de PostgreSQL ou ElasticSearch), les bases de données vectorielles dédiées sont généralement plus performantes et offrent des fonctionnalités plus spécifiques : quantification des vecteurs, stockage des vecteurs sur disque pour sauver de l’espace en RAM et minimiser les coûts, ou même possibilité de faire des recherches avec plusieurs vecteurs.

Ce gain en performance et en fonctionnalités disponibles est notamment utile pour des cas d’usage avec beaucoup de données (à partir de plusieurs centaines de milliers de vecteurs, jusqu’à plusieurs milliards). Par exemple, Grok (le LLM de X) se base sur la base de données vectorielle Qdrant pour son système de RAG.

Malgré ces avantages, les bases de données vectorielles peuvent être complexes à déployer et à maintenir. Par exemple, Milvus est conçue selon une architecture en micro- services, dont chaque service est complexe à comprendre et à débugger (documentation peu explicite), même avec une équipe dédiée. De plus, comparé à la recherche vectorielle avec des bases de données standards, cela nécessite d’ajouter une brique supplémentaire à la stack technique, ce qui est un choix non négligeable dans le cas d’infrastructures complexes. Cela peut aussi poser des problèmes transactionnels, comme des erreurs de serialisation, si la base de données vectorielle doit intéragir en temps réel avec une base de données standard.

 

NOTRE POINT DE VUE

Nous recommandons les bases de données vectorielles dédiées pour tout projet nécessitant une recherche sur un grand nombre de vecteurs. En particulier, nous utilisons souvent Qdrant qui se distingue par sa flexibilité, sa performance et son interfaçage avec DVC.

Ce choix dépend de la stack technique existante, de la complexité de l’intégration d’un nouvel outil et des problèmes de transaction anticipés. Une base de données standard avec recherche vectorielle peut être une bonne alternative.

8

Presidio

Le respect de la confidentialité des données est devenu important dans le monde de la data, que ce soit par respect des utilisateurs ou à cause des contraintes légales type RGPD ou CCPA. Avec l’apparition des API externes de LLM et le shadow IA, le risque d’envoyer des données personnelles s’accroit. Il est donc nécessaire d’avoir des solutions simples pour anonymiser les informations personnelles identifiables (IPI).

Presidio est une librairie python open source soutenue par Microsoft permettant la détection et l’anonymisation des données personnelles dans du texte. Il est spécifiquement conçu pour détecter et anonymiser des données personnelles sensibles telles que les emails, les adresses IP et les numéros de téléphone.

Presidio permet non seulement la détection, mais aussi le remplacement (masking) des informations sensibles, une caractéristique essentielle pour la confidentialité dans le traitement des données. 

Sa mise en place est dans notre expérience très simple. Il est possible de choisir le modèle de détection d’entités sous-jacent, que ce soit un modèle sur étagère ou réentraîné.

Néanmoins, l’usage de Presidio requiert de définir précisément quelles données doivent être anonymisées, ce qui peut alourdir son usage. Par exemple, si je cherche à anonymiser les interactions d’un utilisateur avec un Chatbot avant de l’envoyer à une API LLM externe, comment faire pour anonymiser une demande qui contient un nom propre attendu comme dans la question suivante : “Dans le cadre de ma demande de prêt pour mon entreprise X, pourrais- tu me dire quels sont les taux habituellement pratiqués par <Nom d’une banque Banque>?”.

Ici, le nom de la banque est une entité que l’on ne veut pas anonymiser, car elle porte une information essentielle pour construire la réponse, alors que le nom de l’entreprise de l’utilisateur doit être anonymisé avant d’être envoyé à l’API.

 

NOTRE POINT DE VUE

Nous avons utilisé Presidio pour l’anonymisation des données sur plusieurs projets, en particulier pour les applications impliquant des LLMs. Sa mise en place très simple permet de l’utiliser même sur des projets exploratoires avec un budget de mise en place réduit.

9

Segments.ai

Dans les projets de Data Science, avoir des données correctement labellisées est très important mais demande beaucoup d’efforts.

Segments.ai, startup fondée en 2020, s’est donnée pour mission de supprimer les coûts d’annotation d’image. Leur plateforme s’est révélée efficace et facile à utiliser pour les tâches d’annotations d’images, avec plusieurs points forts notables :

  1. La gestion de Dataset dans nos pipelines MLOps : SegmentsAI offre la possibilité de versionner ses datasets et propose un SDK Python, qui permet une intégration simple dans nos scripts Python.
  2. Collaboration : La plateforme propose différents rôles pour gérer le cycle de vie des annotations, comme revoir, valider ou rejeter des annotations, ce qui facilite la collaboration au sein des équipes. Cette validation est automatisable via le SDK Python.
  3. Rapidité : Pour la segmentation, Segments.ai permet d’utiliser des modèles de Deep Learning pré-entraînés pour pré-annoter les images. Cette fonctionnalité accélère considérablement le processus d’annotation.
  4. Réactivité : L’intégration de SAM (Segment Anything Model, de Meta AI) peu de temps après sa sortie démontre la réactivité de Segments.ai à intégrer les nouvelles technologies et fonctionnalités.
  5. Prise en main : L’interface utilisateur est intuitive, facilitant l’adoption de l’outil même si ça n’est pas la plus simple du marché.

Cependant certaines features manquent de flexibilité. Par exemple, les étapes du flux d’annotation sont figées et ne peuvent pas être customisées, tout comme la gestion des autorisations n’est pas granulaire.

Il y a d’autres alternatives, comme CVAT qui est open-source mais plus limité en termes de features disponibles.

10

TensorBoard Embedding Projector

Visualiser les résultats d’un modèle d’embedding peut être complexe. Tensorboard Embedding Projector adresse ce problème en projetant des embeddings à N dimensions (N>>3) dans un espace 3D via des méthodes de réduction de dimensionalité (par ex. t-SNE). Cela permet de visualiser de potentiels clusters mais aussi de zoomer pour observer des similarités spécifiques. Il implémente des features simplifiant la visualisation, comme la possibilité d’associer chaque point à une image (utile dans le cas d’embeddings d’images) ou de colorier par metadata.

Le projecteur se crée en quelques lignes de code avec PyTorch.

Néanmoins, la projection reste une approximation de la réalité (2 points proches dans l’espace 3D sont potentiellement éloignés en réalité). De plus, l’UX de l’outil est relativement mauvaise lorsque l’on essaie de naviguer dans le nuage de points, rendant laborieux le fait de zoomer sur une zone particulière.

Il existe plusieurs alternatives proposant des projections d’embeddings, qui sont cependant en 2D :

  • La projection d’embeddings directement intégrée au dashboard de la base de données vectorielle dédiée Qdrant
  • Le projection d’embeddings de l’outil FiftyOne

Hold

11

Pandas avec backend NumPy

Avant 2009, le traitement de données en Python se limitait à des outils comme NumPy. Pandas, en s’appuyant sur NumPy est rapidement devenu un standard dans l’industrie et la recherche permettant d’analyser et manipuler des données tabulaires plus rapidement et efficacement via sa couche d’abstraction. NumPy est efficace pour les opérations matricielles et permet des performances inatteignables en Python “pur” pour les opérations numériques car il utilise un langage compile comme le C.

Malgré cela, la bibliothèque montre ses limites dans la gestion de grands ensembles de données ou de tâches complexes parce qu’il a été seulement pensé pour l’in- memory analytics et pas le big data.

Aujourd’hui, l’écosystème Python pour les DataFrames s’est enrichi, notamment avec des alternatives au backend NumPy de Pandas, comme le backend PyArrow et Polars (une autre bibliothèque de Dataframes). Arrow, et Polars, écrit en Rust et axé sur le multi-threading, offrent des performances nettement supérieures car tous deux utilisent le format de données Arrow pour optimiser l’utilisation de la mémoire et les calculs.

 

NOTRE POINT DE VUE

Nous recommandons donc de délaisser le backend NumPy de Pandas. Bien que cette technologie soit complète et bien intégrée avec d’autres outils comme Matplotlib, les options actuelles comme PyArrow ou Polars offrent des capacités similaires avec des optimisations plus avancées. Face à l’augmentation des tailles de datasets, privilégier la performance devient essentiel.

Les développeurs de Pandas reconnaissent également cette tendance, ayant établi Arrow comme le backend par défaut depuis la version 1.4.0 en janvier 2022.