Ferramentas de IA 101

Guia Completo para Iniciantes sobre Ferramentas LLM do Hugging Face

mm
Adicione Unite.AI às suas fontes preferidas no Google
HUGGING FACE - COMPLETE GUIDE

O Hugging Face é um laboratório de pesquisa em inteligência artificial e um hub que construiu uma comunidade de acadêmicos, pesquisadores e entusiastas. Em um curto período de tempo, o Hugging Face conquistou uma presença significativa no espaço de inteligência artificial. Gigantes da tecnologia como Google (GOOGL ), Amazon (AMZN ) e Nvidia (NVDA ) investiram significativamente no startup de inteligência artificial Hugging Face, tornando sua valorização $4,5 bilhões.

Neste guia, vamos introduzir transformadores, LLMs e como a biblioteca Hugging Face desempenha um papel importante no fomento de uma comunidade de inteligência artificial de código aberto. Também vamos percorrer as características essenciais do Hugging Face, incluindo pipelines, datasets, modelos e muito mais, com exemplos práticos em Python.

Transformadores em NLP

Em 2017, a Universidade de Cornell publicou um artigo influente que apresentou transformadores. Esses são modelos de aprendizado profundo usados em NLP. Essa descoberta impulsionou o desenvolvimento de grandes modelos de linguagem, como ChatGPT.

Grandes modelos de linguagem ou LLMs são sistemas de inteligência artificial que usam transformadores para entender e criar textos semelhantes aos humanos. No entanto, criar esses modelos é caro, muitas vezes exigindo milhões de dólares, o que limita seu acesso a grandes empresas.

Hugging Face, fundada em 2016, visa tornar os modelos de NLP acessíveis a todos. Apesar de ser uma empresa comercial, oferece uma variedade de recursos de código aberto que ajudam as pessoas e organizações a construir e usar modelos de transformadores de forma acessível. O aprendizado de máquina é sobre ensinar computadores a realizar tarefas reconhecendo padrões, enquanto o aprendizado profundo, um subconjunto do aprendizado de máquina, cria uma rede que aprende de forma independente. Os transformadores são um tipo de arquitetura de aprendizado profundo que usa efetivamente e de forma flexível os dados de entrada, tornando-se uma escolha popular para construir grandes modelos de linguagem devido aos menores requisitos de tempo de treinamento.

Como o Hugging Facilita Projetos de NLP e LLM

Ecosistema Hugging Face - Modelos, conjunto de dados, métricas, transformadores, aceleração, tokenizadores

O Hugging Face tornou o trabalho com LLMs mais simples, oferecendo:

  1. Uma variedade de modelos pré-treinados para escolher.
  2. Ferramentas e exemplos para ajustar esses modelos às suas necessidades específicas.
  3. Opções de implantação fáceis para vários ambientes.

Um recurso valioso disponível por meio do Hugging Face é o Open LLM Leaderboard. Funcionando como uma plataforma abrangente, ele monitora, classifica e avalia a eficiência de uma gama de Grandes Modelos de Linguagem (LLMs) e chatbots, fornecendo uma análise discriminada dos avanços no domínio de código aberto

As avaliações LLM medem os modelos por meio de quatro métricas:

  • Desafio de Raciocínio AI2 (25 tiros) — uma série de perguntas em torno do currículo de ciência elementar.
  • HellaSwag (10 tiros) — um teste de inferência de senso comum que, embora simples para os humanos, é um desafio significativo para os modelos de ponta.
  • MMLU (5 tiros) — uma avaliação multifacetada que toca na proficiência de um modelo de texto em 57 domínios diversos, abrangendo matemática básica, direito e ciência da computação, entre outros.
  • TruthfulQA (0 tiros) — uma ferramenta para determinar a tendência de um modelo a ecoar informações frequentemente encontradas online.

