30

私は Alexa Skills Kit (Amazon Echo 用) をいじっていて、インテントを AWS Lambda 関数に送信するスキルを作成したいと考えています。AWS Lambda 関数は何かをメールで返します。

サンプル発話は次のようになります。

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

これにより、「Alexa、秘書にメモを取るように頼んで、今日の帰りに店に行くようにリマインドして」などと言うことができ、Lambda 関数から「に行くことをリマインドして」というメールを受け取ることができます。今日の帰りのお店です。」

スロットは自由形式です。myMemoこの時点では 1 文か 2 文で十分ですが、このようなスキーマの記述方法に関するドキュメントにはあまり助けがありません。現時点での私の最善の推測は次のように失敗します。

エラー: リクエストに問題がありました: 不明なスロット名 '{myMemo}'。1行目のサンプル「MemoIntent take a memo {myMemo}」で発生。

私は AMAZON.LITERAL スロット タイプを使用していますが、これはドキュメントでは推奨されていませんが、これについて他に方法を提案するものもありません。その上、私が言ったように、それは失敗します。

失敗するスキーマは次のとおりです。

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

5 に答える 5

23

リテラルは、公式ドキュメント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
于 2015-12-04T00:29:37.167 に答える
5

私たちは現在、さまざまな質問に答えることができる AI (Alexa 用) を開発しています。バックエンドで分析される複雑な質問をユーザーが表現できることが非常に重要です。発話とスロットの種類が限られているために、Alexa が早い段階でそれらを削除した場合、そのようなサービスを提供することはできません。

現時点では、次のアプローチを試しています。(私たちの実験はドイツ語に基づいていることに注意してください。他の言語では動作が異なる場合があります。)

1. Word クラスごとのカスタム スロット タイプ

次の単語クラスのカスタム スロット タイプを定義しました。

  • 尋問(何を、誰が、いつ)
  • 項目 (サイバーセキュリティ、ダークネット、マルウェア)
  • 動詞(ある、持っている、できる)
  • 形容詞(人気、安価、不安定)
  • 代名詞(その、彼、彼女)

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 分析

次に、バックエンドで送信された単語の 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}?

スロット タイプの広範なリストを試していました。しかし、これは何かを聞き間違えるリスクを高めます (英語の良い例はwriterightです。幸運なことに、これらは同じ単語クラスに割り当てられていません)。そこで、非常に狭いアプローチに切り替えました。リストには、AI が処理できる単語のみが含まれ、ナレッジ ベースに格納されます。たとえば、アイテムのリストにはponyunicornという単語は含まれていません。これにより、より良い結果が得られることを期待しています (混乱の少ない回答)。

発話構造で定義されていない複雑な文は、操作が非常に混乱します。たとえば、文に 2 つ以上の動詞が含まれている場合 (時制を構築するために必要な場合があります)。しかし、これまでのところ、ユーザーがある程度の礼儀正しさを持って行動している限り、私たちのアプローチは良好なレベルの精度で結果をもたらします。

しかし最後に: 残念ながら、現時点では、無限の異なる単語や文構造を持つメモのようなものを口述することはできません。

于 2017-08-24T09:14:00.263 に答える