Language Understanding Intelligent Services

De Banane Atomic
Version datée du 15 octobre 2018 à 15:34 par Nicolas (discussion | contributions) (→‎Définir les intents)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

Liens

Description

Service qui permet de comprendre le langage naturel en déterminant l’intention d'une phrase et en ciblant les mots clés.

Vocabulaire

Intent représente l'intention que LUIS prête à une phrase
Utterance représente les phrase interprétées par LUIS, ainsi que les exemples de phrases fournis pour un intent donné.
Entity représente une variable dans une phrase. Par exemple city est une entity qui peut prendre la forme de n'importe quel nom de ville.

Design Model

Définir les intents

Améliorations

Review endpoint utterances

Liste les utterances dont le résultat d'affectation d'intent est faible.

Autre

Test LUIS

Endpoint + requête:

Ajouter un intent

  1. MyApp → Intents → Create new intent
  2. Ajouter des utterances (exemples de phrases)
  3. Définir où se trouve les Entities (mots correspondant à des variables: lieu, date) dans les Utterences
  4. Train
  5. Test
  6. Publish (récupérer le endpoint et la key)

Projet C# Luis

Dialogs\RootLuisDialog.cs
[Serializable]
public partial class RootLuisDialog : LuisDialog<object>
{
    private JObject _lastIntent = null;

    [LuisIntent("")]
    [LuisIntent(Intent_None)]
    public async Task None(IDialogContext context, LuisResult result)
    {
        _lastIntent = JObject.FromObject(result);
        IMessageActivity mess = context.MakeMessage();
        mess.Text = getExcuseMessage(result);
        await context.PostAsync(mess);
        context.Wait(MessageReceived);
    }

    [LuisIntent("MyIntent")]
    public Task MyIntent(IDialogContext context, LuisResult result)
    {
        _lastIntent = JObject.FromObject(result);
        context.Call(new MyIntentDialog(), resumeAfterChildDialog);
        return Task.CompletedTask;
    }

    private Task resumeAfterChildDialog(IDialogContext context, IAwaitable<IMessageActivity> result)
    {
        context.Wait(MessageReceived);
        return Task.CompletedTask;
    }
}
Dialogs\MyIntentDialog.cs
[Serializable]
public class MyIntentDialog : IDialog<IMessageActivity>
{
    private JObject _luisResult = null;
    private string _parameter = string.Empty;

    public MyIntentDialog(LuisResult result)
    {
        _luisResult = JObject.FromObject(result);
        _parameter = result.Entities.FirstOrDefault(e => e.Type == RootLuisDialog.Entity_Device)?.Entity;
    }

    public async Task StartAsync(IDialogContext context)
    {
        if (!string.IsNullOrWhiteSpace(_parameter))
        {
            await process(context);
        }
        else
        {
            await context.PostAsync("Please specify Device type");
            context.Wait(resumeAfterUserParamInput);
        }
    }

    private async Task Process(IDialogContext context)
    {
        IMessageActivity message = context.MakeMessage();
        message.Text = $"My message!";
        await context.PostAsync(message);
    }
}