Control Module


A control module is a module to link all of the QA modules to construct an OKBQA pipeline for answering a question, as well as a debugger for validating the result of each module and entire pipeline.

The workflow of the controller is as follows:

  • Initially, the controller takes a question and written language as an input, and then executes a first module specified in the “conf” field in an input (If it is not given in the “conf” field, a template generation module will be a first module).
  • Then, CM executes following modules sequentially (according to “sequence” field in an input) by transferring the parsed output of a previous module into the input of the following module.
  • During the pipeline is executed by the controller, log messages on module I/Os, execution times, exceptions, and so on are accumulated and returned to users to check whether a pipeline works well or not.
  • After all of the modules are executed by the controller, it returns the final results (answers for a input question) and log messages recording the history of the execution.

I/O specification:

Input

{
    "input": {
        "string": "Which rivers flow through Seoul?",
        "language": "en"
    },
    "conf": {
        "address": {
            "TGM": ["TGM-ADD(1)", "TGM-ADD(2)", ..., "TGM-ADD(n1)"],
            "DM": ["DM-ADD(1)", "DM-ADD(2)", ..., "DM-ADD(n2)"],
            "QGM": ["QGM-ADD(1)", "QGM-ADD(2)", ..., "QGM-ADD(n3)"],
            "AGM": ["AGM-ADD(1)", "AGM-ADD(2)", ..., "AGM-ADD(n4)"],
            "KB": [["KB-ADD(1)", "GIRI(1)"], ["KB-ADD(2)", "GIRI(2)"], ..., ["KB-ADD(n5)", "GIRI(n5)"]]
        },
        "sequence": ["TGM", "DM", "QGM", "AGM"],
        "timelimit": 10000   
    }
}
  • ADD: Address
  • TGM: Template Generation Module
  • DM: Disambiguation Module
  • QGM: Query Generation Module
  • AGM: Answer Generation Module
  • KB: Knowledge Base
  • GIRI: Graph IRI
  • sequence: Execution order of modules
  • timelimit: Upper time limitation in seconds for executing each module

Output

{
    "log": ["L(1)", "L(2)", ..., "L(n1)"],
    "result": [
        {"query": "Q(1)", "answer": "A(1)"},
        {"query": "Q(2)", "answer": "A(2)"},
        ...
        {"query": "Q(n2)", "answer": "A(n2)"}
    ]
}
  • L: Log message
  • Q: SPARQL query
  • A: An RDF triple retrieved by a given query