Rasa NLU - Docker: Cannot train model with custom config and components

Hi all

Docker version: Docker version 18.06.1-ce, build e68fc7a

Rasa NLU version: rasa-nlu 0.13.7

My root directory: /root/rasa_nlu

My dir structure:

.
├── actions.py
├── components
│   ├── __init__.py
│   └── stanford
│       ├── com_stanford_nlp.py
│       ├── __init__.py
├── config
│   └── config_nlu.yml
├── log
│   ├── stanford_nlp.log
│   └── stanford_nlp.log.2018-11-09
├── projects
│   └── company_a
│       ├── config.yml
│       ├── data
│       │   └── data.json
│       └── models
│           └── default
│               └── en
│                   ├── metadata.json
│                   └── training_data.json
├── README.md
└── requirements.txt

My config/config_nlu.yml content:

language: "en"
pipeline:
  - name: "components.stanford.com_stanford_nlp.Stanford_NLP"

project_name: "company_a"

Here is the error message: Problem with command (copied from Development with Docker):

  • Config file not found:
docker run -v /root/rasa_nlu/:/app/project -v /root/rasa_nlu/projects/company_a/models/:/app/models rasa/rasa_nlu:latest-tensorflow run python -m rasa_nlu.train -d projects/company_a/data/data.json -o projects/company_a/models/ --project current -c config/config_nlu.yml         

 Traceback (most recent call last):
  File "/usr/local/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/local/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/app/rasa_nlu/train.py", line 177, in <module>
    do_train(config.load(cmdline_args.config),
  File "/app/rasa_nlu/config.py", line 44, in load
    file_config = utils.read_yaml_file(filename)
  File "/app/rasa_nlu/utils/__init__.py", line 256, in read_yaml_file
    return read_yaml(read_file(filename, "utf-8"))
  File "/app/rasa_nlu/utils/__init__.py", line 205, in read_file
    with io.open(filename, encoding=encoding) as f:
FileNotFoundError: [Errno 2] No such file or directory: 'config/config_nlu.yml'

If I change -c config/config_nlu.yml to -c /app/project/config/config_nlu.yml. It works, BUT! There is another problem:

docker run -v /root/rasa_nlu/:/app/project -v /root/rasa_nlu/projects/company_a/models/:/app/models rasa/rasa_nlu:latest-tensorflow run python -m rasa_nlu.train -d projects/company_a/data/data.json -o projects/company_a/models/ --project current -c /app/project/config/config_nlu.yml
Traceback (most recent call last):
  File "/app/rasa_nlu/registry.py", line 110, in get_component_class
    return utils.class_from_module_path(component_name)
  File "/app/rasa_nlu/utils/__init__.py", line 175, in class_from_module_path
    m = importlib.import_module(module_name)
  File "/usr/local/lib/python3.6/importlib/__init__.py", line 126, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 941, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
  File "<frozen importlib._bootstrap>", line 994, in _gcd_import
  File "<frozen importlib._bootstrap>", line 971, in _find_and_load
  File "<frozen importlib._bootstrap>", line 953, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'components'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/usr/local/lib/python3.6/runpy.py", line 193, in _run_module_as_main
    "__main__", mod_spec)
  File "/usr/local/lib/python3.6/runpy.py", line 85, in _run_code
    exec(code, run_globals)
  File "/app/rasa_nlu/train.py", line 184, in <module>
    num_threads=cmdline_args.num_threads)
  File "/app/rasa_nlu/train.py", line 148, in do_train
    trainer = Trainer(cfg, component_builder)
  File "/app/rasa_nlu/model.py", line 152, in __init__
    components.validate_requirements(cfg.component_names)
  File "/app/rasa_nlu/components.py", line 54, in validate_requirements
    component_class = registry.get_component_class(component_name)
  File "/app/rasa_nlu/registry.py", line 119, in get_component_class
    "in a module.".format(component_name))
Exception: Failed to find component class for 'components.stanford.com_stanford_nlp.Stanford_NLP'. Unknown component name. Check your configured pipeline and make sure the mentioned component is not misspelled. If you are creating your own component, make sure it is either listed as part of the `component_classes` in `rasa_nlu.registry.py` or is a proper name of a class in a module.

The component file content com_stanford_nlp.py

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals

from rasa_nlu.components import Component

import logging

class Stanford_NLP(Component):
    name = "stanford_nlp"
    provides = []
    requires = []
    defaults = {}
    language_list = None

    def __init__(self, component_config=None):
        super(Stanford_NLP, self).__init__(component_config)

    ...

Can anyone please tell me what’s wrong with this?

Thank you very much in advance for all your help.

3 Likes

Hi @alucard001,

I met the same problem now. Did you find out how to solve this problem? Thank you for the help in advance

2 Likes