Hangulat elemzése a ML.NET parancssori felület használatával

Megtudhatja, hogyan hozhat létre automatikusan ML.NET modellt és mögöttes C#-kódot ML.NET CLI használatával. Meg kell adnia az adathalmazt és a megvalósítandó gépi tanulási feladatot, és a parancssori felület az AutoML-motorral hozza létre a modellgenerálási és üzembehelyezési forráskódot, valamint a besorolási modellt.

Ebben az oktatóanyagban a következő lépéseket fogja elvégezni:

  • Adatok előkészítése a kiválasztott gépi tanulási feladatra
  • Futtassa az "mlnet classification" parancsot a parancssori felületről
  • A minőségi metrikák eredményeinek áttekintése
  • A létrehozott C#-kód megismerése a modell alkalmazásbeli használatához
  • A modell betanítása során létrehozott C#-kód megismerése

Megjegyzés

Ez a témakör a jelenleg előzetes verzióban elérhető ML.NET CLI-eszközre vonatkozik, és az anyag változhat. További információért látogasson el a ML.NET oldalra.

A ML.NET CLI a ML.NET része, és fő célja a .NET-fejlesztők számára ML.NET "demokratizálása" ML.NET elsajátításakor, hogy ne kelljen az alapoktól kódolnia az első lépésekhez.

A ML.NET parancssori felületét bármely parancssorban (Windows, Mac vagy Linux) futtathatja, hogy jó minőségű ML.NET modelleket és forráskódot hozzon létre az Ön által megadott betanítási adatkészletek alapján.

Előfeltételek

A létrehozott C#-kódprojekteket futtathatja a Visual Studióból vagy a (.NET CLI)-vel dotnet run .

Adatok előkészítése

