Skip to content

Commit

Permalink
Fix a few typos in the new pipeline tutorial (#208)
Browse files Browse the repository at this point in the history
close #209 

Co-authored-by: avouacr <avouacr@pm.me>
Co-authored-by: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
  • Loading branch information
3 people committed Dec 24, 2021
1 parent dba6a5c commit 71c2a05
Show file tree
Hide file tree
Showing 9 changed files with 813 additions and 1,149 deletions.
22 changes: 10 additions & 12 deletions content/course/NLP/04_word2vec.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ jupyter:
display_name: Python 3
language: python
name: python3
title: "Prédiction d'auteurs littéraires à partir de différentes méthodes de vectorisation"
title: "Méthodes de vectorisation : comptages et word embeddings"
date: 2020-10-29T13:00:00Z
draft: false
weight: 40
Expand All @@ -24,13 +24,14 @@ tags:
categories:
- Tutoriel
summary: |
La partie précédente nous a amené à explorer les structures latentes
d'un texte. Le modèle Word2Vec permet maintenant d'explorer le
word embedding (plongement de mots).
Word2Vec est une représentation d'un corpus sous forme vectorielle
permettant d'entraîner des réseaux de neurones pour
reconstruire le contexte linguistique des mots et ainsi pouvoir,
dans un contexte donné, déterminer un certain champ lexical.
Pour pouvoir utiliser des données textuelles dans des algorithmes
de machine learning, il faut les vectoriser, c'est à dire transformer
le texte en données numériques. Dans ce TP, nous allons comparer
différentes méthodes de vectorisation, à travers une tâche de prédiction :
peut-on prédire un auteur littéraire à partir d'extraits de ses textes ?
Parmi ces méthodes, on va notamment explorer le modèle Word2Vec, qui
permet d'exploiter les structures latentes d'un texte en construisant
des word embeddings (plongements de mots).
---

```{r setup, include=FALSE}
Expand Down Expand Up @@ -263,7 +264,6 @@ Refaisons un graphique que nous avons déjà produit précédemment pour voir
la répartition de notre corpus entre auteurs:

```{python, results = "hide"}
plt.style.use('dark_background')
pd.Series(le.inverse_transform(y_train)).value_counts().plot(kind='bar')
plt.savefig("repart.png", bbox_inches='tight')
```
Expand Down Expand Up @@ -305,7 +305,6 @@ def plot_top_words(initials, ax, n_words=20):
top_words_counts = [word[1] for word in counts.most_common(n_words)]
# Représentation sous forme de barplot
plt.style.use('dark_background')
ax = sns.barplot(ax = ax, x=top_words, y=top_words_counts)
ax.set_title(f'Most Common Words used by {initials_to_author[initials]}')
```
Expand Down Expand Up @@ -716,8 +715,7 @@ ce que ne permettent pas de capter les *embeddings*.

## Exercices

- Prédictions sur le test set en utilisant les modèles entraînés
- Nous avons entraîné différents modèles sur le set d'entraînement par validation croisée, mais nous n'avons toujours pas utilisé le set de test que nous avons mis de côté au début. Réaliser la prédiction sur les données de test, et vérifier si l'on obtient le même classement des méthodes de vectorisation.
- Faire un *vrai* split train/test : faire l'entraînement avec des textes de certains auteurs, et faire la prédiction avec des textes d'auteurs différents. Cela permettrait de neutraliser la présence de noms de lieux, de personnages, etc.
- Comparer avec d'autres algorithmes de classification qu'un SVM
- (Avancé) : fine-tuner le modèle d'embeddings contextuels sur la tâche de classification

1 change: 1 addition & 0 deletions content/course/manipulation/04a_webscraping_TP.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -179,6 +179,7 @@ Par conséquent, la meilleure manière d'avoir un programme fonctionnel est
de comprendre la structure d'une page web et dissocier les éléments exportables
à d'autres cas d'usages des requêtes *ad hoc*.

{{< tweet 1474353569780355074 >}}


```{python}
Expand Down
23 changes: 18 additions & 5 deletions content/course/modelisation/6_pipeline.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -218,7 +218,8 @@ en question sont très corrélées les unes entre elles :

```{python, results = "hide"}
corr = mutations.loc[:, mutations.columns[mutations.columns.str.startswith('Surface Carrez')].tolist()].corr()
sns.heatmap(corr,
fig, ax = plt.subplots(1)
sns.heatmap(corr, ax=ax,
xticklabels=corr.columns.values,
yticklabels=corr.columns.values, cmap='coolwarm', annot=True, fmt=".2f")
plt.savefig('correlation_matrix_dvf.png', bbox_inches='tight')
Expand Down Expand Up @@ -459,7 +460,7 @@ fig.tight_layout()
plt.savefig("varimportance.png")
```

```{r}
```{r, echo = FALSE}
knitr::include_graphics("varimportance.png")
```

Expand Down Expand Up @@ -596,9 +597,19 @@ grid_search = GridSearchCV(pipe, param_grid=param_grid)
grid_search.fit(X, Y)
end_time = time.time()
print("Elapsed time : {} seconds", int(end_time - start_time))
```

```{python, results = "hide"}
{{< rawhtml >}}

```{python, echo = FALSE, results = "asis"}
print(estimator_html_repr(grid_search))
```

{{< /rawhtml >}}


```{python, echo=FALSE}
print("Elapsed time : {} seconds", int(end_time - start_time))
```

Expand Down Expand Up @@ -634,11 +645,13 @@ perf_random_forest = pd.DataFrame(grid_search.cv_results_)
Regardons les résultats moyens pour chaque valeur des hyperparamètres:

```{python, results = "hide"}
g = sns.lineplot(data = perf_random_forest,
fig, ax = plt.subplots(1)
g = sns.lineplot(data = perf_random_forest, ax = ax,
x = "param_randomforest__n_estimators",
y = "mean_test_score",
hue = "param_randomforest__max_depth")
g.set(xlabel='Number of estimators', ylabel='Mean score on test sample')
g
plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0,
title='Depth of trees')
plt.savefig("perfCV.png")
Expand Down Expand Up @@ -686,7 +699,7 @@ g.set(ylim=(0, 2e6), xlim=(0, 2e6),
xlabel='Observed values',
ylabel='Predicted values')
g.ax.axline(xy1=(0, 0), slope=1, color="red", dashes=(5, 2))
g
plt.savefig("predCV.png")
```

Expand Down

0 comments on commit 71c2a05

Please sign in to comment.