Delen via


Testen op LUIS DevOps

Belangrijk

LUIS wordt op 1 oktober 2025 buiten gebruik gesteld en vanaf 1 april 2023 kunt u geen nieuwe LUIS-resources maken. We raden u aan uw LUIS-toepassingen te migreren naar gesprekstaalbegrip om te profiteren van continue productondersteuning en meertalige mogelijkheden.

Softwaretechnici die een LUIS-app (Language Understanding) ontwikkelen, kunnen DevOps-procedures toepassen op broncodebeheer, geautomatiseerde builds, testen en releasebeheer door deze richtlijnen te volgen.

In flexibele softwareontwikkelingsmethodologieën speelt testen een integrale rol bij het bouwen van kwaliteitssoftware. Elke belangrijke wijziging in een LUIS-app moet vergezeld gaan van tests die zijn ontworpen om de nieuwe functionaliteit te testen die de ontwikkelaar in de app bouwt. Deze tests worden samen met de .lu bron van uw LUIS-app ingecheckt in uw opslagplaats voor broncode. De implementatie van de wijziging is voltooid wanneer de app voldoet aan de tests.

Tests zijn een essentieel onderdeel van CI/CD-werkstromen. Wanneer wijzigingen in een LUIS-app worden voorgesteld in een pull-aanvraag (PR) of nadat wijzigingen zijn samengevoegd in uw hoofdvertakking, moeten CI-werkstromen de tests uitvoeren om te controleren of de updates geen regressies hebben veroorzaakt.

Eenheidstests en Batch-tests uitvoeren

Er zijn twee verschillende soorten tests voor een LUIS-app die u moet uitvoeren in werkstromen voor continue integratie:

  • Eenheidstests: relatief eenvoudige tests die de belangrijkste functionaliteit van uw LUIS-app controleren. Een eenheidstest wordt doorgegeven wanneer de verwachte intentie en de verwachte entiteiten worden geretourneerd voor een bepaalde testuiting. Alle eenheidstests moeten worden doorgegeven om de testuitvoering te voltooien.
    Dit soort tests is vergelijkbaar met interactieve tests die u in de LUIS-portal kunt uitvoeren.

  • Batch-tests: Batch-testen is een uitgebreide test op uw huidige getrainde model om de prestaties ervan te meten. In tegenstelling tot eenheidstests is batchtests niet geslaagd|mislukt. De verwachting met batchtests is niet dat elke test de verwachte intentie en verwachte entiteiten retourneert. In plaats daarvan helpt een batchtest u bij het weergeven van de nauwkeurigheid van elke intentie en entiteit in uw app en helpt u bij het vergelijken in de loop van de tijd wanneer u verbeteringen aanbrengt.
    Dit soort tests is hetzelfde als de Batch-tests die u interactief kunt uitvoeren in de LUIS-portal.

U kunt eenheidstests gebruiken vanaf het begin van uw project. Batchtests zijn slechts echt van waarde zodra u het schema van uw LUIS-app hebt ontwikkeld en u werkt aan het verbeteren van de nauwkeurigheid ervan.

Voor zowel eenheidstests als batchtests moet u ervoor zorgen dat uw testuitingen gescheiden blijven van uw trainingsuitingen. Als u test op dezelfde gegevens waarop u traint, krijgt u de valse indruk dat uw app goed presteert wanneer deze overfitting is voor de testgegevens. Tests moeten niet zichtbaar zijn door het model om te testen hoe goed het is generaliseren.

Tests schrijven

Wanneer u een set tests schrijft, moet u voor elke test het volgende definiëren:

  • Uiting testen
  • Verwachte intentie
  • Verwachte entiteiten.

Gebruik de syntaxis van het LUIS-batchbestand om een groep tests in een bestand met JSON-indeling te definiëren. Voorbeeld:

[
  {
    "text": "example utterance goes here",
    "intent": "intent name goes here",
    "entities":
    [
        {
            "entity": "entity name 1 goes here",
            "startPos": 14,
            "endPos": 23
        },
        {
            "entity": "entity name 2 goes here",
            "startPos": 14,
            "endPos": 23
        }
    ]
  }
]

