Samouczek: analizowanie tonacji komentarzy witryny internetowej w aplikacji internetowej przy użyciu ML.NET Model Builder

Dowiedz się, jak analizować tonację z komentarzy w czasie rzeczywistym w aplikacji internetowej.

W tym samouczku pokazano, jak utworzyć aplikację ASP.NET Core Razor Pages, która klasyfikuje tonację z komentarzy do witryny internetowej w czasie rzeczywistym.

Ten samouczek zawiera informacje na temat wykonywania następujących czynności:

  • Tworzenie aplikacji Razor Pages ASP.NET Core
  • Przygotowywanie i interpretacja danych
  • Wybieranie scenariusza
  • Ładowanie danych
  • Trenowanie modelu
  • Ocena modelu
  • Korzystanie z modelu na potrzeby przewidywań

Kod źródłowy tego samouczka można znaleźć w repozytorium dotnet/machinelearning-samples .

Wymagania wstępne

Aby zapoznać się z listą wymagań wstępnych i instrukcji instalacji, odwiedź przewodnik instalacji narzędzia Model Builder.

Tworzenie aplikacji Razor Pages

Utwórz aplikację ASP.NET Core Razor Pages.

  1. W programie Visual Studio otwórz okno dialogowe Tworzenie nowego projektu .
  2. W oknie dialogowym "Tworzenie nowego projektu" wybierz szablon projektu aplikacji internetowej ASP.NET Core.
  3. W polu tekstowym Nazwa wpisz "SentimentRazor" i wybierz przycisk Dalej .
  4. W oknie dialogowym Dodatkowe informacje pozostaw wszystkie wartości domyślne w formacie is i wybierz przycisk Utwórz .

Przygotowywanie i interpretacja danych

Pobierz zestaw danych detoksykacji Wikipedia. Po otwarciu strony internetowej kliknij prawym przyciskiem myszy stronę, wybierz polecenie Zapisz jako i zapisz plik w dowolnym miejscu na komputerze.

Każdy wiersz w zestawie danych wikipedia-detox-250-line-data.tsv reprezentuje inny przegląd pozostawiony przez użytkownika w Wikipedii. Pierwsza kolumna reprezentuje tonację tekstu (0 jest nietoksyczna, 1 jest toksyczna), a druga kolumna reprezentuje komentarz pozostawiony przez użytkownika. Kolumny są oddzielone tabulatorami. Dane wyglądają następująco:

Opinia SentimentText
1 ==RUDE== Dude, jesteś niegrzeczny przekazać, że carl zdjęcie z powrotem, lub inaczej.
1 == OK! == IM GONNA WANDALIZOWAĆ DZIKICH WIKI WTEDY!!!
0 Mam nadzieję, że to pomoże.

Tworzenie pliku konfiguracji konstruktora modeli

Podczas pierwszego dodawania modelu uczenia maszynowego do rozwiązania zostanie wyświetlony monit o utworzenie mbconfig pliku. Plik mbconfig śledzi wszystko, co robisz w narzędziu Model Builder, aby umożliwić ponowne otwarcie sesji.

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt SentimentRazor i wybierz pozycję Dodaj>model uczenia maszynowego....
  2. W oknie dialogowym nadaj projektowi narzędzia Model Builder nazwę SentimentAnalysis.mbconfig i wybierz pozycję Dodaj.

Wybieranie scenariusza

Ekran scenariusza konstruktora modeli

Aby wytrenować model, należy wybrać z listy dostępnych scenariuszy uczenia maszynowego dostarczonych przez narzędzie Model Builder.

W tym przykładzie zadanie to klasyfikacja tekstu. W kroku Scenariusz rozszerzenia Model Builder wybierz scenariusz klasyfikacji tekstu .

Wybieranie środowiska

Konstruktor modeli może trenować w różnych środowiskach w zależności od wybranego scenariusza.

Wybierz pozycję Lokalne (GPU) jako środowisko, a następnie kliknij przycisk Dalej .

Uwaga

W tym scenariuszu używane są techniki uczenia głębokiego, które działają najlepiej w środowiskach procesora GPU. Jeśli nie masz procesora GPU, wybierz środowisko lokalne (procesor CPU), ale pamiętaj, że oczekiwany czas trenowania będzie znacznie dłuższy. Aby uzyskać więcej informacji na temat używania procesorów GPU z programem Model Builder, zobacz przewodnik dotyczący obsługi procesora GPU w narzędziu Model Builder.

Ładowanie danych

Program Model Builder akceptuje dane z dwóch źródeł, bazy danych SQL Server lub pliku lokalnego w csv formacie lubtsv.

  1. W kroku danych narzędzia Model Builder wybierz pozycję Plik z opcji źródła danych.
  2. Wybierz przycisk obok pola tekstowego Wybierz plik i użyj Eksplorator plików do przeglądania i wybierz plik wikipedia-detox-250-line-data.tsv.
  3. Wybierz pozycję Tonacja z listy rozwijanej Kolumna, aby przewidzieć (etykietę).
  4. Wybierz pozycję SentimentText z listy rozwijanej Kolumna tekstowa .
  5. Wybierz przycisk Następny krok , aby przejść do następnego kroku w narzędziu Model Builder.

