# HerBERT

## Обзор

Модель HerBERT была предложена в работе [KLEJ: Comprehensive Benchmark for Polish Language Understanding](https://huggingface.co/papers/2005.00630) П. Рыбака, Р. Мрочковского, Я. Трача и И. Гавлика. Это языковая модель на основе BERT, обученная на польских корпусах с использованием только цели MLM и динамического маскирования целых слов.

Аннотация из статьи следующая:

*В последние годы целая серия моделей на основе Transformer обеспечила значительный прогресс в задачах общего понимания естественного языка (NLU). Такой быстрый темп исследований был бы невозможен без общих бенчмарков NLU, позволяющих объективно сравнивать предлагаемые методы. Однако такие бенчмарки доступны лишь для небольшого числа языков. Чтобы смягчить эту проблему, мы представляем комплексный многозадачный бенчмарк для понимания польского языка, дополненный онлайн-таблицей лидеров. Он включает разнообразный набор задач, заимствованных из существующих датасетов для распознавания именованных сущностей, вопросно-ответных систем, текстовой импликации и других. Мы также вводим новую задачу анализа тональности для области электронной коммерции, названную Allegro Reviews (AR). Чтобы обеспечить единую схему оценки и поощрять модели, обобщающиеся на различные задачи NLU, бенчмарк включает датасеты из разных областей и приложений. Кроме того, мы публикуем HerBERT — модель на основе Transformer, обученную специально для польского языка, которая демонстрирует наилучшую среднюю производительность и достигает лучших результатов по трем из девяти задач. Наконец, мы предоставляем обширную оценку, включающую несколько стандартных базовых моделей и недавно предложенные многоязычные модели на основе Transformer.*

Эта модель была предоставлена пользователем [rmroczkowski](https://huggingface.co/rmroczkowski). Исходный код можно найти [здесь](https://github.com/allegro/HerBERT).

## Пример использования

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

Реализация Herbert аналогична `BERT`, за исключением метода токенизации. Справочник по API и примеры см. в [документации BERT](bert).

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

[Источник](https://github.com/huggingface/transformers/blob/main/src/transformers/models/herbert/tokenization_herbert.py#L28)

**Параметры:**

vocab_file (`str`) : Путь к файлу словаря.

merges_file (`str`) : Путь к файлу слияний.

cls_token (`str`, *необязательный*, по умолчанию `"<s>"`) : Токен классификатора.

unk_token (`str`, *необязательный*, по умолчанию `"<unk>"`) : Токен неизвестного слова.

pad_token (`str`, *необязательный*, по умолчанию `"<pad>"`) : Токен отступов.

mask_token (`str`, *необязательный*, по умолчанию `"<mask>"`) : Токен маски.

sep_token (`str`, *необязательный*, по умолчанию `"</s>"`) : Токен-разделитель.

vocab (`str`, `dict` или `list`, *необязательный*) : Пользовательский словарь.

merges (`str` или `list[str]`, *необязательный*) : Пользовательский список слияний.

Создайте BPE-токенизатор для HerBERT (на базе библиотеки tokenizers от HuggingFace).

Особенности:

- использует предтокенизатор BERT: BertPreTokenizer разделяет токены по пробелам, а также по знакам препинания. Каждое вхождение символа пунктуации обрабатывается отдельно.

Этот токенизатор наследуется от [TokenizersBackend](/docs/transformers/main/ru/main_classes/tokenizer#transformers.TokenizersBackend), который содержит большинство методов. За дополнительной информацией о методах следует обращаться к суперклассу.

