Skip to content

Commit

Permalink
TP master 2022-2023
Browse files Browse the repository at this point in the history
  • Loading branch information
kariminf committed Nov 28, 2022
1 parent 74ffa39 commit 045b20c
Show file tree
Hide file tree
Showing 20 changed files with 37,164 additions and 426 deletions.
107 changes: 107 additions & 0 deletions TP_master/TP_2022-2023/TP01/TALN_master_TP01.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
% !TEX TS-program = pdflatex
% !TeX program = pdflatex
% !TEX encoding = UTF-8
% !TEX spellcheck = fr

\documentclass[11pt, a4paper]{article}
%\usepackage{fullpage}
\usepackage[left=1cm,right=1cm,top=1cm,bottom=2cm]{geometry}
\usepackage[fleqn]{amsmath}
\usepackage{amssymb}
%\usepackage{indentfirst}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french,english]{babel}
\usepackage{txfonts}
\usepackage[]{graphicx}
\usepackage{multirow}
\usepackage{hyperref}
\usepackage{parskip}
\usepackage{multicol}
\usepackage{wrapfig}

\usepackage{turnstile}%Induction symbole

\usepackage{tikz}
\usetikzlibrary{arrows, automata}
\usetikzlibrary{decorations.pathmorphing}

\renewcommand{\baselinestretch}{1}

\setlength{\parindent}{24pt}


\begin{document}

\selectlanguage {french}
%\pagestyle{empty}

\noindent
\begin{tabular}{ll}
\multirow{3}{*}{\includegraphics[width=2cm]{../../../img/esi-logo.png}} & \'Ecole national Supérieure d'Informatique\\
& Master (2022-2023) \\
& Traitement automatique du langage naturel
\end{tabular}\\[.25cm]
\noindent\rule{\textwidth}{1pt}\\%[-0.25cm]
\begin{center}
{\LARGE \textbf{TP01 : Découverte de quelques outils TALN}}
\begin{flushright}
ARIES Abdelkrime
\end{flushright}
\end{center}
\noindent\rule{\textwidth}{1pt}

Dans ce TP guidé, nous allons développer quelques modèles pour l'analyse de sentiments (classement de textes).
Le dataset utilisé est un dataset d'analyse de sentiments dans le contexte de la finance (\url{https://www.kaggle.com/datasets/sbhatti/financial-sentiment-analysis}).
Nous allons utiliser \textbf{pandas}, \textbf{scikit-learn} et \textbf{nltk} :

\begin{verbatim}
import nltk
import numpy as np
import pandas as pd
from sklearn.metrics import classification_report
from sklearn.preprocessing import LabelBinarizer
from sklearn.neural_network import MLPClassifier
from sklearn.model_selection import train_test_split
from sklearn.feature_extraction.text import CountVectorizer
import re
token_pattern = re.compile(r'(?u)\b\w\w+\b')
tokenizer = token_pattern.findall
\end{verbatim}

\section{Préparation de données}

\begin{itemize}
\item Importer le dataset CSV fourni en utilisant \textbf{pandas} et afficher les 10 premiers échantillons.
\item Encoder les sentiments en utilisant \textbf{LabelBinarizer} pour avoir un encodage OneHot.
\item Diviser le dataset en entrainement et test, en utilisant \textbf{train\_test\_split}, la taille du test est 30\% et random\_state=0.
\item Entrainer un modèle de vectorisation \textbf{TF} sur le texte d'entrainement et vectoriser le.
\item En utilisant le même modèle, vectoriser le dataset de test.
\item Définir une fonction \textbf{tokenstem} qui prend un texte et qui utilise \textbf{tokenizer} pour avoir une liste des tokens ensuite elle génère une liste des tokens radicalisés en utilisant \textbf{nltk.stem.porter.PorterStemmer} et elle ne considère pas les tokens appartenant à \textbf{nltk.corpus.stopwords.words('english')}
\item Refaire les deux étapes précédentes, mais en limitant la taille du vecteur \textbf{max\_features = 3000} et en utilisant \textbf{tokenstem} comme \textbf{tokenizer}.
\item Refaire la même chose, mais sans limiter la taille du vecteur.

\end{itemize}

\section{Entrainement}

\begin{itemize}
\item Créer trois modèles de type \textbf{MLPClassifier} avec une couche cachée et un maximum d'iérations de 50.
\item Entrainer ces trois modèles sur les trois représentations vectorielles.
\item Prédire les classes en appliquant les trois modèles sur les trois représentations d'entrainement.
\item Afficher le rapport de classification en précisant \textbf{target\_names} à partir du modèle \textbf{LabelBinarizer} et en spécifiant \textbf{zero\_division=0}.

\end{itemize}

\section{Test}

\begin{itemize}
\item Prédire les classes en appliquant les trois modèles sur les trois représentations de test.
\item En utilisant \textbf{timeit}, calculer le temps de prédiction.
\item Afficher le rapport de classification en précisant \textbf{target\_names} à partir du modèle \textbf{LabelBinarizer} et en spécifiant \textbf{zero\_division=0}.

\end{itemize}


\end{document}
5,843 changes: 5,843 additions & 0 deletions TP_master/TP_2022-2023/TP01/data.csv

Large diffs are not rendered by default.

114 changes: 114 additions & 0 deletions TP_master/TP_2022-2023/TP02/TALN_master_TP02.tex
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
% !TEX TS-program = pdflatex
% !TeX program = pdflatex
% !TEX encoding = UTF-8
% !TEX spellcheck = fr

\documentclass[11pt, a4paper]{article}
%\usepackage{fullpage}
\usepackage[left=1cm,right=1cm,top=1cm,bottom=2cm]{geometry}
\usepackage[fleqn]{amsmath}
\usepackage{amssymb}
%\usepackage{indentfirst}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[french,english]{babel}
\usepackage{txfonts}
\usepackage[]{graphicx}
\usepackage{multirow}
\usepackage{hyperref}
\usepackage{parskip}
\usepackage{multicol}
\usepackage{wrapfig}

\usepackage{turnstile}%Induction symbole

\usepackage{tikz}
\usetikzlibrary{arrows, automata}
\usetikzlibrary{decorations.pathmorphing}

\renewcommand{\baselinestretch}{1}

\setlength{\parindent}{24pt}


\begin{document}

\selectlanguage {french}
%\pagestyle{empty}

\noindent
\begin{tabular}{ll}
\multirow{3}{*}{\includegraphics[width=2cm]{../../../img/esi-logo.png}} & \'Ecole national Supérieure d'Informatique\\
& Master (2022-2023) \\
& Traitement automatique du langage naturel
\end{tabular}\\[.25cm]
\noindent\rule{\textwidth}{1pt}\\%[-0.25cm]
\begin{center}
{\LARGE \textbf{TP02 : Implémentation d'une application TALN}}
\begin{flushright}
ARIES Abdelkrime
\end{flushright}
\end{center}
\noindent\rule{\textwidth}{1pt}

Nous voulons améliorer le modèle développé dans TP01.
Ce modèle a quelques inconvénients (rien n'est parfait).
Dans ce TP, vous devez étudier quelques limites de ce modèle (garder ceci pour le TP prochain) et les améliorer.


\section{Améliorations possibles}
Il faut au moins améliorer une chose sans détériorer le reste (une petite détérioration est acceptable).

\begin{itemize}
\item taille d'encodage : un modèle avec moins de paramètres est préférable
\item Précision (micro-avg)
\item Rappel (micro-avg)
\item Temps de test : utile lorsqu'on veut utiliser ce modèle avec une application qui doit être rapide comme moteur de recherche.
\end{itemize}

\section{Ressources utilisées}

\begin{itemize}
\item Vous pouvez changer d'algorithme d'apprentissage : utiliser les autres algorithmes de scikit-learn
\item Vous pouvez paramétrer le MLP existant : ajouter des couches, changer la fonction d'activation, etc.
\item Vous pouvez utiliser d'autres méthodes de vectorisation (quelques modèles entrainés sont fournis avec ce TP)
\end{itemize}

Voici une description des modèles fournis où :
\begin{itemize}
\item \textbf{Modèle} : le nom du modèle
\item \textbf{Algorithme} : l'algorithme utilisé pour entrainer le modèle
\item \textbf{vecteur} : la taille du vecteur de représentation
\item \textbf{fenêtre} : la fenêtre utilisée pour calculer le contexte d'un mot
\item \textbf{phrases} : est-ce que le modèle peut représenter les phrases
\item \textbf{mots} : est-ce que le modèle peut représenter les mots
\end{itemize}

\begin{tabular}{llllll}
\hline \hline
Modèle & Algorithme & vecteur & fenêtre & phrases & mots \\
\hline
gensim\_lsa\_100 & LSA & 100 & / & oui & oui \\
gensim\_lsa\_50 & LSA & 100 & / & oui & oui \\
gensim\_lsa\_10 & LSA & 100 & / & oui & oui \\

gensim\_word2vec\_100\_w2 & Word2Vec-CBOW & 100 & 2 & non & oui \\
gensim\_word2vec\_100\_w4 & Word2Vec-CBOW & 100 & 4 & non & oui \\
gensim\_word2vec\_50\_w2 & Word2Vec-CBOW & 50 & 2 & non & oui \\
gensim\_word2vec\_50\_w4 & Word2Vec-CBOW & 50 & 4 & non & oui \\
gensim\_word2vec\_10\_w2 & Word2Vec-CBOW & 10 & 2 & non & oui \\
gensim\_word2vec\_10\_w4 & Word2Vec-CBOW & 10 & 4 & non & oui \\

gensim\_word2vec\_100sg\_w2 & Word2Vec-Skip-gram & 100 & 2 & non & oui \\
gensim\_word2vec\_100sg\_w4 & Word2Vec-Skip-gram & 100 & 4 & non & oui \\
gensim\_word2vec\_50sg\_w2 & Word2Vec-Skip-gram & 50 & 2 & non & oui \\
gensim\_word2vec\_50sg\_w4 & Word2Vec-Skip-gram & 50 & 4 & non & oui \\
gensim\_word2vec\_10sg\_w2 & Word2Vec-Skip-gram & 10 & 2 & non & oui \\
gensim\_word2vec\_10sg\_w4 & Word2Vec-Skip-gram & 10 & 4 & non & oui \\

\hline \hline

\end{tabular}

Un tutoriel sur \textbf{gensim} est dans \url{https://github.com/projeduc/ESI_2CS_TALN/blob/master/tuto/CH06/encoding_python_gensim.ipynb}
\end{document}
Loading

0 comments on commit 045b20c

Please sign in to comment.