Snabbstart: Language Understanding (LUIS) klientbibliotek och REST API
Anteckning
En nyare version av Language Understanding är nu tillgänglig som en del av Azure Cognitive Service for Language. Mer information finns i Azure Cognitive Service för språkdokumentation. För språkförståelsefunktioner i Language Service, se Conversational Language Understanding, Custom Igenkänning av namngiven entitetoch Custom Classification.
Skapa och fråga en Azure LUIS AI-app (artificiell intelligens) med LUIS SDK-klientbiblioteken med den här snabbstarten med C#, Python eller JavaScript. Du kan också använda cURL för att skicka begäranden med hjälp av REST API.
Language Understanding (LUIS) gör att du kan tillämpa bearbetning av naturligt språk (NLP) på en användares konversations- och naturliga språktext för att förutsäga den övergripande innebörden och hämta relevant, detaljerad information.
- Med redigeringsklientbiblioteket och REST API kan du skapa, redigera, träna och publicera LUIS-appen.
- Med klientbiblioteket för förutsägelsekörning och REST API du köra frågor mot den publicerade appen.
Använd Language Understanding (LUIS) för .NET för att:
- Skapa en app
- Lägga till en avsikt, en maskininlärd entitet, med ett exempelyttrande
- Träna och publicera app
- CLR för frågeförutsägelse
Referensdokumentation | Källkod för redigerings- och förutsägelsebiblioteket | Redigerings- och förutsägelse-NuGet-| C#-exempel
Förutsättningar
- Den aktuella versionen av .NET Core och .NET Core CLI.
- Azure-prenumeration – Skapa en kostnadsfritt
- När du har din Azure-prenumeration skapar du en Language Understanding redigeringsresurs i Azure Portal för att hämta din nyckel och slutpunkt. Vänta tills den har distribuerats och klicka på knappen Gå till resurs.
- Du behöver nyckeln och slutpunkten från den resurs som du skapar för att ansluta programmet till Language Understanding redigering. Du klistrar in din nyckel och slutpunkt i koden nedan senare i snabbstarten. Du kan använda den kostnadsfria prisnivån (
F0) för att prova tjänsten.
- Du behöver nyckeln och slutpunkten från den resurs som du skapar för att ansluta programmet till Language Understanding redigering. Du klistrar in din nyckel och slutpunkt i koden nedan senare i snabbstarten. Du kan använda den kostnadsfria prisnivån (
Inrätta
Skapa ett nytt C#-program
Skapa ett nytt .NET Core-program i önskad redigerare eller IDE.
I ett konsolfönster (till exempel cmd, PowerShell eller Bash) använder du dotnet-kommandot för att skapa en ny
newkonsolapp med namnetlanguage-understanding-quickstart. Det här kommandot skapar ett enkelt "Hello World" C#-projekt med en enda källfil:Program.cs.dotnet new console -n language-understanding-quickstartÄndra katalogen till den nyligen skapade appmappen.
cd language-understanding-quickstartDu kan skapa programmet med:
dotnet buildBuild-utdata får inte innehålla några varningar eller fel.
... Build succeeded. 0 Warning(s) 0 Error(s) ...
Installera NuGet-biblioteken
I programkatalogen installerar du Language Understanding (LUIS)-klientbiblioteken för .NET med följande kommandon:
dotnet add package Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring --version 3.2.0-preview.3
dotnet add package Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime --version 3.1.0-preview.1
Redigera objektmodell
Luis Language Understanding klienten (LUIS) är ett LUISAuthoringClient-objekt som autentiserar till Azure, som innehåller din redigeringsnyckel.
Kodexempel för redigering
När klienten har skapats använder du den här klienten för att få åtkomst till funktioner som:
- Appar – skapa, ta bort, publicera
- Exempelyttranden – lägga till, ta bort efter ID
- Funktioner – hantera fraslistor
- Modell – hantera avsikter och entiteter
- Mönster – hantera mönster
- Träna – träna appen och avsök efter träningsstatus
- Versioner – hantera med kloning, export och borttagning
Förutsägelseobjektmodell
Luis Language Understanding klienten för förutsägelsekörning (LUIS) är ett LUISRuntimeClient-objekt som autentiserar till Azure, som innehåller din resursnyckel.
Kodexempel för förutsägelsekörning
När klienten har skapats använder du den här klienten för att få åtkomst till funktioner som:
- Förutsägelse efter mellanlagrings- eller produktionsplats
- Förutsägelse efter version
Kodexempel
Dessa kodfragment visar hur du gör följande med klient biblioteket Language Understanding (LUIS) för python:
- Skapa en app
- Lägga till avsikt
- Lägg till entiteter
- Lägga till exempelyttranden
- Träna appen
- Publicera appen
- Förutsägelse per plats
Lägga till beroenden
Från projektkatalogen öppnar du filen Program.cs i önskad redigerare eller IDE. Ersätt den befintliga using koden med följande using direktiv:
using System;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring.Models;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime;
using Microsoft.Azure.CognitiveServices.Language.LUIS.Runtime.Models;
using Newtonsoft.Json;
Lägga till exempelkod
Ändra signaturen för metoden
Mainså att asynkrona anrop tillåts:public static async Task Main()Lägg till resten av koden i metoden
Maini klassen om inget annatProgramanges.
Skapa variabler för appen
Skapa två uppsättningar variabler: den första uppsättningen du ändrar, den andra uppsättningen lämnar den som de visas i kodexe exemplet.
Skapa variabler för redigeringsnyckeln och resursnamnen.
var key = "PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE"; var authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE"; var predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";Skapa variabler som ska innehålla dina slutpunkter, appnamn, version och avsiktsnamn.
var appName = "Contoso Pizza Company"; var versionId = "0.1"; var intentName = "OrderPizzaIntent";
Autentisera klienten
Skapa ett ApiKeyServiceClientCredentials-objekt med din nyckel och använd det med slutpunkten för att skapa ett LUISAuthoringClient-objekt.
var credentials = new Microsoft.Azure.CognitiveServices.Language.LUIS.Authoring.ApiKeyServiceClientCredentials(key);
var client = new LUISAuthoringClient(credentials) { Endpoint = authoringEndpoint };
Skapa en LUIS-app
En LUIS-app innehåller NLP-modellen (Natural Language Processing), inklusive avsikter, entiteter och exempelyttranden.
Skapa ett ProgramSkapaObjekt. Namn- och språkkulturen är obligatoriska egenskaper. Anropa metoden Apps.AddAsync. Svaret är app-ID:t.
var newApp = new ApplicationCreateObject
{
Culture = "en-us",
Name = appName,
InitialVersionId = versionId
};
var appId = await client.Apps.AddAsync(newApp);
Skapa avsikt för appen
Det primära objektet i en LUIS-appmodell är avsikten. Avsikten överensstämmer med en gruppering av avsikter för användaryttrande. En användare kan ställa en fråga eller göra en instruktion som söker efter ett visst avsett svar från en robot (eller ett annat klientprogram). Exempel på avsikter är att boka en flygresa, fråga om vädret i en destinationsstad och fråga om kontaktinformation för kundtjänsten.
Skapa ett ModelCreateObject med namnet på den unika avsikten och skicka sedan app-ID, versions-ID och ModelCreateObject till metoden Model.AddIntentAsync. Svaret är avsikts-ID:t.
Värdet intentName är hårdkodat till OrderPizzaIntent som en del av variablerna i avsnittet Skapa variabler för appen.
await client.Model.AddIntentAsync(appId, versionId, new ModelCreateObject()
{
Name = intentName
});
Skapa entiteter för appen
Även om entiteter inte krävs finns de i de flesta appar. Entiteten extraherar information från användaryttrande, vilket krävs för att fullständigt kunna infiltrera användarens avsikt. Det finns flera typer av fördefinierade och anpassade entiteter, var och en med egna modeller för datatransformeringsobjekt (DTO). Vanliga fördefinierade entiteter som ska läggas till i din app är nummer, datetimeV2, geographyV2, ordningstal.
Det är viktigt att känna till att entiteter inte har markerats med en avsikt. De kan och gäller vanligtvis för många avsikter. Endast exempelanvändaryttrandena markeras för en specifik, enskild avsikt.
Skapandemetoder för entiteter är en del av modellklassen. Varje entitetstyp har en egen modell för datatransformeringsobjekt (DTO), som vanligtvis innehåller model ordet i namnområdet Modeller.
Koden för att skapa entitet skapar en maskininlärningsentitet med underentiteter och funktioner som Quantity tillämpas på underentiteterna.
// Add Prebuilt entity
await client.Model.AddPrebuiltAsync(appId, versionId, new[] { "number" });
// Define ml entity with children and grandchildren
var mlEntityDefinition = new EntityModelCreateObject
{
Name = "Pizza order",
Children = new[]
{
new ChildEntityModelCreateObject
{
Name = "Pizza",
Children = new[]
{
new ChildEntityModelCreateObject { Name = "Quantity" },
new ChildEntityModelCreateObject { Name = "Type" },
new ChildEntityModelCreateObject { Name = "Size" }
}
},
new ChildEntityModelCreateObject
{
Name = "Toppings",
Children = new[]
{
new ChildEntityModelCreateObject { Name = "Type" },
new ChildEntityModelCreateObject { Name = "Quantity" }
}
}
}
};
// Add ML entity
var mlEntityId = await client.Model.AddEntityAsync(appId, versionId, mlEntityDefinition); ;
// Add phraselist feature
var phraselistId = await client.Features.AddPhraseListAsync(appId, versionId, new PhraselistCreateObject
{
EnabledForAllModels = false,
IsExchangeable = true,
Name = "QuantityPhraselist",
Phrases = "few,more,extra"
});
// Get entity and subentities
var model = await client.Model.GetEntityAsync(appId, versionId, mlEntityId);
var toppingQuantityId = GetModelGrandchild(model, "Toppings", "Quantity");
var pizzaQuantityId = GetModelGrandchild(model, "Pizza", "Quantity");
// add model as feature to subentity model
await client.Features.AddEntityFeatureAsync(appId, versionId, pizzaQuantityId, new ModelFeatureInformation { ModelName = "number", IsRequired = true });
await client.Features.AddEntityFeatureAsync(appId, versionId, toppingQuantityId, new ModelFeatureInformation { ModelName = "number"});
// add phrase list as feature to subentity model
await client.Features.AddEntityFeatureAsync(appId, versionId, toppingQuantityId, new ModelFeatureInformation { FeatureName = "QuantityPhraselist" });
Använd följande metod i klassen för att hitta underentiteten Quantity-ID för att tilldela funktionerna till den underentiteten.
static Guid GetModelGrandchild(NDepthEntityExtractor model, string childName, string grandchildName)
{
return model.Children.
Single(c => c.Name == childName).
Children.
Single(c => c.Name == grandchildName).Id;
}
Lägga till exempelyttrande till avsikt
För att kunna fastställa avsikten med ett uttryck och extrahera entiteter behöver appen exempel på yttranden. Exemplen måste rikta in sig på en specifik, enskild avsikt och ska markera alla anpassade entiteter. Fördefinierade entiteter behöver inte markeras.
Lägg till exempelyttranden genom att skapa en lista över ExampleLabelObject-objekt, ett objekt för varje exempelyttrande. Varje exempel ska markera alla entiteter med en ordlista med namn/värde-par med entitetsnamn och entitetsvärde. Entitetsvärdet ska vara exakt som det visas i texten för exempelyttrande.
Anropa Examples.AddAsync med app-ID, versions-ID och exempel.
// Define labeled example
var labeledExampleUtteranceWithMLEntity = new ExampleLabelObject
{
Text = "I want two small seafood pizzas with extra cheese.",
IntentName = intentName,
EntityLabels = new[]
{
new EntityLabelObject
{
StartCharIndex = 7,
EndCharIndex = 48,
EntityName = "Pizza order",
Children = new[]
{
new EntityLabelObject
{
StartCharIndex = 7,
EndCharIndex = 30,
EntityName = "Pizza",
Children = new[]
{
new EntityLabelObject { StartCharIndex = 7, EndCharIndex = 9, EntityName = "Quantity" },
new EntityLabelObject { StartCharIndex = 11, EndCharIndex = 15, EntityName = "Size" },
new EntityLabelObject { StartCharIndex = 17, EndCharIndex = 23, EntityName = "Type" }
}
},
new EntityLabelObject
{
StartCharIndex = 37,
EndCharIndex = 48,
EntityName = "Toppings",
Children = new[]
{
new EntityLabelObject { StartCharIndex = 37, EndCharIndex = 41, EntityName = "Quantity" },
new EntityLabelObject { StartCharIndex = 43, EndCharIndex = 48, EntityName = "Type" }
}
}
}
},
}
};
// Add an example for the entity.
// Enable nested children to allow using multiple models with the same name.
// The quantity subentity and the phraselist could have the same exact name if this is set to True
await client.Examples.AddAsync(appId, versionId, labeledExampleUtteranceWithMLEntity, enableNestedChildren: true);
Träna appen
När modellen har skapats måste LUIS-appen tränas för den här versionen av modellen. En tränad modell kan användas i en containereller publiceras till mellanlagrings- eller produktfacken.
Metoden Train.TrainVersionAsync behöver app-ID och versions-ID.
En mycket liten modell, som den här snabbstarten visar, kommer att tränas mycket snabbt. För program på produktionsnivå bör träningen av appen innehålla ett avsökningsanrop till metoden GetStatusAsync för att avgöra när eller om träningen lyckades. Svaret är en lista över ModelTrainingInfo-objekt med separat status för varje objekt. Alla objekt måste lyckas för att träningen ska anses slutförd.
await client.Train.TrainVersionAsync(appId, versionId);
while (true)
{
var status = await client.Train.GetStatusAsync(appId, versionId);
if (status.All(m => m.Details.Status == "Success"))
{
// Assumes that we never fail, and that eventually we'll always succeed.
break;
}
}
Publicera app till produktionsplats
Publicera LUIS-appen med hjälp av metoden PublishAsync. Då publiceras den aktuella tränade versionen till den angivna platsen vid slutpunkten. Klientprogrammet använder den här slutpunkten för att skicka användaryttranden för förutsägelse av avsikt och entitetsuttrahering.
await client.Apps.PublishAsync(appId, new ApplicationPublishObject { VersionId = versionId, IsStaging=false});
Autentisera prediktionskörningsklienten
Använd ett ApiKeyServiceClientCredentials-objekt med din nyckel och använd det med slutpunkten för att skapa ett LUISRuntimeClient-objekt.
Varning
I den här snabb starten används redigerings nyckeln som en del av körningens autentiseringsuppgifter. Redigerings nyckeln kan fråga körningen med några frågor. Ersätt redigerings nyckeln med en förutsägelse körnings nyckel för mellanlagrings-och produktions nivå kod.
var runtimeClient = new LUISRuntimeClient(credentials) { Endpoint = predictionEndpoint };
Hämta förutsägelse från körning
Lägg till följande kod för att skapa begäran i förutsägelsekörningen.
Användaryttrande är en del av PredictionRequest-objektet.
Metoden GetSlotPredictionAsync behöver flera parametrar, till exempel app-ID, facknamn, objektet för förutsägelsebegäran för att uppfylla begäran. De andra alternativen, till exempel utförlig, visa alla avsikter och logga, är valfria.
// Production == slot name
var request = new PredictionRequest { Query = "I want two small pepperoni pizzas with more salsa" };
var prediction = await runtimeClient.Prediction.GetSlotPredictionAsync(appId, "Production", request);
Console.Write(JsonConvert.SerializeObject(prediction, Formatting.Indented));
Förutsägelse svaret är ett JSON-objekt, inklusive avsikten och eventuella entiteter som hittas.
{
"query": "I want two small pepperoni pizzas with more salsa",
"prediction": {
"topIntent": "OrderPizzaIntent",
"intents": {
"OrderPizzaIntent": {
"score": 0.753606856
},
"None": {
"score": 0.119097039
}
},
"entities": {
"Pizza order": [
{
"Pizza": [
{
"Quantity": [
2
],
"Type": [
"pepperoni"
],
"Size": [
"small"
],
"$instance": {
"Quantity": [
{
"type": "builtin.number",
"text": "two",
"startIndex": 7,
"length": 3,
"score": 0.968156934,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Type": [
{
"type": "Type",
"text": "pepperoni",
"startIndex": 17,
"length": 9,
"score": 0.9345611,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Size": [
{
"type": "Size",
"text": "small",
"startIndex": 11,
"length": 5,
"score": 0.9592077,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
],
"Toppings": [
{
"Type": [
"salsa"
],
"Quantity": [
"more"
],
"$instance": {
"Type": [
{
"type": "Type",
"text": "salsa",
"startIndex": 44,
"length": 5,
"score": 0.7292897,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Quantity": [
{
"type": "Quantity",
"text": "more",
"startIndex": 39,
"length": 4,
"score": 0.9320932,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
],
"$instance": {
"Pizza": [
{
"type": "Pizza",
"text": "two small pepperoni pizzas",
"startIndex": 7,
"length": 26,
"score": 0.812199831,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Toppings": [
{
"type": "Toppings",
"text": "more salsa",
"startIndex": 39,
"length": 10,
"score": 0.7250252,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
],
"$instance": {
"Pizza order": [
{
"type": "Pizza order",
"text": "two small pepperoni pizzas with more salsa",
"startIndex": 7,
"length": 42,
"score": 0.769223332,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
}
}
Kör programmet
Kör programmet med kommandot dotnet run från programkatalogen.
dotnet run
Använd Language Understanding (LUIS) för att Node.js:
- Skapa en app
- Lägg till en avsikt, en maskininlärd entitet, med ett exempelyttrande
- Träna och publicera app
- CLR för frågeförutsägelse
Referensdokumentation | Källkod för redigerings- och förutsägelsebiblioteket | NPM-| Exempel
Förutsättningar
- Node.js
- Azure-prenumeration – Skapa en kostnadsfritt
- När du har din Azure-prenumeration skapar du Language Understanding en redigeringsresurs i Azure Portal för att hämta din nyckel och slutpunkt. Vänta tills den har distribuerats och klicka på knappen Gå till resurs.
- Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Language Understanding redigering. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten. Du kan använda den kostnadsfria prisnivån (
F0) för att prova tjänsten.
- Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Language Understanding redigering. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten. Du kan använda den kostnadsfria prisnivån (
Inrätta
Skapa ett nytt JavaScript-program
Skapa en ny katalog för ditt program i ett konsolfönster och gå till den katalogen.
mkdir quickstart-sdk && cd quickstart-sdkInitiera katalogen som ett JavaScript-program genom att skapa en
package.json-fil.npm init -ySkapa en fil med namnet
index.jsför din JavaScript-kod.touch index.js
Installera NPM-biblioteken
I programkatalogen installerar du beroendena med följande kommandon och kör en rad i taget:
npm install @azure/ms-rest-js
npm install @azure/cognitiveservices-luis-authoring
npm install @azure/cognitiveservices-luis-runtime
Bör package.json se ut så här:
{
"name": "quickstart-sdk",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"keywords": [],
"author": "",
"license": "ISC",
"dependencies": {
"@azure/cognitiveservices-luis-authoring": "^4.0.0-preview.3",
"@azure/cognitiveservices-luis-runtime": "^5.0.0",
"@azure/ms-rest-js": "^2.0.8"
}
}
Redigera objektmodell
Luis Language Understanding klienten (LUIS) är ett LUISAuthoringClient-objekt som autentiserar till Azure, som innehåller din redigeringsnyckel.
Kodexempel för redigering
När klienten har skapats använder du den här klienten för att få åtkomst till funktioner som:
- Appar – lägga till, ta bort, publicera
- Exempelyttranden – lägg till efter batch, ta bort efter ID
- Funktioner – hantera fraslistor
- Modell – hantera avsikter och entiteter
- Mönster – hantera mönster
- Träna – träna appen och avsök efter träningsstatus
- Versioner – hantera med kloning, export och borttagning
Förutsägelseobjektmodell
Luis Language Understanding klienten (LUIS) är ett LUISAuthoringClient-objekt som autentiserar till Azure, som innehåller din redigeringsnyckel.
Kodexempel för förutsägelsekörning
När klienten har skapats använder du den här klienten för att få åtkomst till funktioner som:
- Förutsägelse efter
stagingellerproductionplats - Förutsägelse efter version
Kodexempel
Dessa kodfragment visar hur du gör följande med klient biblioteket Language Understanding (LUIS) för python:
- Skapa en app
- Lägga till avsikt
- Lägg till entiteter
- Lägga till exempelyttranden
- Träna appen
- Publicera appen
- Förutsägelse per plats
Lägga till beroenden
Öppna filen index.js i önskad redigerare eller IDE med namnet och lägg sedan till följande beroenden.
const msRest = require("@azure/ms-rest-js");
const LUIS_Authoring = require("@azure/cognitiveservices-luis-authoring");
const LUIS_Prediction = require("@azure/cognitiveservices-luis-runtime");
Lägga till exempelkod
Lägg till
quickstartmetoden och dess anrop. Den här metoden innehåller merparten av den återstående koden. Den här metoden anropas i slutet av filen.const quickstart = async () => { // add calls here } quickstart() .then(result => console.log("Done")) .catch(err => { console.log(`Error: ${err}`) })Lägg till den återstående koden i snabbstartsmetoden om inget annat anges.
Skapa variabler för appen
Skapa två uppsättningar variabler: den första uppsättningen du ändrar, den andra uppsättningen lämnar det som de visas i kodexe exemplet.
Skapa variabler som ska innehålla redigeringsnyckeln och resursnamnen.
const authoringKey = 'PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE'; const authoringEndpoint = "PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE"; const predictionEndpoint = "PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE";Skapa variabler som ska innehålla dina slutpunkter, appnamn, version och avsiktsnamn.
const appName = "Contoso Pizza Company"; const versionId = "0.1"; const intentName = "OrderPizzaIntent";
Autentisera klienten
Skapa ett CognitiveServicesCredentials-objekt med din nyckel och använd det med slutpunkten för att skapa ett LUISAuthoringClient-objekt.
const luisAuthoringCredentials = new msRest.ApiKeyCredentials({
inHeader: { "Ocp-Apim-Subscription-Key": authoringKey }
});
const client = new LUIS_Authoring.LUISAuthoringClient(
luisAuthoringCredentials,
authoringEndpoint
);
Skapa en LUIS-app
En LUIS-app innehåller NLP-modellen (Natural Language Processing), inklusive avsikter, entiteter och exempelyttranden.
Skapa ett AppsOperation-objekts add-metod för att skapa appen. Namn- och språkkulturen är obligatoriska egenskaper.
const create_app_payload = {
name: appName,
initialVersionId: versionId,
culture: "en-us"
};
const createAppResult = await client.apps.add(
create_app_payload
);
const appId = createAppResult.body
Skapa avsikt för appen
Det primära objektet i en LUIS-appmodell är avsikten. Avsikten justeras med en gruppering av avsikter för användaryttrande. En användare kan ställa en fråga eller göra en instruktion som söker efter ett visst avsett svar från en robot (eller ett annat klientprogram). Exempel på avsikter är att boka en flygresa, fråga om vädret i en destinationsstad och fråga om kontaktinformation för kundtjänsten.
Använd metoden model.add_intent med namnet på den unika avsikten och skicka sedan app-ID, versions-ID och nytt avsiktsnamn.
Värdet intentName är hårdkodat till OrderPizzaIntent som en del av variablerna i avsnittet Skapa variabler för appen.
await client.model.addIntent(
appId,
versionId,
{ name: intentName }
);
Skapa entiteter för appen
Även om entiteter inte krävs finns de i de flesta appar. Entiteten extraherar information från användaryttrande, vilket krävs för att kunna fullfiltrera användarens avsikt. Det finns flera typer av fördefinierade och anpassade entiteter, var och en med sina egna modeller för datatransformeringsobjekt (DTO). Vanliga fördefinierade entiteter som ska läggas till i din app inkluderar nummer, datetimeV2, geografiV2, ordningstal.
Det är viktigt att känna till att entiteter inte har markerats med en avsikt. De kan och gäller vanligtvis för många avsikter. Endast exempelanvändaryttranden markeras för en specifik, enskild avsikt.
Metoder för att skapa entiteter är en del av modellklassen. Varje entitetstyp har sin egen modell för datatransformeringsobjekt (DTO).
Koden för att skapa entiteter skapar en maskininlärningsentitet med underentiteter och funktioner Quantity som tillämpas på underentiteterna.
// Add Prebuilt entity
await client.model.addPrebuilt(appId, versionId, ["number"]);
// Define ml entity with children and grandchildren
const mlEntityDefinition = {
name: "Pizza order",
children: [
{
name: "Pizza",
children: [
{ name: "Quantity" },
{ name: "Type" },
{ name: "Size" }
]
},
{
name: "Toppings",
children: [
{ name: "Type" },
{ name: "Quantity" }
]
}
]
};
// Add ML entity
const response = await client.model.addEntity(appId, versionId, mlEntityDefinition);
const mlEntityId = response.body;
// Add phraselist feature
const phraselistResponse = await client.features.addPhraseList(appId, versionId, {
enabledForAllModels: false,
isExchangeable: true,
name: "QuantityPhraselist",
phrases: "few,more,extra"
});
const phraseListId = phraselistResponse.body;
// Get entity and subentities
const model = await client.model.getEntity(appId, versionId, mlEntityId);
const toppingQuantityId = getModelGrandchild(model, "Toppings", "Quantity");
const pizzaQuantityId = getModelGrandchild(model, "Pizza", "Quantity");
// add model as feature to subentity model
await client.features.addEntityFeature(appId, versionId, pizzaQuantityId, { modelName: "number", isRequired: true });
await client.features.addEntityFeature(appId, versionId, toppingQuantityId, { modelName: "number" });
// add phrase list as feature to subentity model
await client.features.addEntityFeature(appId, versionId, toppingQuantityId, { featureName: "QuantityPhraselist" });
Placera följande metod ovanför metoden för att hitta underentiteten Quantity-ID för att tilldela funktionerna quickstart till den underentiteten.
const getModelGrandchild = (model, childName, grandchildName) => {
return model.children.find(c => c.name == childName).children.find(c => c.name == grandchildName).id
}
Lägga till exempelyttrande till avsikt
För att kunna fastställa avsikten med ett uttryck och extrahera entiteter behöver appen exempel på yttranden. Exemplen måste rikta in sig på en specifik, enskild avsikt och ska markera alla anpassade entiteter. Fördefinierade entiteter behöver inte markeras.
Lägg till exempelyttranden genom att skapa en lista över ExampleLabelObject-objekt, ett objekt för varje exempelyttrande. Varje exempel ska markera alla entiteter med en ordlista med namn-/värdepar för entitetsnamn och entitetsvärde. Entitetsvärdet ska vara exakt som det visas i texten för exempelyttrande.
Anropa examples.add med app-ID, versions-ID och exemplet.
// Define labeled example
const labeledExampleUtteranceWithMLEntity =
{
text: "I want two small seafood pizzas with extra cheese.",
intentName: intentName,
entityLabels: [
{
startCharIndex: 7,
endCharIndex: 48,
entityName: "Pizza order",
children: [
{
startCharIndex: 7,
endCharIndex: 30,
entityName: "Pizza",
children: [
{
startCharIndex: 7,
endCharIndex: 9,
entityName: "Quantity"
},
{
startCharIndex: 11,
endCharIndex: 15,
entityName: "Size"
},
{
startCharIndex: 17,
endCharIndex: 23,
entityName: "Type"
}]
},
{
startCharIndex: 37,
endCharIndex: 48,
entityName: "Toppings",
children: [
{
startCharIndex: 37,
endCharIndex: 41,
entityName: "Quantity"
},
{
startCharIndex: 43,
endCharIndex: 48,
entityName: "Type"
}]
}
]
}
]
};
console.log("Labeled Example Utterance:", JSON.stringify(labeledExampleUtteranceWithMLEntity, null, 4 ));
// Add an example for the entity.
// Enable nested children to allow using multiple models with the same name.
// The quantity subentity and the phraselist could have the same exact name if this is set to True
await client.examples.add(appId, versionId, labeledExampleUtteranceWithMLEntity, { enableNestedChildren: true });
Träna appen
När modellen har skapats måste LUIS-appen tränas för den här versionen av modellen. En tränad modell kan användas i en containereller publiceras till mellanlagrings- eller produktfacken.
Metoden train.trainVersion behöver app-ID:t och versions-ID:t.
En mycket liten modell, som den här snabbstarten visar, kommer att tränas mycket snabbt. För program på produktionsnivå bör träningen av appen innehålla ett avsökningssamtal till get_status för att avgöra när eller om träningen lyckades. Svaret är en lista över ModelTrainingInfo-objekt med separat status för varje objekt. Alla objekt måste lyckas för att träningen ska anses slutförd.
await client.train.trainVersion(appId, versionId);
while (true) {
const status = await client.train.getStatus(appId, versionId);
if (status.every(m => m.details.status == "Success")) {
// Assumes that we never fail, and that eventually we'll always succeed.
break;
}
}
Publicera app till produktionsplats
Publicera LUIS-appen med hjälp av metoden app.publish. Då publiceras den aktuella tränade versionen till den angivna platsen vid slutpunkten. Klientprogrammet använder den här slutpunkten för att skicka användaryttranden för förutsägelse av avsikt och entitetsuttrahering.
await client.apps.publish(appId, { versionId: versionId, isStaging: false });
Autentisera prediktionskörningsklienten
Använd ett msRest.ApiKeyCredentials-objekt med din nyckel och använd det med slutpunkten för att skapa en LUIS. LUISRuntimeClient-objekt.
Varning
I den här snabb starten används redigerings nyckeln som en del av körningens autentiseringsuppgifter. Redigerings nyckeln kan fråga körningen med några frågor. Ersätt redigerings nyckeln med en förutsägelse körnings nyckel för mellanlagrings-och produktions nivå kod.
const luisPredictionClient = new LUIS_Prediction.LUISRuntimeClient(
luisAuthoringCredentials,
predictionEndpoint
);
Hämta förutsägelse från körning
Lägg till följande kod för att skapa begäran i förutsägelsekörningen. Användaryttrande är en del av predictionRequest-objektet.
Metoden luisRuntimeClient.prediction.getSlotPrediction behöver flera parametrar, till exempel app-ID, facknamn och objektet för förutsägelsebegäran för att uppfylla begäran. De andra alternativen, till exempel utförlig, visa alla avsikter och logga, är valfria.
// Production == slot name
const request = { query: "I want two small pepperoni pizzas with more salsa" };
const response = await luisPredictionClient.prediction.getSlotPrediction(appId, "Production", request);
console.log(JSON.stringify(response.prediction, null, 4 ));
Förutsägelse svaret är ett JSON-objekt, inklusive avsikten och eventuella entiteter som hittas.
{
"query": "I want two small pepperoni pizzas with more salsa",
"prediction": {
"topIntent": "OrderPizzaIntent",
"intents": {
"OrderPizzaIntent": {
"score": 0.753606856
},
"None": {
"score": 0.119097039
}
},
"entities": {
"Pizza order": [
{
"Pizza": [
{
"Quantity": [
2
],
"Type": [
"pepperoni"
],
"Size": [
"small"
],
"$instance": {
"Quantity": [
{
"type": "builtin.number",
"text": "two",
"startIndex": 7,
"length": 3,
"score": 0.968156934,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Type": [
{
"type": "Type",
"text": "pepperoni",
"startIndex": 17,
"length": 9,
"score": 0.9345611,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Size": [
{
"type": "Size",
"text": "small",
"startIndex": 11,
"length": 5,
"score": 0.9592077,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
],
"Toppings": [
{
"Type": [
"salsa"
],
"Quantity": [
"more"
],
"$instance": {
"Type": [
{
"type": "Type",
"text": "salsa",
"startIndex": 44,
"length": 5,
"score": 0.7292897,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Quantity": [
{
"type": "Quantity",
"text": "more",
"startIndex": 39,
"length": 4,
"score": 0.9320932,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
],
"$instance": {
"Pizza": [
{
"type": "Pizza",
"text": "two small pepperoni pizzas",
"startIndex": 7,
"length": 26,
"score": 0.812199831,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Toppings": [
{
"type": "Toppings",
"text": "more salsa",
"startIndex": 39,
"length": 10,
"score": 0.7250252,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
],
"$instance": {
"Pizza order": [
{
"type": "Pizza order",
"text": "two small pepperoni pizzas with more salsa",
"startIndex": 7,
"length": 42,
"score": 0.769223332,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
}
}
Kör programmet
Kör programmet med kommandot node index.js i snabbstartsfilen.
node index.js
Använd Language Understanding (LUIS) för Python för att:
- Skapa en app
- Lägg till en avsikt, en maskininlärd entitet, med ett exempelyttrande
- Träna och publicera app
- CLR för frågeförutsägelse
Referensdokumentation | Källkod för redigerings- och förutsägelsebiblioteket | Paket (Pypi) | Exempel
Förutsättningar
- Den aktuella versionen av Python 3.x.
- Azure-prenumeration – Skapa en utan kostnad
- När du har din Azure-prenumeration skapar du Language Understanding en redigeringsresurs i Azure Portal för att hämta din nyckel och slutpunkt. Vänta tills den har distribuerats och klicka på knappen Gå till resurs.
- Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Language Understanding redigering. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten. Du kan använda den kostnadsfria prisnivån (
F0) för att prova tjänsten.
- Du behöver nyckeln och slutpunkten från resursen som du skapar för att ansluta ditt program till Language Understanding redigering. Du klistrar in nyckeln och slutpunkten i koden nedan senare i snabbstarten. Du kan använda den kostnadsfria prisnivån (
Inrätta
Skapa ett nytt Python-program
Skapa en ny katalog för ditt program i ett konsolfönster och gå till den katalogen.
mkdir quickstart-sdk && cd quickstart-sdkSkapa en fil med namnet
authoring_and_predict.pyför din Python-kod.touch authoring_and_predict.py
Installera klientbiblioteket med Pip
I programkatalogen installerar du Language Understanding (LUIS)-klientbiblioteket för Python med följande kommando:
pip install azure-cognitiveservices-language-luis
Redigera objektmodell
Luis Language Understanding klienten (LUIS) är ett LUISAuthoringClient-objekt som autentiserar till Azure, som innehåller din redigeringsnyckel.
Kodexempel för redigering
När klienten har skapats använder du den här klienten för att få åtkomst till funktioner som:
- Appar – skapa, ta bort, publicera
- Exempelyttranden – lägg till efter batch, ta bort efter ID
- Funktioner – hantera fraslistor
- Modell – hantera avsikter och entiteter
- Mönster – hantera mönster
- Träna – träna appen och avsök efter träningsstatus
- Versioner – hantera med kloning, export och borttagning
Förutsägelseobjektmodell
Förutsägelsekörningsklienten Language Understanding LUIS är ett LUISRuntimeClient-objekt som autentiserar till Azure, som innehåller din resursnyckel.
Kodexempel för förutsägelsekörning
När klienten har skapats använder du den här klienten för att få åtkomst till funktioner som:
- Förutsägelse efter mellanlagrings- eller produktionsplats
- Förutsägelse efter version
Kodexempel
Dessa kodfragment visar hur du gör följande med klient biblioteket Language Understanding (LUIS) för python:
- Skapa en app
- Lägga till avsikt
- Lägg till entiteter
- Lägga till exempelyttranden
- Träna appen
- Publicera appen
- Förutsägelse per plats
Lägga till beroenden
Lägg till klientbiblioteken i Python-filen.
from azure.cognitiveservices.language.luis.authoring import LUISAuthoringClient
from azure.cognitiveservices.language.luis.authoring.models import ApplicationCreateObject
from azure.cognitiveservices.language.luis.runtime import LUISRuntimeClient
from msrest.authentication import CognitiveServicesCredentials
from functools import reduce
import json, time, uuid
Lägga till exempelkod
Lägg till
quickstartmetoden och dess anrop. Den här metoden innehåller merparten av den återstående koden. Den här metoden anropas i slutet av filen.def quickstart(): # add calls here, remember to indent properly quickstart()Lägg till den återstående koden i snabbstartsmetoden om inget annat anges.
Skapa variabler för appen
Skapa två uppsättningar variabler: den första uppsättningen du ändrar, den andra uppsättningen lämnar det som de visas i kodexe exemplet.
Skapa variabler som ska innehålla redigeringsnyckeln och resursnamnen.
authoringKey = 'PASTE_YOUR_LUIS_AUTHORING_SUBSCRIPTION_KEY_HERE' authoringEndpoint = 'PASTE_YOUR_LUIS_AUTHORING_ENDPOINT_HERE' predictionKey = 'PASTE_YOUR_LUIS_PREDICTION_SUBSCRIPTION_KEY_HERE' predictionEndpoint = 'PASTE_YOUR_LUIS_PREDICTION_ENDPOINT_HERE'Skapa variabler som ska innehålla dina slutpunkter, appnamn, version och avsiktsnamn.
# We use a UUID to avoid name collisions. appName = "Contoso Pizza Company " + str(uuid.uuid4()) versionId = "0.1" intentName = "OrderPizzaIntent"
Autentisera klienten
Skapa ett CognitiveServicesCredentials-objekt med din nyckel och använd det med slutpunkten för att skapa ett LUISAuthoringClient-objekt.
client = LUISAuthoringClient(authoringEndpoint, CognitiveServicesCredentials(authoringKey))
Skapa en LUIS-app
En LUIS-app innehåller NLP-modellen (Natural Language Processing), inklusive avsikter, entiteter och exempelyttranden.
Skapa ett AppsOperation-objekts add-metod för att skapa appen. Namn- och språkkulturen är obligatoriska egenskaper.
# define app basics
appDefinition = ApplicationCreateObject (name=appName, initial_version_id=versionId, culture='en-us')
# create app
app_id = client.apps.add(appDefinition)
# get app id - necessary for all other changes
print("Created LUIS app with ID {}".format(app_id))
Skapa avsikt för appen
Det primära objektet i en LUIS-appmodell är avsikten. Avsikten justeras med en gruppering av avsikter för användaryttrande. En användare kan ställa en fråga eller göra en instruktion som söker efter ett visst avsett svar från en robot (eller ett annat klientprogram). Exempel på avsikter är att boka en flygresa, fråga om vädret i en destinationsstad och fråga om kontaktinformation för kundtjänsten.
Använd metoden model.add_intent med namnet på den unika avsikten och skicka sedan app-ID, versions-ID och nytt avsiktsnamn.
Värdet intentName är hårdkodat till OrderPizzaIntent som en del av variablerna i avsnittet Skapa variabler för appen.
client.model.add_intent(app_id, versionId, intentName)
Skapa entiteter för appen
Även om entiteter inte krävs finns de i de flesta appar. Entiteten extraherar information från användaryttrande, vilket krävs för att fullständigt kunna infiltrera användarens avsikt. Det finns flera typer av fördefinierade och anpassade entiteter, var och en med egna modeller för datatransformeringsobjekt (DTO). Vanliga fördefinierade entiteter som ska läggas till i din app inkluderar nummer, datetimeV2, geografiV2, ordningstal.
Det är viktigt att känna till att entiteter inte har markerats med en avsikt. De kan och gäller vanligtvis för många avsikter. Endast exempelanvändaryttranden markeras för en specifik, enskild avsikt.
Skapandemetoder för entiteter är en del av klassen ModelOperations. Varje entitetstyp har sin egen modell för datatransformeringsobjekt (DTO).
Koden för att skapa entiteter skapar en maskininlärningsentitet med underentiteter och funktioner Quantity som tillämpas på underentiteterna.
# Add Prebuilt entity
client.model.add_prebuilt(app_id, versionId, prebuilt_extractor_names=["number"])
# define machine-learned entity
mlEntityDefinition = [
{
"name": "Pizza",
"children": [
{ "name": "Quantity" },
{ "name": "Type" },
{ "name": "Size" }
]
},
{
"name": "Toppings",
"children": [
{ "name": "Type" },
{ "name": "Quantity" }
]
}]
# add entity to app
modelId = client.model.add_entity(app_id, versionId, name="Pizza order", children=mlEntityDefinition)
# define phraselist - add phrases as significant vocabulary to app
phraseList = {
"enabledForAllModels": False,
"isExchangeable": True,
"name": "QuantityPhraselist",
"phrases": "few,more,extra"
}
# add phrase list to app
phraseListId = client.features.add_phrase_list(app_id, versionId, phraseList)
# Get entity and subentities
modelObject = client.model.get_entity(app_id, versionId, modelId)
toppingQuantityId = get_grandchild_id(modelObject, "Toppings", "Quantity")
pizzaQuantityId = get_grandchild_id(modelObject, "Pizza", "Quantity")
# add model as feature to subentity model
prebuiltFeatureRequiredDefinition = { "model_name": "number", "is_required": True }
client.features.add_entity_feature(app_id, versionId, pizzaQuantityId, prebuiltFeatureRequiredDefinition)
# add model as feature to subentity model
prebuiltFeatureNotRequiredDefinition = { "model_name": "number" }
client.features.add_entity_feature(app_id, versionId, toppingQuantityId, prebuiltFeatureNotRequiredDefinition)
# add phrase list as feature to subentity model
phraseListFeatureDefinition = { "feature_name": "QuantityPhraselist", "model_name": None }
client.features.add_entity_feature(app_id, versionId, toppingQuantityId, phraseListFeatureDefinition)
Placera följande metod ovanför metoden för att hitta underentiteten Quantity-ID för att tilldela funktionerna quickstart till den underentiteten.
def get_grandchild_id(model, childName, grandChildName):
theseChildren = next(filter((lambda child: child.name == childName), model.children))
theseGrandchildren = next(filter((lambda child: child.name == grandChildName), theseChildren.children))
grandChildId = theseGrandchildren.id
return grandChildId
Lägga till exempelyttrande till avsikt
För att kunna fastställa avsikten med ett uttryck och extrahera entiteter behöver appen exempel på yttranden. Exemplen måste rikta in sig på en specifik, enskild avsikt och ska markera alla anpassade entiteter. Fördefinierade entiteter behöver inte markeras.
Lägg till exempelyttranden genom att skapa en lista över ExampleLabelObject-objekt, ett objekt för varje exempelyttrande. Varje exempel ska markera alla entiteter med en ordlista med namn-/värdepar för entitetsnamn och entitetsvärde. Entitetsvärdet ska vara exakt som det visas i texten för exempelyttrande.
Anropa examples.add med app-ID, versions-ID och exemplet.
# Define labeled example
labeledExampleUtteranceWithMLEntity = {
"text": "I want two small seafood pizzas with extra cheese.",
"intentName": intentName,
"entityLabels": [
{
"startCharIndex": 7,
"endCharIndex": 48,
"entityName": "Pizza order",
"children": [
{
"startCharIndex": 7,
"endCharIndex": 30,
"entityName": "Pizza",
"children": [
{
"startCharIndex": 7,
"endCharIndex": 9,
"entityName": "Quantity"
},
{
"startCharIndex": 11,
"endCharIndex": 15,
"entityName": "Size"
},
{
"startCharIndex": 17,
"endCharIndex": 23,
"entityName": "Type"
}]
},
{
"startCharIndex": 37,
"endCharIndex": 48,
"entityName": "Toppings",
"children": [
{
"startCharIndex": 37,
"endCharIndex": 41,
"entityName": "Quantity"
},
{
"startCharIndex": 43,
"endCharIndex": 48,
"entityName": "Type"
}]
}
]
}
]
}
print("Labeled Example Utterance:", labeledExampleUtteranceWithMLEntity)
# Add an example for the entity.
# Enable nested children to allow using multiple models with the same name.
# The quantity subentity and the phraselist could have the same exact name if this is set to True
client.examples.add(app_id, versionId, labeledExampleUtteranceWithMLEntity, { "enableNestedChildren": True })
Träna appen
När modellen har skapats måste LUIS-appen tränas för den här versionen av modellen. En tränad modell kan användas i en containereller publiceras till mellanlagrings- eller produktfacken.
Metoden train.train_version behöver app-ID och versions-ID.
En mycket liten modell, som den här snabbstarten visar, kommer att tränas mycket snabbt. För program på produktionsnivå bör träningen av appen innehålla ett avsökningssamtal till get_status för att avgöra när eller om träningen lyckades. Svaret är en lista över ModelTrainingInfo-objekt med separat status för varje objekt. Alla objekt måste lyckas för att träningen ska anses slutförd.
client.train.train_version(app_id, versionId)
waiting = True
while waiting:
info = client.train.get_status(app_id, versionId)
# get_status returns a list of training statuses, one for each model. Loop through them and make sure all are done.
waiting = any(map(lambda x: 'Queued' == x.details.status or 'InProgress' == x.details.status, info))
if waiting:
print ("Waiting 10 seconds for training to complete...")
time.sleep(10)
else:
print ("trained")
waiting = False
Publicera app till produktionsplats
Publicera LUIS-appen med hjälp av metoden app.publish. Då publiceras den aktuella tränade versionen till den angivna platsen vid slutpunkten. Klientprogrammet använder den här slutpunkten för att skicka användaryttranden för förutsägelse av avsikt och entitetsuttrahering.
# Mark the app as public so we can query it using any prediction endpoint.
# Note: For production scenarios, you should instead assign the app to your own LUIS prediction endpoint. See:
# https://docs.microsoft.com/en-gb/azure/cognitive-services/luis/luis-how-to-azure-subscription#assign-a-resource-to-an-app
client.apps.update_settings(app_id, is_public=True)
responseEndpointInfo = client.apps.publish(app_id, versionId, is_staging=False)
Autentisera prediktionskörningsklienten
Använd autentiseringsobjektet med din nyckel och använd det med slutpunkten för att skapa ett LUISRuntimeClientConfiguration-objekt.
Varning
I den här snabb starten används redigerings nyckeln som en del av körningens autentiseringsuppgifter. Redigerings nyckeln kan fråga körningen med några frågor. Ersätt redigerings nyckeln med en förutsägelse körnings nyckel för mellanlagrings-och produktions nivå kod.
runtimeCredentials = CognitiveServicesCredentials(predictionKey)
clientRuntime = LUISRuntimeClient(endpoint=predictionEndpoint, credentials=runtimeCredentials)
Hämta förutsägelse från körning
Lägg till följande kod för att skapa begäran i förutsägelsekörningen.
Användaryttrande är en del prediction_request objektet.
Metoden get_slot_prediction flera parametrar, till exempel app-ID, facknamn och objektet för förutsägelsebegäran för att uppfylla begäran. De andra alternativen, till exempel utförlig, visa alla avsikter och logga, är valfria. Begäran returnerar ett PredictionResponse-objekt.
# Production == slot name
predictionRequest = { "query" : "I want two small pepperoni pizzas with more salsa" }
predictionResponse = clientRuntime.prediction.get_slot_prediction(app_id, "Production", predictionRequest)
print("Top intent: {}".format(predictionResponse.prediction.top_intent))
print("Sentiment: {}".format (predictionResponse.prediction.sentiment))
print("Intents: ")
for intent in predictionResponse.prediction.intents:
print("\t{}".format (json.dumps (intent)))
print("Entities: {}".format (predictionResponse.prediction.entities))
Förutsägelse svaret är ett JSON-objekt, inklusive avsikten och eventuella entiteter som hittas.
{
"query": "I want two small pepperoni pizzas with more salsa",
"prediction": {
"topIntent": "OrderPizzaIntent",
"intents": {
"OrderPizzaIntent": {
"score": 0.753606856
},
"None": {
"score": 0.119097039
}
},
"entities": {
"Pizza order": [
{
"Pizza": [
{
"Quantity": [
2
],
"Type": [
"pepperoni"
],
"Size": [
"small"
],
"$instance": {
"Quantity": [
{
"type": "builtin.number",
"text": "two",
"startIndex": 7,
"length": 3,
"score": 0.968156934,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Type": [
{
"type": "Type",
"text": "pepperoni",
"startIndex": 17,
"length": 9,
"score": 0.9345611,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Size": [
{
"type": "Size",
"text": "small",
"startIndex": 11,
"length": 5,
"score": 0.9592077,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
],
"Toppings": [
{
"Type": [
"salsa"
],
"Quantity": [
"more"
],
"$instance": {
"Type": [
{
"type": "Type",
"text": "salsa",
"startIndex": 44,
"length": 5,
"score": 0.7292897,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Quantity": [
{
"type": "Quantity",
"text": "more",
"startIndex": 39,
"length": 4,
"score": 0.9320932,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
],
"$instance": {
"Pizza": [
{
"type": "Pizza",
"text": "two small pepperoni pizzas",
"startIndex": 7,
"length": 26,
"score": 0.812199831,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
],
"Toppings": [
{
"type": "Toppings",
"text": "more salsa",
"startIndex": 39,
"length": 10,
"score": 0.7250252,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
],
"$instance": {
"Pizza order": [
{
"type": "Pizza order",
"text": "two small pepperoni pizzas with more salsa",
"startIndex": 7,
"length": 42,
"score": 0.769223332,
"modelTypeId": 1,
"modelType": "Entity Extractor",
"recognitionSources": [
"model"
]
}
]
}
}
}
}
Kör programmet
Kör programmet med kommandot python i snabbstartsfilen.
python authoring_and_predict.py
Genom att följa den här snabb starten utför du tre REST-anrop i följd.
- Först ska du ladda upp en batch med exempel-yttranden som kommer att användas för att träna pizza-appens modell med hjälp av rest-batchen Lägg till etiketter -anrop.
- Härnäst ska du starta en övningssession för pizza-appen med hjälp av anropet rest Train Application version .
- Slutligen kommer du att få status för utbildningen för pizza-appen med hjälp av status samtalet rest get-version .
Krav
Ett kostnads fritt Luis -konto.
En text redigerare, till exempel Visual Studio Code.
Kommando rads programmet svänger. Programmet för vändning är redan installerat på macOS, de flesta Linux-distributioner och Windows 10 version 1803 och senare.
Om du behöver installera svängen kan du hämta svängen från sidan för att Hämtaen klammer.
Skapa pizza-app
Skapa pizza-appen.
- Välj pizza-app-for-luis-v6.jspå för att öppna filens GitHub-sida
pizza-app-for-luis.json. - Högerklicka eller länge knacka på knappen RAW och välj Spara länk som för att spara på
pizza-app-for-luis.jsondin dator. - Logga in på Luis-portalen.
- Välj Mina appar.
- På sidan Mina appar väljer du + ny app för konversation.
- Välj Importera som JSON.
- I dialog rutan Importera ny app väljer du knappen Välj fil .
- Välj den
pizza-app-for-luis.jsonfil som du laddade ned och välj sedan Öppna. - I fältet Importera ny app dialog namn anger du ett namn för din pizza-app och väljer sedan knappen OK .
Appen kommer att importeras.
Om du ser en dialog ruta för att skapa en effektiv Luis-app stänger du dialog rutan.
Träna och publicera pizza-appen
Sidan avsikter bör visas med en lista över syftet i pizza-appen.
I den övre högra delen av webbplatsen LUIS väljer du knappen träna .

Träningen är klar när status indikatorn på knappen träna är grön.
För att kunna ta emot en LUIS förutsägelse i en chatt-robot eller något annat klient program måste du publicera appen till förutsägelse slut punkten.
Välj publicera i det övre högra navigerings fältet.

Välj produktions plats och välj sedan Slutför.

Välj åtkomst till dina slut punkts-URL: er i meddelandet för att gå till sidan Azure-resurser . Du kommer bara att kunna se URL: erna om du har en förutsägelse resurs som är kopplad till appen. Du kan också hitta sidan Azure-resurser genom att klicka på Hantera.

Lägga till en redigerings resurs i pizza-appen
- Välj Hantera.
- Välj Azure-resurser.
- Välj redigerings resurs.
- Välj ändra redigering av resurs.
Om du har en redigerings resurs anger du klient namnet, prenumerations namnet och Luis resurs namnet för din redigerings resurs.
Om du inte har någon redigerings resurs:
- Välj Skapa ny resurs.
- Ange ett klient namn, resurs namn, prenumerations namn och namn på Azure-resurs gruppen.
Din pizza-app är nu redo att användas.
Registrera åtkomst värden för din pizza-app
Om du vill använda den nya pizza-appen behöver du appens ID, redigerings nyckel och redigerings slut punkt för din pizza-app. För att få förutsägelser behöver du en separat förutsägelse slut punkt och förutsägelse nyckel.
Så här hittar du dessa värden:
- Välj Hantera på sidan avsikter .
- På sidan program inställningar registrerar du app-ID: t.
- Välj Azure-resurser.
- Välj redigerings resurs.
- Registrera primär nyckeln från flikarna Redigera resurs och förutsägelse resurser . Det här värdet är din redigerings nyckel.
- Registrera slut punkts-URL: en. Det här värdet är din redigerings slut punkt.
Skapa en JSON-fil för att träna pizza-appen
Om du vill skapa en JSON-fil med tre exempel yttranden sparar du följande JSON-data till en fil med namnet ExampleUtterances.JSON :
[
{
"text": "order a pizza",
"intentName": "ModifyOrder",
"entityLabels": [
{
"entityName": "Order",
"startCharIndex": 6,
"endCharIndex": 12
}
]
},
{
"text": "order a large pepperoni pizza",
"intentName": "ModifyOrder",
"entityLabels": [
{
"entityName": "Order",
"startCharIndex": 6,
"endCharIndex": 28
},
{
"entityName": "FullPizzaWithModifiers",
"startCharIndex": 6,
"endCharIndex": 28
},
{
"entityName": "PizzaType",
"startCharIndex": 14,
"endCharIndex": 28
},
{
"entityName": "Size",
"startCharIndex": 8,
"endCharIndex": 12
}
]
},
{
"text": "I want two large pepperoni pizzas on thin crust",
"intentName": "ModifyOrder",
"entityLabels": [
{
"entityName": "Order",
"startCharIndex": 7,
"endCharIndex": 46
},
{
"entityName": "FullPizzaWithModifiers",
"startCharIndex": 7,
"endCharIndex": 46
},
{
"entityName": "PizzaType",
"startCharIndex": 17,
"endCharIndex": 32
},
{
"entityName": "Size",
"startCharIndex": 11,
"endCharIndex": 15
},
{
"entityName": "Quantity",
"startCharIndex": 7,
"endCharIndex": 9
},
{
"entityName": "Crust",
"startCharIndex": 37,
"endCharIndex": 46
}
]
}
]`
Exemplet yttranden JSON följer ett speciellt format.
Fältet text innehåller texten för exempelyttrandet. Fältet intentName måste motsvara namnet på en befintlig avsikt i LUIS-appen. Fältet entityLabels är obligatoriskt. Om du inte vill märka ut några entiteter kan du ange en tom matris.
Om matrisen entityLabels inte är tom måste startCharIndex och endCharIndex märka ut den entitet som anges i fältet entityName. Indexet är noll-baserat. Om du börjar eller slutar etiketten på ett blank steg i texten, Miss lyckas API-anropet för att lägga till yttranden.
Lägga till exempelyttranden
Om du vill ladda upp batchen med exempel yttranden kopierar du kommandot till text redigeraren:
curl "***YOUR-AUTHORING-ENDPOINT**_/luis/authoring/v3.0-preview/apps/_*_YOUR-APP-ID_*_/versions/_*_YOUR-APP-VERSION_*_/examples?verbose=true&show-all-intents=true" ^ --request POST ^ --header "Content-Type:application/json" ^ --header "Ocp-Apim-Subscription-Key: _*_YOUR-AUTHORING-KEY_*_" ^ --data "@ExampleUtterances.JSON"Ersätt värdena som börjar med
_*_YOUR-med dina egna värden.Information Syfte _*_YOUR-AUTHORING-ENDPOINT_*_URL-slutpunkten för redigering. Exempel: "https://REPLACE-WITH-YOUR-RESOURCE-NAME.api.cognitive.microsoft.com/". Du anger resurs namnet när du skapade resursen. _*_YOUR-APP-ID_*_Ditt LUIS app-ID. _*_YOUR-APP-VERSION_*_LUIS-appens version. För pizza-appen är versions numret "0,1" utan citat tecken. _*_YOUR-AUTHORING-KEY_*_Din redigerings nyckel för 32-tecknen. Tilldelade nycklar och resurser visas i LUIS-portalen i avsnittet hantera på sidan _ Azure-resurser*. App-ID: t är tillgängligt i samma hantera-avsnitt på sidan program inställningar .
Starta en kommando tolk (Windows) eller Terminal (macOS och Linux) och ändra kataloger till samma katalog där du sparade
ExampleUtterances.JSONfilen.Kopiera kommandot vändning från redigeraren och klistra in det i en kommando tolk (Windows) eller Terminal (macOS och Linux). Kör kommandot genom att trycka på RETUR.
Du bör se följande svar:
[{"value":{"ExampleId":1255129706,"UtteranceText":"order a pizza"},"hasError":false},{"value":{"ExampleId":1255129707,"UtteranceText":"order a large pepperoni pizza"},"hasError":false},{"value":{"ExampleId":1255129708,"UtteranceText":"i want two large pepperoni pizzas on thin crust"},"hasError":false}]Här är utdata som är formaterade för läsbarhet:
[ { "value": { "ExampleId": 1255129706, "UtteranceText": "order a pizza" }, "hasError": false }, { "value": { "ExampleId": 1255129707, "UtteranceText": "order a large pepperoni pizza" }, "hasError": false }, { "value": { "ExampleId": 1255129708, "UtteranceText": "i want two large pepperoni pizzas on thin crust" }, "hasError": false } ]
Träna pizza-appens modell
För att starta en övningssession för pizza-appen kopierar du kommandot till text redigeraren:
curl "**_YOUR-AUTHORING-ENDPOINT_*_/luis/authoring/v3.0-preview/apps/_*_YOUR-APP-ID_*_/versions/_*_YOUR-APP-VERSION_*_/train?verbose=true&show-all-intents=true" ^ --data "" ^ --request POST ^ --header "Content-Type:application/json" ^ --header "Ocp-Apim-Subscription-Key: _*_YOUR-AUTHORING-KEY_*_"Ersätt värdena som börjar med
_*_YOUR-med dina egna värden som du gjorde tidigare.Kopiera kommandot vändning från redigeraren och klistra in det i en kommando tolk (Windows) eller Terminal (macOS och Linux). Kör kommandot genom att trycka på RETUR.
Du bör se följande svar:
{"statusId":2,"status":"UpToDate"}Här är utdata som är formaterade för läsbarhet:
{ "statusId": 2, "status": "UpToDate" }
Hämta status för utbildning
Kopiera det här kommandot till text redigeraren för att få utbildnings status för utbildningen:
curl "_*_YOUR-AUTHORING-ENDPOINT_*_/luis/authoring/v3.0-preview/apps/_*_YOUR-APP-ID_*_/versions/_*_YOUR-APP-VERSION_*_/train?verbose=true&show-all-intents=true" ^ --request GET ^ --header "Content-Type:application/json" ^ --header "Ocp-Apim-Subscription-Key: _*_YOUR-AUTHORING-KEY_*_"Ersätt värdena som börjar med
_*_YOUR-med dina egna värden som du gjorde tidigare.Kopiera kommandot vändning från redigeraren och klistra in det i en kommando tolk (Windows) eller Terminal (macOS och Linux). Kör kommandot genom att trycka på RETUR.
Du bör se följande svar:
[{"modelId":"8eb7ad8f-5db5-4c28-819b-ca3905fffd80","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6f53bc92-ae54-44ce-bc4e-010d1f8cfda0","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6cb17888-ad6e-464c-82c0-d37fd1f2c4f8","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"a16fc4fd-1949-4e77-9de3-30369f16c3a5","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"6bacdb75-1889-4f93-8971-8c8995ff8960","details":{"statusId":2,"status":"UpToDate","exampleCount":171}},{"modelId":"be963f4c-4898-48d7-9eba-3c6af0867b9d","details":{"statusId":2,"status":"UpToDate","exampleCount":171}}]Här är utdata som är formaterade för läsbarhet:
[ { "modelId": "8eb7ad8f-5db5-4c28-819b-ca3905fffd80", "details": { "statusId": 2, "status": "UpToDate", "exampleCount": 171 } }, { "modelId": "6f53bc92-ae54-44ce-bc4e-010d1f8cfda0", "details": { "statusId": 2, "status": "UpToDate", "exampleCount": 171 } }, { "modelId": "6cb17888-ad6e-464c-82c0-d37fd1f2c4f8", "details": { "statusId": 2, "status": "UpToDate", "exampleCount": 171 } }, { "modelId": "a16fc4fd-1949-4e77-9de3-30369f16c3a5", "details": { "statusId": 2, "status": "UpToDate", "exampleCount": 171 } }, { "modelId": "6bacdb75-1889-4f93-8971-8c8995ff8960", "details": { "statusId": 2, "status": "UpToDate", "exampleCount": 171 } }, { "modelId": "be963f4c-4898-48d7-9eba-3c6af0867b9d", "details": { "statusId": 2, "status": "UpToDate", "exampleCount": 171 } } ]
Hämta avsikt från förutsägelse slut punkten
Använd sväng för att fråga förutsägelse slut punkten och få ett förutsägelse resultat.
Anteckning
Det här kommandot använder din förutsägelse slut punkt.
Kopiera det här kommandot till text redigeraren:
curl "https://_*_YOUR-PREDICTION-ENDPOINT_*_/luis/prediction/v3.0/apps/_*_YOUR-APP-ID_*_/slots/production/predict" ^ --request GET ^ --get ^ --data "subscription-key=_*_YOUR-PREDICTION-KEY_*_" ^ --data "verbose=true" ^ --data "show-all-intents=true" ^ --data-urlencode "query=I want two large pepperoni pizzas on thin crust please"Ersätt värdena som börjar med
_*_YOUR-med dina egna värden.Information Syfte _*_YOUR-PREDICTION-ENDPOINT_*_URL-slutpunkten för förutsägelse. Finns på LUIS-portalen, sidan Azure-resurser för din app.
Exempelvishttps://westus.api.cognitive.microsoft.com/._*_YOUR-APP-ID_*_Ditt app-ID. Finns på LUIS-portalen, sidan program inställningar för din app. _*_YOUR-PREDICTION-KEY_**Din nyckel för att förutsäga 32-tecknen. Finns på LUIS-portalen, sidan Azure-resurser för din app. Kopiera texten till ett konsol fönster och tryck på RETUR för att köra kommandot:
Granska det förutsägelse svar som returneras som JSON:
{"query":"I want two large pepperoni pizzas on thin crust please","prediction":{"topIntent":"ModifyOrder","intents":{"ModifyOrder":{"score":1.0},"None":{"score":8.55E-09},"Greetings":{"score":1.82222226E-09},"CancelOrder":{"score":1.47272727E-09},"Confirmation":{"score":9.8125E-10}},"entities":{"Order":[{"FullPizzaWithModifiers":[{"PizzaType":["pepperoni pizzas"],"Size":[["Large"]],"Quantity":[2],"Crust":[["Thin"]],"$instance":{"PizzaType":[{"type":"PizzaType","text":"pepperoni pizzas","startIndex":17,"length":16,"score":0.9978157,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Size":[{"type":"SizeList","text":"large","startIndex":11,"length":5,"score":0.9984481,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Quantity":[{"type":"builtin.number","text":"two","startIndex":7,"length":3,"score":0.999770939,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"Crust":[{"type":"CrustList","text":"thin crust","startIndex":37,"length":10,"score":0.933985531,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}]}}],"$instance":{"FullPizzaWithModifiers":[{"type":"FullPizzaWithModifiers","text":"two large pepperoni pizzas on thin crust","startIndex":7,"length":40,"score":0.90681237,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}]}}],"ToppingList":[["Pepperoni"]],"$instance":{"Order":[{"type":"Order","text":"two large pepperoni pizzas on thin crust","startIndex":7,"length":40,"score":0.9047088,"modelTypeId":1,"modelType":"Entity Extractor","recognitionSources":["model"]}],"ToppingList":[{"type":"ToppingList","text":"pepperoni","startIndex":17,"length":9,"modelTypeId":5,"modelType":"List Entity Extractor","recognitionSources":["model"]}]}}}}JSON-svar formaterat för läsbarhet:
{ "query": "I want two large pepperoni pizzas on thin crust please", "prediction": { "topIntent": "ModifyOrder", "intents": { "ModifyOrder": { "score": 1.0 }, "None": { "score": 8.55e-9 }, "Greetings": { "score": 1.82222226e-9 }, "CancelOrder": { "score": 1.47272727e-9 }, "Confirmation": { "score": 9.8125e-10 } }, "entities": { "Order": [ { "FullPizzaWithModifiers": [ { "PizzaType": [ "pepperoni pizzas" ], "Size": [ [ "Large" ] ], "Quantity": [ 2 ], "Crust": [ [ "Thin" ] ], "$instance": { "PizzaType": [ { "type": "PizzaType", "text": "pepperoni pizzas", "startIndex": 17, "length": 16, "score": 0.9978157, "modelTypeId": 1, "modelType": "Entity Extractor", "recognitionSources": [ "model" ] } ], "Size": [ { "type": "SizeList", "text": "large", "startIndex": 11, "length": 5, "score": 0.9984481, "modelTypeId": 1, "modelType": "Entity Extractor", "recognitionSources": [ "model" ] } ], "Quantity": [ { "type": "builtin.number", "text": "two", "startIndex": 7, "length": 3, "score": 0.999770939, "modelTypeId": 1, "modelType": "Entity Extractor", "recognitionSources": [ "model" ] } ], "Crust": [ { "type": "CrustList", "text": "thin crust", "startIndex": 37, "length": 10, "score": 0.933985531, "modelTypeId": 1, "modelType": "Entity Extractor", "recognitionSources": [ "model" ] } ] } } ], "$instance": { "FullPizzaWithModifiers": [ { "type": "FullPizzaWithModifiers", "text": "two large pepperoni pizzas on thin crust", "startIndex": 7, "length": 40, "score": 0.90681237, "modelTypeId": 1, "modelType": "Entity Extractor", "recognitionSources": [ "model" ] } ] } } ], "ToppingList": [ [ "Pepperoni" ] ], "$instance": { "Order": [ { "type": "Order", "text": "two large pepperoni pizzas on thin crust", "startIndex": 7, "length": 40, "score": 0.9047088, "modelTypeId": 1, "modelType": "Entity Extractor", "recognitionSources": [ "model" ] } ], "ToppingList": [ { "type": "ToppingList", "text": "pepperoni", "startIndex": 17, "length": 9, "modelTypeId": 5, "modelType": "List Entity Extractor", "recognitionSources": [ "model" ] } ] } } } }
Rensa resurser
Du kan ta bort appen från LUIS-portalen och ta bort Azure-resurserna från Azure Portal.
Om du använder REST API tar du bort filen från filsystemet när du är klar ExampleUtterances.JSON med snabbstarten.
Felsökning
- Autentisering till klientbiblioteket – autentiseringsfel indikerar vanligtvis att fel nyckel & slutpunkten användes. Den här snabbstarten använder redigeringsnyckeln och slutpunkten för förutsägelsekörningen som en bekvämlighet, men fungerar bara om du inte redan har använt den månatliga kvoten. Om du inte kan använda redigeringsnyckeln och slutpunkten måste du använda förutsägelsekörningsnyckeln och slutpunkten vid åtkomst till SDK-klientbiblioteket för förutsägelsekörningen.
- Skapa entiteter – om du får ett felmeddelande om att skapa den kapslade maskininlärningsentiteten som används i den här självstudien ska du kopiera koden och inte ändra koden för att skapa en annan entitet.
- Skapa exempelyttranden – om du får ett felmeddelande om att skapa det märkta exempelyttrandet som används i den här självstudien ska du se till att du kopierade koden och inte ändrade koden för att skapa ett annat märkt exempel.
- Träning – om du får ett träningsfel indikerar detta vanligtvis en tom app (inga avsikter med exempelyttranden) eller en app med avsikter eller entiteter som är felaktiga.
- Diverse fel – eftersom koden anropar klientbiblioteken med text och JSON-objekt kontrollerar du att du inte har ändrat koden.
Andra fel – om du får ett fel som inte tas upp i föregående lista kan du ge oss feedback längst ned på den här sidan. Inkludera programmeringsspråket och versionen för de klientbibliotek som du har installerat.