As avaliações, descritas em termos como “25 tiros”, “10 tiros”, “5 tiros” e “0 tiros”, indicam o número de exemplos de prompts que um modelo recebe durante o processo de avaliação para medir seu desempenho e habilidades de raciocínio em vários domínios. Em paradigmas de “poucos tiros”, os modelos recebem alguns exemplos para ajudar a guiar suas respostas, enquanto em um cenário de “0 tiros”, os modelos não recebem exemplos e devem confiar apenas em seu conhecimento pré-existente para responder apropriadamente.

Componentes do Hugging

Pipelines

As ‘pipelines’ fazem parte da biblioteca de transformadores do Hugging Face, uma característica que ajuda na utilização fácil de modelos pré-treinados disponíveis no repositório do Hugging Face. Ela fornece uma API intuitiva para uma variedade de tarefas, incluindo análise de sentimento, resposta a perguntas, modelagem de linguagem mascarada, reconhecimento de entidades nomeadas e resumo.

As pipelines integram três componentes centrais do Hugging Face:

  1. Tokenizer: Prepara o texto para o modelo, convertendo-o em um formato que o modelo possa entender.
  2. Modelo: É o coração da pipeline, onde as previsões reais são feitas com base na entrada pré-processada.
  3. Pós-processador: Transforma as previsões brutas do modelo em uma forma legível por humanos.

Essas pipelines não apenas reduzem a codificação extensiva, mas também oferecem uma interface amigável para realizar várias tarefas de NLP.

Aplicações de Transformadores com a Biblioteca Hugging

Um destaque da biblioteca Hugging Face é a Biblioteca de Transformadores, que simplifica as tarefas de NLP conectando um modelo com as etapas necessárias de pré e pós-processamento, otimizando o processo de análise. Para instalar e importar a biblioteca, use os seguintes comandos:

[código language=”Python”]
pip install -q transformers
from transformers import pipeline
[/código]

Depois de fazer isso, você pode executar tarefas de NLP, começando com a análise de sentimento, que categoriza o texto em sentimentos positivos ou negativos. A função poderosa pipeline() da biblioteca serve como um hub que abrange outras pipelines e facilita aplicações específicas de tarefas em áudio, visão e domínios multimodais.

Aplicações Práticas

Classificação de Texto

A classificação de texto se torna fácil com a função pipeline() do Hugging Face. Aqui está como você pode iniciar uma pipeline de classificação de texto:

[código language=”Python”]
classificador = pipeline(“classificação-de-texto”)
[/código]

Para uma experiência prática, alimente uma string ou lista de strings na sua pipeline para obter previsões, que podem ser visualizadas de forma atraente usando a biblioteca Pandas do Python. Abaixo está um trecho de Python que demonstra isso:

[código language=”Python”]
frases = [“Estou animado para apresentar o mundo maravilhoso da IA.”,
“Espero que não me decepcione.”]

# Obtenha resultados de classificação para cada frase na lista
resultados = classificador(frases)

# Percorra cada resultado e imprima o rótulo e a pontuação
for i, resultado in enumerate(resultados):
print(f”Resultado {i + 1}:”)
print(f” Rótulo: {resultado[‘label’]}”)
print(f” Pontuação: {round(resultado[‘score’], 3)}\n”)
[/código]

Saída

[código language=”Bash”]
Resultado 1:
Rótulo: POSITIVO
Pontuação: 1.0

Resultado 2:
Rótulo: POSITIVO
Pontuação: 0.996
[/código]

Reconhecimento de Entidades Nomeadas (NER)

O NER é crucial para extrair objetos do mundo real, denominados “entidades nomeadas”, do texto. Utilize a pipeline de NER para identificar essas entidades de forma eficaz:

[código language=”Python”]
etiquetador_ner = pipeline(“ner”, estratégia_de_agregação=”simples”)
texto = “Elon Musk é o CEO da SpaceX (SPCX ).”
saídas = etiquetador_ner(texto)
print(saídas)
[/código]

Saída

[código language=”Bash”] Elon Musk: PESSOA, SpaceX: ORGANIZAÇÃO [/código]

Resposta a Perguntas

A resposta a perguntas envolve extrair respostas precisas a perguntas específicas de um contexto dado. Inicie uma pipeline de resposta a perguntas e insira sua pergunta e contexto para obter a resposta desejada:

[código language=”Python”]
leitor = pipeline(“question-answering”)
texto = “Hugging Face é uma empresa que cria ferramentas para NLP. É sediada em Nova York e foi fundada em 2016.”
pergunta = “Onde a Hugging Face está sediada?”
saídas = leitor(pergunta=pergunta, contexto=texto)
print(saídas)
[/código]

Saída

[código language=”Bash”] { ‘pontuação’: 0.998, ‘início’: 51, ‘fim’: 60, ‘resposta’: ‘Nova York’ } [/código]

A função pipeline() do Hugging Face oferece uma variedade de pipelines pré-construídas para diferentes tarefas, além da classificação de texto, NER e resposta a perguntas. Abaixo estão detalhes sobre um subconjunto de tarefas disponíveis:

Tabela: Tarefas de Pipeline do Hugging Face

Tarefa Descrição Identificador de Pipeline
Geração de Texto Gere texto com base em um prompt dado pipeline(tarefa=”geração-de-texto”)
Sumarização Sumarize um texto ou documento longo pipeline(tarefa=”sumarização”)
Classificação de Imagem Rotule uma imagem de entrada pipeline(tarefa=”classificação-de-imagem”)
Classificação de Áudio Categorize dados de áudio pipeline(tarefa=”classificação-de-áudio”)
Resposta a Perguntas Visuais Responda a uma pergunta usando uma imagem e uma pergunta pipeline(tarefa=”vqa”)

 

Para descrições detalhadas e mais tarefas, consulte a documentação da pipeline no site do Hugging Face.

Por que o Hugging está mudando seu foco para Rust

Safetensors e tokenizer do Hugging Face em Rust

Página do GitHub do Safetensors e Tokenizer do Hugging Face

O ecossistema do Hugging Face começou a usar Rust em suas bibliotecas, como safetensors e tokenizadores.

O Hugging Face também lançou recentemente um novo framework de aprendizado de máquina chamado Candle. Ao contrário dos frameworks tradicionais que usam Python, o Candle é construído com Rust. O objetivo por trás do uso de Rust é melhorar o desempenho e simplificar a experiência do usuário, além de suportar operações de GPU.

O objetivo principal do Candle é facilitar a inferência sem servidor, tornando possível a implantação de binários leves e removendo o Python dos processos de produção, que às vezes pode desacelerar os processos devido a suas sobrecargas. Esse framework surge como uma solução para superar os problemas encontrados com frameworks de aprendizado de máquina completos, como o PyTorch, que são grandes e lentos ao criar instâncias em um cluster.

Vamos explorar por que Rust está se tornando uma escolha mais popular do que Python.

  1. Velocidade e Desempenho – Rust é conhecido por sua velocidade incrível, superando o Python, que é tradicionalmente usado em frameworks de aprendizado de máquina. O desempenho do Python pode ser desacelerado devido ao seu Global Interpreter Lock (GIL), mas Rust não enfrenta esse problema, prometendo uma execução mais rápida e, consequentemente, um melhor desempenho em projetos onde é implementado.
  2. Segurança – Rust oferece garantias de segurança de memória sem um coletor de lixo, um aspecto essencial para garantir a segurança de sistemas concorrentes. Isso desempenha um papel crucial em áreas como safetensors, onde a segurança no manuseio de estruturas de dados é uma prioridade.

Safetensors

Os safetensors se beneficiam da velocidade e dos recursos de segurança do Rust. Os safetensors envolvem a manipulação de tensores, uma entidade matemática complexa, e ter o Rust garante que as operações não sejam apenas rápidas, mas também seguras, evitando bugs e problemas de segurança que poderiam surgir do mau manuseio da memória.

Tokenizer

Os tokenizadores lidam com a quebra de frases ou expressões em unidades menores, como palavras ou termos. O Rust ajuda nesse processo, acelerando o tempo de execução e garantindo que o processo de tokenização não seja apenas preciso, mas também rápido, melhorando a eficiência das tarefas de processamento de linguagem natural.

