
Multi_task_nlp es un conjunto de herramientas de utilidad que permite a los desarrolladores de NLP capacitar e inferir fácilmente un solo modelo para múltiples tareas. Apoyamos varios formatos de datos para la mayoría de las tareas de la NLU y múltiples codificadores basados en transformadores (por ejemplo, Bert, Distil-Bert, Albert, Roberta, XLNet, etc.)
Para una documentación completa para esta biblioteca, consulte la documentación
Cualquier sistema de IA conversacional implica construir múltiples componentes para realizar diversas tareas y una tubería para unir todos los componentes. Siempre que la reciente efectividad de los modelos basados en transformadores en PNL, es muy común construir un modelo basado en transformadores para resolver su caso de uso. Pero tener múltiples modelos de este tipo que se ejecutan juntos para un sistema de IA conversacional pueden conducir a un costoso consumo de recursos, un aumento de las latencias para las predicciones y dificultar el sistema. Esto plantea un verdadero desafío para cualquiera que quiera construir un sistema de IA conversacional de una manera simplista.
Multi_task_nlp le brinda la capacidad de definir múltiples tareas juntas y entrenar un solo modelo que aprende simultáneamente en todas las tareas definidas. Esto significa que uno puede realizar múltiples tareas con latencia y consumo de recursos equivalente a una sola tarea.
Para usar Multi-Task-NLP, puede clonar el repositorio en la ubicación deseada en su sistema con el siguiente comando terminal.
$ cd /desired/location/
$ git clone https://github.com/hellohaptik/multi-task-NLP.git
$ cd multi-task-NLP
$ pip install -r requirements.txt Nota:- La biblioteca se construye y se prueba con Python 3.7.3 . Se recomienda instalar los requisitos en un entorno virtual.
¡Una guía rápida para mostrar cómo se puede capacitar a un modelo para tareas de NLU individuales/múltiples en solo 3 pasos simples y sin necesidad de codificar!
¡Siga estos 3 pasos simples para entrenar su modelo de varias tareas!
El archivo de tareas es un archivo de formato YAML donde puede agregar todas sus tareas para las que desea entrenar un modelo de tareas múltiples.
TaskA :
model_type : BERT
config_name : bert-base-uncased
dropout_prob : 0.05
label_map_or_file :
- label1
- label2
- label3
metrics :
- accuracy
loss_type : CrossEntropyLoss
task_type : SingleSenClassification
file_names :
- taskA_train.tsv
- taskA_dev.tsv
- taskA_test.tsv
TaskB :
model_type : BERT
config_name : bert-base-uncased
dropout_prob : 0.3
label_map_or_file : data/taskB_train_label_map.joblib
metrics :
- seq_f1
- seq_precision
- seq_recall
loss_type : NERLoss
task_type : NER
file_names :
- taskB_train.tsv
- taskB_dev.tsv
- taskB_test.tsvPara conocer los parámetros del archivo de tareas para hacer su archivo de tareas, parámetros del archivo de tareas.
Después de definir el archivo de tareas, ejecute el siguiente comando para preparar los datos.
$ python data_preparation.py
--task_file 'sample_task_file.yml'
--data_dir 'data'
--max_seq_len 50 Para conocer el script data_preparation.py y sus argumentos, consulte la preparación de datos en ejecución.
Finalmente puede comenzar su entrenamiento usando el siguiente comando.
$ python train.py
--data_dir 'data/bert-base-uncased_prepared_data'
--task_file 'sample_task_file.yml'
--out_dir 'sample_out'
--epochs 5
--train_batch_size 4
--eval_batch_size 8
--grad_accumulation_steps 2
--log_per_updates 25
--save_per_updates 1000
--eval_while_train True
--test_while_train True
--max_seq_len 50
--silent True Para conocer el script train.py y sus argumentos, consulte el tren de ejecución
Una vez que tenga un modelo de varias tareas capacitado en sus tareas, proporcionamos una manera conveniente y fácil de usarlo para obtener predicciones en las muestras a través de la tubería de inferencia .
Para ejecutar la inferencia en las muestras utilizando un modelo capacitado para decir TaskA, TaskB y TaskC, puede importar la clase InferPipeline y cargar el modelo de tareas múltiple correspondiente haciendo un objeto de esta clase.
> >> from infer_pipeline import inferPipeline
> >> pipe = inferPipeline ( modelPath = 'sample_out_dir/multi_task_model.pt' , maxSeqLen = 50 ) Se puede llamar a la función infer para obtener las predicciones para muestras de entrada para las tareas mencionadas.
> >> samples = [ [ 'sample_sentence_1' ], [ 'sample_sentence_2' ] ]
> >> tasks = [ 'TaskA' , 'TaskB' ]
> >> pipe . infer ( samples , tasks ) Para conocer el infer_pipeline , consulte Infer.
Aquí puede encontrar varias tareas de IA conversacionales como ejemplos y puede capacitar a los modelos de varias tareas en pasos simples mencionados en los cuadernos.
(Configuración: multitarea, tipo de tarea: múltiple)
Detección de intención (Tipo de tarea: clasificación de oración única)
Query: I need a reservation for a bar in bangladesh on feb the 11th 2032
Intent: BookRestaurant
Ner (tipo de tarea: etiquetado de secuencia)
Query: ['book', 'a', 'spot', 'for', 'ten', 'at', 'a', 'top-rated', 'caucasian', 'restaurant', 'not', 'far', 'from', 'selmer']
NER tags: ['O', 'O', 'O', 'O', 'B-party_size_number', 'O', 'O', 'B-sort', 'B-cuisine', 'B-restaurant_type', 'B-spatial_relation', 'I-spatial_relation', 'O', 'B-city']
Detección de fragmentos (tipo de tarea: clasificación de oraciones individuales)
Query: a reservation for
Label: fragment
Cuaderno :- intent_ner_fragment
Archivo de transformación :- transform_file_snips
Archivo de tareas :- tareas_file_snips
(Configuración: Tarea única, Tipo de tarea: Clasificación del par de oraciones)
Query1: An old man with a package poses in front of an advertisement.
Query2: A man poses in front of an ad.
Label: entailment
Query1: An old man with a package poses in front of an advertisement.
Query2: A man poses in front of an ad for beer.
Label: non-entailment
Cuaderno :- implicación_snli
Archivo de transformación :- transform_file_snli
Archivo de tareas :- tareas_file_snli
(Configuración: Tarea única, Tipo de tarea: Clasificación del par de oraciones)
Query: how much money did evander holyfield make
Context: Evander Holyfield Net Worth. How much is Evander Holyfield Worth? Evander Holyfield Net Worth: Evander Holyfield is a retired American professional boxer who has a net worth of $500 thousand. A professional boxer, Evander Holyfield has fought at the Heavyweight, Cruiserweight, and Light-Heavyweight Divisions, and won a Bronze medal a the 1984 Olympic Games.
Label: answerable
Cuaderno :- Responderability_detection_msmarco
Archivo de transformación :- transform_file_answerability
Archivo de tareas :- Tasks_File_Answerability
(Configuración: tarea única, tipo de tarea: clasificación de oraciones individuales)
Query: what's the distance between destin florida and birmingham alabama?
Label: NUMERIC
Query: who is suing scott wolter
Label: PERSON
Cuaderno :- Query_Type_Detection
Archivo de transformación :- transform_file_queryType
Archivo de tareas :- Tasks_file_QueryType
(Configuración: multitarea, tipo de tarea: etiquetado de secuencia)
Query: ['Despite', 'winning', 'the', 'Asian', 'Games', 'title', 'two', 'years', 'ago', ',', 'Uzbekistan', 'are', 'in', 'the', 'finals', 'as', 'outsiders', '.']
NER tags: ['O', 'O', 'O', 'I-MISC', 'I-MISC', 'O', 'O', 'O', 'O', 'O', 'I-LOC', 'O', 'O', 'O', 'O', 'O', 'O', 'O']
POS tags: ['I-PP', 'I-VP', 'I-NP', 'I-NP', 'I-NP', 'I-NP', 'B-NP', 'I-NP', 'I-ADVP', 'O', 'I-NP', 'I-VP', 'I-PP', 'I-NP', 'I-NP', 'I-SBAR', 'I-NP', 'O']
Cuaderno :- ner_pos_tagging_conll
Archivo de transformación :- transform_file_conll
Archivo de tareas :- tareas_file_conll
(Configuración: tarea única, tipo de tarea: clasificación de oraciones individuales)
Query: What places have the oligarchy government ?
Label: well-formed
Query: What day of Diwali in 1980 ?
Label: not well-formed
Cuaderno :- Query_Correctness
Archivo de transformación :- transform_file_query_correctness
Archivo de tareas :- tareas_file_query_correctness
(Configuración: tarea única, tipo de tarea: clasificación de oraciones individuales)
Query1: What is the most used word in Malayalam?
Query2: What is meaning of the Malayalam word ""thumbatthu""?
Label: not similar
Query1: Which is the best compliment you have ever received?
Query2: What's the best compliment you've got?
Label: similar
Cuaderno :- Query_Similarity
Archivo de transformación :- transform_file_qqp
Archivo de tareas :- tareas_file_qqp
(Configuración: tarea única, tipo de tarea: clasificación de oraciones individuales)
Review: What I enjoyed most in this film was the scenery of Corfu, being Greek I adore my country and I liked the flattering director's point of view. Based on a true story during the years when Greece was struggling to stand on her own two feet through war, Nazis and hardship. An Italian soldier and a Greek girl fall in love but the times are hard and they have a lot of sacrifices to make. Nicholas Cage looking great in a uniform gives a passionate account of this unfulfilled (in the beginning) love. I adored Christian Bale playing Mandras the heroine's husband-to-be, he looks very very good as a Greek, his personality matched the one of the Greek patriot! A true fighter in there, or what! One of the movies I would like to buy and keep it in my collection...for ever!
Label: positive
Cuaderno :- imdb_sentiment_analysis
Archivo de transformación :- transform_file_imdb
Archivo de tareas :- tareas_file_imdb