Análise de toxicidade é um campo da inteligência artificial (IA) dedicado a identificar conteúdos nocivos ou ofensivos. Mais especificamente, ela é uma subárea da análise de sentimentos, ramo que pertence ao processamento de linguagem natural. Ou seja, a análise de toxicidade está integrada ao campo da IA responsável pela compreensão de linguagem.
A análise de toxicidade é comumente empregada para identificar conteúdos como: discurso de ódio, ameaças, insultos, ataques pessoais e obscenidade. Mas ela pode ser personalizada para casos específicos.
O emprego mais comum de análise de toxicidade é na proteção de comunidades online e na preservação da imagem de empresas. Seus principais casos de uso são para moderação de mídias sociais, plataformas de jogos, fóruns online e em sistemas de atendimento ao cliente. Nesse último caso, ela é essencial para sinalizar consultas abusivas que exigem tratamento especial. A análise de toxicidade também pode ser utilizada no monitoramento dos níveis de toxicidade de comunidades ou grupos.
Implementação de Análise de Toxicidade
Implementações de análise de toxicidade costumam ser feitas com algoritmos de machine learning incluindo redes neurais. Modelos para projetos simples podem ser feitos com técnicas tradicionais de machine learning como regressão logística e support vector machine (SVMs). Para cenários complexos ou situações que precisam de detecções sutis, as melhores ferramentas disponíveis são as redes neurais. Redes deep learning com arquiteturas avançadas como Transformer são particularmente importantes para implementações para contextos complexos.
Como a análise de toxicidade pertence ao campo do processamento de linguagem natural, os procedimentos de sua implementação seguem as linhas gerais da área. Além disso, as bibliotecas Python para processamento de linguagem natural podem ser usadas para análise de toxicidade. Bibliotecas Python como spaCy, por exemplo, fornecem ferramentas essenciais para a realização do pré-processamento de textos, análises linguísticas, extração de recursos e até para integração com modelos grandes de linguagem.
Geralmente, os modelos de análise de toxicidade são treinados em grandes conjuntos de dados de textos rotulados. Ou seja, dados previamente categorizados como tóxicos ou não tóxicos. Também é possível usar dados categorizados em vários tipos de toxicidade. Durante as etapas de treinamento, os algoritmos aprendem padrões na linguagem que se correlacionam com toxicidade. Após o treinamento, quando um novo texto é analisado, o modelo o avalia conforme os padrões nocivos que aprendeu. A partir dessa avaliação, ele atribui um índice de toxicidade ou informa a probabilidade do texto pertencer a uma categoria tóxica.
Implementação Ilustrativa em Python
Python, com sua sintaxe clara e enorme ecossistema de bibliotecas, é a linguagem de programação ideal para implementações de análise de toxicidade. No geral, a implementação de análise de toxicidade segue as etapas regulares de um modelo de processamento de linguagem natural. A seguir, ilustraremos as etapas gerais para implementar uma análise de toxicidade usando técnicas tradicionais de machine learning com scikit-learn.
Os dados
O primeiro ponto de qualquer modelo de machine learning é a obtenção de um conjunto de dados. Usaremos os dados ilustrativos mostrados no código abaixo. Ele consiste em 10 frases rotuladas como 0 (não tóxicas) ou 1 (tóxicas). É possível fazer análises mais complexas considerando vários tipos de toxicidade, como obscenidade, ofensas, racismo, etc. Mas, para este exemplo, faremos uma classificação binária.
import pandas as pd
data = pd.DataFrame({'text': ['Você é uma pessoa maravilhosa!',
'Amei seu comentário',
'Vai pastar sua anta',
'Faz tempo que eu fui lá',
'Lá vem os mortadelas encher o saco',
'O site deles é bom',
'Tá cheio de otário aqui',
'Quando é o show deles?',
'Cala a boca babaca!',
'Odiei seu comentário'],
'toxic': [0, 0, 1, 0, 1, 0, 1, 0, 1, 1]})
print(data)
text toxic
0 Você é uma pessoa maravilhosa! 0
1 Amei seu comentário 0
2 Vai pastar sua anta 1
3 Faz tempo que eu fui lá 0
4 Lá vem os mortadelas encher o saco 1
5 O site deles é bom 0
6 Tá cheio de otário aqui 1
7 Quando é o show deles? 0
8 Cala a boca babaca! 1
9 Odiei seu comentário 1
A etapa seguinte consiste no pré-processamento dos dados. Ela não será realizada nesse exemplo, pois ele é apenas ilustrativo. Se você quer conhecer melhor como o pré-processamento pode ser feito, clique aqui.
Extração de recursos
Em seguida, é preciso fazer a extração de recursos. Ela consiste na transformação dos dados de texto em números para que eles possam ser usados em modelos de machine learning. No nosso exemplo, utilizaremos Bag-of-Words (CountVectorizer) para fazer a vetorização dos textos. Para implementações de sistemas mais complexos, vetorizações com word embedding podem ser mais apropriadas.
from sklearn.feature_extraction.text import CountVectorizer
vectorizer = CountVectorizer()
features = vectorizer.fit_transform(data['text'])
Treinamento do modelo
Na etapa seguinte, separamos os dados em conjuntos de treino e conjuntos de teste.
from sklearn.model_selection import train_test_split
# Divide os dados em conjuntos de treino e de teste
X_train, X_test, y_train, y_test = train_test_split(features, data['toxic'], test_size=0.25, random_state=42)
Depois, realizamos o treino do modelo usando regressão logística como algoritmo classificador.
from sklearn.linear_model import LogisticRegression
# Treina o classificador (regressão logística)
classifier = LogisticRegression()
classifier.fit(X_train, y_train)
Após o treino, o modelo pode ser testado com novas sentenças para gerar classificações.
novos_exemplos = ["Que ideia maravilhosa!", "Você é um babaca!"]
new_features = vectorizer.transform(novos_exemplos)
predictions = classifier.predict(new_features)
print(predictions)
Predições obtidas:
[0 1]
Outras opções
A implementação que fizemos é apenas ilustrativa. Sua eficácia para problemas reais depende muito da qualidade dos dados de treino e do tipo de cenário onde o modelo deverá operar. Se a intenção é usá-lo num contexto complexo, opções mais avançadas são mais indicadas. Implementações mais robustas podem ser feitas com bibliotecas de deep learning como PyTorch ou Keras. Elas seguem a lógica geral do código mostrado acima (dados, pré-processamento, extração de recursos, treinamento e predição). Outra alternativa é usar modelos pré-treinados com arquitetura Transformer disponíveis na plataforma Hugging Face. Eles precisam de ajuste fino, mas, com um pouco de insistência, geram resultados bastante robustos.
Análise de Toxicidade como Ferramenta Preditiva?
No início desse texto, mencionamos que uma das possíveis aplicações da análise de toxicidade é no monitoramento do nível de toxicidade presente num grupo ou numa comunidade. Esse tipo de análise é bastante importante para criar um retrato do momento, mas será que ela pode ajudar a prever o futuro? Essa é a nossa intenção. Estamos desenvolvendo um sistema com várias técnicas de processamento de linguagem natural para realizar análises preditivas. Nosso sistema se baseia principalmente no monitoramento do estado emocional geral e do nível de toxicidade presente na nossa comunidade para prever para onde estamos caminhando. Ele combina várias técnicas de IA e estará disponível em breve.
Conclusões
Neste post, fizemos uma introdução à análise de toxicidade, uma subárea da análise de sentimentos. A análise de toxicidade é o ramo da IA dedicado a identificar conteúdos nocivos. Ela tem inúmeras aplicações, incluindo o monitoramento da toxicidade de grupos, moderação de comunidades e fóruns online, entre outras. Ela também é bastante útil em serviços de atendimento ao cliente para detectar e encaminhar comportamentos abusivos. Para saber mais sobre a análise de toxicidade, uma dica é consultar o site do kaggle para conhecer alguns conjuntos de dados e implementações.