# IA ## 13/10/2023 Installation de Manjaro, puis découverte du machine learning avec OpenClassroom : https://openclassrooms.com/fr/courses/4011851-initiez-vous-au-machine-learning. Problème de version sur torch, impossible d'essayer CamenBert. J'ai d'abord essayé avec Jupyter, puis google collab sans succès. Environnements virtuels python : https://realpython.com/python-virtual-environments-a-primer/?ref=itsfoss.com ## 16/10/2023 Premier Stand-Up meeting, présentation. Visio avec Arthur, je lui ai expliquer mon problème, il me conseille d'enlever > /dev/null 2>&1 sur le tuto de CamenBert(https://camembert-model.fr/posts/tutorial/). Voici l'erreur que m'affiche désormais google collab : ![](https://hackmd.io/_uploads/HyFz0_qWT.png) Après avoir essayer d'installer séparement les différents package celui d'ou provient l'erreur est le suivant : ![](https://hackmd.io/_uploads/r1V9SF5W6.png) Résolution de l'erreur en utilisation la version 6.0.1. Après plusieurs recherche cela venait d'un bug connu de cette version (https://github.com/yaml/pyyaml/issues/724) Fin du tutoriel de CamenBert, il me faut la base de donnée afin de pouvoir renseigner les données dans CamenBert et le tester en direct. - Voir avec Arthur si on peut utiliser l'Api pour réaliser des test ?. Lien de mon google collab avec les changement pour la phase de test : https://colab.research.google.com/drive/1VzpxTiZq05IwUyCl96_2aa2B7m4TY9rZ?hl=fr#scrollTo=YJAlbdn21ylk&uniqifier=1 Lien HuggingFace pour CamenBert : https://huggingface.co/camembert-base?text=Paris+est+la+pire+%3Cmask%3E+de+France. Lien mise en place classification de texte camembert : https://blog.ippon.fr/2022/10/10/mettez-en-place-une-classification-de-texte-performante-grace-a-un-camembert-2/ ressource cours Deep Learning : https://course.fast.ai/ ## 17/10/2023 Recherche sur le deep learning : https://course.fast.ai/Lessons/lesson1.html Extraction des données de la forge afin d'avoir un batch de test. 50 lignes de fichier CSV exploitable. Suivi du tutoriel : https://medium.com/@vitalshchutski/french-nlp-entamez-le-camembert-avec-les-librairies-fast-bert-et-transformers-14e65f84c148. Problème d'importation de camemBert depuis torch.hub: ![](https://hackmd.io/_uploads/S10OzX3Z6.png) Plusieurs tentative : - pip install fairseq - pip install sentencepiece ## 18/10/2023 Problème d'importation depuis torch.hub de camemBert est régler. La marche à suivre est la suivante: ![](https://hackmd.io/_uploads/BJAG9bpZp.png) source : https://github.com/facebookresearch/fairseq/issues/1376 Après le suivi d'un tutoriel sur le fine tuning de CamemBert(https://www.kaggle.com/code/houssemayed/camembert-for-french-tweets-classification#Spliting-Training-and-validation-data) En labelisant les modules portails de 0 à 13: - Newsletter = 0 - Affichage = 1 - Administration = 3 - Bibliothèque numérique = 4 - Statistique = 5 - Avis = 6 - Interface SIGB = 7 - Article = 8 - Panier = 9 - Compte lecteur = 10 - Recherche = 11 - Domaine = 12 - Annuaire bibliothèque = 13 J'obtiens ces résultats sur google collab(https://colab.research.google.com/drive/1KhByPd5cLmrYMlHHFjm6C7z3iPAE0hXV#scrollTo=NeyCd-buTuEl) : ![](https://hackmd.io/_uploads/HJUAm46-a.png) On peut observer que pour le premier nous obtenons bien le label 1 en revanche on obtiens pas le label 0 pour la newsletter. Afin d'ameliorer l'IA, les données doivetn être améliorer, ainsi que mes compétences en python. Je suis le tutoriel : https://openclassrooms.com/fr/courses/6204541-initiez-vous-a-python-pour-lanalyse-de-donnees. Puis le tutoriel : https://openclassrooms.com/fr/courses/7771531-decouvrez-les-librairies-python-pour-la-data-science/7856527-tirez-un-maximum-de-ce-cours. ## 19/10/2023 Point avec Arthur: approfondissement des connaissance en python, retravailler les donées du fichier csv Fin du tutoriel sur les librairies python. Début du tutoriel mise en place de l'environnement python afin de mettre en place CamemBert en local (https://openclassrooms.com/fr/courses/6951236-mettez-en-place-votre-environnement-python/7013349-decouvrez-les-paquets-python) https://www.ozwald.fr/camembert.html. Premier graphique en utilisant la librairie pandas afin de déterminer le nombre de fois qu'un Module Portail apparait dans le fichier csv : ![](https://hackmd.io/_uploads/SJjaKsJMa.png) ![](https://hackmd.io/_uploads/ByZJqskfp.png) ## 20/10/2023 Recherche afin de pouvoir nettoyer, préparer les données, ainsi que d'afficher les graphs de matrice et obtenir la fiabilité du modèle entrainer. Préparer les données : https://www.altexsoft.com/blog/datascience/preparing-your-dataset-for-machine-learning-8-basic-techniques-that-make-your-data-better/. Nous voulons une classification multiclasse, pour cela je vais créer un nouveau dataset comportant 10 lignes par module Portail, en esperant avoir des résultats plus concluants. ``` ipython kernel install --user --name=venv ``` Permet d'utiliser les environnements virtuels avec Jupyter https://www.geeksforgeeks.org/using-jupyter-notebook-in-virtual-environment/ Début de la mise en forme des données ## 23/10/2023 Premier test de nettoyage de la base de donnée: après plusieurs essais, j'arrive a subsituer les urls, tous les carctères spéciaux mais en gardant les accents. (suivi du tuto : https://www.kaggle.com/code/akatsuki06/basic-text-processing-cleaning-the-description) En partant d'un constat que la plupart des description de problèmes commencent toujours par un Bonjour et finissent souvent par un merci, j'arrive à substituer ces deux parties afin de ne garder que la description du problème. Permet de subsituer l'url: ``` dataFrame = re.sub(r'http\S+','',dataFrame) ``` Permets d'enlever tous les caractères spéciaux : ``` dataFrame = re.sub(r'[^ \nA-Za-z0-9À-ÖØ-öø-ÿЀ-ӿ/]+',' ',dataFrame) ``` Mise en minuscule afin d'éviter la casse : ``` dataFrame = dataFrame.lower() ``` Enlever tout ce qu'il y a avant "bonjour"(bonjour compris): ``` dataFrame = re.sub('^.*bonjour','', dataFrame) ``` Enlever tout ce qu'il y a après merci (merci compris): ``` dataFrame = re.sub(r'merci.*','',dataFrame) ``` Probleme quand je boucle sur le dataset entier : ![](https://hackmd.io/_uploads/HJmPh14Ga.png) Le problème venais du fait de re.sub sur le dataAffichage et non sur description : ![](https://hackmd.io/_uploads/r1-TkxVG6.png) Export du fichier en csv (https://towardsdatascience.com/how-to-export-pandas-dataframe-to-csv-2038e43d9c03) ## 24/10/2023 Regarder localAI pour interface graphique. Réalisation des fonctions afin d'automatiser le nettoyage du dataset, d'extraire des datasets en csv en fonction de leur module portail. Il ne manque plus que rajouter une colonne afin d'exprimer le numéro de label en fonction du Module Portail correspondant. ## 25/10/2023 Création d'une notice d'utilisation + test afin de mettre mon travail sur gitlab et que tout le monde puisse y avoir accès. Finalisation d'ajout de numéro correspondant aux labels. Nouvelle phase de test sur google collab Nouvelle correspondance entre les labels ainsi que leurs numéro: ![](https://hackmd.io/_uploads/Hye4g5PGa.png) Phase de teste avec les nouvelles données, camemBert à l'air de plutot bien répondre, il est plus efficace qu'avant même si il y a encore des erreur. le dataset demande encore d'être améliorer, peut être en ajoutant des infos du wiki afin de pouvoir bientôt faire une correspondance. ## 26/10/2023 Recherche pour sauvegarder le model entrainer afin de pouvoir faire des compratif notamment en supprimant les stopwords et ne plus être dépendant de google collab. Recherche sur flowise afin d'avoir une interface.https://flowiseai.com/ Essai de sauvegarde du modèle avec pickle (https://www.youtube.com/watch?v=br5Y-8CS26E) entrainer, afin de pouvoir faire des comparatif pour l'améliorer. ## 27/10/2023 Problème lors de l'import du modèle entrainer depuis google collabe : ![](https://hackmd.io/_uploads/SyH6cJKfa.png). Poblèmes de librairies notamment avec l'import du model. ![](https://hackmd.io/_uploads/By9TV1pMa.png) ![](https://hackmd.io/_uploads/r1BgSyaGT.png) Explication du model Bert : https://lesdieuxducode.com/blog/2019/4/bert--le-transformer-model-qui-sentraine-et-qui-represente Video complete sur l'entrainement d'un modèle, les outils etc : https://www.youtube.com/watch?v=7eh4d6sabA0 Après plusieurs test, télécharger le modèle complet grace a torch.save me permet de retrouver mon mdoèle en local. ![](https://hackmd.io/_uploads/r11B94pfa.png) Vidéo permettant une mise en route rapide d'un modele BERT pour la classification de texte, très bien expliquer :https://www.youtube.com/watch?v=IzbjGaYQB-U (Attention après un test en direct de la vidéo, les ressources demandées en termes de GPU sont largement supérieur à ce que nous pouvons obtenir sur google collab) ## 30/10/2023 Réglage de bug à cause des librairies python. Visiblement cel provient de la version de python sur la machine et certaines librairies pas encore importés sur la version 3.11.5 ## 31/10/2023 Installation de pyenv afin de pouvoir gérer les différentes versions de python, afin de pouvoir activer pyenv nous avons besoins de taper cette commande dans le terminal : ``` eval "$(command pyenv init -)" ``` Pyenv permet d'installer différentes versions de python ainsi que de gérer la version global de python sur le pc ainsi que d'affecter des versions de python a certains dossier. Avec arthur début de configuration d'un environnement jupyter tournant sur funky après plusieurs essais nous arrivons à installer jupyter mais nous rencontrons des problèmes avec le kernel, celui-ci plante constamment. ## 02/11/2023 Recherche afin de pouvoir tester le modèle, recherche sur pytorch et outils permettant d'évaluer le modèle. Après avoir enlever les stopwords dans le fichier csv nous obtenons la même accuracy de 0.56 : ![](https://hackmd.io/_uploads/S1grDX-mT.png) Après application du stemming nous obtenons une accuracy de 0.5: ![](https://hackmd.io/_uploads/rJef-Nb76.png) Les valeurs n'augmentant pas ou étant stagnantes, nous devons trouver une soution afin d'affiner le dataset ## 03/11/2023 Recherche sur OVH public cloud et leur offre de service google collab : début à 11,50€ par mois mais pas de détail au niveau de la puissance alloué, possibilité d'acheter des unité de calcul aussi. carnot : aucune grille de tarification hormis que les GPU commencentà 0,82 € Scalway : début à 1,90€ de l'heure. OVH : tarification à la minute lors du lancement du notebook, environ 0,80€/heure Outils IA https://labs.perplexity.ai/ Installation de bard en local. ## 20/11/2023 Suivi du cours : https://learn.deeplearning.ai/chatgpt-prompt-eng/lesson/8/chatbot. Afin de pouvoir comprendre comment faire de meilleur prompt. Suivi du cours : https://learn.deeplearning.ai/chatgpt-building-system/lesson/1/introduction. Dans le but d'implémenter l'API de ChatGPT (non terminé) Problèmes rencontrer suite à la formation, j'arrive a faire générer des réponses de la part de ChatGPT, mais les urls sont toutes erronées. Il se met dans le bon contexte mais a besoin certainement de plus d'exemple. Installation de l'api en locale. ## 21/11/2023 Réunion afin de définir exactement les nouvelles directives avec Arnaud et Arthur. Nouveaux objectif réalisation d'un chatbot pour le wiki de Bokeh utilisant l'API de ChatGPT, afin d'envoyer une url valide correspondant à la demande de l'utilisateur. Récupération du travail de Julien afin de pouvoir commencer avec une base de travail. Ajout du prompt afin de définir le contexte dans l'API. ## 22/11/2023 Implémentation d'un scrapper grâce à la librairy BeautifulSoup afin de pouvoir récupérer automatiquement toutes les pages disponibles sur Bokeh. Le scrapper me permet aussi de vérifier si une page existe. La réponse renvoyer par ChatGPT est en JSON, nous effectons ensuite une création de l'url. Traitement de la réponse de ChatGPT : la réponse renvoyer n'est pas directement celle de l'utilisateur, si la réponse peut être PARSE en JSON cela signifie qu'il a trouver dan les pages existantes sinon nous renvoyons le message "Veuillez préciser". L'utilisateur peut faire de l'injection de prompte mais la réponse n'étant pas directement celle de ChatGPT cela renverra toujours "Veuillez préciser" ## 23/11/2023 Réunion avec Arthur pour définir les nouvelles taches, et présentation de la première version du chatbot. Fin de la formation https://learn.deeplearning.ai/chatgpt-building-system/lesson/1/introduction Recherche sur les différents framwork de test, amélioration du prompt. Début de la rédaction du cahier de test Comparaison entre les deux framwork pytest et unittest https://pytest-with-eric.com/comparisons/pytest-vs-unittest/ Convention de nommage python : https://realpython.com/python-pep8/ https://realpython.com/emacs-the-best-python-editor/ ## 24/11/2023 Rédaction du cahier de test, mise en place de pytest car c'est une version améliorer d'unittest, avec une syntaxe plus lisible. Début de l'écriture des testes ## 27/11/2023 Fin de l'implémentation des test et refactorisation du code. Découverte des GPT et d ce qu'on peut faire : https://www.youtube.com/watch?v=ugpBsDJ4Q4c https://www.youtube.com/watch?v=bhPxR9mIWgI Création d'un GPT personnaliser afin d'essayer d'avoir des résultat plus concluant. Pouvoir ajouter des documents dans le builder de chatGPT permet de lui donner un context. A voir si maintenant on arrive à faire du scrapping directement sur le site de Bokeh, à l'heure actuelle le scrapping semble être désactiver pour chatGPT vers ce site. https://www.youtube.com/watch?v=pGHtjqvnSAQ ## 28/11/2023 Implémentation de la nouvelle version de gpt-3.5-turbo-1106. Recherche sur les fonction calling afin de pouvoir faire le scrapping automatiquement : https://semaphoreci.com/blog/function-calling Potentiellement pourvoir faire fonctionner une fonction de scrapping en plus afin de pouvoir avoir un résumé de la page à chaque fois et être encore plus précis. Implémentation du comptage de token utilisé à chaque prompt environ 3900 Plus sur les fonctions calling : https://www.youtube.com/watch?v=aqdWSYWC_LI ## 29/11/2023 Recherche sur la structuration du projet : https://openclassrooms.com/fr/courses/7150616-apprenez-la-programmation-orientee-objet-avec-python/7196808-utilisez-les-modules-et-les-classes-pour-decouper-votre-code Découverte des classes en python, début de la refactorisation POO. ## 30/11/2023 Implémentation de l'appelle à l'API médiawiki afin de récupérer toutes les pages. Fin de la refactorisation POO. ## 01/12/2023 Fin de l'implémentation avec L'API, refactorisation des test. Problèmes rencontrer lors de l'import de modules python venant d'un niveau en dessous. ## 04/12/2023 Réunion IA, prochain objectif faire evoluer le projet afin de faire un chatbot pour chaque logiciel. Réglage du problème de l'import module en lançant les tests depuis le fichier parent. Check des pages en fonction des pages récupérer dans l'api et refactorisation. ## 05/12/2023 Présentation du projet à Biblibre ainsi que du parcours jusqu'a celui-ci, informations concernant les GPTs afin de faire de la veille. Implémentation des wiki kaila et nanook, grâce a un fichier de config json. La query sur toutes les pages doit encore être améliorer, pour le moment récupère toutes les pages. ## 06/12/2023 Recheche afin de transformer en API, plusieurs framework disponibles : Django, Flask, Eve, Hug, Falcon etc ... Pour le moment, début sur Flask car permet d'avoir une vue et de faire une application en entiere (plus polyvalent). En revanche si on doit seulement créer une API Fast API semble le choix le plus pertinent du à sa rapidité et ses outils fait pour créer rapidement une API ## 07/12/2023 Veille sur l'ia démo impressionante de gemini (IA de google): https://www.20minutes.fr/high-tech/4065713-20231207-impressionnante-demo-gemini-ia-google-veut-detroner-gpt-4 Recherche sur Flowise, premier essais plutot concluant, permettant de créer un chatbot en 10-15min, maintenant il faut voir pour essayer d'améliorer cela. Suivi de tuto : https://www.youtube.com/watch?v=fn4GCZuiwdk&list=PL4HikwTaYE0HDOuXMm5sU6DH6_ZrHBLSJ&index=2 ## 08/12/2023 Suivi de tuto flowise plus découverte de LangChain qui peut être soit une alternative ou un complément pour le chatbot si nous avons une évolution dans le temps. Langchain peut nous permettre de faire un gpt custom avec des vectors sur les wiki, la question du cout reviens même si dans l'ensemble celà sera moins cher qu'en faisant du fine tuning. Sachant que d'autres models sont disponibles, je pense qu'une solution en open sources est totalement faisable. En revanche, c'est le temps de dev qui peut être conséquent, c'est un framework adapté, je suppose que le temps est réduit mais cela reste un questionnement. Flowise reste aussi une bonne option même si pour le moment j'ai des problèmes avec pinecone, une autre solution pour remplacer le stockage de vecteurs est envisageable, l'avantage de Flowise est le nocode et sa simplicité. En revanche moins de personnalisation qu'avec langchain directement. **Les gros sujets restent le web scrapping afin de stocker les données des wiki**. Si une recherche seulement par liens reste la priorité, cela n'a pas d'intéret. ## 26/12/2023 Mise en place des caches avec recherche toutes les semaines les pages du wiki. Mise en place des logs. Test au niveau des différences entre ce que proposer Flowise et l'application, Flowise est beaucoup plus précis. Le fait d'avoir effectuer un scrapping sur le site du wiki permet de qualifier chaque lien et surtout d'avoir un chatbot entièrement fonctionnel. Mais Flowise a ses limites nous n'avons pas accès à tout, de ce fait, le faire grâce au framework Langchain permet une vrai évolution. ## 27/12/2023 Recherche sur le framework Langchain afin de réaliser un chatbot avec les données déjà collecter. https://www.youtube.com/watch?v=LhnCsygAvzY ## 09/12/2024 Mise en place d'un server de production avec Gunicorn. ## 06/02/2024 Décision de migration de l'api vers FastAPI afin d'avoir un framwork complet pouvant gérer l'authentification ainsi que le renvoie d'erreur. Un front en VueJS est prévu afin de pouvoir avoir une interface de démonstration. ## 07/02/2024 Fin de la mise en place de FastAPI, début de la mise en place de l'authentification. Interface front en VueJS complete ## 08/02/2024 Mise en place de la base de donnée et de l'ORM SQLModel. La clé d'API est maintenant en BDD. ## 26/02/2024 - 29/02/2024 Mise en place de docker pour toute l'application notamment de la Base de donnée. L'application est maintenant conteneuriser. Mise en place de la base de donnée pour la récupération des pages de wiki. Recher sur le projet FindYourNextBook: plusieurs point sont à explorer faire juste une construction d'url avec les facettes me parait plutot compliquer car même avec un prompt adapter, l'extraction de chatGPT n'est pas focément la plus fiable. De plus nous ne pouvons pas rentrer des milliers de facettes dans un prompt pour pouvoir faire des comparaison. Le Blog FindYourNextBook nous apprend que pour contruire leurs projets ils ont fait de l'embedding soit rentrer des documents dans un modèle de language déjà entrainer. Le problème est au niveau du cout, il faut renseigner des milliers de livre et description, avec le module d'embedding de chatGPT, cela va avoir un cout pouvant être très élevé. Une combinaison des facettes et l'embedding peut être réaliser mais je ne sais pas à quel point celà peut être pertinent. Je continue mes recherches sur ce sujet, tout en essayant de trouver le meilleur moyen de palier a ses problèmes. ## 01/03/2024 Début des recherche sur ollama afin de pouvoir avoir une IA en locale. L'installation de Ollama ainsi que la configuration. Son installation est plutot facile, la mise en place dans l'intégration dans le code est plutôt rapide il suffit d'adapter avec le client OpenAi. En revanche je rencontre des problèlme de stabilités. Pour le moment j'utilise le modèle mistral. Les réponse sont beaucoup plus diverse et je n'arrive pas à récupérer une réponse exacte avec le format donner dans le prompt. De plus cette installtion en locale n'est pas viable ni pour le développement ou la production. Une réponse mais facilement plus de 10 minutes. Après la mise ne place de llama2 visiblement je me retrouve avec le même problème soit le prompt doit être adapter soit j'utilise une mauvaise version des modèles. Le problème est dans les réponse j'ai l'impression que les modèles ne gèrent pas bien le renvoie d'une réponse en JSON. Le temps reste le même voir plus long ave le modèle llama2. Je fais des recherche mais je suppose que la taille du prompt est le principal problème. Faire fonctionner les modèle en locale avec des questions "basique", nous obtenons une réponse en quelques secondes. Mistral semble répondre de manière plus fiable aux prompts, llama2 répond à la réponse sans utiliser le schéma de réponse. Après avoir effectuer plusieurs ajustement de prompt, je rencontre toujours les même difficultés. Je pense que le modèle sur ollama n'est qu'une version légère de mistral qui a du mal a être stable. Après avoir fait des test avec mistral (large) les résultats sont plutôt correct je pense en revanche que le modèle large y est pour beaucoup mais je ne peut pas heberger ce modèle en locale faut de ressources ## 06/03/2023 Suite recherche sur le projet FindYourNextBook. Il n'y a pas de recherche dand les résumé possible, afin de pouvoir élargir au maximum notre recherche nous allons devoir rechercher chaque sujet donner par chatGPT par son code facette.