# PhoBERT

## Обзор

Модель PhoBERT была предложена в работе [PhoBERT: Pre-trained language models for Vietnamese](https://huggingface.co/papers/2003.00744) авторами Dat Quoc Nguyen и Anh Tuan Nguyen.

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

*Мы представляем PhoBERT в двух версиях — PhoBERT-base и PhoBERT-large — первые публичные модели крупномасштабного монолингвального предобучения для вьетнамского языка. Экспериментальные результаты показывают, что PhoBERT стабильно превосходит лучшую на сегодняшний день предобученную мультилингвальную модель XLM-R (Conneau et al., 2020) и улучшает состояние техники в нескольких задачах NLP, специфичных для вьетнамского языка, включая определение частей речи, синтаксический анализ зависимостей, распознавание именованных сущностей и вывод на естественном языке.*

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

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

```python
import torch

from transformers import AutoModel, AutoTokenizer

phobert = AutoModel.from_pretrained("vinai/phobert-base", device_map="auto")
tokenizer = AutoTokenizer.from_pretrained("vinai/phobert-base")

# INPUT TEXT MUST BE ALREADY WORD-SEGMENTED!
line = "Tôi là sinh_viên trường đại_học Công_nghệ ."

input_ids = torch.tensor([tokenizer.encode(line)])

with torch.no_grad():
    features = phobert(input_ids)  # Models outputs are now tuples
```

Реализация PhoBERT совпадает с реализацией BERT, за исключением токенизации. Сведения о классах конфигурации и их параметрах см. в [документации BERT](bert). Токенизатор, специфичный для PhoBERT, описан ниже.

## PhobertTokenizer[[transformers.PhobertTokenizer]]

#### transformers.PhobertTokenizer[[transformers.PhobertTokenizer]]

```python
transformers.PhobertTokenizer(vocab_file, merges_file, bos_token = '<s>', eos_token = '</s>', sep_token = '</s>', cls_token = '<s>', unk_token = '<unk>', pad_token = '<pad>', mask_token = '<mask>', **kwargs)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/phobert/tokenization_phobert.py#L49)

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

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

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

bos_token (`str`, *optional*, по умолчанию `"<s>"`) : Токен начала последовательности, использовавшийся во время предварительного обучения. Может использоваться в качестве токена классификатора последовательности. При построении последовательности с использованием специальных токенов этот токен не используется для обозначения начала последовательности. Для этой цели применяется токен `cls_token`.

eos_token (`str`, *необязательный*, по умолчанию `"</s>"`) : Токен конца последовательности. При построении последовательности с использованием специальных токенов этот токен не используется для обозначения конца последовательности. Вместо него применяется токен `sep_token`.

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

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

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

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

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

Создайте токенизатор PhoBERT. Основан на алгоритме Byte-Pair-Encoding.

Этот токенизатор наследуется от [PreTrainedTokenizer](/docs/transformers/v5.23.0/ru/main_classes/tokenizer#transformers.PythonBackend), который содержит большинство основных методов. Для получения дополнительной информации об этих методах пользователям следует обратиться к этому суперклассу.

#### add_from_file[[transformers.PhobertTokenizer.add_from_file]]

```python
add_from_file(f)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/phobert/tokenization_phobert.py#L325)

Загружает существующий словарь из текстового файла и добавляет его символы в этот экземпляр.

#### build_inputs_with_special_tokens[[transformers.PhobertTokenizer.build_inputs_with_special_tokens]]

```python
build_inputs_with_special_tokens(token_ids_0: list[int], token_ids_1: list[int] | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/phobert/tokenization_phobert.py#L144)

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

token_ids_0 (`list[int]`) : Список идентификаторов, к которым будут добавлены специальные токены.

token_ids_1 (`list[int]`, *необязательный*) : Необязательный второй список идентификаторов для пар последовательностей.

**Возвращает:** `list[int]`

Список [идентификаторов входных токенов](../glossary#input-ids) с соответствующими специальными токенами.

Создайте входные данные модели из последовательности или пары последовательностей для задач классификации последовательностей, объединяя их и добавляя специальные токены. Последовательность PhoBERT имеет следующий формат:

- одна последовательность: `<s> X </s>`
- пара последовательностей: `<s> A </s></s> B </s>`

#### convert_tokens_to_string[[transformers.PhobertTokenizer.convert_tokens_to_string]]

```python
convert_tokens_to_string(tokens)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/phobert/tokenization_phobert.py#L291)

Преобразует последовательность токенов (строку) в одну строку.

#### create_token_type_ids_from_sequences[[transformers.PhobertTokenizer.create_token_type_ids_from_sequences]]

```python
create_token_type_ids_from_sequences(token_ids_0: list[int], token_ids_1: list[int] | None = None)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/phobert/tokenization_phobert.py#L198)

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

token_ids_0 (`list[int]`) : Список идентификаторов.

token_ids_1 (`list[int]`, *необязательный*) : Необязательный второй список идентификаторов для пар последовательностей.

**Возвращает:** `list[int]`

Список нулей.

Создаёт маску на основе двух переданных последовательностей для использования в задаче классификации пар последовательностей. PhoBERT не использует идентификаторы типов токенов, поэтому возвращается список нулей.

#### get_special_tokens_mask[[transformers.PhobertTokenizer.get_special_tokens_mask]]

```python
get_special_tokens_mask(token_ids_0: list[int], token_ids_1: list[int] | None = None, already_has_special_tokens: bool = False)
```

[Источник](https://github.com/huggingface/transformers/blob/v5.23.0/src/transformers/models/phobert/tokenization_phobert.py#L170)

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

token_ids_0 (`list[int]`) : Список идентификаторов.

token_ids_1 (`list[int]`, *необязательный*) : Необязательный второй список идентификаторов для пар последовательностей.

already_has_special_tokens (`bool`, *необязательный*, по умолчанию `False`) : Указывает, является ли список токенов уже отформатированным со специальными токенами для модели.

**Возвращает:** `list[int]`

Список целых чисел в диапазоне [0, 1]: 1 для специального токена, 0 для токена последовательности.

Получить идентификаторы последовательностей из списка токенов, в который не добавлены специальные токены. Этот метод вызывается при добавлении специальных токенов с помощью метода `prepare_for_model` токенизатора.

