inglés |中文
La formación previa se ha convertido en una parte esencial de la tecnología de IA. TencentPretrain es un conjunto de herramientas para la capacitación previa y el ajuste de datos de diferentes modalidades (por ejemplo, texto y visión). TencentPretrain se caracteriza por un diseño modular. Facilita el uso de modelos de preentrenamiento existentes y proporciona interfaces para que los usuarios puedan ampliarlos aún más. Con TencentPretrain, construimos un zoológico modelo que contiene modelos previamente entrenados de diferentes propiedades. TencentPretrain hereda el kit de herramientas de código abierto UER (https://github.com/dbiir/UER-py/) y lo extiende a un marco de preentrenamiento multimodal.
TencentPretrain tiene las siguientes características:
Esta sección utiliza varios ejemplos de uso común para demostrar cómo usar TencentPretrain. Se analizan más detalles en la sección Instrucciones. En primer lugar, utilizamos BERT (un modelo de preentrenamiento de texto) en un conjunto de datos de clasificación de sentimientos de reseñas de libros. Entrenamos previamente el modelo en el corpus de reseñas de libros y luego lo ajustamos en el conjunto de datos de clasificación de sentimientos de reseñas de libros. Hay tres archivos de entrada: corpus de reseñas de libros, conjunto de datos de clasificación de sentimientos de reseñas de libros y vocabulario. Todos los archivos están codificados en UTF-8 y se incluyen en este proyecto.
El formato del corpus para BERT es el siguiente (una oración por línea y los documentos están delimitados por líneas vacías):
doc1-sent1
doc1-sent2
doc1-sent3
doc2-sent1
doc3-sent1
doc3-sent2
El corpus de reseñas de libros se obtiene del conjunto de datos de clasificación de sentimientos de reseñas de libros. Eliminamos etiquetas y dividimos una reseña en dos partes desde el medio para construir un documento con dos oraciones (ver book_review_bert.txt en la carpeta de corpus ).
El formato del conjunto de datos de clasificación es el siguiente:
label text_a
1 instance1
0 instance2
1 instance3
La etiqueta y la instancia están separadas por t . La primera fila es una lista de nombres de columnas. El ID de la etiqueta debe ser un número entero entre (incluidos) 0 y n-1 para la clasificación de n vías.
Utilizamos el archivo de vocabulario chino de Google models/google_zh_vocab.txt , que contiene 21128 caracteres chinos.
En primer lugar, preprocesamos el corpus de reseñas del libro. En la etapa de preprocesamiento, el corpus debe procesarse en el formato requerido por el modelo de preentrenamiento especificado ( --data_processor ):
python3 preprocess.py --corpus_path corpora/book_review_bert.txt --vocab_path models/google_zh_vocab.txt
--dataset_path dataset.pt --processes_num 8 --data_processor bert
Observe que se requiere six>=1.12.0 .
El preprocesamiento requiere mucho tiempo. El uso de múltiples procesos puede acelerar en gran medida la velocidad de preprocesamiento ( --processes_num ). El tokenizador BERT se utiliza de forma predeterminada ( --tokenizer bert ). Después del preprocesamiento, el texto sin formato se convierte a dataset.pt , que es la entrada de pretrain.py . Luego descargamos el modelo BERT chino previamente entrenado de Google google_zh_model.bin (en formato TencentPretrain y el modelo original es de aquí) y lo colocamos en la carpeta de modelos . Cargamos el modelo BERT chino previamente entrenado y lo entrenamos previamente en un corpus de reseñas de libros. El modelo de preentrenamiento generalmente se compone de capas de incrustación, codificador y destino. Para construir un modelo de preentrenamiento, debemos proporcionar información relacionada. El archivo de configuración ( --config_path ) especifica los módulos e hiperparámetros utilizados por los modelos de preentrenamiento. Se pueden encontrar más detalles en models/bert/base_config.json . Supongamos que tenemos una máquina con 8 GPU:
python3 pretrain.py --dataset_path dataset.pt --vocab_path models/google_zh_vocab.txt
--pretrained_model_path models/google_zh_model.bin
--config_path models/bert/base_config.json
--output_model_path models/book_review_model.bin
--world_size 8 --gpu_ranks 0 1 2 3 4 5 6 7
--total_steps 5000 --save_checkpoint_steps 1000 --batch_size 32
mv models/book_review_model.bin-5000 models/book_review_model.bin
Observe que el modelo entrenado por pretrain.py recibe el sufijo que registra el paso de entrenamiento ( --total_steps ). Podríamos eliminar el sufijo para facilitar su uso.
Luego, ajustamos el modelo previamente entrenado en el conjunto de datos de clasificación posterior. Usamos capas de incrustación y codificador de book_review_model.bin , que es la salida de pretrain.py :
python3 finetune/run_classifier.py --pretrained_model_path models/book_review_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--train_path datasets/book_review/train.tsv
--dev_path datasets/book_review/dev.tsv
--test_path datasets/book_review/test.tsv
--epochs_num 3 --batch_size 32
La ruta predeterminada del modelo clasificador ajustado es models/finetuned_model.bin . Es notable que el tamaño real del lote de preentrenamiento es --batch_size veces --world_size ; El tamaño de lote real de la tarea posterior (por ejemplo, clasificación) es --batch_size . Luego hacemos inferencias con el modelo ajustado.
python3 inference/run_classifier_infer.py --load_model_path models/finetuned_model.bin
--vocab_path models/google_zh_vocab.txt
--config_path models/bert/base_config.json
--test_path datasets/book_review/test_nolabel.tsv
--prediction_path datasets/book_review/prediction.tsv
--labels_num 2
--test_path especifica la ruta del archivo que se va a predecir. El archivo debe contener la columna text_a. --prediction_path especifica la ruta del archivo con los resultados de la predicción. Necesitamos especificar explícitamente el número de etiquetas mediante --labels_num . El conjunto de datos anterior es un conjunto de datos de clasificación bidireccional.
El contenido anterior proporciona formas básicas de utilizar TencentPretrain para preprocesar, entrenar previamente, ajustar y realizar inferencias. Se pueden encontrar más casos de uso en el ➡️ inicio rápido ⬅️ completo. El inicio rápido completo contiene abundantes casos de uso y cubre la mayoría de los escenarios de aplicaciones relacionados con la capacitación previa. Se recomienda que los usuarios lean el inicio rápido completo para poder utilizar el proyecto de manera razonable.
Esta sección proporciona enlaces a una variedad de ➡️ datos previos al entrenamiento ⬅️. TencentPretrain puede cargar estos datos previos al entrenamiento directamente.
Esta sección proporciona enlaces a una variedad de ➡️ conjuntos de datos posteriores ⬅️. TencentPretrain puede cargar estos conjuntos de datos directamente.
Con la ayuda de TencentPretrain, entrenamos previamente modelos con diferentes propiedades (por ejemplo, modelos basados en diferentes modalidades, codificadores y objetivos). La introducción detallada de los modelos previamente entrenados y sus enlaces de descarga se puede encontrar en ➡️ modelzoo ⬅️. TencentPretrain puede cargar todos los modelos previamente entrenados directamente.
TencentPretrain está organizado de la siguiente manera:
TencentPretrain/
|--tencentpretrain/
| |--embeddings/ # contains modules of embedding component
| |--encoders/ # contains modules of encoder component such as RNN, CNN, Transformer
| |--decoders/ # contains modules of decoder component
| |--targets/ # contains modules of target component such as language modeling, masked language modeling
| |--layers/ # contains frequently-used NN layers
| |--models/ # contains model.py, which combines modules of different components
| |--utils/ # contains frequently-used utilities
| |--model_builder.py
| |--model_loader.py
| |--model_saver.py
| |--opts.py
| |--trainer.py
|
|--corpora/ # contains pre-training data
|--datasets/ # contains downstream tasks
|--models/ # contains pre-trained models, vocabularies, and configuration files
|--scripts/ # contains useful scripts for pre-training models
|--finetune/ # contains fine-tuning scripts for downstream tasks
|--inference/ # contains inference scripts for downstream tasks
|
|--preprocess.py
|--pretrain.py
|--README.md
|--README_ZH.md
|--requirements.txt
|--LICENSE
El código está organizado en función de componentes (por ejemplo, incrustaciones, codificadores). Los usuarios pueden utilizarlo y ampliarlo con poco esfuerzo.
Se pueden encontrar ejemplos completos del uso de TencentPretrain en ➡️ instrucciones ⬅️, que ayudan a los usuarios a implementar rápidamente modelos de preentrenamiento como BERT, GPT-2, ELMo, T5, CLIP y afinar modelos preentrenados en una variedad de tareas posteriores.
TencentPretrain se ha utilizado en soluciones ganadoras de muchos concursos. En esta sección, proporcionamos algunos ejemplos del uso de TencentPretrain para lograr resultados SOTA en competiciones, como CLUE. Consulte ➡️ soluciones de competencia ⬅️ para obtener información más detallada.
@article{zhao2023tencentpretrain,
title={TencentPretrain: A Scalable and Flexible Toolkit for Pre-training Models of Different Modalities},
author={Zhao, Zhe and Li, Yudong and Hou, Cheng and Zhao, Jing and others},
journal={ACL 2023},
pages={217},
year={2023}
}