Hi all,
I don’t understand why synonyms don’t work.
In my domain.yml
file :
synonyms:
- synonym: parent_room
examples: |
- chambre parentale
- chambre des parents
- chambre principale
- chambre parental
- chambre parents
In my config.yaml
I’m using default value except for EntitySynonymMapper
(I did some tests..):
language: fr
pipeline:
# See https://rasa.com/docs/rasa/tuning-your-model for more information.
- name: WhitespaceTokenizer
- name: RegexFeaturizer
- name: LexicalSyntacticFeaturizer
- name: CountVectorsFeaturizer
- name: CountVectorsFeaturizer
analyzer: char_wb
min_ngram: 1
max_ngram: 4
- name: DIETClassifier
epochs: 100
constrain_similarities: true
- name: EntitySynonymMapper
case_sensitive: false
minimum_similarity: 0.8
- name: ResponseSelector
epochs: 100
constrain_similarities: true
- name: FallbackClassifier
threshold: 0.3
ambiguity_threshold: 0.1
# Configuration for Rasa Core.
# https://rasa.com/docs/rasa/core/policies/
policies: null
I created examples with all values of my synonyms:
- intent: get_room_temperature
examples: |
- "Donne moi la température de la [chambre parentale](room)"
- "Quelle est la température dans la [chambre des parents](room)?"
- "Quelle est la température dans la [chambre parentale](room)?"
- "Quelle est la température de la [chambre parentale](room)?"
Unfortunately, at the end here what I have for the following test:
Your input -> Quelle est la temperature de la chambre des parents?
Your input -> quelle est la temperature de la chambre parental?
Your input -> quelle est la temperature de la chambre parentale?
Your input -> quelle est la temperature de la chambre parent?
room from slot: chambre des parents
entities [{'entity': 'room', 'start': 32, 'end': 51, 'confidence_entity': 0.9993231296539307, 'value': 'chambre des parents', 'extractor': 'DIETClassifier', 'processors': ['EntitySynonymMapper']}]
room from slot: chambre parental
entities [{'entity': 'room', 'start': 32, 'end': 48, 'confidence_entity': 0.9994913339614868, 'value': 'chambre parental', 'extractor': 'DIETClassifier'}]
room from slot: chambre parentale
entities [{'entity': 'room', 'start': 32, 'end': 49, 'confidence_entity': 0.9996161460876465, 'value': 'chambre parentale', 'extractor': 'DIETClassifier', 'processors': ['EntitySynonymMapper']}]
room from slot: chambre parent
entities [{'entity': 'room', 'start': 32, 'end': 46, 'confidence_entity': 0.9961864352226257, 'value': 'chambre parent', 'extractor': 'DIETClassifier'}]
It’s like I have 3 different rooms.
I also defined a lookup
:
- lookup: room
examples: |
- chambre des parents
- chambre parental
- chambre parentale
- chambre parents
Does anyone have any ideas?
Rasa Version : 3.6.21
Minimum Compatible Version: 3.6.21
Rasa SDK Version : 3.6.2
Python Version : 3.10.16
Operating System : Linux-6.8.0-54-generic-x86_64-with-glibc2.39
In case you need my action code:
class ActionGetRoomTemperature(Action):
def name(self) -> str:
return "action_get_room_temperature"
def run(
self,
dispatcher: CollectingDispatcher,
tracker: Tracker,
_: Dict[Text, Any],
):
room = None
entities = tracker.latest_message.get("entities", [])
if entities:
room = tracker.get_slot("room")
print("room from slot:", room)
print("entities", entities)
I wanted to avoid creating a python function that normalizes the name… from what I understand, the synonyms are there for that..
Thanks for your help.