Esercitazione: Analizzare il sentiment dei commenti dei siti Web in un'applicazione Web usando ML.NET Model Builder
Informazioni su come analizzare il sentiment dai commenti in tempo reale all'interno di un'applicazione Web.
Questa esercitazione illustra come creare un'applicazione Razor Pages ASP.NET Core che classifica il sentiment dai commenti del sito Web in tempo reale.
In questa esercitazione verranno illustrate le procedure per:
- Creare un'applicazione Razor Pages ASP.NET Core
- Preparare e identificare i dati
- Scegliere uno scenario
- Caricare i dati
- Eseguire il training del modello
- Valutare il modello
- Usare il modello per le stime
È possibile trovare il codice sorgente per questa esercitazione nel repository dotnet/machinelearning-samples .
Prerequisiti
Per un elenco di prerequisiti e istruzioni di installazione, vedere la Guida all'installazione del generatore di modelli.
Creare un'applicazione Razor Pages
Creare un'applicazione Razor Pages ASP.NET Core.
- In Visual Studio aprire la finestra di dialogo Crea un nuovo progetto .
- Nella finestra di dialogo "Crea un nuovo progetto" selezionare il modello di progetto ASP.NET Core app Web.
- Nella casella di testo Nome digitare "SentimentRazor" e selezionare il pulsante Avanti .
- Nella finestra di dialogo Informazioni aggiuntive lasciare invariate tutte le impostazioni predefinite e selezionare il pulsante Crea .
Preparare e identificare i dati
Scaricare il set di dati di Wikipedia detox. Quando si apre la pagina Web, fare clic con il pulsante destro del mouse sulla pagina, scegliere Salva con nome e salvare il file in qualsiasi punto del computer.
Ogni riga nel set di dati wikipedia-detox-250-line-data.tsv rappresenta una recensione diversa lasciata da un utente su Wikipedia. La prima colonna rappresenta il sentiment del testo (0 è non tossico, 1 è tossico) e la seconda colonna rappresenta il commento lasciato dall'utente. Le colonne sono separate dalle schede. I dati sono simili ai seguenti:
Valutazione | SentimentText |
---|---|
1 | ==RUDE== Dude, sei scortese caricamento che carl picture back, o altro. |
1 | == OK! == IM ANDANDO A VANDALIZZARE WILD ONES WIKI THEN!!! |
0 | Spero che questo aiuti. |
Creare un file di configurazione di Model Builder
Quando si aggiunge per la prima volta un modello di Machine Learning alla soluzione, verrà richiesto di creare un mbconfig
file. Il mbconfig
file tiene traccia di tutto ciò che si esegue in Generatore modelli per consentire di riaprire la sessione.
- In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto SentimentRazor e scegliere Aggiungi>modello di Machine Learning....
- Nella finestra di dialogo assegnare al progetto Model Builder il nome SentimentAnalysis.mbconfig e selezionare Aggiungi.
Scegliere uno scenario
Per eseguire il training del modello, è necessario scegliere uno scenario di Machine Learning disponibile nell'elenco del generatore di modelli.
Per questo esempio, l'attività è la classificazione del testo. Nel passaggio Scenario dell'estensione Generatore modelli selezionare lo scenario di classificazione del testo .
Selezionare un ambiente
Generatore modelli può eseguire il training in ambienti diversi a seconda dello scenario selezionato.
Selezionare Locale (GPU) come ambiente e fare clic sul pulsante Passaggio successivo .
Nota
Questo scenario usa tecniche di Deep Learning che funzionano meglio negli ambienti GPU. Se non si ha una GPU, scegliere l'ambiente locale (CPU), ma si noti che il tempo previsto per il training sarà notevolmente più lungo. Per altre informazioni sull'uso di GPU con Generatore modelli, vedere la guida al supporto della GPU in Generatore modelli.
Caricare i dati
Model Builder accetta dati da due origini, un database SQL Server o un file locale in o tsv
in csv
formato.
- Nel passaggio dati dello strumento Generatore modelli selezionare File dalle opzioni dell'origine dati.
- Selezionare il pulsante accanto alla casella di testo Seleziona un file e usare Esplora file per esplorare e selezionare il file wikipedia-detox-250-line-data.tsv.
- Scegliere Sentiment dall'elenco a discesa Colonna per stimare (Etichetta).
- Scegliere SentimentText dall'elenco a discesa Colonna di testo .
- Selezionare il pulsante Passaggio successivo per passare al passaggio successivo in Generatore modelli.
Eseguire il training del modello
L'attività di Machine Learning usata per eseguire il training del modello di analisi del sentiment in questa esercitazione è la classificazione del testo. Durante il processo di training del modello, Model Builder esegue il training di un modello di classificazione del testo per il set di dati usando l'architettura di rete neurale NAS-BERT .
Selezionare Start Training (Avvia training).
Al termine del training, i risultati del processo di training vengono visualizzati nella sezione Risultati training della schermata Training . Oltre a fornire risultati di training, vengono creati tre file code-behind nel file SentimentAnalysis.mbconfig .
- SentimentAnalysis.consumption.cs : questo file contiene gli
ModelInput
schemi eModelOutput
e laPredict
funzione generata per l'utilizzo del modello. - SentimentAnalysis.training.cs : questo file contiene la pipeline di training (trasformazioni dei dati, trainer, iperparametri di training) scelta da Generatore modelli per eseguire il training del modello. È possibile usare questa pipeline per ripetere il training del modello.
- *SentimentAnalysis.zip : si tratta di un file ZIP serializzato che rappresenta il modello di ML.NET sottoposto a training.
- SentimentAnalysis.consumption.cs : questo file contiene gli
Selezionare il pulsante Passaggio successivo per passare al passaggio successivo.
Valutare il modello
Il risultato del passaggio di training sarà un modello con prestazioni ottimali. Nel passaggio di valutazione dello strumento Generatore modelli la sezione di output conterrà il formatore usato dal modello con prestazioni migliori, nonché le metriche di valutazione.
Se non si è soddisfatti delle metriche di valutazione, alcuni modi semplici per provare a migliorare le prestazioni del modello sono l'uso di più dati.
In caso contrario, selezionare il pulsante Passaggio successivo per passare al passaggio Utilizzo in Generatore modelli.
Aggiungere modelli di progetto a consumo (facoltativo)
Nel passaggio Utilizzo Generatore modelli fornisce modelli di progetto che è possibile usare per utilizzare il modello. Questo passaggio è facoltativo ed è possibile scegliere il metodo più adatto alle proprie esigenze per l'uso del modello.
- Applicazione console
- API Web
Aggiungere il codice per eseguire stime
Configurare il pool PredictionEngine
Per eseguire una singola stima, è necessario creare un oggetto PredictionEngine<TSrc,TDst>. PredictionEngine<TSrc,TDst> non è thread-safe. Inoltre, è necessario crearne un'istanza ovunque sia necessaria all'interno dell'applicazione. Man mano che l'applicazione cresce, la gestione di questo processo può rivelarsi difficile. Per migliorare le prestazioni e la sicurezza dei thread, usare una combinazione di inserimento delle dipendenze e del servizio PredictionEnginePool
, che crea un ObjectPool<T> di oggetti PredictionEngine<TSrc,TDst> da usare in tutta l'applicazione.
Installare il pacchetto NuGet Microsoft.Extensions.ML :
- In Esplora soluzioni fare clic con il pulsante destro del mouse sul progetto e scegliere Gestisci pacchetti NuGet.
- Scegliere "nuget.org" come origine pacchetto.
- Selezionare la scheda Sfoglia e cercare Microsoft.Extensions.ML.
- Selezionare il pacchetto nell'elenco e selezionare il pulsante Installa .
- Selezionare il pulsante OK nella finestra di dialogo Anteprima modifiche
- Selezionare il pulsante Accetto nella finestra di dialogo Accettazione licenza se si accettano le condizioni di licenza per i pacchetti elencati.
Aprire il file Program.cs nel progetto SentimentRazor .
Aggiungere le istruzioni using seguenti per fare riferimento al pacchetto NuGet Microsoft.Extensions.ML e al progetto SentimentRazorML.Model :
using Microsoft.Extensions.ML; using static SentimentRazor.SentimentAnalysis;
Configurare l'oggetto PredictionEnginePool<TData,TPrediction> per l'applicazione nel file Program.cs :
builder.Services.AddPredictionEnginePool<ModelInput, ModelOutput>() .FromFile("SentimentAnalysis.zip");
Creare un gestore di analisi del sentiment
Le stime verranno effettuate all'interno della pagina principale dell'applicazione. Pertanto, un metodo che accetta l'input dell'utente e usa l'oggetto PredictionEnginePool<TData,TPrediction> per restituire una stima deve essere aggiunto.
Aprire il file Index.cshtml.cs che si trova nella directory Pages e aggiungere le istruzioni using seguenti:
using Microsoft.Extensions.ML; using static SentimentRazor.SentimentAnalysis;
Per usare il PredictionEnginePool<TData,TPrediction> file Program.cs configurato, è necessario inserirlo nel costruttore del modello in cui si vuole usarlo.
Aggiungere una variabile per fare riferimento all'interno PredictionEnginePool<TData,TPrediction> della classe all'interno del
IndexModel
file Pages/Index.cshtml.cs .private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
Modificare il costruttore nella
IndexModel
classe e inserire il PredictionEnginePool<TData,TPrediction> servizio in esso.public IndexModel(ILogger<IndexModel> logger, PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool) { _logger = logger; _predictionEnginePool = predictionEnginePool; }
Creare un gestore di metodi che usa per
PredictionEnginePool
effettuare stime dall'input utente ricevuto dalla pagina Web.Sotto il
OnGet
metodo creare un nuovo metodo denominatoOnGetAnalyzeSentiment
public IActionResult OnGetAnalyzeSentiment([FromQuery] string text) { }
All'interno del
OnGetAnalyzeSentiment
metodo, restituire sentiment neutrale se l'input dell'utente è vuoto o Null.if (String.IsNullOrEmpty(text)) return Content("Neutral");
Dato un input valido, creare una nuova istanza di
ModelInput
.var input = new ModelInput { SentimentText = text };
Usare per stimare il PredictionEnginePool<TData,TPrediction> sentiment.
var prediction = _predictionEnginePool.Predict(input);
Convertire il valore stimato
bool
in tossico o non tossico con il codice seguente.var sentiment = Convert.ToBoolean(prediction.PredictedLabel) ? "Toxic" : "Not Toxic";
Infine, restituire il sentiment alla pagina Web.
return Content(sentiment);
Configurare la pagina Web
I risultati restituiti dall'oggetto OnGetAnalyzeSentiment
verranno visualizzati dinamicamente nella Index
pagina Web.
Aprire il file Index.cshtml nella directory Pages e sostituirlo con il codice seguente:
@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>
Aggiungere quindi codice di stile css alla fine della pagina site.css nella directory 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; }
Successivamente, aggiungere codice per inviare input dalla pagina Web al
OnGetAnalyzeSentiment
gestore.Nel file site.js che si trova nella directory wwwroot\js creare una funzione chiamata
getSentiment
per eseguire una richiesta HTTP GET con l'input dell'utente alOnGetAnalyzeSentiment
gestore.function getSentiment(userInput) { return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`) .then((response) => { return response.text(); }) }
Di seguito, aggiungere un'altra funzione chiamata
updateMarker
per aggiornare dinamicamente la posizione del marcatore nella pagina Web in base alla stima del sentiment.function updateMarker(markerPosition, sentiment) { $("#markerPosition").attr("style", `left:${markerPosition}%`); $("#markerValue").text(sentiment); }
Creare una funzione del gestore eventi chiamata
updateSentiment
per ottenere l'input dall'utente, inviarla allaOnGetAnalyzeSentiment
funzione usando la funzione e aggiornare il marcatore con lagetSentiment
updateMarker
funzione.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"); } }); }
Registrare infine il gestore eventi e associarlo all'elemento con l'attributo
textarea
id=Message
.$("#Message").on('change input paste', updateSentiment)
Eseguire l'applicazione
Ora che l'applicazione è configurata, eseguire l'applicazione, che deve essere avviata nel browser.
Quando l'applicazione viene avviata, immettere Questo modello non dispone di dati sufficienti! nell'area di testo. Il sentiment stimato visualizzato deve essere Tossico.
Nota
PredictionEnginePool<TData,TPrediction> crea più istanze di PredictionEngine<TSrc,TDst>. A causa delle dimensioni del modello, la prima volta che si usa per effettuare una stima, può richiedere un paio di secondi. Le stime successive devono essere istantanee.
Passaggi successivi
In questa esercitazione sono state illustrate le procedure per:
- Creare un'applicazione Razor Pages ASP.NET Core
- Preparare e identificare i dati
- Scegliere uno scenario
- Caricare i dati
- Eseguire il training del modello
- Valutare il modello
- Usare il modello per le stime
Risorse aggiuntive
Per altre informazioni sugli argomenti presentati in questa esercitazione, vedere le risorse seguenti:
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per