Egy meglévő adatkészletet fogunk használni egy hangulatelemzési forgatókönyvhöz, amely egy bináris besorolású gépi tanulási feladat. Hasonló módon használhatja saját adathalmazát, és a modell és a kód létrejön Önnek.

  1. Töltse le az UCI Sentiment Labeled Sentences (Mondatok) adatkészlet zip-fájlját (lásd az idézeteket az alábbi megjegyzésben) és csomagolja ki a kívánt mappából.

    Megjegyzés

    Az oktatóanyagban szereplő adathalmazok a Kotzias et alcímkék "A csoporttól az egyéni címkékig mély jellemzőkkel" című cikkből származó adatkészletet használnak. KDD 2015, üzemeltetve az UCI Machine Learning Adattárban – Dua, D. és Karra Taniskidou, E. (2017). UCI Machine Learning-adattár [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.

  2. Másolja a fájlt bármely yelp_labelled.txt korábban létrehozott mappába (például /cli-test).

  3. Nyissa meg az előnyben részesített parancssort, és lépjen arra a mappára, ahová az adathalmazfájlt másolta. Például:

    cd /cli-test
    

    Bármilyen szövegszerkesztővel, például a Visual Studio Code-dal megnyithatja és megvizsgálhatja az yelp_labelled.txt adathalmazfájlt. Láthatja, hogy a struktúra a következő:

    • A fájlnak nincs fejléce. Az oszlop indexét fogja használni.

    • Csak két oszlop van:

      Szöveg (oszlopindex 0) Címke (1. oszlopindex)
      Wow... Imádtam ezt a helyet. 1
      A kéreg nem jó. 0
      Nem ízletes, és a textúra csak csúnya volt. 0
      ... MÉG SOK SZÖVEGSOR... ... (1 vagy 0)...

    Zárja be az adathalmazfájlt a szerkesztőből.

    Most már készen áll arra, hogy elkezdje használni a parancssori felületet ehhez a hangulatelemzési forgatókönyvhöz.

    Megjegyzés

    Az oktatóanyag befejezése után saját adathalmazokkal is próbálkozhat, feltéve, hogy készen állnak a ML.NET CLI előzetes verziójában jelenleg támogatott ml-feladatokra, amelyek a következők: "Bináris besorolás", "Besorolás", "Regresszió" és "Javaslat".

Futtassa az "mlnet classification" parancsot

  1. Futtassa a következő ML.NET CLI-parancsot:

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

    Ez a parancs a következő parancsot futtatjamlnet classification:

    • az ML besorolásifeladatához
    • az adathalmazfájlt yelp_labelled.txt használja betanítási és tesztelési adathalmazként (a parancssori felület belsőleg keresztérvényesítést fog használni, vagy két adathalmazra osztja fel, egyet betanításra, egyet pedig tesztelésre)
    • ahol az előrejelezni kívánt objektív/cél oszlop (általában címke) az 1 indexű oszlop (ez a második oszlop, mivel az index nulla alapú)
    • nem használ oszlopneveket tartalmazó fájlfejlécet , mivel ez az adatkészletfájl nem rendelkezik fejléccel
    • a kísérlet célzott feltárási/betanításai ideje10 másodperc

    A parancssori felület kimenete a következőhöz hasonlóan jelenik meg:

    ML.NET parancssori felület besorolása a PowerShellen

    Ebben a konkrét esetben mindössze 10 másodperc alatt és a kis adatkészlettel a CLI-eszköz elég sok iterációt tudott futtatni, ami azt jelenti, hogy az algoritmusok/konfigurációk különböző kombinációi és a különböző belső adatátalakítások és az algoritmus hiperparaméterei alapján többször is betanítást végzett.

    Végül a 10 másodperc alatt talált "legjobb minőségű" modell egy adott oktatót/algoritmust használó modell, bármilyen konfigurációval. A felderítési időtől függően a parancs más eredményt adhat. A kijelölés a megjelenített metrikákon alapul, például Accuracya következőn: .

    A modell minőségi metrikáinak megismerése

    A bináris besorolási modellek kiértékelésének első és legegyszerűbb metrikája a pontosság, amely könnyen érthető. "A pontosság a tesztadatkészlettel kapcsolatos helyes előrejelzések aránya." Minél közelebb van a 100%-hoz (1,00), annál jobb.

    Vannak azonban olyan esetek, amikor a pontossági metrikával való mérés nem elegendő, különösen akkor, ha a címke (ebben az esetben a 0 és az 1) kiegyensúlyozatlan a tesztadatkészletben.

    A különböző modellek kiértékeléséhez használt metrikákkal kapcsolatos további metrikákért és részletesebb információkért , mint például a Pontosság, az AUC, az AUCPR és az F1-pontszám, lásd: A ML.NET metrikák ismertetése.

    Megjegyzés

    Ugyanezt az adathalmazt kipróbálhatja, és megadhat néhány percet --max-exploration-time (például három percet, így 180 másodpercet), amely jobb "legjobb modellt" fog találni az adathalmaz különböző betanítási folyamatkonfigurációjával (ami elég kicsi, 1000 sor).

    Annak érdekében, hogy megtalálja a "legjobb/jó minőségű" modellt, amely egy "éles üzemre kész modell", amely nagyobb adatkészleteket céloz meg, érdemes kísérleteket végeznie a parancssori felülettel, amely általában sokkal több feltárási időt határoz meg az adathalmaz méretétől függően. Valójában sok esetben több órányi feltárási időre lehet szükség, különösen akkor, ha az adathalmaz nagy sorokon és oszlopokon.

  2. Az előző parancsvégrehajtás a következő objektumokat hozta létre:

    • A használatra kész szerializált modell .zip ("legjobb modell").
    • C#-kód a létrehozott modell futtatásához/pontozásához (Előrejelzés a végfelhasználói alkalmazásokban ezzel a modellel).
    • A modell létrehozásához használt C#-betanítási kód (tanulási célok).
    • Az összes iterációt tartalmazó naplófájl, amely részletes információkat tartalmaz az egyes algoritmusokról, amelyek a hiperparaméterek és az adatátalakítások kombinációjával próbálkoztak.

    Az első két adategység (.ZIP fájlmodell és a modell futtatására szolgáló C#-kód) közvetlenül használható a végfelhasználói alkalmazásokban (ASP.NET Core webalkalmazásokban, szolgáltatásokban, asztali alkalmazásokban stb.), hogy előrejelzéseket készítsen az adott ml-modellel.

    A harmadik objektum, a betanítási kód bemutatja, hogy a cli milyen ML.NET API-kódot használt a létrehozott modell betanításához, így megvizsgálhatja, hogy a CLI milyen konkrét oktatót/algoritmust és hiperparamétereket választott ki.

Ezeket az enumerált objektumokat az oktatóanyag alábbi lépései ismertetik.

A modell futtatásához használt generált C#-kód megismerése előrejelzések készítéséhez

  1. A Visual Studióban nyissa meg az eredeti célmappa nevű SampleClassification mappában létrehozott megoldást (az oktatóanyagban elnevezték /cli-test ). A következőhöz hasonló megoldást kell látnia:

    A parancssori felület által létrehozott VS-megoldás

    Megjegyzés

    Az oktatóanyagban a Visual Studio használatát javasoljuk, de a létrehozott C#-kódot (két projektet) bármilyen szövegszerkesztővel megvizsgálhatja, és futtathatja a létrehozott konzolalkalmazást a dotnet CLI macOS, Linux vagy Windows rendszerű gépen.

    • A létrehozott konzolalkalmazás végrehajtási kódot tartalmaz, amelyet felül kell vizsgálnia, majd általában újra felhasználhatja a "pontozási kódot" (amely az ML-modellt futtatja az előrejelzések készítéséhez) úgy, hogy ezt az egyszerű kódot (néhány sor) áthelyezi a végfelhasználói alkalmazásba, ahol az előrejelzéseket el szeretné végezni.
    • A létrehozott mbconfig fájl egy konfigurációs fájl, amely a modell újratanítására használható a parancssori felületen vagy a Modellszerkesztőn keresztül. Ehhez két kódfájl is hozzá lesz rendelve, valamint egy zip-fájl.
      • A betanítási fájl tartalmazza a modellfolyamat ML.NET API használatával történő összeállításához használt kódot.
      • A használati fájl tartalmazza a modell felhasználásához szükséges kódot.
      • A parancssori felületről létrehozott modell zip-fájlja.
  2. Nyissa meg a SampleClassification.consumption.cs fájlt az mbconfig fájlban. Látni fogja, hogy vannak bemeneti és kimeneti osztályok. Ezek adatosztályok vagy POCO-osztályok, amelyek az adatok tárolására szolgálnak. Az osztályok sablonkódot tartalmaznak, amely akkor hasznos, ha az adathalmaz több tíz vagy akár több száz oszlopból áll.

    • Az ModelInput osztályt az adatkészletből származó adatok beolvasásához használja a rendszer.
    • Az ModelOutput osztály az előrejelzési eredmény (előrejelzési adatok) lekérésére szolgál.
  3. Nyissa meg a Program.cs fájlt, és fedezze fel a kódot. Néhány sorban futtathatja a modellt, és elvégezhet egy minta előrejelzést.

    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();
    }
    
    • Az első kódsorok egyetlen mintaadatot hoznak létre, ebben az esetben az előrejelzéshez használni kívánt adathalmaz első sora alapján. A kód frissítésével saját ,,hard-coded" adatokat is létrehozhat:

      ModelInput sampleData = new ModelInput()
      {
          Col0 = "The ML.NET CLI is great for getting started. Very cool!"
      };
      
    • A következő kódsor a SampleClassification.Predict() megadott bemeneti adatok metódusával készít előrejelzést, és visszaadja az eredményeket (a ModelOutput.cs séma alapján).

    • Az utolsó kódsorok kinyomtatják a mintaadatok tulajdonságait (ebben az esetben a Megjegyzést), valamint a hangulat-előrejelzést és a megfelelő pontszámokat a pozitív (1) és a negatív hangulathoz (2).

  4. Futtassa a projektet az adathalmaz első sorából betöltött eredeti mintaadatokkal, vagy adja meg saját egyéni, kemény kóddal ellátott mintaadatait. A következőhöz hasonló előrejelzést kell kapnia:

ML.NET CLI futtassa az alkalmazást a Visual Studióból)

  1. Próbálja meg módosítani a nehezen kódolt mintaadatokat más, eltérő hangulatú mondatokra, és nézze meg, hogyan jelzi előre a modell a pozitív vagy negatív hangulatot.

