
이 저장소는 일본식 사기 모델을 훈련하기위한 코드를 제공합니다. 이 코드는 Rinna Co., Ltd의 Huggingface Model Hub에 출시 된 일본 GPT2- 메드, 일본 GPT2 스몰 및 일본-로베르타베이스를 생산하는 데 사용되었습니다.
현재 지원되는 사전 치료 모델에는 다음이 포함됩니다. 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은 japanese-roberta-base 와 함께 position_ids 사용하는 것에 대한 팁을 추가했습니다. 자세한 내용은 3 호를 참조하십시오.
2021/08/26 [중요] CL-Tohoku/Bert-Japanese의 Wikipedia 사전 처리 코드 사용으로 인해 MIT 라이센스에서 Apache 2.0 라이센스로 라이센스가 업데이트되었습니다. 자세한 내용은 문제 1을 참조하십시오.
2021/08/23은 Corpora 훈련에 일본 Wikipedia를 추가했습니다. 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] 사용하는 것이 더 적절합니다. 그러나 Huggingface 추론 API는 입력 문자열에서 [MASK] 입력 만 지원하고 덜 강력한 예측을 생성합니다.
position_ids 명시 적으로 제공합니다. position_ids Roberta* 모델에 제공되지 않으면 Huggingface의 transformers 자동으로 구성되지만 0 대신 padding_idx 에서 padding_idx 하여 (문제 및 rinna/japanese-roberta-base create_position_ids_from_input_ids() 참조하십시오. 0 이 아닙니다. 따라서 position_ids 직접 제한하고 위치 ID 0 에서 시작하도록하십시오.
| 언어 모델 | # 매개 변수 | # 레이어 | # EMB DIM | #epochs | Dev Ppl | 훈련 시간* |
|---|---|---|---|---|---|---|
| Rinna/Japanese-Gpt-1B | 1.3b | 24 | 2048 | 10+ | 13.9 | 해당 없음 ** |
| Rinna/Japanese-GPT2-Medium | 336m | 24 | 1024 | 4 | 18 | 45 일 |
| Rinna/Japanese-GPT2-Small | 110m | 12 | 768 | 3 | 스물 하나 | 15 일 |
| Rinna/Japanese-GPT2-XSMALL | 37m | 6 | 512 | 3 | 28 | 4 일 |
| 마스크 언어 모델 | # 매개 변수 | # 레이어 | # EMB DIM | #epochs | Dev Ppl | 훈련 시간* |
|---|---|---|---|---|---|---|
| Rinna/Japanese-Roberta-Base | 110m | 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 처음부터 훈련하십시오Repo 디렉토리에서 다음 명령을 실행하여 필수 패키지를 설치하십시오.
pip install -r requirements.txt
python -m unidic download
Training Corpus Japanese CC-100을 다운로드하고 ja.txt 파일을 추출하십시오.
ja.txt 파일을 이동하거나 src/corpus/jp_cc100/config.py ja.txt 파일에서 self.raw_data_dir 와 일치하도록 src/corpus/jp_cc100/config.py를 수정하십시오.
실행하여 ja.txt 작은 파일로 분할 :
cd src/
python -m corpus.jp_cc100.split_to_small_files
self.download_link (파일 src/corpus/jp_wiki/config.py )를 채우십시오. 그런 다음 Training Corpus Japanese Wikipedia를 다운로드하여 실행하여 분할하십시오. 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
훈련 스크립트를 실행하고 XSMALL 크기의 GPT-2를 data/model/pretrain_gpt2/gpt2-ja-xsmall-xxx.checkpoint 에 저장했다고 가정하십시오. 다음 명령을 실행하여 p=0.95 및 k=40 으로 핵 샘플링하여 하나의 GPU에서 텍스트를 완료하는 데 사용합니다.
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 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
Apache 2.0 라이센스