
พื้นที่เก็บข้อมูลนี้ให้รหัสสำหรับการฝึกอบรมแบบจำลองที่ได้รับการฝึกฝนจากญี่ปุ่น รหัสนี้ใช้สำหรับการผลิตญี่ปุ่น-GPT2-Medium, Japanese-GPT2-SMALL และ Japanese-Roberta-Base ที่เปิดตัวบน HuggingFace Model Hub โดย Rinna Co. , Ltd.
รุ่นที่ได้รับการสนับสนุนในปัจจุบัน ได้แก่ : GPT-2, Roberta
| สารบัญ |
|---|
| อัพเดทบันทึก |
| ใช้เคล็ดลับ |
| ใช้โมเดลที่ผ่านการฝึกอบรมของเราผ่าน HuggingFace |
ฝึกอบรม japanese-gpt2-xsmall ตั้งแต่เริ่มต้น |
ฝึกอบรม japanese-roberta-base ตั้งแต่เริ่มต้น |
| ใบอนุญาต |
กรุณาเปิดปัญหา (เป็นภาษาอังกฤษ/ญี่ปุ่น) หากคุณพบปัญหาใด ๆ โดยใช้รหัสหรือใช้โมเดลของเราผ่าน HuggingFace
หากคุณพบว่างานนี้มีประโยชน์โปรดอ้างอิงกระดาษต่อไปนี้:
@article{rinna_pretrained2021,
title={日本語自然言語処理における事前学習モデルの公開},
author={趙 天雨 and 沢田 慶},
journal={人工知能学会研究会資料 言語・音声理解と対話処理研究会},
volume={93},
pages={169-170},
year={2021},
doi={10.11517/jsaislud.93.0_169}
}
2022/01/25 ลิงก์อัปเดตไปยัง rinna/japanese-gpt-1b ในตารางสรุปโมเดล
2022/01/17 ข้อมูลการอ้างอิงที่อัปเดต
2021/11/01 ลิงก์ Corpora ที่อัปเดตแล้ว
2021/09/13 เพิ่มเคล็ดลับในการใช้ position_ids กับ japanese-roberta-base อ้างถึงฉบับที่ 3 สำหรับรายละเอียด
2021/08/26 [สำคัญ] ใบอนุญาตที่ได้รับการปรับปรุงจากใบอนุญาต MIT ไปยังใบอนุญาต Apache 2.0 เนื่องจากการใช้รหัสการประมวลผลล่วงหน้าของ Wikipedia จาก CL-Tohoku/Bert-Japanese ดูฉบับที่ 1 สำหรับรายละเอียด
2021/08/23 เพิ่มวิกิพีเดียญี่ปุ่นลงในการฝึกอบรม Corpora รหัสที่เผยแพร่สำหรับการฝึกอบรม rinna/japanese-gpt2-small , rinna/japanese-gpt2-xsmall และ rinna/japanese-roberta-base
2021/08/18 เปลี่ยนชื่อ repo จาก japanese-gpt2 เป็น japanese-pretrained-models
2021/06/15 แก้ไขข้อผิดพลาดการติดตาม PPL ที่ดีที่สุดเมื่อใช้จุดตรวจ
2021/05/04 แก้ไขข้อผิดพลาดการเพาะสุ่มสำหรับการฝึกอบรมหลาย GPU
2021/04/06 รหัสที่เผยแพร่สำหรับการฝึกอบรม rinna/japanese-gpt2-medium
rinna/japanese-roberta-base ใช้ [CLS] : ในการทำนายโทเค็นหน้ากากให้แน่ใจว่าได้เพิ่มโทเค็น [CLS] ก่อนที่ประโยคสำหรับโมเดลจะเข้ารหัสอย่างถูกต้องตามที่ใช้ในระหว่างการฝึกอบรมแบบจำลอง
ใช้ [MASK] หลังจากโทเค็น: a) พิมพ์ [MASK] โดยตรงในสตริงอินพุตและ b) แทนที่โทเค็นด้วย [MASK] หลังจากโทเค็นจะให้ลำดับโทเค็นที่แตกต่างกันและผลลัพธ์การทำนายที่แตกต่างกัน มันเหมาะสมกว่าที่จะใช้ [MASK] หลังจากโทเค็น (เนื่องจากมันสอดคล้องกับวิธีการปรับแต่งแบบจำลอง) อย่างไรก็ตาม API การอนุมาน HuggingFace รองรับการพิมพ์ [MASK] ในสตริงอินพุตและสร้างการคาดการณ์ที่แข็งแกร่งน้อยกว่า
ให้ position_ids เป็นอาร์กิวเมนต์อย่างชัดเจน: เมื่อ position_ids ไม่ได้จัดเตรียมไว้สำหรับโมเดล Roberta* transformers ของ HuggingFace จะสร้างมันขึ้นมาโดยอัตโนมัติ แต่เริ่มต้นจาก padding_idx แทน 0 (ดูปัญหาและ rinna/japanese-roberta-base ชั่น padding_idx create_position_ids_from_input_ids() Tokenizer ไม่ใช่ 0 ดังนั้นโปรดตรวจสอบให้แน่ใจว่าได้ จำกัด position_ids ด้วยตัวเองและทำให้มันเริ่มต้นจาก ID ตำแหน่ง 0
| รูปแบบภาษา | # params | # เลเยอร์ | # EMB DIM | #epochs | dev ppl | เวลาฝึกอบรม* |
|---|---|---|---|---|---|---|
| Rinna/Japanese-GPT-1B | 1.3b | ยี่สิบสี่ | 2048 | 10+ | 13.9 | n/a ** |
| Rinna/Japanese-GPT2-Medium | 336m | ยี่สิบสี่ | 1024 | 4 | 18 | 45 วัน |
| Rinna/Japanese-GPT2-Small | 110m | 12 | 768 | 3 | ยี่สิบเอ็ด | 15 วัน |
| Rinna/Japanese-GPT2-XSMALL | 37m | 6 | 512 | 3 | 28 | 4 วัน |
| รูปแบบภาษาที่สวมหน้ากาก | # params | # เลเยอร์ | # EMB DIM | #epochs | dev ppl | เวลาฝึกอบรม* |
|---|---|---|---|---|---|---|
| Rinna/Japanese-Roberta-base | 110m | 12 | 768 | 8 | 3.9 | 15 วัน |
* การฝึกอบรมได้ดำเนินการกับเครื่อง 8x V100 32GB
** การฝึกอบรมได้ดำเนินการโดยใช้ codebase ที่แตกต่างกันและสภาพแวดล้อมการคำนวณที่แตกต่างกัน
rinna/japanese-roberta-base สำหรับทำนายโทเค็นหน้ากาก 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 ตั้งแต่เริ่มต้นติดตั้งแพ็คเกจที่ต้องการโดยเรียกใช้คำสั่งต่อไปนี้ภายใต้ไดเรกทอรี repo:
pip install -r requirements.txt
python -m unidic download
ดาวน์โหลดการฝึกอบรมคอร์ปัสญี่ปุ่น CC-100 และแยกไฟล์ ja.txt
ย้ายไฟล์ ja.txt หรือแก้ไข src/corpus/jp_cc100/config.py เพื่อให้ตรงกับ filepath ของ ja.txt ด้วย self.raw_data_dir ในไฟล์กำหนดค่า
แยก ja.txt ไปยังไฟล์ขนาดเล็กโดยเรียกใช้:
cd src/
python -m corpus.jp_cc100.split_to_small_files
self.download_link (ในไฟล์ src/corpus/jp_wiki/config.py ) พร้อมลิงก์ไปยังเวอร์ชันการถ่ายโอนข้อมูลวิกิพีเดียที่คุณต้องการ จากนั้นดาวน์โหลดการฝึกอบรมคอร์ปัสญี่ปุ่นวิกิพีเดียและแยกมันด้วยการวิ่ง: 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
สมมติว่าคุณได้เรียกใช้สคริปต์การฝึกอบรมและบันทึก GPT-2 ขนาด XSMALL ของคุณเป็น data/model/pretrain_gpt2/gpt2-ja-xsmall-xxx.checkpoint เรียกใช้คำสั่งต่อไปนี้เพื่อใช้เพื่อกรอกข้อความในหนึ่ง GPU โดยการสุ่มตัวอย่างนิวเคลียสด้วย p=0.95 และ 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
ทำให้บัญชี HuggingFace ของคุณ สร้าง repo แบบจำลอง โคลนกับเครื่องในพื้นที่ของคุณ
สร้างไฟล์รุ่นและกำหนดค่าจากจุดตรวจสอบโดยรัน:
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}
ตรวจสอบข้อโต้แย้งที่มีอยู่ของสคริปต์การฝึกอบรม GPT-2 โดยการรัน:
python -m task.pretrain_gpt2.train --help
japanese-roberta-base ตั้งแต่เริ่มต้นสมมติว่าคุณได้เสร็จสิ้นกระบวนการสร้างข้อมูลตามที่อธิบายไว้ข้างต้นให้เรียกใช้คำสั่งต่อไปนี้เพื่อฝึกอบรม Roberta ขนาดฐานขนาดพื้นฐานเช่น 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
ใบอนุญาต Apache 2.0