Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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.
- W programie Visual Studio otwórz okno dialogowe Tworzenie nowego projektu .
- W oknie dialogowym "Tworzenie nowego projektu" wybierz szablon projektu ASP.NET Core Web App .
- W polu tekstowym Nazwa wpisz ciąg "SentimentRazor" i wybierz przycisk Dalej.
- 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.
- W Eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt SentimentRazor i wybierz pozycję Dodaj>model uczenia maszynowego.
- W oknie dialogowym nadaj projektowi Model Builder nazwę SentimentAnalysis.mbconfig, a następnie wybierz pozycję Dodaj.
Wybór scenariusza
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.
- W kroku danych narzędzia Model Builder wybierz pozycję Plik z opcji źródła danych.
- 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 .
- Wybierz pozycję Tonacja z listy rozwijanej Kolumna, aby przewidzieć (etykietę).
- Wybierz pozycję SentimentText z listy rozwijanej Kolumna tekstowa .
- 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- .
Wybierz pozycję Rozpocznij szkolenie.
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
ModelInputschematy i orazModelOutputPredictfunkcję 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.
-
SentimentAnalysis.consumption.cs — ten plik zawiera
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.
Zainstaluj pakiet Microsoft.Extensions.ML NuGet:
- W eksploratorze rozwiązań kliknij prawym przyciskiem myszy projekt i wybierz pozycję Zarządzaj pakietami NuGet.
- Wybierz pozycję "nuget.org" jako źródło pakietu.
- Wybierz kartę Przeglądaj i wyszukaj Microsoft.Extensions.ML.
- Wybierz pakiet z listy, a następnie wybierz pozycję Zainstaluj.
- Wybierz przycisk OK w oknie dialogowym Podgląd zmian
- Wybierz przycisk Akceptuję w oknie dialogowym Akceptacja licencji , jeśli zgadzasz się z postanowieniami licencyjnymi dla wymienionych pakietów.
Otwórz plik Program.cs w projekcie SentimentRazor .
Dodaj następujące
usingdyrektywy, aby odwołać się do pakietu Microsoft.Extensions.ML NuGet i projektu SentimentRazorML.Model :using Microsoft.Extensions.ML; using static SentimentRazor.SentimentAnalysis;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.
Otwórz plik Index.cshtml.cs znajdujący się w katalogu Pages i dodaj następujące
usingdyrektywy: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ć.
Dodaj zmienną, aby odwoływać się PredictionEnginePool<TData,TPrediction>
IndexModeldo wewnątrz klasy w pliku Pages/Index.cshtml.cs .private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;Zmodyfikuj
IndexModelkonstruktor w klasie i wstrzykuj do niej usługę PredictionEnginePool<TData,TPrediction> .public IndexModel(ILogger<IndexModel> logger, PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool) { _logger = logger; _predictionEnginePool = predictionEnginePool; }Utwórz procedurę obsługi metod, która używa
PredictionEnginePoolelementu do tworzenia przewidywań na podstawie danych wejściowych użytkownika odebranych ze strony internetowej.OnGetPoniżej metody utwórz nową metodę o nazwieOnGetAnalyzeSentimentpublic IActionResult OnGetAnalyzeSentiment([FromQuery] string text) { }OnGetAnalyzeSentimentWewną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");Biorąc pod uwagę prawidłowe dane wejściowe, utwórz nowe wystąpienie klasy
ModelInput.var input = new ModelInput { SentimentText = text };Użyj wartości , PredictionEnginePool<TData,TPrediction> aby przewidzieć tonację.
var prediction = _predictionEnginePool.Predict(input);Przekonwertuj przewidywaną
boolwartość na toksyczną lub nietoksyczną przy użyciu następującego kodu.var sentiment = Convert.ToBoolean(prediction.PredictedLabel) ? "Toxic" : "Not Toxic";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.
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>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; }Następnie dodaj kod do wysyłania danych wejściowych ze strony internetowej do
OnGetAnalyzeSentimentprogramu obsługi.W pliku site.js znajdującym się w katalogu wwwroot\js utwórz funkcję o nazwie
getSentimentw celu utworzenia żądania HTTP GET z danymi wejściowymi użytkownika doOnGetAnalyzeSentimentprogramu obsługi.function getSentiment(userInput) { return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`) .then((response) => { return response.text(); }) }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); }Utwórz funkcję obsługi zdarzeń o nazwie
updateSentimentw celu pobrania danych wejściowych od użytkownika, wyślij ją doOnGetAnalyzeSentimentfunkcji przy użyciu funkcji i zaktualizuj znacznik zaupdateMarkerpomocągetSentimentfunkcji .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"); } }); }Na koniec zarejestruj procedurę obsługi zdarzeń i powiąż ją
textareaz elementem za pomocą atrybutuid=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.
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: