Oktatóanyag: Webhely-megjegyzések hangulatának elemzése webalkalmazásban a ML.NET Model Builder használatával

Megtudhatja, hogyan elemezheti valós időben a megjegyzések hangulatát egy webalkalmazásban.

Ez az oktatóanyag bemutatja, hogyan hozhat létre egy ASP.NET Core Razor Pages-alkalmazást, amely valós időben osztályozza a véleményeket a webhely megjegyzéseiből.

Eben az oktatóanyagban az alábbiakkal fog megismerkedni:

  • ASP.NET Core Razor Pages-alkalmazás létrehozása
  • Az adatok előkészítése és értelmezése
  • Forgatókönyv kiválasztása
  • Az adatok betöltése
  • A modell betanítása
  • A modell értékelése
  • A modell használata előrejelzésekhez

Az oktatóanyag forráskódját a dotnet/machinelearning-samples adattárban találja.

Előfeltételek

Az előfeltételek és a telepítési utasítások listáját a Model Builder telepítési útmutatójában találja.

Razor Pages-alkalmazás létrehozása

Hozzon létre egy ASP.NET Core Razor Pages-alkalmazást.

  1. A Visual Studióban nyissa meg az Új projekt létrehozása párbeszédpanelt .
  2. Az "Új projekt létrehozása" párbeszédpanelen válassza ki a ASP.NET Core Web App-projektsablont.
  3. A Név szövegmezőbe írja be a "SentimentRazor" kifejezést, és válassza a Tovább gombot.
  4. A További információk párbeszédpanelen hagyja meg az összes alapértelmezett beállítást, és válassza a Létrehozás gombot.

Az adatok előkészítése és értelmezése

Töltse le a Wikipedia méregtelenítő adatkészletét. Amikor megnyílik a weblap, kattintson a jobb gombbal a lapra, válassza a Mentés másként lehetőséget, és mentse a fájlt bárhol a számítógépen.

A wikipedia-detox-250-line-data.tsv adatkészlet minden sora egy másik véleményt jelöl, amelyet egy felhasználó hagyott a Wikipédián. Az első oszlop a szöveg hangulatát jelöli (0 nem mérgező, 1 pedig mérgező), a második oszlop pedig a felhasználó által hagyott megjegyzést jelöli. Az oszlopok fülekkel vannak elválasztva. Az adatok a következőképpen néznek ki:

Hangulat Hangulatszöveg
1 ==RUDE== Haver, te durva feltölteni, hogy carl képet vissza, vagy más.
1 == OK! == IM MEGY VANDALIZE WILD ONES WIKI AKKOR!!!
0 Remélem, ez segít.

Model Builder konfigurációs fájl létrehozása

Amikor először hozzáad egy gépi tanulási modellt a megoldáshoz, a rendszer kérni fogja, hogy hozzon létre egy mbconfig fájlt. A mbconfig fájl nyomon követi a Model Builderben elvégezhető összes műveletet, hogy újra megnyissa a munkamenetet.

  1. A Megoldáskezelő kattintson a jobb gombbal a SentimentRazor projektre, és válassza aGépi tanulási modellhozzáadása>... lehetőséget.
  2. A párbeszédpanelen nevezze el a Model Builder projekt SentimentAnalysis.mbconfig nevét, majd válassza a Hozzáadás lehetőséget.

Forgatókönyv kiválasztása

A Modellszerkesztő forgatókönyvének képernyője

A modell betanítása érdekében a Model Builder által biztosított elérhető gépi tanulási forgatókönyvek listájából kell választania.

Ebben a példában a feladat szövegbesorolás. A Model Builder bővítmény Forgatókönyv lépésében válassza ki a Szövegbesorolási forgatókönyvet.

Környezet kiválasztása

A Model Builder a kiválasztott forgatókönyvtől függően különböző környezeteken is betanítást végezhet.

Válassza a Helyi (GPU) lehetőséget környezetként, majd kattintson a Következő lépés gombra.

Megjegyzés

Ez a forgatókönyv olyan mélytanulási technikákat használ, amelyek a legjobban működnek GPU-környezetekben. Ha nem rendelkezik GPU-val, válassza a Helyi (CPU) környezetet, de vegye figyelembe, hogy a betanított idő jelentősen hosszabb lesz. A GPU-k a Model Builderrel való használatáról a Gpu-támogatás a Model Builderben című útmutatóban talál további információt.

