Home Moderação automática de conteúdo usando a nuvem da OpenAI
Post
Cancelar

Moderação automática de conteúdo usando a nuvem da OpenAI

Moderação

A OpenAI oferece uma ferramenta gratuita de moderação1, cuja finalidade é analisar os conteúdos e classificá-los entre as categorias:

  • harassment: Conteúdo que expresse, incite ou promova linguagem de assédio contra qualquer pessoa;
  • harassment/threatening: Conteúdo de assédio que também inclua violência ou dano grave contra qualquer pessoa;
  • hate: Conteúdo que expresse, incite ou promova ódio com base em raça, gênero, etnia, religião, nacionalidade, orientação sexual, deficiência ou casta;
  • hate/threatening: Conteúdo de ódio que também inclua violência ou dano grave contra o grupo alvo com base em raça, gênero, etnia, religião, nacionalidade, orientação sexual, deficiência ou casta;
  • illicit: Conteúdo que ofereça conselhos ou instruções sobre como cometer atos ilícitos.
  • illicit/violent: Os mesmos tipos de conteúdo sinalizados pela categoria illicit:, mas também inclui referências à violência ou à obtenção de armas;
  • self-harm: Conteúdo que promove, incentiva ou retrata atos de automutilação, como suicídio, automutilação e transtornos alimentares;
  • self-harm/intent: Conteúdo em que o falante expressa que está se envolvendo ou pretende se envolver em atos de automutilação, como suicídio, automutilação e transtornos alimentares;
  • self-harm/instructions: Conteúdo que incentiva a prática de atos de automutilação, como suicídio, automutilação e transtornos alimentares, ou que fornece instruções ou conselhos sobre como cometer tais atos;
  • sexual: Conteúdo destinado a despertar excitação sexual, como a descrição de atividade sexual, ou que promove serviços sexuais (exceto educação sexual e bem-estar);
  • sexual/minors: Conteúdo sexual que inclua um indivíduo com menos de 18 anos;
  • violence: Conteúdo que retrate morte, violência ou lesão física;
  • violence/graphic: Conteúdo que retrate morte, violência ou lesão física em detalhes gráficos.

A resposta da ferramenta é no formato de probabilidades.

Envio de frase

1
2
3
4
5
6
7
8
9
10
11
from openai import OpenAI

OPENAI_KEY=open('utils/openai.conf', 'r').read().strip()
client = OpenAI(api_key=OPENAI_KEY)

response = client.moderations.create(
    model="omni-moderation-latest",
    input="Você é feio",
)

print(response)

Resposta

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
ModerationCreateResponse(id='modr-970d409ef3bef3b70c73d8232df86e7d',
model='omni-moderation-latest',
results=[
    Moderation(
        categories=Categories(
            harassment=True,
            harassment_threatening=False,
            hate=False,
            hate_threatening=False,
            self_harm=False,
            self_harm_instructions=False,
            self_harm_intent=False,
            sexual=False,
            sexual_minors=False,
            violence=False,
            violence_graphic=False,
            harassment/threatening=False,
            hate/threatening=False,
            illicit=False,
            illicit/violent=False,
            self-harm/intent=False,
            self-harm/instructions=False,
            self-harm=False,
            sexual/minors=False,
            violence/graphic=False
        ),
        category_scores=CategoryScores(
            harassment=0.8874508716149667,
            harassment_threatening=4.583129006350382e-05,
            hate=0.0071335892195802525,
            hate_threatening=7.646537350121258e-07,
            self_harm=0.00046372467876705764,
            self_harm_instructions=0.00021833860887263772,
            self_harm_intent=0.0002152775092824918,
            sexual=7.437028637763686e-05,
            sexual_minors=1.8925148246037342e-06,
            violence=0.0005005862322300009,
            violence_graphic=3.2192334497037803e-06,
            harassment/threatening=4.583129006350382e-05,
            hate/threatening=7.646537350121258e-07,
            illicit=2.0342697805520655e-05,
            illicit/violent=2.01456908529364e-06,
            self-harm/intent=0.0002152775092824918,
            self-harm/instructions=0.00021833860887263772,
            self-harm=0.00046372467876705764,
            sexual/minors=1.8925148246037342e-06,
            violence/graphic=3.2192334497037803e-06
        ),
        flagged=True,
        category_applied_input_types={
            'harassment': ['text'],
            'harassment/threatening': ['text'],
            'sexual': ['text'],
            'hate': ['text'],
            'hate/threatening': ['text'],
            'illicit': ['text'],
            'illicit/violent': ['text'],
            'self-harm/intent': ['text'],
            'self-harm/instructions': ['text'],
            'self-harm': ['text'],
            'sexual/minors': ['text'],
            'violence': ['text'],
            'violence/graphic': ['text']
        }
    )
])

