Composite Entities help you capture multiple entity values in a user utterance. These multiple entity values can be optional and can come in any order in the user utterance.
Example: Car Sales Bot: Consider the sales inquiries to car sales. Typical queries can be of the form: ‘I am interested in Tesla Model S 2018 model’ or ‘What would a red Tesla 2010 model cost’ or ‘Tell me about Tesla Model S’. As you can see, the bot typically needs to process a combination of details like Make, Model, Year and Color to respond to those queries.
Each of these multiple values or details can come from different independent entities. Composite Entities enable you to combine these independent entities or sub-entities.
Composite Entity Patterns have to be used to establish the relationship between the sub-entities. Subentities are included in the composite entity using the @ tag, i.e.,@subentity
in the composite entity pattern. These sub-entities need to be pre-defined and should not be part of the current dialog flow. The sub-entities can come from other Dialog Tasks, too.
Various patterns like AND, OR etc. can be built, similar to the ones used in defining Entity Patterns (refer here for more)
The Composite Entity values take the form of a JSON object wherein the subentities can be referenced as properties of that object, i.e. to access a subentity value you can use:
{{context.entities.<<composite_entity>>.<<sub_entity>> }}
Each of the sub-entities can be accessed using the structure they were defined, as they will be accessed when used independently of the composite entity. For example, if the sub-entity is of the type Airport then one can access the airport name thus: {{context.entities.<<composite_entity>>.<<sub_entity>>.AirportName }}
Creating a Composite Entity
Building a composite entity involves the following steps – creating sub-entities and establishing a relationship between these sub-entities.
Create Sub-Entities
Since the Composite entity is a combination of other entities, you first need to build the individual entities in the Dialog task. To capture the Car Type from the above example, you first need to create the sub-entities that can capture the required details. For example, here’s a sample mapping of sub-entities for the Car entity:
Related Entity | Entity Type |
---|---|
Make | List of items: To capture the name of the car brand from the user utterance. As a developer, you should build this list in the entity. |
Model | List of Values: To capture the name of the model from the user utterance. As a developer, you should build this list in the entity. |
Year of Make | Number: To capture the year of manufacturing from the user utterance. Bots recognize numbers automatically. |
Color | Color: To captures the color from the user utterance. Bots recognize colors automatically. |
Note: Sub-entities can only be combined into a composite entity and should not be used for any other purpose in the Dialog task. If you are creating sub-entities in the current Dialog task, remove all transitions to these sub-entities, so that they are not a part of the Dialog task flow.
Define Composite Entity
Add a Composite entity after a relevant node in the Dialog task. To make this entity capture multiple entity values, you need to create Composite Patterns. To do so, open the Properties Panel, and under the Composite Patterns section, add relevant patterns. The various patterns that can be built are similar to the ones used in defining Entity Patterns (refer here for more)
For the above composite entity patterns, following are the sample utterances and the output:
Sample Utterance | Corresponding Pattern | Output |
---|---|---|
I want to buy 2018 Tesla Model S | @year @make @model |
"Car": { "Year": 2018, "Make": "Tesla", "Model": "Model S" } |
Can you send me a quote for 2018 Tesla Model S preferably Red? | @year @make @model preferably @color |
"Car": { "Year": 2018, "Make": "Tesla", "Model": "Model S" “Color”: “Red” } |
How are the ratings for Tesla Model S? | @Make @Model |
"Car": { "Make": "Tesla", "Model": "Model S" } |
You can also define the Synonyms and Patterns as with any other Entity.
Limitations
- Sub-entity Types of String, Description, Location and Date cannot be part of a composite entity.
- Make sure that the sub-entities are not part of the Dialog flow in the task using the composite entity.
- If the sub-entity allows multi-items, the parent composite entity will accept only one value for the sub-entity and not a list.
How it works
When a composite entity is reached in the dialog flow:
- all the possible subentities from the defined composite entity patterns are identified;
- all possible instances of those subentities are located in the user utterance and the location recorded;
- the composite entity patterns are then evaluated to identify the specific pattern that matches the set of subentity instances captured.
What that means is that the composite entity pattern is not used to identify the subentities but to match the entire pattern.