
Repositori ini menyediakan kode untuk melatih model pretrained Jepang. Kode ini telah digunakan untuk memproduksi-Jepang-GPT2-sedang, Jepang-GPT2-Small, dan basis Jepang-Roberta yang dirilis pada HUB Model Huggingface oleh Rinna Co., Ltd.
Model pretrained yang saat ini didukung termasuk: GPT-2, Roberta.
| Daftar isi |
|---|
| Perbarui log |
| Gunakan tips |
| Gunakan model pretrained kami melalui huggingface |
Latih japanese-gpt2-xsmall dari awal |
Latih japanese-roberta-base dari awal |
| Lisensi |
Harap buka masalah (dalam bahasa Inggris/Jepang) jika Anda mengalami masalah menggunakan kode atau menggunakan model kami melalui HuggingFace.
Jika Anda menemukan pekerjaan ini bermanfaat, silakan mengutip makalah berikut:
@article{rinna_pretrained2021,
title={日本語自然言語処理における事前学習モデルの公開},
author={趙 天雨 and 沢田 慶},
journal={人工知能学会研究会資料 言語・音声理解と対話処理研究会},
volume={93},
pages={169-170},
year={2021},
doi={10.11517/jsaislud.93.0_169}
}
2022/01/25 Tautan yang diperbarui ke rinna/japanese-gpt-1b di Tabel Ringkasan Model.
2022/01/17 informasi kutipan yang diperbarui.
2021/11/01 Tautan Korporat yang Diperbarui.
2021/09/13 Menambahkan tips tentang penggunaan position_ids dengan japanese-roberta-base . Lihat edisi 3 untuk detailnya.
2021/08/26 [penting] Lisensi yang diperbarui dari lisensi MIT ke lisensi Apache 2.0 karena penggunaan kode pra-pemrosesan Wikipedia dari CL-T-THOKU/Bert-Jepang. Lihat Edisi 1 untuk detailnya.
2021/08/23 Menambahkan Wikipedia Jepang ke dalam pelatihan korpora. Kode yang diterbitkan untuk pelatihan rinna/japanese-gpt2-small , rinna/japanese-gpt2-xsmall , dan rinna/japanese-roberta-base .
2021/08/18 Mengubah Nama Repo dari japanese-gpt2 menjadi japanese-pretrained-models
2021/06/15 Memperbaiki bug pelacakan ppl terbaik saat menggunakan pos pemeriksaan.
2021/05/04 Memperbaiki bug penyemaian acak untuk pelatihan multi-GPU.
2021/04/06 Kode yang Diterbitkan untuk Pelatihan rinna/japanese-gpt2-medium .
rinna/japanese-roberta-base Gunakan [CLS] : Untuk memprediksi token bertopeng, pastikan untuk menambahkan token [CLS] sebelum kalimat untuk model untuk menyandikannya dengan benar, karena digunakan selama pelatihan model.
Gunakan [MASK] setelah tokenisasi: a) Mengetik langsung [MASK] dalam string input dan b) Mengganti token dengan [MASK] setelah tokenisasi akan menghasilkan urutan token yang berbeda, dan dengan demikian hasil prediksi yang berbeda. Lebih tepat untuk menggunakan [MASK] setelah tokenisasi (karena konsisten dengan bagaimana model tersebut pretrained). Namun, Huggingface Inference API hanya mendukung pengetikan [MASK] dalam string input dan menghasilkan prediksi yang kurang kuat.
Provide position_ids as an argument explicitly: When position_ids are not provided for a Roberta* model, Huggingface's transformers will automatically construct it but start from padding_idx instead of 0 (see issue and function create_position_ids_from_input_ids() in Huggingface's implementation), which unfortunately does not work as expected with rinna/japanese-roberta-base since the padding_idx of the corresponding Tokenizer bukan 0 . Jadi pastikan untuk membatasi position_ids sendiri dan membuatnya mulai dari ID Posisi 0 .
| Model Bahasa | # params | # lapisan | # emb DiM | #epochs | dev ppl | Waktu Pelatihan* |
|---|---|---|---|---|---|---|
| Rinna/Jepang-GPT-1B | 1.3b | Dua Puluh Empat | 2048 | 10+ | 13.9 | n/a ** |
| Rinna/Jepang-GPT2-Medium | 336m | Dua Puluh Empat | 1024 | 4 | 18 | 45 hari |
| Rinna/Jepang-GPT2-Small | 110m | 12 | 768 | 3 | dua puluh satu | 15 hari |
| Rinna/Jepang-GPT2-XSmall | 37m | 6 | 512 | 3 | 28 | 4 hari |
| model bahasa bertopeng | # params | # lapisan | # emb DiM | #epochs | dev ppl | Waktu Pelatihan* |
|---|---|---|---|---|---|---|
| Rinna/Jepang-Roberta-Base | 110m | 12 | 768 | 8 | 3.9 | 15 hari |
* Pelatihan dilakukan pada mesin 8X V100 32GB.
** Pelatihan dilakukan dengan menggunakan basis kode yang berbeda dan lingkungan komputasi yang berbeda.
rinna/japanese-roberta-base untuk memprediksi token bertopeng import torch
from transformers import T5Tokenizer, RobertaForMaskedLM
# load tokenizer
tokenizer = T5Tokenizer.from_pretrained("rinna/japanese-roberta-base")
tokenizer.do_lower_case = True # due to some bug of tokenizer config loading
# load model
model = RobertaForMaskedLM.from_pretrained("rinna/japanese-roberta-base")
model = model.eval()
# original text
text = "4年に1度オリンピックは開かれる。"
# prepend [CLS]
text = "[CLS]" + text
# tokenize
tokens = tokenizer.tokenize(text)
print(tokens) # output: ['[CLS]', '▁4', '年に', '1', '度', 'オリンピック', 'は', '開かれる', '。']']
# mask a token
masked_idx = 5
tokens[masked_idx] = tokenizer.mask_token
print(tokens) # output: ['[CLS]', '▁4', '年に', '1', '度', '[MASK]', 'は', '開かれる', '。']
# convert to ids
token_ids = tokenizer.convert_tokens_to_ids(tokens)
print(token_ids) # output: [4, 1602, 44, 24, 368, 6, 11, 21583, 8]
# convert to tensor
token_tensor = torch.LongTensor([token_ids])
# provide position ids explicitly
position_ids = list(range(0, token_tensor.size(1)))
print(position_ids) # output: [0, 1, 2, 3, 4, 5, 6, 7, 8]
position_id_tensor = torch.LongTensor([position_ids])
# get the top 10 predictions of the masked token
with torch.no_grad():
outputs = model(input_ids=token_tensor, position_ids=position_id_tensor)
predictions = outputs[0][0, masked_idx].topk(10)
for i, index_t in enumerate(predictions.indices):
index = index_t.item()
token = tokenizer.convert_ids_to_tokens([index])[0]
print(i, token)
"""
0 総会
1 サミット
2 ワールドカップ
3 フェスティバル
4 大会
5 オリンピック
6 全国大会
7 党大会
8 イベント
9 世界選手権
"""
japanese-gpt2-xsmall dari awalInstal paket yang diperlukan dengan menjalankan perintah berikut di bawah direktori repo:
pip install -r requirements.txt
python -m unidic download
Unduh Pelatihan Corpus Jepang CC-100 dan ekstrak file ja.txt .
Pindahkan file ja.txt atau ubah src/corpus/jp_cc100/config.py agar sesuai dengan filepath ja.txt dengan self.raw_data_dir dalam file konfigurasi.
Pisahkan ja.txt ke file yang lebih kecil dengan menjalankan:
cd src/
python -m corpus.jp_cc100.split_to_small_files
self.download_link (dalam file src/corpus/jp_wiki/config.py ) dengan tautan ke versi wikipedia dump pilihan Anda. Kemudian unduh pelatihan corpus wikipedia Jepang dan membaginya dengan menjalankan: python -m corpus.jp_wiki.build_pretrain_dataset
python -m corpus.jp_wiki.split_to_small_files
CUDA_VISIBLE_DEVICES=0,1,2,3 python -m task.pretrain_gpt2.train
--n_gpus 4
--save_model True
--enable_log True
--model_size xsmall
--model_config_filepath model/gpt2-ja-xsmall-config.json
--batch_size 20
--eval_batch_size 40
--n_training_steps 1600000
--n_accum_steps 3
--init_lr 0.0007
Asumsikan Anda telah menjalankan skrip pelatihan dan menyimpan GPT-2 berukuran XSMALL Anda ke data/model/pretrain_gpt2/gpt2-ja-xsmall-xxx.checkpoint . Jalankan perintah berikut untuk menggunakannya untuk melengkapi teks pada satu GPU dengan pengambilan sampel nukleus dengan p=0.95 dan k=40 :
CUDA_VISIBLE_DEVICES=0 python -m task.pretrain_gpt2.interact
--checkpoint_path ../data/model/pretrain_gpt2/gpt2-ja-medium-xxx.checkpoint
--gen_type top
--top_p 0.95
--top_k 40
Buat akun pelukan Anda. Buat repo model. Kloning ke mesin lokal Anda.
Buat model model dan konfigurasi dari pos pemeriksaan dengan menjalankan:
python -m task.pretrain_gpt2.checkpoint2huggingface
--checkpoint_path ../data/model/gpt2-medium-xxx.checkpoint
--save_dir {huggingface's model repo directory}
python -m task.pretrain_gpt2.check_huggingface
--model_dir {huggingface's model repo directory}
Periksa argumen yang tersedia dari skrip pelatihan GPT-2 dengan menjalankan:
python -m task.pretrain_gpt2.train --help
japanese-roberta-base dari awalAsumsikan Anda telah menyelesaikan proses konstruksi data seperti yang dijelaskan di atas, jalankan perintah berikut untuk melatih Roberta Jepang berukuran dasar, misalnya, 8 V100 GPU:
CUDA_VISIBLE_DEVICES=0,1,2,3,4,5,6,7 python -m task.pretrain_roberta.train
--n_gpus 8
--save_model True
--enable_log True
--model_size base
--model_config_filepath model/roberta-ja-base-config.json
--batch_size 32
--eval_batch_size 32
--n_training_steps 3000000
--n_accum_steps 16
--init_lr 0.0006
Lisensi Apache 2.0