# Filosofia

Transformers é uma biblioteca com foco em PyTorch. Ela oferece modelos fiéis aos seus artigos, fáceis de usar e fáceis de modificar.

Um artigo mais longo e aprofundado, com exemplos, visualizações e cronogramas, está disponível [aqui](https://huggingface.co/spaces/transformers-community/Transformers-tenets) como nossa referência canônica.

> [!NOTE]
> Nossa filosofia evolui por meio da prática. A seguir, apresentamos nossos princípios atuais e estáveis.

## Para quem é esta biblioteca

- Pesquisadores e educadores que exploram ou estendem arquiteturas de modelos.
- Profissionais que fazem fine-tuning, avaliação ou servem modelos.
- Engenheiros que desejam um modelo pré-treinado que “funciona” com uma API previsível.

## O que você pode esperar

- Cada modelo requer três classes principais: [configuration](./main_classes/configuration), [models](./main_classes/model) e uma classe de pré-processamento. [Tokenizers](./main_classes/tokenizer) lidam com NLP, [image processors](./main_classes/image_processor) lidam com imagens, [video processors](./main_classes/video_processor) lidam com vídeos, [feature extractors](./main_classes/feature_extractor) lidam com áudio e [processors](./main_classes/processors) lidam com entradas multimodais.

- Todas essas classes podem ser inicializadas de uma forma simples e unificada a partir de instâncias pré-treinadas, usando o método comum `from_pretrained()`, que baixa (se necessário), faz o cache e carrega a instância da classe relacionada e os dados associados (hiperparâmetros das configurações, vocabulário dos tokenizers, parâmetros dos processors e pesos dos modelos) a partir de um checkpoint pré-treinado fornecido no [Hugging Face Hub](https://huggingface.co/models) ou do seu próprio checkpoint salvo.
- Além dessas três classes base, a biblioteca oferece duas APIs: [pipeline()](/docs/transformers/main/pt/main_classes/pipelines#transformers.pipeline) para usar rapidamente um modelo para inferência em uma tarefa específica e [Trainer](/docs/transformers/main/pt/main_classes/trainer#transformers.Trainer) para treinar ou ajustar finamente um modelo PyTorch rapidamente.

## Princípios fundamentais

Os seguintes princípios se consolidaram ao longo do tempo e estão detalhados em nosso novo post de blog sobre filosofia [blog post](https://huggingface.co/spaces/transformers-community/Transformers-tenets). Eles orientam as decisões dos mantenedores ao revisar PRs e contribuições.

> - **Fonte da Verdade.** As implementações devem ser fiéis aos resultados oficiais e ao comportamento pretendido. - **Um Modelo, Um Arquivo.** A lógica central de inferência/treino é visível de cima a baixo no arquivo do modelo que os usuários leem. - **O Código é o Produto.** Otimize para leitura e diff. Prefira nomes explícitos a indireções engenhosas. - **Padronize, Não Abstraia.** Mantenha o comportamento específico do modelo no modelo. Use interfaces compartilhadas apenas para infraestrutura genérica. - **DRY\*** (Repita quando ajudar os usuários). Os arquivos de modelagem do usuário final permanecem autocontidos. A infraestrutura é fatorada. - **API Mínima para o Usuário.** Poucos caminhos de código, kwargs previsíveis, métodos estáveis. - **Compatibilidade com Versões Anteriores.** As superfícies públicas não devem quebrar. Artefatos antigos do Hub devem continuar funcionando. - **Superfície Pública Consistente.** Nomenclatura, saídas e diagnósticos opcionais são alinhados e testados.

## Principais classes

- As [**classes de configuração**](./main_classes/configuration) armazenam os hiperparâmetros necessários para construir um modelo. Isso inclui o número de camadas e o tamanho oculto. Você nem sempre precisa instanciá-los manualmente. Ao usar um modelo pré-treinado sem modificações, a criação do modelo instancia automaticamente a configuração.
- As **classes de modelo** são modelos do PyTorch ([torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module)), encapsulados por pelo menos um [PreTrainedModel](/docs/transformers/main/pt/main_classes/model#transformers.PreTrainedModel).

- **Transformers modulares.** Os contribuidores escrevem um pequeno fragmento `modular_*.py` que declara a reutilização de componentes existentes. A biblioteca expande automaticamente esse fragmento para o arquivo visível `modeling_*.py`, que os usuários leem e depuram. Os mantenedores revisam o fragmento; os usuários modificam o arquivo expandido. Isso preserva o princípio de “Um Modelo, Um Arquivo” sem a deriva de código repetitivo. Consulte [a documentação de contribuição](./modular_transformers) para mais informações.

- As **classes de pré-processamento** convertem os dados brutos em um formato aceito pelo modelo. Um [tokenizer](./main_classes/tokenizer) armazena o vocabulário de cada modelo e fornece métodos para codificar e decodificar strings em uma lista de índices de incorporação de tokens. Os [processadores de imagem](./main_classes/image_processor) pré-processam entradas visuais, os [processadores de vídeo](./main_classes/video_processor) pré-processam entradas de vídeo, os [extratores de recursos](./main_classes/feature_extractor) pré-processam entradas de áudio e os [processadores](./main_classes/processors) pré-processam entradas multimodais.

Todas essas classes podem ser instanciadas a partir de instâncias pré-treinadas, salvas localmente e compartilhadas no Hub com três métodos:

- `from_pretrained()` permite instanciar um modelo, uma configuração e uma classe de pré-processamento a partir de uma versão pré-treinada, seja fornecida pela própria biblioteca (os modelos suportados podem ser encontrados no [Model Hub](https://huggingface.co/models)) ou armazenada localmente (ou em um servidor) pelo usuário.
- `save_pretrained()` permite salvar um modelo, uma configuração e uma classe de pré-processamento localmente para que possam ser recarregados usando `from_pretrained()`.
- `push_to_hub()` permite compartilhar um modelo, uma configuração e uma classe de pré-processamento no Hub, tornando-os facilmente acessíveis a todos.

