# HerBERT

## Resumen

El modelo HerBERT se propuso en [KLEJ: Comprehensive Benchmark for Polish Language Understanding](https://huggingface.co/papers/2005.00630) por Piotr Rybak, Robert Mroczkowski, Janusz Tracz e Ireneusz Gawlik. Es un modelo de lenguaje basado en BERT entrenado en corpus en polaco utilizando únicamente el objetivo MLM con enmascarado dinámico de palabras completas.

El resumen del artículo es el siguiente:

*En los últimos años, una serie de modelos basados en Transformer han desbloqueado mejoras significativas en tareas generales de comprensión del lenguaje natural (NLU). Este rápido ritmo de investigación no sería posible sin benchmarks generales de NLU, que permiten una comparación justa de los métodos propuestos. Sin embargo, dichos benchmarks solo están disponibles para un puñado de idiomas. Para mitigar este problema, presentamos un benchmark integral de multitarea para la comprensión del idioma polaco, acompañado de un tablero de clasificación en línea. Está compuesto por un conjunto diverso de tareas, adoptadas de conjuntos de datos existentes para el reconocimiento de entidades nombradas, la respuesta a preguntas, la inferencia textual y otras. También introducimos una nueva tarea de análisis de sentimiento para el dominio del comercio electrónico, denominada Allegro Reviews (AR). Para garantizar un esquema de evaluación común y promover modelos que generalicen a diferentes tareas de NLU, el benchmark incluye conjuntos de datos de diversos dominios y aplicaciones. Además, publicamos HerBERT, un modelo basado en Transformer entrenado específicamente para el idioma polaco, que presenta el mejor rendimiento promedio y obtiene los mejores resultados en tres de las nueve tareas. Por último, proporcionamos una evaluación exhaustiva, que incluye varios puntos de referencia estándar y modelos multilingües basados en Transformer propuestos recientemente.*

Este modelo fue aportado por [rmroczkowski](https://huggingface.co/rmroczkowski). El código original se puede encontrar [aquí](https://github.com/allegro/HerBERT).

## Ejemplo 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")
```

La implementación de Herbert es la misma que la de `BERT`, excepto por el método de tokenización. Consulte la [documentación de BERT](bert) para obtener la referencia de la API y ejemplos.

## 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)
```

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

**Parámetros:**

vocab_file (`str`) : Ruta al archivo de vocabulario.

merges_file (`str`) : Ruta al archivo de fusiones.

cls_token (`str`, *opcional*, valor predeterminado `"<s>"`) : El token del clasificador.

unk_token (`str`, *opcional*, valor predeterminado `"<unk>"`) : El token desconocido.

pad_token (`str`, *opcional*, por defecto `"<pad>"`) : El token de relleno.

mask_token (`str`, *opcional*, valor predeterminado `"<mask>"`) : El token de máscara.

sep_token (`str`, *opcional*, valor predeterminado `"</s>"`) : El token separador.

vocab (`str`, `dict` o `list`, *opcional*) : Diccionario de vocabulario personalizado.

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

Construya un tokenizador BPE para HerBERT (respaldado por la biblioteca tokenizers de HuggingFace).

Particularidades:

- usa el pretokenizador de BERT: BertPreTokenizer divide los tokens en espacios y también en puntuación. Cada aparición de un carácter de puntuación se tratará por separado.

Este tokenizador hereda de [TokenizersBackend](/docs/transformers/main/es/main_classes/tokenizer#transformers.TokenizersBackend), que contiene la mayoría de los métodos. Los usuarios deben consultar la superclase para obtener más información sobre los métodos.

