Вы можете определить «синонимы сущности» в rasa. Синонимы сущностей могут быть полезны для:
- Когда вы используете это значение сущности в качестве входных данных для Action, чтобы упростить логику.
- Может использоваться для обработки распространенных опечаток или сокращений.
У меня есть следующие записи в nlu.md
## intent:inform - about [wick system](system_type) - maybe [ebb-flow](system_type) - about [drip system](system_type) - for [nft](system_type) - about [dwc](system_type) - maybe about [aeroponics](system_type)
Чтобы синонимы работали, обязательно добавьте компонент ner_synonyms в конвейер
pipeline: - name: "ner_synonyms"
Затем я определил синонимы своему файлу nlu
## synonyms:dwc - water culture - deep water culture
Но тогда результат быстрого теста не смог извлечь сущность :(
interpreter.parse("about water culture") {'entities': [], 'intent': {'confidence': 0.9634383916854858, 'name': 'inform'}, 'intent_ranking': [{'confidence': 0.9634383916854858, 'name': 'inform'}, {'confidence': 0.051036491990089417, 'name': 'goodbye'}, {'confidence': 0.02345651388168335, 'name': 'affirm'}, {'confidence': 0.0, 'name': 'thanks'}, {'confidence': 0.0, 'name': 'greet'}, {'confidence': 0.0, 'name': 'deny'}], 'text': 'about water culture'}
Сущности должны быть правильно классифицированы, прежде чем их можно будет заменить значением синонима
Пример формата Markdown в документе - метод 1 работает, но не метод 2, потому что розовая свинья не классифицируется как сущность, поскольку не существует в примере высказывания. Так что в моем случае подойдет добавление водной культуры и т. Д. В пример намерения. Это верно для rasa_nlu версии 0.13.7. Возможно, в будущей версии процесс обучения rasa nlu сможет сначала читать синонимы и генерировать данные для кормления экстрактора.
## intent:check_balance - what is my balance <!-- no entity --> - how much do I have on my [savings](source_account) <!-- entity "source_account" has value "savings" --> - how much do I have on my [savings account](source_account:savings) <!-- synonyms, method 1--> - Could I pay in [yen](currency)? <!-- entity matched by lookup table --> ## intent:greet - hey - hello ## synonym:savings <!-- synonyms, method 2 --> - pink pig ## regex:zipcode - [0-9]{5} ## lookup:currencies <!-- lookup table list --> - Yen - USD - Euro
Таким образом, чтобы синонимы работали: (a) добавьте ner_synonyms в конфигурацию конвейера nlp (b) добавьте синонимы в примерах высказываний, таких как «метод 1» в приведенном выше примере. Итак, теперь мой файл nlu на гидропонном боте выглядит так:
## intent:inform - about [wick system](system_type) - maybe [ebb-flow](system_type) - about [drip system](system_type) - for [nft](system_type) - about [dwc](system_type) - for [water culture](system_type:dwc) - [deep water culture](system_type:dwc) - maybe about [aeroponics](system_type)
и смог выделить «глубоководную культуру» как единое целое и сопоставить его с dwc!
interpreter.parse("about deep water culture") {'entities': [{'confidence': 0.940375091763872, 'end': 24, 'entity': 'system_type', 'extractor': 'ner_crf', 'processors': ['ner_synonyms'], 'start': 6, 'value': 'dwc'}], 'intent': {'confidence': 0.9467921257019043, 'name': 'inform'}, 'intent_ranking': [{'confidence': 0.9467921257019043, 'name': 'inform'}, {'confidence': 0.1796211302280426, 'name': 'goodbye'}, {'confidence': 0.11012095957994461, 'name': 'greet'}, {'confidence': 0.012595348060131073, 'name': 'deny'}, {'confidence': 0.0, 'name': 'thanks'}, {'confidence': 0.0, 'name': 'affirm'}], 'text': 'about deep water culture'}