Заметка
Доступ к этой странице требует авторизации. Вы можете попробовать войти в систему или изменить каталог.
Доступ к этой странице требует авторизации. Вы можете попробовать сменить директорию.
Узнайте, как анализировать тональность из комментариев в режиме реального времени в веб-приложении.
В этом руководстве показано, как создать приложение 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
Дополнительные сведения о разделах, упомянутых в этом руководстве, см. в следующих ресурсах:
- Сценарии модельного конструктора
- Метрики модели классификации текста