You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
On peut se rendre compte que les extraits des 3 auteurs ne sont pas forcément équilibrés dans le jeu de données. Il faudra en tenir compte dans la prédiction.
234
233
235
-
```{python, echo=TRUE, eval=TRUE}
234
+
```{python, echo=TRUE, eval=TRUE, include=FALSE}
236
235
fig = plt.figure()
237
236
sns.barplot(x=['Edgar Allen Poe', 'Mary W. Shelley', 'H.P. Lovecraft'], y=train['Author'].value_counts())
237
+
```
238
+
239
+
```{python, echo=FALSE, eval=TRUE}
238
240
plt.savefig("wordfreq.png", bbox_inches='tight')
239
241
```
240
242
@@ -351,7 +353,7 @@ que Lovecraft n'a pas volé sa réputation d'écrivain de l'horreur !
351
353
352
354
Pour aller plus loin dans l'analyse du champ lexical de chaque auteur,
353
355
on peut représenter un `wordcloud` qui permet d'afficher chaque mot avec une
354
-
taille proportionnelle au nombre d'occurrence de celui-ci
356
+
taille proportionnelle au nombre d'occurrence de celui-ci.
2. Après avoir construit la matrice de documents x terms avec le code suivant, rechercher les lignes où les termes ayant la structure `abandon` sont non-nuls.
684
690
685
-
```{python, echo = TRUE}
691
+
```{python, echo = FALSE, include = FALSE}
686
692
feature_names = tfidf.get_feature_names()
687
693
corpus_index = [n for n in list(tfidf.vocabulary_.keys())]
688
694
import pandas as pd
@@ -694,7 +700,7 @@ df.head()
694
700
Les lignes sont les suivantes :
695
701
696
702
```{python}
697
-
#| include: false
703
+
#| include: true
698
704
#| echo: false
699
705
700
706
#2. Lignes où les termes de abandon sont non nuls.
@@ -706,7 +712,7 @@ tempdf.head(5)
706
712
3. Trouver les 50 extraits où le score TF-IDF est le plus élevé et l'auteur associé. Vous devriez obtenir le classement suivant:
707
713
708
714
```{python}
709
-
#| include: false
715
+
#| include: true
710
716
#| echo: false
711
717
712
718
#3. 50 extraits avec le TF-IDF le plus élevé.
@@ -763,7 +769,7 @@ On va, rapidement, regarder dans quel contexte apparaît le mot `fear` dans
763
769
l'oeuvre d'Edgar Allan Poe (EAP). Pour cela, on transforme d'abord
Copy file name to clipboardExpand all lines: content/course/NLP/03_lda.Rmd
+36-18Lines changed: 36 additions & 18 deletions
Original file line number
Diff line number
Diff line change
@@ -44,9 +44,9 @@ print_badges()
44
44
45
45
46
46
47
-
Cette page approfondit continue les exercices présentés dans la
47
+
Cette page approfondit les exercices présentés dans la
48
48
[section précédente](#nlpexo).
49
-
On va ainsi continuer notre exploration de la littérature anglophones:
49
+
On va ainsi continuer notre exploration de la littérature anglophones:
50
50
51
51
* Edgar Allan Poe, (EAP) ;
52
52
* HP Lovecraft (HPL) ;
@@ -55,10 +55,13 @@ On va ainsi continuer notre exploration de la littérature anglophones:
55
55
Les données sont disponibles ici : [spooky.csv](https://github.com/GU4243-ADS/spring2018-project1-ginnyqg/blob/master/data/spooky.csv) et peuvent être requétées via l'url
Le but va être dans un premier temps de regarder dans le détail les termes les plus fréquents utilisés par les auteurs, de les représenter graphiquement puis on va ensuite essayer de prédire quel texte correspond à quel auteur à partir d'un modèle `Word2Vec`.
59
58
59
+
Le but va être dans un premier temps de regarder dans le détail les termes les plus fréquents utilisés par les auteurs, et les représenter graphiquement.
60
60
61
-
Ce notebook librement inspiré de :
61
+
<!-- puis on va ensuite essayer de prédire quel texte correspond à quel auteur à partir d'un modèle `Word2Vec`. -->
La liste des modules à importer est assez longue, la voici:
99
102
100
103
```{python}
104
+
import nltk
105
+
nltk.download('stopwords')
106
+
nltk.download('punkt')
107
+
nltk.download('genesis')
108
+
nltk.download('wordnet')
109
+
101
110
import numpy as np # linear algebra
102
111
import pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)
103
112
import seaborn as sns
@@ -126,6 +135,7 @@ from sklearn.decomposition import NMF, LatentDirichletAllocation
126
135
pouvez passer à la section suivante*
127
136
128
137
Le code suivant permet d'importer le jeu de données `spooky`:
138
+
129
139
```{python, echo = TRUE}
130
140
import pandas as pd
131
141
@@ -145,7 +155,7 @@ Le jeu de données met ainsi en regard un auteur avec une phrase qu'il a écrite
145
155
train.head()
146
156
```
147
157
148
-
Les étapes de *preprocessing* sont expliquées au [chapitre précédent](#nlpexo). On applique les étapes suivantes:
158
+
Les étapes de *preprocessing* sont expliquées dans le [chapitre précédent](#nlpexo). On applique les étapes suivantes:
149
159
150
160
1. Tokeniser
151
161
2. Retirer la ponctuation et les stopwords
@@ -187,7 +197,7 @@ des documents par sujet, recherche, compréhension et analyse du texte, ou même
187
197
textes.
188
198
189
199
Aujourd’hui, ce genre de méthodes s’utilisent fréquemment dans le web, par exemple pour
190
-
analyser des ensemble d’articles d’actualité, les regrouper par sujet, faire de la recommendation
200
+
analyser des ensemble d’articles d’actualité, les regrouper par sujet, faire de la recommandation
191
201
d’articles, etc.
192
202
193
203
La LDA est une méthode qui considère les corpus comme des __mélanges__ de sujets et
@@ -211,14 +221,13 @@ La matrice termes-documents qui sert de point de départ est la suivante:
211
221
| ... | ... | ... | ... | ... | ... |
212
222
|doc_N| 1 | 0 | 0 | ... | 5 |
213
223
214
-
La LDA consiste à transformer cette matrice *sparse*
215
-
(creuse en Français) document-terme en deux matrices de moindre dimension:
224
+
On dit que cette matrice est *sparse* (creuse en Français) car elle contient principalement des 0. En effet, un document n'utilise qu'une partie mineure du vocabulaire complet.
225
+
226
+
La LDA consiste à transformer cette matrice *sparse*document-terme en deux matrices de moindre dimension:
216
227
217
228
1. Une matrice document-sujet
218
229
2. Une matrice sujet-mots
219
230
220
-
On dit que cette matrice est sparse car elle contient principalement des 0. En effet, un document n'utilise qu'une partie mineure du vocabulaire complet.
221
-
222
231
En notant $K_i$ le sujet $i$. On obtient donc
223
232
224
233
* Une __matrice document-sujet__ ayant la structure suivante:
@@ -256,10 +265,10 @@ corpus = train_clean[train_clean["Author"] == "EAP"]
256
265
Il existe plusieurs manières d'entraîner une LDA.
257
266
258
267
Nous allons utiliser `scikit` ici avec la méthode `LatentDirichletAllocation`.
259
-
Comme expliqué dans la partie [modélisation](#modelisation):
268
+
Comme expliqué dans la partie [modélisation](#modelisation):
260
269
261
-
1. On initialise le modèle
262
-
2. On le met à jour avec la méthode `fit`
270
+
1. On initialise le modèle ;
271
+
2. On le met à jour avec la méthode `fit`.
263
272
264
273
```{python}
265
274
from sklearn.feature_extraction.text import CountVectorizer
@@ -283,7 +292,7 @@ lda.fit(count_data)
283
292
## Visualiser les résultats
284
293
285
294
On peut déjà commencer par utiliser une fonction pour afficher les
#!pip install pyLDAvis #à faire en haut du notebook sur colab
361
372
import pyLDAvis
362
373
import pyLDAvis.sklearn
363
374
@@ -386,6 +397,13 @@ print(
386
397
{{< /rawhtml >}}
387
398
388
399
400
+
* Chaque **bulle** représente un sujet. Plus la bulle est grande, plus il y a de documents qui traitent de ce sujet.
401
+
402
+
Plus les barres sont loin les unes des autres, plus elles sont différentes. Un bon modèle aura donc tendance à avoir de grandes bulles qui ne se recoupent pas. Ce n'est pas vraiment le cas ici...
403
+
404
+
* Les **barres bleues** représentent la fréquence de chaque mot dans le corpus.
405
+
406
+
* Les **barres rouges** représentent une estimation du nombre de termes générés dans un sujet précis. La barre rouge la plus longue correspond au mot le plus utilisé dans ce sujet.
0 commit comments