A végfelhasználói alkalmazások infuse with ML model predictions

Hasonló "ML-modell pontozási kódjával" futtathatja a modellt a végfelhasználói alkalmazásban, és előrejelzéseket készíthet.

Ezt a kódot például közvetlenül áthelyezheti bármely asztali Windows-alkalmazásba, például a WPF-be és a WinFormsba , és ugyanúgy futtathatja a modellt, mint a konzolalkalmazásban.

A kódsorok ml-modell futtatásához való implementálásának azonban optimalizálva kell lennie (azaz gyorsítótáraznia kell a modellt .zip fájlt, és egyszer be kell töltenie), és egyetlenton objektumokkal kell rendelkeznie ahelyett, hogy minden kérésre létrehozna egy-egy objektumot, különösen akkor, ha az alkalmazásnak méretezhetőnek kell lennie, például egy webalkalmazásnak vagy egy elosztott szolgáltatásnak, az alábbi szakaszban leírtak szerint.

ML.NET modellek futtatása skálázható ASP.NET Core webalkalmazásokban és -szolgáltatásokban (többszálú alkalmazások)

A modellobjektum létrehozását (ITransformer amely a modell .zip fájljából töltődik be) és az PredictionEngine objektumot optimalizálni kell, különösen akkor, ha méretezhető webalkalmazásokon és elosztott szolgáltatásokon fut. Az első esetben a modellobjektum (ITransformer) az optimalizálás egyszerű. Mivel az ITransformer objektum szálbiztos, egyetlen vagy statikus objektumként gyorsítótárazhatja az objektumot, így egyszer betöltheti a modellt.

