Natural Language Generation (NLG)¶
The NLG components in DialogueKit are currently template-based.
The basic template-based generation works by extracting templates from a set of training data. The templates are the user and agent utterances with the annotations removed. This version can be found here: dialoguekit.nlg.nlg_template.TemplateNLG
.
An extended version of the basic template-based implementation which can perform conditional language generation is dialoguekit.nlg.nlg_conditional.ConditionalNLG
.
Using a conditional may be useful in cases where other attributes than the intent and annotations may be of interest , for example, the user’s satisfaction.
This can then be used to select templates that have a different tone based on the conditional.
These two are used in similar ways. The only difference is that the ConditionalNLG can use a conditional in the dialoguekit.core.annotated_utterance.AnnotatedUtterance.metadata
as long as the conditional value is a number.
To start using these NLG classes a template needs to be generated. Two methods for doing this are provided:
Usage Example¶
from dialoguekit.core.annotation import Annotation
from dialoguekit.core.intent import Intent
from dialoguekit.nlg.nlg_template import TemplateNLG
from dialoguekit.nlg.template_from_training_data import (
extract_utterance_template,
)
template = extract_utterance_template(
annotated_dialogue_file=ANNOTATED_DIALOGUE_FILE_PATH,
)
nlg = TemplateNLG(response_templates=template)
response = nlg.generate_utterance_text(intent=Intent("COMPLETE"))
ConditionalNLG¶
The ConditionalNLG class contains two additional parameters to the generate_utterance_text()
method.
conditional: str
conditional_value: Number
These fields are used to find the utterance that has the closest conditional_value
to the utterance metadata field with the key conditional
.
Note that this necessitates the need of a larger template with multiple values for the conditional
.
Custom NLG¶
Any custom NLG component might be implemented by inheriting from dialoguekit.nlg.nlg_abstract.AbstractNLG
.