Skip to content

AllenNLP-Hydra#

Plugin For AllenNLP that enables composing configs through the use of the Hydra Library from Facebook Research.

NOTE there is no affiliation between this project and AllenNLP or the Allen Institute for AI.

We use the same contributions guideline as AllenNLP in order to maintain similar code styles. For this reason our style guide is the same as that found in their repository.

Install Instructions#

Clone the repo

pip install .
echo allennlp_hydra >> ~.allennlp_plugins

The second line adds allennlp-hydra to the allennlp plugins file so that it can globally be recognized.

Basic Guide#

Say you have the following directory structure:

project
+-- conf
|   +-- dataset_readers
|   |   +-- A.yaml
|   |   +-- B.yaml
|   +-- models
|   |   +-- C.yaml
|   |   +-- D.yaml
|   +-- config.yaml
+-- experiments

conf/dataset_readers/A.yaml:

type: A
start_token: <s>
end_token: </s>

conf/dataset_readers/B.yaml:

type: B
start_token: [CLS]
end_token: [SEP]

conf/models/C.yaml:

type: C
layers: 5

conf/models/D.yaml:

type: D
input_dim: 10

config.yaml

defaults:
    - dataset_reader: A
    - model: C

debug: false

Then running the command

allennlp compose conf config example -s experiments
Produces the file project/experiments/config.json
{
    "dataset_reader":{
        "type": "A",
        "start_token": "<s>",
        "end_token": "</s>"
    },
    "model": {
        "type": "C",
        "layers": 5
    },
    "debug": false
}

If you want to override the config and use the B dataset reader with the D model, you would modify the previous command:

allennlp compose conf config example -s experiments -o model=D dataset_reader=B
Produces the file project/experiments/config.json
{
    "dataset_reader":{
        "type": "B",
        "start_token": "[CLS]",
        "end_token": "[SEP]"
    },
    "model": {
        "type": "D",
        "input_dim": 10
    },
    "debug": false
}

And if you wanted to change input_dim of model D to 25:

allennlp compose conf config example -s experiments -o model=D dataset_reader=B model.input_dim=25

Produces the file project/experiments/config.json

{
    "dataset_reader":{
        "type": "B",
        "start_token": "[CLS]",
        "end_token": "[SEP]"
    },
    "model": {
        "type": "D",
        "input_dim": 25
    },
    "debug": false
}