Explication du keyword matching et des sous scénarios par l’exemple

Nous allons étudier le comportement du keyword matching dans différents contextes, afin de comprendre comment Athena fonctionne.

Pattern avec keyword matching

Nous partirons d’une étude de cas simple: la demande d’information

? JE VEUX DES INFORMATIONS
    - Voulez-vous les recevoir par email ou par courrier?

Ici nous avons défini un pattern via la syntaxe ? JE VEUX DES INFORMATIONS avec comme mots clés: JE VEUX DES INFORMATIONS.

Afin d’accéder à ce scénario, la phrase de l’utilisateur doit contenir l’ensemble des mots clés, et suivre l’ordre défini:

  • exemples corrects
    • je veux des informations
    • je veux des informations s’il vous plait
    • je veux une ou des informations
  • exemples incorrects
    • informations (il manque je veux des)
    • puis-je avoir des informations (le keyword veux n’est pas présent)
    • des informations je veux (malgrès la présence des keyword, l’ordre n’est pas respecté)

Offrir plus de variabilités

Maintenant que nous avons des exemples qui ne marchent pas, nous pouvons fournir plus de variabilité afin d’y répondre

Nous allons dans un premier rajouter les possibilités dans d’autres pattern

? JE VEUX DES INFORMATIONS
? INFORMATIONS
? PUIS JE AVOIR DES INFORMATIONS
? DES INFORMATIONS JE VEUX
    - Voulez-vous les recevoir par email ou par courrier?

Nous pouvons aussi prendre les devants, et ne laisser que ce qui fait du sens dans le pattern:

? (VEUX|AIMERAIS|PEUX) (AVOIR) (DES) INFORMATIONS
    - Voulez-vous les recevoir par email ou par courrier?

Dans le cas ci-dessous:

  • (VEUX AIMERAIS PEUX) veut dire que nous générons trois combinaisons différentes
    • VEUX (AVOIR) (DES) INFORMATIONS
    • AIMERAIS (AVOIR) (DES) INFORMATIONS
    • PEUX (AVOIR) (DES) INFORMATIONS
  • (AVOIR) veut dire que ce keyword est optionnel
    • (VEUX AIMERAIS PEUX) AVOIR (DES) INFORMATIONS
    • (VEUX AIMERAIS PEUX) (DES) INFORMATIONS

Voici l’ensemble des patterns couverts par cette syntaxe:

? VEUX AVOIR DES INFORMATIONS
? AIMERAIS AVOIR DES INFORMATIONS
? PEUX AVOIR DES INFORMATIONS
? VEUX DES INFORMATIONS
? AIMERAIS DES INFORMATIONS
? PEUX DES INFORMATIONS
? VEUX AVOIR INFORMATIONS
? AIMERAIS AVOIR INFORMATIONS
? PEUX AVOIR INFORMATIONS
? VEUX INFORMATIONS
? AIMERAIS INFORMATIONS
? PEUX INFORMATIONS

Les conflits

Dans l’exemple précédent, on pourrait au final se demander: pourquoi ne pas juste laisser INFORMATIONS. Attention aux conflits: un conflit dans athena apparait dès le moment où deux scénarios différents obtienne le même score.

? (AVOIR) (DES) INFORMATIONS
    - Voulez-vous les recevoir par email ou par courrier?

? (ENVOYER) (DES) INFORMATIONS
    - Vous pouvez nous envoyer ces informations à cette adresse: depot@xyz.com

Dans les 2 scénarios ci-dessous, nous acceptons le fait qu’ils se déclenchent uniquement sur le keyword INFORMATIONS. Si l’utilisateur dit: donne moi des informations, Athena ne saura quel scénario choisir car les deux comportent DES INFORMATIONS dans leur pattern, et déclenchera de ce fait un default.

Les sous scénarios

Dans le point suivant, nous définissons 2 sous scénarios qui répondent à la question “Voulez-vous les recevoir par email ou par courrier?”