Az adatok betöltése

A Model Builder két forrásból, egy SQL Server adatbázisból vagy egy helyi fájlból csv fogad adatokat vagy tsv formátumot.

  1. A Model Builder eszköz adatlépésében válassza a Fájl lehetőséget az adatforrás beállításai között.
  2. Válassza a Fájl kiválasztása szövegmező melletti gombot, és a Fájlkezelő használatával keresse meg és válassza ki a wikipedia-detox-250-line-data.tsv fájlt.
  3. Válassza az Oszlop hangulata lehetőséget a (Címke) legördülő menü előrejelzéséhez .
  4. A Szövegoszlop legördülő menüben válassza a SentimentText (Hangulatszöveg) lehetőséget.
  5. A Következő lépés gombra kattintva lépjen a Model Builder következő lépésére.

A modell betanítása

Az oktatóanyagban a hangulatelemzési modell betanítása során használt gépi tanulási feladat a szövegbesorolás. A modellbetanítási folyamat során a Model Builder a NAS-BERT neurális hálózati architektúrával tanítja be az adathalmaz szövegbesorolási modelljét.

  1. Válassza a Betanítás indítása lehetőséget.

  2. A betanítás befejezése után a betanítási folyamat eredményei megjelennek a Betanítás képernyő Betanítási eredmények szakaszában. A betanítási eredmények biztosítása mellett három kód mögötti fájl is létrejön a SentimentAnalysis.mbconfig fájlban.

    • SentimentAnalysis.consumption.cs – Ez a fájl tartalmazza a és ModelOutput a ModelInput sémákat, valamint a Predict modell felhasználásához létrehozott függvényt.
    • SentimentAnalysis.training.cs – Ez a fájl tartalmazza a Modellszerkesztő által a modell betanításához kiválasztott betanítási folyamatot (adatátalakítások, trénerek, tréner hiperparaméterek). Ezt a folyamatot a modell újratanításához használhatja.
    • *SentimentAnalysis.zip – Ez egy szerializált zip-fájl, amely a betanított ML.NET modellt jelöli.
  3. A Következő lépés gombra kattintva lépjen a következő lépésre.

A modell értékelése

A betanítási lépés eredménye egy olyan modell lesz, amely a legjobb teljesítményt nyújtja. A Model Builder eszköz kiértékelési lépésében a kimeneti szakasz tartalmazza a legjobb teljesítményt nyújtó modell által a értékelési metrikákban használt trénert.

Ha nem elégedett a kiértékelési metrikákkal, a modell teljesítményének javításának néhány egyszerű módja a további adatok használata.

Ellenkező esetben a Következő lépés gombra kattintva lépjen a Model Builder Használat lépésére.

Használati projektsablonok hozzáadása (nem kötelező)

A Használat lépésben a Model Builder olyan projektsablonokat biztosít, amelyekkel felhasználhatja a modellt. Ez a lépés nem kötelező, és kiválaszthatja az igényeinek leginkább megfelelő módszert a modell használatához.

  • Konzolalkalmazás
  • Webes API

Az előrejelzések készítéséhez adja hozzá a kódot

A PredictionEngine készlet konfigurálása

