Moderação de texto: lições de etiqueta para cientistas de dados

Olá, Habr!



Com este artigo, iniciamos a publicação de uma série de artigos sobre Data Science, as tarefas que resolvemos no Centro para o Desenvolvimento de Tecnologias Financeiras do Banco Agrícola Russo.



No ano passado, Rosselkhozbank anunciou a criação e desenvolvimento de um ecossistema para empresas agroindustriais. Para um dos sites básicos do ecossistema - Nossa Agricultura, decidimos fazer algumas tarefas úteis, que discutiremos a seguir.







O site Svoe Farmezstvo é um mercado de produtos para produtores agrícolas dos maiores fornecedores de toda a Rússia. O site inclui produtos das categorias de maior prioridade para os agricultores: produtos fitofarmacêuticos, fertilizantes, sementes, máquinas agrícolas, etc. Milhares de fornecedores carregam informações sobre seus produtos com o objetivo de vendê-los. E, claro, você precisa implementar um processo para verificar a qualidade do conteúdo que você baixa. Neste sentido, decidimos criar a nossa própria ferramenta de pré-moderação de texto e informação gráfica.



O que eles estavam fazendo?



Neste artigo, contaremos como, em cooperação com o Laboratório MIPT, criado especialmente para as tarefas do Banco, desenvolvemos uma ferramenta que permite pré-moderar o conteúdo do texto com alta precisão.



Nosso objetivo parecia bastante simples - a ferramenta que criamos deve classificar automaticamente o texto como aceitável para colocação no site (classe 0) ou inaceitável (classe 1). Se o algoritmo não consegue entender claramente a qual classe o texto pertence, então o enviamos (o texto) para moderação manual.



Temos a tarefa de processar textos: queremos filtrar textos que sejam “tóxicos” em todos os sentidos, a saber: maldições, insultos, conteúdos diversos proibidos por lei, e apenas textos inaceitáveis ​​para veiculação no site.



Esperamos que o algoritmo que desenvolvemos tome um conjunto de textos como entrada e produza um número de 0 a 1 - o grau ou probabilidade de “toxicidade” do texto. Quanto mais próximo esse número estiver de um, mais tóxico será o comentário.



Deve-se notar que o problema de detecção de textos tóxicos não é novo e é bastante popular no segmento de língua inglesa. Vários anos atrás, um problema semelhante foi resolvido no Desafio de Classificação de Comentários Tóxicos no Kaggle. Para o idioma russo, a solução deve ser obtida de forma semelhante, mas a qualidade do modelo pode ser inferior devido ao fato do idioma russo ser estruturalmente mais complicado que o inglês.



Há apenas um conjunto de dados em russo marcado como de domínio públicopara pesquisar toxicidade no texto. Também conseguimos encontrar um conjunto de dados para busca de insultos (um caso especial de toxicidade). Além disso, coletamos exemplos de anúncios de portais agrícolas e os marcamos como aceitáveis ​​(classe - 0).



A tarefa que estabelecemos revelou-se bastante singular em termos do tema agrícola em questão. Sua especificidade reside no fato de que frases que no dia a dia são insultos nem sempre o são quando se trata de agricultura. Exemplos comuns incluem o seguinte: “Não coloque seu focinho” - o texto é claramente inaceitável, enquanto o texto com um “focinho de porco” pode ser facilmente colocado no site (embora dependa do contexto). O mesmo se aplica a certas subespécies de animais e plantas de fazenda.



Se falamos em resolver tais problemas de classificação de textos, então, de fato, mesmo os modelos mais simples (lineares) já dão bons resultados . Mas, como sempre, para alcançar maior qualidade, usaremos redes neurais. A arquitetura mais popular (no momento em que este livro foi escrito) para resolver esses problemas é o BERT. Na época da competição Kaggle mencionada acima, esta arquitetura não existia, então outras foram utilizadas. Porém, posteriormente esta tarefa foi resolvida com sucesso com a ajuda do BERT.



Como você fez isso?



