# CPM

## Aperçu

Le modèle CPM a été proposé dans [CPM: A Large-scale Generative Chinese Pre-trained Language Model](https://huggingface.co/papers/2012.00413) par Zhengyan Zhang, Xu Han, Hao Zhou, Pei Ke, Yuxian Gu, Deming Ye, Yujia Qin, Yusheng Su, Haozhe Ji, Jian Guan, Fanchao Qi, Xiaozhi Wang, Yanan Zheng, Guoyang Zeng, Huanqi Cao, Shengqi Chen, Daixuan Li, Zhenbo Sun, Zhiyuan Liu, Minlie Huang, Wentao Han, Jie Tang, Juanzi Li, Xiaoyan Zhu, Maosong Sun.

L'abstract de l'article est le suivant :

*Les modèles de langage pré-entraînés (PLM) se sont révélés bénéfiques pour diverses tâches NLP en aval. Récemment, GPT-3, doté de 175 milliards de paramètres et de 570 Go de données d'entraînement, a attiré une grande attention en raison de sa capacité d'apprentissage en peu d'exemples (voire sans exemple). Toutefois, l'application de GPT-3 aux tâches NLP en chinois reste difficile, car le corpus d'entraînement de GPT-3 est principalement en anglais et les paramètres ne sont pas disponibles publiquement. Dans ce rapport technique, nous publions le modèle de langage pré-entraîné en chinois (CPM), entraîné de manière générative sur de grandes quantités de données d'entraînement en chinois. À notre connaissance, CPM, avec 2,6 milliards de paramètres et 100 Go de données d'entraînement en chinois, est le plus grand modèle de langage pré-entraîné en chinois, ce qui peut faciliter plusieurs tâches NLP en aval en chinois, telles que la conversation, la génération d'essais, les tests à trous et la compréhension du langage. Des expériences étendues démontrent que CPM obtient de solides performances sur de nombreuses tâches NLP dans des configurations d'apprentissage en peu d'exemples (voire sans exemple).*

Ce modèle a été contribué par [canwenxu](https://huggingface.co/canwenxu). L'implémentation originale peut être trouvée ici : https://github.com/TsinghuaAI/CPM-Generate

L'architecture de CPM est identique à celle de GPT-2, à l'exception de la méthode de tokenization. Consultez la [documentation de GPT-2](gpt2) pour les informations de référence de l'API.

## CpmTokenizer[[transformers.CpmTokenizer]]

#### transformers.CpmTokenizer[[transformers.CpmTokenizer]]

```python
transformers.CpmTokenizer(vocab_file, do_lower_case = False, remove_space = True, keep_accents = False, bos_token = '<s>', eos_token = '</s>', unk_token = '<unk>', sep_token = '<sep>', pad_token = '<pad>', cls_token = '<cls>', mask_token = '<mask>', additional_special_tokens = ['<eop>', '<eod>'], sp_model_kwargs: dict[str, typing.Any] | None = None, **kwargs)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cpm/tokenization_cpm.py#L34)

Exécute la pré-tokenisation avec l'outil de segmentation Jieba-RS. Elle est utilisée dans les modèles CPM.

#### build_inputs_with_special_tokens[[transformers.CpmTokenizer.build_inputs_with_special_tokens]]

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

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cpm/tokenization_cpm.py#L230)

**Paramètres :**

token_ids_0 (`list[int]`) : Liste d'identifiants auxquels les jetons spéciaux seront ajoutés.

token_ids_1 (`list[int]`, *facultatif*) : Deuxième liste d'identifiants facultative pour les paires de séquences.

**Retourne :** `list[int]`

Liste des [identifiants d'entrée](../glossary#input-ids) avec les jetons spéciaux appropriés.

Construire les entrées du modèle à partir d'une séquence ou d'une paire de séquences pour les tâches de classification de séquences en les concaténant et en ajoutant des jetons spéciaux. Une séquence XLNet a le format suivant :

- séquence unique : `X <sep> <cls>`
- paire de séquences : `A <sep> B <sep> <cls>`

#### convert_tokens_to_string[[transformers.CpmTokenizer.convert_tokens_to_string]]

```python
convert_tokens_to_string(tokens)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cpm/tokenization_cpm.py#L225)

Convertit une séquence de jetons (chaînes de caractères pour les sous-mots) en une seule chaîne de caractères.

#### create_token_type_ids_from_sequences[[transformers.CpmTokenizer.create_token_type_ids_from_sequences]]

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

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cpm/tokenization_cpm.py#L283)

**Paramètres :**

token_ids_0 (`list[int]`) : Liste d'identifiants.

token_ids_1 (`list[int]`, *facultatif*) : Deuxième liste d'identifiants facultative pour les paires de séquences.

**Retourne :** `list[int]`

Liste des [identifiants de type de jeton](../glossary#token-type-ids) selon la ou les séquences données.

Crée un masque à partir des deux séquences passées, à utiliser dans une tâche de classification de paires de séquences. Un XLNet

le masque de paires de séquences a le format suivant :

```
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
| first sequence    | second sequence |
```

Si `token_ids_1` est `None`, cette méthode ne renvoie que la première partie du masque (les 0).

#### get_special_tokens_mask[[transformers.CpmTokenizer.get_special_tokens_mask]]

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

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cpm/tokenization_cpm.py#L255)

**Paramètres :**

token_ids_0 (`list[int]`) : Liste d'identifiants.

token_ids_1 (`list[int]`, *facultatif*) : Deuxième liste d'identifiants facultative pour les paires de séquences.

already_has_special_tokens (`bool`, *facultatif*, valeur par défaut `False`) : Indique si la liste de jetons est déjà formatée avec les jetons spéciaux du modèle.

**Retourne :** `list[int]`

Une liste d'entiers dans l'intervalle [0, 1] : 1 pour un jeton spécial, 0 pour un jeton de séquence.

Récupère les identifiants de séquences à partir d'une liste de jetons sur laquelle aucun jeton spécial n'a été ajouté. Cette méthode est appelée lors de l'ajout de jetons spéciaux à l'aide de la méthode `prepare_for_model` du tokeniseur.

## CpmTokenizerFast[[transformers.CpmTokenizerFast]]

#### transformers.CpmTokenizerFast[[transformers.CpmTokenizerFast]]

```python
transformers.CpmTokenizerFast(vocab_file = None, tokenizer_file = None, do_lower_case = False, remove_space = True, keep_accents = False, bos_token = '<s>', eos_token = '</s>', unk_token = '<unk>', sep_token = '<sep>', pad_token = '<pad>', cls_token = '<cls>', mask_token = '<mask>', additional_special_tokens = ['<eop>', '<eod>'], **kwargs)
```

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cpm/tokenization_cpm_fast.py#L28)

Exécute la pré-tokenisation avec l'outil de segmentation Jieba-RS. Elle est utilisée dans les modèles CPM.

#### build_inputs_with_special_tokens[[transformers.CpmTokenizerFast.build_inputs_with_special_tokens]]

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

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cpm/tokenization_cpm_fast.py#L145)

**Paramètres :**

token_ids_0 (`list[int]`) : Liste d'identifiants auxquels les jetons spéciaux seront ajoutés.

token_ids_1 (`list[int]`, *facultatif*) : Deuxième liste d'identifiants facultative pour les paires de séquences.

**Retourne :** `list[int]`

Liste des [identifiants d'entrée](../glossary#input-ids) avec les jetons spéciaux appropriés.

Construire les entrées du modèle à partir d'une séquence ou d'une paire de séquences pour les tâches de classification de séquences en les concaténant et en ajoutant des jetons spéciaux. Une séquence XLNet a le format suivant :

- séquence unique : `X <sep> <cls>`
- paire de séquences : `A <sep> B <sep> <cls>`

#### create_token_type_ids_from_sequences[[transformers.CpmTokenizerFast.create_token_type_ids_from_sequences]]

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

[Source](https://github.com/huggingface/transformers/blob/main/src/transformers/models/cpm/tokenization_cpm_fast.py#L170)

**Paramètres :**

token_ids_0 (`list[int]`) : Liste d'identifiants.

token_ids_1 (`list[int]`, *facultatif*) : Deuxième liste d'identifiants facultative pour les paires de séquences.

**Retourne :** `list[int]`

Liste des [identifiants de type de jeton](../glossary#token-type-ids) selon la ou les séquences données.

Crée un masque à partir des deux séquences passées, à utiliser dans une tâche de classification de paires de séquences. Un XLNet

le masque de paires de séquences a le format suivant :

```
0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1
| first sequence    | second sequence |
```

Si `token_ids_1` est `None`, cette méthode ne renvoie que la première partie du masque (les 0).