Egyetlen előrejelzés létrehozásához létre kell hoznia egy PredictionEngine<TSrc,TDst>. PredictionEngine<TSrc,TDst> nem szálbiztos. Emellett mindenhol létre kell hoznia egy példányt, amire az alkalmazáson belül szükség van. Az alkalmazás növekedésével ez a folyamat kezelhetetlenné válhat. A jobb teljesítmény és a szálbiztonság érdekében használja a függőséginjektálás és a PredictionEnginePool szolgáltatás kombinációját, amely objektumokat hoz létre ObjectPool<T>PredictionEngine<TSrc,TDst> az alkalmazás egészében való használatra.

  1. Telepítse a Microsoft.Extensions.ML NuGet-csomagot:

    1. A Megoldáskezelő kattintson a jobb gombbal a projektre, és válassza a Manage NuGet Packages (NuGet-csomagok kezelése) lehetőséget.
    2. Válassza a "nuget.org" lehetőséget a Csomag forrásaként.
    3. Válassza a Tallózás lapot, és keresse meg a Microsoft.Extensions.ML.
    4. Válassza ki a csomagot a listában, és válassza a Telepítés gombot.
    5. Válassza az OK gombot a Változások előnézete párbeszédpanelen
    6. Ha elfogadja a felsorolt csomagok licencfeltételét, válassza az Elfogadom gombot a Licenc elfogadása párbeszédpanelen.
  2. Nyissa meg a Program.cs fájlt a SentimentRazor projektben.

  3. Adja hozzá az alábbi utasításokat a Microsoft.Extensions.ML NuGet-csomagra és a SentimentRazorML.Model projektre való hivatkozáshoz:

    using Microsoft.Extensions.ML;
    using static SentimentRazor.SentimentAnalysis;
    
  4. Konfigurálja az PredictionEnginePool<TData,TPrediction> alkalmazást a Program.cs fájlban:

    builder.Services.AddPredictionEnginePool<ModelInput, ModelOutput>()
        .FromFile("SentimentAnalysis.zip");
    

Hangulatelemzési kezelő létrehozása

Az előrejelzések az alkalmazás főoldalán lesznek. Ezért hozzá kell adni egy metódust, amely a felhasználói bemenetet használja, és az PredictionEnginePool<TData,TPrediction> alapján ad vissza egy előrejelzést.

  1. Nyissa meg a Pages könyvtárban található Index.cshtml.cs fájlt, és adja hozzá a következő utasításokat:

    using Microsoft.Extensions.ML;
    using static SentimentRazor.SentimentAnalysis;
    

    Ahhoz, hogy a PredictionEnginePool<TData,TPrediction>Program.cs fájlban konfigurált legyen, be kell szúrnia annak a modellnek a konstruktorába, ahol használni szeretné.

  2. Adjon hozzá egy változót, amely a PredictionEnginePool<TData,TPrediction>IndexModelPages/Index.cshtml.cs fájlban lévő osztályon belülre hivatkozik.

    private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
    
  3. Módosítsa a konstruktort az IndexModel osztályban, és adja hozzá a PredictionEnginePool<TData,TPrediction> szolgáltatást.

    public IndexModel(ILogger<IndexModel> logger, PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool)
    {
        _logger = logger;
        _predictionEnginePool = predictionEnginePool;
    }
    
  4. Hozzon létre egy metóduskezelőt, amely a PredictionEnginePool használatával előrejelzéseket készít a weblapról érkező felhasználói bemenetekből.

    1. OnGet A metódus alatt hozzon létre egy nevű új metódustOnGetAnalyzeSentiment

      public IActionResult OnGetAnalyzeSentiment([FromQuery] string text)
      {
      
      }
      
    2. A metóduson OnGetAnalyzeSentimentbelül semleges hangulatot ad vissza, ha a felhasználó bemenete üres vagy null értékű.

      if (String.IsNullOrEmpty(text)) return Content("Neutral");
      
    3. Érvényes bemenet esetén hozzon létre egy új példányt.ModelInput

      var input = new ModelInput { SentimentText = text };
      
    4. A használatával PredictionEnginePool<TData,TPrediction> előrejelezheti a hangulatot.

      var prediction = _predictionEnginePool.Predict(input);
      
    5. Az előrejelzett bool értéket alakítsa mérgezővé vagy nem mérgezővé az alábbi kóddal.

      var sentiment = Convert.ToBoolean(prediction.PredictedLabel) ? "Toxic" : "Not Toxic";
      
    6. Végül adja vissza a hangulatot a weblapra.

      return Content(sentiment);
      

A weblap konfigurálása

