Olá, tudo bem? Me chamo João, sou instrutor aqui na Alura e irei te acompanhar neste curso.
Audiodescrição: João se identifica como um homem de pele clara. Usa bigode e cavanhaque, e tem cabelo médio. Veste uma camiseta preta lisa e, ao fundo, há uma parede lisa com iluminação azul e verde.
Já considerou utilizar modelos de IA para realizar tarefas personalizadas e automatizar processos?
Neste curso, construiremos um projeto prático de NLP (Processamento de Linguagem Natural) utilizando a plataforma Hugging Face para a avaliação automática de redações.
Durante o projeto, utilizaremos modelos pré-treinados e aplicaremos seus conhecimentos para criar nosso próprio modelo, especializado em atribuir notas a redações. Exploraremos aplicações como tokenização de texto, treinamento de modelos e construção de aplicações com a ferramenta Gradle, focando na tarefa de classificação de texto.
No final, geraremos um aplicativo intitulado "Insira um texto para receber uma nota entre 0 e 1.000". À esquerda, temos um campo com o texto "Digite o texto" com os botões "Clear" e "Submit" abaixo; à direita, um campo com o nome "Nota da redação" e abaixo um botão "Flag".
Na caixa de texto à esquerda, onde colaremos um conteúdo. Ao clicar no botão "Submit", a aplicação executará o modelo de IA e exibirá uma nota, que, neste exemplo, é 800.
Ao final do projeto, seremos capazes de construir uma aplicação prática e útil. Essa ferramenta oferece um grande benefício para as pessoas usuárias, que recebem feedback instantâneo ao obterem as notas de suas redações. Além disso, a empresa que a implementa otimiza processos de avaliação de redações, economizando tempo e recursos, pois a aplicação permite avaliar inúmeras redações de diferentes pessoas em pouco tempo.
Aviso: Durante o curso, não abordaremos a transferência de aprendizado para modelos de geração de texto ou chatbots. Nosso foco será na tarefa de classificação de texto.
Para acompanhar o conteúdo, é necessário ter conhecimento em Python e conceitos de Machine Learning.
Vamos começar?
Um curso preparatório está procurando maneiras de ajudar seus estudantes a praticar mais a redação de textos. Atualmente, o curso só consegue avaliar uma redação por semana para cada estudante. Isso desmotiva os estudantes, pois eles não têm feedback sobre as notas das redações que produzem.
Nosso objetivo é construir uma aplicação de modelos de IA para avaliar automaticamente as redações. Assim, os estudantes poderão praticar quantas vezes quiserem e receber feedback imediato sobre seu desempenho nos estudos.
Como podemos criar uma aplicação para avaliar automaticamente redações? Utilizaremos a linguagem Python, o Google Colab e a plataforma **Hugging Face **para empregar modelos pré-treinados que realizam a classificação de texto.
transformers
O primeiro passo no ambiente do Colab é instalar a biblioteca transformers
, da plataforma Hugging Face. Na primeira célula de código, digitamos:
!pip install -q transformers
Executamos com "Ctrl + Enter".
Enquanto a biblioteca está sendo instalada, podemos usar a próxima célula para importar o método que utilizaremos para carregar os modelos da plataforma. O método é o pipeline()
. Na próxima célula, digitamos:
from transformers import pipeline
Executamos com "Ctrl + Enter".
Enquanto importamos o método, podemos explorar a plataforma Hugging Face para escolher o modelo que usaremos na tarefa de classificação de textos.
Na plataforma Hugging Face, para encontrar os modelos, acessamos o menu superior direito e clicamos em "Models" ("Modelos"). Nesta página, serão listados todos os modelos disponíveis na plataforma.
Precisamos de um modelo que classifique textos e atribuir uma nota a eles. Na plataforma, pode ser difícil encontrar um modelo específico para atribuição de notas a redações. No entanto, podemos usar um modelo que faz classificação de textos com base em labels personalizados.
Para isso, selecionaremos um modelo do tipo "Zero-Shot Classification", na seção "Natural Language Processing" ("Processamento de Linguagem Natural") à esquerda. Isso filtrará os modelos que realizam esse tipo de tarefa, incluindo modelos em várias línguas.
Precisamos selecionar um modelo em português. No menu lateral esquerdo, vamos até a filtragem e escolhemos a opção "Languages" ("Línguas"). Digitamos "Portuguese" na caixa de texto.
Isso filtrará apenas os modelos de classificação Zero-Shot em português. Selecionamos o modelo "Mel-Iza0/zero-shot". A página do modelo exibirá informações sobre como usá-lo. O que precisamos é do nome do caminho desse modelo.
No canto superior esquerdo da tela, encontramos o nome do modelo e um ícone para copiar esse nome. Clicamos no ícone de folha, que é "Copy Model Name to Clipboard" ("Copiar Nome do Modelo para a Área de Transferência").
Mel-Iza0/zero-shot
Em seguida, retornamos ao ambiente Colab. Carregamos o modelo e o armazenamos em uma variável chamada classificador
. Usamos pipeline()
para isso. Dentro dessa função, especificamos a tarefa como 'zero-shot-classification'
.
Como segundo parâmetro, indicamos o nome do modelo que vamos usar. Digitamos model=
e pressionamos "Ctrl + V" para colar o nome do modelo copiado da plataforma Hugging Face: model = 'Mel-Iza0/zero-shot'
.
Como terceiro parâmetro, devemos especificar o tokenizer
que o modelo usará para converter os textos em uma forma que ele consiga compreender. Usamos tokenizer=
e colamos o mesmo nome do modelo para especificar o tokenizer que será utilizado.
classificador = pipeline('zero-shot-classification', model = 'Mel-Iza0/zero-shot', tokenizer = 'Mel-Iza0/zero-shot')
Executamos a célula com "Ctrl + Enter". O modelo será carregado no ambiente Colab, o que pode levar algum tempo, pois os modelos são grandes e pesados.
Na próxima célula, inserimos o texto que será utilizado para a classificação. Digitamos texto = ''
e colamos a redação que já está copiada para a área de transferência do computador.
texto = 'Com o início da era digital, a capacidade de transmissão de informações cresceu apressuradamente, o que facilitou o contato com diversos assuntos, dentre eles a educação sexual . Entretanto, surgiram paralelamente algumas questões, das quais se destacam a preocupação com o momento adequado do ingresso do tema a vida do estudante, assim como de maneira antagônica, o aumento de casos de DST´S\\xa0\\xa0e gravidez indesejada nesse período, a qual leva a um maior questionamento sobre o começo desta pauta., A falta de comunicação sobre a sexualidade entre jovens no Brasil acarreta muitas das vezes\\xa0na inserção desses em um meio repleto de dúvidas, gerando a ocorrência de doenças sexualmente transmissíveis e de gravidez precoce. Com base nisso, muitos adolescentes buscam compreender melhor essas questões na internet, local onde se podem encontrar notícias falsas ou inadequadas para seu desenvolvimento, impedindo assim a correta compreensão do assunto, assim como a responsabilidade imposta por ele., Por outro lado, o diálogo em relação à sexualidade e seus tópicos é um tabu para pais e professores, que se sentem desorientados sobre a devida hora e os devidos critérios a serem tratados com os filhos e alunos, dificultando com que esses esclareçam suas dúvidas e entenda de maneira correta, o que levaria a conscientização da seriedade dessa discussão., Em virtude do que foi mencionado, as indagações a respeito divide várias opiniões e reflexões acima do que deve ser feito. É de extrema importância o Ministério da Educação, em parceria com o Ministério da Cidadania, implantar a educação sexual na matriz curricular estudantil dos jovens, através de aulas elaboradas e destinadas ao esclarecimento de perguntas, assim como palestras e programas com a intenção de propagar o conteúdo aos estudantes, contando com o suporte dos pais, funcionários e encarregados da rede de ensino no país, para que seja realizado constantemente.'
Com a redação colada, executamos a célula com "Ctrl + Enter". Agora, o texto está pronto para ser usado na classificação.
É bem simples realizar a classificação. Utilizamos o classificador que armazenamos na célula anterior. Digitamos classificador()
, passando o texto
que desejamos classificar como o primeiro parâmetro.
Como segundo parâmetro, indicamos as labels que serão usadas no modelo para a classificação. O modelo selecionará a label mais provável com base no texto fornecido.
As labels que vamos usar são as notas que desejamos atribuir. Para isso, escrevemos candidate_labels
. Essas labels possíveis serão colocadas em uma lista. Escrevemos []
e adicionamos as notas entre aspas, como 0, 1, 2, 3, e assim por diante, até 10, incluindo 7, 8, 9 e 10.
classificador(texto , candidate_labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])
Executamos a célula com "Ctrl + Enter" para que o modelo classifique o texto com base nas notas.
O processo pode levar algum tempo, pois o modelo transformará o texto para o formato adequado usando o tokenizer e, em seguida, realizará a classificação com base nas labels.
{'sequence': 'Com o início da era digital, a capacidade de transmissão de informações cresceu apressuradamente, o que facilitou o contato com diversos assuntos, dentre eles a educação sexual . Entretanto, surgiram paralelamente algumas questões, das quais se destacam a preocupação com o momento adequado do ingresso do tema a vida do estudante, assim como de maneira antagônica, o aumento de casos de DST´S\\xa0\\xa0e gravidez indesejada nesse período, a qual leva a um maior questionamento sobre o começo desta pauta., A falta de comunicação sobre a sexualidade entre jovens no Brasil acarreta muitas das vezes\\xa0na inserção desses em um meio repleto de dúvidas, gerando a ocorrência de doenças sexualmente transmissíveis e de gravidez precoce. Com base nisso, muitos adolescentes buscam compreender melhor essas questões na internet, local onde se podem encontrar notícias falsas ou inadequadas para seu desenvolvimento, impedindo assim a correta compreensão do assunto, assim como a responsabilidade imposta por ele., Por outro lado, o diálogo em relação à sexualidade e seus tópicos é um tabu para pais e professores, que se sentem desorientados sobre a devida hora e os devidos critérios a serem tratados com os filhos e alunos, dificultando com que esses esclareçam suas dúvidas e entenda de maneira correta, o que levaria a conscientização da seriedade dessa discussão., Em virtude do que foi mencionado, as indagações a respeito divide várias opiniões e reflexões acima do que deve ser feito. É de extrema importância o Ministério da Educação, em parceria com o Ministério da Cidadania, implantar a educação sexual na matriz curricular estudantil dos jovens, através de aulas elaboradas e destinadas ao esclarecimento de perguntas, assim como palestras e programas com a intenção de propagar o conteúdo aos estudantes, contando com o suporte dos pais, funcionários e encarregados da rede de ensino no país, para que seja realizado constantemente.',
'labels': ['0', '8', '9', '2', '10', '7', '5', '3', '6', '4', '1'],
'scores': [0.11875257641077042,
0.09610161185264587,
0.0960959792137146,
0.092938132584095,
0.09243637323379517,
0.0899648517370224,
0.08993928134441376,
0.08489268273115158,
0.08176548033952713,
0.08102324604988098,
0.07608980685472488]}
O código terminou de executar. No output, encontraremos as informações sobre o texto que foi classificado na seção sequence
. Se rolarmos para baixo no output, veremos as labels
da classificação e também os scores
.
Os scores indicam a probabilidade, conforme o modelo, de que o texto corresponda a cada uma dessas labels.
O modelo indicou que a label mais provável é 0. Portanto, para essa redação, o modelo atribuiu a nota 0 com uma probabilidade de 11%. Além disso, as próximas labels classificadas foram 8, 9, 2 e 10, nessa ordem, refletindo as probabilidades de cada nota para a redação.
Conseguimos carregar um modelo pré-treinado e realizar a tarefa de avaliar uma redação, atribuindo uma nota a ela. No entanto, isso ainda não é um aplicativo, pois estamos usando código e o estudante não consegue inserir a redação e receber uma nota de forma prática.
No próximo vídeo, continuaremos a construção da nossa aplicação baseada neste modelo pré-treinado.
Já carregamos um modelo pré-treinado da plataforma Hugging Face e o utilizamos para avaliar automaticamente uma redação, atribuindo uma nota de 0 a 10. No entanto, para um estudante de um curso preparatório, não é prático acessar o ambiente do Google Colab e usar programação para receber uma nota para sua redação. Então, como podemos tornar esse modelo acessível de forma interativa e prática?
Podemos usar a biblioteca Gradle para construir uma aplicação que tornará o modelo acessível de forma rápida e eficiente. Na primeira célula do código, inserimos o comando para instalar a biblioteca Gradle com o seguinte comando:
!pip install -q gradio
Executamos com "Ctrl + Enter".
Após a instalação, importamos a biblioteca usando import gradio as
e damos o apelido gr
para facilitar seu uso.
import gradio as gr
Executamos essa célula com "Ctrl + Enter".
Na próxima célula, começamos a construir a nossa aplicação. A aplicação receberá um texto e retornará uma nota para essa redação. Vamos criar uma função para isso. Escrevemos def mostrar_resultado(texto):
, pressionamos "Enter" e adicionamos o return
da função.
O valor retornado será o resultado do classificador()
que criamos anteriormente. Copiamos o código candidate_labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10']
e colamos logo após o return
.
def mostrar_resultado(texto):
return classificador(texto , candidate_labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])
Executamos a célula com "Ctrl + Enter", e agora temos a função principal da nossa aplicação.
Agora, vamos criar a interface da nossa aplicação. Na próxima célula, começamos com app = gr.Interface()
. Para configurar a função que será utilizada pelo aplicativo, definimos fn = mostrar_resultado,
, sendo mostrar_resultado
o nome da função.
O próximo parâmetro é inputs = ['text']
, que indica que o aplicativo receberá um input no formato texto. Isso criará uma caixa de texto onde podemos inserir a redação.
Em seguida, adicionamos o parâmetro outputs=['text']
, que especifica que o resultado também será exibido no formato texto. Isso cria uma caixa de texto para mostrar a nota retornada pela função. Por fim, adicionamos app.launch()
na mesma célula
app = gr.Interface(
fn = mostrar_resultado,
inputs = ['text'],
outputs = ['text']
)
app.launch()
Executamos com "Ctrl + Enter". A aplicação será gerada e um link será disponibilizado para acesso no navegador.
Link gerado no retorno do instrutor:
No ambiente do Colab, a aplicação também será exibida diretamente no output. Testamos o link clicando nele para abrir o aplicativo gerado no output. Para verificar o funcionamento, inserimos o mesmo texto utilizado na classificação inicial na caixa de texto. Em seguida, clicamos no botão "Submit". O output é processado e exibe o resultado da classificação do modelo.
Esse processo pode levar algum tempo, pois o modelo está realizando todo o processamento.
{'sequence': 'Com o início da era digital, a capacidade de transmissão de informações cresceu apressuradamente, o que facilitou o contato com diversos assuntos, dentre eles a educação sexual . Entretanto, surgiram paralelamente algumas questões, das quais se destacam a preocupação com o momento adequado do ingresso do tema a vida do estudante, assim como de maneira antagônica, o aumento de casos de DST´S\\xa0\\xa0e gravidez indesejada nesse período, a qual leva a um maior questionamento sobre o começo desta pauta., A falta de comunicação sobre a sexualidade entre jovens no Brasil acarreta muitas das vezes\\xa0na inserção desses em um meio repleto de dúvidas, gerando a ocorrência de doenças sexualmente transmissíveis e de gravidez precoce. Com base nisso, muitos adolescentes buscam compreender melhor essas questões na internet, local onde se podem encontrar notícias falsas ou inadequadas para seu desenvolvimento, impedindo assim a correta compreensão do assunto, assim como a responsabilidade imposta por ele., Por outro lado, o diálogo em relação à sexualidade e seus tópicos é um tabu para pais e professores, que se sentem desorientados sobre a devida hora e os devidos critérios a serem tratados com os filhos e alunos, dificultando com que esses esclareçam suas dúvidas e entenda de maneira correta, o que levaria a conscientização da seriedade dessa discussão., Em virtude do que foi mencionado, as indagações a respeito divide várias opiniões e reflexões acima do que deve ser feito. É de extrema importância o Ministério da Educação, em parceria com o Ministério da Cidadania, implantar a educação sexual na matriz curricular estudantil dos jovens, através de aulas elaboradas e destinadas ao esclarecimento de perguntas, assim como palestras e programas com a intenção de propagar o conteúdo aos estudantes, contando com o suporte dos pais, funcionários e encarregados da rede de ensino no país, para que seja realizado constantemente.',
'labels': ['0', '8', '9', '2', '10', '7', '5', '3', '6', '4', '1'],
'scores': [0.11875257641077042,
0.09610161185264587,
0.0960959792137146,
0.092938132584095,
0.09243637323379517,
0.0899648517370224,
0.08993928134441376,
0.08489268273115158,
0.08176548033952713,
0.08102324604988098,
0.07608980685472488]}
Após cerca de um minuto, o resultado aparece, igual ao output obtido anteriormente. O resultado inclui o texto inserido, as labels ordenadas da mais provável para a menos provável, e os scores, que representam a probabilidade de cada nota.
Para a pessoa estudante, o formato atual não é prático. Ela precisaria interpretar informações como {}
, verificar a sequência, e entender que a nota dela é a primeira na lista de labels.
Vamos simplificar a função do aplicativo para que retorne apenas a nota mais provável, que é a primeira informação da lista labels. Retornamos ao código do Colab, localizamos a função e, ao final do return classificador()
, adicionamos ['labels'][0]
para acessar a primeira nota.
def mostrar_resultado(texto):
return classificador(texto , candidate_labels = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10'])['labels'][0]
Executamos novamente essa célula para atualizar a função e, em seguida, executamos a célula de baixo com "Ctrl + Enter" para atualizar a aplicação do Gradle. É importante realizar essas etapas para refletir a nova função.
Agora, copiamos e colamos novamente a redação, e clicamos no botão "Submit". O resultado deve mostrar apenas a nota da pessoa estudante no output. Quando o processamento for concluído, o output exibirá somente a nota atribuída, que neste caso foi zero.
output
0
Agora, temos uma aplicação que avalia uma redação e atribui uma nota de zero a 10. A aplicação é prática e dinâmica, e um link online foi gerado para que a pessoa estudante possa utilizá-la.
No entanto, ao analisar os resultados, o modelo apresenta algumas limitações. Ele pode demorar para retornar o resultado e as probabilidades das notas são bastante próximas entre si. Por exemplo, a nota zero tem 11% de probabilidade, enquanto a nota 8 tem 9%, e a próxima também tem 9%, e assim por diante.
Esse modelo, por ser generalista, é capaz de realizar classificações, mas não é muito eficaz em atribuir notas personalizadas para textos. Para obter resultados mais precisos, seria necessário um modelo treinado especificamente para essa tarefa.
Nas próximas aulas, vamos utilizar técnicas para construir o nosso próprio modelo que vai fazer essa tarefa de forma mais rápida e também de forma mais eficiente, atribuindo uma nota que faz mais sentido. Vamos fazer isso nas próximas aulas!
O curso Hugging Face: transferindo aprendizado de modelos de NLP possui 109 minutos de vídeos, em um total de 44 atividades. Gostou? Conheça nossos outros cursos de IA para Dados em Inteligência Artificial, ou leia nossos artigos de Inteligência Artificial.
Matricule-se e comece a estudar com a gente hoje! Conheça outros tópicos abordados durante o curso:
Impulsione a sua carreira com os melhores cursos e faça parte da maior comunidade tech.
1 ano de Alura
Assine o PLUS e garanta:
Formações com mais de 1500 cursos atualizados e novos lançamentos semanais, em Programação, Inteligência Artificial, Front-end, UX & Design, Data Science, Mobile, DevOps e Inovação & Gestão.
A cada curso ou formação concluído, um novo certificado para turbinar seu currículo e LinkedIn.
No Discord, você tem acesso a eventos exclusivos, grupos de estudos e mentorias com especialistas de diferentes áreas.
Faça parte da maior comunidade Dev do país e crie conexões com mais de 120 mil pessoas no Discord.
Acesso ilimitado ao catálogo de Imersões da Alura para praticar conhecimentos em diferentes áreas.
Explore um universo de possibilidades na palma da sua mão. Baixe as aulas para assistir offline, onde e quando quiser.
Acelere o seu aprendizado com a IA da Alura e prepare-se para o mercado internacional.
1 ano de Alura
Todos os benefícios do PLUS e mais vantagens exclusivas:
Luri é nossa inteligência artificial que tira dúvidas, dá exemplos práticos, corrige exercícios e ajuda a mergulhar ainda mais durante as aulas. Você pode conversar com a Luri até 100 mensagens por semana.
Aprenda um novo idioma e expanda seus horizontes profissionais. Cursos de Inglês, Espanhol e Inglês para Devs, 100% focado em tecnologia.
Transforme a sua jornada com benefícios exclusivos e evolua ainda mais na sua carreira.
1 ano de Alura
Todos os benefícios do PRO e mais vantagens exclusivas:
Mensagens ilimitadas para estudar com a Luri, a IA da Alura, disponível 24hs para tirar suas dúvidas, dar exemplos práticos, corrigir exercícios e impulsionar seus estudos.
Envie imagens para a Luri e ela te ajuda a solucionar problemas, identificar erros, esclarecer gráficos, analisar design e muito mais.
Escolha os ebooks da Casa do Código, a editora da Alura, que apoiarão a sua jornada de aprendizado para sempre.