Dela via


Självstudie: Analysera sentiment för webbplatskommentarer i ett webbprogram med hjälp av ML.NET Model Builder

Lär dig hur du analyserar sentiment från kommentarer i realtid i ett webbprogram.

Den här självstudien visar hur du skapar ett ASP.NET Core Razor Pages-program som klassificerar sentiment från webbplatskommentare i realtid.

I den här tutorialen lär du dig följande:

  • Skapa ett ASP.NET Core Razor Pages-program
  • Förbereda och förstå data
  • Välj ett scenario
  • Ladda in data
  • Träna modellen
  • Utvärdera modellen
  • Använda modellen för förutsägelser

Du hittar källkoden för den här självstudien på lagringsplatsen dotnet/machinelearning-samples .

Prerequisites

En lista över krav och installationsinstruktioner finns i installationsguiden för Model Builder.

Skapa ett Razor Pages-program

Skapa ett ASP.NET Core Razor Pages-program.

  1. Öppna dialogrutan Skapa ett nytt projekt i Visual Studio.
  2. I dialogrutan Skapa ett nytt projekt väljer du projektmallen ASP.NET Core Web App .
  3. I textrutan Namn skriver du "SentimentRazor" och väljer Nästa.
  4. I dialogrutan Ytterligare information lämnar du alla standardvärden som är och väljer Skapa.

Förbereda och förstå data

Ladda ned Wikipedia detox-datauppsättning. När webbsidan öppnas högerklickar du på sidan, väljer Spara som och sparar filen var som helst på datorn.

Varje rad i datamängden wikipedia-detox-250-line-data.tsv representerar en annan granskning som lämnas av en användare på Wikipedia. Den första kolumnen representerar textens attityd (0 är giftfri, 1 är giftig) och den andra kolumnen representerar kommentaren som användaren lämnar. Kolumnerna avgränsas med flikar. Data ser ut så här:

Sentiment SentimentText
1 ==RUDE== Dude, du är oförskämd ladda upp att carl bild tillbaka, annars.
1 == OK! == IM GONNA VANDALIZE WILD ONES WIKI THEN!!
0 Jag hoppas att detta hjälper.

Skapa en modell builder-konfigurationsfil

När du först lägger till en maskininlärningsmodell i lösningen uppmanas du att skapa en mbconfig fil. Filen mbconfig håller reda på allt du gör i Model Builder så att du kan öppna sessionen igen.

  1. Högerklicka på Projektet SentimentRazor i Solution Explorer och välj Lägg till>Maskininlärningsmodell.
  2. I dialogrutan namnger du Model Builder-projektet SentimentAnalysis.mbconfig och väljer Lägg till.

Välj ett scenario

Scenarioskärm för Model Builder

För att träna din modell måste du välja från listan över tillgängliga maskininlärningsscenarier som tillhandahålls av Model Builder.

För det här exemplet är uppgiften textklassificering. I scenariosteget i Model Builder-tillägget väljer du scenariot Textklassificering .

Välj en miljö

Model Builder kan träna i olika miljöer beroende på det valda scenariot.

Välj Lokal (GPU) som miljö och klicka på knappen Nästa steg .

Note

Det här scenariot använder djupinlärningstekniker som fungerar bäst i GPU-miljöer. Om du inte har en GPU väljer du den lokala miljön (CPU), men observera att den förväntade tiden att träna blir betydligt längre. Mer information om hur du använder GPU:er med Model Builder finns i guiden GPU-stöd i Model Builder.

Ladda in data

Model Builder accepterar data från två källor, en SQL Server-databas eller en lokal fil i csv eller tsv format.

  1. I datasteget i verktyget Model Builder väljer du Arkiv från alternativen för datakällan.
  2. Välj knappen bredvid textrutan Välj en fil och använd Utforskaren för att bläddra och välja filen wikipedia-detox-250-line-data.tsv .
  3. Välj Sentiment i listrutan Kolumn för att förutsäga (etikett ).
  4. Välj SentimentText i listrutan Textkolumn .
  5. Välj knappen Nästa steg för att gå vidare till nästa steg i Model Builder.

