EveSa commited on
Commit
05ee545
2 Parent(s): c0eeece f3266b7

Merge pull request #15 from EveSa/Eve

Browse files
Files changed (2) hide show
  1. Documentation.md +104 -17
  2. src/dataloader.py +0 -2
Documentation.md CHANGED
@@ -4,47 +4,134 @@ L'objectif du projet est de mettre en place une <strong>plateforme de requête</
4
 
5
  # Une description du système ou des données auxquelles l’interface permet d’accéder
6
 
 
7
 
8
  Le projet utilisera pour l'entraînement du modèle de langue le corpus issu de 'Newsroom: A Dataset of 1.3 Million Summaries with Diverse Extractive Strategies' (Grusky et al., NAACL 2018) newsroom assemblé par Max Grusky et ses collègues en 2018. Newsroom est un corpus parallèle rassemblant 1,3 millions articles de presse et leur résumé en anglais. Les résumés sont réalisés en utilisant les méthodes d'extraction comme d'abstraction ainsi que des méthodes mixtes. Ce corpus est disponible sur HuggingFace mais necessite un téléchargement préalable pour des raisons de protection des données.
9
 
 
 
 
 
 
 
 
10
 
11
  # La méthodologie
12
 
13
- ## Répartition du travail
14
- Nous avons décidé de travailler avec le logiciel de gestion de version Github en mettant en place un système de verification des commit avec un pull request.
15
- Cette méthode permet à chaque participant du projet d'observer les modifications effectuées par les autres membres avant d'accepter de fondre en une seule les branches main et les modifications proposées.
 
16
 
17
  ## Problèmes rencontrés et résolution
18
- - Problème Mojibake depuis les fichiers jsonl : encodage en cp1252 et decodage en utf-8 avec ignore pour éviter les erreurs sur les caractères utf-8 présents dans le fichier à l'encodage
19
- - Répétition des mots à cause de la ponctuation : suppresion de la ponctuation avec `strip`
20
- - Agglomération des pronoms et des verbes : remplacement des `'` par des espaces avant le `split`
21
- - Split des noms propres composés ('Ivory Coast', 'Inter Milan') :
22
- - Problème des mots non disponibles dans le vocabulaire
23
- - Problème de la qualité du corpus :
24
- - Résumés tronqués : "Did', 'Tatum', "O'Neal's", 'latest', 'battle', 'with', 'ex-husband', 'John', 'McEnroe', 'put', 'her', 'back', 'on', 'drugs?', 'The', '"Paper', 'Moon"star', 'checked', 'herself', 'into', "L.A.'s", 'Promises', 'rehab', 'facility', 'after', 'a', 'friend', 'caught', 'her', 'smoking', 'crack,', 'according', 'to', 'The', 'National', 'Enquirer.', "O'Neal", 'emerged', 'clean', 'and', 'sober', 'from', "Promises'", '34-day', 'recovery', 'program', 'in', 'late', 'July,', 'the', 'tab', 'reports.', 'The', 'actress', 'is', 'said', 'to', 'have', 'plunged', 'into', 'her', 'old', 'habits', 'because', 'of'"
25
- - Résumés plus proche de titres que de résumés
26
- - Prise en compte du padding dans l'apprentissage --> utilisation de la fonctionnalité ignore_index de NLLLoss avec un padding d'une valeur à -100
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
 
28
 
29
  ## Les étapes du projet
30
 
 
 
 
 
 
 
 
31
  # Implémentation
32
  ## modélisation
33
 
34
- Nous avons décidé dans un premier temps de modéliser une LSTM pour le résuméautomatique sur labase du réseau de neurone réalisé en cours.
35
  Pour ce faire nous nous sommes beaucoup inspirée du kaggle https://www.kaggle.com/code/columbine/seq2seq-pytorch ainsi que de la documentation de PyTorch https://pytorch.org/tutorials/beginner/nlp/sequence_models_tutorial.html#example-an-lstm-for-part-of-speech-tagging
 
36
  ## modules et API utilisés
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
37
  ## Langages de programmation
 
 
 
38
 
