Kurz: analýza mínění komentářů k webu ve webové aplikaci pomocí Tvůrce modelů ML.NETTutorial: Analyze sentiment of website comments in a web application using ML.NET Model Builder

Naučte se analyzovat mínění z komentářů v reálném čase uvnitř webové aplikace.Learn how to analyze sentiment from comments in real-time inside a web application.

V tomto kurzu se dozvíte, jak vytvořit aplikaci ASP.NET Core Razor Pages, která klasifikuje mínění z komentářů k webům v reálném čase.This tutorial shows you how to create an ASP.NET Core Razor Pages application that classifies sentiment from website comments in real-time.

V tomto kurzu se naučíte:In this tutorial, you learn how to:

  • Vytvoření aplikace ASP.NET Core Razor PagesCreate an ASP.NET Core Razor Pages application
  • Příprava a pochopení datPrepare and understand the data
  • Zvolte scénářChoose a scenario
  • Načtení datLoad the data
  • Výuka modeluTrain the model
  • Vyhodnocení modeluEvaluate the model
  • Použití modelu pro předpovědiUse the model for predictions

Poznámka

Tvůrce modelů je aktuálně ve verzi Preview.Model Builder is currently in Preview.

Zdrojový kód pro tento kurz najdete v úložišti dotnet/machinelearning-Samples .You can find the source code for this tutorial at the dotnet/machinelearning-samples repository.

PožadavkyPre-requisites

Seznam požadavků a pokyny k instalaci najdete v Průvodci instalací modelu modelů.For a list of pre-requisites and installation instructions, visit the Model Builder installation guide.

Vytvoření aplikace Razor PagesCreate a Razor Pages application

  1. Vytvořte aplikaci ASP.NET Core Razor Pages.Create a ASP.NET Core Razor Pages Application.

    1. Otevřete Visual Studio a v řádku nabídek vyberte soubor > nový > projekt .Open Visual Studio and select File > New > Project from the menu bar.
    2. V dialogovém okně Nový projekt vyberte uzel C# vizuálu následovaný webovým uzlem.In the New Project dialog, select the Visual C# node followed by the Web node.
    3. Pak vyberte šablonu projektu ASP.NET Core webové aplikace .Then select the ASP.NET Core Web Application project template.
    4. Do textového pole název zadejte "SentimentRazor".In the Name text box, type "SentimentRazor".
    5. Ujistěte se, že umístění řešení a projekt ve stejném adresáři není zaškrtnuté (vs 2019), nebo je zaškrtnuté políčko vytvořit adresář pro řešení (vs 2017).Make sure Place solution and project in the same directory is unchecked (VS 2019), or Create directory for solution is checked (VS 2017).
    6. Klikněte na tlačítko OK .Select the OK button.
    7. Zvolte Webová aplikace v okně, které zobrazuje různé typy ASP.NET Core projektů, a pak vyberte tlačítko OK .Choose Web Application in the window that displays the different types of ASP.NET Core Projects, and then select the OK button.

Příprava a pochopení datPrepare and understand the data

Stáhněte si datovou sadu Detox Wikipedii.Download Wikipedia detox dataset. Po otevření webové stránky klikněte na ni pravým tlačítkem myši, vyberte Uložit jako a uložte soubor kdekoli v počítači.When the webpage opens, right-click on the page, select Save As and save the file anywhere on your computer.

Každý řádek v datové sadě Wikipedii-Detox-250-line-data. TSV představuje jinou revizi, kterou si uživatel na Wikipedii nanechal.Each row in the wikipedia-detox-250-line-data.tsv dataset represents a different review left by a user on Wikipedia. První sloupec představuje mínění textu (0 je non-toxický, 1 je toxický) a druhý sloupec představuje komentář, který opustil uživatel.The first column represents the sentiment of the text (0 is non-toxic, 1 is toxic), and the second column represents the comment left by the user. Sloupce jsou oddělené kartami.The columns are separated by tabs. Data vypadají jako následující:The data looks like the following:

MíněníSentiment SentimentTextSentimentText
11 = = HRUBÉ = = Dude, jste hrubé nahráli obrázek Carl, nebo jiný.==RUDE== Dude, you are rude upload that carl picture back, or else.
11 = = OK!== OK! = = IM VANDALIZE VOLNĚ ŽIJÍCÍ NA WIKIWEBU A POTOM!!!== IM GOING TO VANDALIZE WILD ONES WIKI THEN!!!
00 Doufám, že vám to pomůže.I hope this helps.

Zvolte scénářChoose a scenario

Průvodce tvůrcem modelů v aplikaci Visual Studio

Abyste mohli model vyškolit, musíte si vybrat ze seznamu dostupných scénářů strojového učení, které poskytuje tvůrce modelů.To train your model, you need to select from the list of available machine learning scenarios provided by Model Builder.

  1. V Průzkumník řešeníklikněte pravým tlačítkem myši na projekt SentimentRazor a vyberte Přidat > Machine Learning.In Solution Explorer, right-click the SentimentRazor project, and select Add > Machine Learning.
  2. V této ukázce je scénář analýzou mínění.For this sample, the scenario is sentiment analysis. V kroku scénář nástroje Tvůrce modelů vyberte Analýza mínění scénář.In the scenario step of the Model Builder tool, select the Sentiment Analysis scenario.

Načtení datLoad the data

Tvůrce modelů přijímá data ze dvou zdrojů, SQL Server databáze nebo místního souboru ve formátu csv nebo tsv.Model Builder accepts data from two sources, a SQL Server database or a local file in csv or tsv format.

  1. V kroku dat nástroje Tvůrce modelů vyberte v rozevíracím seznamu zdroj dat soubor .In the data step of the Model Builder tool, select File from the data source dropdown.
  2. Vyberte tlačítko vedle textového pole Vybrat soubor a pomocí Průzkumníka souborů vyhledejte a vyberte soubor Wikipedii-Detox-250-line-data. TSV .Select the button next to the Select a file text box and use File Explorer to browse and select the wikipedia-detox-250-line-data.tsv file.
  3. V rozevíracím seznamu sloupec pro předpověď (popisek) vyberte mínění .Choose Sentiment in the Column to Predict (Label) dropdown.
  4. Ponechte výchozí hodnoty rozevíracího seznamu vstupních sloupců (funkce) .Leave the default values for the Input Columns (Features) dropdown.
  5. Vyberte odkaz výuka , který se přesune k dalšímu kroku v nástroji Tvůrce modelů.Select the Train link to move to the next step in the Model Builder tool.

Výuka modeluTrain the model

Úkolem strojového učení, který se používá k výuce modelu analýzy mínění v tomto kurzu, je binární klasifikace.The machine learning task used to train the sentiment analysis model in this tutorial is binary classification. V průběhu procesu školení modelů vlacích sestavuje samostatné modely pomocí různých binárních algoritmů klasifikace a nastavení, aby bylo možné najít nejlepší model pro datovou sadu.During the model training process, Model Builder trains separate models using different binary classification algorithms and settings to find the best performing model for your dataset.

Čas potřebný ke školení modelu je úměrný množství dat.The time required for the model to train is proportionate to the amount of data. Tvůrce modelů automaticky vybere výchozí hodnotu pro čas do výuky (sekundy) na základě velikosti zdroje dat.Model Builder automatically selects a default value for Time to train (seconds) based on the size of your data source.

  1. I když tvůrce modelů nastaví hodnotu času na vlak (sekundy) až 10 sekund, narůstá na 30 sekund.Although Model Builder sets the value of Time to train (seconds) to 10 seconds, increase it to 30 seconds. Školení po delší dobu umožňuje tvůrci modelů prozkoumat větší počet algoritmů a kombinaci parametrů při hledání nejlepšího modelu.Training for a longer period of time allows Model Builder to explore a larger number of algorithms and combination of parameters in search of the best model.

  2. Vyberte Spustit školení.Select Start Training.

    V průběhu procesu školení se data o průběhu zobrazují v části Progress v kroku výuka.Throughout the training process, progress data is displayed in the Progress section of the train step.

    • Stav zobrazuje stav dokončení procesu školení.Status displays the completion status of the training process.
    • Nejlepší přesnost zobrazuje přesnost nejlepšího modelu, kterou najde tvůrce modelů, zatím.Best accuracy displays the accuracy of the best performing model found by Model Builder so far. Vyšší přesnost znamená, že model se v testovacích datech podrobnějším způsobem vypovídat.Higher accuracy means the model predicted more correctly on test data.
    • Nejlepší algoritmus zobrazuje název nejlepšího výkonu, který našel tvůrce modelů, zatím.Best algorithm displays the name of the best performing algorithm performed found by Model Builder so far.
    • Poslední algoritmus zobrazuje název algoritmu naposledy, který tvůrce modelů použil k vytvoření výukového modelu.Last algorithm displays the name of the algorithm most recently used by Model Builder to train the model.
  3. Po dokončení školení vyberte odkaz vyhodnotit , který se přesune k dalšímu kroku.Once training is complete, select the evaluate link to move to the next step.

Vyhodnocení modeluEvaluate the model