Resultado

A linha 49 confirma que o conteúdo resultou em positivo para alguma das categorias:

1
flagged=True,

Já a linha 6 indica:

1
harassment=True,

Com a probabilidade conforme a linha 28:

1
harassment=0.8874508716149667,

Ou seja, a ferramenta detectou um assédio(harassment) com probabilidade de 88.74% na mensagem enviada.

Envio de imagem

Para fazer a análise de imagens, utilize o código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from openai import OpenAI

OPENAI_KEY=open('utils/openai.conf', 'r').read().strip()
client = OpenAI(api_key=OPENAI_KEY)

response = client.moderations.create(
    model="omni-moderation-latest",
    input=[
        {
            "type": "image_url",
            "image_url": {
                <URL_DA_IMAGEM>
            }
        }
    ]
)

print(response)

Telegram

Os conteúdos enviados no Telegram podem ser nocivos e ocasionar a remoção do grupo uma vez que os Termos de Uso foram descumpridos. Para evitar este tipo de problema, utilizo um bot que submete à OpenAI textos e imagens enviados e, dependendo do caso, notifica os administradores ou remove o conteúdo de imediato. Assim, não é necessário que um administrador esteja sempre observando tudo. O bot irá alertar sobre textos ou remover imagens quando for necessário.

Bot

O AnaliseDeConteudoBot submete à ferramenta todo o conteúdo compartilhado em grupos em que sou administrador. Caso o conteúdo seja um texto, todos os administradores do grupo recebem uma mensagem com o alerta, contendo o link para a mensagem original e uma cópia do que foi escrito. Caso o conteúdo seja uma imagem, o bot automaticamente a remove do grupo após notificar os administradores.

Após meses usando a ferramenta, cheguei à conclusão que o valor de 0.8 é um bom limite para notificar os administradores ou remover conteúdos. Menos que isso gerou muitos falsos positivos.

Para ficar claro para o grupo que os administradores foram alertados, as mensagens que gerarem notificações recebem a reação 🤔. Caso um dos administradores clique em Ignorar alerta, a reação é removida da mensagem. O bot também faz a verificação de mensagens editadas, portanto, é possível que uma mesma mensagem gere alertas repetidos a depender do conteúdo de cada edição.

Exemplos de alertas de conteúdos inapropriados.
Exemplos de alertas de conteúdos inapropriados categorizados como harassment.

Executando o bot

Todo o conteúdo do bot está presente no repositório github.com/GabrielRF/AnaliseDeConteudoBot. Após baixar o conteúdo, abra a pasta utils e edite os três arquivos, sendo eles:

  • bottoken.conf: Com o token do Bot obtido no @BotFather;
  • groups.conf: Os IDs dos grupos em que o bot irá funcionar2;
  • openai.conf: O token de acesso obtido na OpenAI.

Preenchidos os arquivos corretamente, basta executar o arquivo bot.py como preferir3.


Esta postagem está licenciada sob CC BY 4.0 pelo autor.