Difference between IBM Watson Conversation and Natural Language Understanding - nlp

I'm building an watson conversation service and I want to know different watson Conversation and Natural Language Understanding service.
I think Watson conversation service support Natural Language Understanding, such as intent, entity but Natural Language Understanding service also provide intent and entity.
If I just use intent and entity for conversation, do I need to bind Natural Language Understanding to conversation service or not?
Thank you.

Conversation service is separate from NLU. Conversation is about building a chatbot on your own domain. The intents/entities are only what you train it on, and the dialog is a feature only available in conversation, not NLU.
NLU is a pretrained service that returns various information back about text, but does not do anything with a response, and will give you back what it has been pretrained on. Out of the box, you can't change this. You can use a product like Watson Knowledge Studio to train a custom annotator, but NLU itself knows what it knows and thats it.
There is no need to combine these, but it is possible. Depending what problem youre trying to solve will help guide you in which you want to use. If you want to understand data about unstructured text, with no real training time required, NLU is right for you. If you want to develop a chatbot to help your users with some problem, Conversation is right for you.
If you want to build a chatbot about generic things, or if you require things like people's name, extracting locations around the world, etc, and respond accordingly, you could use NLU to extract the metadata, and then pass that to Conversation and in conjunction with your custom intents/entities/dialog have a more powerful conversation.

From the way I'm understanding the question, I pre-assume that you know that Watson conversation and Natural Language classifiers (NLC) are two different services provided by IBM Watson.
Watson conversation will basically help you build a chatbot or a bot (which has speech to text or vice-versa). This chatbot helps users in different ways. Let's say if a user asks a question to the chatbot, chatbot will answer accordingly (It depends on how you designed the dialogs/ or the responses) to the question asked.
Question 1: What's your name?
Answer 1: I'm Watson.
Instead, if the question was asked incorrectly.
Incorrect question : Wat is ur name?
Answer would still be: I'm Watson.
In order to build a chatbot using Watson conversation, you need to make sure that you have proper understanding of Intents, Entities, and most importantly Dialogs (Dialogs help you design the flow of the conversation). If you know these 3 parts then you are good to go with Watson conversation. There's no link between NLC and Watson conversation if you keep them isolated. *That being said, Watson conversation itself has an Natural language understanding where it could figure out User questions even if the questions are **incomplete, grammatically incorrect, mis-spelled words etc.*
In short, you need not bind anything (Natural language) to make the conversation start working. Just focus on those 3 (Intent, entities, & dialog) portions provided and you are good to go.

Related

Dialogflow CX - Add bulk entities and query them

I’m new to Dialogflow CX and after reading its node.js documentation (I’m a jr Dev) I’m still struggling to get the problem below solved.
PROBLEM: I need my chatbot to receive the question “do you have Toyota Corollas (cars!) in black with less than 20,000 miles, 2017 or newer and cheaper than $15,000 for sale?”
CONTEXT: I have a database with all car makes, models, years, versions, mileage, colors and prices available. The problem is that I can’t (and sorry for how silly this looks) even initiate the bot and I know that after initiating it I would need to create a zillion entities through code (can’t do it manually) so the bot would be able to read all car parameters of the user’s question. Then after reading those parameters (entities) the bot should query my database to check availability of those particular Corollas and then give a proper answer.
ASK: I would be very grateful if you could please help me initiate the Dialogflow CX bot, load all car makes, models, years, versions, colors and prices into it AS ENTITIES and then give the answer that the user needs.
I’ve checked the GitHub quickstarts and read the documentation multiple times but am still very confused.
It looks like you have a few different issues with some of the Dialogflow CX basics. Let's try to clear them up.
How do I initiate the Dialogflow CX bot?
It isn't clear what you mean, exactly, from this.
Dialogflow CX, itself, isn't a bot client. Instead, it provides integrations with various ways to communicate with your agent. This may include telephone integrations, web-based chat systems, and an API so you can integrate with other clients such as Slack.
Your Dialogflow CX agent, itself, is setup using Google's Cloud services, and can support one or more of these integrations.
How do I create a zillion entities through code?
It isn't clear why you need to create a zillion of them, nevermind through code itself.
You likely will want to create a custom entity type for the make/model combination. And it should probably have aliases, so that people could say "Ford Explorer" or just "Explorer" and have it resolve to the same type.
If you really wanted to use an API to do this, you could use EntityType.create to do so. That points to the REST documentation, but based on the language you want to use, there may be a library able to handle it.
Some of the other types, however, can be handled with system entity types such as #sys.color or a numeric type. There's no reason for you to create those.
But what happens if someone asks for a combination that isn't valid?
Then you'll need to tell them it isn't valid. Just like if someone was talking to you in person and asked for something that didn't make sense.
How will it check the database for a good response?
You'll need to make this database call as part of a webhook that you create to implement the business logic.

Dialogflow make the bot more human

I am new to the dialogflow, I want to know if there is any method that I can make my bot feels more human when the user interact with it?
Many thanks.
Here is a good resource from Google. It talks about the Cooperation principle which helps you design helpful and straightforward prompts and responses for your users. It focuses heavily on principles that are used within day to day human interactions so you will get a bot that will respond according to the rules of human conversations. It is also closely related to dialogflow as it used actions on google as a platform.
If you want to know more about creating more human conversations I recommend you to look into human linguistic, but that is a whole new thing to learn and out of scope for StackOverflow.

Is there a way in Google Assistant to ask for the available Training phrases?

I am learning about DialogFlow and its integration with Google Assistant but I think it's a bit hard to develop because the users don't know all the posible topics that the chatbot can talk about. I know that this is probably a bad design from my side but I assume that there should be a "help" command to offer suggestions of the available Training phrases that a user can invoke, right?
There is no automated help command to display all of the possible actions in the Dialogflow platform. However, it can be a good idea for you to build out some sort of 'Help' or 'What can you do' intent to give the user some sort of guidance.
Additionally, you can provide them with a few use cases in the Default Welcome Intent.
"Greetings. Do you want to (do X) or (do Y)?"
Visiting our voice design guidelines can provide you with additional advice on creating a good voice experience.
This is not a build-in feature for Google Assistant (or any other integration as far as I know). Having a clear roadmap of available features/intents is often a challenge when deciding your chatbot's design. Here are some tips that might help you in this:
Build a custom help intent
With a custom help intent you would be able to assist your users in any way you see fit, you explain to them what your action is or offer them some suggestions. Since it is a custom intent you can really do whatever you want. As you asked about sending available training you could use the Dialogflow API to show them which training phrases are available in your bot to give them an example.
Use suggestion chips
This is probably the easiest option, when you user asks for help you can give them a set of standard suggestions to guide your user back on track. Your users can click on them or say what is in them to continue to a different intent. (Users that talk to your action on device without a screen can't see these, so you have to design an alternative for those devices too)
Example phrases in action overview
When publishing an action, you get the option to add some example phrases to get the user informed about what you action is designed to do. These suggestions only show up on the action overview so they don't help your users while interacting with your action, but it is still nice to add to help new users get started quickly.

In dialogflow chatbot can I do with pre-populated question

I want chatbot like I open the chat window it's automatically multiple questions that have come to the window.possible with Dialogflow if yes then how it's possible.
A chatbot is meant to be interactive unless user started the chat conversation, you should not do that. Better make a conversational tree and make a user start a conversation and have questions.
I see a lot of question-related to dialog flow and google assistant when are building assistant, we need to think a conversational design paradigm instead of app paradigm, that we are used for a long time.
The Assistant is meant to be conversational for a user to deliver the right experience. Due to that, you will find a lot of things we can not do with google assistant explicitly like sending a notification. This is not a conversational design pattern.
So, make your assistant more conversational. In those, you will not come an across with such Delima.

What is the difference between rasa core and botkit framework in terms of flow of conversation?

I am learning bot development using rasa. I took simple banking system use-case in that. Below is short flow:
I want to apply for loan
Home loan Car Loan Personal Loan
**User comes again after some days**
Hey, you inquired about the loan previously, what is the status?
Bought from another bank
Which bank?
Axis Bank
What interest rate did you buy the loan at?
5%
Suppose user asked "I want to apply for a loan" so I can classify intent and extract entity and accordingly reply to the user.
But if the user said "Axis Bank", how should I keep track for which question he replied as "Axis Bank" and what will my next question or answer be?
I searched for "How to keep track of conversation state?"
I came across [https://github.com/RasaHQ/rasa_nlu/issues/303][1] this link
In that they mention
I don't think that should be part of RASA's goal IMO: NLU is by itself
a very large and complex topic to handle. But you can use a specific
framework for that like botkit.
But in rasa-core there is a slot option (Information to keep track of during a conversation (e.g. a users age))
In below link mention
Difference between Rasa core and Rasa nlu
Rasa core is used to guide the flow of conversation while Rasa nlu is
the understand and process the text to extract information (entities)
Could somebody help me understand the difference between rasa-core and botkit in terms of the flow of conversation?
RASA and botkit aren't the only options, you of course also have (to name but a few developer friendly options) IBM Watson, MS Bot Framework (or botbuilder as they call it now), of which v4 is being developed in Open Source.
What makes RASA Core stand out is it learns what to do next based on the intent and current state of the conversation. With the others, you are expected to script the flow (or you have to build a data structure that can hold the flow which others can populate).
Which way you would go depends on how much conversational data you already have and how complex your bot will be. For a simple bot, it would be quicker to use a scripted flow. It's when it gets big that your script bot will be difficult to scale.
This are a couple of good articles that I read when I was learning about RASA.
https://medium.com/rasa-blog/a-new-approach-to-conversational-software-2e64a5d05f2a
https://medium.com/#harjun1601/building-a-chatbot-with-botkit-and-rasa-a18aa4d69ebb

Resources