Výsledkem kroku školení bude jeden model, který má nejlepší výkon.The result of the training step will be one model which had the best performance. V kroku vyhodnocení nástroje pro sestavování modelů bude v sekci výstup obsahovat algoritmus používaný modelem nejlepšího provádění v nejlepším záznamu modelu spolu se metrikami v nejvyšší přesnosti modelu.In the evaluate step of the Model Builder tool, the output section, will contain the algorithm used by the best performing model in the Best Model entry along with metrics in Best Model Accuracy. Navíc Souhrnná tabulka obsahující pět modelů a jejich metriky.Additionally, a summary table containing top five models and their metrics.

Pokud nejste spokojeni s metrikami přesnosti, můžou vám některé jednoduché způsoby, jak zkusit a zlepšit přesnost modelu, zvýšit množství času pro výuku modelu nebo použít víc dat.If you're not satisfied with your accuracy metrics, some easy ways to try and improve model accuracy are to increase the amount of time to train the model or use more data. V opačném případě vyberte odkaz kód , který se přesune k poslednímu kroku v nástroji Tvůrce modelů.Otherwise, select the code link to move to the final step in the Model Builder tool.

Přidejte kód, který provede předpovědiAdd the code to make predictions

V důsledku školicího procesu se vytvoří dva projekty.Two projects will be created as a result of the training process.

Odkaz na školený modelReference the trained model

  1. V kroku kód nástroje Tvůrce modelů vyberte Přidat projekty a přidejte do řešení automaticky generované projekty.In the code step of the Model Builder tool, select Add Projects to add the autogenerated projects to the solution.

    Následující projekty by se měly zobrazit v Průzkumník řešení:The following projects should appear in the Solution Explorer:

    • SentimentRazorML. ConsoleApp: Konzolová aplikace .NET Core, která obsahuje kód pro školení a předpověď modelu.SentimentRazorML.ConsoleApp: A .NET Core Console application that contains the model training and prediction code.
    • SentimentRazorML. model: .NET Standard knihovny tříd obsahující datové modely, které definují schéma vstupních a výstupních dat modelu a také uloženou verzi modelu nejlepšího provádění během školení.SentimentRazorML.Model: A .NET Standard class library containing the data models that define the schema of input and output model data as well as the saved version of the best performing model during training.

    Pro tento kurz je použit pouze projekt SentimentRazorML. model , protože předpovědi bude vytvořen ve webové aplikaci SentimentRazor , nikoli v konzole nástroje.For this tutorial, only the SentimentRazorML.Model project is used because predictions will be made in the SentimentRazor web application rather than in the console. I když se SentimentRazorML. ConsoleApp nebude používat pro vyhodnocování, dá se použít k reučení modelu pomocí nových dat později.Although the SentimentRazorML.ConsoleApp won't be used for scoring, it can be used to retrain the model using new data at a later time. Přeškolení je mimo rámec tohoto kurzu, ale.Retraining is outside the scope of this tutorial though.

Konfigurace PredictionEngine fonduConfigure the PredictionEngine pool