Träna modellen

Den maskininlärningsuppgift som används för att träna attitydanalysmodellen i den här självstudien är textklassificering. Under modellträningsprocessen tränar Model Builder en textklassificeringsmodell för din datamängd med nas-BERT neural nätverksarkitektur.

  1. Välj Starta träning.

  2. När träningen är klar visas resultatet från träningsprocessen i avsnittet Träningsresultat på skärmen Träna . Förutom att tillhandahålla träningsresultat skapas tre bakomliggande filer under filen SentimentAnalysis.mbconfig .

    • SentimentAnalysis.consumption.cs – Den här filen innehåller scheman ModelInput och ModelOutput samt den Predict funktion som genereras för att använda modellen.
    • SentimentAnalysis.training.cs – Den här filen innehåller träningspipelinen (datatransformeringar, utbildare, träningshyperparametrar) som valts av Model Builder för att träna modellen. Du kan använda den här pipelinen för att träna om din modell.
    • * SentimentAnalysis.mlnet – Den här filen innehåller metadata och konfigurationsinformation för en ML.NET modell.
  3. Välj knappen Nästa steg för att gå vidare till nästa steg.

Utvärdera modellen

Resultatet av träningssteget blir en modell som har bästa prestanda. I utvärderingssteget i verktyget Model Builder innehåller utdataavsnittet den tränare som används av modellen med bäst prestanda i samt utvärderingsmått.

Om du inte är nöjd med dina utvärderingsmått är några enkla sätt att försöka förbättra modellens prestanda att använda mer data.

Annars väljer du knappen Nästa steg för att gå vidare till steget Förbruka i Model Builder.

Lägga till projektmallar för förbrukning (valfritt)

I steget Förbruka tillhandahåller Model Builder projektmallar som du kan använda för att använda modellen. Det här steget är valfritt och du kan välja den metod som bäst passar dina behov för att använda modellen.

  • Console application
  • Web API

Lägg till koden för att göra förutsägelser

Konfigurera PredictionEngine-poolen

Om du vill göra en enda förutsägelse måste du skapa en PredictionEngine<TSrc,TDst>. PredictionEngine<TSrc,TDst> är inte trådsäkert. Dessutom måste du skapa en instans av den överallt där den behövs i ditt program. När programmet växer kan den här processen bli ohanterlig. För bättre prestanda och trådsäkerhet använder du en kombination av beroendeinmatning och PredictionEnginePool tjänsten, som skapar en ObjectPool<T> av PredictionEngine<TSrc,TDst> objekt som kan användas i hela programmet.

  1. Installera Microsoft.Extensions.ML NuGet-paketet:

    1. Högerklicka på projektet i Solution Explorer och välj Hantera NuGet-paket.
    2. Välj "nuget.org" som paketkälla.
    3. Välj fliken Bläddra och sök efter Microsoft.Extensions.ML.
    4. Välj paketet i listan och välj Installera.
    5. Välj knappen OK i dialogrutan Förhandsgranska ändringar
    6. Välj knappen Jag accepterar i dialogrutan Licensgodkännande om du godkänner licensvillkoren för de paket som anges.
  2. Öppna filen Program.cs i SentimentRazor-projektet .

  3. Lägg till följande using direktiv för att referera till projektet Microsoft.Extensions.ML NuGet-paketet och SentimentRazorML.Model :

    using Microsoft.Extensions.ML;
    using static SentimentRazor.SentimentAnalysis;
    
  4. PredictionEnginePool<TData,TPrediction> Konfigurera för ditt program i filen Program.cs:

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

Skapa attitydanalyshanterare

