inglés |中文
La formación previa se ha convertido en una parte esencial para las tareas de PNL. UER-py (Universal Encoder Representations) es un conjunto de herramientas para la capacitación previa en corpus de dominio general y el ajuste de tareas posteriores. UER-py mantiene la modularidad del modelo y respalda la extensibilidad de la investigación. Facilita el uso de modelos de preentrenamiento existentes y proporciona interfaces para que los usuarios puedan ampliarlos aún más. Con UER-py, construimos un zoológico modelo que contiene modelos previamente entrenados de diferentes propiedades. Consulte la Wiki del proyecto UER-py para obtener la documentación completa .
Hemos abierto TencentPretrain, una nueva versión refactorizada de UER-py. TencentPretrain admite modelos multimodales y permite el entrenamiento de modelos grandes. Si está interesado en modelos de texto de tamaño mediano (con tamaños de parámetros inferiores a mil millones), le recomendamos seguir utilizando el proyecto UER-py.
UER-py tiene las siguientes características:
Esta sección utiliza varios ejemplos de uso común para demostrar cómo usar UER-py. 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 opiniones 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 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 UER 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 UER-py 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 ⬅️. UER puede cargar estos datos previos al entrenamiento directamente.
Esta sección proporciona enlaces a una variedad de ➡️ conjuntos de datos posteriores ⬅️. UER puede cargar estos conjuntos de datos directamente.
Con la ayuda de UER, entrenamos previamente modelos de diferentes propiedades (por ejemplo, modelos basados en diferentes corpus, codificadores y objetivos). La introducción detallada de los modelos previamente entrenados y sus enlaces de descarga se puede encontrar en ➡️ modelzoo ⬅️. UER puede cargar todos los modelos previamente entrenados directamente.
UER-py está organizado de la siguiente manera:
UER-py/
|--uer/
| |--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 UER en ➡️ instrucciones ⬅️, que ayudan a los usuarios a implementar rápidamente modelos de preentrenamiento como BERT, GPT-2, ELMo, T5 y afinar modelos preentrenados en una variedad de tareas posteriores.
UER-py se ha utilizado para ganar soluciones en muchos concursos de PNL. En esta sección, proporcionamos algunos ejemplos del uso de UER-py para lograr resultados SOTA en competencias de PNL, como CLUE. Consulte ➡️ soluciones de competencia ⬅️ para obtener información más detallada.
@article{zhao2019uer,
title={UER: An Open-Source Toolkit for Pre-training Models},
author={Zhao, Zhe and Chen, Hui and Zhang, Jinbin and Zhao, Xin and Liu, Tao and Lu, Wei and Chen, Xi and Deng, Haotang and Ju, Qi and Du, Xiaoyong},
journal={EMNLP-IJCNLP 2019},
pages={241},
year={2019}
}
Para comunicaciones relacionadas con este proyecto, comuníquese con Zhe Zhao ([email protected]; [email protected]) o Yudong Li ([email protected]) o Cheng Hou ([email protected]) o Wenhang Shi ([email protected]).
Este trabajo es impartido por mis mentores empresariales Qi Ju , Xuefeng Yang , Haotang Deng y mis mentores escolares Tao Liu , Xiaoyong Du .
También recibimos mucha ayuda de Weijie Liu, Lusheng Zhang, Jianwei Cui, Xiayu Li, Weiquan Mao, Xin Zhao, Hui Chen, Jinbin Zhang, Zhiruo Wang, Peng Zhou, Haixiao Liu y Weijian Wu.