Die Realität, dass es ungefähr 4,54 Milliarden Internetnutzer (Juni 2020) weltweit gibt, die eine beispiellose Menge an Inhalten erzeugen, erhöht nur den Drang, einen Ansatz zur Optimierung der Inhalts Moderation zu finden. Und diese Aufgabe wird durch die Fakten, dass die Anzahl der aktiven Benutzer ständig durchdrungen ist, das Inhaltsvolumina exponentiell wachsen, maschinelles Lernen und KI können sehr teuer sein, und manuelle Moderation ist sehr zeitaufwändig und zeitlich verzögert.
Jetzt sind wir also an einem Punkt, an dem jede Plattform, die benutzergenerierte Inhalte zulässt, mit einem ähnlichen Problem konfrontiert ist. Glücklicherweise hat sich maschinelles Lernen bereits so weit gereift, dass Fortschritte in der Computerverarbeitungsleistung, des Speichers, der Datenwerkzeuge, des Webs usw. mehr und erschwinglicher wurden. Dies und das ständige Streben nach Innovation leiteten das Team von Sashido, diesen einfachen und eleganten voll funktionsfähigen Inhalts-Moderationsdienst zu erstellen, der mit nur Open-Source-Tools und -Bibliotheken erstellt wurde . Es besteht aus drei Hauptkomponenten - Bildklassifizierungs -REST -API, Automatisierungsmotor und Admin -Panel, die separat oder insgesamt in jedes Parse Server -Knoten.JS -Projekt integriert und überall gehostet werden können.
Eine einfache Illustration unseres Desktop- und Mobilfreundlichen Admin-Panels. Überprüfen Sie hier die vollständige Demo.
Die für die Genehmigung in der Admin -App angezeigten Bilder sind diejenigen, die für die manuelle Moderation der Automatisierungsmotor basierend auf Ihren spezifischen Kriterien gekennzeichnet sind.
Hier sind einige Beispiele dafür, wie Bilder aus bestimmten Klassen von der Rest -API klassifiziert werden.
Bildquelle | Bildquelle | Bildquelle |
---|---|---|
Klassifizierungsergebnis | Klassifizierungsergebnis | Klassifizierungsergebnis |
[{{{ "Klassenname": "Neutral", "Wahrscheinlichkeit": 0,93821 }, { "Klassenname": "Zeichnen", "Wahrscheinlichkeit": 0,05473 }, { "Klassenname": "sexy", "Wahrscheinlichkeit": 0,00532 }, { "Klassenname": "Hentai", "Wahrscheinlichkeit": 0,00087 }, { "Klassenname": "Porno", "Wahrscheinlichkeit": 0,00085 }] | [{{{ "Klassenname": "sexy", "Wahrscheinlichkeit": 0,99394 }, { "Klassenname": "Neutral", "Wahrscheinlichkeit": 0,00432 }, { "Klassenname": "Porno", "Wahrscheinlichkeit": 0,00164 }, { "Klassenname": "Zeichnen", "Wahrscheinlichkeit": 0,00006 }, { "Klassenname": "Hentai", "Wahrscheinlichkeit": 0,00001 }] | [{{{ "Klassenname": "Zeichnen", "Wahrscheinlichkeit": 0,96063 }, { "Klassenname": "Neutral", "Wahrscheinlichkeit": 0,03902 }, { "Klassenname": "Hentai", "Wahrscheinlichkeit": 0,00032 }, { "Klassenname": "sexy", "Wahrscheinlichkeit": 0,00001 }, { "Klassenname": "Porno", "Wahrscheinlichkeit": 0,00005 }] |
Neutrale Demo | Sexy Demo | Demo zeichnen |
Dieser Dienst ist in Node.js mit Mongo DB und Parse Server integriert. Sie können es in einer Standard -Express -App verwenden, aber bedenken Sie, dass die Dateistruktur des Repo spezifisch ist. Der Code ist in einem src
-Ordner organisiert und src/cloud/main.js
ist die Root -Datei für den Dienst. React Vizualisierungslogik liegt jeweils in den scr/react
-Ordner.
Die Rest-API arbeitet mit NSFW.JS-Klassifizierung, die TensorFlow-Vorausgeblätemodelle verwendet. Bei einer URL gibt es Vorhersagen zurück, wie wahrscheinlich das Bild in jeden der Klassen fällt - Zeichnung, neutral, sexy, Pornos und Hentai. Weitere Details zur Logik hinter und Stack, die Sie in diesem Blog -Beitrag finden können.
Die API bietet zwei Ansätze zur Klassifizierung von Bildern - von einer Expressroute oder direkt aus einer Cloud -Code -Funktion unter Verwendung eines der Parse SDKs oder der Parse Rest API.
Klassifizieren Sie aus dem Expressendpunkt
curl http://localhost:1337/api/image/classify?url=https://nsfw-demo.sashido.io/sexy.png
Klassifizieren Sie aus einer NSFWIMAGECLASIFIFY -Cloud -Code -Funktion - REST -API -Beispiel.
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
Der Zweck der Automatisierungsmotor besteht darin, zu überprüfen, wie die Klassifizierung eines bestimmten Bildes den Parametern entspricht, die Sie für Ihr Projekt als sicher festgelegt haben. Der Vorgang wird mit einem Parse Server AfterSave -Auslöser automatisiert.
Am Anfang ist es wichtig zu definieren, welche der fünf NSFW -Klassen und -Werte giftige Bilder enthalten können und welche sicher sind. Alle Klassen, die für Ihr Publikum störend sein könnten, sollten in die Moderationspräferenzen einbezogen werden.
Um zu veranschaulichen, was die Idee und das Setup ist, müssen wir uns vorstellen, dass wir die Kriterien für die Dating -App der Erwachsenen festlegen müssen. Als jede Dating -App haben Benutzer ein Profilbild und dürfen verschiedene Fotos hochladen. Wir können annehmen, dass die Art der Fotos hauptsächlich neutral sein sollte ... und vielleicht werden auch einige sexy Bilder erlaubt. Wir werden also alle anderen Klassen zu unseren Moderationspräferenzen hinzufügen. So etwas wie:
{
"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 }
}
Die Automation-Engine löst alle Bilder, die über dem in unseren Vorlieben festgelegten max
eingestuft sind, automatisch und genehmigen alles, was unter dem min
liegt.
Weitere Details zur Feinabstimmung der Parameter für Ihr Projekt, die Sie im Artikel hier finden.
Die Moderationspräferenzen werden in einem Moderationscores -Konfigurationsparameter für die Produktionsanwendung gespeichert, da Sie diese bei Bedarf im laufenden Fliegen ändern können.
Ein AfterSave-Auslöser ist an die von Benutzer erstellte Sammlung süchtig, überprüft automatisch neu hochgeladene Fotos und markiert sie entweder sicher, gelöscht oder mäßig. Der AfterSafe enthält die Logik für die Übereinstimmung mit der Art und Weise, wie die API -Klassifizierung eines Bildes den definierten Moderationspräferenzen entspricht. Basierend auf allen bestandenen Daten wird die Entscheidung getroffen und das Ergebnis in Ihrer Datenbank gespeichert.
Um die Ergebnisse der REST-API-Vorhersagen und der Automatisierungs-Engineergebnisse beizubehalten, müssen Sie Ihrer Datenbanksammlung einige Spalten hinzufügen, in denen benutzergenerierte Inhalte enthalten sind .
Sie sollten den folgenden Spalten zur userImageCollection hinzufügen
min
-Wert Ihrer Moderationspräferenzen liegt, ist es markiert isSafe - true
.deleted - true
. Diese Bilder werden nicht automatisch aus dem Dateispeicher gelöscht.Die AfterSave feuert automatisch aus, wir haben jedoch einen zusätzlichen API -Endpunkt hinzugefügt, falls Sie manuell überprüfen müssen, wenn ein Bild für Ihr Publikum giftig ist.
curl http://YOUR_PARSE_SERVER_URL/api/image/is_safe?url=https://nsfw-demo.sashido.io/sexy.png
Der letzte Touch ist eine einfache auf ReactJS-basierte Admin-Anwendung. Es verfügt über eine einfache Anmeldungs-/Abmeldungsfunktion und nur zugelassene Moderatoren erhalten Zugriff.
Die Bilder, die von der Automatisierungsmotor als moderationRequired=true
markiert werden, werden in der App angezeigt. Wir haben dafür gesorgt, dass sowohl Desktop- als auch mobilfreundliche Benutzeroberfläche erstellt werden, damit Sie Bilder auch von Ihrem Telefon auf Reisen einfach genehmigen oder ablehnen können.
Testen Sie sich selbst mit den Bildern bei unserer Demo!
Node.js> = 10.2.1
Mongo DB
Server analysieren
Klonen Sie das Repo:
git clone https://github.com/SashiDo/content-moderation-application.git
cd content-moderation-application
Kopieren Sie das Env.example in .Env -Datei und setzen Sie die Umgebungsvariablen für Ihre lokale Umgebung mit Ihrem bevorzugten Editor fest:
cp env.example .env
Platzieren Sie Ihre MongoDB URI und Ihre Dateien -URL. Wenn Ihre App bei Sashido gehostet wird, können Sie die Anmeldeinformationen Ihres Sashido -Projekts verwenden. Sie finden alle Schlüssel und URLs in der App -Einstellungen der App der App.
NB! Um Bilder zu laden, die eine manuelle Moderation in die admin -Anwendung lokal erfordern, müssen Sie auch die tatsächliche App_ID einsetzen!
Da es sich um ein Beispiel für ein Voll-Feas-Beispiel handelt, sind alle Abhängigkeiten für das Paket.json vorhanden. Sie müssen nur rennen:
npm install
npm run dev
Legen Sie die folgenden Parse.configs für Ihren Produktionsserver fest.
Moderationscores -Objekt sollte als Parse.config gespeichert werden, sodass die Einstellungen im laufenden Fliegen aktualisiert werden können.
Moderationspartomierungsoption des Booleschen Typs, mit dem die Automatisierung von Inhalten Moderation aktiviert/deaktiviert werden kann.
Für die Produktion müssen Sie die NSFW -Modell -URL , die NSFW -Modellformgröße und die Variable für Automatisierungskonfigurationen einstellen.
Modell URL | Größe | Formgröße | Genauigkeit |
---|---|---|---|
https://ml.files-sashido.cloud/models/nsfw_inception_v3/ | Riesig | 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% |
Bitte beachten Sie, dass das für diese Projekte verwendete Inception_V3 -Modell einen hohen RAM/CPU -Verbrauch aufweist. Während die beiden Mobilenet -Modelle weitaus leichter sind.
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
Schließen Sie Ihre Sashido -App mit GitHub an und als nächstes kann der Code einfach mit zwei einfachen Befehlen für das Hinzufügen einer Remotezweige und zum Drücken von Änderungen bereitgestellt werden.
git remote add production [email protected]:parsegroundapps/<your-pg-app-your-app-repo>.git
git push -f production master
Vielen Dank, dass Sie sich diesen Abschnitt angesehen haben. Wir sind offen für coole Ideen. Wenn Sie also eine haben und bereit sind, das Repo zu teilen, Änderungen anzuwenden und eine Pull -Anfrage zu öffnen. :)
Copyright © 2020, Cloudstrap AD. Weitere Informationen finden Sie unter Lizenz.