Sommige testhulpprogramma's, zoals NLU. DevOps biedt ook ondersteuning voor met LUDown opgemaakte testbestanden.

Eenheidstests ontwerpen

Eenheidstests moeten zijn ontworpen om de kernfunctionaliteit van uw LUIS-app te testen. In elke iteratie of sprint van uw app-ontwikkeling moet u een voldoende aantal tests schrijven om te controleren of de belangrijkste functionaliteit die u in die iteratie implementeert, correct werkt.

In elke eenheidstest kunt u voor een bepaalde testuiting het volgende doen:

  • Testen of de juiste intentie wordt geretourneerd
  • Test of de belangrijkste entiteiten , de entiteiten die essentieel zijn voor uw oplossing, worden geretourneerd.
  • Test of de voorspellingsscore voor intentie en entiteiten een drempelwaarde overschrijdt die u definieert. U kunt bijvoorbeeld besluiten dat u alleen denkt dat een test is geslaagd als de voorspellingsscore voor de intentie en voor uw sleutelentiteiten groter is dan 0,75.

In eenheidstests is het een goed idee om te testen of uw belangrijkste entiteiten zijn geretourneerd in het voorspellingsantwoord, maar om fout-positieven te negeren. Fout-positieven zijn entiteiten die worden gevonden in het voorspellingsantwoord , maar die niet zijn gedefinieerd in de verwachte resultaten voor uw test. Als u fout-positieven negeert, is het minder onintensief om eenheidstests te maken, terwijl u zich nog steeds kunt concentreren op testen of de gegevens die essentieel zijn voor uw oplossing worden geretourneerd in een voorspellingsantwoord.

Tip

De NLU. Het DevOps-hulpprogramma ondersteunt al uw LUIS-testbehoeften. De compare opdracht die wordt gebruikt in de eenheidstestmodus , bevestigt dat alle tests slagen en negeert fout-positieve resultaten voor entiteiten die niet zijn gelabeld in de verwachte resultaten.

Batch-tests ontwerpen

Batch-testsets moeten een groot aantal testcases bevatten, ontworpen om alle intenties en alle entiteiten in uw LUIS-app te testen. Zie Batch-tests in de LUIS-portal voor informatie over het definiëren van een batchtestset.

Tests uitvoeren

De LUIS-portal biedt functies voor interactieve tests:

  • Met interactief testen kunt u een voorbeelduiting verzenden en een antwoord krijgen van door LUIS herkende intenties en entiteiten. U controleert het succes van de test door visuele inspectie.

  • Batch-tests maken gebruik van een batchtestbestand als invoer om uw actieve getrainde versie te valideren om de nauwkeurigheid van de voorspelling te meten. Met een batchtest kunt u de nauwkeurigheid van elke intentie en entiteit in uw actieve versie bekijken, waarbij resultaten met een grafiek worden weergegeven.

Tests uitvoeren in een geautomatiseerde buildwerkstroom

De interactieve testfuncties in de LUIS-portal zijn nuttig, maar voor DevOps zijn geautomatiseerde tests die worden uitgevoerd in een CI/CD-werkstroom bepaalde vereisten:

  • Testhulpprogramma's moeten worden uitgevoerd in een werkstroomstap op een buildserver. Dit betekent dat de hulpprogramma's moeten kunnen worden uitgevoerd op de opdrachtregel.
  • De testhulpprogramma's moeten een groep tests kunnen uitvoeren op basis van een eindpunt en automatisch de verwachte resultaten controleren op basis van de werkelijke resultaten.
  • Als de tests mislukken, moeten de testhulpprogramma's een statuscode retourneren om de werkstroom te stoppen en de build uit te voeren.

LUIS biedt geen opdrachtregelprogramma of een API op hoog niveau die deze functies biedt. U wordt aangeraden de NLU te gebruiken. DevOps-hulpprogramma voor het uitvoeren van tests en het controleren van resultaten, zowel op de opdrachtregel als tijdens geautomatiseerde tests binnen een CI/CD-werkstroom.

