Entre para a LISTA VIP da Black Friday

00

DIAS

00

HORAS

00

MIN

00

SEG

Clique para saber mais
Alura > Cursos de Inteligência Artificial > Cursos de IA para Dados > Conteúdos de IA para Dados > Primeiras aulas do curso Hugging Face: transferindo aprendizado de modelos de NLP

Hugging Face: transferindo aprendizado de modelos de NLP

Explorando o modelo pré-treinado - Apresentação

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?

o que vamos aprender?

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.

Pré-requisitos

Para acompanhar o conteúdo, é necessário ter conhecimento em Python e conceitos de Machine Learning.

Vamos começar?

Explorando o modelo pré-treinado - Utilizando o Hugging Face pipeline

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.

Instalando a biblioteca 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.

Escolhendo o modelo no Hugging Face

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.

Aplicando a 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.

Conclusão e Próximo passo

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.

Explorando o modelo pré-treinado - Realizando o deploy com Gradio

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?

Realizando o deploy com gradio

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".

Construindo a aplicação

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:

https://29d1079fb984296bd9.gradio.live

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.

Analisando as problemáticas

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.

Próximo passo

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!

Sobre o curso Hugging Face: transferindo aprendizado de modelos de NLP

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:

Aprenda IA para Dados acessando integralmente esse e outros cursos, comece hoje!

Conheça os Planos para Empresas