Sdílet prostřednictvím


Kurz: Analýza mínění komentářů na webu ve webové aplikaci pomocí nástroje ML.NET Model Builder

Zjistěte, jak analyzovat mínění z komentářů v reálném čase v rámci webové aplikace.

V tomto kurzu se dozvíte, jak vytvořit aplikaci ASP.NET Core Razor Pages, která klasifikuje mínění z komentářů na webu v reálném čase.

V tomto návodu se naučíte, jak:

  • Vytvoření aplikace ASP.NET Core Razor Pages
  • Příprava a pochopení dat
  • Volba scénáře
  • Načtení dat
  • Trénování modelu
  • Vyhodnocení modelu
  • Použití modelu pro předpovědi

Zdrojový kód pro tento kurz najdete v úložišti dotnet/machinelearning-samples .

Prerequisites

Seznam požadavků a pokynů k instalaci najdete v průvodci instalací Model Builderu.

Vytvoření aplikace Razor Pages

Vytvořte aplikaci ASP.NET Core Razor Pages.

  1. V sadě Visual Studio otevřete dialogové okno Vytvořit nový projekt .
  2. V dialogovém okně Vytvořit nový projekt vyberte šablonu projektu ASP.NET Core Web App .
  3. Do textového pole Název zadejte "SentimentRazor" a vyberte Další.
  4. V dialogovém okně Další informace ponechte všechny výchozí hodnoty tak, jak jsou, a vyberte Vytvořit.

Příprava a pochopení dat

Stáhněte si Wikipedia Detox dataset. Po otevření webové stránky klikněte pravým tlačítkem myši na stránku, vyberte Uložit jako a uložte soubor kamkoli do počítače.

Každý řádek v datové sadě wikipedia-detox-250-line-data.tsv představuje jinou recenzi, kterou uživatel na Wikipedii nechal. První sloupec představuje mínění textu (0 je netoxický, 1 je toxický) a druhý sloupec představuje komentář, který uživatel nechal. Sloupce jsou oddělené tabulátory. Data vypadají takto:

Sentiment SentimentText
1 Kámo, jsi hrubý, nahraj ten obrázek Carla zpět, jinak…
1 == PŮJDU VANDALIZOVAT WILD ONES WIKI PAK!!! == IM GOING TO VANDALIZE WILD ONES WIKI THEN!!!
0 Doufám, že to pomůže.

Vytvoření konfiguračního souboru Tvůrce modelů

Při prvním přidání modelu strojového učení do řešení se zobrazí výzva k vytvoření mbconfig souboru. Soubor mbconfig sleduje všechno, co v Tvůrci modelů děláte, abyste mohli relaci znovu otevřít.

  1. V Průzkumníku řešení klikněte pravým tlačítkem na projekt SentimentRazor a vyberte Přidat>model strojového učení.
  2. V dialogovém okně pojmenujte projekt Tvůrce modelů SentimentAnalysis.mbconfig a vyberte Přidat.

Volba scénáře

Obrazovka scénáře tvůrce modelů

Pokud chcete model vytrénovat, musíte si vybrat ze seznamu dostupných scénářů strojového učení poskytovaných Tvůrcem modelů.

Pro tuto ukázku je úkol klasifikace textu. V kroku Scénář rozšíření Tvůrce modelů vyberte scénář klasifikace textu .

Výběr prostředí

Tvůrce modelů může trénovat v různých prostředích v závislosti na vybraném scénáři.

Jako prostředí vyberte Místní (GPU) a klikněte na tlačítko Další krok .

Note

Tento scénář používá techniky hlubokého učení, které nejlépe fungují v prostředích GPU. Pokud nemáte GPU, zvolte místní prostředí (CPU), ale všimněte si, že očekávaná doba trénace bude výrazně delší. Další informace o používání GRAFICKÝch procesorů s Tvůrcem modelů najdete v průvodci podporou GPU v průvodci Tvůrcem modelů.

Načtení dat

Tvůrce modelů přijímá data ze dvou zdrojů, databáze SQL Serveru nebo místního souboru v csv nebo tsv ve formátu.

  1. V datovém kroku nástroje Tvůrce modelů vyberte Soubor z možností zdroje dat.
  2. Vyberte tlačítko vedle textového pole Vybrat soubor a pomocí Průzkumníka souborů procházejte a vyberte soubor wikipedia-detox-250-line-data.tsv .
  3. Vyberte Sentiment z rozbalovací nabídky Sloupec pro předpověď (Label).
  4. V rozevíracím seznamu Textový sloupec zvolte SentimentText.
  5. Vyberte tlačítko Další krok a přejděte k dalšímu kroku v Tvůrci modelů.

Trénování modelu

Úloha strojového učení použitá k trénování modelu analýzy mínění v tomto kurzu je klasifikace textu. Během procesu trénování modelu Model Builder trénuje model klasifikace textu pro vaši datovou sadu pomocí architektury neurální sítě NAS-BERT .

  1. Vyberte Zahájit trénování.

  2. Po dokončení tréninku se výsledky tréninkového procesu zobrazí v části Výsledky tréninku na obrazovce Trénink. Kromě poskytování výsledků tréninku se pod souborem SentimentAnalysis.mbconfig vytvoří tři soubory s vnitřním kódem.

    • SentimentAnalysis.consumption.cs – Tento soubor obsahuje schémata ModelInputModelOutput a Predict také funkci vygenerovanou pro využívání modelu.
    • SentimentAnalysis.training.cs – Tento soubor obsahuje trénovací kanál (transformace dat, trenéra, hyperparametry trenéra) vybraný Tvůrcem modelů, který model vytrénuje. Tento kanál můžete použít k opětovnému trénování modelu.
    • * SentimentAnalysis.mlnet – Tento soubor obsahuje metadata a podrobnosti konfigurace pro model ML.NET.
  3. Výběrem tlačítka Další krok přejděte k dalšímu kroku.

Vyhodnocení modelu

Výsledkem trénovacího kroku bude jeden model, který má nejlepší výkon. V kroku vyhodnocení nástroje Model Builder bude část výstupu obsahovat trenéra použitého nejlépe fungujícím modelem a také metriky vyhodnocení.

Pokud s metrikami vyhodnocení nejste spokojení, je vhodné použít více dat několika snadnými způsoby, jak se pokusit vylepšit výkon modelu.

V opačném případě vyberte tlačítko Další krok , abyste přešli na krok Využívání v Tvůrci modelů.

Přidejte šablony projektů spotřeby (volitelné)

V kroku Využití poskytuje Tvůrce modelů šablony projektů, které můžete použít k využívání modelu. Tento krok je volitelný a můžete zvolit metodu, která nejlépe vyhovuje vašim potřebám při použití modelu.

  • Console application
  • Web API

Přidání kódu pro vytváření předpovědí

Nakonfigurujte fond PredictionEngine.

Pokud chcete vytvořit jednu předpověď, musíte vytvořit .PredictionEngine<TSrc,TDst> PredictionEngine<TSrc,TDst> není vláknově bezpečný. Kromě toho musíte vytvořit instanci všude, kde je v aplikaci potřeba. S rostoucím růstem aplikace se tento proces může stát nespravovatelným. Pro zvýšení výkonu a bezpečnosti vláken použijte kombinaci injektáže závislostí a PredictionEnginePool služby, která vytvoří ObjectPool<T>PredictionEngine<TSrc,TDst> objekty pro použití v celé aplikaci.

  1. Nainstalujte balíček NuGet Microsoft.Extensions.ML :

    1. V Průzkumníku řešeníklikněte pravým tlačítkem na projekt a vyberte Spravovat balíčky NuGet.
    2. Jako zdroj balíčku zvolte nuget.org.
    3. Vyberte kartu Procházet a vyhledejte Microsoft.Extensions.ML.
    4. Vyberte balíček v seznamu a vyberte Nainstalovat.
    5. Výběr tlačítka OK v dialogovém okně Náhled změn
    6. Pokud souhlasíte s licenčními podmínkami pro uvedené balíčky, vyberte v dialogovém okně Přijetí licence tlačítko Přijmout.
  2. Otevřete soubor Program.cs v projektu SentimentRazor .

  3. Přidejte následující using direktivy, které odkazují na Microsoft.Extensions.ML balíček NuGet a projekt SentimentRazorML.Model :

    using Microsoft.Extensions.ML;
    using static SentimentRazor.SentimentAnalysis;
    
  4. PredictionEnginePool<TData,TPrediction> Nakonfigurujte aplikaci v souboru Program.cs:

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

Vytvořte obslužnou rutinu pro analýzu mínění

