I want to be able to parse multi-intent utterances that fill slots in different forms. So if, e.g. a user is describing the game of soccer to me and I have a form for describing all of the attributes of the goalie position, and one for describing the attributes of the forward position, I can elicit each of these attributes following some form logic.
However if a user describes something about the goalie (e.g. can_use_hands intent), and in the same utterance says that this is to block the goal from the forward, whose job is to score goals, I want to know that once I enter the forward form, I do not need to elicit the âscores_goalsâ attribute slot.
I believe that I can fill multiple slots of the same form in one turn. However, putting all of these slots in one form makes the elicitation pattern very difficult.
Generally I would implement this by considering all forms, and potentially weighing the active form more highly in the mapping between NLU and the form (or semantic frame). However, the hard constraint that only the active form can be considered seems to limit this possibility.
thanks Adam, Iâm still struggling a bit to picture this conversation, but Iâm keen to brainstorm a solution. Can you maybe give an example conversation of what youâd like to achieve?
Thanks for the fast response. Sure, here is a dumb example I can make quickly.
Agent: âCan you tell me about the soccer positions?â
User: âSure, what do you want to know?â
A: âWho is the person that stands in front of the goal?â[start goalie form; eliciting goalie_postiion_name]
U: âThat is the keeper, they can block the ball with their hands when an opposing forward shoots it.â[goalie_position_name=âkeeperâ; goalie_description=âblock the ball with their handsâ; goalie_can_use_hands=True; forward_position_name=âforwardâ]
A: âThanks! So the keeper, who stands in front of the goal, can block the ball with their hands?â[submit_goalie_form]
U: âRight.â
A: âCan you tell me bout the the forward?â [eliciting forward_description because forward_position_name is already filled]
Iâd like to have a sequence of eliciting these 2 forms (goalie and forward) separately. However, I want to detect when a slot of one form is already filled, in a turn where a different form was active, so that I donât need to use a turn to elicit a slot that should have already been filled. I also want to know which one of the forms is most pragmatically relevant (e.g. active), without constraining myself from filling a slot in another form.
hi @Adamits - sorry I lost track of this thread. This is a doozy, did you come up with a workaround? My best guess would be to merge all of this into a single form, and achieve the branching you want by overriding the required_slots method