Implémenter un système de ban basé sur des flags utilisateurs

Les messages d'un utilisateur se font flagger à (haute|basse|moyenne) vitesse, then what?

L'auteur de ce sujet a trouvé une solution à son problème.
Staff
Auteur du sujet

Bonjour,

J'ai un système de chat :

  • Salons
  • Messages appartiennent à un salon
  • Utilisateurs sont dans des salons

J'ai un système de flags :

  • Utilisateur peut flagger des messages
  • Flag: op (la personne flaggée), user (la personne qui flag), message_id, time

J'ai une boucle :

  • computeBan() est exécuté toutes les n secondes sur le serveur

Maintenant, sur la base de ces flags, j'aimerais dans computeBan() implémenter un système de ban. Et j'ai besoin de votre aide, parce que je ne sais pas dans quelle direction partir. Notez bien que je cherche l'algo, la logique, l'idée. Techniquement, le système de ban est en place et fonctionne: computeBan() doit juste être responsable de la décision d'user.isBanned et de la durée du ban.

Des bonnes idées ?

Merci d'avance

Édité par victor

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+0 -0

Je reposte mon idée d'IRC (pour que les gens l'ameliorent ou l'invalide):

DOnc deux parties avec une qui prend le dessus (fonction la plus importante) :

Si : NbDeFlag > X ==> on ban user

Cependant pour simplifier le bordel sur des channels ou ya peu de monde :

Si NbDeFlag > Y (ou Y est un pourcentage du nombre de personne utilisant souvent le chat) ==> Ban

Ensuite il faudrait inclure un systeme qui va "nettoyer" les flags périodiquement avec un systeme :

Si pas de flag pendant une période Z ==> Alors supression de N flag toutes les x heures

+0 -0

Est-ce que tu as déjà des données pour faire des tests ?

Pourquoi t'embêtes-tu avec des flags ? As-tu essayé de filtrer en t'appuyant sur le contenu d'abord ?

Avec seulement les données que tu nous donnes ici, je ne garantis rien mais tu peux essayer un filtre bayésien classique, sauf qu'au lieu de prendre le contenu du spam comme attributs, tu prends les flags. L'avantage, c'est que c'est le même code que pour filtrer en t'appuyant sur le contenu, et tu peux même envisager de combiner les deux, je suppose.

Edit : remarque en passant que ce genre d'algorithme s'appuie sur une base d'apprentissage (il faut l'aider un peu au début), qui est un paramètre propre à ton application - donc même si l'algorithme est très connu, y compris par les spammers, il reste un paramètre qu'ils auront du mal à deviner, et qui est crucial pour prédire les réponses de ton programme (spam ou pas spam).

Édité par anonyme

+0 -0
Staff
Auteur du sujet

katana: Non, je n'ai pas encore de données de test. Je n'en aurai probablement pas avant d'avoir de sérieux problèmes de spam. D'où mon envie de me baser sur les flags et de leur donner un certain poids.

Et j'ai pas non plus essayé de filtrer le contenu. Ça me semble trop de travail, trop compliqué, pour trop de faux-positifs ou de faux-négatifs. Je préfère l'auto-modération par flag interposés.

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+0 -0

Merci alliocha1805 pour cette idée. Malheureusement, nombre de personne utilisant souvent le chat est une métrique qui n'est pas à ma disposition.

victor

Sinon tu peux utiliser une metrics comme "Nb de personne max en simultanée sur le chat sur l'année"

+0 -0

Pour ce type de système automatique, une solution qui me viendrait à l'idée serait de donner un poids à chaque messages de l’utilisateur défini par le pourcentage d'utilisateurs ayant flaggé un message et le temps écoulé.

Tu te fixe un seuil à ne pas dépasser et tu somme le poids des messages flaggé. Un message reporté par 10% du chat aura une valeur de base de 10, que tu multiplie par une valeur depuis le temps écoulé, par exemple 1 si le message est dans la minute, 0.9 la minute précédente etc…

Ainsi, si tu a un utilisateur qui perturbe périodiquement ton salon, il ne va pas se faire ban, mais si il enchaîne les fautes il va dépasser le seuil et le système le bannera.

Après les différentes valeurs sont à ajusté (la fonction de coef du temps, le seuil), mais je pense que c'est une piste possible.

+2 -0

Et j'ai pas non plus essayé de filtrer le contenu. Ça me semble trop de travail, trop compliqué, pour trop de faux-positifs ou de faux-négatifs. Je préfère l'auto-modération par flag interposés.

victor

Je comprends ça, mais des faux positifs théoriques tu risques d'en avoir avec toutes les méthodes. En tout cas ça force tes utilisateurs à voter avant que le spam ne soit éliminé, y compris si le même message est posté plusieurs fois. Au pire tu pourras toujours changer d'avis, mais c'est plus simple pour nous pour l'instant.

