
يوفر هذا المستودع رمزًا لتدريب النماذج اليابانية المسبقة. تم استخدام هذا الرمز لإنتاج Medium الياباني-GPT2 ، و GPT2-Small الياباني ، و 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 [مهم] ترخيص محدث من ترخيص معهد ماساتشوستس للتكنولوجيا إلى ترخيص Apache 2.0 بسبب استخدام رمز المعالجة المسبقة لـ Wikipedia من CL-TOKU/BERT-Japanese. انظر العدد 1 للحصول على التفاصيل.
2021/08/23 أضيفت ويكيبيديا اليابانية إلى شركة تدريب. رمز منشور لتدريب rinna/japanese-gpt2-small ، rinna/japanese-gpt2-xsmall ، و rinna/japanese-roberta-base .
2021/08/18 تم تغيير اسم الريبو من japanese-pretrained-models japanese-gpt2
2021/06/15 تم إصلاح أفضل خطأ في تتبع PPL عند استخدام نقطة تفتيش.
2021/05/04 علة البذر العشوائية الثابتة للتدريب متعدد GPU.
2021/04/06 رمز المنشور لتدريب rinna/japanese-gpt2-medium .
rinna/japanese-roberta-base استخدم [CLS] : للتنبؤ برمز مقنع ، تأكد من إضافة رمز [CLS] قبل الجملة للنموذج لتشفيره بشكل صحيح ، حيث يتم استخدامه أثناء التدريب النموذجي.
استخدم [MASK] بعد الرمز المميز: أ) الكتابة مباشرة [MASK] في سلسلة إدخال و B) استبدال رمز رمز مع [MASK] بعد الرمز المميز سيؤدي إلى تسلسلات رمزية مختلفة ، وبالتالي نتائج التنبؤ المختلفة. من الأنسب استخدام [MASK] بعد الرمز المميز (لأنه يتماشى مع كيفية تمثيل النموذج). ومع ذلك ، فإن واجهة برمجة تطبيقات الاستدلال المعانقة تدعم فقط كتابة [MASK] في سلسلة الإدخال وتنتج تنبؤات أقل قوة.
قم بتوفير position_ids كبديل بشكل صريح: عندما لا يتم توفير position_ids لنموذج Roberta* ، ستقوم transformers Huggingface تلقائيًا بإنشائها ولكن تبدأ من padding_idx بدلاً من 0 (انظر المشكلة والوظيفة create_position_ids_from_input_ids() في تطبيق Luggingface) padding_idx والتي لا تعمل 0 كما هو متوقع مع rinna/japanese-roberta-base . لذا يرجى التأكد من قيام بتقديم position_ids بنفسك وجعله يبدأ من معرف موضع 0 .
| نموذج اللغة | # params | # طبقات | # EMB DIM | #epochs | ديف PPL | وقت التدريب* |
|---|---|---|---|---|---|---|
| رينا/اليابانية-GPT-1B | 1.3 ب | أربعة وعشرون | 2048 | 10+ | 13.9 | n/a ** |
| رينا/اليابانية-GPT2-Medium | 336 م | أربعة وعشرون | 1024 | 4 | 18 | 45 يومًا |
| رينا/اليابانية-GPT2-Small | 110 م | 12 | 768 | 3 | واحد وعشرون | 15 يومًا |
| RINNA/اليابانية-GPT2-XSMALL | 37 م | 6 | 512 | 3 | 28 | 4 أيام |
| نموذج اللغة المقنعة | # params | # طبقات | # EMB DIM | #epochs | ديف PPL | وقت التدريب* |
|---|---|---|---|---|---|---|
| رينا/اليابانية-روبرتا القاعدة | 110 م | 12 | 768 | 8 | 3.9 | 15 يومًا |
* تم إجراء التدريب على آلة 8x V100 32GB.
** تم إجراء التدريب باستخدام قاعدة كود مختلفة وبيئة حوسبة مختلفة.
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 من الصفرتثبيت الحزم المطلوبة عن طريق تشغيل الأمر التالي ضمن دليل الريبو:
pip install -r requirements.txt
python -m unidic download
قم بتنزيل Corpus Corpus الياباني 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 ) مع الرابط إلى إصدار تفريغ Wikipedia المفضل لديك. ثم قم بتنزيل تدريب Corpus الياباني ويكيبيديا وقسمه عن طريق الجري: 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 . قم بتشغيل الأمر التالي لاستخدامه لإكمال النص على وحدة معالجة الرسومات الواحدة عن طريق أخذ عينات من Nucleus مع 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
اجعل حساب Luggingface الخاص بك. إنشاء نموذج ريبو. استنساخها إلى جهازك المحلي.
قم بإنشاء ملفات النموذج والتكوين من نقطة تفتيش عن طريق التشغيل:
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 من الصفرافترض أنك انتهيت من عملية بناء البيانات كما هو موضح أعلاه ، قم بتشغيل الأمر التالي لتدريب روبرتا ياباني بحجم قاعدة ، على سبيل المثال ، 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