Как обрабатывать знаки препинания и символы в расе?

Rasa version - 1.3.7

pipeline: “supervised_embeddings”

Я обучил бота без знаков препинания в намерениях.

намерение: ask_holiday_in_a_year

How many holidays do we have in a year?

Если я задам вопрос боту ниже

  1. Сколько у нас праздников в году? - (NLU может правильно распознать).
  2. Сколько ()? Праздники !!, делаем! @ # У нас есть $% ^ в% ^ & году. - (NLU может правильно распознать.)
  3. Сколько ##################### праздников у нас в году? (NLU не может правильно распознать. )
  4. Сколько ####### праздников %% ^ & * $$% у нас в году? (NLU не может правильно распознать это.)

Для случаев 1 и 2 это сработало, но для случаев 3 и 4 не сработало? Есть ли способ (добавив некоторые настройки в конвейер), чтобы я мог обработать эти символы и знаки препинания и дать ожидаемый результат?


person piyush    schedule 08.10.2019    source источник


Ответы (3)


Я не уверен, что это правильный подход. но вы можете попробовать создать случайные данные с помощью такого инструмента, как Chatito, добавляя символы в данные о вашем поезде. опять же, я не уверен, правильно это или нет

person Rajitha Fernando    schedule 16.10.2019

Прежде всего, rasa распознает примеры, основанные на том, что вы ему даете. Если у вас есть примеры, как у вас 3 и 4 предложения rasa, это узнает. Если вы думаете нестандартно, таких проблем может быть несколько, и раса никак не может распознать, что это такое, и так далее. Итак, вы хотите привести примеры, которые в некоторой степени связаны с вероятными вопросами, которые могут быть заданы от бота.

person V. Dhananjaya    schedule 23.10.2019
comment
Существует множество способов добавления знаков препинания и их обучения в предложении, и обучение этих данных также повлияет на существующее обучение. Мне нужно было что-то, через что нежелательное или ошибочно введенное ключевое слово можно было игнорировать при отправке в NLU. - person piyush; 18.11.2019

Это можно сделать с помощью специального компонента nlu.

В третьем параметре функции maketrans добавьте символы, которые вы хотите удалить. Этот настраиваемый конвейер удалит все определенные ключевые слова и отправит отфильтрованный текст в nlu.

from rasa.nlu.components import Component
import typing
from typing import Any, Optional, Text, Dict

if typing.TYPE_CHECKING:
    from rasa.nlu.model import Metadata


    class DeleteSymbols(Component):

        provides = ["text"]
        #requires = []
        defaults = {}
        language_list = None

        def __init__(self, component_config=None):
            super(DeleteSymbols, self).__init__(component_config)

        def train(self, training_data, cfg, **kwargs):
            pass

        def process(self, message, **kwargs):
            mt =  message.text
            message.text = mt.translate(mt.maketrans('', '', '$%&(){}^'))

        def persist(self, file_name: Text, model_dir: Text) -> Optional[Dict[Text, Any]]:
            pass

        @classmethod
        def load(
            cls,
            meta: Dict[Text, Any],
            model_dir: Optional[Text] = None,
            model_metadata: Optional["Metadata"] = None,
            cached_component: Optional["Component"] = None,
            **kwargs: Any
        ) -> "Component":
            """Load this component from file."""

            if cached_component:
                return cached_component
            else:
                return cls(meta)

Добавьте конвейер в config.yml

# Configuration for Rasa NLU.
# https://rasa.com/docs/rasa/nlu/components/
language: en
pipeline:
- name: "Pipelines.TextParsing.TextParsingPipeline"
- name: "WhitespaceTokenizer"
- name: "RegexFeaturizer"
- name: "CRFEntityExtractor"
- name: "EntitySynonymMapper"
- name: "CountVectorsFeaturizer"
- name: "EmbeddingIntentClassifier"

Источник - https://forum.rasa.com/t/how-to-handle-punctuation-and-symbol-in-rasa/19454

person piyush    schedule 18.11.2019