De testmogelijkheden die beschikbaar zijn in de LUIS-portal vereisen geen gepubliceerd eindpunt en maken deel uit van de ontwerpmogelijkheden van LUIS. Wanneer u tests implementeert in een geautomatiseerde buildwerkstroom, moet u de luis-app-versie publiceren om te worden getest op een eindpunt, zodat testhulpprogramma's zoals NLU. DevOps kan voorspellingsaanvragen verzenden als onderdeel van het testen.

Tip

  • Als u uw eigen testoplossing implementeert en code schrijft om testuitingen naar een eindpunt te verzenden, moet u er rekening mee houden dat als u de LUIS-ontwerpsleutel gebruikt, de toegestane transactiesnelheid beperkt is tot 5TPS. Beperk de verzendsnelheid of gebruik in plaats daarvan een voorspellingssleutel.
  • Wanneer u testquery's naar een eindpunt verzendt, moet u deze gebruiken log=false in de querytekenreeks van uw voorspellingsaanvraag. Dit zorgt ervoor dat uw testuitingen niet worden geregistreerd door LUIS en uiteindelijk in de lijst met eindpuntuitingen worden weergegeven die worden gepresenteerd door de luis-functie voor actief leren en als gevolg hiervan per ongeluk worden toegevoegd aan de trainingsuitingen van uw app.

Eenheidstests uitvoeren op de opdrachtregel en in CI/CD-werkstromen

U kunt de NLU gebruiken. DevOps-pakket voor het uitvoeren van tests op de opdrachtregel:

  • Gebruik de NLU. DevOps-testopdracht voor het verzenden van tests van een testbestand naar een eindpunt en het vastleggen van de werkelijke voorspellingsresultaten in een bestand.
  • Gebruik de NLU. DevOps compare command to compare the actual results with the expected results defined in the input test file. De compare opdracht genereert NUnit-testuitvoer, en wanneer deze wordt gebruikt in de eenheidstestmodus met behulp van de --unit-test vlag, bevestigt u dat alle tests slagen.

Batch-tests uitvoeren op de opdrachtregel en in CI/CD-werkstromen

U kunt ook de NLU gebruiken. DevOps-pakket voor het uitvoeren van batchtests op de opdrachtregel.

  • Gebruik de NLU. DevOps-testopdracht voor het verzenden van tests van een testbestand naar een eindpunt en het vastleggen van de werkelijke voorspellingsresultaten in een bestand, hetzelfde als met eenheidstests.
  • Gebruik de NLU. DevOps vergelijk opdracht in de prestatietestmodus om de prestaties van uw app te meten. U kunt ook de prestaties van uw app vergelijken met een basislijnprestatiebenchmark, bijvoorbeeld de resultaten van de meest recente doorvoer naar de hoofdversie of de huidige release. In de prestatietestmodus genereert de compare opdracht NUnit-testuitvoer en batchtestresultaten in JSON-indeling.

LUIS niet-deterministische training en het effect op testen

Wanneer LUIS een model traint, zoals een intentie, heeft het zowel positieve gegevens nodig( de gelabelde trainingsuitingen die u hebt opgegeven om de app te trainen voor het model - en negatieve gegevens - gegevens die geen geldige voorbeelden zijn van het gebruik van dat model. Tijdens de training bouwt LUIS de negatieve gegevens van het ene model op van alle positieve gegevens die u hebt opgegeven voor de andere modellen, maar in sommige gevallen kan dit een onevenwichtige gegevens opleveren. Om deze onevenwichtigheid te voorkomen, steekt LUIS een subset van de negatieve gegevens op een niet-deterministische manier uit om te optimaliseren voor een beter evenwichtige trainingsset, verbeterde modelprestaties en snellere trainingstijd.

Het resultaat van deze niet-deterministische training is dat u mogelijk een iets andere voorspellingsreactie krijgt tussen verschillende trainingssessies, meestal voor intenties en/of entiteiten waarbij de voorspellingsscore niet hoog is.

Als u niet-deterministische training wilt uitschakelen voor die LUIS-app-versies die u bouwt voor het testen, gebruikt u de API voor versie-instellingen met de UseAllTrainingData instelling ingesteld op true .

Volgende stappen