Подтвердить что ты не робот

Как определить тип пользовательского слота, который не является списком?

Я играю с Alexa Skills Kit (для Amazon Echo) и хочу создать навык, который отправит намерение функции AWS Lambda, которая просто отправит мне что-то обратно.

Примеры результатов будут примерно такими:

MemoIntent take a memo {myMemo}
MemoIntent to take a memo {myMemo}
MemoIntent send a memo {myMemo}

Это позволило бы мне сказать что-то вроде "Alexa, попросите моего секретаря взять памятку, напомнить мне, чтобы я пошел в магазин по дороге домой сегодня", а затем получит электронное письмо от моей функции лямбда, говоря: "Напомните мне сегодня идти в магазин по дороге домой".

Слот myMemo представляет собой произвольную форму - на данный момент это будет только предложение или два, но я не нахожу много помощи в документации о том, как написать схему для чего-то вроде этого. Мое лучшее предположение в настоящий момент терпит неудачу с:

Ошибка: возникла проблема с вашим запросом: неизвестное имя слота '{MyMemo}'. В образце "MemoIntent" введите заметку {myMemo} ' строка 1.

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

Ниже приведена схема:

{
    "intents": [
        {
            "intent": "MemoIntent",
            "slots": [
                {
                    "name": "myMemo",
                    "type": "AMAZON.LITERAL"
                }
            ]
        }
    ]
}
4b9b3361

Ответ 1

Литералы отличаются от других типов слотов тем, что вы должны обеспечить обучение в выборочном произношении, как указано в официальной документации: https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/alexa-skills-kit-interaction-model-reference

Синтаксис выборки слов

Примеры высказываний отображают фразы, которые пользователь может говорить с определениями, которые вы определили. Они записываются как строки в текстовом файле, используя следующий формат:

IntentName  this is a sample utterance with no slots
IntentName  this is a sample utterance containing a {SlotName}
IntentName  this is a sample utterance containing a {SlotName} and {AnotherSlotName}

Обратите внимание, что указанный формат применяется ко всем типам слотов, кроме AMAZON.LITERAL. Для AMAZON.LITERAL вам также необходимо указать значение слота для выборки:

IntentName  this is a sample utterance containing a {slot value|SlotName} using LITERAL

В качестве альтернативы, использование пользовательских слотов позволит вам предоставить слот после определения множества выборок пользовательских значений слотов. В этом случае вы создадите новый пользовательский слот myMemo с типом имени пользовательского слота, например MY_MEMO. Ваше пользовательское значение слота будет заполнено потенциальными значениями (это не единственные значения, которые он получит), например:

walk the dog
eat more bacon
go to the store on the way home

Ответ 2

В настоящее время мы разрабатываем ИИ (для Алекса), который должен отвечать на самые разные вопросы. Очень важно, чтобы пользователи могли формулировать сложные вопросы, которые должны анализироваться в бэкэнд. Если Алекса рано их катит из-за ограниченных высказываний и типов слотов, мы не можем предоставить такую ​​услугу.

В настоящий момент мы экспериментируем со следующим подходом. (Имейте в виду, что наш эксперимент основан на немецком языке. Другие языки могут вести себя по-другому.)

1. Пользовательские типы слотов для класса слов

Мы определили пользовательские типы слотов для следующих классов слов:

  • опрос (что, кто, когда)
  • (кибербезопасность, темная сеть, вредоносное ПО)
  • глагол (есть, имеет, может)
  • прилагательное (популярное, недорогое, небезопасное)
  • местоимение (он, она, она)

2. Примеры высказываний для структуры предложений

Затем мы определили возможные структуры для предложений с выборочными высказываниями:

QuestionIntent {Interrogation}
QuestionIntent {Item}
QuestionIntent {Verb}
QuestionIntent {Adjective}
QuestionIntent {Interrogation} {Verb} {Item}
QuestionIntent {Interrogation} {Verb} {Item} {Adjective}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Item}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Pronoun} {Item}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Item} {Preposition} {Item}
QuestionIntent {Interrogation} {Verb} {Adjective} {Item}
QuestionIntent {Interrogation} {Verb} {Pronoun} {Adjective} {Item}
QuestionIntent {Interrogation} {Item} {Verb}
QuestionIntent {Interrogation} {Item} {Verb} {Adjective}
QuestionIntent {Interrogation} {Item} {Verb} {Pronoun} {Adjective}
QuestionIntent {Item} {Verb} {Interrogation}
QuestionIntent {Verb} {Item} {Verb}
QuestionIntent {Verb} {Adjective} {Item} {Verb}

3. Анализ НЛП в бэкэнд

Затем мы выполняем NLP-анализ представленных слов в бэкэнд. Полученные данные выглядят следующим образом:

"intent": {
      "name": "QuestionIntent",
      "slots": {
        "Item": {
          "name": "Item",
          "value": "darknet"
        },
        "Preposition": {
          "name": "Preposition"
        },
        "Adjective": {
          "name": "Adjective"
        },
        "Verb": {
          "name": "Verb",
          "value": "is"
        },
        "Interrogation": {
          "name": "Interrogation",
          "value": "what"
        },
        "Pronoun": {
          "name": "Pronoun",
          "value": "the"
        }
      }
    }

Некоторые слова могут быть потеряны, другие могут ошибаться. В этом случае мы запоминаем темы с более ранних обменов и "заполняем" недостающие слова этими. Например: What is {it}?What is {Darknet}?

Мы экспериментировали с широким списком списков для типов слотов. Но это увеличивает риск неправильного восприятия чего-то (хороший пример на английском - это запись и право, к счастью, они не привязаны к одному классу слов). Поэтому мы переключились на очень узкий подход. Списки содержат только слова, которые могут обрабатываться ИИ и хранятся в базе знаний. Например, список предметов не содержит слов пони или единорога. Мы ожидаем, что это принесет лучшие результаты (менее путаные ответы).

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

Но в конце концов: К сожалению, на данный момент невозможно прописать что-то вроде памятки с бесконечным количеством разных слов и структур предложений.

Ответ 3

Я попробовал другой подход к этому.

Я создал Custom Slot Type со списком таких значений.

wordOne
wordOne wordTwo
wordOne wordTwo wordThree
wordOne wordTwo wordThree wordFour
wordOne wordTwo wordThree wordFour wordFive

Вы можете продолжить список с длинными строками, которые вам нужны.

Моя догадка заключалась в том, что Alexa, пытаясь заполнить слоты, ориентируется на количество разделенных пробелами слов в значении типа слота, чтобы соответствовать тому, что он слышал.

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

Но если вы разделите свои намерения, это может сработать. Может быть, что-то вроде этого.

StartMemoIntent take a memo
StartMemoIntent to take a memo
StartMemoIntent send a memo
StartMemoIntent record a memo
StartMemoIntent listen to my memo
RecordMemoIntent {memo}

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

Если вы поставили достаточно выборочных высказываний, по крайней мере 7-8, с помощью StartMemoIntent, у него не должно возникнуть проблемы с правильным выбором.