? (AVOIR) (DES) INFORMATIONS
    - Voulez-vous les recevoir par email ou par courrier?
        ? COURRIER
            - Ok, je vous envoi ça par courrier
        ? EMAIL
            - Ok, je vous envoi ça par email

Dans ce cas, il faut que la réponse de l’utilisateur à la question contienne soit COURRIER, soit EMAIL, si sa réponse contient les 2, alors nous déclenchons un default.

Si un pattern similaire est défini en tant que scénario, Athena privilégie toujours le sous scénarios en cours:

? (AVOIR) (DES) INFORMATIONS
    - Voulez-vous les recevoir par email ou par courrier?
        ? COURRIER
            - Ok, je vous envoi ça par courrier
        ? EMAIL
            - Ok, je vous envoi ça par email

? PAR COURRIER
    - courrier

Conversation:

Source text
user je veux des informations
bot Voulez-vous les recevoir par email ou par courrier?
user par courrier
bot Ok, je vous envoi ça par courrier

les sous scénarios et les labels

Le comportement évolue lorsque l’on utilise des labels dans les sous scénarios, et cela dépends des sous scénarios définis dans ces labels.

? JE VEUX DES INFORMATIONS
    - {ENVOI_INFORMATIONS}

[ENVOI_INFORMATIONS]
    - Voulez-vous les recevoir par email ou par courrier?
        ? COURRIER
            - Ok, je vous envoi ça par courrier
        ? EMAIL
            - Ok, je vous envoi ça par email

Nous venons de créer un label qui contient la question du mode d’envoi des informations. Tout fonctionne toujours correctement: athena a comme sous scénario celui du label [ENVOI_INFORMATIONS]

Si un label n’a pas de sous scénarios, alors Athena se basera sur les sous scénarios courant:

? JE VEUX DES INFORMATIONS
    - {ENVOI_INFORMATIONS}
        ? COURRIER
            - Ok, je vous envoi ça par courrier
        ? EMAIL
            - Ok, je vous envoi ça par email

[ENVOI_INFORMATIONS]
    - Voulez-vous les recevoir par email ou par courrier?

Ici le scénario demande d’information a un sous scénario, tandis que [ENVOI_INFORMATIONS] n’en a pas. Athena dans ce cas conserve les sous scénarios, le fonctionnement est toujours celui attendu.

Cependant, lorsque le scénario courant défini des sous scénarios, et que le label appelé lui aussi a des sous scénarios, Athena applique un comportement par défaut: retient uniquement les derniers sous scénarios:

? JE VEUX DES INFORMATIONS
    - {ENVOI_INFORMATIONS}
        ? COURRIER
            - Ok, je vous envoi ça par courrier

[ENVOI_INFORMATIONS]
    - Voulez-vous les recevoir par email ou par courrier?
        ? EMAIL
            - Ok, je vous envoi ça par email

? PAR COURRIER
    - courrier

Seul le sous scénario de [ENVOI_INFORMATIONS] est conservé:

Conversation:

Source text
user je veux des informations
bot Voulez-vous les recevoir par email ou par courrier?
user par courrier
bot courrier
user je veux des informations
bot Voulez-vous les recevoir par email ou par courrier?
user par email
bot Ok, je vous envoi ça par email

Pour combiner les deux, on peut utiliser une syntaxe sur le call label {+ENVOI_INFORMATIONS}

? JE VEUX DES INFORMATIONS
    - {+ENVOI_INFORMATIONS}
        ? COURRIER
            - Ok, je vous envoi ça par courrier

[ENVOI_INFORMATIONS]
    - Voulez-vous les recevoir par email ou par courrier?
        ? EMAIL
            - Ok, je vous envoi ça par email

? PAR COURRIER
    - courrier

Conversation:

Source text
user je veux des informations
bot Voulez-vous les recevoir par email ou par courrier?
user par courrier
bot Ok, je vous envoi ça par courrier
user je veux des informations
bot Voulez-vous les recevoir par email ou par courrier?
user par email
bot Ok, je vous envoi ça par email