How to handle "what is ..." type questions

Hello,
We are working with bots containing lots of questions that are just “what is …” + the word they define.
But we found that the bot usually isn’t very good at handling variation of that. Say we type “could you tell me more about …”, then the bot is lost.
The usual workaround that we have is having a term “Definitions”, storing inside all of our what is questions, use synonyms to find ways formulate “what is”, and then use tag on the word to define.

1st question is : Is this the best way ? We don’t use traits, we don’t want to use alternate questions, because on some bots we have 100+ of those questions and that would mean hundreds of AQ…

2nd question : Is there somewhere we can find synonyms “packs” to add to our bots ? Some unrelated users are building bots and we would like them to be able to find their own synonyms packs relevant to their needs, without having the COE build all of them.

1/
Natural language training is a reactive process, meaning you have to add training examples that cover every style of question that a user may pose. You don’t have a choice in this because you cannot predict or force how a user will interact with the bot.

Now you can cover some simple variations through synonyms, but that only goes so far, and does become problematic with multi-word synonyms and tags/terms because they are defeated by the user saying extra words, e.g. “what the heck is …”.

A general principle of synonyms is that the words in the set should be a direct replacement for each other, which generally means that they should belong to the same word class, i.e. verb for a verb, noun for a noun. Indeed a simple test for synonyms is to create a sample sentence and replace the word with the synonym and if the sentence still sounds correct then it is an appropriate synonym. If it does not sound right, then it is not, and therefore you need to consider additional training (alternative questions for KG, another ML sentence, another FM pattern) to support it.

Now if you have lots of questions that are all “what is X”, “what is Y”, “what is Z” then you may want to consider parameterizing the X,Y,Z aspect to reduce the set of questions to one. There are several ways of achieving this.

If the domain of X,Y,Z is known then you can define them in a concept and use it in a KG pattern. Instead of having a fixed response you can initiate a dialog task where you can use an entity to extract the specific topic (via a custom type entity and that concept), and use some strategy to display an appropriate response, e.g. content variables or a look up service. Now you would only have to add one set of alternative phrasings to the one generic KG question.

A slight variation of that is to skip the KG aspect and just use ML/FM training directly for the task. That decision depends on what other things are in the bot and how to handle disambiguation. For example if the bot only has KG training then it makes sense to keep everything together so the engine knows the full extent of the training. But direct task training makes it easier to handle the unknown cases, “what is W”.

2/
The FM engine has a set of internal concepts, some of which are dynamic (e.g. based on POS tags) and some are general knowledge. They are currently only usable by FM patterns (and entities). They are not documented but you can discover them through using the command cheat conceptlist <word/phrase> in Talk to Bot.