Vamos passar para a parte mais interessante - resolver o problema. Depois de pensar um pouco na “arquitetura” da ferramenta, decidimos usar três modelos: pesquisa de dicionário (como filtro para vocabulário obsceno), regressão logística (como solução básica) e BERT (como solução mais avançada).



Esquema geral







O esquema geral da solução é o seguinte: dentro da "caixa preta" o texto entra primeiro no classificador ingênuo, que se baseia em um dicionário de palavras obscenas (palavrões), aqui os textos que contêm palavras "ruins" são imediatamente cortados (sua toxicidade é sempre igual a um ( 1). Os textos que passaram a primeira fase caem em um modelo de rede neural mais complexo, que dá o grau de sua toxicidade. Em caso de falha do modelo de rede neural, ele é substituído por um mais simples - regressão logística. Ou seja, obteremos algum resultado não ingênuo em qualquer caso .



Agora vamos olhar para cada componente em detalhes.



Classificador ingênuo



Tudo é muito simples aqui: de acordo com o dicionário de vocabulário obsceno, é muito fácil entender se o texto contém esta ou aquela palavra “ruim” ou não.



Ou seja, nesta fase, você pode até mesmo prescindir do modelo ML como tal e eliminar imediatamente os textos que contêm palavrões. Mas e se tais palavras do dicionário não forem utilizadas no texto, mas o texto, mesmo assim, for inaceitável para publicação no portal? Vamos tentar resolver este problema usando regressão logística e BERT'a.



Regressão logística



O modelo mais simples permite prever um valor com base nos dados disponíveis. Os vetores de texto para este modelo são obtidos usando TF-IDF e TweetTokenizer da nltk. Tal modelo, como é conhecido, permite estimar a probabilidade de toxicidade do texto por meio de uma função logística. Em nossa arquitetura, a regressão logística “garante” a rede neural.



Ótimo e terrível BERT



Usamos o modelo RuBert pré- treinado da DeepPavlov, que treinamos posteriormente nos textos marcados. O processo de previsão, sem entrar em detalhes, é o seguinte:





Nós construímos, construímos e finalmente construímos!



Avaliamos a qualidade usando nossas métricas favoritas, Precisão, ROC-AUC e medida F1. As métricas de qualidade finais na amostra adiada são as seguintes:



Algoritmo / Métrica

Ingênuo

BERT

LR

Ingênuo → BERT

Ingênuo → LR

Precisão

0,854

0,901

0,865

0,909

0,879

ROC-AUC

0,782

0,960

0,921

0,963

0,939

Medida F1

0,722

0,840

0,800

0,855

0,824



Velocidade de operação: ~ 2800 textos por minuto em GPU (GeForce 1080Ti) no caso de processamento de BERT como o algoritmo mais lento dos apresentados.



Como esperado, as métricas com BERT resultaram um pouco melhores, embora não muito.



Que conclusões tiramos



Para concluir, gostaria de referir vários aspectos importantes, sem os quais, em nossa opinião, é impossível lançar tais soluções em modo industrial.



  1. Você sempre precisa levar em consideração as especificidades da tarefa em relação à marcação de textos.
  2. É necessário prever moderação manual do texto, no caso em que o modelo “duvide” da sua decisão. Você não quer que conteúdo impróprio acabe em seu produto.
  3. Também é necessário enviar os textos marcados à mão do parágrafo anterior para treinamento adicional. Assim, você pode melhorar o modelo em pequenas etapas e reduzir a quantidade de trabalho durante a moderação manual ao longo do tempo.
  4. É melhor usar uma abordagem integrada para resolver o problema. Às vezes, mesmo os "modelos" mais simples nos dicionários já dão bons resultados.
  5. Escolha o melhor modelo com base na sua tarefa. No nosso caso, escolhemos o BERT porque reage melhor ao contexto do que a regressão logística.


Obrigado pela atenção!



No próximo artigo, compartilharemos nossa experiência em pré-moderação de imagens todas na mesma plataforma de nosso ecossistema - Nossa Agricultura.



All Articles