No núcleo do tokenizador do Hugging Face está o conceito de tokenização de subpalavras, que busca um equilíbrio delicado entre a tokenização de nível de palavra e de caractere para otimizar a retenção de informações e o tamanho do vocabulário. Ele funciona por meio da criação de subtokens, como “##ing” e “##ed”, mantendo a riqueza semântica enquanto evita um vocabulário inflado.

A tokenização de subpalavras envolve uma fase de treinamento para identificar o equilíbrio mais eficaz entre a tokenização de nível de caractere e de palavra. Ela vai além de regras simples de prefixo e sufixo, exigindo uma análise abrangente de padrões de linguagem em grandes corpora textuais para projetar um tokenizador de subpalavras eficiente. O tokenizador gerado é capaz de lidar com palavras novas, quebrando-as em subpalavras conhecidas, mantendo um alto nível de compreensão semântica.

Componentes de Tokenização

A biblioteca de tokenizadores divide o processo de tokenização em várias etapas, cada uma abordando um aspecto distinto da tokenização. Vamos mergulhar nesses componentes:

  • Normalizador: Aplica transformações iniciais na string de entrada, aplicando ajustes necessários, como conversão para minúsculas, normalização de Unicode e remoção de espaços em branco.
  • Pré-tokenizador: Responsável por fragmentar a string de entrada em pré-segmentos, determinando as divisões com base em regras pré-definidas, como delimitação por espaços.
  • Modelo: Supervisiona a descoberta e criação de subtokens, adaptando-se às especificidades dos seus dados de entrada e oferecendo capacidades de treinamento.
  • Pós-processador: Melhora as características de construção para facilitar a compatibilidade com muitos modelos baseados em transformadores, como o BERT, adicionando tokens como [CLS] e [SEP].

Para começar a usar os tokenizadores do Hugging Face, instale a biblioteca usando o comando pip install tokenizers e importe-a para o seu ambiente Python. A biblioteca pode tokenizar grandes quantidades de texto em muito pouco tempo, economizando recursos computacionais valiosos para tarefas mais intensivas, como o treinamento de modelos.

A biblioteca de tokenizadores usa Rust, que herda a semelhança sintática do C++ enquanto introduz conceitos novos no design de linguagens de programação. Combinado com vinculações Python, garante que você desfrute do desempenho de uma linguagem de nível inferior enquanto trabalha em um ambiente Python.

Conjuntos de Dados

Conjuntos de dados do Hugging Face

Conjuntos de dados do Hugging Face

Os conjuntos de dados são a base dos projetos de inteligência artificial. O Hugging Face oferece uma ampla variedade de conjuntos de dados, adequados para uma gama de tarefas de NLP e mais. Para usá-los de forma eficaz, é essencial entender o processo de carregar e analisar esses conjuntos de dados. Abaixo está um script Python bem comentado que demonstra como explorar conjuntos de dados disponíveis no Hugging Face:

[código language=”Python”]
from datasets import load_dataset
# Carregue um conjunto de dados
dataset = load_dataset(‘squad’)
# Exiba a primeira entrada
print(dataset[0])
[/código]

Este script usa a função load_dataset para carregar o conjunto de dados SQuAD, uma escolha popular para tarefas de resposta a perguntas.

Utilizando Modelos Pré-treinados e Unindo Tudo

Modelos pré-treinados formam a espinha dorsal de muitos projetos de aprendizado profundo, permitindo que pesquisadores e desenvolvedores iniciem seus projetos sem começar do zero. O Hugging Face facilita a exploração de uma ampla gama de modelos pré-treinados, como mostrado no código abaixo:

[código language=”Python”]
from transformers import AutoModelForQuestionAnswering, AutoTokenizer

# Carregue o modelo pré-treinado e o tokenizador
modelo = AutoModelForQuestionAnswering.from_pretrained(‘bert-large-uncased-whole-word-masking-finetuned-squad’)
tokenizador = AutoTokenizer.from_pretrained(‘bert-large-uncased-whole-word-masking-finetuned-squad’)

