domingo, 14 de outubro de 2018

Avaliação Automática de Redações

No PROPOR 2018, publiquei um artigo sobre avaliação automática de redações, em parceria com a Letrus. É um assunto bem interessante do qual vou falar aqui.

Essa atividade é fazer com que uma IA dê uma uma nota para uma redação, como um avaliador humano faria, de preferência apontando onde houve possíveis erros ou más escolhas de palavras no texto. 

Vou explicar aqui um pouco como funciona e quais as limitações da IA nessa tarefa. Nós experimentamos dois models: um que modela explicitamente atributos da redação (como presença de certas palavras, contagens de verbos, substantivos, etc.) e outro que usa redes neurais (e que pode parecer muito abstrato à primeira vista).

Se achar o texto longo e quiser saber onde chegamos com isso, pode pular para as conclusões finais! Spoiler: não estamos no ponto de susbstituir corretores humanos, mas a IA é muito útil.

Critérios de Correção

No trabalho que fiz com a Letrus, lidamos com redações no formato do ENEM, o que é interessante pelos critérios de pontuação. As redações têm notas em cinco critérios, chamados de competências:
  1. Seguir a norma padrão da língua escrita; isto é, usar a gramática e ortografia corretamente
  2. Conformidade com o tipo de texto (argumentativo, quer dizer, defendendo um ponto de vista) e o tema proposto
  3. Organizar argumentos em defesa de um ponto de vista
  4. Uso de construções argumentativas no texto
  5. Elaboração de uma proposta de solução para o problema proposto
Cada um destes critérios é independente do outro - portanto, uma redação com gramática perfeita mas péssima estrutura de argumentação poderia ter nota alta na competência 1 e baixa na 4.

Além do mais, cada competência tem alguns critérios bem delineados sobre o quê desconta pontos, para tornar a correção humana padronizada. 

A IA aprende a dar notas, como de praxe, baseado em aprendizado de máquina. Isso significa que é necessário ter acesso a uma grande quantidade de redações já corrigidas, para (tentar) descobrir como se dá uma nota adequada a um texto. Mesmo com todas as regras do ENEM, dar notas é uma tarefa difícil -- basta pensar em todas as nuances e ambiguidades da língua! Portanto, via de regra, quanto mais dados disponíveis, melhor. No nosso caso, usamos mais de 50 mil redações corrigidas por humanos como base para treinar a IA.

Modelo 1 - Análise explícita de atributos

Nosso primeiro modelo funciona mais ou menos assim:


Nessa análise de PLN, extraímos uma série de atributos, como contagens de palavra por classe gramatical, quantidade de vírgulas, tamanho médio das frases, uso de palavras raras, erros gramaticais, entre outros. 

Além disso, verificamos se o texto tem algumas palavras-chave relevantes no ENEM. Por exemplo, o uso de palavras e expressões típicas da língua falada tem um impacto negativo na nota; por isso temos uma lista de expressões como você, , todo mundo

Por outro lado, o uso de certas expressões, chamadas conectivos, é esperado no começo de frases e parágrafos. Daí temos uma outra lista com expressões como dessa forma e entretanto.

Após extrair todas estas contagens e atributos, temos uma grande quantidade de números para cada redação. A última etapa é rodar um regressor, ou seja, um modelo de aprendizado de máquina capaz que mapeia um conjunto de variáveis (no nosso caso, os atributos que acabei de mencionar) a um valor alvo (a nota da redação). Na prática, treinamos cinco regressores, um para cada competência, já que elas são independentes.

"Mas qual regressor?", você pode perguntar. O modelo de regressão mais simples e difundido é o de regressão linear. Ele apenas multiplica o valor de cada atributo por um peso, soma tudo e adiciona mais um valor. O resultado dessa soma é a nota. Mesmo com essa simplicidade, a regressão linear deu bons resultados nos nossos experimentos.

Outro modelo bem mais poderoso, e que tem obtido ótimos resultados em competições do Kaggle é o Gradient Boosting. Esse é um método mais complicado, e não dá para explicar tudo aqui. Basicamente, ele treina uma árvore de decisão com partes dos dados, e em seguida, treina outra árvore para corrigir os erros da primeira. E repete isso mais uma, 10, 20, 100 vezes.

Pois bem. O Gradient Boosting deu ótimos resultados com nossas redações no ENEM. Em média, ele dá uma nota menos de 100 pontos acima ou abaixo da nota que os humanos deram. Ou seja, menos de 10% de erro, já que a nota vai de 0 a 1000. Nada mal!

Modelo 2 - Rede neural

Se você acompanha a área de PLN e aprendizado de máquina em geral, deve saber que redes neurais profundas (deep learning!) são muito comuns e eficazes hoje em dia. Por isso resolvemos também usar uma arquitetura neural no problema do ENEM. E ela tem a seguinte estrutura:


A principal diferença é que agora não precisamos definir quais são os atributos da redação! A própria rede neural aprende quais padrões dentro texto levam a notas mais altas ou mais baixas. Como isso acontece?

Explicar o funcionamento de redes neurais para PLN, incluindo uma LSTM, é bem complicado, então vou falar apenas em linhas gerais. O modelo neural enxerga cada palavra como um vetor de números (sua projeção num espaço vetorial, ou embedding), e processa uma de cada vez. Em especial, usamos uma LSTM (Long Short-Term Memory), que é um tipo de camada de rede neural capaz de aprender certas propriedades de sequências de palavras.

Conforme a LSTM lê uma frase, ela multiplica o vetor de cada palavra por uma matriz de pesos, e armazena o resultado no seu estado oculto. Esse estado oculto é mais um vetor numérico interno da LSTM, e seus valores são determinados por uma série de operações envolvendo todas as palavras lidas até o momento.

Para ficar mais interessante, usamos uma BiLSTM: é como se fosse uma LSTM que lê a frase do começo para o fim, combinada com outra que a lê do fim para o começo. Essa técnica permite obter uma representação ainda mais rica da sentença.

Depois de rodar uma BiLSTM ao longo de uma sentença inteira, temos um único vetor para ela. O que fazemos a seguir? Rodamos outra BiLSTM sobre todos os vetores de sentenças de um texto! O procedimento é o mesmo da LSTM que lê palavras. No final, chegamos a um único vetor para a redação inteira.

A partir daí, podemos treinar um regressor que aprende a pontuar essa vetor final com a nota correta da redação -- ou cinco regressores, no nosso caso. O regressor usado aqui é basicamente um regressor linear. Por que não usar um modelo mais poderoso, como o Gradient Boosting que eu ilustrei acima? Primeiro, porque precisamos de um modelo que se encaixe facilmente à arquitetura neural, que precisa da propagação de gradientes do erro. Isso é até possivelmente teoricamente com o Gradient Boosting, mas seria tão difícil a ponto de matar o benefício. Segundo porque a própria arquitetura neural já contorna uma grande limitação da regressão linear: a própria linearidade. Uma rede neural de várias camadas permite fazer muito mais associações entre os dados, o que não é o caso de um regressor linear simples.

Por fim, pusemos a funcionar nossa rede neural. O resultado geral foi um pouquinho abaixo do método anterior com o Gradient Boosting, porém, na competência 5, a rede neural teve uma clara vantagem. Interessante notar que essa é justamente a competência mais difícil de todas de se automatizar. Pra dar uma ideia: enquanto a taxa de erro (RMSE) das competências 1 a 4 é entre 25 e 30, na competência 5 ele é de 38,85 para a rede neural e 41,49 para o Gradient Boosting.

Conclusões


Funcionou bem!

Nosso trabalho com o ENEM mostrou que a IA pode ter uma excelente performance na correção automática de redações. Mais ainda: para a subjetiva competência 5, redes neurais funcionam ainda melhor que um sistema que observe a presença de diversas palavras chaves definidas previamente.

Pronto para substituir humanos?

De jeito nenhum! Estamos muito longe mesmo dessa mítica IA capaz de entender todas as nuances da comunicação humana. 

Os modelos de IA só aprendem o que já viram em seus dados de treinamento. Muitos coisas sem sentido ou excelentes argumentações podem ser escritas sem terem nenhum precedente! Nesse caso, a IA só pode tentar comparar como que já aprendeu antes. E muitas vezes não vai responder de acordo.

Mas serve para alguma coisa?

Com certeza, e muito! 

Em primeiro lugar, se quisermos chegar a uma IA mais poderosa, temos que caminhar um passo de cada vez. A IA que temos hoje é muito mais eficiente do que a de cinco anos atrás. As pesquisas que fazemos agora dão a base para próximas pesquisas trazerem cada vez mais melhorias.

E em segundo lugar, já há sim algumas utilidades práticas para a nossa IA de correção de redações. Ela pode dar feedback para estudantes que estão treinando para redação. Naturalmente, a resposta da IA não pode ser tomada como verdade inquestionável, mas uma nota muito baixa já deve chamar a atenção do aluno, ou uma nota muito alta já é um excelente sinal. 

Outra utilidade vai além da redação em si: detectar corretores humanos que dão notas muito discrepantes. Se as notas que um humano dá para redações são muito discrepantes das notas da IA, isso é um sinal de que talvez ele não esteja levando a correção muito a sério.

3 comentários:

  1. Olá, gostei muito da ideia, paarabéns!!.Gostaria de saber onde eu poderia achar o artigo.

    ResponderExcluir
    Respostas
    1. Olá, obrigado! O artigo foi publicado pela Springer, está disponível em https://link.springer.com/chapter/10.1007/978-3-319-99722-3_18

      Excluir