Improve Chatbot Accuracy By Detecting Patterns In User Input

Improve Chatbot Accuracy By Detecting Patterns In User Input

Here Is How To Use Patterns & Roles In Microsoft LUIS


There are currently various avenues to introduce structure to entities in order to detected patterns. Microsoft LUIS, Alexa Conversations and Rasa is the leaders in this regard.

Although the examples given in this article will be based on LUIS, the underlying principles employed can be gleaned and implemented in other platforms.

The basic premise is to create roles for an entity, and then establish a pattern in which those roles might be used. This pattern then serves as a guide for the Conversational AI platform to detect patterns in user utterances. And subsequently useful conversational data.

Machine Learned Entities were introduced to Microsoft LUIS November 2019. Entity decomposition is important for both intent prediction and for data extraction in terms of entities. This superseded some of the existing functionality within LUIS.

Hence, to some extent the Roles and Patterns functionality were superseded within LUIS by ML Entities which can be decomposed. Think of ML Entities, as entities which can be nested several times over.

However, roles and patterns are still useful in certain instances; when fixed patterns need to be detected within user utterances. And perhaps users have have legacy implementations which need to be carried forward.

Let’s have a look at how Roles and Patterns can be implemented by using a simple example project.

Adding Roles to an Entity

We will start of by creating an entity called Cities. Within the entity called Cities, we want to create two roles:

  • Destination
  • Origin

It is evident that Roles can be seen as subsets or types of the entity Cities. Multiple roles can be added.

Hence contextual information is maintained for an entity in this way. It needs to be noted that roles can only be used for patterns.

Combining Roles and Patterns

Now we are going to combine the roles defined for the entity with a pattern.

Image for post
LUIS Intent called Distance referencing the Entity and Role.

The basic intent is created, then the entity with roles. And now we are going to add the patterns.

Image for post
Sequence of Elements to Create Patterns

When creating a pattern, it needs to be linked to an intent. And it makes sense to use the same wording or utterances you used in the intent.

Image for post
Adding Patterns with Entities and Roles Defined To An Intent.

Once you have clicked on Patterns, it is important to select the correct intent at the top drop-down. The patterns are defined as shown here below. In the format of Entity, colon and the Role.

How far is {Cities:Origin} from {Cities:Destination}?
We are traveling from {Cities:Origin} to {Cities:Destination}.

It is clear from these two lines that entity roles are truly contextual and not finite in their value. When testing in the LUIS console the pattern matched can be seen.

Image for post
LUIS Testing Console showing the top matched patterns.

This feature is supposed to decrease the number of examples required; hence speeding up the configuration process. It is also important to note that we have not provided our model specific data regarding what our entity should map to, but an arbitrary city name can be retrieved based on a recognized pattern.


I still lean toward using ML entities which can be decomposed; entities which can be nested, as shown here:

Image for post
ML Entities which are composed of smaller sub-entities.

It is a clean and simple solution for defining and recognizing patterns and extracting related entities and group then. Roles and Patterns hail from mid 2018 and presents a more complex approach.

Image for post
ML Entities which are composed of smaller sub-entities.

Yet there might be instances where you want to re-use patterns and have them grouped together. There might also be legacy implementations of this approach which needs to be supported and augmented.

~ January 2021

Leave a Reply

Your email address will not be published. Required fields are marked *