How to use Dispatch for multiple Luis model with different cultures - botframework

I am working on a bot which will have multiple languages(English, French and Spanish). So that I have created multiple Luis models with different cultures i.e en-us, fr-fr and es-es. Now how to add Dispatch for this? I am able to create dispatch for the same culture not for multiple cultures.
Please help me with this. Thanks in advance...!
Reference: https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-tutorial-dispatch?view=azure-bot-service-4.0&tabs=csharp

Dispatch feature provided for LUIS is language dependant as you mentioned (because LUIS is language dependant).
The best way to handle this case is to detect the language on your bot side (not on LUIS side) and then call the right LUIS model given the detected language.
This can be done by using Detect language from Text Analytics API in Microsoft Cognitive Services: https://westus.dev.cognitive.microsoft.com/docs/services/TextAnalytics.V2.0/operations/56f30ceeeda5650db055a3c7

Related

Are LUIS model features lost in Dispatch model created with botframework cli tool?

In the last days I spent few time in fine tuning a LUIS model of a Botframework Skill. I found really useful to use "Phrase list" feature to define synonyms and obtain a better behavior from the skill bot.
Unfortunately when I connect the Skill to the Bot, I notice that the "Phrase list" features are no more present in the dispatch model created by the cli tools.
Is this a known behavior/limitation or am I doing something wrong?
Dispatch CLI combined phraselists into new ones to make sure the new Dispatch phrase lists are under the quota. Could you check if specific words you are looking for are under the phraselists created by Dispatch?

Best situations when to use BotFramework Dispatch

I've been reading the article on setting up BotFramework Dispatch middleware and there are a few things I don't understand. The article is https://learn.microsoft.com/en-us/azure/bot-service/bot-builder-tutorial-dispatch?view=azure-bot-service-4.0&tabs=cs
Article mentioned to use dispatch when we use multiple LUIS and/or QnA Models. But it seems that as soon as we have 1 of each (LUIS and QnA model) we already need a dispatch. Is there a way to avoid using dispatch if I have just one of each?
How does dispatch LUIS get maintained when changes occur in underlying LUIS or QnA models?
The idea of Dispatch tool (which is based on LUIS in fact) is being able to dispatch intent between several systems. As soon as you have more than 1 system which can understand intents (whether it is LUIS, QnA Maker or 3rd parties), how would you know which one will be the best for your case?
In a few words, dispatch will group intents for each system into global intents, and so when you call it you will know which systems is the best matching one, then you route your sentence to this best matching system to get the right granularity.
And as you mentioned, to maintain it, there's no secret: it must be updated when you update your underlying LUIS intents/utterances or QnA Maker KB systems

Culture-specific understanding in LUIS

We are trying to create a multi-language chat bot using Azure Bot Framework and LUIS.
While designing the architecture we are struggling to understand following points:
I am not able to see 'en-GB' in the list of supported languages mentioned in following blog.
https://learn.microsoft.com/en-us/azure/cognitive-services/luis/luis-supported-languages.
Does that mean LUIS does not support 'en-GB'?
If so, will LUIS really struggle to understand the query written in 'en-GB' as far as this app is just a chat bot and not voice bot?
Do we need to do anything special so that LUIS can understand query written in any supported language say 'de-DE' and map it to utterances modeled in 'English'?
I am not able to see 'en-GB' in the list of supported languages mentioned in following blog.
https://learn.microsoft.com/en-us/azure/cognitive-services/luis/luis-supported-languages.
Does that mean LUIS does not support 'en-GB'?
Yes. But in fact the announced language is English, not American English or British English (see below)
If so, will LUIS really struggle to understand the query written in 'en-GB' as far as this app is just a chat bot and not voice bot?
You can use en-US language. There is no link with chat vs voice capability, LUIS is only treating text items. For voice, you need to use other tools first like STT (Speech-to-text) tools.
Do we need to do anything special so that LUIS can understand query written in any supported language say 'de-DE' and map it to
utterances modeled in 'English'?
Yes, you have to translate your items.
When you create a project (called an app) in LUIS, the 1st setting that you must provide is the Culture (see capture below).
If you want to use several languages in a chatbot project for example, you have at least 2 possibilities:
Create 1 LUIS app for each language, and call the right one. You can select the right one by several ways (using the locale if selected by the user, or using Language detection APIs for example)
Create 1 global LUIS app in 1 language (choosing English may be the right option as LUIS main feature are available in English first) and make a translation before calling LUIS.
I would recommend the 1st solution because translation is never perfect and may be loosing context which can be important for LUIS.

microsoft bot framework and luis

I want to create an bot which has to prompt the user for text. if the information provided by the user is general and not specific. for ex:
if we ask the bot : how many alphabets is in the language?
then the bot should ask : in what language?
How to achieve this?
To follow along with the example you provided:
Create an LUIS intent named, for example, "Determine Language Alphabet"
Train the intent using a phrase such as "How many alphabets are in [language]", where [language] is a word like English or Japanese that you've wrapped in an entity name "language"
In your code, take the Luis Result and try to find a "language" entity. If it's not found, prompt the user to enter a language/repeat the query with a language
This process will help you get started with understanding how Luis intents and entities can be used to help you better interact with users.
Using Node JS and LUIS
Using .NET and LUIS

Creating an API for LUIS.AI or using .JSON files in order to train the bot for non-technical users

I have a bot that uses .NET, MS Bot Framework and LUIS.ai for its smarts.
All's fine, except that I need to provide a way for non-technical users to train the bot and teach it new things, i.e. new intents in LUIS.ai.
In other words, suppose that right now the bot can answer messages like "hey bot where can i get coffee" and "where can I buy some clothes" with simple phrases containing directions. Non-technical users need to be able to train it to answer "where can I get some food" too.
Here's what I have considered:
Continuing to use LUIS.ai. Doesn't work because LUIS.ai doesn't have an API. The best it has is the GUI to refine existing intents, and the upload app/phrase list feature. The process can be semi-automated if the JSON file with the app can be generated by some application that I write; however, there still needs to be backend code that handles the new intents, and that has to be implemented by a C# coder.
Could it work if I switch from C# to Node.js? Then theoretically I would be able to auto-generate code files / intent handlers.
Azure Bot Service. Seems it doesn't have a non-technical interface and is just a browser-based IDE.
Ditching Bot Framework entirely and using third-party tools such as motion.ai. Doesn't work because there's no "intellect" as the one provided by LUIS.ai.
Using Form Flow that's part of Bot Framework. If my GUI bot builder application can generate JSON files, these files can be used by Bot Framework to build a bot automatically. Doesn't work because there's no intellect as in LUIS.ai.
Keep using Bot Framework, but ditch LUIS and build a separate web service based on a node.js language processing library for determining intents. May or may not work, may be less smart than LUIS, and could be an overkill.
Override the method in LuisDialog that selects the intent from the LuisResponse, in order to use the my own way to decide the intent (but how?).
At this point I'm out of ideas and any pointers will be greatly appreciated.
First of all, LUIS.ai provides an API that you can use to automatize the training. Moreover, here is Luis Trainer written entirely in Python against the API that just does that.
The easiest one, probably is the one you are describing in #1: you can automatize the training (as explaining above) but you will still have to deploy a new version of the bot if new intents are being provided. One thing is letting users to train an existing model with new utteraces and another completely and different thing is to let them create the model :)
It might be hard to skip having to write the backend code (I wouldn't automatize that at all)
Here is a potential idea (not sure if it will work though). You would need 2 Luis models.
One with your current model, that users will be able to train with new utterances.
The second model, is one exclusively intended to be "expanded" with new intents by users.
If you separate this in that way, you might be able to look into a "plugin" architecture for the second LUIS model. So, your app, somehow, loads dinamically an assembly where the second model lives.
Once you you have that in place, you can focus on writing the backend code for your second Luis Model without having to worry about the bot/first model. You should be able to replace the assembly with the second Luis Model and be able in the bot to detect if there is new version of that assembly and replace the current one in the app domain.
As I said, is just an idea as I'm brainstorming with you. Sounds a bit complex, and it's not addressing all your concerns; as you still will need to write code (which in any case, you will eventually have to do)
I am working through a challenge project (training) to automate the creation of Chat Bots specifically targeted against a Luis.ai model using plain old javascript and web services to Luis.
I looked at the Bot Framework and it's just too cumbersome to automate (I want X number of customers to create a Chat Bot without coding). I also want to add my own type of 'Cards' (html widgets) that do more and can be easily configured by someone with zero coding skills.
Calls to the Luis.ai/Cognitive Services API are made in my code behind and the json response returned to my own rules engine. On the following URL click the LUIS API link on the page to open the Luis API Console where you can test, and train your Model. All the endpoints you will need are here...
https://dev.projectoxford.ai/docs/services/
Based on the various endpoints on that page, you can use WebClient in asp.net to pull back the response. So in my testing I have buttons on a page to push utterances up to the model, pull back entities, create hierarchical entities and so on. Have a look at http://onlinebotbuilder.com to see how an intent of product dynamically inserted a shopping cart.
When your tool is built and utterances start to arrive, Luis.ai will store them and via the Suggest tab (at Luis.ai) it will ask you for guidance...Unfortunately I don't think you could give that control over to your customers, unless they are experts in your domain (they understand which utterance belongs to which intent). You don't need to take your app down, just train it periodically to improve the Model based on your customers input...soon enough you will have your model working well based on your intents.
Hope that helps.

Resources