Chcete-li udělat jednu předpověď, je nutné vytvořit PredictionEngine.To make a single prediction, you have to create a PredictionEngine. PredictionEngine není bezpečný pro přístup z více vláken.PredictionEngine is not thread-safe. Kromě toho musíte vytvořit instanci, která je všude, kde je to potřeba v rámci vaší aplikace.Additionally, you have to create an instance of it everywhere it is needed within your application. Jak vaše aplikace roste, tento proces může být nespravovatelný.As your application grows, this process can become unmanageable. Pro zlepšení výkonu a bezpečnosti vláken použijte kombinaci injektáže a PredictionEnginePool služby, která vytváří ObjectPool objektů PredictionEngine pro použití v celé aplikaci.For improved performance and thread safety, use a combination of dependency injection and the PredictionEnginePool service, which creates an ObjectPool of PredictionEngine objects for use throughout your application.

  1. Nainstalujte balíček NuGet Microsoft.Extensions.ml :Install the Microsoft.Extensions.ML NuGet package:

    1. V Průzkumník řešeníklikněte pravým tlačítkem na projekt a vyberte Spravovat balíčky NuGet.In Solution Explorer, right-click the project and select Manage NuGet Packages.
    2. Jako zdroj balíčku vyberte "nuget.org".Choose "nuget.org" as the Package source.
    3. Vyberte kartu Procházet a vyhledejte Microsoft.Extensions.ml.Select the Browse tab and search for Microsoft.Extensions.ML.
    4. Vyberte balíček v seznamu a klikněte na tlačítko instalovat .Select the package in the list, and select the Install button.
    5. V dialogovém okně Náhled změn klikněte na tlačítko OK .Select the OK button on the Preview Changes dialog
    6. Pokud souhlasíte s licenčními podmínkami pro uvedené balíčky, v dialogu pro přijetí licence vyberte tlačítko přijmout .Select the I Accept button on the License Acceptance dialog if you agree with the license terms for the packages listed.
  2. Otevřete soubor Startup.cs v projektu SentimentRazor .Open the Startup.cs file in the SentimentRazor project.

  3. Přidejte následující příkazy using pro odkazování na balíček NuGet Microsoft.Extensions.ml a projekt SentimentRazorML. model :Add the following using statements to reference the Microsoft.Extensions.ML NuGet package and SentimentRazorML.Model project:

    using System.IO;
    using Microsoft.Extensions.ML;
    using SentimentRazorML.Model;
    
  4. Vytvořte globální proměnnou pro uložení umístění trained modelového souboru.Create a global variable to store the location of the trained model file.

    private readonly string _modelPath;
    
  5. Soubor modelu je uložen v adresáři buildu spolu se soubory sestavení vaší aplikace.The model file is stored in the build directory alongside the assembly files of your application. Aby byl přístup snazší, vytvořte pomocnou metodu nazvanou GetAbsolutePath za metodou ConfigureTo make it easier to access, create a helper method called GetAbsolutePath after the Configure method

    public static string GetAbsolutePath(string relativePath)
    {
        FileInfo _dataRoot = new FileInfo(typeof(Program).Assembly.Location);
        string assemblyFolderPath = _dataRoot.Directory.FullName;
    
        string fullPath = Path.Combine(assemblyFolderPath, relativePath);
        return fullPath;
    }
    
  6. Použijte metodu GetAbsolutePath v konstruktoru Startup třídy k nastavení _modelPath.Use the GetAbsolutePath method in the Startup class constructor to set the _modelPath.

    _modelPath = GetAbsolutePath("MLModel.zip");
    
  7. Nakonfigurujte PredictionEnginePool pro vaši aplikaci v metodě ConfigureServices:Configure the PredictionEnginePool for your application in the ConfigureServices method:

    services.AddPredictionEnginePool<ModelInput, ModelOutput>()
            .FromFile(_modelPath);
    

Vytvořit obslužnou rutinu analýzy míněníCreate sentiment analysis handler

Předpovědi se provede uvnitř hlavní stránky aplikace.Predictions will be made inside the main page of the application. Proto metoda, která přijímá vstup uživatele a používá PredictionEnginePool k vrácení předpovědi, je nutné přidat.Therefore, a method that takes the user input and uses the PredictionEnginePool to return a prediction needs to be added.

  1. Otevřete soubor index.cshtml.cs umístěný v adresáři stránky a přidejte následující příkazy using:Open the Index.cshtml.cs file located in the Pages directory and add the following using statements:

    using Microsoft.Extensions.ML;
    using SentimentRazorML.Model;
    

    Aby bylo možné použít PredictionEnginePool nakonfigurované ve Startup třídě, je nutné ji vložit do konstruktoru modelu, kde jej chcete použít.In order to use the PredictionEnginePool configured in the Startup class, you have to inject it into the constructor of the model where you want to use it.

  2. Přidejte proměnnou pro odkazování na PredictionEnginePool uvnitř IndexModel třídy.Add a variable to reference the PredictionEnginePool inside the IndexModel class.

    private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
    
  3. Vytvořte konstruktor ve třídě IndexModel a za do něj službu PredictionEnginePool.Create a constructor in the IndexModel class and inject the PredictionEnginePool service into it.

    public IndexModel(PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool)
    {
        _predictionEnginePool = predictionEnginePool;
    }
    
  4. Vytvořte obslužnou rutinu metody, která používá PredictionEnginePool k provedení předpovědi ze vstupu uživatele přijatého z webové stránky.Create a method handler that uses the PredictionEnginePool to make predictions from user input received from the web page.

    1. Pod OnGet metodou vytvořte novou metodu nazvanou OnGetAnalyzeSentimentBelow the OnGet method, create a new method called OnGetAnalyzeSentiment

      public IActionResult OnGetAnalyzeSentiment([FromQuery] string text)
      {
      
      }
      
    2. Uvnitř metody OnGetAnalyzeSentiment vrátí neutrální mínění, pokud je vstup od uživatele prázdný nebo má hodnotu null.Inside the OnGetAnalyzeSentiment method, return Neutral sentiment if the input from the user is blank or null.

      if (String.IsNullOrEmpty(text)) return Content("Neutral");
      
    3. Když se dostanou platný vstup, vytvoří se nová instance ModelInput.Given a valid input, create a new instance of ModelInput.

      var input = new ModelInput { SentimentText = text };
      
    4. K předvídání mínění použijte PredictionEnginePool.Use the PredictionEnginePool to predict sentiment.

      var prediction = _predictionEnginePool.Predict(input);
      
    5. Převeďte předpokládanou bool hodnotu na toxické nebo netoxické pomocí následujícího kódu.Convert the predicted bool value into toxic or not toxic with the following code.

      var sentiment = Convert.ToBoolean(prediction.Prediction) ? "Toxic" : "Not Toxic";
      
    6. Nakonec vraťte mínění zpět na webovou stránku.Finally, return the sentiment back to the web page.

      return Content(sentiment);
      

