Share via


Sentiment analyseren met behulp van de ML.NET CLI

Meer informatie over het gebruik van ML.NET CLI om automatisch een ML.NET model en onderliggende C#-code te genereren. U geeft uw gegevensset en de machine learning-taak op die u wilt implementeren, en de CLI gebruikt de AutoML-engine om de broncode voor het genereren en implementeren van het model en het classificatiemodel te maken.

In deze zelfstudie voert u de volgende stappen uit:

  • Uw gegevens voorbereiden voor de geselecteerde machine learning-taak
  • Voer de opdracht mlnet-classificatie uit vanuit de CLI
  • De resultaten van metrische kwaliteitsgegevens controleren
  • Inzicht in de gegenereerde C#-code voor het gebruik van het model in uw toepassing
  • De gegenereerde C#-code verkennen die is gebruikt om het model te trainen

Notitie

Dit onderwerp verwijst naar het ML.NET CLI-hulpprogramma, dat momenteel in preview is en materiaal kan worden gewijzigd. Ga naar de pagina ML.NET voor meer informatie.

De ML.NET CLI maakt deel uit van ML.NET en het belangrijkste doel is het 'democratiseren' van ML.NET voor .NET-ontwikkelaars bij het leren van ML.NET, zodat u niet helemaal opnieuw hoeft te coderen om aan de slag te gaan.

U kunt de ML.NET CLI uitvoeren op elke opdrachtprompt (Windows, Mac of Linux) om ML.NET modellen en broncode van goede kwaliteit te genereren op basis van trainingsgegevenssets die u opgeeft.

Vereisten

U kunt de gegenereerde C#-codeprojecten uitvoeren vanuit Visual Studio of met dotnet run (.NET CLI).

Uw gegevens voorbereiden