Trenowanie modelu

Zadanie uczenia maszynowego używane do trenowania modelu analizy tonacji w tym samouczku to klasyfikacja tekstu. Podczas procesu trenowania modelu konstruktor modeli szkoli model klasyfikacji tekstu dla zestawu danych przy użyciu architektury sieci neuronowej NAS-BERT .

  1. Wybierz pozycję Rozpocznij szkolenie.

  2. Po zakończeniu trenowania wyniki z procesu trenowania są wyświetlane w sekcji Wyniki trenowania na ekranie Trenowanie . Oprócz dostarczania wyników trenowania trzy pliki związane z kodem są tworzone w pliku SentimentAnalysis.mbconfig .

    • SentimentAnalysis.consumption.cs — ten plik zawiera ModelInput schematy i oraz ModelOutputPredict funkcję wygenerowaną do korzystania z modelu.
    • SentimentAnalysis.training.cs — ten plik zawiera potok trenowania (przekształcenia danych, trener, hiperparametry trenera) wybrany przez program Model Builder do trenowania modelu. Tego potoku można użyć do ponownego trenowania modelu.
    • *SentimentAnalysis.zip — jest to serializowany plik zip reprezentujący wytrenowany model ML.NET.
  3. Wybierz przycisk Następny krok , aby przejść do następnego kroku.

Ocena modelu

Wynikiem kroku trenowania będzie jeden model, który ma najlepszą wydajność. W kroku oceny narzędzia Model Builder sekcja danych wyjściowych będzie zawierać trenera używanego przez model o najlepszej wydajności w metrykach oceny.

Jeśli metryki oceny nie są zadowalające, kilka prostych sposobów na próbę poprawy wydajności modelu jest użycie większej ilości danych.

W przeciwnym razie wybierz przycisk Następny krok , aby przejść do kroku Consume (Korzystanie ) w narzędziu Model Builder.

Dodawanie szablonów projektów użycia (opcjonalnie)

W kroku Korzystanie konstruktor modelu udostępnia szablony projektów, których można użyć do korzystania z modelu. Ten krok jest opcjonalny i można wybrać metodę, która najlepiej odpowiada twoim potrzebom podczas korzystania z modelu.

  • Aplikacja konsolowa
  • Interfejs API sieci Web

Dodawanie kodu w celu przewidywania

Konfigurowanie puli PredictionEngine

Aby utworzyć pojedyncze przewidywanie, musisz utworzyć element PredictionEngine<TSrc,TDst>. PredictionEngine<TSrc,TDst> nie jest bezpieczny wątkowo. Ponadto należy utworzyć wystąpienie wszędzie tam, gdzie jest potrzebne w aplikacji. W miarę rozwoju aplikacji ten proces może stać się niezarządzany. W celu zwiększenia wydajności i bezpieczeństwa wątków należy użyć kombinacji wstrzykiwania zależności i PredictionEnginePool usługi, która tworzy ObjectPool<T>PredictionEngine<TSrc,TDst> obiekty do użycia w całej aplikacji.

  1. Zainstaluj pakiet Microsoft.Extensions.ML NuGet:

    1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy projekt i wybierz polecenie Zarządzaj pakietami NuGet.
    2. Wybierz pozycję "nuget.org" jako źródło pakietu.
    3. Wybierz kartę Przeglądaj i wyszukaj Microsoft.Extensions.ML.
    4. Wybierz pakiet z listy i wybierz przycisk Zainstaluj .
    5. Wybierz przycisk OK w oknie dialogowym Podgląd zmian
    6. Wybierz przycisk Akceptuję w oknie dialogowym Akceptacja licencji , jeśli zgadzasz się z postanowieniami licencyjnymi dotyczącymi pakietów wymienionych.
  2. Otwórz plik Program.cs w projekcie SentimentRazor .

  3. Dodaj następujące instrukcje using, aby odwołać się do pakietu NuGet Microsoft.Extensions.ML i projektu SentimentRazorML.Model :

    using Microsoft.Extensions.ML;
    using static SentimentRazor.SentimentAnalysis;
    
  4. Skonfiguruj aplikację PredictionEnginePool<TData,TPrediction> w pliku Program.cs :

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

Tworzenie procedury obsługi analizy tonacji