A második objektum, az PredictionEngine objektum esetében ez nem olyan egyszerű, mert az PredictionEngine objektum nem szálbiztos, ezért ezt az objektumot nem lehet szimpla vagy statikus objektumként példányosítani egy ASP.NET Core alkalmazásban. Ezt a szálbiztos és méretezhetőségi problémát ebben a blogbejegyzésben részletesen tárgyaljuk.

A dolgok azonban sokkal könnyebbek lettek, mint a blogbejegyzésben leírtak. Egy egyszerűbb megközelítésen dolgoztunk, és létrehoztunk egy szép ".NET Core integrációs csomagot", amelyet egyszerűen használhat a ASP.NET Core alkalmazásokban és szolgáltatásokban úgy, hogy regisztrálja azt az alkalmazás DI-szolgáltatásaiban (Dependency Injection services), majd közvetlenül a kódból használja. Ehhez tekintse meg az alábbi oktatóanyagot és példát:

A "legjobb minőségű" modell betanítása érdekében létrehozott C#-kód megismerése

A fejlettebb tanulási célok érdekében megismerheti azt a létrehozott C#-kódot is, amelyet a CLI-eszköz a létrehozott modell betanítása céljából használt.

A betanítási modell kódja a nevű SampleClassification.training.csfájlban jön létre, így megvizsgálhatja a betanítási kódot.

Ennél is fontosabb, hogy ebben az adott forgatókönyvben (Hangulatelemzési modell) a létrehozott betanítási kódot is összehasonlíthatja az alábbi oktatóanyagban ismertetett kóddal:

Érdekes összehasonlítani az oktatóanyagban kiválasztott algoritmust és folyamatkonfigurációt a CLI-eszköz által létrehozott kóddal. Attól függően, hogy mennyi időt tölt az iterálással és a jobb modellek keresésével, a választott algoritmus eltérő lehet, valamint az adott hiperparaméterek és a folyamatkonfiguráció.

Ez az oktatóanyag bemutatta, hogyan végezheti el az alábbi műveleteket:

  • Az adatok előkészítése a kiválasztott ml-feladatra (megoldandó probléma)
  • Futtassa az "mlnet classification" parancsot a CLI-eszközben
  • A minőségi metrikák eredményeinek áttekintése
  • A modell futtatásához létrehozott C#-kód ismertetése (A végfelhasználói alkalmazásban használandó kód)
  • Ismerkedjen meg a létrehozott C#-kóddal, amely a "legjobb minőségű" modell betanítására szolgál (bevételi célok)

Lásd még