# GPT-Sw3

## Обзор

Модель GPT-Sw3 была впервые предложена в статье [Lessons Learned from GPT-SW3: Building the First Large-Scale Generative Language Model for Swedish](http://www.lrec-conf.org/proceedings/lrec2022/pdf/2022.lrec-1.376.pdf) авторами Ariel Ekgren, Amaru Cuba Gyllensten, Evangelia Gogoulou, Alice Heiman, Severine Verlinden, Joey Öhman, Fredrik Carlsson, Magnus Sahlgren.

С момента публикации первой статьи авторы расширили свою работу и обучили новые модели на своих новых корпусах объёмом 1,2 ТБ, получивших название The Nordic Pile.

GPT-Sw3 — это набор крупных предобученных трансформерных языковых моделей с архитектурой только декодера, разработанных AI Sweden в сотрудничестве с RISE и WASP WARA for Media and Language. GPT-Sw3 обучен на наборе данных, содержащем 320 млрд токенов на шведском, норвежском, датском, исландском, английском языках, а также на программном коде. Предобучение модели выполнялось с использованием цели каузального языкового моделирования (CLM) на базе реализации NeMo Megatron GPT.

Эта модель была предоставлена [AI Sweden Models](https://huggingface.co/AI-Sweden-Models).

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

```python
from transformers import AutoTokenizer, AutoModelForCausalLM

tokenizer = AutoTokenizer.from_pretrained("AI-Sweden-Models/gpt-sw3-356m")
model = AutoModelForCausalLM.from_pretrained("AI-Sweden-Models/gpt-sw3-356m", device_map="auto")

input_ids = tokenizer("Träd är fina för att", return_tensors="pt").to(model.device)["input_ids"]

generated_token_ids = model.generate(inputs=input_ids, max_new_tokens=10, do_sample=True)[0]

print(tokenizer.decode(generated_token_ids))
Träd är fina för att de är färgstarka. Men ibland är det fint
```

## Ресурсы

- [Руководство по задаче классификации текста](../tasks/sequence_classification)
- [Руководство по задаче классификации токенов](../tasks/token_classification)
- [Руководство по задаче каузального языкового моделирования](../tasks/language_modeling)

Реализация использует `GPT2Model` в связке с нашим `GPTSw3Tokenizer`. Справочник по API и примеры см. в [документации GPT2Model](gpt2).

Обратите внимание, что для использования нашего токенизатора требуется sentencepiece, который можно установить с помощью `pip install transformers[sentencepiece]` или `pip install sentencepiece`

## GPTSw3Tokenizer[[transformers.GPTSw3Tokenizer]]

#### transformers.GPTSw3Tokenizer[[transformers.GPTSw3Tokenizer]]

```python
transformers.GPTSw3Tokenizer(vocab_file, do_lower_case = False, remove_space = False, keep_accents = False, pad_token = None, unk_token = None, eos_token = None, bos_token = None, sp_model_kwargs: dict[str, typing.Any] | None = None, **kwargs)
```

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

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

vocab_file (`str`) : файл [SentencePiece](https://github.com/google/sentencepiece) (обычно имеет расширение *.spm*), содержащий словарь, необходимый для создания токенизатора.

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

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

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

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

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

eos_token (`str`, *необязательный*) : Токен конца последовательности, встречающийся во время предварительного обучения. Если не указан, по умолчанию используется '<|endoftext|>'

bos_token (`str`, *необязательный*) : Токен начала последовательности, который можно использовать для задач, следующих за предобучением, но не встречался во время предобучения. Если не указан, по умолчанию используется '' или '<|endoftext|>' в зависимости от размера модели.

sp_model_kwargs (`dict`, *необязательный*) : Будет передан в метод `SentencePieceProcessor.__init__()`. [Обёртка Python для SentencePiece](https://github.com/google/sentencepiece/tree/master/python) может использоваться, в частности, для установки:  - `enable_sampling`: Включает субсловную регуляризацию. - `nbest_size`: Параметры выборки для униграмм. Недействительно для BPE-Dropout.  - `nbest_size = {0,1}`: Выборка не выполняется. - `nbest_size > 1`: выборка из результатов nbest_size. - `nbest_size < 0`: предполагается, что nbest_size бесконечен, и выполняется выборка из всех гипотез (решётки) с использованием алгоритма forward-filtering-and-backward-sampling.  - `alpha`: Параметр сглаживания для выборки униграмм и вероятность dropout для операций слияния в BPE-dropout.

sp_model (`SentencePieceProcessor`) : процессор *SentencePiece*, используемый для каждого преобразования (строки, токены и идентификаторы).

whitespaces (`set`) : пробельные символы, которые заменяются при нормализации пробелов на этапе предобработки.

non_printing_characters_re (`Pattern`) : скомпилированное регулярное выражение для удаления непечатаемых символов на этапе предобработки.

Создайте токенизатор GPTSw3. Основан на [SentencePiece](https://github.com/google/sentencepiece).

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

Пример использования:
```python
>>> from transformers import GPTSw3Tokenizer

>>> tokenizer = GPTSw3Tokenizer.from_pretrained("AI-Sweden-Models/gpt-sw3-126m")
>>> tokenizer("Svenska är kul!")["input_ids"]
[1814, 377, 3617, 63504]
```

#### save_vocabulary[[transformers.GPTSw3Tokenizer.save_vocabulary]]

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

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

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

save_directory (`str`) : Каталог, в котором будет сохранен словарь.

filename_prefix (`str`, *необязательный*) : Необязательный префикс, который добавляется к именам сохраняемых файлов.

**Возвращает:** `tuple(str)`

Пути к сохранённым файлам.

Сохраните словарь sentencepiece (скопируйте исходный файл) в каталог.