39
  # Les résultats (fichiers output, visualisations…)
40
 
41
  ## Les metriques d'évaluation
42
  - ROUGE
43
  - BLEU
44
- - QAEval
45
- - Meteor
46
- - BERTScore
47
 
48
 
49
  # Discussion des résultats
50
- ce que vous auriez aimé faire et ce que vous avez pu faire par exemple
 
 
 
 
 
 
 
4
 
5
  # Une description du système ou des données auxquelles l’interface permet d’accéder
6
 
7
+ ## Les Données 💾
8
 
9
  Le projet utilisera pour l'entraînement du modèle de langue le corpus issu de 'Newsroom: A Dataset of 1.3 Million Summaries with Diverse Extractive Strategies' (Grusky et al., NAACL 2018) newsroom assemblé par Max Grusky et ses collègues en 2018. Newsroom est un corpus parallèle rassemblant 1,3 millions articles de presse et leur résumé en anglais. Les résumés sont réalisés en utilisant les méthodes d'extraction comme d'abstraction ainsi que des méthodes mixtes. Ce corpus est disponible sur HuggingFace mais necessite un téléchargement préalable pour des raisons de protection des données.
10
 
11
+ Le corpus est nettoyé avant d'être utilisé pour l'entraînement du LSTM. Seule les parties 'text' et 'summary' du jsonl sont utilisées.
12
+
13
+ ## Le système 🖥️
14
+
15
+ 2 systèmes :
16
+ - LSTM réalisé à partir du <a href="https://loicgrobol.github.io//neural-networks/slides/03-transformers/transformers-slides.py.ipynb">cours</a> et de cet <a href="https://www.kaggle.com/code/columbine/seq2seq-pytorch">exemple</a> et de beaucoup d'autres référence en ligne.
17
+ - Fine-tuned transformers
18
 
19
  # La méthodologie
20
 
21
+ ## Répartition du travail 👥
22
+ Nous avons travaillé avec le logiciel de gestion de version Github en mettant en place une intégration continue envoyant directement les `pull request` sur l'espace Huggingface.
23
+
24
+ Idéalement, les `pull request` doivent être validées par deux membres du projet avant d'être accéptées afin d'éviter les erreurs en production. Nous n'avons pas mis en place ces restrictions à cause de la difficulté à gérer Docker dans Huggingface qui nous a nécessité beaucoup de modification.
25
 
26
  ## Problèmes rencontrés et résolution
