« VandalBot » : différence entre les versions

De Wikipast
Aller à la navigation Aller à la recherche
Aucun résumé des modifications
Aucun résumé des modifications
 
(26 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 6 : Ligne 6 :




L’idée derrière ce bot est d’utiliser le machine learning pour identifier une page qui est susceptible d'avoir été créer par un bot "malveillant". Nous avons décidé de résoudre ce problème en utilisant le [https://en.wikipedia.org/wiki/Machine_learning machine learning], plus précisément le [https://en.wikipedia.org/wiki/Deep_learning deep learning], en utilisant un [https://en.wikipedia.org/wiki/Recurrent_neural_network  réseau de neurone récurrent], car il présente plusieurs aspects interessants:
Le but ce bot est d'identifier les pages qui sont susceptibles d'avoir été créées par des bot "malveillants". Nous avons décidé de résoudre ce problème en utilisant le [https://en.wikipedia.org/wiki/Machine_learning machine learning], plus précisément le [https://en.wikipedia.org/wiki/Deep_learning deep learning], en utilisant un [https://en.wikipedia.org/wiki/Recurrent_neural_network  réseau de neurone récurrent], car il présente plusieurs aspects intéressants:
* contrairement à un bot se basant sur des règles prédéfinies, notre bot sera capable de s'adapter au nouveau type de bot vandal qui pourraient apparaître sur le wikipast (nouvelles langues, nouvelles syntax, ...)
* contrairement à un bot se basant sur des règles prédéfinies, notre bot sera capable de s'adapter au nouveau type de bot vandal qui pourraient apparaître sur le wikipast (nouvelles langues, nouvelles syntaxes, ...)
* au fur et à mesure de l'evolution du wikipast, le réseau pourra être de nouveaux entrainé afin de mieux détecter les pages d'origine vérifiée (pages créées par le professeur, les étudiants, ou par les futures bots developés dans le cadre du cours).
* au fur et à mesure de l'évolution du wikipast, le réseau pourra être de nouveau entraîné afin de mieux détecter les pages d'origine vérifiées (pages créées par le professeur, les étudiants, ou par les futurs bots développés dans le cadre du cours).
Nous avons décider d'utiliser un réseau neuronal récurrent car il est l'un des plus populaires, et probablement un des plus performants pour faire du text classification.
Nous avons décider d'utiliser un réseau neuronal récurrent car il est l'un des plus populaires, et probablement un des plus performants pour faire du text classification.
Nous avons choisi d'utiliser comme [https://en.wikipedia.org/wiki/Loss_function loss function] le [https://en.wikipedia.org/wiki/F1_score f-score] de notre réseau, afin de minimiser le nombre de faux positifs et de maximiser le nombre de vrai négatifs (le plus importants étant avant tout de ne pas enlever de pages vérifiées, en enlevant le plus de pages non-vérifiées possible).
Nous avons choisi d'utiliser comme [https://en.wikipedia.org/wiki/Loss_function loss function] le [https://en.wikipedia.org/wiki/F1_score f-score] au lieu du traditionel binary crossentropy, afin de minimiser le nombre de faux positifs et de maximiser le nombre de vrai positifs (le plus importants étant avant tout de ne pas enlever de pages vérifiées, en enlevant le plus de pages non-vérifiées possible).


Lorsque le bot identifie une page susceptible d'avoir été créée par un bot, ce dernier la signalera en y ajoutant le flag ci dessous, et se sera alors au modérateur de décider de l’avenir de la page.
Lorsque le bot identifie une page susceptible d'avoir été créée par un bot, ce dernier l'ajoutera à la liste de page reconnu par notre réseau comme étant des pages vandales.
FLAG
 
L'algorithme général est expliquer ci dessous:
L'algorithme général est expliqué ci-dessous:
* nous avons d’abord récupéré dans une liste tous les usernames des utilisateurs certifiés (à savoir les étudiants, les modérateurs et leurs bots), et les pages qui leurs sont associées. On a fait de même avec des utilisateurs et pages que nous suspectons avoir été publiées par des bots malveillants, en générant des pages aléatoirement, et en vérifiant qu’elles n’appartiennent pas à la liste précédente.
* nous avons d’abord récupéré dans une liste tous les usernames des utilisateurs certifiés (à savoir les étudiants, les modérateurs et leurs bots), et les pages qui leurs sont associées. On a fait de même avec des utilisateurs et pages malveillants, en générant des pages aléatoirement, et en vérifiant qu’elles n’appartiennent pas à la liste précédente.
* à chaque page nous avons assigné un boolean, (true = bot, false = utilisateur certifiés) afin d’avoir une base de donnée sur laquelle le réseau neuronal peut s’entraîner.
* à chaque page nous avons assigné un boolean, (true = spambot, false = utilisateur certifié) afin d’avoir une base de donnée sur laquelle le réseau neuronal peut s’entraîner.
* le réseau neuronal est ensuite entrainé avec l'ensemble  des pages récupérées
* le réseau neuronal est ensuite entraîné avec l'ensemble  des pages récupérées.
* une fois le réseau entrainé, il nous suffit de paser le contenu d'une page à notre réseau qui déterminera si oui ou non cette page a été créée par un bot malveillant. Si tel est le cas, notre bot flag la page comme étant potentiellement du spam.
* une fois le réseau entraîné, il nous suffit de passer le contenu d'une page à notre réseau qui déterminera si oui ou non cette page a été créée par un bot malveillant.  
* la page est ensuite marquer avec le flag définit précédemment et ajouter à la liste des pages flaguer ([[]])
* les pages détectées comme étant du spam sont ensuite ajoutées à une [[Suspicious pages|page]] contenant la liste de tous les spams.


==Performances==
==Performances==
L'evaluation de notre réseau s'est fait de la manière suivante : nous avons récupéré 114 pages au hasard ce qui représentait 86 pages spam et 28 non spam. Sur ces 114 pages nous avons obtenu les résultats suivants:
* 3 faux négatifs
* aucun faux positif
* 83 vrais négatifs
* 28 vrais positifs
Le F1-score est de 0.98.
L'objectif d'obtenir le moins de faux positifs possible semble avoir été atteint ! Le temps d'évaluation d'une page est d'environ 8 secondes sur un CPU Intel® Core™ i7-8550U (possibilité d’accélérer avec un GPU).


==Exemples de résultats==
==Exemples de résultats==
[[Fichier:Supspicious_pages.png|700px]]


Les résultats sont disponibles à la [[Suspicious pages|page suivante]]. Cette page liste tous les liens des pages ayant été reconnues comme vandales par notre bot. Il suffit à un administrateur de supprimer toutes les pages listées sur cette page (en vérifiant très rapidement au préalable qu'elle correspondent bien à des pages vandales).
==Code==
==Code==


Le code source est disponible sur [https://github.com/vood00child/VandalBot Github]
Le code source est disponible sur [https://github.com/vood00child/VandalBot Github]

Dernière version du 22 mai 2018 à 12:33

Résumé des fonctionnalités

Lutte activement contre les nombreux SPAMBot qui assiègent Wikipast.

Description technique

Le but ce bot est d'identifier les pages qui sont susceptibles d'avoir été créées par des bot "malveillants". Nous avons décidé de résoudre ce problème en utilisant le machine learning, plus précisément le deep learning, en utilisant un réseau de neurone récurrent, car il présente plusieurs aspects intéressants:

  • contrairement à un bot se basant sur des règles prédéfinies, notre bot sera capable de s'adapter au nouveau type de bot vandal qui pourraient apparaître sur le wikipast (nouvelles langues, nouvelles syntaxes, ...)
  • au fur et à mesure de l'évolution du wikipast, le réseau pourra être de nouveau entraîné afin de mieux détecter les pages d'origine vérifiées (pages créées par le professeur, les étudiants, ou par les futurs bots développés dans le cadre du cours).

Nous avons décider d'utiliser un réseau neuronal récurrent car il est l'un des plus populaires, et probablement un des plus performants pour faire du text classification. Nous avons choisi d'utiliser comme loss function le f-score au lieu du traditionel binary crossentropy, afin de minimiser le nombre de faux positifs et de maximiser le nombre de vrai positifs (le plus importants étant avant tout de ne pas enlever de pages vérifiées, en enlevant le plus de pages non-vérifiées possible).

Lorsque le bot identifie une page susceptible d'avoir été créée par un bot, ce dernier l'ajoutera à la liste de page reconnu par notre réseau comme étant des pages vandales.

L'algorithme général est expliqué ci-dessous:

  • nous avons d’abord récupéré dans une liste tous les usernames des utilisateurs certifiés (à savoir les étudiants, les modérateurs et leurs bots), et les pages qui leurs sont associées. On a fait de même avec des utilisateurs et pages malveillants, en générant des pages aléatoirement, et en vérifiant qu’elles n’appartiennent pas à la liste précédente.
  • à chaque page nous avons assigné un boolean, (true = spambot, false = utilisateur certifié) afin d’avoir une base de donnée sur laquelle le réseau neuronal peut s’entraîner.
  • le réseau neuronal est ensuite entraîné avec l'ensemble des pages récupérées.
  • une fois le réseau entraîné, il nous suffit de passer le contenu d'une page à notre réseau qui déterminera si oui ou non cette page a été créée par un bot malveillant.
  • les pages détectées comme étant du spam sont ensuite ajoutées à une page contenant la liste de tous les spams.

Performances

L'evaluation de notre réseau s'est fait de la manière suivante : nous avons récupéré 114 pages au hasard ce qui représentait 86 pages spam et 28 non spam. Sur ces 114 pages nous avons obtenu les résultats suivants:

  • 3 faux négatifs
  • aucun faux positif
  • 83 vrais négatifs
  • 28 vrais positifs

Le F1-score est de 0.98.

L'objectif d'obtenir le moins de faux positifs possible semble avoir été atteint ! Le temps d'évaluation d'une page est d'environ 8 secondes sur un CPU Intel® Core™ i7-8550U (possibilité d’accélérer avec un GPU).

Exemples de résultats

Supspicious pages.png

Les résultats sont disponibles à la page suivante. Cette page liste tous les liens des pages ayant été reconnues comme vandales par notre bot. Il suffit à un administrateur de supprimer toutes les pages listées sur cette page (en vérifiant très rapidement au préalable qu'elle correspondent bien à des pages vandales).

Code

Le code source est disponible sur Github