else: pretrained_bert_model = nemo_nlp.huggingface.BERT( pretrained_model_name=args.pretrained_bert_model, factory=nf) hidden_size = pretrained_bert_model.local_parameters["hidden_size"] data_desc = JointIntentSlotDataDesc(args.data_dir, args.do_lower_case, args.dataset_name, args.none_slot_label, args.pad_label) # Create sentence classification loss on top classifier = nemo_nlp.JointIntentSlotClassifier( hidden_size=hidden_size, num_intents=data_desc.num_intents, num_slots=data_desc.num_slots, dropout=args.fc_dropout) if args.class_balancing == 'weighted_loss': # Using weighted loss will enable weighted loss for both intents and slots # Use the intent_loss_weight hyperparameter to adjust intent loss to # prevent overfitting or underfitting. loss_fn = nemo_nlp.JointIntentSlotLoss( num_slots=data_desc.num_slots, slot_classes_loss_weights=data_desc.slot_weights, intent_classes_loss_weights=data_desc.intent_weights, intent_loss_weight=args.intent_loss_weight) else: loss_fn = nemo_nlp.JointIntentSlotLoss(num_slots=data_desc.num_slots)
# Evaluation pipeline nf.logger.info("Loading eval data...") data_layer = nemo_nlp.BertJointIntentSlotDataLayer( input_file=f'{data_desc.data_dir}/{args.eval_file_prefix}.tsv', slot_file=f'{data_desc.data_dir}/{args.eval_file_prefix}_slots.tsv', pad_label=data_desc.pad_label, tokenizer=tokenizer, max_seq_length=args.max_seq_length, shuffle=False, batch_size=args.batch_size, num_workers=0, local_rank=args.local_rank) classifier = nemo_nlp.JointIntentSlotClassifier( hidden_size=hidden_size, num_intents=data_desc.num_intents, num_slots=data_desc.num_slots) ids, type_ids, \ input_mask, loss_mask, subtokens_mask, \ intents, slots = data_layer() hidden_states = pretrained_bert_model(input_ids=ids, token_type_ids=type_ids, attention_mask=input_mask) intent_logits, slot_logits = classifier(hidden_states=hidden_states) ########################################################################### # Instantiate an optimizer to perform `infer` action evaluated_tensors = nf.infer(