3

This could be a simple one that I haven't been able to find but I'm trying to exclude a single value ("girlfriend") from being picked up as an entity in a chatbot I'm building. The entity list is currently "dog, cat, pet, mum, horse" with relevant synonyms for each of those entities as well.

Watson keeps picking up "girlfriend" and matching it as an entity despite it not being in there which is stuffing up the logic in the conversation.

Is there a way to stop Watson identifying similar words in an entity list beyond what is in the list? I have tried turning off fuzzy matching but that just misses spelling mistakes.

Please note this is not an intent training issue, it is specifically asking about entity identification.

Any help appreciated.

-T-

Trav
  • 31
  • 2

4 Answers4

1

Your question is not entirely clear, but likely you want to take a look at how to improve a skill. Because Watson Assistant is built on AI technology, a key part is about learning.

You can "teach" Watson Assistant by going back to conversations and correct wrong matches with the right ones. Watson Assistant is going to pick this up and then retrain the dialog. This should result in excluding "girlfriend".

data_henrik
  • 16,724
  • 2
  • 28
  • 49
  • I've developed 100s of NLP solutions across a career of 30 years but this is my first time on Watson so I figure I'm missing a simple (not as simple as you're suggesting - retraining) thing. It's not the intent recognition it's getting wrong, it's the addition of a word not in an entity list that it is tagging as that entity. The word isn't in the entiry list, I don't want it to be in the entity list, how do I exclude it from the entity list? Retraining it is not possible as it is an entity, not an intent. – Trav Jan 17 '20 at 00:37
  • Could you add details to your question? Or join this Slack community for discussion with Watson developers: http://wdc-slack-inviter.mybluemix.net/ – data_henrik Jan 17 '20 at 07:22
1

I had a similar problem. My bot kept picking its own name as a username and I wanted it to ignore its own name even if the user typed it (e.g. Hello Robot, I am Jill) I wanted it to respond to 'Jill' and not 'Robot' but it kept missing it. I later realized the context variables I created had similar values to user names. So what I did was create a variable @bot-name and gave it only 1 value (Robot), no synonyms, no fuzzy match, no annotations. Then tried it again and the Bot recognized its own name, ignored that and picked the second name correctly as the user name. So when I repeated the sentence 'Hello Robot, I am Jill' it recognized @entity:bot-name and @entity:user-name and then responded only to the username. You can try something similar.

imodoye94
  • 11
  • 2
0

Its not clear how you created your entity list. If its was via contextual entities then Watson may be taking "girlfriend" as being in the same "family" as the other entities and adding to the entity list. If the entity list was hard coded, along with the synonyms, then I would guess that one of your synonyms shares some of the spelling of girlfriend, girl or friend. Which via fuzzy logic would match an entity, but with a lower confidence level. To fix you could create a new entity list and have a condition that looks to match entity list one, but not entity list two (girlfriend).
Or you could set your condition on the entity list and entity confidence level > 0.8 - but you may then miss some spelling mistakes. (Select a confidence level thats just above that reported for girlfriend).

timd
  • 376
  • 1
  • 8
0

I can't say if this is a solution, However I'd prefer to call it a workaround as it worked for me in my case.

Non-Contextual Case:

  • Create a new entity and add girlfriend as a value. Thus it would never interfere with your current entity in a dialog flow.

Contextual Case:

  • Train an intent with examples which includes girlfriend and annotate it with new entity.
Nim J
  • 993
  • 2
  • 9
  • 15