diff --git a/I-Accompagnement/1_Besoins.qmd b/I-Accompagnement/1_Besoins.qmd index 353316f..3458289 100644 --- a/I-Accompagnement/1_Besoins.qmd +++ b/I-Accompagnement/1_Besoins.qmd @@ -13,4 +13,20 @@ L'objectif de ce chapitre est d'accompagner la réflexion autour de l'identifica * cas d'usages autour de la génération de contenu * cas d'usage autour de la classification et de la recherche de contenu - * cas d'usage autour des interactions conversationnelles \ No newline at end of file + * cas d'usage autour des interactions conversationnelles + + +### Description cas d'usage + + 1. SLM recherche thématique simple en français + 2. Classifier des accords d'entreprise + + +#### Classifier des accords d'entreprise + + Les accords d'entreprise sont publiés sur [LégiFrance](https://www.legifrance.gouv.fr/liste/acco). + Ces accords peuvent concerner plusieurs thématiques (télétravail, compte épargne temps, droit à la deconnexion). + Ces thématiques sont déclarés par les entreprises et sont éventuellement corrigées par la Direction Générale du Travail. + Le besoin est alors de détecter automatiquement les thématiques + à la lecture de l'accord. + Un jeu de données est disponible à l'adresse suivante : [accords_publics_xx_to_2022_themes_et_texte.parquet](https://minio.lab.sspcloud.fr/cthiounn2/Accords/accords_publics_xx_to_2022_themes_et_texte.parquet) diff --git a/II-Developpements/2_RAG.qmd b/II-Developpements/2_RAG.qmd index e2bd600..3af8de3 100644 --- a/II-Developpements/2_RAG.qmd +++ b/II-Developpements/2_RAG.qmd @@ -1,9 +1,477 @@ -# Guide du LLM +# PARTIE II. Développements autour des LLMs (pour les data scientists) -## PARTIE II. Développements autour des LLMs (pour les data scientists) +# 2. RAG (Hugo Malo Jérôme Daphné Katia) -### 2. RAG (Hugo Malo Jérôme Daphné) +## a. pipelines + +## b. Benchmark des différentes bases vectorielles (Katia) + +### Comparatif détaillé des solutions de stockages de données pour la recherche vectorielle approximative + +Toutes les solutions testées sont open-source ou disposant d'une licence permissive, qui donne la possibilité d'héberger localement les données. + +
+ + | +Weaviate | +Milvus | +Qdrant | +ElasticSearch | +FAISS | +
---|---|---|---|---|---|
+ +**Open source** + | ++ +:white_check_mark: + | ++ +:white_check_mark: + | ++ +:white_check_mark: + | +Partiellement | ++ +:white_check_mark: + | +
+ +**Dev-friendly** + | ++ +\+++ + | ++ +\+ + | ++ +\+++ + | ++ +\++ + | ++ +\+++ + | +
+ +**Déploiement** + | ++ +:white_check_mark: + | ++ +:white_check_mark: mais difficile à mettre en place, constellation de micro-services + | ++ +:white_check_mark: + | ++ +:white_check_mark: + | ++ +:x: mais possibilité de construire une image Docker custom par exemple + | +
+ +**Spécifique à la recherche vectorielle** + | ++ +:white_check_mark: + | ++ +:white_check_mark: + | ++ +:white_check_mark: + | ++ +:x: + | ++ +:white_check_mark: + | +
+ +**Qualité de la documentation** + | ++ +\+++ [\[-\]](https://weaviate.io/developers/weaviate) + | ++ +\++ [\[-\]](https://milvus.io/docs) + | ++ +\+++ [\[-\]](https://qdrant.tech/documentation/) + | ++ +\++ [\[-\]](https://www.elastic.co/guide/index.html) + | ++ +\+ [\[-\]](https://faiss.ai/index.html) + | +
+ +**Dernière mise à jour** + | +mai 2024 | +mai 2024 | +mai 2024 | +mai 2024 | +mars 2024 | +
+ +**Latence (ms)\*\*** + | +438.18 | +322.63 | ++ +**118.25** + | +338.53 | ++ +\- + | +
+ +**Requêtes/seconde** + +**(RPS)\*\*** + | +217.98 | +281.52 | ++ +**710.23** + | +275.11 | ++ +\- + | +
+ +**P99 latence (ms)\*\*** + | +1723.62 | +436.87 | ++ +**144.78** + | +589.61 | ++ +\- + | +
+ +**Temps d'upload (minutes)\*\*** + | +71.61 | ++ +**1.41** + | +2.074 | +14.33 | ++ +\- + | +
+ +**Temps d'upload +** + +**indexation (minutes)\*\*** + | +71.61 | ++ +**9.53** + | +17.49 | ++ +122.79 + +:x: + | ++ +\- + | +
+ +**Place en mémoire** + | ++ +`num_vectors * vector_dimension * 4 bytes * 2` [\[-\]](https://weaviate.io/developers/weaviate/concepts/resources#an-example-calculation) + | ++ +Conséquente d'après les avis d'utilisateurs, pas de formules approximative [\[-\]](https://milvus.io/tools/sizing/) + | ++ +`num_vectors * vector_dimension * 4 bytes * 1.5` [\[-\]](https://qdrant.tech/documentation/cloud/capacity-sizing/) + | ++ +`num_vectors * 4 * (vector_dimension + 12)` [\[-\]](https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-knn-search.html) + | +? | +
+ +**Type d'index** + | +HNSW | +FLAT, IVF_FLAT, IVF_SQ8, IVF_PQ, HNSW, BIN_FLAT, BIN_IVF_FLAT, DiskANN, GPU_IVF_FLAT, GPU_IVF_PQ, and CAGRA | +HNSW | +HNSW | +FLAT, IVS_FLAT, IVF_SQ8, IVF_PQ, HNSW, BIN_FLAT and BIN_IVF_FLAT | +
+ +**Recherche hybride** + | ++ +:white_check_mark: + | ++ +:white_check_mark: + | ++ +:white_check_mark: + | ++ +:white_check_mark: + | ++ +:x: + | +
+ +**Ajout d'éléments à la volée, scalabilité** + | +Partitionnement statique | ++ +Segmentation + +dynamique + | +Partitionnement statique | +Partitionnement statique | ++ +:x: (index + +immutable -\> vector library) + | +
+ +**Accès contrôlé par rôles** + | ++ +:x: sur le backlog, mais n'avance beaucoup [\[-\]](https://github.com/weaviate/weaviate/issues/2784) + | ++ +:white_check_mark: [\[-\]](https://milvus.io/docs/users_and_roles.md) + | ++ +:white_check_mark: [\[-\]](https://qdrant.tech/documentation/guides/security/) + | ++ +:white_check_mark: [\[-\]](https://www.elastic.co/guide/en/app-search/current/security-and-users.html) + | ++ +:x: + | +
+ +**Partions et étanchéité des bases de données** + +**(_multi-tenancy_)** + | ++ +:x: pas très clair, mais il semble que ce ne soit pas encore possible [\[-\]](https://forum.weaviate.io/t/understanding-on-multi-tenancy/2067/2) + | ++ +:white_check_mark: Plusieurs systèmes de partitions, très flexible [\[-\]](https://milvus.io/docs/multi_tenancy.md) + | ++ +:white_check_mark: Plusieurs systèmes de partitions, assez flexible [\[-\]](https://qdrant.tech/documentation/guides/multiple-partitions/) + | ++ +:white_check_mark: Possible mais pas très intuitif [\[-\]](https://www.elastic.co/guide/en/elasticsearch/reference/current/document-level-security.html) + | ++ +:x: + | +
+ +**Autres avantages** + | ++ + | ++ +* Très dynamique car chaque action a son propre node, facile à scaler +* Plusieurs niveaux de partitions + | ++ + | ++ +* Stockage d'autres types de données, par exemple l'historique de conversations +* Très commun comme solution de stockage, donc plus d'utilisateurs déjà familiers de l'outil + | ++ + | +
+ +**Autres inconvénients** + | ++ + | ++ +* Taille en mémoire (difficile à quantifier par rapport aux autres, mais plus importante selon les benchmarks) + | ++ +* Pas de stockage S3 + | ++ + | ++ +* Bibliothèque de vecteurs, pas vraiment adaptée à un usage persistant + | +