Förutsägelser görs på programmets huvudsida. Därför måste en metod som tar användarindata och använder PredictionEnginePool<TData,TPrediction> för att returnera en förutsägelse läggas till.

  1. Öppna den Index.cshtml.cs filen som finns i katalogen Pages och lägg till följande using direktiv:

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

    För att kunna använda den PredictionEnginePool<TData,TPrediction> konfigurerade filen i Program.cs måste du mata in den i konstruktorn för den modell där du vill använda den.

  2. Lägg till en variabel för att referera PredictionEnginePool<TData,TPrediction> till inuti IndexModel klassen i filen Pages/Index.cshtml.cs .

    private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
    
  3. Ändra konstruktorn i IndexModel klassen och mata PredictionEnginePool<TData,TPrediction> in tjänsten i den.

    public IndexModel(ILogger<IndexModel> logger, PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool)
    {
        _logger = logger;
        _predictionEnginePool = predictionEnginePool;
    }
    
  4. Skapa en metodhanterare som använder PredictionEnginePool för att göra förutsägelser från användarindata som tas emot från webbsidan.

    1. OnGet Under metoden skapar du en ny metod med namnetOnGetAnalyzeSentiment

      public IActionResult OnGetAnalyzeSentiment([FromQuery] string text)
      {
      
      }
      
    2. OnGetAnalyzeSentiment I metoden returnerar du Neutral sentiment om indata från användaren är tomma eller null.

      if (String.IsNullOrEmpty(text)) return Content("Neutral");
      
    3. Skapa en ny instans av ModelInput.

      var input = new ModelInput { SentimentText = text };
      
    4. PredictionEnginePool<TData,TPrediction> Använd för att förutsäga sentiment.

      var prediction = _predictionEnginePool.Predict(input);
      
    5. Konvertera det förutsagda bool värdet till giftigt eller inte giftigt med följande kod.

      var sentiment = Convert.ToBoolean(prediction.PredictedLabel) ? "Toxic" : "Not Toxic";
      
    6. Returnera slutligen sentimentet tillbaka till webbsidan.

      return Content(sentiment);
      

Konfigurera webbsidan

Resultaten som returneras av OnGetAnalyzeSentiment visas dynamiskt på webbsidan Index .

  1. Öppna filen Index.cshtml i katalogen Pages och ersätt innehållet med följande kod:

    @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. Lägg sedan till css-formatkod i slutet av site.css-sidan i katalogen wwwroot\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. Därefter lägger du till kod för att skicka indata från webbsidan OnGetAnalyzeSentiment till hanteraren.

    1. I densite.js filen som finns i katalogen wwwroot\js skapar du en funktion som anropas getSentiment för att göra en GET HTTP-begäran med användarens indata till OnGetAnalyzeSentiment hanteraren.

      function getSentiment(userInput) {
          return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`)
              .then((response) => {
                  return response.text();
              })
      }
      
    2. Lägg till en annan funktion med namnet updateMarker för att dynamiskt uppdatera markörens position på webbsidan när sentimentet förutsägs.

      function updateMarker(markerPosition, sentiment) {
          $("#markerPosition").attr("style", `left:${markerPosition}%`);
          $("#markerValue").text(sentiment);
      }
      
    3. Skapa en händelsehanterarfunktion som anropas updateSentiment för att hämta indata från användaren, skicka den till OnGetAnalyzeSentiment funktionen med hjälp av getSentiment funktionen och uppdatera markören med updateMarker funktionen.

      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. Slutligen registrerar du händelsehanteraren och binder den till elementet textarea med attributet id=Message .

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

Starta programmet

Nu när programmet har konfigurerats kör du programmet, som ska startas i webbläsaren.

När programmet startas anger du Den här modellen har inte tillräckligt med data! i textområdet. Den förutsagda attityden som visas bör vara Giftig.

Fönstret Körs med det förutsagda sentimentfönstret

Note

PredictionEnginePool<TData,TPrediction> skapar flera instanser av PredictionEngine<TSrc,TDst>. På grund av modellens storlek kan det ta några sekunder att göra en förutsägelse första gången du använder den. Efterföljande förutsägelser bör vara omedelbara.

Next steps

I den här handledningen lärde du dig att:

  • Skapa ett ASP.NET Core Razor Pages-program
  • Förbereda och förstå data
  • Välj ett scenario
  • Ladda in data
  • Träna modellen
  • Utvärdera modellen
  • Använda modellen för förutsägelser

Additional Resources

Mer information om ämnen som nämns i den här självstudien finns i följande resurser: