Avec NSFW.js, dans sa version bêta, les développeurs peuvent désormais inclure dans leurs applications un filtre côté client pour les contenus indécents. NSFW.js classe les images dans l’une des cinq catégories suivantes : Dessin, Hentai, Neutre, Porno, Sexy. NSFW catégorise les images avec un taux de précision de 90%.
NSFW.js est un module NPM, qui à partir d’un élément d’image ou d’un canevas, permet de calculer les probabilités pour que l’image appartienne à l’une des cinq catégories prédéterminées :
Une utilisation typique en mode client est la suivante :
// Classic import style
import * as nsfwjs from 'nsfwjs'
// or just use require('nsfwjs')
// Load files from the server to the client!
const model = await nsfwjs.load('/model/')
// Gimme that image
const img = document.getElementById('questionable_img')
// Classify the image
const predictions = await model.classify(img)
// Share results
console.log('Predictions: ', predictions)
Le modèle que NSFW.js utilise pour ses prévisions est chargé côté client. La fonction classify accepte une image en tant que paramètre et renvoie les prédictions calculées. Le modèle fait actuellement environ 20 Mo, ce qui peut poser problème aux utilisateurs de toute application mobile utilisant les fonctionnalités NSFW. Gant Laborde, le créateur de la bibliothèque, commente :
Il est mis en cache. Cependant, je suis d’accord. Les modèles doivent devenir plus petits.
NSFW peut s’intégrer de différentes manières dans la mise en œuvre d’une politique de modération du contenu. Il peut par exemple être utilisé comme pré-filtre, n’envoyant à l’équipe de modération que les contenus dépassant un seuil de probabilité d’appartenance à une catégorie sujette à modération.
NSFW utilise des algorithmes d’apprentissage pour calculer le modèle à partir duquel il effectue sa classification. Laborde explique :
il a été formé en utilisant beaucoup d’images de Reddit en fonction du sub. Avec environ 300k images, certains modèles sont apparus et c’est ce que le modèle détecte.
NSFW revendique un taux de réussite de 90% sur son ensemble de tests. Cependant, il ne parvient toujours pas à classer correctement les images qu’un humain évaluerait instantanément et avec précision. Laborde mentionne en outre que le modèle peut montrer des biais :
Le plus amusant, c’était que Jeffrey Goldblum continuait d’être mal classé, et le moins intéressant, c’était que le modèle était trop sensible aux femmes.
Les faux positifs peuvent toutefois ne pas constituer un problème important pour les applications de filtrage de contenu, à condition qu’il existe une couche humaine secondaire. Avec l’inclusion continue de plus de faux positifs dans le jeu de données d’apprentissage et la mise au point du modèle, la précision NFSW devrait continuer à augmenter.
Les cinq catégories sont définies comme suit :
- Dessin - sûr pour les dessins de travail (y compris les dessins animés)
- Hentai - dessins hentai et pornographiques
- Neutre - sans danger pour les images neutres au travail
- Porno - images pornographiques, actes sexuels
- Sexy - images sexuellement explicites, pas pornographiques
NFSW.js est disponible sous la licence open source MIT. Les contributions sont les bienvenues via le package GitHub.