We gaan een bestaande gegevensset gebruiken die wordt gebruikt voor een 'Sentimentanalyse'-scenario. Dit is een machine learning-taak voor binaire classificatie. U kunt uw eigen gegevensset op een vergelijkbare manier gebruiken en het model en de code worden voor u gegenereerd.

  1. Download het zip-bestand van de UCI Sentiment Labeled Sentences-gegevensset (zie bronvermeldingen in de volgende opmerking) en pak het uit in elke map die u kiest.

    Notitie

    De gegevenssets in deze zelfstudie gebruiken een gegevensset uit de 'Van groep naar afzonderlijke labels met behulp van diepe functies', Kotzias et al,. KDD 2015, en gehost op de UCI Machine Learning Repository - Dua, D. and Karra Taniskidou, E. (2017). UCI Machine Learning Repository [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.

  2. Kopieer het yelp_labelled.txt bestand naar een map die u eerder hebt gemaakt (zoals /cli-test).

  3. Open de opdrachtprompt van uw voorkeur en ga naar de map waarin u het gegevenssetbestand hebt gekopieerd. Bijvoorbeeld:

    cd /cli-test
    

    Met een teksteditor, zoals Visual Studio Code, kunt u het yelp_labelled.txt gegevenssetbestand openen en verkennen. U kunt zien dat de structuur is:

    • Het bestand heeft geen header. U gebruikt de index van de kolom.

    • Er zijn slechts twee kolommen:

      Tekst (kolomindex 0) Label (kolomindex 1)
      Wow... Hield van deze plek. 1
      Korst is niet goed. 0
      Niet lekker en de textuur was gewoon vervelend. 0
      ... NOG VEEL MEER TEKSTRIJEN... ... (1 of 0)...

    Zorg ervoor dat u het gegevenssetbestand sluit vanuit de editor.

    U bent nu klaar om de CLI te gaan gebruiken voor dit scenario voor sentimentanalyse.

    Notitie

    Nadat u deze zelfstudie hebt voltooid, kunt u ook proberen met uw eigen gegevenssets zolang deze gereed zijn om te worden gebruikt voor een van de ML-taken die momenteel worden ondersteund door de ML.NET CLI Preview. Dit zijn binaire classificatie, classificatie, regressie en aanbeveling.

Voer de opdracht mlnet-classificatie uit

  1. Voer de volgende ML.NET CLI-opdracht uit:

    mlnet classification --dataset "yelp_labelled.txt" --label-col 1 --has-header false --train-time 10
    

    Met deze opdracht wordt de mlnet classification opdracht uitgevoerd:

    • voor de ML-taak van classificatie
    • gebruikt het gegevenssetbestand yelp_labelled.txt als trainings- en testgegevensset (intern gebruikt de CLI kruisvalidatie of splitst het in twee gegevenssets, één voor training en één voor testen)
    • waarbij de doelstelling/doelkolom die u wilt voorspellen (meestal label genoemd) de kolom met index 1 is (dat is de tweede kolom, omdat de index op nul is gebaseerd)
    • gebruikt geen bestandskop met kolomnamen, omdat dit specifieke gegevenssetbestand geen koptekst heeft
    • de beoogde verkennings-/trainingstijd voor het experiment is 10 seconden

    U ziet uitvoer van de CLI, vergelijkbaar met:

    ML.NET CLI-classificatie in PowerShell

    In dit specifieke geval, in slechts 10 seconden en met de kleine gegevensset, kon het CLI-hulpprogramma nogal wat iteraties uitvoeren, wat betekent dat het meerdere keren trainen op basis van verschillende combinaties van algoritmen/configuratie met verschillende interne gegevenstransformaties en hyperparameters van het algoritme.

    Ten slotte is het model van de 'beste kwaliteit' dat in 10 seconden wordt gevonden een model met een bepaalde trainer/algoritme met een specifieke configuratie. Afhankelijk van de verkenningstijd kan de opdracht een ander resultaat opleveren. De selectie is gebaseerd op de meerdere metrische gegevens die worden weergegeven, zoals Accuracy.

    Inzicht in de metrische kwaliteitsgegevens van het model

    De eerste en eenvoudigste metrische waarde om een model voor binaire classificatie te evalueren, is de nauwkeurigheid, die eenvoudig te begrijpen is. "Nauwkeurigheid is het aandeel van de juiste voorspellingen met een testgegevensset.". Hoe dichter bij 100% (1,00), hoe beter.

    Er zijn echter gevallen waarin alleen meten met de meetwaarde Nauwkeurigheid niet voldoende is, met name wanneer het label (in dit geval 0 en 1) niet in balans is in de testgegevensset.

    Zie Inzicht in metrische ML.NET voor aanvullende metrische gegevens en gedetailleerdere informatie over de metrische gegevens, zoals Nauwkeurigheid, AUCPR en F1-score die worden gebruikt om de verschillende modellen te evalueren.

    Notitie

    U kunt dezelfde gegevensset proberen en een paar minuten opgeven voor --max-exploration-time (bijvoorbeeld drie minuten, zodat u 180 seconden opgeeft) om een beter 'beste model' voor u te vinden met een andere configuratie voor de trainingspijplijn voor deze gegevensset (die vrij klein is, 1000 rijen).

    Als u een model met de beste/goede kwaliteit wilt vinden dat een 'productieklaar model' is dat is gericht op grotere gegevenssets, moet u experimenten uitvoeren met de CLI die meestal veel meer verkenningstijd opgeeft, afhankelijk van de grootte van de gegevensset. In veel gevallen is het zelfs mogelijk dat u meerdere uren verkenningstijd nodig hebt, vooral als de gegevensset groot is in rijen en kolommen.

  2. Bij de uitvoering van de vorige opdracht zijn de volgende assets gegenereerd:

    • Een geserialiseerd model .zip ('beste model') klaar voor gebruik.
    • C#-code voor het uitvoeren/scoren van het gegenereerde model (om voorspellingen te doen in uw eindgebruikers-apps met dat model).
    • C#-trainingscode die wordt gebruikt om dat model te genereren (Leerdoeleinden).
    • Een logboekbestand met alle iteraties die zijn verkend, met specifieke gedetailleerde informatie over elk algoritme dat is geprobeerd met de combinatie van hyperparameters en gegevenstransformaties.

    De eerste twee assets (.ZIP bestandsmodel en C#-code om dat model uit te voeren) kunnen rechtstreeks worden gebruikt in uw eindgebruikers-apps (ASP.NET Core web-app, services, desktop-app, enzovoort) om voorspellingen te doen met dat gegenereerde ML-model.

    De derde asset, de trainingscode, laat zien welke ML.NET API-code door de CLI is gebruikt om het gegenereerde model te trainen, zodat u kunt onderzoeken welke specifieke trainer/algoritme en hyperparameters door de CLI zijn geselecteerd.

Deze opgesomde assets worden uitgelegd in de volgende stappen van de zelfstudie.

De gegenereerde C#-code verkennen die moet worden gebruikt voor het uitvoeren van het model om voorspellingen te doen

  1. Open in Visual Studio de oplossing die is gegenereerd in de map met de naam SampleClassification in de oorspronkelijke doelmap (deze werd in de zelfstudie genoemd /cli-test ). Als het goed is, ziet u een oplossing die lijkt op:

    VS-oplossing die is gegenereerd door de CLI

    Notitie

    In de zelfstudie raden we u aan Visual Studio te gebruiken, maar u kunt ook de gegenereerde C#-code (twee projecten) verkennen met een teksteditor en de gegenereerde console-app uitvoeren met de dotnet CLI op een macOS-, Linux- of Windows-computer.

    • De gegenereerde console-app bevat uitvoeringscode die u moet controleren en vervolgens gebruikt u de scorecode (code waarmee het ML-model wordt uitgevoerd om voorspellingen te doen) door die eenvoudige code (slechts een paar regels) te verplaatsen naar uw eindgebruikerstoepassing waar u de voorspellingen wilt doen.
    • Het gegenereerde mbconfig-bestand is een configuratiebestand dat kan worden gebruikt om uw model opnieuw te trainen, via de CLI of via Model Builder. Er zijn ook twee codebestanden aan gekoppeld en een zip-bestand.
      • Het trainingsbestand bevat de code voor het bouwen van de modelpijplijn met behulp van de ML.NET-API.
      • Het verbruiksbestand bevat de code om het model te gebruiken.
      • Het ZIP-bestand dat het gegenereerde model van de CLI is.
  2. Open het bestand SampleClassification.consumption.cs in het mbconfig-bestand . U ziet dat er invoer- en uitvoerklassen zijn. Dit zijn gegevensklassen, of POCO-klassen, die worden gebruikt voor het opslaan van gegevens. De klassen bevatten standaardcode die handig is als uw gegevensset tientallen of zelfs honderden kolommen bevat.

    • De ModelInput klasse wordt gebruikt bij het lezen van gegevens uit de gegevensset.
    • De ModelOutput klasse wordt gebruikt om het voorspellingsresultaat (voorspellingsgegevens) op te halen.
  3. Open het bestand Program.cs en verken de code. Met slechts een paar regels kunt u het model uitvoeren en een voorbeeldvoorspelling doen.

    static void Main(string[] args)
    {
        // Create single instance of sample data from first line of dataset for model input
        ModelInput sampleData = new ModelInput()
        {
            Col0 = @"Wow... Loved this place.",
        };
    
        // Make a single prediction on the sample data and print results
        var predictionResult = SampleClassification.Predict(sampleData);
    
        Console.WriteLine("Using model to make single prediction -- Comparing actual Col1 with predicted Col1 from sample data...\n\n");
        Console.WriteLine($"Col0: {sampleData.Col0}");
        Console.WriteLine($"\n\nPredicted Col1 value {predictionResult.PredictedLabel} \nPredicted Col1 scores: [{String.Join(",", predictionResult.Score)}]\n\n");
        Console.WriteLine("=============== End of process, hit any key to finish ===============");
        Console.ReadKey();
    }
    
    • Met de eerste regels code wordt één voorbeeldgegevens gemaakt, in dit geval op basis van de eerste rij van uw gegevensset die moet worden gebruikt voor de voorspelling. U kunt ook uw eigen 'in code vastgelegde' gegevens maken door de code bij te werken:

      ModelInput sampleData = new ModelInput()
      {
          Col0 = "The ML.NET CLI is great for getting started. Very cool!"
      };
      
    • De volgende regel code gebruikt de SampleClassification.Predict() methode voor de opgegeven invoergegevens om een voorspelling te doen en de resultaten te retourneren (op basis van het schema ModelOutput.cs).

    • Met de laatste regels code worden de eigenschappen van de voorbeeldgegevens (in dit geval de opmerking) en de sentimentvoorspelling en de bijbehorende scores voor positief gevoel (1) en negatief gevoel (2) afgedrukt.

  4. Voer het project uit met behulp van de oorspronkelijke voorbeeldgegevens die zijn geladen uit de eerste rij van de gegevensset of door uw eigen, in code vastgelegde voorbeeldgegevens op te geven. U moet een voorspelling krijgen die vergelijkbaar is met:

ML.NET CLI de app uitvoeren vanuit Visual Studio)

  1. Wijzig de in code vastgelegde voorbeeldgegevens in andere zinnen met een ander gevoel en bekijk hoe het model positief of negatief sentiment voorspelt.

Uw eindgebruikerstoepassingen voorzien van ml-modelvoorspellingen

U kunt vergelijkbare scorecode voor ml-modellen gebruiken om het model uit te voeren in uw eindgebruikerstoepassing en voorspellingen te doen.

U kunt die code bijvoorbeeld rechtstreeks verplaatsen naar een Windows-bureaubladtoepassing zoals WPF en WinForms en het model op dezelfde manier uitvoeren als in de console-app.

De manier waarop u deze regels code implementeert om een ML-model uit te voeren, moet echter worden geoptimaliseerd (dat wil gezegd, het model in de cache opslaan .zip bestand en het eenmaal laden) en moet beschikken over singleton-objecten in plaats van ze bij elke aanvraag te maken, met name als uw toepassing schaalbaar moet zijn, zoals een webtoepassing of gedistribueerde service, zoals wordt uitgelegd in de volgende sectie.

ML.NET-modellen uitvoeren in schaalbare ASP.NET Core web-apps en -services (apps met meerdere threads)

Het maken van het modelobject (ITransformer geladen vanuit het .zip-bestand van een model) en het PredictionEngine object moeten worden geoptimaliseerd, met name wanneer het wordt uitgevoerd op schaalbare web-apps en gedistribueerde services. In het eerste geval is het modelobject (ITransformer) de optimalisatie eenvoudig. Omdat het ITransformer object thread-veilig is, kunt u het object in de cache opslaan als een singleton of statisch object, zodat u het model eenmaal laadt.

Voor het tweede object, het PredictionEngine object, is het niet zo eenvoudig omdat het PredictionEngine object niet thread-veilig is. Daarom kunt u dit object niet instantiëren als singleton of statisch object in een ASP.NET Core-app. Dit probleem met thread-veilig en schaalbaarheid wordt uitgebreid besproken in dit blogbericht.

Het is echter een stuk eenvoudiger voor je dan wat in dat blogbericht wordt uitgelegd. We hebben voor u gewerkt aan een eenvoudigere aanpak en hebben een mooi .NET Core Integration Package gemaakt dat u eenvoudig kunt gebruiken in uw ASP.NET Core apps en services door het te registreren in de di-services van de toepassing (Dependency Injection Services) en het vervolgens rechtstreeks te gebruiken vanuit uw code. Raadpleeg de volgende zelfstudie en het voorbeeld om dit te doen:

Verken de gegenereerde C#-code die is gebruikt om het model van de beste kwaliteit te trainen

Voor meer geavanceerde leerdoeleinden kunt u ook de gegenereerde C#-code verkennen die door het CLI-hulpprogramma is gebruikt om het gegenereerde model te trainen.

Die trainingsmodelcode wordt gegenereerd in het bestand met de naam SampleClassification.training.cs, zodat u die trainingscode kunt onderzoeken.

Belangrijker is dat u voor dit specifieke scenario (sentimentanalysemodel) ook die gegenereerde trainingscode kunt vergelijken met de code die in de volgende zelfstudie wordt uitgelegd:

Het is interessant om het gekozen algoritme en de pijplijnconfiguratie in de zelfstudie te vergelijken met de code die is gegenereerd door het CLI-hulpprogramma. Afhankelijk van hoeveel tijd u besteedt aan het herhalen en zoeken naar betere modellen, kan het gekozen algoritme verschillen, samen met de specifieke hyperparameters en pijplijnconfiguratie.

In deze zelfstudie heeft u het volgende geleerd:

  • Uw gegevens voorbereiden voor de geselecteerde ML-taak (op te lossen probleem)
  • Voer de opdracht mlnet-classificatie uit in het CLI-hulpprogramma
  • De resultaten van metrische kwaliteitsgegevens bekijken
  • Inzicht in de gegenereerde C#-code voor het uitvoeren van het model (code voor gebruik in uw eindgebruikers-app)
  • Verken de gegenereerde C#-code die is gebruikt voor het trainen van het model van de beste kwaliteit (verdiendoeleinden)

Zie ook