Udostępnij za pomocą


Samouczek: analizowanie tonacji komentarzy witryny internetowej w aplikacji internetowej przy użyciu narzędzia 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 witryny internetowej w czasie rzeczywistym.

W tym poradniku nauczysz się, jak:

  • Tworzenie aplikacji ASP.NET Core Razor Pages
  • Przygotowywanie i zrozumienie danych
  • Wybór 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 .

Prerequisites

Aby uzyskać listę wymagań wstępnych i instrukcji dotyczących instalacji, zapoznaj się z przewodnikiem 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 ASP.NET Core Web App .
  3. W polu tekstowym Nazwa wpisz ciąg "SentimentRazor" i wybierz przycisk Dalej.
  4. W oknie dialogowym Dodatkowe informacje pozostaw wszystkie wartości domyślne, tak jak to, i wybierz pozycję Utwórz.

Przygotowywanie i zrozumienie danych

Pobierz zestaw danych detoksykacji Wikipedii. 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:

Sentiment SentimentText
1 ==RUDE== Dude, jesteś niegrzeczny przekazać ten carl zdjęcie z powrotem, lub inaczej.
1 == OK! == IM BĘDZIE WANDALIZOWAĆ DZIKIE WIKI WTEDY!!
0 Mam nadzieję, że to pomoże.

Tworzenie pliku konfiguracji konstruktora modelu

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 Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt SentimentRazor i wybierz pozycję Dodaj>model uczenia maszynowego.
  2. W oknie dialogowym nadaj projektowi Model Builder nazwę SentimentAnalysis.mbconfig, a następnie wybierz pozycję Dodaj.

Wybór scenariusza

Ekran scenariusza kreatora 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 konstruktora modelu wybierz scenariusz klasyfikacji tekstu .

Wybierz środowisko

Narzędzie Model Builder może trenować w różnych środowiskach w zależności od wybranego scenariusza.

Wybierz pozycję Lokalne (GPU) jako środowisko i kliknij przycisk Dalej .

Note

W tym scenariuszu używane są techniki uczenia głębokiego, które najlepiej sprawdzają się w środowiskach procesora GPU. Jeśli nie masz procesora GPU, wybierz środowisko lokalne (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 narzędziem Model Builder, zobacz przewodnik dotyczący obsługi procesora GPU w narzędziu Model Builder.

Ładowanie danych

Narzędzie Model Builder akceptuje dane z dwóch źródeł, bazy danych programu SQL Server lub pliku lokalnego w formacie lub tsv formaciecsv.

  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 Eksploratora plików, aby przeglądać i wybierać 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 narzędzie Model Builder szkoli model klasyfikacji tekstu dla zestawu danych przy użyciu architektury sieci neuronowej NAS- .

  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 szkoleniowych trzy pliki za pomocą kodu 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 konstruktora modeli do trenowania modelu. Tego potoku można użyć do ponownego trenowania modelu.
    • * SentimentAnalysis.mlnet — ten plik zawiera metadane i szczegóły konfiguracji modelu 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, niektóre łatwe sposoby na poprawę wydajności modelu to użycie większej ilości danych.

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

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

W kroku Użycie narzędzie Model Builder udostępnia szablony projektów, których można użyć do korzystania z modelu. Ten krok jest opcjonalny i możesz wybrać metodę, która najlepiej odpowiada potrzebom korzystania z modelu.

  • Console application
  • Web API

Dodawanie kodu w celu przewidywania

Konfigurowanie puli PredictionEngine

Aby utworzyć pojedyncze przewidywanie, musisz utworzyć element PredictionEngine<TSrc,TDst>. PredictionEngine<TSrc,TDst> nie jest bezpieczny dla wątków. 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. Aby poprawić wydajność i zapewnić bezpieczeństwo wątków, należy użyć kombinację wstrzykiwania zależności i usługi PredictionEnginePool, która tworzy ObjectPool<T> obiekty typu PredictionEngine<TSrc,TDst>, do użycia w całej aplikacji.

  1. Zainstaluj pakiet Microsoft.Extensions.ML NuGet:

    1. W eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt i wybierz pozycję 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, a następnie wybierz pozycję 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 dla wymienionych pakietów.
  2. Otwórz plik Program.cs w projekcie SentimentRazor .

  3. Dodaj następujące using dyrektywy, aby odwołać się do pakietu Microsoft.Extensions.ML NuGet 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.mlnet");
    

Tworzenie procedury obsługi analizy tonacji

Przewidywania będą wykonywane 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 PredictionEnginePool<TData,TPrediction> elementu , aby zwrócić przewidywanie.

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

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

    Aby użyć skonfigurowanego PredictionEnginePool<TData,TPrediction> w pliku Program.cs , należy wstrzyknąć 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 w pliku Pages/Index.cshtml.cs .

    private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
    
  3. Zmodyfikuj IndexModel konstruktor w klasie i wstrzykuj 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 metod, która używa PredictionEnginePool elementu do tworzenia przewidywań na podstawie 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 mają wartość 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 do strony internetowej.

      return Content(sentiment);
      

Konfigurowanie strony internetowej

Wyniki zwracane przez element OnGetAnalyzeSentiment będą dynamicznie wyświetlane 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 do wysyłania danych wejściowych ze strony internetowej do OnGetAnalyzeSentiment programu obsługi.

    1. W pliku site.js znajdującym się w katalogu wwwroot\js utwórz funkcję o nazwie 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 w celu pobrania danych wejściowych od użytkownika, wyślij ją do OnGetAnalyzeSentiment funkcji przy użyciu funkcji i zaktualizuj 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.

Uruchomione okno z oknem przewidywanych tonacji

Note

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.

Next steps

W tym samouczku nauczyłeś się następujących rzeczy:

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

Additional Resources

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