
Ce référentiel fournit le code pour la formation de modèles japonais pré-entraînés. Ce code a été utilisé pour la production de japonais-GPT2-Medium, Japanese-GPT2-Small et Japanese-Roberta-base publié sur HuggingFace Model Hub By Rinna Co., Ltd.
Les modèles pré-étendus actuellement pris en charge comprennent: GPT-2, Roberta.
| Table des matières |
|---|
| Mettre à jour le journal |
| Utiliser des conseils |
| Utilisez nos modèles pré-entraînés via HuggingFace |
Train japanese-gpt2-xsmall à partir de zéro |
Entraîner japanese-roberta-base à partir de zéro |
| Licence |
Veuillez ouvrir un problème (en anglais / japonais) si vous rencontrez un problème en utilisant le code ou en utilisant nos modèles via HuggingFace.
Si vous trouvez ce travail utile, veuillez citer l'article suivant:
@article{rinna_pretrained2021,
title={日本語自然言語処理における事前学習モデルの公開},
author={趙 天雨 and 沢田 慶},
journal={人工知能学会研究会資料 言語・音声理解と対話処理研究会},
volume={93},
pages={169-170},
year={2021},
doi={10.11517/jsaislud.93.0_169}
}
2022/01/25 Lien mis à jour vers rinna/japanese-gpt-1b dans le tableau Résumé du modèle.
2022/01/17 Informations de citation mises à jour.
2021/11/01 Liens de corpus mis à jour.
2021/09/13 Ajout de conseils sur l'utilisation position_ids avec japanese-roberta-base . Reportez-vous au numéro 3 pour plus de détails.
2021/08/26 [IMPORTANT] Licence mise à jour de la licence MIT à la licence Apache 2.0 en raison de l'utilisation du code de prétraitement Wikipedia de Cl-Tohoku / Bert-Japanese. Voir le numéro 1 pour plus de détails.
2021/08/23 Ajout de Wikipedia japonaise aux corpus de formation. Code publié pour la formation rinna/japanese-gpt2-small , rinna/japanese-gpt2-xsmall et rinna/japanese-roberta-base .
2021/08/18 Changement de nom de repo du japanese-gpt2 aux japanese-pretrained-models
2021/06/15 Correction du meilleur bug de suivi des personnes lors de l'utilisation d'un point de contrôle.
2021/05/04 Correction d'un bug de semis aléatoire pour la formation multi-GPU.
2021/04/06 Code publié pour la formation rinna/japanese-gpt2-medium .
rinna/japanese-roberta-base Utilisez [CLS] : Pour prédire un jeton masqué, assurez-vous d'ajouter un jeton [CLS] avant que la phrase pour que le modèle ne le codent correctement, car elle est utilisée pendant la formation du modèle.
Utiliser [MASK] Après la tokenisation: a) Typer directement [MASK] dans une chaîne d'entrée et B) Remplacement d'un jeton par [MASK] Une fois la tokenisation, il produira différentes séquences de jetons, et donc des résultats de prédiction différents. Il est plus approprié d'utiliser [MASK] après la tokenisation (car il est cohérent avec la façon dont le modèle a été pré-étiré). Cependant, l'API d'inférence HuggingFace ne prend en charge que la saisie [MASK] dans la chaîne d'entrée et produit des prédictions moins robustes.
Fournir explicitement position_ids en tant qu'argument: lorsque position_ids n'est pas fourni pour un modèle Roberta* , transformers de HuggingFace le construisent automatiquement mais commenceront à partir de padding_idx au lieu de 0 (voir Implémentation et fonction create_position_ids_from_input_ids() dans la mise en padding_idx de HuggingFace), qui ne fonctionne malheureusement 0 avec rinna/japanese-roberta-base . Assurez-vous donc de contracter le position_ids par vous-même et de le démarrer de l'ID de position 0 .
| modèle de langue | # Params | # couches | # EMB DIM | #Pochs | dev ppl | temps de formation * |
|---|---|---|---|---|---|---|
| Rinna / Japanese-GPT-1b | 1.3b | vingt-quatre | 2048 | 10+ | 13.9 | n / A** |
| Rinna / Japanese-GPT2-Medium | 336m | vingt-quatre | 1024 | 4 | 18 | 45 jours |
| Rinna / Japanese-GPT2-Small | 110m | 12 | 768 | 3 | vingt-et-un | 15 jours |
| Rinna / Japanese-GPT2-XSMALL | 37m | 6 | 512 | 3 | 28 | 4 jours |
| modèle de langue masquée | # Params | # couches | # EMB DIM | #Pochs | dev ppl | temps de formation * |
|---|---|---|---|---|---|---|
| Rinna / japonais-Roberta-base | 110m | 12 | 768 | 8 | 3.9 | 15 jours |
* La formation a été menée sur une machine 8x V100 32 Go.
** La formation a été menée à l'aide d'une base de code différente et d'un environnement informatique différent.
rinna/japanese-roberta-base pour prédire le jeton masqué 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 à partir de zéroInstallez les packages requis en exécutant la commande suivante sous le répertoire Repo:
pip install -r requirements.txt
python -m unidic download
Téléchargez la formation Corpus Japonais CC-100 et extraire le fichier ja.txt .
Déplacez le fichier ja.txt ou modifiez src/corpus/jp_cc100/config.py pour correspondre au fichier FilePath de ja.txt avec self.raw_data_dir dans le fichier config.
Diviser ja.txt en fichiers plus petits en exécutant:
cd src/
python -m corpus.jp_cc100.split_to_small_files
self.download_link (dans le fichier src/corpus/jp_wiki/config.py ) avec le lien vers votre version de vidage Wikipedia préférée. Ensuite, téléchargez la formation du corpus japonais wikipedia et divisez-le en fonctionnant: 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
Supposons que vous avez exécuté le script d'entraînement et enregistré votre GPT-2 de taille XSMALL à data/model/pretrain_gpt2/gpt2-ja-xsmall-xxx.checkpoint . Exécutez la commande suivante pour l'utiliser pour terminer le texte sur un GPU par échantillonnage du noyau avec p=0.95 et 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
Faites votre compte HuggingFace. Créez un modèle de modèle. Connez-le à votre machine locale.
Créez des fichiers de modèle et de configuration à partir d'un point de contrôle en exécutant:
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}
Vérifiez les arguments disponibles du script de formation GPT-2 en fonctionnant:
python -m task.pretrain_gpt2.train --help
japanese-roberta-base à partir de zéroSupposons que vous ayez terminé le processus de construction de données comme décrit ci-dessus, exécutez la commande suivante pour former une Roberta japonaise de taille de base, par exemple, 8 GPU V100:
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
La licence Apache 2.0