27
+
28
+ ### Problème sur le corpus 📚
29
+
30
+ - [x] Problème Mojibake depuis les fichiers jsonl :
31
+ - [x] encodage en cp1252 et decodage en utf-8 avec ignore pour éviter les erreurs sur les caractères utf-8 présents dans le fichier à l'encodage
32
+ - ❔Le problème ne se présente étrangement pas sur toutes les machines.
33
+ - [x] Agglomération des pronoms et des verbes
34
+ - D'abord remplacement des `'` par des espaces avant le `split`
35
+ - Utilisation d'un dictionnaire de correspondance
36
+ - [ ] Split des noms propres composés ('Ivory Coast', 'Inter Milan') :
37
+ - [ ] pas de résolution à ce jour
38
+ - [ ] Problème des mots non disponibles dans le vocabulaire
39
+ - À terme, entraînement sur tout le corpus ?
40
+ - [ ] Problème de la qualité du corpus :
41
+ - Résumés tronqués : "Did Tatum O'Neal's latest battle with ex-husband John McEnroe put her back on drugs? The \"Paper Moon\"star checked herself into L.A.'s Promises rehab facility after a friend caught her smoking crack, according to The National Enquirer. O'Neal emerged clean and sober from Promises' 34-day recovery program in late July, the tab reports. The actress is said to have plunged into her old habits because of" ...
42
+ - Résumés plus proche de titres que de résumés : "SAN DIEGO PADRES team notebook"
43
+ - [ ] pas de résolution à ce jour
44
+
45
+ ### Problème sur le Réseau de Neurone 🕸️
46
+
47
+ - [x] Prise en compte du padding dans l'apprentissage :
48
+ - [ ] utilisation de la fonctionnalité ignore_index de NLLLoss avec un padding d'une valeur à -100
49
+ - [ ] Temps d'apprentissage très long :
50
+ - [ ] essai de mise en place d'un entraînement par batch
51
+ - [ ] Répetition des déterminants après entraînement du modèle - https://huggingface.co/blog/how-to-generate
52
+ - [x] mise en place d'un Beam Search - non fructueux
53
+ - [ ] Passage vers du Sampling
54
+
55
+ ### Problème sur le fine-tuning
56
+
57
+ ### Problème sur l'interface
58
+
59
+ ### Problème de l'Intégration continue
60
+
61
+ - [x] Pas de lien possible entre Huggingface et un github dont l'history contient des fichier de plus de 10Mo
62
+ - 💣 Explosion du github
63
+ - [ ] Docker qui fonctionne en local mais en sur Huggingface
64
+ - Problème de path de fichier
65
 
66
 
67
  ## Les étapes du projet
68
 
69
+ 1. Initialisation du Github
70
+ 2. Premiers pas dans le réseau de neurone
71
+ 3. Réalisation de la plateforme
72
+ 4. Intégration à Huggingface
73
+ 5. Fine-tuning de modèle
74
+ 6. Finalisation
75
+
76
  # Implémentation
77
  ## modélisation
78
 
79
+ Nous avons décidé dans un premier temps de modéliser une LSTM pour le résumé automatique sur la base du réseau de neurone réalisé en cours.
80
  Pour ce faire nous nous sommes beaucoup inspirée du kaggle https://www.kaggle.com/code/columbine/seq2seq-pytorch ainsi que de la documentation de PyTorch https://pytorch.org/tutorials/beginner/nlp/sequence_models_tutorial.html#example-an-lstm-for-part-of-speech-tagging
81
+
82
  ## modules et API utilisés
83
+ ### Dataloader :
84
+ - Data
85
+ ```
86
+ A class used to get data from file
87
+ ...
88
+
89
+ Attributes
90
+ ----------
91
+ path : str
92
+ the path to the file containing the data
93
+
94
+ Methods
95
+ -------
96
+ open()
97
+ open the jsonl file with pandas
98
+ clean_data(text_type)
99
+ clean the data got by opening the file and adds <start> and
100
+ <end> tokens depending on the text_type
101
+ get_words()
102
+ get the dataset vocabulary
103
+ ```
104
+ - Vectoriser
105
+ ```
106
+ ```
107
+
108
+ ### Model :
109
+
110
+ ### train :
111
+
112
+ ### inference :
113
+
114
+ ### api :
115
+
116
+ ### templates :
117
+
118
  ## Langages de programmation
119
+ - 🐳 Docker
120
+ - yaml
121
+ - 🐍 et python evidemment
122
 
123
  # Les résultats (fichiers output, visualisations…)
124
 
125
  ## Les metriques d'évaluation
126
  - ROUGE
127
  - BLEU
 
 
 
128
 
129
 
130
  # Discussion des résultats
131
+
132
+ ## Résultats du LSTM
133
+
134
+ Les résultats du LSTM sont inutilisables mais ont permis au moins de se confronter à la difficulté de mettre en place des réseaux de neurones depuis pas grand chose.
135
+ On aurait aimé avoir plus detemps pour aller plus loin et comprendre mieux encore : l'entraîement par batch, pourquoi les résultats sont si mauvais, mettre d'autres stratégies de génération en place, ...
136
+
137
+ ## Résultat du fine-tuning
src/dataloader.py CHANGED
@@ -38,8 +38,6 @@ class Data(torch.utils.data.Dataset):
38
  <end> tokens depending on the text_type
39
  get_words()
40
  get the dataset vocabulary
41
- make_dataset()
42
- create a dataset with cleaned data
43
  """
44
 
45
  def __init__(self, path: str, transform=None) -> None:
 
38
  <end> tokens depending on the text_type
39
  get_words()
40
  get the dataset vocabulary
 
 
41
  """
42
 
43
  def __init__(self, path: str, transform=None) -> None: