Seminário · aprendizado de máquina

Dois modelos para gastar
LLM só onde vale

Prever quem vai parar de estudar, e decidir quais respostas discursivas precisam mesmo da correção por LLM. Dados públicos, linha de base declarada e dois protótipos que rodam no navegador.

Geisbelly VictóriaMaria Antonia

Projeto TrailUp · github.com/Geisbelly/core-trailup

→ ← navegam (ou deslize o dedo). O índice · N notas · F tela cheia.

Roteiro0–1 min

O que vem pela frente

BlocoConteúdoTempo
Problemaas duas perguntas e por que elas custam dinheiro3 min
Dadosas bases públicas e como foram preparadas3 min
Métodoos eixos, a regressão logística, o grafo de coocorrência4 min
Resultadoscada número ao lado da sua linha de base3 min
Limiteso que não funcionou, os erros, o que falta2 min

Os dois modelos respondem à mesma pergunta de fundo: uma chamada de LLM custa tempo e dinheiro, e não dá para fazer uma por aluno ou uma por resposta. Quem decide onde gastar precisa ser barato.

Modelo 1 · problema1–3 min

O aluno não cancela. Ele para de aparecer

Plataforma de estudo não tem aviso de saída. A pessoa vai espaçando as sessões até sumir, e quando alguém percebe já passou o momento de agir.

A pergunta: olhando quatro semanas de comportamento, dá para saber quem não volta no mês seguinte? Se der, uma ação barata pode ir para quem precisa, em vez de ir para todo mundo.

Por que isso não é igual em toda plataforma

Em curso obrigatório quase todo mundo volta, porque tem nota e presença. Em aplicativo de autoestudo quase ninguém volta, porque não custa nada parar. Um modelo treinado em uma dessas realidades não sabe em qual das duas está sendo usado.

Modelo 2 · problema1–3 min

Corrigir texto aberto com LLM custa por resposta

Mandar toda resposta discursiva para uma LLM significa pagar e esperar por cada uma. Não mandar nenhuma significa não corrigir. Queríamos saber se dá para resolver as pontas sozinhos.

  • A resposta em branco não precisa de LLM para ser reprovada.
  • A que cobre o gabarito inteiro não precisa de LLM para passar.
  • O meio é onde a decisão é difícil, e é só ele que deveria custar.
Uma chamada de LLM
1–3 s
por resposta, mais o custo da API
O modelo que fizemos
167 µs
por resposta, sem rede
Dados · modelo 13–6 min

Duas bases escolhidas por serem opostas

BaseO que éAlunosNão voltam
EdNet KT3autoestudo de inglês, adulto, coreano. Sem turma e sem matrícula: continuar é decisão de quem estuda26.54786,2%
OULADuniversidade britânica a distância, com turma, professor e abandono registrado25.4348,5%
Painel completo51.981
EdNet KT3 86,2% OULAD 8,5%
Fração que não volta no mês seguinte. Mesma janela de 30 dias, duas plataformas.

EdNet KT3, CC BY-NC 4.0. OULAD, CC BY 4.0. Os arquivos não estão no repositório porque o EdNet sozinho tem 4,2 GB; os scripts dizem onde baixar.

Dados · modelo 23–6 min

classEx: 1.167 respostas, cada uma avaliada três vezes

Respostas
1.167
de 249 alunos, em 8 tarefas
Idioma
alemão
macroeconomia, universitário
Nota média
3,50
desvio 0,70, escala de 1 a 5
Notas por resposta
3
execuções do GPT-4
uma linha do corpus enunciado · gabarito resposta do aluno nota GPT-4 · 1 nota GPT-4 · 2 nota GPT-4 · 3 média das três = alvo
Comparar uma execução com a outra é o que mede o teto do problema.

O alvo é nota de LLM, não de professor: é a limitação mais séria do modelo 2. Cerca de 87% das notas caem em 3 ou 4, então há pouquíssimo exemplo nas pontas.

Preparação3–6 min

Uma janela mede, a outra confere

dias 0 – 29 dias 30 – 59 o que o modelo vê o que ele tem que acertar medem recência e frequência teve atividade? então voltou
O dia 0 é o primeiro evento daquele aluno, não uma data do calendário.
  • Nada da segunda janela entra no cálculo dos eixos. É a regra que impede vazamento.
  • Quem teve menos de 30 eventos na primeira janela fica de fora.
  • O desfecho não foi rotulado por nós: "voltou" é ter qualquer atividade nos dias 30 a 59.
Método · métrica6–10 min

A métrica é AUC, e ela não é porcentagem de acerto

AUC, em uma frase

Sorteie dois alunos, um que voltou e um que não voltou. AUC é a probabilidade de o modelo ter dado risco maior para o que não voltou. 0,50 é jogar uma moeda; 1,00 é ordenar certo todos os pares. A métrica olha só a ordem dos riscos.

risco 0 risco 1 voltou não voltou este par está na ordem certa
AUC é a fração dos pares sorteados em que o aluno que não voltou recebeu o risco maior.

Acurácia mentiria aqui: no OULAD 91,5% dos alunos voltam, então um modelo que nunca alerta ninguém acerta 91,5% sem separar ninguém. Em AUC esse modelo fica em 0,50.

Modelo 1 · seleção6–10 min

Cada eixo foi testado sozinho, nas duas bases

Antes de juntar qualquer coisa, medimos a AUC de cada eixo isolado. Só entrou no modelo quem funcionou nas duas realidades.

0,50 · moeda 0,90 Recência Frequência Profundidade Volume não medível
Círculo cheio é o EdNet, vazado é o OULAD. A profundidade cai quase em cima da linha da moeda no OULAD.

Entram recência e frequência. A profundidade fica em 0,516 no OULAD, que é quase moeda. O volume nem é calculável lá, porque a base não registra hora.

Modelo 1 · método6–10 min

Regressão logística de duas variáveis, padronizadas por coorte

z = (valor do aluno − media da coorte) / desvio da coorte
risco = 1 / (1 + e^−(b0 + b1·z_recencia + b2·z_frequencia))
1 0 risco b0 + b1·z_recencia + b2·z_frequencia
Longe do centro a curva satura. É por isso que a escala dos eixos importa.
Coorte, e por que padronizar dentro dela

Coorte é o conjunto de alunos de uma mesma base. "Seis dias ativos em dez" quer dizer coisas diferentes no EdNet e no OULAD, então cada valor vira "quantos desvios acima ou abaixo da média daquela plataforma".

Modelo 1 · resultado10–13 min

O ganho é pequeno, e está declarado como pequeno

0,50 · moeda EdNet · melhor eixo 0,858 EdNet · modelo 0,873 OULAD · melhor eixo 0,879 OULAD · modelo 0,885
O eixo começa em 0,50, sem ampliação: o ganho aparece do tamanho que tem.
O que significa o "± 0,004"

Cada número é a média de 12 divisões independentes dos alunos entre treino e teste, com o desvio entre elas. Não é o resultado de uma divisão só: uma divisão sortuda já nos deu um número melhor que o real, e ele foi parar em vários lugares antes de ser corrigido.

A frequência faz quase todo o trabalho. O modelo acrescenta combinar os dois eixos de forma estável: o peso da recência é 3,2 vezes o da frequência nas 12 partições.

Modelo 1 · uso10–13 min

A ordem transfere entre plataformas. O nível não

O modelo não entrega um rótulo de risco, entrega uma posição na fila. Para alertar os 10% de maior risco de cada coorte, o corte muda de uma base para a outra:

EdNet 0,541 OULAD 0,708 risco 0 a área cheia é quem recebe alerta risco 1
As duas faixas cheias valem 10% de cada coorte. O corte que produz esses 10% é que muda.

Levar o limiar de uma base para a outra troca completamente quem é alertado. Por isso calibrar em cada plataforma é requisito de uso, não detalhe de ajuste fino.

Modelo 2 · método10–13 min

O modelo 2 compara dois conjuntos de palavras

Ele não chama LLM em momento nenhum: os únicos imports são re, collections, dataclasses e math. Separa o texto em palavras de três letras ou mais, tira as que aparecem em mais de 40% dos textos do tópico, transforma cada palavra restante em nó e cada par a até quatro posições em aresta.

gabarito juros reduzem consumo resposta juros aumentam consumo
Mesmos nós, mesma estrutura, sentidos opostos. Aresta é proximidade, não causa: cobertura alta não prova que a resposta está certa.
Modelo 2 · método10–13 min

Dez contagens, uma soma ponderada, uma nota

texto palavras grafo 10 contagens nota 1–5 percentual = (nota − 1) / 4 × 100
As três primeiras etapas são determinísticas. O aprendizado de máquina está só na passagem das dez contagens para a nota.

O que é contado

  • Quanto do gabarito a resposta cobre, em palavras distintas e em peso.
  • Quantos dos conceitos centrais aparecem.
  • Quanto da resposta não está no gabarito nem no enunciado.
  • Quantas ligações entre palavras reaparecem.
  • O tamanho: caracteres, nós e arestas.

Como isso vira nota

nota = b0 + Σ (peso · contagem)
nota = limitar(nota, 1, 5)

Os pesos vieram de uma regressão ridge ajustada no treino e estão fixos no módulo. Rodar o modelo não treina nada.

Método · métrica10–13 min

Como se mede um modelo que ordena respostas

Spearman

Correlação entre a ordem prevista e a ordem real das notas, de −1 a 1. Responde "as respostas melhores ficaram acima?", e não "o número da nota está certo?". É a métrica adequada para triagem, que é ordenar uma fila.

O teto, e por que ele não é 1,00

Cada resposta foi avaliada três vezes pelo mesmo GPT-4. Comparando duas dessas execuções entre si, a correlação é 0,883: é o quanto o avaliador concorda consigo mesmo. Como o alvo do treino é a média dessas notas, nenhum modelo ajustado contra elas passa muito disso.

A outra métrica das tabelas é QWK, que compara as notas arredondadas e penaliza mais os erros grandes que os pequenos.

Modelo 2 · resultado10–13 min

A linha de base aqui é contar palavras

Em avaliação automática de texto, resposta longa costuma ganhar nota maior. Se contar palavras chega perto do modelo, o resto não está fazendo nada.

contar palavras 0,283 contar caracteres 0,303 sobreposição crua 0,409 cobertura do gabarito 0,463 módulo completo 0,495 teto 0,883
A linha tracejada é a concordância do GPT-4 com ele mesmo. O espaço até ela é o que este trabalho não alcança.

O modelo ganha da melhor contagem isolada por 0,033, com intervalo de 95% entre 0,005 e 0,061, positivo em 99% das reamostragens por aluno. Em 12 partições, 0,495 ± 0,021.

Modelo 2 · uso10–13 min

Onde um Spearman de 0,50 é suficiente

10% mais baixos os 80% do meio 10% mais altos decide sozinho vão para a LLM decide sozinho
Cortando nos dois extremos, 20% das respostas deixam de ir para a LLM. O modelo erra 14% na ponta baixa e 10% na alta.
Fila de correção
1,80
nota real média das 5 piores previsões, contra 3,50 do conjunto
Custo por resposta
167 µs
contra 1 a 3 segundos de uma chamada

Ordenar exige menos do modelo do que pontuar. Por isso o uso defensável é escolher a ordem da fila e resolver as pontas, e não escrever uma nota na prova do aluno.

Limites13–15 min

O que tentamos e não deu certo

A primeira ideia para o modelo 2 era a intuitiva: dar mais texto do assunto à referência. Testamos acrescentar ao gabarito as respostas bem avaliadas de outros alunos da mesma tarefa.

só o gabarito 0,486 + as 5 melhores 0,497 + as 15 melhores 0,490 + as 40 melhores 0,428 + todas do treino 0,396
Cada bloco de texto novo na referência piora o resultado, até ficar abaixo de onde tinha começado.

