# CodeGen

## Обзор

Модель CodeGen была предложена в работе [A Conversational Paradigm for Program Synthesis](https://huggingface.co/papers/2203.13474) Эриком Найкампом, Бо Пангом, Хироаки Хаяси, Лифу Ту, Хуаном Ваном, Инбо Чжоу, Сильвио Саварезе и Каймингом Сюном.

CodeGen — это авторегрессионная языковая модель для синтеза программ, обученная последовательно на [The Pile](https://pile.eleuther.ai/), BigQuery и BigPython.

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

*Синтез программ стремится генерировать компьютерную программу в качестве решения для заданного спецификации задачи. Мы предлагаем подход к синтезу программ в формате диалога с использованием больших языковых моделей, который решает проблемы поиска в огромном пространстве программ и формулировки намерений пользователя, характерные для предыдущих подходов. Наш новый подход рассматривает процесс написания спецификации и программы как многоходовой диалог между пользователем и системой. Он трактует синтез программ как задачу предсказания последовательности, в которой спецификация выражается на естественном языке, а желаемая программа извлекается условно. Мы обучаем семейство больших языковых моделей, называемое CodeGen, на данных естественного языка и языков программирования. Благодаря слабому надзору в данных и увеличению размера данных и модели, диалоговые способности возникают из простого авторегрессионного моделирования языка. Для изучения поведения модели в задаче диалогового синтеза программ мы разработали многоходовой бенчмарк программирования (MTPB), в котором решение каждой задачи требует многошагового синтеза посредством многоходового диалога между пользователем и моделью. Наши результаты демонстрируют возникновение диалоговых способностей и эффективность предложенной парадигмы диалогового синтеза программ. Кроме того, наша модель CodeGen (с до 16 млрд параметров, обученная на TPU-v4) превосходит Codex от OpenAI на бенчмарке HumanEval. Мы делаем доступной в качестве открытого вклада обучающую библиотеку JaxFormer, включая контрольные точки: [этот URL](https://github.com/salesforce/codegen).*

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

## Именование контрольных точек

* Чекпоинты модели CodeGen [checkpoints](https://huggingface.co/models?other=codegen) доступны для различных наборов данных предобучения разного размера.
* Формат: `Salesforce/codegen-{size}-{data}`, где
  * `size`: `350M`, `2B`, `6B`, `16B`
  * `data`:
    * `nl`: Предобучен на корпусе Pile
    * `multi`: Инициализирован с `nl`, затем дополнительно дообучен на данных по нескольким языкам программирования
    * `mono`: Инициализирован с помощью `multi`, затем дополнительно дообучен на данных Python
* Например, `Salesforce/codegen-350M-mono` предлагает контрольную точку с 350 миллионами параметров, предварительно обученную последовательно на корпусе Pile, нескольких языках программирования и Python.

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

```python
from transformers import AutoModelForCausalLM, AutoTokenizer

checkpoint = "Salesforce/codegen-350M-mono"
model = AutoModelForCausalLM.from_pretrained(checkpoint, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(checkpoint)

text = "def hello_world():"

completion = model.generate(**tokenizer(text, return_tensors="pt").to(model.device))

print(tokenizer.decode(completion[0]))
def hello_world():
    print("Hello World")

hello_world()
```

## Ресурсы

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

## CodeGenConfig[[transformers.CodeGenConfig]]

#### transformers.CodeGenConfig[[transformers.CodeGenConfig]]

```python
transformers.CodeGenConfig(transformers_version: str | None = None, architectures: list[str] | None = None, output_hidden_states: bool | None = False, return_dict: bool | None = True, dtype: str | torch.dtype | None = None, chunk_size_feed_forward: int = 0, is_encoder_decoder: bool = False, id2label: dict[int, str] | dict[str, str] | None = None, label2id: dict[str, int] | dict[str, str] | None = None, problem_type: Literal['regression', 'single_label_classification', 'multi_label_classification'] | None = None, vocab_size: int = 50400, n_positions: int = 2048, n_ctx: int = 2048, n_embd: int = 4096, n_layer: int = 28, n_head: int = 16, rotary_dim: int = 64, n_inner: int | None = None, activation_function: str = 'gelu_new', resid_pdrop: float | int = 0.0, embd_pdrop: float | int = 0.0, attn_pdrop: float | int = 0.0, layer_norm_epsilon: float = 1e-05, initializer_range: float = 0.02, use_cache: bool = True, bos_token_id: int | None = 50256, eos_token_id: int | list[int] | None = 50256, tie_word_embeddings: bool = False)
```

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

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

vocab_size (`int`, *необязательный*, по умолчанию `50400`) : Размер словаря модели. Определяет количество различных токенов, которые могут быть представлены в `input_ids`.

n_positions (`int`, *необязательный*, по умолчанию `2048`) : Максимальная длина последовательности, с которой может использоваться данная модель.

n_ctx (`int`, *optional*, по умолчанию 2048) : Этот атрибут используется в `CodeGenModel.__init__` без какого-либо реального эффекта. Вероятность dropout для всех полносвязных слоёв в эмбеддингах, энкодере и пулере.

n_embd (`int`, *необязательный*, по умолчанию `4096`) : Размерность эмбеддингов и скрытых состояний.

n_layer (`int`, *необязательный*, по умолчанию `28`) : Количество скрытых слоев в декодере Transformer.

n_head (`int`, *необязательный*, по умолчанию `16`) : Количество головок внимания для каждого слоя внимания в декодере Transformer.

rotary_dim (`int`, *optional*, по умолчанию 64) : Количество измерений во встраивании, к которым применяется Rotary Position Embedding.

n_inner (`int`, *optional*) : Размерность внутренних полносвязных слоёв. `None` установит её в 4 раза больше n_embd

activation_function (`str`, *необязательный*, по умолчанию `gelu_new`) : Нелинейная функция активации (функция или строка) в декодере. Например, `"gelu"`, `"relu"`, `"silu"` и т. д.

resid_pdrop (`Union[float, int]`, *необязательный*, по умолчанию `0.0`) : Вероятность dropout для всех полносвязных слоёв в эмбеддингах, энкодере и пулере.

embd_pdrop (`Union[float, int]`, *необязательный*, по умолчанию `0.0`) : Коэффициент dropout для эмбеддингов.

attn_pdrop (`Union[float, int]`, *необязательный*, по умолчанию `0.0`) : Коэффициент dropout для вероятностей внимания.

layer_norm_epsilon (`float`, *необязательный*, по умолчанию `1e-05`) : Значение epsilon, используемое слоями нормализации.

initializer_range (`float`, *необязательный*, по умолчанию `0.02`) : Стандартное отклонение truncated_normal_initializer для инициализации всех матриц весов.

use_cache (`bool`, *необязательный*, по умолчанию `True`) : Следует ли модели возвращать последние значения внимания key/values (не используется во всех моделях). Актуально только при `config.is_decoder=True` или если модель является генеративной моделью только с декодером.

bos_token_id (`int`, *необязательный*, по умолчанию `50256`) : Идентификатор токена, используемый для обозначения начала потока в словаре.

eos_token_id (`Union[int, list[int]]`, *необязательный*, по умолчанию `50256`) : Идентификатор токена, используемый для обозначения конца потока в словаре.

tie_word_embeddings (`bool`, *необязательный*, по умолчанию `False`) : Связывать ли веса эмбеддингов согласно отображению `tied_weights_keys` модели.

Это класс конфигурации для хранения настроек модели CodeGenModel. Он используется для создания модели Codegen в соответствии с указанными аргументами, определяя архитектуру модели. Создание конфигурации с параметрами по умолчанию даст конфигурацию, аналогичную конфигурации [Salesforce/codegen-2B-mono](https://huggingface.co/Salesforce/codegen-2B-mono)

Объекты конфигурации наследуются от [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig) и могут использоваться для управления выводами модели. Подробнее см. в документации [PreTrainedConfig](/docs/transformers/main/ru/main_classes/configuration#transformers.PreTrainedConfig).

Пример:

```python
>>> from transformers import CodeGenConfig, CodeGenModel

>>> # Initializing a CodeGen 6B configuration
>>> configuration = CodeGenConfig()

>>> # Initializing a model (with random weights) from the configuration
>>> model = CodeGenModel(configuration)

>>> # Accessing the model configuration
>>> configuration = model.config
```

## CodeGenTokenizer[[transformers.CodeGenTokenizer]]

#### transformers.CodeGenTokenizer[[transformers.CodeGenTokenizer]]

```python
transformers.CodeGenTokenizer(vocab: str | dict[str, int] | None = None, merges: str | list[str] | None = None, unk_token: str = '<|endoftext|>', bos_token: str = '<|endoftext|>', eos_token: str = '<|endoftext|>', pad_token = None, add_prefix_space: bool = False, return_token_type_ids: bool = False, **kwargs)
```

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

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

vocab (`str` или `dict[str, int]`, *необязательный*) : Пользовательский словарь. Если не указан, словарь загружается из `vocab_file`.

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

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

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

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

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

add_prefix_space (`bool`, *необязательный*, по умолчанию `False`) : Добавлять ли начальный пробел к входным данным. Это позволяет обрабатывать первое слово так же, как и любое другое (токенизатор CodeGen определяет начало слов по предшествующему пробелу).

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

Создаёт токенизатор CodeGen (на основе библиотеки *tokenizers* от HuggingFace). Основан на байтовом уровне Byte-Pair-Encoding.

Этот токенизатор обучен обрабатывать пробелы как часть токенов (немного в духе sentencepiece), поэтому слово будет

кодируются по-разному в зависимости от того, находятся ли они в начале предложения (без пробела) или нет:

```python
>>> from transformers import CodeGenTokenizer

>>> tokenizer = CodeGenTokenizer.from_pretrained("Salesforce/codegen-350M-mono")
>>> tokenizer("Hello world")["input_ids"]
[15496, 995]

>>> tokenizer(" Hello world")["input_ids"]
[18435, 995]
```

Этому поведению можно избежать, передав `add_prefix_space=True` при создании экземпляра этого токенизатора, однако, поскольку модель не была предобучена таким образом, это может привести к снижению производительности.

При использовании с `is_split_into_words=True` этот токенизатор необходимо инициализировать с `add_prefix_space=True`.

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

#### save_vocabulary[[transformers.CodeGenTokenizer.save_vocabulary]]

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

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

## CodeGenModel[[transformers.CodeGenModel]]

#### transformers.CodeGenModel[[transformers.CodeGenModel]]

```python
transformers.CodeGenModel(config: CodeGenConfig)
```

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

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

config ([CodeGenConfig](/docs/transformers/main/ru/model_doc/codegen#transformers.CodeGenConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Модель Codegen, выводящая «сырые» скрытые состояния без какого-либо специализированного слоя наверху.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.CodeGenModel.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, cache: transformers.cache_utils.Cache | None = None, attention_mask: typing.Optional[torch.Tensor] = None, token_type_ids: typing.Optional[torch.LongTensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, use_cache: bool | None = None, output_attentions: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, **kwargs)
```

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

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

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__). [Что такое входные идентификаторы?](../glossary#input-ids)

cache (`~cache_utils.Cache`, *необязательный*) : Предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно это `cache`, возвращаемый моделью на предыдущем этапе декодирования, когда `use_cache=True` или `config.use_cache=True`. В качестве входного параметра допускается только экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache), см. наше [руководство по kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Если `cache` не передан, по умолчанию будет инициализирован [DynamicCache](/docs/transformers/main/ru/internal/generation_utils#transformers.DynamicCache). Модель будет выводить тот же формат кэша, который был передан на вход. Если используются `cache`, ожидается, что пользователь передаст только необработанные `input_ids` (те, для которых ещё не заданы их прошлые состояния ключей и значений в этой модели) с формой `(batch_size, unprocessed_length)`, а не все `input_ids` с формой `(batch_size, sequence_length)`.

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

token_type_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательный*) : Индексы токенов сегментов для указания первой и второй частей входных данных. Индексы выбираются из `[0, 1]`:  - 0 соответствует токену *предложения A*, - 1 соответствует токену *предложения B*.  [Что такое идентификаторы типов токенов?](../glossary#token-type-ids)

position_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона `[0, config.n_positions - 1]`.  [Что такое position IDs?](../glossary#position-ids)

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_dim)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы *input_ids* преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

use_cache (`bool`, *необязательный*) : Если установлено в `True`, возвращаются состояния ключей и значений `cache`, которые можно использовать для ускорения декодирования (см. `cache`).

output_attentions (`bool`, *необязательный*) : Нужно ли возвращать тензоры внимания всех слоев внимания. Подробнее см. `attentions` в разделе возвращаемых тензоров.

output_hidden_states (`bool`, *необязательный*) : Нужно ли возвращать скрытые состояния всех слоёв. Подробнее о `hidden_states` в разделе возвращаемых тензоров.

return_dict (`bool`, *необязательный*) : Нужно ли возвращать [ModelOutput](/docs/transformers/main/ru/main_classes/output#transformers.utils.ModelOutput) вместо обычного кортежа.

**Возвращает:** [BaseModelOutputWithPast](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast) или `tuple(torch.Tensor)`

[BaseModelOutputWithPast](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.BaseModelOutputWithPast) или кортеж `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации (`None`) и входных данных.

Метод forward модели [CodeGenModel](/docs/transformers/main/ru/model_doc/codegen#transformers.CodeGenModel) переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **last_hidden_state** (`torch.Tensor` формы `(batch_size, sequence_length, hidden_size)`) -- Последовательность скрытых состояний на выходе последнего слоя модели.

  Если используется `cache`, выводится только последнее скрытое состояние последовательностей формы `(batch_size, 1, hidden_size)`.
- **cache** (`Cache`, *необязательный*, возвращается при передаче `use_cache=True` или когда `config.use_cache=True`) -- это экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache). Подробнее см. в нашем [руководстве по кэшированию kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и, при необходимости, если `config.is_encoder_decoder=True`, в блоках кросс-внимания), которые можно использовать (см. вход `cache`) для ускорения последовательного декодирования.
- **hidden_states** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_hidden_states=True` или когда `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_attentions=True` или при `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

## CodeGenForCausalLM[[transformers.CodeGenForCausalLM]]

#### transformers.CodeGenForCausalLM[[transformers.CodeGenForCausalLM]]

```python
transformers.CodeGenForCausalLM(config: CodeGenConfig)
```

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

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

config ([CodeGenConfig](/docs/transformers/main/ru/model_doc/codegen#transformers.CodeGenConfig)) : Класс конфигурации модели со всеми параметрами модели. Инициализация с файлом конфигурации не загружает веса, связанные с моделью, только конфигурацию. Используйте метод [from_pretrained()](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel.from_pretrained) для загрузки весов модели.

Трансформер модели CodeGen с головой для моделирования языка сверху.

Эта модель наследуется от [PreTrainedModel](/docs/transformers/main/ru/main_classes/model#transformers.PreTrainedModel). Общие методы, которые библиотека реализует для всех своих моделей (например, загрузка или сохранение, изменение размера входных эмбеддингов, обрезка головок и т. д.), описаны в документации родительского класса.

Эта модель также является подклассом [torch.nn.Module](https://pytorch.org/docs/stable/nn.html#torch.nn.Module) в PyTorch. Используйте её как обычный модуль PyTorch и обращайтесь к документации PyTorch по всем вопросам, связанным с общим использованием и поведением.

#### forward[[transformers.CodeGenForCausalLM.forward]]

```python
forward(input_ids: typing.Optional[torch.LongTensor] = None, cache: transformers.cache_utils.Cache | None = None, attention_mask: typing.Optional[torch.Tensor] = None, token_type_ids: typing.Optional[torch.LongTensor] = None, position_ids: typing.Optional[torch.LongTensor] = None, inputs_embeds: typing.Optional[torch.Tensor] = None, labels: typing.Optional[torch.LongTensor] = None, use_cache: bool | None = None, output_attentions: bool | None = None, output_hidden_states: bool | None = None, return_dict: bool | None = None, logits_to_keep: typing.Union[int, torch.Tensor] = 0, **kwargs)
```

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

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

input_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы токенов входной последовательности в словаре. По умолчанию заполнение (padding) игнорируется. Индексы можно получить с помощью [AutoTokenizer](/docs/transformers/main/ru/model_doc/auto#transformers.AutoTokenizer). Подробности см. в [PreTrainedTokenizer.encode()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.encode) и [PreTrainedTokenizer.__call__()](/docs/transformers/main/ru/internal/tokenization_utils#transformers.PreTrainedTokenizerBase.__call__). [Что такое входные идентификаторы?](../glossary#input-ids)

cache (`~cache_utils.Cache`, *необязательный*) : Предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания и кросс-внимания), которые можно использовать для ускорения последовательного декодирования. Обычно это `cache`, возвращаемый моделью на предыдущем этапе декодирования, когда `use_cache=True` или `config.use_cache=True`. В качестве входного параметра допускается только экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache), см. наше [руководство по kv cache](https://huggingface.co/docs/transformers/en/kv_cache). Если `cache` не передан, по умолчанию будет инициализирован [DynamicCache](/docs/transformers/main/ru/internal/generation_utils#transformers.DynamicCache). Модель будет выводить тот же формат кэша, который был передан на вход. Если используются `cache`, ожидается, что пользователь передаст только необработанные `input_ids` (те, для которых ещё не заданы их прошлые состояния ключей и значений в этой модели) с формой `(batch_size, unprocessed_length)`, а не все `input_ids` с формой `(batch_size, sequence_length)`.

attention_mask (`torch.Tensor` формы `(batch_size, sequence_length)`, *необязательный*) : Маска для предотвращения применения внимания к индексам токенов отсечки. Значения маски выбираются из `[0, 1]`:  - 1 для токенов, которые **не замаскированы**, - 0 для токенов, которые **замаскированы**.  [Что такое маски внимания?](../glossary#attention-mask)

token_type_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательный*) : Индексы токенов сегментов для указания первой и второй частей входных данных. Индексы выбираются из `[0, 1]`:  - 0 соответствует токену *предложения A*, - 1 соответствует токену *предложения B*.  [Что такое идентификаторы типов токенов?](../glossary#token-type-ids)

position_ids (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Индексы позиций токенов каждого входного последовательности в позиционных эмбеддингах. Выбираются из диапазона `[0, config.n_positions - 1]`.  [Что такое position IDs?](../glossary#position-ids)

inputs_embeds (`torch.Tensor` формы `(batch_size, sequence_length, hidden_dim)`, *необязательно*) : По желанию, вместо передачи `input_ids` можно напрямую передать встроенное представление. Это полезно, если требуется больший контроль над тем, как индексы *input_ids* преобразуются в соответствующие векторы, чем это обеспечивает внутренняя матрица поиска встраиваний модели.

labels (`torch.LongTensor` формы `(batch_size, sequence_length)`, *необязательно*) : Метки для моделирования языка. Обратите внимание, что метки **сдвинуты** внутри модели, то есть можно установить `labels = input_ids` Индексы выбираются из `[-100, 0, ..., config.vocab_size]` Все метки, установленные в `-100`, игнорируются (маскируются), потеря вычисляется только для меток в `[0, ..., config.vocab_size]`

use_cache (`bool`, *необязательный*) : Если установлено в `True`, возвращаются состояния ключей и значений `cache`, которые можно использовать для ускорения декодирования (см. `cache`).

output_attentions (`bool`, *необязательный*) : Нужно ли возвращать тензоры внимания всех слоев внимания. Подробнее см. `attentions` в разделе возвращаемых тензоров.

output_hidden_states (`bool`, *необязательный*) : Нужно ли возвращать скрытые состояния всех слоёв. Подробнее о `hidden_states` в разделе возвращаемых тензоров.

return_dict (`bool`, *необязательный*) : Нужно ли возвращать [ModelOutput](/docs/transformers/main/ru/main_classes/output#transformers.utils.ModelOutput) вместо обычного кортежа.

logits_to_keep (`Union[int, torch.Tensor]`, *необязательный*, по умолчанию `0`) : Если передано значение типа `int`, вычисляются logits для последних `logits_to_keep` токенов. Если передано `0`, logits вычисляются для всех `input_ids` (специальный случай). Для генерации нужны logits только последнего токена, и вычисление их только для этого токена позволяет сэкономить память, что становится весьма значимым для длинных последовательностей или большого размера словаря. Если передано значение типа `torch.Tensor`, оно должно быть одномерным и соответствовать индексам, которые нужно сохранить в измерении длины последовательности. Это полезно при использовании упакованного формата тензоров (одно измерение для batch и длины последовательности).

**Возвращает:** [CausalLMOutputWithPast](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.CausalLMOutputWithPast) или `tuple(torch.Tensor)`

Объект [CausalLMOutputWithPast](/docs/transformers/main/ru/main_classes/output#transformers.modeling_outputs.CausalLMOutputWithPast) или кортеж из `torch.Tensor` (если передано `return_dict=False` или если `config.return_dict=False`), содержащий различные элементы в зависимости от конфигурации (`None`) и входных данных.

Метод forward класса [CodeGenForCausalLM](/docs/transformers/main/ru/model_doc/codegen#transformers.CodeGenForCausalLM) переопределяет специальный метод `__call__`.

Хотя рецепт для прямого прохода должен быть определён внутри этой функции, после этого следует вызывать экземпляр `Module`, а не эту функцию, поскольку первый выполняет шаги предварительной и постобработки, тогда как второй молча их игнорирует.

- **loss** (`torch.Tensor` формы `(1,)`, *необязательный*, возвращается, если задан `labels`) -- Потеря языковой модели (для предсказания следующего токена).
- **logits** (`torch.Tensor` формы `(batch_size, sequence_length, config.vocab_size)`) — Оценки предсказаний языковой модели (оценки для каждого токена словаря до применения SoftMax).
- **cache** (`Cache`, *необязательный*, возвращается при передаче `use_cache=True` или когда `config.use_cache=True`) -- это экземпляр [Cache](/docs/transformers/main/ru/internal/generation_utils#transformers.Cache). Подробнее см. в нашем [руководстве по кэшированию kv](https://huggingface.co/docs/transformers/en/kv_cache).

  Содержит предварительно вычисленные скрытые состояния (ключи и значения в блоках само-внимания), которые можно использовать (см. вход `cache`) для ускорения последовательного декодирования.
- **hidden_states** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_hidden_states=True` или когда `config.output_hidden_states=True`) -- Кортеж `torch.Tensor` (один для вывода слоя встраиваний, если модель имеет слой встраиваний, + один для вывода каждого слоя) формы `(batch_size, sequence_length, hidden_size)`.

  Скрытые состояния модели на выходе каждого слоя, а также необязательные выходные значения начального слоя встраивания.
- **attentions** (`tuple(torch.Tensor)`, *необязательный*, возвращается при передаче `output_attentions=True` или при `config.output_attentions=True`) -- Кортеж `torch.Tensor` (по одному на каждый слой) формы `(batch_size, num_heads, sequence_length, sequence_length)`.

  Веса внимания после softmax в механизме внимания, используемые для вычисления взвешенного среднего в головах само-внимания.