Przewidywania zostaną wykonane wewnątrz strony głównej aplikacji. W związku z tym należy dodać metodę, która pobiera dane wejściowe użytkownika i używa elementu PredictionEnginePool<TData,TPrediction> , aby zwrócić przewidywanie.

  1. Otwórz plik Index.cshtml.cs znajdujący się w katalogu Pages i dodaj następujące instrukcje using:

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

    Aby użyć skonfigurowanego PredictionEnginePool<TData,TPrediction> w pliku Program.cs , musisz wprowadzić go do konstruktora modelu, w którym chcesz go użyć.

  2. Dodaj zmienną, aby odwoływać się PredictionEnginePool<TData,TPrediction>IndexModel do wewnątrz klasy wewnątrz pliku Pages/Index.cshtml.cs .

    private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
    
  3. Zmodyfikuj konstruktor w klasie i wstrzykuj IndexModel do niej usługę PredictionEnginePool<TData,TPrediction> .

    public IndexModel(ILogger<IndexModel> logger, PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool)
    {
        _logger = logger;
        _predictionEnginePool = predictionEnginePool;
    }
    
  4. Utwórz procedurę obsługi metody, która używa elementu PredictionEnginePool do przewidywania z danych wejściowych użytkownika odebranych ze strony internetowej.

    1. OnGet Poniżej metody utwórz nową metodę o nazwieOnGetAnalyzeSentiment

      public IActionResult OnGetAnalyzeSentiment([FromQuery] string text)
      {
      
      }
      
    2. OnGetAnalyzeSentiment Wewnątrz metody zwróć tonację neutralną, jeśli dane wejściowe od użytkownika są puste lub null.

      if (String.IsNullOrEmpty(text)) return Content("Neutral");
      
    3. Biorąc pod uwagę prawidłowe dane wejściowe, utwórz nowe wystąpienie klasy ModelInput.

      var input = new ModelInput { SentimentText = text };
      
    4. Użyj wartości , PredictionEnginePool<TData,TPrediction> aby przewidzieć tonację.

      var prediction = _predictionEnginePool.Predict(input);
      
    5. Przekonwertuj przewidywaną bool wartość na toksyczną lub nietoksyczną przy użyciu następującego kodu.

      var sentiment = Convert.ToBoolean(prediction.PredictedLabel) ? "Toxic" : "Not Toxic";
      
    6. Na koniec zwróć tonację z powrotem na stronę internetową.

      return Content(sentiment);
      

Konfigurowanie strony internetowej

Wyniki zwracane przez OnGetAnalyzeSentiment element będą wyświetlane dynamicznie na Index stronie internetowej.

  1. Otwórz plik Index.cshtml w katalogu Pages i zastąp jego zawartość następującym kodem:

    @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. Następnie dodaj kod stylów css na końcu strony site.css w katalogu 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. Następnie dodaj kod, aby wysyłać dane wejściowe ze strony internetowej do OnGetAnalyzeSentiment programu obsługi.

    1. W pliku site.js znajdującym się w katalogu wwwroot\js utwórz funkcję wywoływaną getSentiment w celu utworzenia żądania HTTP GET z danymi wejściowymi użytkownika do OnGetAnalyzeSentiment programu obsługi.

      function getSentiment(userInput) {
          return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`)
              .then((response) => {
                  return response.text();
              })
      }
      
    2. Poniżej dodaj inną funkcję o nazwie updateMarker , aby dynamicznie zaktualizować położenie znacznika na stronie internetowej w miarę przewidywania tonacji.

      function updateMarker(markerPosition, sentiment) {
          $("#markerPosition").attr("style", `left:${markerPosition}%`);
          $("#markerValue").text(sentiment);
      }
      
    3. Utwórz funkcję obsługi zdarzeń o nazwie updateSentiment , aby pobrać dane wejściowe od użytkownika, wysłać ją do OnGetAnalyzeSentiment funkcji przy użyciu funkcji i zaktualizować znacznik za updateMarker pomocą getSentiment funkcji.

      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. Na koniec zarejestruj procedurę obsługi zdarzeń i powiąż ją textarea z elementem za pomocą atrybutu id=Message .

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

Uruchamianie aplikacji

Po skonfigurowaniu aplikacji uruchom aplikację, która powinna zostać uruchomiona w przeglądarce.

Po uruchomieniu aplikacji wprowadź wartość Ten model nie ma wystarczającej ilości danych! w obszarze tekstowym. Wyświetlana przewidywana tonacja powinna być toksyczna.

Uruchamianie okna z oknem przewidywanej tonacji

Uwaga

PredictionEnginePool<TData,TPrediction> tworzy wiele wystąpień programu PredictionEngine<TSrc,TDst>. Ze względu na rozmiar modelu przy pierwszym użyciu go do przewidywania może upłynąć kilka sekund. Kolejne przewidywania powinny być natychmiastowe.

Następne kroki

W niniejszym samouczku zawarto informacje na temat wykonywania następujących czynności:

  • Tworzenie aplikacji ASP.NET Core Razor Pages
  • Przygotowywanie i zrozumienie danych
  • Wybieranie scenariusza
  • Ładowanie danych
  • Trenowanie modelu
  • Ocena modelu
  • Korzystanie z modelu na potrzeby przewidywań

Dodatkowe zasoby

Aby dowiedzieć się więcej o tematach wymienionych w tym samouczku, odwiedź następujące zasoby: