A realidade de que existem aproximadamente 4,54 bilhões de usuários da Internet (junho de 2020) em todo o mundo, a geração de uma quantidade sem precedentes de conteúdo aumenta apenas o desejo de encontrar uma abordagem para otimizar a moderação do conteúdo. E essa tarefa está ficando mais pesada com os fatos de que o número de usuários ativos é constantemente minucioso, os volumes de conteúdo também crescem exponencialmente, o aprendizado de máquina e a IA pode ser muito caro e a moderação manual é muito demorada e atrasada no tempo.
Então agora estamos em um ponto em que qualquer plataforma que permita o conteúdo gerado pelo usuário esteja enfrentando um problema semelhante. Felizmente, o aprendizado de máquina já amadureceu até o ponto em que os avanços na potência de processamento de computadores, armazenamento, ferramentas de dados, web, etc. tornaram as tecnologias de aprendizado de máquina para se tornarem cada vez mais acessíveis. Isso e a constante luta pela inovação, levaram a equipe da Sashido a criar esse serviço de moderação de conteúdo totalmente funcional simples e elegante, construído apenas com ferramentas e bibliotecas de código aberto . Consiste em três componentes principais - API REST CLASSIFICAÇÃO DE IMAGEM, MOTOR DE AUTOMAÇÃO E PAINEL DE ANGRESSO, que podem ser integrados separadamente ou totalmente em qualquer projeto Node.js do Parse Server Node.JS e hospedado em qualquer lugar.
Uma simples ilustração do nosso painel de administração para desktop e compatíveis com dispositivos móveis. Verifique a demonstração completa aqui.
As imagens exibidas para aprovação no aplicativo Admin são as que são sinalizadas para moderação manual do mecanismo de automação com base em seus critérios específicos.
Aqui estão alguns exemplos de como as imagens de classes específicas são classificadas pela API REST.
Fonte de imagem | Fonte de imagem | Fonte de imagem |
---|---|---|
Resultado da classificação | Resultado da classificação | Resultado da classificação |
[{ "ClassName": "neutro", "Probabilidade": 0,93821 }, { "ClassName": "Desenho", "Probabilidade": 0,05473 }, { "ClassName": "Sexy", "Probabilidade": 0,00532 }, { "ClassName": "Hentai", "Probabilidade": 0,00087 }, { "ClassName": "pornô", "Probabilidade": 0,00085 }] | [{ "ClassName": "Sexy", "Probabilidade": 0,99394 }, { "ClassName": "neutro", "Probabilidade": 0,00432 }, { "ClassName": "pornô", "Probabilidade": 0,00164 }, { "ClassName": "Desenho", "Probabilidade": 0,00006 }, { "ClassName": "Hentai", "Probabilidade": 0,00001 }] | [{ "ClassName": "Desenho", "Probabilidade": 0,96063 }, { "ClassName": "neutro", "Probabilidade": 0,03902 }, { "ClassName": "Hentai", "Probabilidade": 0,00032 }, { "ClassName": "Sexy", "Probabilidade": 0,00001 }, { "ClassName": "pornô", "Probabilidade": 0,00005 }] |
Demonstração neutra | Demoção sexy | Demoção de desenho |
Este serviço é incorporado em Node.js com o Mongo DB e o Parse Server. Você pode usá -lo em um aplicativo Standard Express, mas lembre -se de que a estrutura do arquivo do repo é específica de análise. O código está organizado em uma pasta src
e src/cloud/main.js
é o arquivo raiz do serviço. A lógica de vizualização reagir respectivamente na pasta scr/react
.
A API REST funciona com a classificação NSFW.JS, que usa modelos pré-treinados do TensorFlow. Dado um URL, ele retorna previsões de quão provável a imagem cai em cada uma das classes - desenho, neutro, sexy, pornô e hentai. Mais detalhes sobre a lógica e a pilha usada que você pode encontrar nesta postagem do blog.
A API oferece duas abordagens para classificar as imagens - de uma rota expressa ou diretamente de uma função de código de nuvem usando qualquer um dos SDKs Parse ou da API de REST de Parse.
Classificar do terminal Express
curl http://localhost:1337/api/image/classify?url=https://nsfw-demo.sashido.io/sexy.png
Classifique a partir de uma função NSFWIMAGECLASSIFY Código da nuvem - Exemplo de 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
O objetivo do mecanismo de automação é verificar como a classificação de uma determinada imagem corresponde aos parâmetros que você definiu como seguro para o seu projeto. O processo é automatizado com um gatilho AfterSave do servidor Parse.
No começo, é essencial definir qual das cinco classes e valores do NSFW pode conter imagens tóxicas e quais são seguras. Todas as classes que podem ser perturbadoras para o seu público devem ser incluídas nas preferências de moderação.
Para ilustrar qual é a ideia e a configuração, vamos imaginar que precisamos definir os critérios para o aplicativo de namoro de adultos. Como qualquer aplicativo de namoro, os usuários têm uma foto de perfil e podem fazer upload de fotos diferentes. Podemos assumir que o tipo de fotos deve ser principalmente neutro ... e talvez algumas fotos sexy também sejam permitidas. Portanto, adicionaremos todas as outras classes às nossas preferências de moderação. Algo como:
{
"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 }
}
O mecanismo de automação rejeitará automaticamente todas as imagens classificadas acima do limite max
definido em nossas preferências e aprovará tudo o que está abaixo do valor min
.
Mais detalhes sobre como ajustar os parâmetros do seu projeto que você pode encontrar no artigo aqui.
As preferências de moderação serão salvas em um parâmetro de configuração de ModerationsCores para o aplicativo de produção, pois isso permitirá que você os modifique em tempo real, se necessário.
Um gatilho pós-barga é ligado à coleção gerada pelo usuário, verifica automaticamente as fotos carregadas recentemente e as marca como seguras, excluídas ou para moderação. O AfterSafe contém lógica para corresponder como a classificação da API de uma imagem corresponde às preferências de moderação definidas. Com base em todos os dados aprovados, a decisão é tomada e o resultado é salvo no seu banco de dados.
Para manter um registro elegante das previsões da API REST e resultados do mecanismo de automação, você precisará adicionar algumas colunas à sua coleção de banco de dados que contém conteúdo gerado pelo usuário .
Você deve adicionar as seguintes colunas ao UserImageCollection
min
de suas preferências de moderação, está marcado como isSafe - true
.deleted - true
. Essas imagens não serão excluídas automaticamente do armazenamento de arquivos.O pós -pau dispara automaticamente, mas adicionamos um endpoint adicional da API, caso você precise verificar a manualidade se uma imagem for tóxica para o seu público.
curl http://YOUR_PARSE_SERVER_URL/api/image/is_safe?url=https://nsfw-demo.sashido.io/sexy.png
O toque final é um aplicativo de administração baseado em reactjs simples. Possui um recurso simples de login/logout e apenas moderadores aprovados recebem acesso.
As imagens que são sinalizadas pelo mecanismo de automação como moderationRequired=true
são exibidas no aplicativo. Fazemos questão de criar a interface de usuário para desktop e móveis, para que você possa aprovar ou rejeitar imagens facilmente, mesmo do seu telefone enquanto viaja.
Teste sozinho brincando com as imagens em nossa demonstração!
Node.js> = 10.2.1
Mongo DB
Servidor parse
Clone o repo:
git clone https://github.com/SashiDo/content-moderation-application.git
cd content-moderation-application
Copie o Env.Exemplo para o arquivo .env e defina as variáveis de ambiente para o seu ambiente local com seu editor favorito:
cp env.example .env
Coloque seu URI MongoDB e URL de arquivos. Se o seu aplicativo estiver hospedado no Sashido, você poderá usar as credenciais do seu projeto Sashido. Você pode encontrar todas as chaves e URLs no painel do aplicativo -> Configurações do aplicativo.
NB! Para carregar imagens que requerem moderação manual no aplicativo de administrador localmente, você precisará colocar também o app_id real!
Como este é um exemplo completo, todas as dependências estão presentes no package.json. Você só precisa correr:
npm install
npm run dev
Defina o seguinte parse.configs para o seu servidor de produção.
O objeto MODERATIONSCORES deve ser salvo como um parse.config, para que as preferências possam ser atualizadas rapidamente.
Opção de moderação do tipo booleano que permite ativar/desativar a automação de moderação de conteúdo.
Para produção, você precisa definir o URL do modelo NSFW , tamanho da forma do modelo NSFW e variável para cache de configurações de automação .
Modelo URL | Tamanho | Tamanho da forma | Precisão |
---|---|---|---|
https://ml.files-sashido.cloud/models/nsfw_inception_v3/ | Enorme | 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% |
Observe que o modelo INCCECCENT_V3 usado para esses projetos possui alto consumo de RAM/CPU. Enquanto os dois modelos MobileNet são muito mais leves.
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
Conecte seu aplicativo Sashido ao GitHub e, em seguida, o código pode ser facilmente implantado com dois comandos simples para adicionar uma ramificação remota e pressionar as alterações.
git remote add production [email protected]:parsegroundapps/<your-pg-app-your-app-repo>.git
git push -f production master
Obrigado por olhar para esta seção. Estamos abertos a quaisquer idéias legais; portanto, se você tiver uma e estiver disposto a compartilhar - bifurcar o repositório, aplique alterações e abra uma solicitação de tração. :)
Copyright © 2020, CloudStrap AD. Consulte a licença para obter mais detalhes.