Konfigurace webové stránkyConfigure the web page

Výsledky vrácené OnGetAnalyzeSentiment budou dynamicky zobrazeny na webové stránce Index.The results returned by the OnGetAnalyzeSentiment will be dynamically displayed on the Index web page.

  1. Otevřete soubor index. cshtml v adresáři stránky a nahraďte jeho obsah následujícím kódem:Open the Index.cshtml file in the Pages directory and replace its contents with the following code:

    @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. Pak na konec stránky . CSS v adresáři wwwroot\css přidejte kód CSS stylu:Next, add css styling code to the end of the site.css page in the wwwroot\css directory:

    /* 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. Pak přidejte kód, který odešle vstupy z webové stránky do obslužné rutiny OnGetAnalyzeSentiment.After that, add code to send inputs from the web page to the OnGetAnalyzeSentiment handler.

    1. V souboru site. js v adresáři wwwroot\js vytvořte funkci s názvem getSentiment, která vytvoří požadavek GET http s uživatelským vstupem k obslužné rutině OnGetAnalyzeSentiment.In the site.js file located in the wwwroot\js directory, create a function called getSentiment to make a GET HTTP request with the user input to the OnGetAnalyzeSentiment handler.

      function getSentiment(userInput) {
          return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`)
              .then((response) => {
                  return response.text();
              })
      }
      
    2. Níže přidejte další funkci s názvem updateMarker, aby se dynamicky aktualizovala pozice značky na webové stránce, protože mínění je předpověď.Below that, add another function called updateMarker to dynamically update the position of the marker on the web page as sentiment is predicted.

      function updateMarker(markerPosition, sentiment) {
          $("#markerPosition").attr("style", `left:${markerPosition}%`);
          $("#markerValue").text(sentiment);
      }
      
    3. Vytvořte funkci obslužné rutiny události nazvanou updateSentiment pro získání vstupu od uživatele, odešlete ji do funkce OnGetAnalyzeSentiment pomocí funkce getSentiment a aktualizujte značku pomocí funkce updateMarker.Create an event handler function called updateSentiment to get the input from the user, send it to the OnGetAnalyzeSentiment function using the getSentiment function and update the marker with the updateMarker function.

      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 navažte ji na element textarea s atributem id=Message.Finally, register the event handler and bind it to the textarea element with the id=Message attribute.

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

Spuštění aplikaceRun the application

Teď, když je vaše aplikace nastavená, spusťte aplikaci, která by se měla spustit ve vašem prohlížeči.Now that your application is set up, run the application which should launch in your browser.

Až se aplikace spustí, zadejte Tvůrce modelů.When the application launches, enter Model Builder is cool! do textové oblasti.into the text area. Zobrazený předpokládaný mínění by neměl být toxický.The predicted sentiment displayed should be Not Toxic.

Spuštění okna s předpokládaným oknem mínění

Pokud potřebujete odkazovat na projekty vygenerované tvůrcem modelu později v jiném řešení, můžete je najít v adresáři C:\Users\%USERNAME%\AppData\Local\Temp\MLVSTools.If you need to reference the Model Builder generated projects at a later time inside of another solution, you can find them inside the C:\Users\%USERNAME%\AppData\Local\Temp\MLVSTools directory.

Další krokyNext steps

V tomto kurzu jste zjistili, jak:In this tutorial, you learned how to:

  • Vytvoření aplikace ASP.NET Core Razor PagesCreate an ASP.NET Core Razor Pages application
  • Příprava a pochopení datPrepare and understand the data
  • Zvolte scénářChoose a scenario
  • Načtení datLoad the data
  • Výuka modeluTrain the model
  • Vyhodnocení modeluEvaluate the model
  • Použití modelu pro předpovědiUse the model for predictions

Další materiály a zdroje informacíAdditional Resources

Další informace o tématech uvedených v tomto kurzu najdete v následujících zdrojích informací:To learn more about topics mentioned in this tutorial, visit the following resources: