Ескертпе
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Жүйеге кіруді немесе каталогтарды өзгертуді байқап көруге болады.
Бұл бетке кіру үшін қатынас шегін айқындау қажет. Каталогтарды өзгертуді байқап көруге болады.
Узнайте, как анализировать тональность из комментариев в режиме реального времени в веб-приложении.
В этом руководстве показано, как создать приложение ASP.NET Core Razor Pages, которое классифицирует тональность от комментариев веб-сайта в режиме реального времени.
В этом руководстве вы узнаете, как:
- Создание приложения ASP.NET Core Razor Pages
- Подготовка и понимание данных
- Выбор сценария
- Загрузка данных
- Обучение модели
- Оценка модели
- Использование модели для прогнозирования
Исходный код этого руководства можно найти в репозитории dotnet/machinelearning-samples .
Prerequisites
Список необходимых компонентов и инструкций по установке см. в руководстве по установке конструктора моделей .
Создание приложения Razor Pages
Создайте приложение ASP.NET Core Razor Pages.
- В Visual Studio откройте диалоговое окно "Создание проекта ".
- В диалоговом окне "Создание проекта" выберите шаблон проекта ASP.NET Core Web App .
- В текстовом поле "Имя " введите "SentimentRazor" и нажмите кнопку "Далее".
- В диалоговом окне "Дополнительные сведения" оставьте все значения по умолчанию и нажмите кнопку "Создать".
Подготовка и понимание данных
Скачайте набор данных для детоксикации Википедии. Когда откроется веб-страница, щелкните правой кнопкой мыши страницу, выберите "Сохранить как " и сохраните файл в любом месте компьютера.
Каждая строка в наборе данных wikipedia-detox-250-line-data.tsv представляет другой обзор, оставленный пользователем в Википедии. Первый столбец представляет тональность текста (0 не является токсичным, 1 является токсичным), а второй столбец представляет комментарий, оставленный пользователем. Столбцы разделены вкладками. Данные выглядят следующим образом:
| Sentiment | SentimentText |
|---|---|
| 1 | ==RUDE== Чувак, вы грубо отправьте эту карловую фотографию обратно или еще. |
| 1 | == OK! == IM СОБИРАЕТСЯ ВАНДАЛИЗОВАТЬ ДИКИЕ ВИКИ-САЙТ!! |
| 0 | Надеюсь, это поможет. |
Создание файла конфигурации построителя моделей
При первом добавлении модели машинного обучения в решение вам будет предложено создать mbconfig файл. Файл mbconfig отслеживает все, что вы делаете в построителе моделей, чтобы разрешить повторно открыть сеанс.
- В обозревателе решений щелкните правой кнопкой мыши проект SentimentRazor и выберите "Добавить>модель машинного обучения".
- В диалоговом окне назовите проект Конструктора моделей SentimentAnalysis.mbconfig и нажмите кнопку "Добавить".
Выбор сценария
Экран сценария построителя моделей
Чтобы обучить модель, необходимо выбрать из списка доступных сценариев машинного обучения, предоставляемых Конструктором моделей.
Для этого примера задача — это классификация текста. На шаге сценария расширения Конструктора моделей выберите сценарий классификации текста .
Выберите среду
Конструктор моделей может обучаться в разных средах в зависимости от выбранного сценария.
Выберите локальный (GPU) в качестве среды и нажмите кнопку "Далее".
Note
В этом сценарии используются методы глубокого обучения, которые лучше всего работают в средах GPU. Если у вас нет GPU, выберите локальную среду (ЦП), но обратите внимание, что ожидаемое время обучения будет значительно длиннее. Дополнительные сведения об использовании графических процессоров с конструктором моделей см. в руководстве по построителю моделей.
Загрузка данных
Построитель моделей принимает данные из двух источников, базы данных SQL Server или локального файла в csv или tsv формате.
- На шаге данных средства построителя моделей выберите файл из параметров источника данных.
- Нажмите кнопку рядом с текстовым полем "Выбор файла " и используйте проводник для просмотра и выбора файла wikipedia-детоксикации-250-line-data.tsv .
- Выберите тональность из раскрывающегося списка "Столбец", чтобы прогнозировать (метку).
- Выберите "Тональность" в раскрывающемся списке "Текстовый столбец ".
- Нажмите кнопку "Далее" , чтобы перейти к следующему шагу в построителе моделей.
Обучение модели
Задача машинного обучения, используемая для обучения модели анализа тональности в этом руководстве, — это классификация текста. Во время обучения модели построитель моделей обучает модель классификации текста для набора данных с помощью архитектуры нейронной сети NAS-BERT .
Выберите Начать обучение.
После завершения обучения результаты процесса обучения отображаются в разделе "Результаты обучения " на экране "Обучение ". Помимо предоставления результатов обучения, в файле SentimentAnalysis.mbconfig создаются три файла кода программной части.
-
SentimentAnalysis.consumption.cs . Этот файл содержит
ModelInputсхемы иModelOutputсхемыPredict, созданные для использования модели. - SentimentAnalysis.training.cs — этот файл содержит конвейер обучения (преобразования данных, обучающий, гиперпараметры тренера), выбранные конструктором моделей для обучения модели. Этот конвейер можно использовать для повторного обучения модели.
- * SentimentAnalysis.mlnet — этот файл содержит метаданные и сведения о конфигурации для модели ML.NET.
-
SentimentAnalysis.consumption.cs . Этот файл содержит
Нажмите кнопку "Далее" , чтобы перейти к следующему шагу.
Оценка модели
Результатом шага обучения будет одна модель, которая имеет лучшую производительность. На шаге оценки средства построителя моделей выходной раздел будет содержать обучающий элемент, используемый наиболее производительной моделью, а также метрики оценки.
Если вы не удовлетворены метриками оценки, некоторые простые способы повышения производительности модели — использовать больше данных.
В противном случае нажмите кнопку "Далее" , чтобы перейти к шагу "Использование " в построителе моделей.
Добавление шаблонов проектов потребления (необязательно)
На шаге "Использование " построитель моделей предоставляет шаблоны проектов, которые можно использовать для использования модели. Этот шаг является необязательным, и вы можете выбрать метод, который лучше всего подходит для использования модели.
- Console application
- Web API
Добавление кода для создания прогнозов
Настройка пула PredictionEngine
Для формирования одного прогноза необходимо создать PredictionEngine<TSrc,TDst>.
PredictionEngine<TSrc,TDst> не является потокобезопасным. Кроме того, необходимо создать экземпляр везде, где он необходим в приложении. По мере увеличения размера приложения этот процесс может стать неуправляемым. Для улучшенной производительности и потокобезопасности используйте сочетание внедрения зависимостей и службы PredictionEnginePool, которое создает объекты ObjectPool<T> (PredictionEngine<TSrc,TDst>) для использования во всем приложении.
Установите пакет NuGet Microsoft.Extensions.ML :
- В обозревателе решений щелкните проект правой кнопкой мыши и выберите Управление пакетами NuGet.
- Выберите nuget.org в качестве источника пакета.
- Перейдите на вкладку "Обзор " и найдите Microsoft.Extensions.ML.
- Выберите пакет в списке и нажмите кнопку "Установить".
- Нажмите кнопку ОК в диалоговом окне Предварительный просмотр изменений.
- Нажмите кнопку 'Принять' в диалоговом окне принятия лицензии, если вы согласны с условиями лицензии для указанных пакетов.
Откройте файл Program.cs в проекте SentimentRazor .
Добавьте следующие
usingдирективы, чтобы ссылаться на пакет NuGet Microsoft.Extensions.ML и проект SentimentRazorML.Model :using Microsoft.Extensions.ML; using static SentimentRazor.SentimentAnalysis;PredictionEnginePool<TData,TPrediction> Настройте приложение в файле Program.cs:
builder.Services.AddPredictionEnginePool<ModelInput, ModelOutput>() .FromFile("SentimentAnalysis.mlnet");
Создание обработчика анализа тональности
Прогнозы будут сделаны на главной странице приложения. Таким образом, метод, принимающий входные данные пользователя и использующий PredictionEnginePool<TData,TPrediction> возвращающий прогноз, необходимо добавить.
Откройте файл Index.cshtml.cs , расположенный в каталоге Pages , и добавьте следующие
usingдирективы:using Microsoft.Extensions.ML; using static SentimentRazor.SentimentAnalysis;Чтобы использовать настроенный PredictionEnginePool<TData,TPrediction> в файле Program.cs , необходимо внедрить его в конструктор модели, в которую вы хотите его использовать.
Добавьте переменную, чтобы ссылаться PredictionEnginePool<TData,TPrediction>
IndexModelна класс внутри файла Pages/Index.cshtml.cs .private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;Измените конструктор в
IndexModelклассе и внесите PredictionEnginePool<TData,TPrediction> в него службу.public IndexModel(ILogger<IndexModel> logger, PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool) { _logger = logger; _predictionEnginePool = predictionEnginePool; }Создайте обработчик метода, который использует
PredictionEnginePoolпрогнозы из входных данных пользователя, полученных с веб-страницы.Под методом
OnGetсоздайте новый метод с именемOnGetAnalyzeSentimentpublic IActionResult OnGetAnalyzeSentiment([FromQuery] string text) { }В методе
OnGetAnalyzeSentimentвозвращается нейтральное тональность, если входные данные пользователя пусты или null.if (String.IsNullOrEmpty(text)) return Content("Neutral");При наличии допустимых входных данных создайте новый экземпляр
ModelInput.var input = new ModelInput { SentimentText = text };Используйте для прогнозирования PredictionEnginePool<TData,TPrediction> тональности.
var prediction = _predictionEnginePool.Predict(input);Преобразуйте прогнозируемое
boolзначение в токсичный или не токсичный с помощью следующего кода.var sentiment = Convert.ToBoolean(prediction.PredictedLabel) ? "Toxic" : "Not Toxic";Наконец, верните тональность обратно на веб-страницу.
return Content(sentiment);
Настройка веб-страницы
Результаты, возвращаемые приложением OnGetAnalyzeSentiment , будут динамически отображаться на Index веб-странице.
Откройте файл Index.cshtml в каталоге Pages и замените его содержимое следующим кодом:
@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>Затем добавьте код стилей css в конец страницы site.css в каталоге 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; }После этого добавьте код для отправки входных данных из веб-страницы обработчику
OnGetAnalyzeSentiment.В файлеsite.js , расположенном в каталоге wwwroot\js , создайте функцию, вызываемую
getSentimentдля создания HTTP-запроса GET с входными данными пользователя вOnGetAnalyzeSentimentобработчик.function getSentiment(userInput) { return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`) .then((response) => { return response.text(); }) }Ниже добавьте еще одну функцию, вызываемую
updateMarkerдля динамического обновления положения маркера на веб-странице по мере прогнозирования тональности.function updateMarker(markerPosition, sentiment) { $("#markerPosition").attr("style", `left:${markerPosition}%`); $("#markerValue").text(sentiment); }Создайте функцию обработчика событий, вызываемую
updateSentimentдля получения входных данных от пользователя, отправьте ееOnGetAnalyzeSentimentв функцию с помощьюgetSentimentфункции и обновите маркер сupdateMarkerпомощью функции.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"); } }); }Наконец, зарегистрируйте обработчик событий и привязать его к
textareaэлементу с помощью атрибутаid=Message.$("#Message").on('change input paste', updateSentiment)
Запуск приложения
Теперь, когда приложение настроено, запустите приложение, которое должно запуститься в браузере.
Когда приложение запускается, введите эту модель не хватает данных! в текстовой области. Прогнозируемые настроения должны быть токсичными.
Note
PredictionEnginePool<TData,TPrediction> создает несколько экземпляров PredictionEngine<TSrc,TDst>. Из-за размера модели в первый раз, когда вы используете ее для прогнозирования, это может занять несколько секунд. Последующие прогнозы должны быть мгновенными.
Next steps
Из этого руководства вы узнали, как:
- Создание приложения ASP.NET Core Razor Pages
- Подготовка и понимание данных
- Выбор сценария
- Загрузка данных
- Обучение модели
- Оценка модели
- Использование модели для прогнозирования
Additional Resources
Дополнительные сведения о разделах, упомянутых в этом руководстве, см. в следующих ресурсах:
- Сценарии модельного конструктора
- Метрики модели классификации текста