
Dieses Repository bietet den Code für die Schulung japanischer vorbereiteter Modelle. Dieser Code wurde zur Herstellung von Japanisch-GPT2-Medium, Japanisch-GPT2-Small und Japaner-Roberta-Base verwendet, die auf dem Hubface-Modell Hub von Rinna Co., Ltd.
Zu den derzeit unterstützten vorbereiteten Modellen gehören: GPT-2, Roberta.
| Inhaltsverzeichnis |
|---|
| Aktualisieren Sie das Protokoll |
| Tipps verwenden |
| Verwenden Sie unsere vorbereiteten Modelle über das Umarmungsface |
Trainieren Sie japanese-gpt2-xsmall von Grund auf neu |
Trainieren Sie japanese-roberta-base von Grund auf neu |
| Lizenz |
Bitte öffnen Sie ein Problem (in englischer Sprache/Japanisch), wenn Sie ein Problem verwenden, wenn Sie den Code verwenden oder unsere Modelle über das Huggingface verwenden.
Wenn Sie diese Arbeit nützlich finden, zitieren Sie bitte das folgende Papier:
@article{rinna_pretrained2021,
title={日本語自然言語処理における事前学習モデルの公開},
author={趙 天雨 and 沢田 慶},
journal={人工知能学会研究会資料 言語・音声理解と対話処理研究会},
volume={93},
pages={169-170},
year={2021},
doi={10.11517/jsaislud.93.0_169}
}
2022/01/25 Aktualisierter Link zu rinna/japanese-gpt-1b in der Modellübersichtstabelle.
2022/01/17 Aktualisierte Zitierinformationen.
2021/11/01 Aktualisierte Corpora -Links.
2021/09/13 fügte Tipps zur Verwendung von position_ids mit japanese-roberta-base hinzu. Einzelheiten finden Sie in Ausgabe 3.
2021/08/26 [Wichtig] Aktualisierte Lizenz aus der MIT-Lizenz für die Apache 2.0-Lizenz aufgrund der Verwendung des vorverarbeiteten Wikipedia-Code von CL-zuhoku/Bert-Japanese. Weitere Informationen finden Sie in Ausgabe 1.
2021/08/23 fügte japanische Wikipedia zur Ausbildung von Korpora hinzu. Veröffentlichter Code für Schulungen rinna/japanese-gpt2-small , rinna/japanese-gpt2-xsmall und rinna/japanese-roberta-base .
2021/08/18 geändertem Repo-Name von japanese-gpt2 in japanese-pretrained-models geändert
2021/06/15 Das Beste PPL -Tracking -Fehler bei Verwendung eines Kontrollpunkts behoben.
2021/05/04 behoben zufällige Aussaatfehler für das Multi-GPU-Training.
2021/04/06 veröffentlichter Code für Schulungen rinna/japanese-gpt2-medium .
rinna/japanese-roberta-base Verwenden Sie [CLS] : Um ein maskiertes Token vorherzusagen, addieren Sie unbedingt ein [CLS] -Token vor dem Satz, damit das Modell es korrekt codiert, wie es während des Modelltrainings verwendet wird.
Verwenden Sie [MASK] nach Tokenisierung: a) Direkt eingeben [MASK] in einer Eingangszeichenfolge und b) Ersetzen eines Tokens durch [MASK] nach der Tokenisierung liefert unterschiedliche Token -Sequenzen und somit unterschiedliche Vorhersageergebnisse. Es ist angemessener, [MASK] nach der Tokenisierung zu verwenden (da es mit der Vorbereitung des Modells übereinstimmt). Die API von Suggingface -Inferenz unterstützt jedoch nur die Eingabe [MASK] in der Eingangszeichenfolge und erzeugt weniger robuste Vorhersagen.
Geben Sie explizit als Argument als Argument an: Wenn position_ids für ein Roberta* -Modell nicht bereitgestellt werden, konstruieren transformers von Huggingface es automatisch position_ids sondern starten Sie von padding_idx anstelle von 0 (siehe Function create_position_ids_from_input_ids() bei der padding_idx des Umarmungens, die mit rinna/japanese-roberta-base . ist nicht 0 . Stellen Sie also sicher, dass Sie die position_ids selbst einschränken und sie von der Position ID 0 beginnen.
| Sprachmodell | # Parames | # Schichten | # emb dim | #epochs | dev ppl | Trainingszeit* |
|---|---|---|---|---|---|---|
| Rinna/Japanisch-GPT-1B | 1.3b | vierundzwanzig | 2048 | 10+ | 13.9 | n / A** |
| Rinna/Japanisch-GPT2-Medium | 336 m | vierundzwanzig | 1024 | 4 | 18 | 45 Tage |
| Rinna/Japanisch-GPT2-Small | 110 m | 12 | 768 | 3 | Einundzwanzig | 15 Tage |
| Rinna/Japanisch-GPT2-XSmall | 37m | 6 | 512 | 3 | 28 | 4 Tage |
| maskiertes Sprachmodell | # Parames | # Schichten | # emb dim | #epochs | dev ppl | Trainingszeit* |
|---|---|---|---|---|---|---|
| Rinna/Japanisch-Roberta-Base | 110 m | 12 | 768 | 8 | 3.9 | 15 Tage |
* Das Training wurde auf einer 8x V100 32 -GB -Maschine durchgeführt.
** Die Schulung wurde unter Verwendung einer anderen Codebasis und einer anderen Computerumgebung durchgeführt.
rinna/japanese-roberta-base zur Vorhersage maskierter Token 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 von Grund auf neuInstallieren Sie die erforderlichen Pakete, indem Sie den folgenden Befehl im Repo -Verzeichnis ausführen:
pip install -r requirements.txt
python -m unidic download
Laden Sie das Japanische CC-100 des Trainings Corpus herunter und extrahieren Sie die ja.txt Datei.
Verschieben Sie die ja.txt -Datei oder ändern Sie src/corpus/jp_cc100/config.py so, dass sie mit dem Filepath von ja.txt mit self.raw_data_dir in der Konfigurationsdatei übereinstimmen.
Teilen Sie ja.txt in kleinere Dateien, indem Sie ausführen:
cd src/
python -m corpus.jp_cc100.split_to_small_files
self.download_link (in der Datei src/corpus/jp_wiki/config.py ) mit dem Link zu Ihrer bevorzugten Wikipedia -Dump -Version aus. Laden Sie dann die japanische Wikipedia -Training Corpus herunter und teilen Sie es durch Laufen auf: 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
Nehmen wir an, Sie haben das Trainingsskript ausgeführt und Ihr XSmall-Größe GPT-2 in data/model/pretrain_gpt2/gpt2-ja-xsmall-xxx.checkpoint gespeichert. Führen Sie den folgenden Befehl aus, um den Text auf einer GPU durch Nucleus -Probenahme mit p=0.95 und k=40 zu vervollständigen:
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
Machen Sie Ihr Umarmungskonto. Erstellen Sie ein Modellrepo. Klonen Sie es auf Ihre lokale Maschine.
Erstellen Sie Modell- und Konfigurationsdateien aus einem Kontrollpunkt, indem Sie ausführen:
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}
Überprüfen Sie die verfügbaren Argumente des GPT-2-Trainingsskripts durch Ausführen:
python -m task.pretrain_gpt2.train --help
japanese-roberta-base von Grund auf neuNehmen wir an, Sie haben den Datenkonstruktionsprozess wie oben beschrieben abgeschlossen. Führen Sie den folgenden Befehl aus, um eine japanische Roberta in Grundgröße zu trainieren, beispielsweise 8 V100 GPUs:
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
Die Apache 2.0 -Lizenz