diff --git a/convlab2/nlu/milu/README.md b/convlab2/nlu/milu/README.md index bbd54d671900f26373ef369c3c6f049dcf74ac23..2213475f87ac77c1a010d0a406a49c6976810442 100755 --- a/convlab2/nlu/milu/README.md +++ b/convlab2/nlu/milu/README.md @@ -43,6 +43,50 @@ Note that the config file is different from the above. You should set: ## Predict See `nlu.py` under `multiwoz` and `unified_datasets` directories. +## Performance on unified format datasets + +To illustrate that it is easy to use the model for any dataset that in our unified format, we report the performance on several datasets in our unified format. We follow `README.md` and config files in `unified_datasets/` to generate `predictions.json`, then evaluate it using `../evaluate_unified_datasets.py`. Note that we use almost the same hyper-parameters for different datasets, which may not be optimal. + +<table> +<thead> + <tr> + <th></th> + <th colspan=2>MultiWOZ 2.1</th> + <th colspan=2>Taskmaster-1</th> + <th colspan=2>Taskmaster-2</th> + <th colspan=2>Taskmaster-3</th> + </tr> +</thead> +<thead> + <tr> + <th>Model</th> + <th>Acc</th><th>F1</th> + <th>Acc</th><th>F1</th> + <th>Acc</th><th>F1</th> + <th>Acc</th><th>F1</th> + </tr> +</thead> +<tbody> + <tr> + <td>MILU</td> + <td>72.9</td><td>85.2</td> + <td>72.9</td><td>49.2</td> + <td>79.1</td><td>68.7</td> + <td>85.4</td><td>80.3</td> + </tr> + <tr> + <td>MILU (context=3)</td> + <td>76.6</td><td>87.9</td> + <td>72.4</td><td>48.5</td> + <td>78.9</td><td>68.4</td> + <td>85.1</td><td>80.1</td> + </tr> +</tbody> +</table> + +- Acc: whether all dialogue acts of an utterance are correctly predicted +- F1: F1 measure of the dialogue act predictions over the corpus. + ## References ``` @inproceedings{lee2019convlab, diff --git a/convlab2/nlu/milu/dataset_reader.py b/convlab2/nlu/milu/dataset_reader.py index 35f71903ab4a269b0f9e5d3cd208d78e48278349..86732b7d0aa46d94ca813a6dd27c64b754a76492 100755 --- a/convlab2/nlu/milu/dataset_reader.py +++ b/convlab2/nlu/milu/dataset_reader.py @@ -76,6 +76,8 @@ class MILUDatasetReader(DatasetReader): for sample in data: utterance = sample['utterance'] + if len(utterance) == 0: + continue sentences = self._sent_tokenizer.tokenize(utterance) sent_spans = self._sent_tokenizer.span_tokenize(utterance) tokens = [token for sent in sentences for token in self._word_tokenizer.tokenize(sent)] diff --git a/convlab2/nlu/milu/unified_datasets/configs/multiwoz21_user.jsonnet b/convlab2/nlu/milu/unified_datasets/configs/multiwoz21_user.jsonnet index 858a57a19ecbe2acd59f02465d79c1d852341f60..94ccc02647ec9aabacb2b545202e35161addacff 100755 --- a/convlab2/nlu/milu/unified_datasets/configs/multiwoz21_user.jsonnet +++ b/convlab2/nlu/milu/unified_datasets/configs/multiwoz21_user.jsonnet @@ -98,7 +98,7 @@ "num_epochs": 40, "grad_norm": 5.0, "patience": 75, - "cuda_device": 4 + "cuda_device": 0 }, "evaluate_on_test": true } diff --git a/convlab2/nlu/milu/unified_datasets/configs/sgd_user.jsonnet b/convlab2/nlu/milu/unified_datasets/configs/sgd_user.jsonnet new file mode 100755 index 0000000000000000000000000000000000000000..db02aed0900e628bf7ffff3bf4c20dea73d9baf8 --- /dev/null +++ b/convlab2/nlu/milu/unified_datasets/configs/sgd_user.jsonnet @@ -0,0 +1,104 @@ +{ + "dataset_reader": { + "type": "milu", + "token_indexers": { + "tokens": { + "type": "single_id", + "lowercase_tokens": true + }, + "token_characters": { + "type": "characters", + "min_padding_length": 3 + }, + }, + "context_size": 0, + "agent": "user", + "use_unified_datasets": true, + "dataset_name": "sgd", + "random_context_size": false + }, + "train_data_path": "train", + "validation_data_path": "validation", + "test_data_path": "test", + "model": { + "type": "milu", + "label_encoding": "BIO", + "use_unified_datasets": true, + "dropout": 0.3, + "include_start_end_transitions": false, + "text_field_embedder": { + "token_embedders": { + "tokens": { + "type": "embedding", + "embedding_dim": 50, + "pretrained_file": "https://s3-us-west-2.amazonaws.com/allennlp/datasets/glove/glove.6B.50d.txt.gz", + "trainable": true + }, + "token_characters": { + "type": "character_encoding", + "embedding": { + "embedding_dim": 16 + }, + "encoder": { + "type": "cnn", + "embedding_dim": 16, + "num_filters": 128, + "ngram_filter_sizes": [3], + "conv_layer_activation": "relu" + } + } + } + }, + "encoder": { + "type": "lstm", + "input_size": 178, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "intent_encoder": { + "type": "lstm", + "input_size": 400, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "attention": { + "type": "bilinear", + "vector_dim": 400, + "matrix_dim": 400 + }, + "context_for_intent": true, + "context_for_tag": false, + "attention_for_intent": false, + "attention_for_tag": false, + "regularizer": [ + [ + "scalar_parameters", + { + "type": "l2", + "alpha": 0.1 + } + ] + ] + }, + "iterator": { + "type": "basic", + "batch_size": 64 + }, + "trainer": { + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "validation_metric": "+f1-measure", + "num_serialized_models_to_keep": 3, + "num_epochs": 40, + "grad_norm": 5.0, + "patience": 75, + "cuda_device": 0 + }, + "evaluate_on_test": true +} diff --git a/convlab2/nlu/milu/unified_datasets/configs/sgd_user_context3.jsonnet b/convlab2/nlu/milu/unified_datasets/configs/sgd_user_context3.jsonnet new file mode 100755 index 0000000000000000000000000000000000000000..2feea6d4b866ecda20c8398abab4ef34337cff6c --- /dev/null +++ b/convlab2/nlu/milu/unified_datasets/configs/sgd_user_context3.jsonnet @@ -0,0 +1,104 @@ +{ + "dataset_reader": { + "type": "milu", + "token_indexers": { + "tokens": { + "type": "single_id", + "lowercase_tokens": true + }, + "token_characters": { + "type": "characters", + "min_padding_length": 3 + }, + }, + "context_size": 3, + "agent": "user", + "use_unified_datasets": true, + "dataset_name": "sgd", + "random_context_size": false + }, + "train_data_path": "train", + "validation_data_path": "validation", + "test_data_path": "test", + "model": { + "type": "milu", + "label_encoding": "BIO", + "use_unified_datasets": true, + "dropout": 0.3, + "include_start_end_transitions": false, + "text_field_embedder": { + "token_embedders": { + "tokens": { + "type": "embedding", + "embedding_dim": 50, + "pretrained_file": "https://s3-us-west-2.amazonaws.com/allennlp/datasets/glove/glove.6B.50d.txt.gz", + "trainable": true + }, + "token_characters": { + "type": "character_encoding", + "embedding": { + "embedding_dim": 16 + }, + "encoder": { + "type": "cnn", + "embedding_dim": 16, + "num_filters": 128, + "ngram_filter_sizes": [3], + "conv_layer_activation": "relu" + } + } + } + }, + "encoder": { + "type": "lstm", + "input_size": 178, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "intent_encoder": { + "type": "lstm", + "input_size": 400, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "attention": { + "type": "bilinear", + "vector_dim": 400, + "matrix_dim": 400 + }, + "context_for_intent": true, + "context_for_tag": false, + "attention_for_intent": false, + "attention_for_tag": false, + "regularizer": [ + [ + "scalar_parameters", + { + "type": "l2", + "alpha": 0.1 + } + ] + ] + }, + "iterator": { + "type": "basic", + "batch_size": 64 + }, + "trainer": { + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "validation_metric": "+f1-measure", + "num_serialized_models_to_keep": 3, + "num_epochs": 40, + "grad_norm": 5.0, + "patience": 75, + "cuda_device": 0 + }, + "evaluate_on_test": true +} diff --git a/convlab2/nlu/milu/unified_datasets/configs/tm1_user.jsonnet b/convlab2/nlu/milu/unified_datasets/configs/tm1_user.jsonnet new file mode 100755 index 0000000000000000000000000000000000000000..7f7138f8f66560e288deff667f052c3d60c93554 --- /dev/null +++ b/convlab2/nlu/milu/unified_datasets/configs/tm1_user.jsonnet @@ -0,0 +1,104 @@ +{ + "dataset_reader": { + "type": "milu", + "token_indexers": { + "tokens": { + "type": "single_id", + "lowercase_tokens": true + }, + "token_characters": { + "type": "characters", + "min_padding_length": 3 + }, + }, + "context_size": 0, + "agent": "user", + "use_unified_datasets": true, + "dataset_name": "tm1", + "random_context_size": false + }, + "train_data_path": "train", + "validation_data_path": "validation", + "test_data_path": "test", + "model": { + "type": "milu", + "label_encoding": "BIO", + "use_unified_datasets": true, + "dropout": 0.3, + "include_start_end_transitions": false, + "text_field_embedder": { + "token_embedders": { + "tokens": { + "type": "embedding", + "embedding_dim": 50, + "pretrained_file": "https://s3-us-west-2.amazonaws.com/allennlp/datasets/glove/glove.6B.50d.txt.gz", + "trainable": true + }, + "token_characters": { + "type": "character_encoding", + "embedding": { + "embedding_dim": 16 + }, + "encoder": { + "type": "cnn", + "embedding_dim": 16, + "num_filters": 128, + "ngram_filter_sizes": [3], + "conv_layer_activation": "relu" + } + } + } + }, + "encoder": { + "type": "lstm", + "input_size": 178, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "intent_encoder": { + "type": "lstm", + "input_size": 400, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "attention": { + "type": "bilinear", + "vector_dim": 400, + "matrix_dim": 400 + }, + "context_for_intent": true, + "context_for_tag": false, + "attention_for_intent": false, + "attention_for_tag": false, + "regularizer": [ + [ + "scalar_parameters", + { + "type": "l2", + "alpha": 0.1 + } + ] + ] + }, + "iterator": { + "type": "basic", + "batch_size": 64 + }, + "trainer": { + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "validation_metric": "+f1-measure", + "num_serialized_models_to_keep": 3, + "num_epochs": 40, + "grad_norm": 5.0, + "patience": 75, + "cuda_device": 0 + }, + "evaluate_on_test": true +} diff --git a/convlab2/nlu/milu/unified_datasets/configs/tm1_user_context3.jsonnet b/convlab2/nlu/milu/unified_datasets/configs/tm1_user_context3.jsonnet new file mode 100755 index 0000000000000000000000000000000000000000..64f5933f16e5773dcd4cad49dd8895d9d1e13898 --- /dev/null +++ b/convlab2/nlu/milu/unified_datasets/configs/tm1_user_context3.jsonnet @@ -0,0 +1,104 @@ +{ + "dataset_reader": { + "type": "milu", + "token_indexers": { + "tokens": { + "type": "single_id", + "lowercase_tokens": true + }, + "token_characters": { + "type": "characters", + "min_padding_length": 3 + }, + }, + "context_size": 3, + "agent": "user", + "use_unified_datasets": true, + "dataset_name": "tm1", + "random_context_size": false + }, + "train_data_path": "train", + "validation_data_path": "validation", + "test_data_path": "test", + "model": { + "type": "milu", + "label_encoding": "BIO", + "use_unified_datasets": true, + "dropout": 0.3, + "include_start_end_transitions": false, + "text_field_embedder": { + "token_embedders": { + "tokens": { + "type": "embedding", + "embedding_dim": 50, + "pretrained_file": "https://s3-us-west-2.amazonaws.com/allennlp/datasets/glove/glove.6B.50d.txt.gz", + "trainable": true + }, + "token_characters": { + "type": "character_encoding", + "embedding": { + "embedding_dim": 16 + }, + "encoder": { + "type": "cnn", + "embedding_dim": 16, + "num_filters": 128, + "ngram_filter_sizes": [3], + "conv_layer_activation": "relu" + } + } + } + }, + "encoder": { + "type": "lstm", + "input_size": 178, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "intent_encoder": { + "type": "lstm", + "input_size": 400, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "attention": { + "type": "bilinear", + "vector_dim": 400, + "matrix_dim": 400 + }, + "context_for_intent": true, + "context_for_tag": false, + "attention_for_intent": false, + "attention_for_tag": false, + "regularizer": [ + [ + "scalar_parameters", + { + "type": "l2", + "alpha": 0.1 + } + ] + ] + }, + "iterator": { + "type": "basic", + "batch_size": 64 + }, + "trainer": { + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "validation_metric": "+f1-measure", + "num_serialized_models_to_keep": 3, + "num_epochs": 40, + "grad_norm": 5.0, + "patience": 75, + "cuda_device": 0 + }, + "evaluate_on_test": true +} diff --git a/convlab2/nlu/milu/unified_datasets/configs/tm2_user.jsonnet b/convlab2/nlu/milu/unified_datasets/configs/tm2_user.jsonnet new file mode 100755 index 0000000000000000000000000000000000000000..a3b89448e4a280660b5a8de98500d3641c8a1512 --- /dev/null +++ b/convlab2/nlu/milu/unified_datasets/configs/tm2_user.jsonnet @@ -0,0 +1,104 @@ +{ + "dataset_reader": { + "type": "milu", + "token_indexers": { + "tokens": { + "type": "single_id", + "lowercase_tokens": true + }, + "token_characters": { + "type": "characters", + "min_padding_length": 3 + }, + }, + "context_size": 0, + "agent": "user", + "use_unified_datasets": true, + "dataset_name": "tm2", + "random_context_size": false + }, + "train_data_path": "train", + "validation_data_path": "validation", + "test_data_path": "test", + "model": { + "type": "milu", + "label_encoding": "BIO", + "use_unified_datasets": true, + "dropout": 0.3, + "include_start_end_transitions": false, + "text_field_embedder": { + "token_embedders": { + "tokens": { + "type": "embedding", + "embedding_dim": 50, + "pretrained_file": "https://s3-us-west-2.amazonaws.com/allennlp/datasets/glove/glove.6B.50d.txt.gz", + "trainable": true + }, + "token_characters": { + "type": "character_encoding", + "embedding": { + "embedding_dim": 16 + }, + "encoder": { + "type": "cnn", + "embedding_dim": 16, + "num_filters": 128, + "ngram_filter_sizes": [3], + "conv_layer_activation": "relu" + } + } + } + }, + "encoder": { + "type": "lstm", + "input_size": 178, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "intent_encoder": { + "type": "lstm", + "input_size": 400, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "attention": { + "type": "bilinear", + "vector_dim": 400, + "matrix_dim": 400 + }, + "context_for_intent": true, + "context_for_tag": false, + "attention_for_intent": false, + "attention_for_tag": false, + "regularizer": [ + [ + "scalar_parameters", + { + "type": "l2", + "alpha": 0.1 + } + ] + ] + }, + "iterator": { + "type": "basic", + "batch_size": 64 + }, + "trainer": { + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "validation_metric": "+f1-measure", + "num_serialized_models_to_keep": 3, + "num_epochs": 40, + "grad_norm": 5.0, + "patience": 75, + "cuda_device": 0 + }, + "evaluate_on_test": true +} diff --git a/convlab2/nlu/milu/unified_datasets/configs/tm2_user_context3.jsonnet b/convlab2/nlu/milu/unified_datasets/configs/tm2_user_context3.jsonnet new file mode 100755 index 0000000000000000000000000000000000000000..f1bf68efa1faf8e3269d3c69ee75a243abe3d730 --- /dev/null +++ b/convlab2/nlu/milu/unified_datasets/configs/tm2_user_context3.jsonnet @@ -0,0 +1,104 @@ +{ + "dataset_reader": { + "type": "milu", + "token_indexers": { + "tokens": { + "type": "single_id", + "lowercase_tokens": true + }, + "token_characters": { + "type": "characters", + "min_padding_length": 3 + }, + }, + "context_size": 3, + "agent": "user", + "use_unified_datasets": true, + "dataset_name": "tm2", + "random_context_size": false + }, + "train_data_path": "train", + "validation_data_path": "validation", + "test_data_path": "test", + "model": { + "type": "milu", + "label_encoding": "BIO", + "use_unified_datasets": true, + "dropout": 0.3, + "include_start_end_transitions": false, + "text_field_embedder": { + "token_embedders": { + "tokens": { + "type": "embedding", + "embedding_dim": 50, + "pretrained_file": "https://s3-us-west-2.amazonaws.com/allennlp/datasets/glove/glove.6B.50d.txt.gz", + "trainable": true + }, + "token_characters": { + "type": "character_encoding", + "embedding": { + "embedding_dim": 16 + }, + "encoder": { + "type": "cnn", + "embedding_dim": 16, + "num_filters": 128, + "ngram_filter_sizes": [3], + "conv_layer_activation": "relu" + } + } + } + }, + "encoder": { + "type": "lstm", + "input_size": 178, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "intent_encoder": { + "type": "lstm", + "input_size": 400, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "attention": { + "type": "bilinear", + "vector_dim": 400, + "matrix_dim": 400 + }, + "context_for_intent": true, + "context_for_tag": false, + "attention_for_intent": false, + "attention_for_tag": false, + "regularizer": [ + [ + "scalar_parameters", + { + "type": "l2", + "alpha": 0.1 + } + ] + ] + }, + "iterator": { + "type": "basic", + "batch_size": 64 + }, + "trainer": { + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "validation_metric": "+f1-measure", + "num_serialized_models_to_keep": 3, + "num_epochs": 40, + "grad_norm": 5.0, + "patience": 75, + "cuda_device": 0 + }, + "evaluate_on_test": true +} diff --git a/convlab2/nlu/milu/unified_datasets/configs/tm3_user.jsonnet b/convlab2/nlu/milu/unified_datasets/configs/tm3_user.jsonnet new file mode 100755 index 0000000000000000000000000000000000000000..c554d83e99ae63c5af288ca49a76cb8d8d5bc1e0 --- /dev/null +++ b/convlab2/nlu/milu/unified_datasets/configs/tm3_user.jsonnet @@ -0,0 +1,104 @@ +{ + "dataset_reader": { + "type": "milu", + "token_indexers": { + "tokens": { + "type": "single_id", + "lowercase_tokens": true + }, + "token_characters": { + "type": "characters", + "min_padding_length": 3 + }, + }, + "context_size": 0, + "agent": "user", + "use_unified_datasets": true, + "dataset_name": "tm3", + "random_context_size": false + }, + "train_data_path": "train", + "validation_data_path": "validation", + "test_data_path": "test", + "model": { + "type": "milu", + "label_encoding": "BIO", + "use_unified_datasets": true, + "dropout": 0.3, + "include_start_end_transitions": false, + "text_field_embedder": { + "token_embedders": { + "tokens": { + "type": "embedding", + "embedding_dim": 50, + "pretrained_file": "https://s3-us-west-2.amazonaws.com/allennlp/datasets/glove/glove.6B.50d.txt.gz", + "trainable": true + }, + "token_characters": { + "type": "character_encoding", + "embedding": { + "embedding_dim": 16 + }, + "encoder": { + "type": "cnn", + "embedding_dim": 16, + "num_filters": 128, + "ngram_filter_sizes": [3], + "conv_layer_activation": "relu" + } + } + } + }, + "encoder": { + "type": "lstm", + "input_size": 178, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "intent_encoder": { + "type": "lstm", + "input_size": 400, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "attention": { + "type": "bilinear", + "vector_dim": 400, + "matrix_dim": 400 + }, + "context_for_intent": true, + "context_for_tag": false, + "attention_for_intent": false, + "attention_for_tag": false, + "regularizer": [ + [ + "scalar_parameters", + { + "type": "l2", + "alpha": 0.1 + } + ] + ] + }, + "iterator": { + "type": "basic", + "batch_size": 64 + }, + "trainer": { + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "validation_metric": "+f1-measure", + "num_serialized_models_to_keep": 3, + "num_epochs": 40, + "grad_norm": 5.0, + "patience": 75, + "cuda_device": 0 + }, + "evaluate_on_test": true +} diff --git a/convlab2/nlu/milu/unified_datasets/configs/tm3_user_context3.jsonnet b/convlab2/nlu/milu/unified_datasets/configs/tm3_user_context3.jsonnet new file mode 100755 index 0000000000000000000000000000000000000000..879b1070b246833a76a69b2c49435febbb07d8cb --- /dev/null +++ b/convlab2/nlu/milu/unified_datasets/configs/tm3_user_context3.jsonnet @@ -0,0 +1,104 @@ +{ + "dataset_reader": { + "type": "milu", + "token_indexers": { + "tokens": { + "type": "single_id", + "lowercase_tokens": true + }, + "token_characters": { + "type": "characters", + "min_padding_length": 3 + }, + }, + "context_size": 3, + "agent": "user", + "use_unified_datasets": true, + "dataset_name": "tm3", + "random_context_size": false + }, + "train_data_path": "train", + "validation_data_path": "validation", + "test_data_path": "test", + "model": { + "type": "milu", + "label_encoding": "BIO", + "use_unified_datasets": true, + "dropout": 0.3, + "include_start_end_transitions": false, + "text_field_embedder": { + "token_embedders": { + "tokens": { + "type": "embedding", + "embedding_dim": 50, + "pretrained_file": "https://s3-us-west-2.amazonaws.com/allennlp/datasets/glove/glove.6B.50d.txt.gz", + "trainable": true + }, + "token_characters": { + "type": "character_encoding", + "embedding": { + "embedding_dim": 16 + }, + "encoder": { + "type": "cnn", + "embedding_dim": 16, + "num_filters": 128, + "ngram_filter_sizes": [3], + "conv_layer_activation": "relu" + } + } + } + }, + "encoder": { + "type": "lstm", + "input_size": 178, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "intent_encoder": { + "type": "lstm", + "input_size": 400, + "hidden_size": 200, + "num_layers": 1, + "dropout": 0.5, + "bidirectional": true + }, + "attention": { + "type": "bilinear", + "vector_dim": 400, + "matrix_dim": 400 + }, + "context_for_intent": true, + "context_for_tag": false, + "attention_for_intent": false, + "attention_for_tag": false, + "regularizer": [ + [ + "scalar_parameters", + { + "type": "l2", + "alpha": 0.1 + } + ] + ] + }, + "iterator": { + "type": "basic", + "batch_size": 64 + }, + "trainer": { + "optimizer": { + "type": "adam", + "lr": 0.001 + }, + "validation_metric": "+f1-measure", + "num_serialized_models_to_keep": 3, + "num_epochs": 40, + "grad_norm": 5.0, + "patience": 75, + "cuda_device": 0 + }, + "evaluate_on_test": true +}