hey team,
I am currently exploring the slot filling capabilities to create a shopping bot assistance. Currently I have a very simple bot where I can get all the required slots filled by asking questions upon questions. However, my bot still cannot extract multiples entities from a single user utterance.
For example:
is there a nice [dress](item) below [$50](price) for [female](gender)?
ideally, three entities are extracted from the msg above - dress, $50 and female. Yet, I haven’t figure it out how. I’ve seen the examples provided in Github, but it is still unclear to me.
The following is my stories.md
## happy path
* greet
- utter_greet
* request_item
- shopping_form
- form{"name": "shopping_form"}
- form{"name": null}
- utter_slots_values
* thankyou
- utter_noworries
actions.py
class ShoppingForm(FormAction):
def name(self) -> Text:
return "shopping_form"
@staticmethod
def required_slots(tracker: Tracker) -> List[Text]:
return ["item", "size", "price", "brand", "color", "gender"]
def slot_mappings(self) -> Dict[Text, Union[Dict, List[Dict]]]:
"""A dictionary to map required slots to
- an extracted entity
- intent: value pairs
- a whole message
or a list of them, where a first match will be picked"""
return{
"item": self.from_entity(entity='item', not_intent="chitchat"),
"price": [
self.from_entity(entity="price", intent=["inform"]),
self.from_intent(intent="deny", value=False),
],
"size": [
self.from_entity(entity="size", intent=["inform", "request_item"]),
self.from_entity(entity="number"),
],
"gender": [
self.from_entity(entity="gender", intent=["inform", "request_item"]),
self.from_text(),
],
"brand": [
self.from_entity(entity="brand", intent=["inform", "request_item"]),
self.from_intent(intent="deny", value=False),
],
"color": [
self.from_entity(entity="color", intent=["inform", "request_item"]),
self.from_intent(intent="deny", value=False),
],
}
not sure if this question has been asked before, there are something similar but somehow I still couldn’t figure how to fix this. Could anyone give me some pointers?
Thanks