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?

a marqué ce sujet comme résolu.

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

+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

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).

+0 -0

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.

+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.

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).

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.

+0 -0

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 ?

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

+0 -0

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

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.

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.

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

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

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