Předpovědi se vytvoří na hlavní stránce aplikace. Proto je potřeba přidat metodu, která přebírá vstup uživatele a používá PredictionEnginePool<TData,TPrediction> k vrácení předpovědi.

  1. Otevřete soubor Index.cshtml.cs umístěný v adresáři Pages a přidejte následující using direktivy:

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

    Pokud chcete použít PredictionEnginePool<TData,TPrediction> nakonfigurovaný v souboru Program.cs, musíte ho vložit do konstruktoru modelu, kde ho chcete použít.

  2. Přidejte proměnnou, která bude odkazovat na PredictionEnginePool<TData,TPrediction> uvnitř třídy IndexModel v souboru Pages/Index.cshtml.cs.

    private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
    
  3. Upravte konstruktor ve IndexModel třídě a vložte do PredictionEnginePool<TData,TPrediction> ní službu.

    public IndexModel(ILogger<IndexModel> logger, PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool)
    {
        _logger = logger;
        _predictionEnginePool = predictionEnginePool;
    }
    
  4. Vytvořte obslužnou rutinu metody, která používá PredictionEnginePool k vytváření předpovědí ze vstupu uživatele přijatého z webové stránky.

    1. Pod metodou OnGet vytvořte novou metodu s názvem OnGetAnalyzeSentiment

      public IActionResult OnGetAnalyzeSentiment([FromQuery] string text)
      {
      
      }
      
    2. OnGetAnalyzeSentiment Uvnitř metody vraťte neutrální mínění, pokud vstup od uživatele je prázdný nebo null.

      if (String.IsNullOrEmpty(text)) return Content("Neutral");
      
    3. Při zadání platného vstupu vytvořte novou instanci ModelInput.

      var input = new ModelInput { SentimentText = text };
      
    4. Pomocí funkce PredictionEnginePool<TData,TPrediction> předpovědět mínění.

      var prediction = _predictionEnginePool.Predict(input);
      
    5. Převeďte predikovanou bool hodnotu na toxické nebo ne toxické pomocí následujícího kódu.

      var sentiment = Convert.ToBoolean(prediction.PredictedLabel) ? "Toxic" : "Not Toxic";
      
    6. Nakonec vraťte sentiment zpět na webovou stránku.

      return Content(sentiment);
      

Konfigurace webové stránky

Výsledky vrácené stránkou OnGetAnalyzeSentiment se budou dynamicky zobrazovat na Index webové stránce.

  1. Otevřete soubor Index.cshtml v adresáři Pages a nahraďte jeho obsah následujícím kódem:

    @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. Dále na konec stránky site.css v adresáři wwwroot\css přidejte styling css:

    /* 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. Potom přidejte kód pro odesílání vstupů z webové stránky do obslužné rutiny OnGetAnalyzeSentiment .

    1. V souborusite.js umístěném v adresáři wwwroot\js vytvořte funkci, getSentiment která vytvoří požadavek GET HTTP se vstupem uživatele do obslužné rutiny OnGetAnalyzeSentiment .

      function getSentiment(userInput) {
          return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`)
              .then((response) => {
                  return response.text();
              })
      }
      
    2. Pod tím přidejte další funkci updateMarker, která dynamicky aktualizuje pozici značky na webové stránce během předpovídání sentimentu.

      function updateMarker(markerPosition, sentiment) {
          $("#markerPosition").attr("style", `left:${markerPosition}%`);
          $("#markerValue").text(sentiment);
      }
      
    3. Vytvořte funkci obslužné rutiny události s názvem updateSentiment pro získání uživatelského vstupu a odešlete ho do funkce OnGetAnalyzeSentiment pomocí funkce getSentiment a aktualizujte značku funkcí updateMarker.

      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. Nakonec zaregistrujte obslužnou rutinu události a vytvořte vazbu na textarea element s atributem id=Message .

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

Spuštění aplikace

Teď, když je vaše aplikace nastavená, spusťte aplikaci, která by se měla spustit v prohlížeči.

Po spuštění aplikace zadejte Tento model nemá dostatek dat do textové oblasti. Předpovězený sentiment by měl být toxický.

Běžící okno s předpovězeným oknem sentimentu

Note

PredictionEnginePool<TData,TPrediction> vytvoří více instancí PredictionEngine<TSrc,TDst>. Vzhledem k velikosti modelu může při prvním použití k předpovědím trvat několik sekund. Následné předpovědi by měly být okamžité.

Next steps

V tomto kurzu jste se naučili:

  • Vytvoření aplikace ASP.NET Core Razor Pages
  • Příprava a pochopení dat
  • Volba scénáře
  • Načtení dat
  • Trénování modelu
  • Vyhodnocení modelu
  • Použití modelu pro předpovědi

Additional Resources

Další informace o tématech uvedených v tomto kurzu najdete v následujících zdrojích informací: