La réalité qu'il y a environ 4,54 milliards d'internet (juin 2020) dans le monde en générant une quantité sans précédent de contenu n'augmente que l'envie de trouver une approche pour optimiser la modération du contenu. Et cette tâche devient plus lourde par les faits que le nombre d'utilisateurs actifs se casse constamment, que les volumes de contenu augmentent également de façon exponentielle, l'apprentissage automatique et l'IA peuvent être très chers et la modération manuelle prend beaucoup de temps et retardée dans le temps.
Alors maintenant, nous sommes à un point où toute plate-forme qui permet un contenu généré par l'utilisateur est confronté à un problème similaire. Heureusement, l'apprentissage automatique a déjà mûri au point où les progrès de la puissance de traitement informatique, du stockage, des outils de données, du Web, etc. ont fait des technologies d'apprentissage automatique pour devenir de plus en plus abordables. Ceci et la constante efforcent pour l'innovation, a conduit l'équipe de Sashido à créer ce service de modération de contenu entièrement simple et élégant construit avec uniquement des outils et bibliothèques open source . Il se compose de trois composants principaux - API REST de classification d'image, moteur d'automatisation et panneau d'administration, qui peut être intégré séparément ou complètement dans n'importe quel projet Node.js de serveur Parse et hébergé n'importe où.
Un simple illustartion de notre panneau d'administration de bureau et adapté aux mobiles. Vérifiez la démo complète ici.
Les images affichées pour l'approbation de l'application Admin sont celles qui sont signalées pour la modération manuelle du moteur d'automatisation en fonction de vos critères spécifiques.
Voici quelques exemples de la façon dont les images de classes spécifiques sont classées par l'API REST.
Source d'image | Source d'image | Source d'image |
---|---|---|
Résultat de la classification | Résultat de la classification | Résultat de la classification |
[{ "ClassName": "Neutre", "Probabilité": 0,93821 }, { "classname": "dessin", "Probabilité": 0,05473 }, { "ClassName": "Sexy", "Probabilité": 0,00532 }, { "classname": "hentai", "Probabilité": 0,00087 }, { "ClassName": "porno", "Probabilité": 0,00085 }] | [{ "ClassName": "Sexy", "Probabilité": 0,99394 }, { "ClassName": "Neutre", "Probabilité": 0,00432 }, { "ClassName": "porno", "Probabilité": 0,00164 }, { "classname": "dessin", "Probabilité": 0,00006 }, { "classname": "hentai", "Probabilité": 0,00001 }] | [{ "classname": "dessin", "Probabilité": 0,96063 }, { "ClassName": "Neutre", "Probabilité": 0,03902 }, { "classname": "hentai", "Probabilité": 0,00032 }, { "ClassName": "Sexy", "Probabilité": 0,00001 }, { "ClassName": "porno", "Probabilité": 0,00005 }] |
Démo neutre | Démo sexy | Démo de dessin |
Ce service est construit dans Node.js avec Mongo DB et Parse Server. Vous pouvez l'utiliser dans une application Express standard, mais gardez à l'esprit que la structure de fichier du dépôt est spécifique à l'analyse. Le code est organisé dans un dossier src
et src/cloud/main.js
est le fichier racine du service. React Vizualisation Logic se trouve respectivement dans le dossier scr/react
.
L'API REST fonctionne avec la classification NSFW.JS, qui utilise des modèles pré-formés TensorFlow. Compte tenu d'une URL, il renvoie les prédictions à quel point l'image tombe probable dans chacune des classes - dessin, neutre, sexy, porno et hentai. Plus de détails sur la logique derrière et la pile utilisée que vous pouvez trouver dans cet article de blog.
L'API propose deux approches pour classer les images - à partir d'une route express ou directement à partir d'une fonction de code cloud à l'aide des SDK Parse ou de l'API REST PARSE.
Classifier à partir du point de terminaison express
curl http://localhost:1337/api/image/classify?url=https://nsfw-demo.sashido.io/sexy.png
Classifier à partir d'un NSFWimageClassifier Fonction de code cloud - Exemple API REST.
curl -X POST
-H "X-Parse-Application-Id: myAppId"
-H "X-Parse-REST-API-Key: myRestApiKey"
--data-urlencode "{"url":"https://nsfw-demo.sashido.io/sexy.png"}"
http://localhost:1337/functions/nsfwImageClassify
Le but du moteur d'automatisation est de vérifier comment la classification d'une certaine image correspond aux paramètres que vous avez définis en toute sécurité pour votre projet. Le processus est automatisé avec un déclencheur AfterSave du serveur d'analyse.
Au début, il est essentiel de définir laquelle des cinq classes et valeurs NSFW peuvent contenir des images toxiques et lesquelles sont sûres. Toutes les classes qui pourraient être dérangeantes pour votre public devraient être incluses dans les préférences de modération.
Pour illustrer quelle est l'idée et la configuration, imaginons que nous devons définir les critères de l'application de rencontres de l'adulte. Comme n'importe quelle application de rencontres, les utilisateurs ont une photo de profil et sont autorisés à télécharger différentes photos. Nous pouvons supposer que le type de photos devrait être principalement neutre ... et peut-être que certaines photos sexy seront également autorisées. Nous allons donc ajouter toutes les autres classes à nos préférences de modération. Quelque chose comme:
{
"Sexy": { "min": 0.6, "max": 1 },
"Drawing": { "min": 0.5, "max": 0.8 },
"Porn": { "min": 0.4, "max": 0.8 },
"Hentai": { "min": 0.2, "max": 0.8 }
}
Le moteur d'automatisation rejetra automatiquement toutes les images qui sont classées au-dessus de l'ensemble de limite max
dans nos préférences et approuvent tout ce qui est en dessous de la valeur min
.
Plus de détails sur la façon d'adapter les paramètres de votre projet que vous pouvez trouver dans l'article ici.
Les préférences de modération seront enregistrées dans un paramètre de configuration ModerationsCores pour l'application de production, car cela vous permettra de les modifier à la volée si nécessaire.
Un déclencheur après-survale est accroché à la collection générée par l'utilisateur vérifie automatiquement les photos de nouvelles téléchargements et les marque en toute sécurité, supprimée ou pour modération. L'après-rapport contient une logique pour faire correspondre la façon dont la classification API d'une image correspond aux préférences de modération définies. Sur la base de toutes les données adoptées, la décision est prise et le résultat est enregistré dans votre base de données.
Pour conserver un enregistrement soigné des prévisions API et des résultats du moteur d'automatisation, vous devrez ajouter quelques colonnes à votre collection de bases de données qui contient du contenu généré par l'utilisateur .
Vous devez ajouter les colonnes suivantes à la période utilisateur
min
de vos préférences de modération, il est marqué isSafe - true
.deleted - true
. Ces images ne seront pas automatiquement supprimées du stockage de fichiers.L'absence de surse-ale tire automatiquement, mais nous avons ajouté un point de terminaison API supplémentaire, au cas où vous auriez besoin de vérifier le manuelle si une image est toxique pour votre public.
curl http://YOUR_PARSE_SERVER_URL/api/image/is_safe?url=https://nsfw-demo.sashido.io/sexy.png
La touche finale est une application d'administration basée sur ReactJS ordinaire. Il a une fonction de connexion / déconnexion simple et seuls les modérateurs approuvés ont accordé un accès.
Les images qui sont signalées par le moteur d'automatisation comme moderationRequired=true
sont affichées dans l'application. Nous nous sommes assurés de construire à la fois l'interface utilisateur de bureau et convivial, afin que vous puissiez approuver ou rejeter facilement les images même à partir de votre téléphone en voyage.
Testez par vous-même en jouant avec les images à notre démo!
Node.js> = 10.2.1
Mongo DB
Serveur d'analyse
Cloner le repo:
git clone https://github.com/SashiDo/content-moderation-application.git
cd content-moderation-application
Copiez l'env.example dans le fichier .env et définissez les variables d'environnement pour votre environnement local avec votre éditeur préféré:
cp env.example .env
Placez votre URI MongoDB et vos fichiers. Si votre application est hébergée à Sashido, vous pouvez utiliser les informations d'identification de votre projet Sashido. Vous pouvez trouver toutes les touches et URL au tableau de bord de l'application -> Paramètres de l'application.
NB! Pour charger des images qui nécessitent une modération manuelle dans l'application d'administration localement, vous devrez placer également l'App_id réel!
Comme il s'agit d'un exemple complet, toutes les dépendances sont présentes au package.json. Vous n'avez qu'à courir:
npm install
npm run dev
Définissez le PARSE.Configs suivant pour votre serveur de production.
MODERATIONSCORES L'objet doit être enregistré en tant que Parse.config, de sorte que les préférences peuvent être mises à jour à la volée.
Option d'automatisation de modération du type booléen qui permet d'activer / désactiver l'automatisation de la modération du contenu.
Pour la production, vous devez définir l' URL du modèle NSFW , la taille de la forme du modèle NSFW et la variable pour la mise en cache des configurations d'automatisation .
URL du modèle | Taille | Taille de forme | Précision |
---|---|---|---|
https://ml.files-sashido.cloud/models/nsfw_inception_v3/ | Énorme | 299 | 93% |
https://ml.files-sashido.cloud/models/nsfw_mobilenet_v2/90/ | 2,6 Mb | 224 | 90% |
https://ml.files-sashido.cloud/models/nsfw_mobilenet_v2/93/ | 4,2 Mb | 224 | 93% |
Veuillez noter que le modèle INCECPED_V3 utilisé pour ces projets a une consommation élevée RAM / CPU. Tandis que les deux modèles MobileNet sont beaucoup plus légers.
TF_MODEL_URL = MODEL_URL
TF_MODEL_INPUT_SHAPE_SIZE = MODEL_SHAPE_SIZE
CONFIG_CACHE_MS = CONFIG_CAHE_IN_MILISECONDS
# Example
TF_MODEL_URL = " https://ml.files-sashido.cloud/models/nsfw_mobilenet_v2/93/ "
TF_MODEL_INPUT_SHAPE_SIZE = 224
CONFIG_CACHE_MS = 10000
Connectez votre application Sashido avec GitHub et ensuite le code peut être facilement déployé avec deux commandes simples pour ajouter une branche distante et pousser des modifications.
git remote add production [email protected]:parsegroundapps/<your-pg-app-your-app-repo>.git
git push -f production master
Merci d'avoir examiné cette section. Nous sommes ouverts à toutes les idées intéressantes, donc si vous en avez une et que vous êtes prêt à partager - à débarquer le dépôt, appliquer les modifications et ouvrir une demande de traction. :)
Copyright © 2020, Cloudstrap AD. Voir la licence pour plus de détails.