Atualizado em 16 de novembro de 2022.
O Voz Delas é uma ferramenta que aponta quantas mulheres aparecem em citações diretas em um corpo de textos em português. Foi desenvolvido pelo jornal Folha de S.Paulo para monitorar a participação feminina nos conteúdos do jornal.
O projeto foi um dos vencedores do Desafio de Inovação da Google News Initiative na América Latina 2021.
Este repositório contém uma série de bots para monitoramento do gênero das fontes especialistas entrevistadas pela Folha, além do algoritmo que extrai os dados de pessoas diretamente citadas nos textos.
Ele inclui a estrutura que faz a recepção e tratamento dos conteúdos publicados, o algoritmo em si e o frontend para a exibição dos resultados por meio de dashboard e alertas por email.
Por fim, os nomes de mulheres extraídas do corpo de textos passam também a integrar um banco de fontes para futura consulta dos jornalistas da Folha, cuja estrutura também está presente neste repositório. Esses dados também são usados nos alertas disparados por email.
Todo o conteúdo está sob a licença GNU General Public License v3.0, o que significa que você pode reproduzir o Voz Delas em sua instituição.
- Reconhecer as fontes diretamente citadas em reportagens publicadas no site da Folha;
- Classificar o gênero dessas fontes;
- Quantificar o percentual de citações atribuídas a mulheres, recortando por autor (repórter) e por seção do jornal (editoria);
- Monitorar a evolução dessas métricas por meio de relatórios e alertas;
- Sugerir fontes mulheres de acordo com o tópico de preferência do jornalista.
O Voz Delas foi montado usando uma arquitetura de microsserviços, organizados na pasta ./system. Cada subpasta é um serviço.
O sistema foi implementado originalmente na Google Cloud Platform.
Recebe dados enviados diariamente ao bucket do Voz Delas contendo .json com os textos publicados pela Folha nos dias anteriores.
Envia os textos para a API Speaker Assignment para identificar as fontes e atualiza o banco de fontes.
API que determina quem são as fontes (speakers) em citações diretas de um texto.
O input é um corpo de texto. A saída é um array com as fontes, respectivos gêneros e as citações que o algoritmo atribuiu a essa pessoa.
Quando a aplicação não identifica speakers ou gêneros, retorna a palavra "undefined".
Aplicação web para consumir dados do banco de fontes criado a partir da leitura dos textos. Nomes de speakers mulheres são extraídos e integram tabela com tags de textos em que apareceram (ou seja, os assuntos sobre os quais falaram).
Frontend da aplicação web criada em ./03_speaker_database.
Frontend para visualizar os dados do Data Warehouse do projeto, como estatísticas de citações feitas a mulheres e outras informações extraídas de ./02_speaker_assignment.
Gera os relatórios e alertas a serem enviados por email para repórteres, editores e para a chefia do jornal.
Inclui relatórios periódicos de desempenho em relação à proporção de mulheres citadas nos textos e alertas para o caso de um acúmulo de textos publicados sem citar uma mulher.
O coração do projeto é o algoritmo disposto nos arquivos ./02_speaker_assignment/text_analysis.py e ./02_speaker_assignment/speaker_assignment.py (veja abaixo mais detalhes sobre outras partes da estrutura e, na sequência, como funciona o algoritmo).
Esses arquivos são usados em uma API (./02_speaker_assignment/main.py) que recebe os arquivos de texto e retorna um array com as informações de citações extraídas, entidades a quem atribuiu e o gênero dessa entidade.
Quando a aplicação não identifica speakers ou gêneros, retorna a palavra "undefined".
No Voz Delas, a API integra nossa arquitetura de microsserviços.
Os textos recebidos pelo sistema têm um tratamento inicial antes de serem processados pelo algoritmo do Voz Delas, parte que parcialmente se aplica exclusivamente ao formato usado pela Folha (extrair o conteúdo de um .json específico, que contém também metadados), e outra parte aplicável a qualquer texto que passe pelo serviço. Isso inclui a remoção de alguns caracteres especiais, espaços múltiplos, bem como a checagem de que o texto enviado inclui um número par de aspas.
O texto é todo tokenizado usando a biblioteca Spacy. Depois, o projeto usa um modelo treinado em português da biblioteca Hugging Face para o reconhecimento das entidades.
A atribuição, chave nesse processo, é feita a partir de um conjunto de regras encadeadas:
- Verbo: procura por verbos que indicam fala, como "disse" e "afirmou", e retorna o nome mais próximo
- Distância: procura a entidade mais próxima dentro do mesmo parágrafo da citação.
- Nota: procura por termos como "nota" ou "assessoria" no mesmo parágrafo do par de aspas.
- Pronome: se um pronome "ele" ou "ela" está próximo a uma fala, atribui-se à entidade de mesmo gênero mais próxima da palavra.
- Por fim, atribui-se à entidade mais próxima citada anteriormente, respeitando-se um limite de três parágrafos.
Caso não seja possível atribuir a fala a uma pessoa usando esses critérios, o sistema retornará que não pôde fazer a classificação --indicará a palavra-chave "undefined".
Nos testes feitos no desenvolvimento desta aplicação, comparando o resultado do sistema a um corpo de 430 falas (em 66 textos) classificadas manualmente, o Voz Delas classificou corretamente cerca de 75% das citações. Nessa avaliação notou-se que o limite de três parágrafos era o ideal para minimizar os erros mantendo o máximo possível de atribuições.
Uma vez feita a atribuição, os gêneros das fontes é reconhecido através deste banco de dados de nomes brasileiros.
O algoritmo do Voz Delas começa com um processamento dos textos e depois se divide em um conjunto de regras, heurísticas, que são então encadeadas para termos um output único.
Nessa etapa, o conteúdo inserido é tratado para que seja feita:
- Rotulação morfossintática
- Reconhecimento de entidades
- Reconhecimento de citações (texto entre pares de aspas)
Textos sem entidades ou citações não são analisados. Esses casos retornam um erro na aplicação.
A mais intuitiva. A ideia é que há maior probabilidade de a entidade que corretamente falou uma citação esteja próxima do que apelidamos de um verbo de comunicação.
Identificamos se o texto contém algum desses 28 verbos: 'AFIRMA', 'AFIRMOU', 'CITA', 'CITOU', 'CONTA', 'CONTOU', 'DECLARA', 'DECLAROU', 'DESCREVE', 'DESCREVEU', 'ELUCIDA', 'ELUCIDOU', 'ESCREVE', 'ESCREVEU', 'EXPLICA', 'EXPLICOU', 'DIZ', 'DISSE', 'FALA', 'FALOU', 'FRISA', 'FRISOU', 'INFORMA', 'INFORMOU', 'LISTA', 'LISTOU', 'PONTUA', 'PONTUOU'
Esses verbos de comunicação são atribuídos aos pares de aspas. O verbo fica associado ao par de aspas mais próximo dentro de um mesmo parágrafo.
Em seguida, procuramos por entidades na vizinhança do verbo encontrado.
Também intuitiva, é o baseline de muitos estudos. A ideia é atribuir fala à entidade mais próxima do par de aspas.
A distância pode ser calculada em número de termos/palavras ou parágrafos. Consideramos a proximidade em relação aos extremos da citação (começo e fim das aspas).
A busca começa pelo trecho onde estão as aspas e depois olha para trás no texto, iterando parágrafo por parágrafo.
Procura por pronomes "ele" e "ela", então os vincula à entidade de mesmo gênero mais próxima.
Nessa lógica, o pronome pode ser usado para substituir a presença direta do nome da entidade no parágrafo.
Identifica pares de aspas que vêm de organizações, e não pessoas, o que significa que não cabe uma análise de gẽnero.
Procura pelas expressões: 'NOTA', 'COMUNICADO', 'ASSESSORIA', 'TRECHO', 'TEXTO'
e as atribui ao par de aspas mais próximo.
No fim das contas, cada par de aspas terá resultados das entidades das quatro heurísticas descritas acima. Como atribuir a entidade final? O resultado sai do seguinte conjunto de regras:
- Se a heurística de verbo retornou algo.
- Se a heurística de distância retornou uma entidade e ela é do mesmo parágrafo das aspas;
- Se a heurística de nota retornou uma entidade e ela é do mesmo parágrafo das aspas;
- Se a heurística de pronome retornou uma entidade e ela é do mesmo parágrafo das aspas;
- Se a heurística de nota retornou uma entidade e ela está até K=3 parágrafos antes do parágrafo das aspas;
- Se a heurística de pronome retornou uma entidade e ela está até K=3 parágrafos antes do parágrafo das aspas;
- Se a heurística de distância retornou uma entidade e ela está até K=3 parágrafos antes do parágrafo das aspas;
- Se a heurística de distância retornou uma entidade e ela está distante em mais do que K=3 parágrafos antes do parágrafo das aspas nós dizemos que esse par de aspas fica indefinido ('undefined').
O Voz Delas foi desenvolvido por Larissa Sayuri Futino, Yuri Tavares, Raphael Hernandes e Bruno Pereira.
O projeto contou com idealização e supervisão de Alexandra de Moraes, Camila Marques, Fábio Takahashi, Flávia Faria e Flávia Lima. Também teve o apoio da equipe de tecnologia da Folha, com Marcelo Morote e Rafael Campos. Contou ainda com o apoio de Diana Yukari, Guilherme Garcia, Irapuan Campos, Leonardo Diegues e Rubens Alencar.
- Quotation Attribution for Portuguese News Corpora - Marta Quintão (Técnico Lisboa / UTL)
- Extraction, Attribution, and Classification of Quotations in Newspaper Articles - João Daniel Fernandes Godinho (Técnico Lisboa / UTL)
- Quote Extraction and Analysis for News - Chris Newell, Tim Cowlishaw, David Man (BBC Research & Development)
- Quotebank: A Corpus of Quotations from a Decade of News - Timoté Vaucher, Andreas Spitz, Robert West (EPFL), Michele Catasta (Universidade Stanford)
- Direct Quote: a dataset for direct quotation extraction and attribution in news articles - Yuanchi Zhang, Yang Liu (Departamento de Ciência da Computação e Tecnologia, Universidade Tsinghua)