Vous êtes sur la page 1sur 2

Réduction de la dimension et Clustering de documents

Important :
● Ce travail est à déposer au plus tard à 17h30 sur Moodle, sous l’UE « Finite Mixture Models » dans le
dossier « Dépôt du projet du 19-01 »
● Il doit être soumis sous la forme de notebook Python.
● Le rendu doit être complet : toutes les étapes doivent être rigoureusement commentées, y compris le
choix des paramètres des fonctions.
● Toute ressemblance entre projets rendus entraînera l'attribution de la note 0.
● Ce travail ne peut se faire qu’à 1 ou 2 personnes max.
● Les binômes doivent soumettre un fichier unique dans lequel leurs noms et prénoms doivent
être indiqués dans la première cellule.

Pour ce projet, vous explorerez 2 jeux de données contenant des articles de presse : NG20, qui présente
20 catégories différentes, et BBC News, comprenant 5 classes de sujets variés. Pour chaque jeu de
données, vous travaillerez avec 2 représentations vectorielles : 1) une matrice document-terme utilisant la
pondération TF-IDF et 2) des embeddings de documents générés à l'aide du modèle JoSE1.

Vous trouverez ces données dans les fichiers NG20_dataset.pickle et bbc_dataset.pickle. Pour
télécharger ces fichiers, lancez le code suivant :

!pip install requests


import requests, pickle
bbc_url = "https://cifre.s3.eu-north-1.amazonaws.com/bbc_dataset.pickle"
ng20_url = "https://cifre.s3.eu-north-1.amazonaws.com/ng20_dataset.pickle"
bbc_filepath, ng20_filepath = "bbc_dataset.pickle", "ng20_dataset.pickle"
response = requests.get(bbc_url)
with open(bbc_filepath, 'wb') as bbc_file:
bbc_file.write(response.content)
response = requests.get(ng20_url)
with open(ng20_filepath, 'wb') as ng20_file:
ng20_file.write(response.content)
with open(bbc_filepath, 'rb') as bbc_file:
bbc_data = pickle.load(bbc_file)
with open(ng20_filepath, 'rb') as ng20_file:
ng20_data = pickle.load(ng20_file)
ng20_jose, bbc_jose = ng20_data["jose"], bbc_data["jose"]
ng20_tfidf, bbc_tfidf = ng20_data["tfidf"], bbc_data["tfidf"]
ng20_labels, bbc_labels = ng20_data["labels"], bbc_data["labels"]

Le modèle JoSE est un modèle très compétitif basé sur les distributions de von-Mises Fisher, qui s'est
avéré pertinent en termes de classification supervisée et de clustering de documents. L'objectif de ce projet
est d'utiliser les jeux de données proposés avec différentes représentations pour effectuer un clustering
en utilisant l'algorithme K-means combiné à des méthodes de réduction de dimension. Pour cela, nous
vous recommandons d'utiliser le package {scikit-learn} pour K-means et l'ACP. De plus, vous
explorerez la méthode UMAP pour la réduction de dimension en utilisant le package {umap-learn}. Pour
aller plus loin, vous explorerez l'algorithme CAEclust2, qui permet de combiner la réduction de dimension
à l'aide d'encodeurs et le clustering basé sur K-means.
1. Quelle est la dimension de chaque dataset (nombre de documents, nombre de mots ou taille de la
dimension) ?
2. Appliquer l’ACP et UMAP sur les jeux de données en retenant 15 composantes.
3. Appliquer K-means sur les données réduites avec le vrai nombre de classes (5 pour BBC News et
20 pour NG20).
4. Comparer ces résultats avec les données initiaux (sans réduction de dimension) en s’appuyant sur
les mesures externes : NMI et ARI.
5. Appliquer CAEclust sur les jeux de données.

Important : Pour récupérer le package CAEclust, vous devez télécharger et décompresser le package
en utilisant le code suivant :

import requests
import zipfile
import io
url = “https://cifre.s3.eu-north-1.amazonaws.com/CAEclust_package.zip”
response = requests.get(url)
with open(“CAEclust.zip”, “wb”) as fichier_zip:
fichier_zip.write(response.content)
with zipfile.ZipFile(“CAEclust.zip”, “r”) as zip_ref:
zip_ref.extractall(‘CAEclust_package’)

Les données ont été préalablement intégrées dans ce package. Pour démarrer l'entraînement
et effectuer des prédictions sur les de données, exécutez simplement le code ci-dessous. Celui-ci
enregistre les résultats de chaque modèle dans le dossier nommée results.

import subprocess
notebook_path = "/content/CAEclust_package/notebooks"
datasets = ["BBC_TFIDF", "NG20_TFIDF", "BBC_JOSE", "NG20_JOSE"]
for data in datasets:
command = f"cd {notebook_path} && python evaluation.py -data {data}"
process = subprocess.Popen(command, shell=True, stdout=subprocess.PIPE,
stderr=subprocess.PIPE)
stdout, stderr = process.communicate()
print(stdout.decode())
if stderr:
print(stderr.decode())

6. Comparer les résultats de CAEclust avec les autres méthodes.


7. Visualiser les clusters du modèle le plus performant en utilisant l’ACP et UMAP.
8. Questions optionnelles :
a. Une étude sur l'impact du nombre de voisins choisis dans la méthode UMAP sera appréciée.
b. L'utilisation d'un algorithme de clustering supplémentaire ou l’analyse du problème du nombre de
clusters peuvent également bonifier votre projet.

Références
1. Meng, Y., Huang, J., Wang, G., Zhang, C., Zhuang, H., Kaplan, L., & Han, J. (2019). Spherical text embedding.
Advances in neural information processing systems, 32.
2. Affeldt, S., Labiod, L., & Nadif, M. (2022). CAEclust: A consensus of autoencoders representations for
clustering. Image Processing On Line, 12, 590-603.

Vous aimerez peut-être aussi