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.
- A Visual Studióban nyissa meg az Új projekt létrehozása párbeszédpanelt .
- Az "Új projekt létrehozása" párbeszédpanelen válassza ki a ASP.NET Core Web App-projektsablont.
- A Név szövegmezőbe írja be a "SentimentRazor" kifejezést, és válassza a Tovább gombot.
- 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.
- A Megoldáskezelő kattintson a jobb gombbal a SentimentRazor projektre, és válassza aGépi tanulási modellhozzáadása>... lehetőséget.
- 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 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.
- 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.
- 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.
- Válassza az Oszlop hangulata lehetőséget a (Címke) legördülő menü előrejelzéséhez .
- A Szövegoszlop legördülő menüben válassza a SentimentText (Hangulatszöveg) lehetőséget.
- 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.
Válassza a Betanítás indítása lehetőséget.
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
aModelInput
sémákat, valamint aPredict
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.
- SentimentAnalysis.consumption.cs – Ez a fájl tartalmazza a és
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.
Telepítse a Microsoft.Extensions.ML NuGet-csomagot:
- A Megoldáskezelő kattintson a jobb gombbal a projektre, és válassza a Manage NuGet Packages (NuGet-csomagok kezelése) lehetőséget.
- Válassza a "nuget.org" lehetőséget a Csomag forrásaként.
- Válassza a Tallózás lapot, és keresse meg a Microsoft.Extensions.ML.
- Válassza ki a csomagot a listában, és válassza a Telepítés gombot.
- Válassza az OK gombot a Változások előnézete párbeszédpanelen
- Ha elfogadja a felsorolt csomagok licencfeltételét, válassza az Elfogadom gombot a Licenc elfogadása párbeszédpanelen.
Nyissa meg a Program.cs fájlt a SentimentRazor projektben.
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;
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.
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é.
Adjon hozzá egy változót, amely a PredictionEnginePool<TData,TPrediction>
IndexModel
Pages/Index.cshtml.cs fájlban lévő osztályon belülre hivatkozik.private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
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; }
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.OnGet
A metódus alatt hozzon létre egy nevű új metódustOnGetAnalyzeSentiment
public IActionResult OnGetAnalyzeSentiment([FromQuery] string text) { }
A metóduson
OnGetAnalyzeSentiment
belül semleges hangulatot ad vissza, ha a felhasználó bemenete üres vagy null értékű.if (String.IsNullOrEmpty(text)) return Content("Neutral");
Érvényes bemenet esetén hozzon létre egy új példányt.
ModelInput
var input = new ModelInput { SentimentText = text };
A használatával PredictionEnginePool<TData,TPrediction> előrejelezheti a hangulatot.
var prediction = _predictionEnginePool.Predict(input);
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";
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.
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>
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; }
Ezután adja hozzá a kódot, amely a weblapról érkező bemeneteket a kezelőnek küldi
OnGetAnalyzeSentiment
el.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 aOnGetAnalyzeSentiment
kezelő felhasználói bemenetével.function getSentiment(userInput) { return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`) .then((response) => { return response.text(); }) }
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); }
Hozzon létre egy nevű
updateSentiment
eseménykezelő függvényt a felhasználó bemenetének lekéréséhez, küldje el aOnGetAnalyzeSentiment
függvénynek agetSentiment
függvény használatával, és frissítse a jelölőt aupdateMarker
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"); } }); }
Végül regisztrálja az eseménykezelőt, és kösse az
textarea
elemhez azid=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.
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:
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: