NLU Approach

Hello, I am trying to build an RASA assistant bot that classifies issues and is based on a set of products(intents) and issues relating to them. For example, three intents in the NLU can be Slack, Outlook, and Firefox; and under these three intents consists of examples of different issues that people have encountered with each product e.g for Slack it can be like “I haven’t been receiving messages on Slack and there seems to be connection issues” where the correct intent is Slack. This product list is going to keep on expanding, and there might be some overlap on examples, like someone might also say “I haven’t been able to log on into outlook as there seems to be connection issues”. What is the best way to set up my NLU so the model doesn’t confuse itself with these overlaps and generalization. Right now I have each product set up as an intent, with about 20 examples of issues people have experienced within each intent, it works pretty well just wondering if there may be a better more reliable approach.

Also, any ideas on how I can teach the model to ignore positive feedback? Like if someone says “Slack is an amazing app, and works great” it is not an issue so I don’t want it to classify as a Slack intent? Should I have a separate intent with just positive feedback? Thank for the help in advance.

I think the easiest way of doing all that would be to create a slot with mentioned possible values: Slack, Outlook, Firefox. Then, when this slot is mapped you could create some basic database with solutions to your problems (for specific environment).

Your NLU and config could then be built like (just a glitch):

# domain.yml
version: "2.0"
intents:
    - ask_whats_wrong

entities:
    - issue

slots:
    - environment:
        type: categorical
        values:
          - Outlook
          - Firefox
          - Slack
# nlu.yml

- intent: ask_whats_wrong
    examples: | 
        - I haven’t been able to log into Outlook as there seems to be [connection issues]{"entity" : "issue"}

Then you could access slot {"environment ": “Outlook” } and entity {“issue” : “connection issues”} in your action server and then decide what’s the response (based on what you define in your simple database, which could be even in a form of python dictionary).

As for second issue, just use a default_fallback. This will define action, that occurs when user input is not recognized, so… If user will give you a positive feedback (and it won’t be added in your bot logic and NLU data), then such an input will trigger a fallback (e.g. “I am just interested in resolving issues with Outlook, Slack, Firefox environments.”).

1 Like

Ah I see where you are going with this, I think this approach will definitely be more scalable. I will try it out now and let you know how well it performs! Thanks again