
Este repositorio proporciona el código para capacitar a los modelos japoneses previos a la pretrada. Este código se ha utilizado para producir japonés-GPT2-medio, japonés-GPT2-Small y japonés-base-base lanzado en Huggingface Model Hub por Rinna Co., Ltd.
Los modelos previos a los pretrados actualmente admitidos incluyen: GPT-2, Roberta.
| Tabla de contenido |
|---|
| Registro de actualizaciones |
| Use consejos |
| Use nuestros modelos previos a la aparición a través de Huggingface |
Entrenar japanese-gpt2-xsmall desde cero |
Entrena japanese-roberta-base desde cero |
| Licencia |
Abra un problema (en inglés/japonés) si encuentra algún problema con el código o usa nuestros modelos a través de Huggingface.
Si encuentra útil este trabajo, cite el siguiente documento:
@article{rinna_pretrained2021,
title={日本語自然言語処理における事前学習モデルの公開},
author={趙 天雨 and 沢田 慶},
journal={人工知能学会研究会資料 言語・音声理解と対話処理研究会},
volume={93},
pages={169-170},
year={2021},
doi={10.11517/jsaislud.93.0_169}
}
2022/01/25 Enlace actualizado a rinna/japanese-gpt-1b en la tabla de resumen del modelo.
2022/01/17 Información de citas actualizada.
2021/11/01 Enlaces de corpus actualizados.
2021/09/13 Se agregaron consejos sobre el uso de position_ids con japanese-roberta-base . Consulte el número 3 para más detalles.
2021/08/26 [IMPORTANTE] Licencia actualizada de la licencia MIT a la licencia Apache 2.0 debido al uso del código de preprocesamiento de Wikipedia de Cl-Tohoku/Bert-Japanse. Consulte el número 1 para más detalles.
2021/08/23 Se agregó Wikipedia japonesa a los corpus de capacitación. Código publicado para entrenamiento rinna/japanese-gpt2-small , rinna/japanese-gpt2-xsmall y rinna/japanese-roberta-base .
2021/08/18 cambió el nombre de repositorio de japanese-gpt2 a japanese-pretrained-models
2021/06/15 Se corrigió el mejor error de seguimiento de PPL al usar un punto de control.
2021/05/04 Se corrigió un error de siembra aleatoria para el entrenamiento multi-GPU.
2021/04/06 Código publicado para capacitar rinna/japanese-gpt2-medium .
rinna/japanese-roberta-base Use [CLS] : para predecir un token enmascarado, asegúrese de agregar un token [CLS] antes de que el modelo lo codifique correctamente, como se usa durante el entrenamiento del modelo.
Use [MASK] después de la tokenización: a) escribiendo directamente [MASK] en una cadena de entrada yb) reemplazar un token con [MASK] después de la tokenización producirá diferentes secuencias de tokens y, por lo tanto, diferentes resultados de predicción. Es más apropiado usar [MASK] después de la tokenización (ya que es consistente con la forma en que el modelo estaba provocado). Sin embargo, la API de inferencia de Huggingface solo admite la escritura [MASK] en la cadena de entrada y produce predicciones menos robustas.
Proporcione position_ids como argumento explícitamente: cuando position_ids no se proporcione para un modelo Roberta* , transformers de Huggingface lo construirán automáticamente pero comenzarán desde padding_idx en lugar de 0 (consulte el problema y la función create_position_ids_from_input_ids() en la implementación de Huggingface), que desafortunadamente no funciona como se esperan con rinna/japanese-roberta-base BASE- padding_idx -Base no es 0 . Así que asegúrese de construir el position_ids por usted mismo y hacer que comience desde la identificación de posición 0 .
| modelo | # parámetros | # Capas | # EMB DIM | #epochs | PPL de desarrollo | Tiempo de entrenamiento* |
|---|---|---|---|---|---|---|
| rinna/japonés-gpt-1b | 1.3b | veinticuatro | 2048 | 10+ | 13.9 | n / A** |
| rinna/japonés-gpt2-medium | 336m | veinticuatro | 1024 | 4 | 18 | 45 días |
| rinna/japonés-gpt2-pequeña | 110m | 12 | 768 | 3 | veintiuno | 15 días |
| rinna/japonés-gpt2-xsmall | 37m | 6 | 512 | 3 | 28 | 4 días |
| modelo de lenguaje enmascarado | # parámetros | # Capas | # EMB DIM | #epochs | PPL de desarrollo | Tiempo de entrenamiento* |
|---|---|---|---|---|---|---|
| rinna/japonés-base-base | 110m | 12 | 768 | 8 | 3.9 | 15 días |
* El entrenamiento se realizó en una máquina 8x V100 32GB.
** La capacitación se realizó utilizando una base de código diferente y un entorno informático diferente.
rinna/japanese-roberta-base para predecir el token enmascarado 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 desde ceroInstale los paquetes requeridos ejecutando el siguiente comando en el directorio de repo:
pip install -r requirements.txt
python -m unidic download
Descargue el Corpus de Training Corpus CC-100 y extraiga el archivo ja.txt .
Mueva el archivo ja.txt o modifique src/corpus/jp_cc100/config.py para que coincida con el filepath de ja.txt con self.raw_data_dir en el archivo de configuración.
Dividir ja.txt en archivos más pequeños ejecutando:
cd src/
python -m corpus.jp_cc100.split_to_small_files
self.download_link (en el archivo src/corpus/jp_wiki/config.py ) con el enlace a su versión de volcado Wikipedia preferida. Luego descargue el Corpus de entrenamiento Wikipedia japonés y divídala ejecutando: 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
Suponga que ha ejecutado el script de entrenamiento y ha guardado su GPT-2 de tamaño XSMall a data/model/pretrain_gpt2/gpt2-ja-xsmall-xxx.checkpoint . Ejecute el siguiente comando para usarlo para completar el texto en una GPU mediante muestreo de núcleo con p=0.95 y 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
Haga su cuenta de Huggingface. Crear un repositorio modelo. Clonarlo a su máquina local.
Cree archivos de modelo y configuración desde un punto de control ejecutando:
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}
Verifique los argumentos disponibles del guión de capacitación GPT-2 ejecutando:
python -m task.pretrain_gpt2.train --help
japanese-roberta-base desde ceroSuponga que ha terminado el proceso de construcción de datos como se describió anteriormente, ejecute el siguiente comando para entrenar a una Roberta japonesa de tamaño base en, por ejemplo, 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 licencia Apache 2.0