MycroftAI / adapt

Adapt Intent Parser
Apache License 2.0
711 stars 155 forks source link

Overlap of entity literals across different domains #81

Closed kostaskat closed 3 years ago

kostaskat commented 6 years ago

Great project and OSS effort!

More of a feature relevance question on per se the adapt and how it relates to building skills.

If I get this right, in a system with multiple domains (skills in MyCroft terminology), especially dynamically combined at runtime (community skills), there is the likelihood of entity clashing between domains (especially bad if this is verb or keyword entities), potentially leading to wrong denotations.

Looking forward to community views on that and what are designated ways to counter such effects.

clusterfudge commented 6 years ago

This is a tricky one; it's both a rough edge and the intention to be able to handle this gracefully. We have an implementation of the IntentDeterminationEngine called [DomainIntentDeterminationEngine)[https://github.com/MycroftAI/adapt/blame/master/adapt/engine.py#L171], the goal of which is to allow for the type of vocabulary isolation you're describing. However, it take a lot of interesting interactions off the table.

For example:

U: Mycroft, play some music
M: <music plays>
U: Mycroft, what is playing?
M: Awesome, by The Awesome Band of Awesomes
U: Are they playing nearby any time soon?
M: The Awesome Band of Awesomes will be playing at the Big Theater next monday. Would you like me to purchase tickets?

To parse the third user utterance, mycroft is relying on entities from the music skill to populate a query to the events/ticketing skills. We're obviously a ways from supporting that type of interaction, but adapt was designed with the goal of supporting just that.

Intent modeling is our crutch at this point to solve problems in this area. They're edge-casey, and typically addressed in an ad-hoc manner. Say for example you want to support

Play <song>
and
Play <movie>

Your media collection has both a song and a movie named "The Awesomes", and you end up with an ambiguous statement. Here, we'd rely on additional context to solve the problem.

Ambient context might be "was I just browsing movies or listening to music? Stay within the current domain." Explicit context might include modeling context vocabulary into the intents, to allow for explicit correction.

U: No, I meant play music by the Awesomes
clusterfudge commented 3 years ago

Based on the :+1: , I'm going to close this as resolved. Cheers!