
Multi_Task_NLP é um kit de ferramentas de utilitário que permite que os desenvolvedores de PNL treinam facilmente e inferam um único modelo para várias tarefas. Apoiamos vários formatos de dados para a maioria das tarefas da NLU e vários codificadores baseados em transformadores (por exemplo, Bert, Distil-Bert, Albert, Roberta, Xlnet etc.)
Para uma documentação completa para esta biblioteca, consulte a documentação
Qualquer sistema de IA de conversação envolve a criação de vários componentes para executar várias tarefas e um pipeline para costurar todos os componentes. Fornecendo a recente eficácia dos modelos baseados em transformadores na PNL, é muito comum construir um modelo baseado em transformador para resolver seu caso de uso. Mas ter vários modelos desses funcionando juntos para um sistema de IA de conversação pode levar a consumo caro de recursos, aumentar as latências para previsões e dificultar o gerenciamento do sistema. Isso representa um verdadeiro desafio para quem deseja construir um sistema de IA conversacional de uma maneira simplista.
Multi_Task_NLP oferece a capacidade de definir várias tarefas juntas e treinar um único modelo que aprende simultaneamente em todas as tarefas definidas. Isso significa que se pode executar várias tarefas com latência e consumo de recursos equivalentes a uma única tarefa.
Para usar o NLP de várias tarefas, você pode clonar o repositório no local desejado no seu sistema com o seguinte 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:- A biblioteca é construída e testada usando Python 3.7.3 . Recomenda -se instalar os requisitos em um ambiente virtual.
Um guia rápido para mostrar como um modelo pode ser treinado para tarefas de NLU simples/múltiplas em apenas 3 etapas simples e sem requisito de codificar !!
Siga estas 3 etapas simples para treinar seu modelo de várias tarefas!
O arquivo de tarefas é um arquivo de formato YAML, onde você pode adicionar todas as suas tarefas para as quais deseja treinar um modelo de várias tarefas.
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.tsvPor saber sobre os parâmetros do arquivo de tarefas para criar seu arquivo de tarefas, parâmetros do arquivo de tarefas.
Depois de definir o arquivo de tarefas, execute o seguinte comando para preparar os dados.
$ python data_preparation.py
--task_file 'sample_task_file.yml'
--data_dir 'data'
--max_seq_len 50 Para saber sobre o script data_preparation.py e seus argumentos, consulte a preparação de dados em execução.
Finalmente, você pode iniciar seu treinamento usando o seguinte 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 saber sobre o script train.py e seus argumentos, consulte o trem em execução
Depois de ter um modelo de várias tarefas treinado em suas tarefas, fornecemos uma maneira conveniente e fácil de usá-lo para obter previsões nas amostras através do pipeline de inferência .
Para executar a inferência em amostras usando um modelo treinado para Say Taska, TaskB e TaskC, você pode importar a classe InferPipeline e carregar o modelo correspondente de várias tarefas, criando um objeto dessa classe.
> >> from infer_pipeline import inferPipeline
> >> pipe = inferPipeline ( modelPath = 'sample_out_dir/multi_task_model.pt' , maxSeqLen = 50 ) A função infer pode ser chamada para obter as previsões para amostras de entrada para as tarefas mencionadas.
> >> samples = [ [ 'sample_sentence_1' ], [ 'sample_sentence_2' ] ]
> >> tasks = [ 'TaskA' , 'TaskB' ]
> >> pipe . infer ( samples , tasks ) Para saber sobre a infer_pipeline , consulte Infer.
Aqui você pode encontrar várias tarefas de IA conversacional como exemplos e pode treinar modelos de várias tarefas em etapas simples mencionadas nos notebooks.
(Configuração: multitarefa, tipo de tarefa: múltiplo)
Detecção de intenções (Tipo de tarefa: classificação de frase única)
Query: I need a reservation for a bar in bangladesh on feb the 11th 2032
Intent: BookRestaurant
NER (Tipo de tarefa: marcação de sequência)
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']
Detecção de fragmentos (Tipo de tarefa: classificação de frase única)
Query: a reservation for
Label: fragment
Notebook :- Intent_ner_fragment
Arquivo de transformação :- transform_file_snips
Arquivo de tarefas :- Tasks_file_snips
(Configuração: Tarefa única, Tipo de tarefa: classificação de pares de frases)
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
Notebook :- Entrailment_snli
Arquivo de transformação :- transform_file_snli
Arquivo de tarefas :- Tasks_file_snli
(Configuração: Tarefa única, Tipo de tarefa: classificação de pares de frases)
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
Notebook :- Responderability_detection_msmarco
Arquivo de transformação :- transform_file_answerability
Arquivo de tarefas :- Tasks_file_answerability
(Configuração: Tarefa única, Tipo de tarefa: Classificação de frase única)
Query: what's the distance between destin florida and birmingham alabama?
Label: NUMERIC
Query: who is suing scott wolter
Label: PERSON
Notebook :- Query_type_detection
Arquivo de transformação :- transform_file_querytype
Arquivo de tarefas :- Tasks_file_querytype
(Configuração: multitarefa, tipo de tarefa: rotulagem de sequência)
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']
Notebook :- NER_POS_TAGGING_CONLL
Arquivo de transformação :- transform_file_conll
Arquivo de tarefas :- Tasks_file_conll
(Configuração: Tarefa única, Tipo de tarefa: Classificação de frase única)
Query: What places have the oligarchy government ?
Label: well-formed
Query: What day of Diwali in 1980 ?
Label: not well-formed
Notebook :- Query_correctness
Arquivo de transformação :- transform_file_query_correctness
Arquivo de tarefas :- Tasks_File_Query_Correctness
(Configuração: Tarefa única, Tipo de tarefa: Classificação de frase única)
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
Notebook :- Query_similaridade
Arquivo de transformação :- transform_file_qqp
Arquivo de tarefas :- Tasks_file_qqp
(Configuração: Tarefa única, Tipo de tarefa: Classificação de frase única)
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
Notebook :- imdb_sentiment_analysis
Arquivo de transformação :- transform_file_imdb
Arquivo de tarefas :- Tasks_file_imdb