Bref, le filtre bayésien correspond peut-être quand même à ce que tu veux faire, sauf qu'au lieu d'utiliser les mots pour discriminer les messages (et de voir évoluer le poids de certains mots "caractéristiques" du spam), tu utilises les votes des utilisateurs (et tu fais évoluer le poids de certains utilisateurs à qui tu fais de plus en plus confiance au fur et à mesure qu'ils signalent le spam).

+0 -0
Staff
Auteur du sujet

fred1599 > Le nombre de personnes sur un salon à un instant t ? Le nombre de personnes au total sur le serveur ? J'ai peut-être simplement mal compris l'explication…

Merci katana, je vais me renseigner sur les filtres bayésiens.

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+0 -0
Staff

Essai de voir si tu peux pas avoir des données. Car même avant de parler d'apprentissage, avoir des données de "vérité terrain" te permettrait d'évaluer ton algo de manière propre et ne pas te baser sur une impression. Comment évaluer sinon que tel algorithme ou tel autre est le mieux ?

NB: tu devrais peut être aussi essayer de tenir compte de la sensibilité au flag des utilisateurs : est ce que l'avis d'un utilisateur qui flag beaucoup a plus ou moins d'importance qu'un utilisateur qui le fait pour la première fois ?

+0 -0

Je bannirais selon le nombre ou un pourcentage d'utilisateurs ayant souhaité bannir.

Dans ce cas il faudrait pour éviter une demande de ban plus d'une fois, vérifier que l'utilisateur n'a pas déjà fait une demande. Dans le cas où la demande a déjà été faite on n'ajoute pas au nombre de ban.

Enfin j'ai compris dans ce sens l'explication de Bibi, j'ai peut-être aussi mal compris

Édité par fred1599

+0 -0
Staff

Je pense que le problème est que le nombre d'utilisateur est variable. Tu peux arriver, flaguer et enfin un autre utilisateur arrive. Dans cet interval il y a eu :

  • Avant : N utilisateurs sur le sujet, M flag sur le message
  • Tu arrive : N+1 utilisateurs sur le sujet, M flag sur le message
  • Tu flague : N+1 utilisateurs sur le sujet, M+1 flag sur le message
  • Un autre membre entre : N+2 utilisateurs sur le sujet, M+1 flag sur le message
+0 -0
Staff
Auteur du sujet

Exactement Kje. Et mon chat est très très dynamique en ce sens. Le flux d'utilisateur joignant et quittant un salon est très rapide.

fred1599 > Oui, il y a un backlog de quelques (<= 500) messages.

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+0 -0

Je bannirais selon le nombre ou un pourcentage d'utilisateurs ayant souhaité bannir.

Le problème c'est que ça n'empêche pas les "attaques", auxquelles victor est assez sensible, de ce que j'ai compris. Si N+1 personnes s'inscrivent d'un coup et votent ensemble pour éliminer un message, c'est gênant. D'où cette remarque de Kje :

NB: tu devrais peut être aussi essayer de tenir compte de la sensibilité au flag des utilisateurs : est ce que l'avis d'un utilisateur qui flag beaucoup a plus ou moins d'importance qu'un utilisateur qui le fait pour la première fois ?

Et là aussi, filtres bayésiens, tout ça.

+0 -0
Staff

Perso je pense que ce qui manque c'est une définition précise du besoin. Tu nous demande des idées mais en soit on sait pas trop comment tu souhaite qu'il soit réglé. Il n'y a probablement pas de "bonnes" solution, tout dépendra de ton appréciation de la modération. Il y a probablement autant d'algos possible que de ligne directrice pour une équipe humaine de modération.

Je pense vraiment qu'avant de vouloir créer un tel algo il serait interessant de collecter des données. Un historique des flags émis et un indicateur, fixé par tes soins à la main, indiquant si tel ou tel message aurait dut être banni ou non. Tu peux par exemple te baser sur tes propres flags pour les considérer comme la vérité absolut.

Dans le monde du traitement de données, c'est le minimum. Il faut commencer par collecter les données. C'est chiant mais indispensable. Une fois que tu en aura un minimum, tu pourra au minimum évaluer les différents algorithmes pour voir ceux qui donnent les meilleurs résultats. SI tu en as beaucoup plus tu pourra faire de l'apprentissage. Mais sans données, point de solutions.

+0 -0
Staff
Auteur du sujet

Oui Kje. Des données je compte bien en récolter un max. Mais avant d'obtenir des données, je souhaite implémenter un truc moins naïf que:

Si l'op récolte n flags en x secondes, on le ban pour n² secondes

Je parle de JavaScript et d'autres trucs sur mon blog : https://draft.li/blog

+0 -0
Vous devez être connecté pour pouvoir poster un message.
Connexion

Pas encore inscrit ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte