# HerBERT

## 概要

HerBERTモデルは、Piotr Rybak、Robert Mroczkowski、Janusz Tracz、Ireneusz Gawlik によって [KLEJ: Comprehensive Benchmark for Polish Language Understanding](https://huggingface.co/papers/2005.00630) で提案されました。これは、BERTベースの言語モデルであり、ポーランド語コーパスを用いて、単語全体を動的にマスクする MLM 目的関数のみで学習されています。

論文の抄録は以下の通りです。

*近年、Transformerベースのモデル群が、汎用自然言語理解（NLU）タスクにおいて大幅な性能向上を実現しました。こうした急速な研究の進展は、提案手法の公平な比較を可能にする汎用NLUベンチマークがあってこそ実現したものです。しかしながら、こうしたベンチマークはごく少数の言語に対してのみ利用可能です。この問題を緩和するため、ポーランド語理解のための包括的なマルチタスクベンチマークと、オンラインリーダーボードを併せて紹介します。本ベンチマークは、名前実体認識、質問応答、テキストエンタイルメントなど、既存のデータセットから採用した多様なタスクで構成されています。また、EC分野向けの新しい感情分析タスクであるAllegro Reviews（AR）も導入しました。共通の評価スキームを確保し、異なるNLUタスクに汎化できるモデルを奨励するため、本ベンチマークは異なるドメインやアプリケーションからのデータセットを含んでいます。さらに、ポーランド語に特化して訓練されたTransformerベースのモデルHerBERTを公開します。HerBERTは平均性能が最も高く、9つのタスクのうち3つで最良の結果を達成しています。最後に、いくつかの標準的なベースラインや、最近提案された多言語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]`、*省略可能*) : カスタムマージリスト。

HerBERT用のBPEトークナイザーを構築します（HuggingFaceのtokenizersライブラリをベースにしています）。

特記事項:

- BERTのプレトークナイザーを使用します。BertPreTokenizerはスペースと句読点でトークンを分割します。句読点の各出現箇所は個別に扱われます。

このトークナイザーは、ほとんどのメソッドを含む [TokenizersBackend](/docs/transformers/main/ja/main_classes/tokenizer#transformers.TokenizersBackend) を継承しています。メソッドに関する詳細については、スーパークラスを参照してください。