# Exiba a arquitetura do modelo
print(modelo)
[/código]

Com o modelo e o tokenizador carregados, agora podemos criar uma função que pegue um texto e uma pergunta como entradas e retorne a resposta extraída do texto. Vamos usar o tokenizador para processar o texto de entrada e a pergunta em um formato compatível com o modelo e, em seguida, alimentaremos essa entrada processada no modelo para obter a resposta:

[código language=”Python”]

def obter_resposta(texto, pergunta):
# Tokenize o texto de entrada e a pergunta
entradas = tokenizador(pergunta, texto, return_tensors=’pt’, max_length=512, truncamento=True)
saidas = modelo(**entradas)

# Obtenha as pontuações de início e fim para a resposta
inicio_resposta = torch.argmax(saidas.start_logits)
fim_resposta = torch.argmax(saidas.end_logits) + 1

resposta = tokenizador.convert_tokens_to_string(tokenizador.convert_ids_to_tokens(entradas[‘input_ids’][0][inicio_resposta:fim_resposta]))
return resposta

[/código]

No trecho de código, importamos os módulos necessários do pacote transformers, então carregamos um modelo pré-treinado e seu tokenizador correspondente usando o método from_pretrained. Escolhemos um modelo BERT ajustado no conjunto de dados SQuAD.

Vamos ver um exemplo de caso de uso dessa função, onde temos um parágrafo de texto e queremos extrair uma resposta específica para uma pergunta a partir dele:

[código language=”Python”]

texto = “””
A Torre Eiffel, localizada em Paris, França, é uma das marcas mais icônicas do mundo. Foi projetada por Gustave Eiffel e concluída em 1889. A torre tem 324 metros de altura e foi a estrutura feita pelo homem mais alta do mundo no momento de sua conclusão.
“””

pergunta = “Quem projetou a Torre Eiffel?”

# Obtenha a resposta para a pergunta
resposta = obter_resposta(texto, pergunta)
print(f”A resposta para a pergunta é: {resposta}”)
# Saída: A resposta para a pergunta é: Gustave Eiffel

[/código]

Nesse script, construímos uma função obter_resposta que pega um texto e uma pergunta, tokeniza-os apropriadamente e usa o modelo pré-treinado BERT para extrair a resposta do texto. Ele demonstra uma aplicação prática da biblioteca de transformadores do Hugging Face para construir um sistema simples, mas poderoso, de resposta a perguntas. Para entender os conceitos bem, é recomendado experimentar com um Notebook do Google Colab.

Conclusão

Por meio de sua ampla gama de ferramentas de código aberto, modelos pré-treinados e pipelines de uso fácil, o Hugging Face permite que profissionais experientes e novatos mergulhem no vasto mundo da inteligência artificial com facilidade e compreensão. Além disso, a iniciativa de integrar Rust, devido às suas características de velocidade e segurança, destaca o compromisso do Hugging Face em fomentar a inovação enquanto assegura eficiência e segurança em aplicações de inteligência artificial. O trabalho transformador do Hugging Face não apenas democratiza o acesso a ferramentas de inteligência artificial de alto nível, mas também nutre um ambiente colaborativo para aprendizado e desenvolvimento no espaço de inteligência artificial, facilitando um futuro onde a inteligência artificial é acessível a todos, comprometidos com a inovação enquanto garantem eficiência e segurança em aplicações de inteligência artificial. O trabalho transformador do Hugging Face não apenas democratiza o acesso a ferramentas de inteligência artificial de alto nível, mas também nutre um ambiente colaborativo para aprendizado e desenvolvimento no espaço de inteligência artificial, facilitando um futuro onde a inteligência artificial é acessível a todos.

Eu passei os últimos cinco anos me imergindo no fascinante mundo de Aprendizado de Máquina e Aprendizado Profundo. Minha paixão e expertise me levaram a contribuir para mais de 50 projetos de engenharia de software diversificados, com um foco particular em IA/ML. Minha curiosidade contínua também me levou em direção ao Processamento de Linguagem Natural, um campo que estou ansioso para explorar mais.