IFT3150 - Projet en traitement automatique du langage naturel



Détection de dépression sur Twitter en utilisant l'apprentissage machine

Par Abdel Ghani Labassi

Supervisé par Prof. Jian-Yun Nie



Code

GitHub Repo

Sommaire

Énoncé du projet

La dépression et le suicide sont devenus des problèmes de plus en plus préoccupants dans notre société. Une détection à temps de ces problèmes peut aider à sauver des vies. Le travail de ce projet consiste à explorer la possibilité de détecter des signaux de dépression et de suicide sur les réseaux sociaux où beaucoup d'internautes échangent des informations et leurs pensées. Des personnes ayants la dépression ou des idées suicidaires peuvent les exprimer sur les réseaux sociaux. Notre travail est une étude de faisabilité dans l'automatisation de cette détection. Le projet est subventionnée par L'Agence de la santé publique du Canada via une subvention à l'entreprise Sightline avec qui des chercheurs de McGill et de l'UdeM collaborent.

La tâche de détection peut être vue comme une tâche de classification: est-ce qu'un post sur Twitter (un tweet) montre des signaux de dépression ou de suicide? Pour cela, nous allons explorer différents types d'informations: les mots dans le post, le sentiment que ces mots expriment, les caractéristiques de l'utilisateur (e.g. fréquence d'utilisation de Twitter), le cercle d'amis sur Twitter, etc. Ces informations seront extraites à partir des données de Twitter en utilisant l'extraction de l'information et des outils de traitement de langue naturelle. Parmi les techniques de classification envisagées, nous allons tester des techniques de classification classiques comme Naive Bayes, l'arbre de décision, mais aussi les techniques d'apprentissage profond (e.g. représenter des mots par des embeddings). Ces techniques, supervisés, devront être investigués seulement l'annotation des données complétés par des chercheurs de McGill. En attente de cela, je vais explorer la fesabilité d'une telle détection en utilisant les techniques non-supervisées, en ajoutant comme information supplémentaire la polarité émotionnelle, information accessible via un classificateur entrainé sur le jeu de donnée Sentiment140 .

Description détaillée

J'utiliserai la librairie Scikit-learn pour les techniques d'apprentissages classiques, PyTorch pour l'implémentation de réseaux de neuronnes "non-standards", et Keras pour l'implémentation de réseaux de neuronnes "standards". Pour les contraintes matériels, j'aurai accès à des GPU puissantes lorsqu'il s'agira d'entraîner les modèles, via Google Colab. Pour la phase de developpement logiciel, une machine ample suffit, et je developperai dans l'IDE Spyder.

J'envisage me familiariser avec les techniques non-supervisées, et en particulier, implémenter le modèle proposé dans l'article Short Text Clustering via Convolutional Neural Networks (Xu) (CNN modélisateur) à l'aide de PyTorch et Scikit Learn.

Pour obtenir un classificateur entrainé pour analyser la polarité émotionnelle, j'ai décidé d'implémenter le CNN décrit dans l'article Convolutional Neural Networks for Sentence Classification (Kim) (CNN classificateur) , que j'entrainerai avec le jeu de donné Sentiment140, contenant 1.6 millions de tweets annotées.

Plan de développement

Date de début: 10 septembre
Date de fin : 1er décembre
Date de présentation : à confirmer

