# BERTweet

## BERTweet

[BERTweet](https://huggingface.co/papers/2005.10200) имеет ту же архитектуру, что и [BERT-base](./bert), но обучен, как [RoBERTa](./roberta), на англоязычных твитах. Он демонстрирует отличные результаты на задачах, связанных с твитами, таких как определение частей речи, распознавание именованных сущностей и классификация текста.

Все исходные контрольные точки BERTweet можно найти в организации [VinAI Research](https://huggingface.co/vinai?search_models=BERTweet).

> [!TIP]
> См. документацию по [BERT](./bert) для дополнительных примеров применения BERTweet к различным языковым задачам.

Приведённый ниже пример показывает, как предсказать токен `<mask>` с помощью [Pipeline](/docs/transformers/main/ru/main_classes/pipelines#transformers.Pipeline), [AutoModel](/docs/transformers/main/ru/model_doc/auto#transformers.AutoModel) и из командной строки.

```python
from transformers import pipeline

pipeline = pipeline(
    task="fill-mask",
    model="vinai/bertweet-base",
    device=0
)
pipeline("Plants create <mask> through a process known as photosynthesis.")
```

```python
import torch

from transformers import AutoModelForMaskedLM, AutoTokenizer

tokenizer = AutoTokenizer.from_pretrained(
   "vinai/bertweet-base",
)
model = AutoModelForMaskedLM.from_pretrained(
    "vinai/bertweet-base",
    device_map="auto"
)
inputs = tokenizer("Plants create <mask> through a process known as photosynthesis.", return_tensors="pt").to(model.device)

with torch.no_grad():
    outputs = model(**inputs)
    predictions = outputs.logits

masked_index = torch.where(inputs['input_ids'] == tokenizer.mask_token_id)[1]
predicted_token_id = predictions[0, masked_index].argmax(dim=-1)
predicted_token = tokenizer.decode(predicted_token_id)

print(f"The predicted token is: {predicted_token}")
```

## Примечания

- Используйте [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer) или [BertweetTokenizer](/docs/transformers/main/ru/model_doc/bertweet#transformers.BertweetTokenizer), так как они предварительно загружены с кастомным словарем, адаптированным под токены, специфичные для твитов, такие как хэштеги (#), упоминания (@), эмодзи и распространенные сокращения. Убедитесь, что также установлена библиотека [emoji](https://pypi.org/project/emoji/).
- Входные данные следует дополнять справа (`padding="max_length"`), так как BERT использует абсолютные позиционные эмбеддинги.

## BertweetTokenizer[[transformers.BertweetTokenizer]]

#### transformers.BertweetTokenizer[[transformers.BertweetTokenizer]]

```python
transformers.BertweetTokenizer(vocab_file, merges_file, normalization = False, 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/main/src/transformers/models/bertweet/tokenization_bertweet.py#L51)

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

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

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

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

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>"`) : Токен, используемый для маскирования значений. Это тот токен, который применяется при обучении модели с использованием маскированного языкового моделирования. Именно этот токен модель будет пытаться предсказать.

Создаёт токенизатор BERTweet, использующий кодирование байт-парных кодировок (Byte-Pair-Encoding).

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

#### add_from_file[[transformers.BertweetTokenizer.add_from_file]]

```python
add_from_file(f)
```

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

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

#### convert_tokens_to_string[[transformers.BertweetTokenizer.convert_tokens_to_string]]

```python
convert_tokens_to_string(tokens)
```

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

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

#### normalizeToken[[transformers.BertweetTokenizer.normalizeToken]]

```python
normalizeToken(token)
```

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

Нормализация токенов в твите

#### normalizeTweet[[transformers.BertweetTokenizer.normalizeTweet]]

```python
normalizeTweet(tweet)
```

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

Нормализация сырого твита

#### save_vocabulary[[transformers.BertweetTokenizer.save_vocabulary]]

```python
save_vocabulary(save_directory: str, filename_prefix: str | None = None)
```

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

Сохраните файлы словаря и слияний в каталог.

