El código fuente utilizado para la clasificación de texto utilizando solo los nombres de etiquetas: un enfoque de autodenrayamiento del modelo de lenguaje , publicado en EMNLP 2020.
Se requiere al menos una GPU para ejecutar el código.
Antes de ejecutar, primero debe instalar los paquetes requeridos escribiendo los siguientes comandos:
$ pip3 install -r requirements.txt
Además, debe descargar las palabras de parada en la biblioteca NLTK:
import nltk
nltk.download('stopwords')
Python 3.6 o superior se recomienda fuertemente; El uso de versiones de Python más antiguas puede conducir a problemas de incompatibilidad de paquetes.
Proporcionamos cuatro scripts get_data.sh para descargar los conjuntos de datos utilizados en el documento en datasets y cuatro scripts bash de entrenamiento agnews.sh , dbpedia.sh , imdb.sh y amazon.sh para ejecutar el modelo en los cuatro conjuntos de datos.
Nota: Nuestro modelo no usa etiquetas de entrenamiento; Proporcionamos la capacitación/prueba del conjunto de etiquetas de verdad fundamental solo para integración y evaluación.
Los scripts de Bash de entrenamiento suponen que tiene dos GPU de 10 GB. Si tiene un número diferente de GPU, o GPU de diferentes tamaños de memoria, consulte la siguiente sección sobre cómo cambiar los siguientes argumentos de la línea de comando (mientras mantiene otros argumentos sin cambios): train_batch_size , accum_steps , eval_batch_size y gpus .
Los significados de los argumentos de la línea de comando se mostrarán al escribir
python src/train.py -h
Los siguientes argumentos afectan directamente el rendimiento del modelo y deben establecerse cuidadosamente:
train_batch_size , accum_steps , gpus : estos tres argumentos deben establecerse juntos. Debe asegurarse de que el tamaño de lote de entrenamiento efectivo , calculado como train_batch_size * accum_steps * gpus , sea alrededor de 128 . Por ejemplo, si tiene 4 GPU, puede configurar train_batch_size = 32, accum_steps = 1, gpus = 4 ; Si tiene 1 GPU, puede configurar train_batch_size = 32, accum_steps = 4, gpus = 1 . Si sus GPU tienen diferentes tamaños de memoria, es posible que deba cambiar train_batch_size al ajustar accum_steps y gpus al mismo tiempo para mantener el tamaño de lote de entrenamiento efectivo alrededor de 128 .eval_batch_size : este argumento solo afecta la velocidad del algoritmo; Use un tamaño de lote de evaluación grande como su GPU puede contener.max_len : este argumento controla la longitud máxima de los documentos alimentados en el modelo (los documentos más largos se truncarán). Idealmente, max_len debe establecerse a la longitud del documento más largo ( max_len no puede ser mayor que 512 bajo la arquitectura Bert), pero el uso de max_len más grande también consume más memoria de GPU, lo que resulta en un tamaño de lote más pequeño y un tiempo de entrenamiento más largo. Por lo tanto, puede intercambiar la precisión del modelo para una capacitación más rápida reduciendo max_len .mcp_epochs , self_train_epochs : controlan cuántas épocas capacitar al modelo en la tarea de predicción de categorías enmascaradas y la tarea de autostructuación, respectivamente. La configuración de mcp_epochs = 3, self_train_epochs = 1 será un buen punto de partida para la mayoría de los conjuntos de datos, pero puede aumentarlos si su conjunto de datos es pequeño (menos de 100,000 documentos).Otros argumentos pueden mantenerse como sus valores predeterminados.
Para ejecutar el código en un nuevo conjunto de datos, debe
your_dataset en datasets .train.txt (un documento por línea) debajo de your_dataset para capacitar al modelo de clasificación (no se necesitan etiquetas de documentos).label_names.txt en your_dataset (cada línea contiene el nombre de la etiqueta de una categoría; si se usan varias palabras como el nombre de la etiqueta de una categoría, póngalas en la misma línea y separarlas con caracteres Whitespace).test.txt (un documento por línea) con etiquetas de verdad de tierra test_labels.txt (cada línea contiene un entero que denota el índice de categoría del documento correspondiente, el índice comienza desde 0 y el orden debe ser consistente con el orden de categoría en label_names.txt ). Si se proporciona el Corpus de prueba, el código escribirá resultados de clasificación para out.txt your_dataset Si se proporcionan las etiquetas de la verdad en tierra del corpus de prueba, la precisión de la prueba se mostrará durante el autodenvenimiento, lo que es útil para el ajuste del hiperparameter y la selección de cerezas con un conjunto de pruebas pequeñas.final_model.pt bajo your_dataset .Nota: El código almacenará en caché los datos intermedios y los puntos de control modelador como archivos .pt en su directorio de conjunto de datos para una capacitación continua. Si cambia su corpus de entrenamiento o nombres de etiquetas y vuelve a ejecutar el código, primero deberá eliminar todos los archivos .pt para evitar que el código cargue resultados antiguos.
Siempre puede consultar los conjuntos de datos de ejemplo al preparar sus propios conjuntos de datos.
Cite el siguiente documento si encuentra útil el código para su investigación.
@inproceedings{meng2020text,
title={Text Classification Using Label Names Only: A Language Model Self-Training Approach},
author={Meng, Yu and Zhang, Yunyi and Huang, Jiaxin and Xiong, Chenyan and Ji, Heng and Zhang, Chao and Han, Jiawei},
booktitle={Proceedings of the 2020 Conference on Empirical Methods in Natural Language Processing},
year={2020},
}