Referência grande fica genérica, qualquer resposta cobre algum pedaço dela, inclusive a ruim, e a cobertura perde o poder de separar. Também descartados: LSA, que não mudou nada; boosting, pior que a regressão; e um encoder pré-treinado, +0,057 ao custo de 900 MB. No modelo 1, percentil em vez de padronização: AUC igual e calibração pior.

Limites13–15 min

Três erros nossos que quase viraram conclusão

1. Um teste que não testava

A primeira versão preenchia o eixo não medível do OULAD com outra coluna. O teste de replicação passava comparando uma coluna com ela mesma.

2. Um teste de vazamento vazio

Comparávamos valores crus contra padronizados treinando em uma base e testando na outra. Dava sempre o mesmo número, porque padronizar não muda a ordem e AUC só olha ordem.

3. Uma API que deixou omitir argumentos

A primeira medição do modelo 2 chamou a função de preparo só com o gabarito, sem o enunciado e sem as palavras frequentes do corpus. Deu 0,429, abaixo da cobertura sozinha, que dá 0,463. Íamos concluir que as outras nove contagens não valiam nada.

Chamando do jeito documentado o número é 0,495 e a conclusão inverte. A diferença de 0,066 é maior que o ganho de todas as nove contagens extras.

Limites13–15 min

O que estes números não dizem

Modelo 1

Mede permanência, não aprendizado.

Nenhum dos eixos prevê ganho de acerto entre um mês e outro. Quem aparece todo dia e não avança é classificado como engajado, porque é isso que a nossa definição diz. Pode não ser a definição que interessa a quem ensina.

Modelo 2

Aprendeu a concordar com o GPT-4.

O modelo não chama LLM para funcionar, mas o alvo do treino é nota de LLM. Se o GPT-4 erra de forma sistemática, nada nesta medição percebe, porque não há nota humana no corpus.

A janela de 30 dias foi escolhida por conveniência e não testamos alternativas. As duas bases são estrangeiras e de adultos. Os pesos do modelo 2 foram ajustados em alemão, em uma disciplina só: as contagens não dependem do idioma, os pesos dependem.

Reprodução13–15 min

Do clone aos números

git clone https://github.com/Geisbelly/core-trailup.git
cd core-trailup/seminario && pip install -r requirements.txt

# modelo 2: roda agora, o corpus esta no repositorio
cd scripts && python3 07_discursivo.py
python3 08_discursivo_operacao.py   # pre-filtro, triagem, custo
python3 09_conferir_port.py         # o JavaScript bate com o Python?

# modelo 1: precisa baixar as duas bases, ver dados/README.md
python3 01_preparar.py  02_eixos.py  03_vazamento.py
python3 04_treinar.py   05_calibrar.py  06_exportar.py

Cada script imprime o que mediu e o que aquilo quer dizer. Rodando do 01 ao 09 saem todos os números desta apresentação.

O 09_conferir_port.py existe porque o protótipo reimplementa o modelo 2 em JavaScript, e duas implementações da mesma coisa divergem em silêncio. Ele roda as duas sobre 200 respostas e falha se discordarem. Hoje batem até a décima quinta casa decimal.

Encerramento15 min

O que fica

  • Dois modelos baratos decidem onde gastar a chamada cara, e ganham da linha de base por uma margem pequena, declarada como pequena.
  • A mesma atividade significa coisas diferentes em plataformas diferentes: a ordem transfere, o nível não, e calibrar é requisito de uso.
  • Dar mais texto à referência do modelo 2 piorou o resultado de forma ordenada.
  • Todo número tem linha de base ao lado, desvio de 12 partições, e teto medido quando existe teto.

Protótipos: modelo 1, engajamento e modelo 2, resposta discursiva. Código, dados e diário em github.com/Geisbelly/core-trailup.

Geisbelly Victória e Maria Antonia. Obrigada. Perguntas?