# HerBERT

## Visão geral

O modelo HerBERT foi proposto em [KLEJ: Comprehensive Benchmark for Polish Language Understanding](https://huggingface.co/papers/2005.00630) por Piotr Rybak, Robert Mroczkowski, Janusz Tracz e Ireneusz Gawlik. Trata-se de um modelo de linguagem baseado em BERT, treinado em corpora poloneses usando apenas o objetivo MLM com mascaramento dinâmico de palavras inteiras.

O resumo do artigo é o seguinte:

*Nos últimos anos, uma série de modelos baseados em Transformer desbloqueou melhorias significativas em tarefas gerais de compreensão de linguagem natural (NLU). Esse ritmo acelerado de pesquisa não seria possível sem benchmarks gerais de NLU, que permitem uma comparação justa dos métodos propostos. No entanto, esses benchmarks estão disponíveis apenas para um pequeno número de idiomas. Para mitigar esse problema, introduzimos um benchmark abrangente de múltiplas tarefas para a compreensão da língua polonesa, acompanhado por um ranking online. Ele consiste em um conjunto diversificado de tarefas, adotadas de conjuntos de dados existentes para reconhecimento de entidades nomeadas, question-answering, inferência textual e outras. Também introduzimos uma nova tarefa de análise de sentimento para o domínio de e-commerce, chamada Allegro Reviews (AR). Para garantir um esquema de avaliação comum e promover modelos que generalizam para diferentes tarefas de NLU, o benchmark inclui conjuntos de dados de domínios e aplicações variados. Além disso, liberamos o HerBERT, um modelo baseado em Transformer treinado especificamente para a língua polonesa, que apresenta o melhor desempenho médio e obtém os melhores resultados em três das nove tarefas. Por fim, fornecemos uma avaliação extensa, incluindo vários baselines padrão e modelos multilíngues baseados em Transformer propostos recentemente.*

Este modelo foi contribuído por [rmroczkowski](https://huggingface.co/rmroczkowski). O código original pode ser encontrado [aqui](https://github.com/allegro/HerBERT).

## Exemplo de uso

```python
from transformers import HerbertTokenizer, RobertaModel

tokenizer = HerbertTokenizer.from_pretrained("allegro/herbert-klej-cased-tokenizer-v1")
model = RobertaModel.from_pretrained("allegro/herbert-klej-cased-v1", device_map="auto")

encoded_input = tokenizer.encode("Kto ma lepszą sztukę, ma lepszy rząd – to jasne.", return_tensors="pt").to(model.device)
outputs = model(encoded_input)

# HerBERT can also be loaded using AutoTokenizer and AutoModel:
from transformers import AutoModel, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained("allegro/herbert-klej-cased-tokenizer-v1")
model = AutoModel.from_pretrained("allegro/herbert-klej-cased-v1", device_map="auto")
```

A implementação do Herbert é a mesma do `BERT`, exceto pelo método de tokenização. Consulte a [documentação do BERT](bert) para referência da API e exemplos.

## HerbertTokenizer[[transformers.HerbertTokenizer]]

#### transformers.HerbertTokenizer[[transformers.HerbertTokenizer]]

```python
transformers.HerbertTokenizer(vocab: str | dict[str, int] | None = None, merges: str | list[str] | None = None, cls_token: str = '<s>', unk_token: str = '<unk>', pad_token: str = '<pad>', mask_token: str = '<mask>', sep_token: str = '</s>', vocab_file: str | None = None, merges_file: str | None = None, **kwargs)
```

[Origem](https://github.com/huggingface/transformers/blob/main/src/transformers/models/herbert/tokenization_herbert.py#L28)

**Parâmetros:**

vocab_file (`str`) : Caminho para o arquivo de vocabulário.

merges_file (`str`) : Caminho para o arquivo de mesclagens.

cls_token (`str`, *opcional*, padrão `"<s>"`) : O token do classificador.

unk_token (`str`, *opcional*, padrão `"<unk>"`) : O token desconhecido.

pad_token (`str`, *opcional*, padrão `"<pad>"`) : O token de preenchimento.

mask_token (`str`, *opcional*, padrão `"<mask>"`) : O token de máscara.

sep_token (`str`, *opcional*, padrão `"</s>"`) : O token separador.

vocab (`str`, `dict` ou `list`, *opcional*) : Dicionário de vocabulário personalizado.

merges (`str` ou `list[str]`, *opcional*) : Lista de mesclagens personalizadas.

Construa um tokenizador BPE para HerBERT (baseado na biblioteca tokenizers da HuggingFace).

Particularidades:

- usa o pré-tokenizador do BERT: BertPreTokenizer divide os tokens em espaços e também em pontuação. Cada ocorrência de um caractere de pontuação será tratada separadamente.

Este tokenizer herda de [TokenizersBackend](/docs/transformers/main/pt/main_classes/tokenizer#transformers.TokenizersBackend), que contém a maioria dos métodos. Os usuários devem consultar a superclasse para obter mais informações sobre os métodos.

