# CPM

## Ikhtisar

Model CPM diusulkan dalam [CPM: A Large-scale Generative Chinese Pre-trained Language Model](https://huggingface.co/papers/2012.00413) oleh 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.

Abstrak dari makalah tersebut adalah sebagai berikut:

*Model Bahasa Pra-terlatih (PLM) telah terbukti bermanfaat untuk berbagai tugas NLP hilir. Baru-baru ini, GPT-3, dengan 175 miliar parameter dan data pelatihan 570GB, menarik banyak perhatian karena kemampuannya dalam pembelajaran few-shot (bahkan zero-shot). Namun, menerapkan GPT-3 untuk menangani tugas NLP bahasa Mandarin masih menantang, karena korpus pelatihan GPT-3 sebagian besar berbahasa Inggris, dan parameternya tidak tersedia secara publik. Dalam laporan teknis ini, kami merilis Model Bahasa Pra-terlatih Mandarin (CPM) dengan pra-pelatihan generatif pada data pelatihan Mandarin berskala besar. Sejauh pengetahuan kami, CPM, dengan 2,6 miliar parameter dan data pelatihan Mandarin 100GB, adalah model bahasa pra-terlatih Mandarin terbesar, yang dapat memfasilitasi beberapa tugas NLP Mandarin hilir, seperti percakapan, pembuatan esai, tes cloze, dan pemahaman bahasa. Eksperimen ekstensif menunjukkan bahwa CPM mencapai kinerja yang kuat pada banyak tugas NLP dalam pengaturan pembelajaran few-shot (bahkan zero-shot).*

Model ini disumbangkan oleh [canwenxu](https://huggingface.co/canwenxu). Implementasi aslinya dapat ditemukan di sini: https://github.com/TsinghuaAI/CPM-Generate

Arsitektur CPM sama dengan GPT-2, kecuali untuk metode tokenisasi. Lihat [dokumentasi GPT-2](gpt2) untuk informasi referensi 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)
```

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

Menjalankan pra-tokenisasi dengan alat segmentasi Jieba-RS. Digunakan dalam model 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)
```

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

**Parameter:**

token_ids_0 (`list[int]`) : Daftar ID tempat token khusus akan ditambahkan.

token_ids_1 (`list[int]`, *opsional*) : Daftar ID kedua opsional untuk pasangan sekuens.

**Mengembalikan:** `list[int]`

Daftar [ID input](../glossary#input-ids) dengan token khusus yang sesuai.

Bangun input model dari satu urutan atau sepasang urutan untuk tugas klasifikasi urutan dengan melakukan penggabungan dan penambahan token khusus. Urutan XLNet memiliki format berikut:

- satu urutan: `X <sep> <cls>`
- pasangan sekuens: `A <sep> B <sep> <cls>`

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

```python
convert_tokens_to_string(tokens)
```

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

Mengonversi urutan token (string untuk sub-kata) dalam satu string.

#### 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)
```

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

**Parameter:**

token_ids_0 (`list[int]`) : Daftar ID.

token_ids_1 (`list[int]`, *opsional*) : Daftar ID kedua opsional untuk pasangan sekuens.

**Mengembalikan:** `list[int]`

Daftar [ID tipe token](../glossary#token-type-ids) sesuai dengan urutan yang diberikan.

Buat mask dari dua urutan yang diteruskan untuk digunakan dalam tugas klasifikasi pasangan urutan. XLNet

mask pasangan sequence memiliki format berikut:

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

Jika `token_ids_1` adalah `None`, metode ini hanya mengembalikan bagian pertama dari mask (0s).

#### 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)
```

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

**Parameter:**

token_ids_0 (`list[int]`) : Daftar ID.

token_ids_1 (`list[int]`, *opsional*) : Daftar ID kedua opsional untuk pasangan sekuens.

already_has_special_tokens (`bool`, *opsional*, defaultnya `False`) : Apakah daftar token sudah diformat dengan token khusus untuk model.

**Mengembalikan:** `list[int]`

Daftar bilangan bulat dalam rentang [0, 1]: 1 untuk token khusus, 0 untuk token urutan.

Ambil id urutan dari daftar token yang tidak memiliki token khusus yang ditambahkan. Metode ini dipanggil saat menambahkan token khusus menggunakan metode `prepare_for_model` tokenizer.

## 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)
```

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

Menjalankan pra-tokenisasi dengan alat segmentasi Jieba-RS. Digunakan dalam model 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)
```

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

**Parameter:**

token_ids_0 (`list[int]`) : Daftar ID tempat token khusus akan ditambahkan.

token_ids_1 (`list[int]`, *opsional*) : Daftar ID kedua opsional untuk pasangan sekuens.

**Mengembalikan:** `list[int]`

Daftar [ID input](../glossary#input-ids) dengan token khusus yang sesuai.

Bangun input model dari satu urutan atau sepasang urutan untuk tugas klasifikasi urutan dengan melakukan penggabungan dan penambahan token khusus. Urutan XLNet memiliki format berikut:

- satu urutan: `X <sep> <cls>`
- pasangan sekuens: `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)
```

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

**Parameter:**

token_ids_0 (`list[int]`) : Daftar ID.

token_ids_1 (`list[int]`, *opsional*) : Daftar ID kedua opsional untuk pasangan sekuens.

**Mengembalikan:** `list[int]`

Daftar [ID tipe token](../glossary#token-type-ids) sesuai dengan urutan yang diberikan.

Buat mask dari dua urutan yang diteruskan untuk digunakan dalam tugas klasifikasi pasangan urutan. XLNet

mask pasangan sequence memiliki format berikut:

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

Jika `token_ids_1` adalah `None`, metode ini hanya mengembalikan bagian pertama dari mask (0s).

