Models are defined from the code to allow a high level of modeling freedom. The user should provide a opennmt.models.Model instance using available or user-defined modules.

Some modules are defined to contain other modules and can be used to design complex architectures:

  • opennmt.encoders.ParallelEncoder
  • opennmt.encoders.SequentialEncoder
  • opennmt.inputters.MixedInputter
  • opennmt.inputters.ParallelInputter

For example, these container modules can be used to implement multi source inputs, multi modal training, mixed word/character embeddings, and arbitrarily complex encoder architectures (e.g. mixing convolution, RNN, self-attention, etc.).

See the template file config/models/ and predefined models in config/models/. Contributions to add more model configurations are welcome.


Parameters are described in separate YAML files. They define data files, optimization settings, dynamic model parameters, and options related to training and inference.

See the example configuration config/sample.yml to learn about available parameters.

Multiple configuration files

The command line accepts multiple configuration files so that some parts can be made reusable, e.g:

python -m bin.main [...] --config config/opennmt-defaults.yml config/optim/adam_with_decay.yml config/data/toy-ende.yml

If a configuration key is duplicated, the value defined in the rightmost configuration file has priority.

If you are unsure about the configuration that is actually used or simply prefer working with a single file, consider using the merge_config script:

python -m bin.merge_config config/opennmt-defaults.yml config/optim/adam_with_decay.yml config/data/toy-ende.yml > config/my_config.yml