Skip to content

Commit

Permalink
Améliore l'exercice sur le LASSO (#473)
Browse files Browse the repository at this point in the history
* clean exercise 1

* nlp

* plotly plutot que matplotlib

* plotly plutot que matplotlib

* install libs

* fix pipeline

* clean

* clean

* update

* update
  • Loading branch information
linogaliana committed Dec 16, 2023
1 parent 4cd44f3 commit 3437373
Show file tree
Hide file tree
Showing 5 changed files with 423 additions and 161 deletions.
16 changes: 2 additions & 14 deletions content/NLP/01_intro.qmd
Expand Up @@ -22,20 +22,8 @@ bibliography: ../../reference.bib
image: https://minio.lab.sspcloud.fr/lgaliana/generative-art/pythonds/wordcloud_openfood_clean.png
---

::: {.cell .markdown}
```{python}
#| echo: false
#| output: 'asis'
#| include: true
#| eval: true
import sys
sys.path.insert(1, '../../') #insert the utils module
from utils import print_badges
#print_badges(__file__)
print_badges("content/NLP/01_intro.qmd")
```
::: {.content-visible when-format="html"}
{{< include "../../build/_printBadges.qmd" >}}
:::


Expand Down
51 changes: 26 additions & 25 deletions content/NLP/02_exoclean.qmd
Expand Up @@ -26,20 +26,8 @@ image: featured_nlp_exo.png
echo: false
---

::: {.cell .markdown}
```{python}
#| echo: false
#| output: 'asis'
#| include: true
#| eval: true
import sys
sys.path.insert(1, '../../') #insert the utils module
from utils import print_badges
#print_badges(__file__)
print_badges("content/NLP/02_exoclean.qmd")
```
::: {.content-visible when-format="html"}
{{< include "../../build/_printBadges.qmd" >}}
:::


Expand Down Expand Up @@ -102,13 +90,12 @@ Illustration de l'intérêt des _embeddings_ [@galianafuzzy]

Cette page évoquera les principales librairies pour faire du NLP, notamment :

* [WordCloud](https://github.com/amueller/word_cloud)
* [NLTK](https://www.nltk.org/)
* [SpaCy](https://spacy.io/)
* [Keras](https://keras.io/)
* [TensorFlow](https://www.tensorflow.org/)

Il faudra également installer les librairies `Gensim` et `Pywaffle`
A celles-ci s'ajoute des librairies de représentations graphiques
synthétiques comme [WordCloud](https://github.com/amueller/word_cloud),
`Gensim` et `Pywaffle`.

::: {.cell .markdown}
```{=html}
Expand Down Expand Up @@ -477,14 +464,23 @@ count_words = pd.DataFrame({'counter' : train
count_words[['word','count']] = pd.DataFrame(count_words['counter'].tolist(),
index=count_words.index)
count_words = count_words.reset_index()
g = sns.FacetGrid(count_words, row="Author")
g.map_dataframe(sns.barplot, x="word", y="count")
```


```{python}
g.figure.get_figure()
import plotly.express as px
def figure_count_occurrence(author):
fig = px.bar(
count_words.loc[count_words['Author'] == author],
x='word', y='count')
fig.show()
for authors in train["Author"].unique():
figure_count_occurrence(authors)
```


On voit ici que ce sont des mots communs, comme *"the"*, *"of"*, etc. sont très
présents. Mais ils sont peu porteurs d'information, on peut donc les éliminer
avant de faire une analyse syntaxique poussée.
Expand Down Expand Up @@ -562,15 +558,20 @@ Commençons par représenter la relation entre la fréquence et le rang:
```{python}
#| output: false
#| echo: true
g = sns.lmplot(y = "freq", x = "rank", hue = 'Author', data = count_words, fit_reg = False)
g.set(xscale="log", yscale="log")
g
from plotnine import *
g = (
ggplot(count_words) +
geom_point(aes(y = "freq", x = "rank", color = 'Author'), alpha = 0.4) +
scale_x_log10() + scale_y_log10() +
theme_minimal()
)
```

Nous avons bien, graphiquement, une relation log-linéaire entre les deux :

```{python}
g.figure.get_figure()
g
```

Avec `statsmodels`, vérifions plus formellement cette relation:
Expand Down
27 changes: 16 additions & 11 deletions content/NLP/04_word2vec.qmd
Expand Up @@ -42,44 +42,49 @@ print_badges("content/NLP/04_word2vec.qmd", ssp_cloud_service="pytorch")
```
:::



Cette page approfondit certains aspects présentés dans la
[partie introductive](#nlp). Après avoir travaillé sur le
[partie introductive](/content/NLP/02_exoclean.qmd). Après avoir travaillé sur le
*Comte de Monte Cristo*, on va continuer notre exploration de la littérature
avec cette fois des auteurs anglophones :

* Edgar Allan Poe, (EAP) ;
* HP Lovecraft (HPL) ;
* Mary Wollstonecraft Shelley (MWS).

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
Les données sont disponibles sur un CSV mis à disposition sur [`Github`](https://github.com/GU4243-ADS/spring2018-project1-ginnyqg/blob/master/data/spooky.csv). L'URL pour les récupérer directement est
<https://github.com/GU4243-ADS/spring2018-project1-ginnyqg/raw/master/data/spooky.csv>.

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 de les représenter graphiquement, puis on va ensuite essayer de prédire quel texte correspond à quel auteur à partir de différents modèles de vectorisation, notamment les *word embeddings*.

Ce notebook est librement inspiré de :

* https://www.kaggle.com/enerrio/scary-nlp-with-spacy-and-keras
* https://github.com/GU4243-ADS/spring2018-project1-ginnyqg
* https://www.kaggle.com/meiyizi/spooky-nlp-and-topic-modelling-tutorial/notebook
Ce chapitre s'inspire de plusieurs ressources disponibles en ligne:

* Un [premier _notebook_ sur `Kaggle`](https://www.kaggle.com/enerrio/scary-nlp-with-spacy-and-keras)
et un [deuxième](https://www.kaggle.com/meiyizi/spooky-nlp-and-topic-modelling-tutorial/notebook
) ;
* Un [dépôt `Github`](https://github.com/GU4243-ADS/spring2018-project1-ginnyqg) ;

## Packages à installer

::: {.callout-warning title="Packages à installer"}
Comme dans la [partie précédente](#nlp), il faut télécharger des librairies
Comme dans la [partie précédente](/content/NLP/02_exoclean.qmd), il faut télécharger des librairies
spécialiséees pour le NLP, ainsi que certaines de leurs dépendances.

```{python}
#| eval: false
!pip install spacy gensim sentence_transformers pandas matplotlib seaborn
```

Ensuite, comme nous allons utiliser la librairie `spaCy` avec un corpus de textes
Ensuite, comme nous allons utiliser la librairie `SpaCy` avec un corpus de textes
en Anglais, il convient de télécharger le modèle NLP pour l'Anglais. Pour cela,
on peut se référer à [la documentation de `spacy`](https://spacy.io/usage/models),
on peut se référer à [la documentation de `SpaCy`](https://spacy.io/usage/models),
extrêmement bien faite.

```{python}
#| eval: false
!python -m spacy download en_core_web_sm
```
:::

```{python}
from collections import Counter
Expand Down

0 comments on commit 3437373

Please sign in to comment.