Вы можете определить «синонимы сущности» в 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'}