Plan pour le mois de septembre (avant l'annotation des données) :

À planifier :

Rapports d'avancement

Semaine 2 : 9 au 16 septembre

Objectif :

Bilan :
les objectifs ont tous étés réalisés. Un résumé du modèle sera décrite dans le rapport finale, de même que sur la méthode des k-means.

Semaine 2 : 16 au 23 septembre

Objectif :

Bilan:
J'ai décidé de commencé par l'implémentation de l'embeddeur binaire, car il est nécessaire au fonctionnement du réseaux de neuronnes. J'ai été contraint à me documenter sur la méthode du "Laplacian Eighenmap" (que je résumerai dans le rappport final) pour résoudre le problème d'optimisation permettant d'avoir le code binaire. Je me suis documenté sur son implementation sur sklearn, portant le nom de "spectral embedding". La bibliothèque propose des choix de matrices de similarités différentes que celle proposé dans l'article. J'ai donc été contraint d'implémenter le calculateur de matrices de similarités manuellement. Ensuite, j'ai testé l'embeddeur binaire sur le dataset "The Digit Dataset", et les résultats furent prometteur : en utilisant le code binaire avec dimension q=10, soit 6 fois moins de features que les features original (8x8=64), l'accuracy fut de 86% (réduit) vs 88% (original) avec Naive Bayes. Je n'ai pas eu le temps de commencer l'implémentation du CNN modélisateur.

Semaine 3 : 23 au 30 septembre

Objectif :

Bilan:
J'ai fini l'implémentation du CNN modélisateur. J'ai toutefois sous-estimé le temps que cela me prendrait : l'article décrivait de manière très "haut niveau" le fonctionnement du CNN. J'ai donc du me documenter plus en profondeur sur l'architecture du modèle proposé, et j'ai donc lu l'article A Convolutional Neural Network for Modelling Sentences (Kalchbrenner) qui décrivait la même architecture que celle proposé dans Xu . Cela m'a permis d'appronfondir mes connaissances sur les architectures des réseaux de neuronnes utilisé pour modeliser des phrases (et non pas pour les classifier). En particulier, j'ai implémenté le "Dynamic k-Max Pooling" tel que expliqué dans Kalchbrenner à l'aide de Pytorch.

Semaine 4 : 1 au 7 octobre

Objectif :

Bilan:
J'ai réalisé qu'il fallait beaucoup de travail pour entrainer le réseau de neuronne. J'ai commencé à me documenter sur cela, en particulier comment entrainer les réseaux de neuronnes pour la modélisation de phrase. Je n'ai pas pu receuillir le dataset cible car on attend toujours les comités éthiques.

Semaine 5 : 7 au 14 octobre

Note: je planifie mettre moins de temps cette semaine pour le projet, en raison de la mi-session.
Objectif :

Bilan:
J'ai codé la fonction train_model, toutefois, l'apprentissage ne se fait pas comme prévue : le loss ne diminue pas. Je vais régler ce problème après la semaine de relache.

Semaine 5 : 14 au 21 octobre

Note: je planifie mettre moins de temps cette semaine pour le projet, en raison de la mi-session.
Objectif :

Bilan:
Tout a été réalisé.

Semaine 5 : 21 au 30 octobre

Objectif :

Remarque :
Le but étant de clusterer des tweets en tant que dépressive/non dépressive, j'ai alors codé un classificateur de polarité de phrase. Ce classificateur permettrai donc d'évaluer avec certitude relativement grande la polarité émotionelle d'un tweet. Cette information peut être rajouté aux tweets pour permettre un clustering de meilleur qualité.
J'ai décidé d'implémenté le CNN classificateur de Kim . En effet, un CNN est plus facile à entrainer qu'un RNN, et fournirai une meilleur performance sur des tâches de classification ( Text Classification — RNN’s or CNN’s?).

Bilan :
J'ai lu les articles cité dans l'objectif
J'ai implémenté le CNN classificateur décrit par Kim. Après avoir ajuster les hyperparamètres, j'obtiens une accuracy de 80.3%
J'ai corrigé le bug de la fonction train_model pour le CNN modélisateur : le problème était que j'appliqué un softmax au lieu d'appliquer un sigmoid à la dernière couche. En effet, entrainer ce CNN avec comme code binaire à la "output layer" peut être vue comme un problème de classification multiclasse, mais avec classe multiple, pour une instance donnée !

Semaine 5 : 1 au 7 novembre

Cette semaine, j'ai rencontré le chercheur PhD. Pan Du, du RALI, qui travail sur le projet. Il m'a demander de lire un segment d'article non publié sur la selection d'attributs spécifiquement dans le contexte de l'analyse de sentiment. Il m'a aussi demander de finir le clusterer du modèle de Xu. Les résultats de clustering pourront être incorporés comme attributs une fois les données annotées. On a aussi discuté des idées sur comment utilisé le classificateur de polarité émotionnelle, et d'aprés lui, le mieux serait de "fine-tuner" le classifier une fois les données annotés.

Bilan :
J'ai implémenter l'algorithme de clustering. J'ai choisi le Spectral Clustering. Le modèle de Xu est donc prêt à être testé.
J'ai été mis en contact avec la compagnie SightLine. J'ai maintenant accès aux données brutes non-annotées via leur serveur.

Semaine 5 : 7 novembre À FIN DE LA SESSION

Ayant consacré beaucoup trop de temps sur le projet au détriment de mes autres cours, je vais plus me concentrer sur mes autres cours et ce jusqu'à la fin de la session. Je crains aussi ne pas avoir le temps de tester mon modèle. Cela ne fait rien, ma contribution est en open-source sur GitHub. J'ai une rencontre avec le chercheur PhD.Pan Du pour m'aider à m'orienter dans la rédaction de mon rapport. J'ai également un séminaire le 21 novembre sur la détection de dépression sur les résaux sociaux.

Semaine 6 : 14 novembre À 21 novembre

J'ai correspondu avec SightLine pour obtenir les données. J'attend leur réponse.

Semaine 7 : 21 novembre À 28 novembre

Sightline veut garder les données sur leurs serveurs. Je dois donc uploader mon repo pour pouvoir lancer le test. J'ai envoyé mon repo à Sightline, et j'attend qui le mettent sur le serveur.

Semaine 8 : 1 décembre au 7 décembre

Mon repo a été mis sur le serveur le 5 décembre. Toutefois, je ne peux encore tester le tout car les données ne sont pas encore prêtes. J'ai commencé le rapport, et j'ai commencé le rapport en laissant les résultats expérimentaux à blanc. Je remplirai ceux-ci vers Janvier, comme Prof. Nie me l'a recommandé.

Résumé du rapport final

On propose deux approches d'apprentissage machine pour la détection de depression sur Twitter : une approche non-supervisée et une approche supervisée.
L'approche non-supervisée présente un avantage majeure : il n'est point nécessaire de passer par la phase d'annotation, ce qui représente des économies en temps et en ressource humaine. Par contre, les techniques non-supervisées actuelle n'offre pas une grande accuracy lors de tâches de classification. Cela ne nous dérange pas trop car le but est une étude sur la faisabilité. De plus, les résultats obtenus ici pourront être utilisé pour un apprentissage supervisée. L'approche supervisée, si l'accuracy est à prioriser, semble la plus pertinente, comme le montre les récents travaux en classification de texte.
Ce rapport sera divisé en 2 chapitres principaux : l'un décrivant une approche non-supervisé et l'autre une approche supervisé. On donnera un résumé de la théorie ainsi qu'un compte rendu technique de l'implémentation de leur modèles respectifs.

Le rapport final est disponible à cette adresse