A visszaadott OnGetAnalyzeSentiment eredmények dinamikusan jelennek meg a Index weblapon.

  1. Nyissa meg az Index.cshtml fájlt a Pages könyvtárban, és cserélje le annak tartalmát a következő kódra:

    @page
    @model IndexModel
    @{
        ViewData["Title"] = "Home page";
    }
    
    <div class="text-center">
        <h2>Live Sentiment</h2>
    
        <p><textarea id="Message" cols="45" placeholder="Type any text like a short review"></textarea></p>
    
        <div class="sentiment">
            <h4>Your sentiment is...</h4>
            <p>😡 😐 😍</p>
    
            <div class="marker">
                <div id="markerPosition" style="left: 45%;">
                    <div>▲</div>
                    <label id="markerValue">Neutral</label>
                </div>
            </div>
        </div>
    </div>    
    
  2. Ezután adja hozzá a css-stíluskódot a site.css lap végéhez a wwwroot\css könyvtárban:

    /* Style for sentiment display */
    
    .sentiment {
        background-color: #eee;
        position: relative;
        display: inline-block;
        padding: 1rem;
        padding-bottom: 0;
        border-radius: 1rem;
    }
    
    .sentiment h4 {
        font-size: 16px;
        text-align: center;
        margin: 0;
        padding: 0;
    }
    
    .sentiment p {
        font-size: 50px;
    }
    
    .sentiment .marker {
        position: relative;
        left: 22px;
        width: calc(100% - 68px);
    }
    
    .sentiment .marker > div {
        transition: 0.3s ease-in-out;
        position: absolute;
        margin-left: -30px;
        text-align: center;
    }
    
    .sentiment .marker > div > div {
        font-size: 50px;
        line-height: 20px;
        color: green;
    }
    
    .sentiment .marker > div label {
        font-size: 30px;
        color: gray;
    }
    
  3. Ezután adja hozzá a kódot, amely a weblapról érkező bemeneteket a kezelőnek küldi OnGetAnalyzeSentiment el.

    1. A wwwroot\js könyvtárban található site.js fájlban hozzon létre egy nevű getSentiment függvényt, amely egy GET HTTP-kérést küld a OnGetAnalyzeSentiment kezelő felhasználói bemenetével.

      function getSentiment(userInput) {
          return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`)
              .then((response) => {
                  return response.text();
              })
      }
      
    2. Ez alatt adjon hozzá egy másik nevű függvényt updateMarker , amely dinamikusan frissíti a jelölő pozícióját a weblapon a hangulat előrejelzése szerint.

      function updateMarker(markerPosition, sentiment) {
          $("#markerPosition").attr("style", `left:${markerPosition}%`);
          $("#markerValue").text(sentiment);
      }
      
    3. Hozzon létre egy nevű updateSentiment eseménykezelő függvényt a felhasználó bemenetének lekéréséhez, küldje el a OnGetAnalyzeSentiment függvénynek a getSentiment függvény használatával, és frissítse a jelölőt a updateMarker függvénnyel.

      function updateSentiment() {
      
          var userInput = $("#Message").val();
      
          getSentiment(userInput)
              .then((sentiment) => {
                  switch (sentiment) {
                      case "Not Toxic":
                          updateMarker(100.0, sentiment);
                          break;
                      case "Toxic":
                          updateMarker(0.0, sentiment);
                          break;
                      default:
                          updateMarker(45.0, "Neutral");
                  }    
              });
      }        
      
    4. Végül regisztrálja az eseménykezelőt, és kösse az textarea elemhez az id=Message attribútummal.

      $("#Message").on('change input paste', updateSentiment)        
      

Az alkalmazás futtatása

Most, hogy az alkalmazás be van állítva, futtassa az alkalmazást, amelynek a böngészőben kell elindulnia.

Amikor az alkalmazás elindul, írja be a Szövegterületre az Ez a modell nem rendelkezik elegendő adatval! szöveget. Az előrejelzett hangulatnak mérgezőnek kell lennie.

Futó ablak az előrejelzett hangulatablaktal

Megjegyzés

PredictionEnginePool<TData,TPrediction> több példányt hoz létre a fájlból PredictionEngine<TSrc,TDst>. A modell mérete miatt, amikor először használja az előrejelzéshez, eltarthat néhány másodpercig. A későbbi előrejelzéseknek azonnalinak kell lenniük.

További lépések

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

  • ASP.NET Core Razor Pages-alkalmazás létrehozása
  • Az adatok előkészítése és értelmezése
  • Forgatókönyv kiválasztása
  • Az adatok betöltése
  • A modell betanítása
  • A modell értékelése
  • A modell használata előrejelzésekhez

További források

Ha többet szeretne megtudni az oktatóanyagban említett témakörökről, látogasson el a következő forrásokra: