Öğretici: ML.NET Model Builder kullanarak Web uygulamasındaki Web sitesindeki açıklamaları çözümleme
Bir Web uygulamasının içinde gerçek zamanlı açıklamalardan yaklaşımı çözümlemeyi öğrenin.
bu öğreticide, web sitesi açıklamalarından gerçek zamanlı olarak yaklaşım sınıflandıran bir ASP.NET Core Razor Pages uygulamasının nasıl oluşturulacağı gösterilmektedir.
Bu öğreticide şunların nasıl yapıldığını öğreneceksiniz:
- ASP.NET Core Razor Pages uygulaması oluşturma
- Verileri hazırlama ve anlama
- Senaryo seçin
- Verileri yükleme
- Modeli eğitme
- Modeli değerlendirme
- Tahmin için modeli kullanma
Not
Model Oluşturucu Şu anda önizleme aşamasındadır.
Bu öğreticinin kaynak kodunu DotNet/machinöğrenim-örnekleri deposunda bulabilirsiniz.
Ön koşullar
Önkoşul ve Yükleme yönergelerinin bir listesi için model Oluşturucu Yükleme Kılavuzu' nu ziyaret edin.
Razor Pages uygulaması oluşturma
ASP.NET Core bir Razor Pages uygulaması oluşturun.
- Visual Studio açın ve menü çubuğundan dosya > yeni > Project öğesini seçin.
- yeni Project iletişim kutusunda, Visual C# düğümünü ve ardından Web düğümünü seçin.
- ASP.NET Core Web uygulaması proje şablonunu seçin.
- Ad metin kutusuna "SentimentRazor" yazın.
- Çözümün ve projenin aynı dizine yerleştirdiğinizden emin olun (vs 2019) veya çözüm için dizin oluşturma denetlenir (vs 2017).
- Tamam düğmesini seçin.
- pencerede farklı ASP.NET Core proje türlerini görüntüleyen Web uygulaması ' nı seçin ve ardından tamam düğmesini seçin.
Verileri hazırlama ve anlama
Vikipedi Detox veri kümesiniindirin. Web sayfası açıldığında, sayfaya sağ tıklayın, farklı kaydet ' i seçin ve dosyayı bilgisayarınızda herhangi bir yere kaydedin.
Vivtox-250-Line-Data. tsv veri kümesindeki her satır, visede bir kullanıcı tarafından bırakılan farklı bir gözden geçirmeyi temsil eder. İlk sütun metnin (0-Toxic, 1 ' in Toxic) yaklaşımını temsil eder ve ikinci sütun Kullanıcı tarafından bırakılan yorumu temsil eder. Sütunlar sekmelerle ayrılır. Veriler aşağıdaki gibi görünür:
| Yaklaşım | Sentimentmetni |
|---|---|
| 1 | = = İşlenmemiş = = dude, o Carl resmini geri yüklemeniz veya başka bir şey yapmanız gerekir. |
| 1 | = = TAMAM! = = ıM, DAHA SONRA BIR WIKI 'YI DAHA SONRA!!! |
| 0 | Bunu umuyoruz. |
Senaryo seçin

Modelinize eğitebilmeniz için, model Oluşturucu tarafından sağlanan kullanılabilir makine öğrenimi senaryoları listesinden seçim yapmanız gerekir.
- Çözüm Gezgini, SentimentRazor projesine sağ tıklayın ve > Machine Learning Model ekle... seçeneğini belirleyin.
- Bu örnek için senaryo, yaklaşım analiziydi. Model Oluşturucu aracının senaryo adımında yaklaşım Analizi senaryosunu seçin.
Verileri yükleme
Model oluşturucu iki kaynaktan (bir SQL Server veritabanı ya da yerel bir dosya) veya biçimdeki verileri kabul eder csv tsv .
- Model Oluşturucu aracının veri adımında, veri kaynağı açılır listesinden Dosya ' yı seçin.
- Dosya seçin metin kutusunun yanındaki düğmeyi seçin ve dosya Gezgini 'ni kullanarak, vibtox-250-Line-Data. tsv dosyasına gidin ve seçin.
- Tahmin edilecek sütun (etiket) açılan listesini seçin.
- Giriş sütunları (Özellikler) açılır menüsü için varsayılan değerleri bırakın.
- Model Oluşturucu aracında bir sonraki adıma geçmek için eğitme bağlantısını seçin.
Modeli eğitme
Bu öğreticide yaklaşım Analizi modelini eğitmek için kullanılan makine öğrenimi görevi ikili sınıflandırmasıdır. Model oluşturma işlemi sırasında model Oluşturucu, veri kümeniz için en iyi işlem modelini bulmak üzere farklı ikili sınıflandırma algoritmalarını ve ayarlarını kullanarak modelleri ayrı ayrı işler.
Modelin eğitilmesi için gereken süre, veri miktarına müşterinizin istekleriyle orantılı. Model Oluşturucu, veri kaynağınızın boyutuna bağlı olarak, tren süresi (saniye) için varsayılan bir değer seçer.
Model Oluşturucu değeri, " saniye) ila 10 saniye arasında bir süre olarak ayarlasa da, 30 saniyeye yükseltin. Daha uzun bir süre için eğitim, model oluşturucunun en iyi modeli aramada daha fazla sayıda algoritmaların ve parametrelerin birleşimini keşfetmesine olanak tanır.
Eğitimi Başlat' ı seçin.
Eğitim süreci boyunca, ilerleme verileri
Progresseğitme adımının bölümünde görüntülenir.- Durum, eğitim sürecinin tamamlanma durumunu görüntüler.
- En iyi doğruluk, şu ana kadar model Oluşturucu tarafından bulunan en iyi şekilde oluşan modelin doğruluğunu gösterir. Daha yüksek doğruluk, modelin test verilerinde daha doğru tahmin edilen anlamına gelir.
- En iyi algoritma, şu ana kadar model Oluşturucu tarafından bulunan en iyi şekilde gerçekleştirilen algoritmanın adını görüntüler.
- Son algoritma modeli eğitmek için model Oluşturucu tarafından en son kullanılan algoritmanın adını görüntüler.
Eğitim tamamlandıktan sonra bir sonraki adıma geçmek için bağlantıyı değerlendir ' i seçin.
Modeli değerlendirme
Eğitim adımının sonucu, en iyi performansa sahip bir model olacaktır. Model Oluşturucu aracının değerlendir adımında, çıkış bölümü en iyi model girişinde en iyi işlem modeli için kullanılan algoritmayı ve En Iyi model doğruluğunun ölçümlerini içerir. Ayrıca, ilk beş modeli ve bunların ölçümlerini içeren bir Özet tablosu gösterilir.
Doğruluk ölçümlerinizi tatmin ediyorsanız, model doğruluğunu artırmak için bazı kolay yollar, modelin eğilmesi veya daha fazla veri kullanmak için zaman miktarını artırmaktır. Aksi takdirde, model Oluşturucu aracında son adıma geçmek için kod bağlantısını seçin.
Tahminleri yapmak için kodu ekleyin
Eğitim sürecinin bir sonucu olarak iki proje oluşturulacaktır.
Eğitilen modele başvur
Model Oluşturucu aracının kod adımında, otomatik olarak oluşturulan projeleri çözüme eklemek Için Proje Ekle ' yi seçin.
Aşağıdaki projeler Çözüm Gezgini görünmelidir:
- SentimentRazorML. ConsoleApp: model eğitimi ve tahmin kodunu içeren bir .NET Core konsol uygulaması.
- SentimentRazorML. model: giriş ve çıkış modeli verilerinin şemasını tanımlayan veri modellerini ve eğitim sırasında en iyi uygulanan modelin kaydedilmiş sürümünü içeren .NET Standard bir sınıf kitaplığı.
Bu öğretici için, SentimentRazorML. model projesi yalnızca, tahmine dayalı olarak konsolu yerine SentimentRazor Web uygulamasında yapılabilmesi için kullanılır. SentimentRazorML. ConsoleApp , Puanlama için kullanılmayacak olsa da, daha sonra yeni verileri kullanarak modeli yeniden eğitebilmek için kullanılabilir. Yeniden eğitim, Bu öğreticinin kapsamı dışındadır.
PredictionEngine havuzunu yapılandırma
Tek bir tahmin yapmak için, oluşturmanız gerekir PredictionEngine<TSrc,TDst> . PredictionEngine<TSrc,TDst> , iş parçacığı açısından güvenli değildir. Ayrıca, uygulamanız içinde gerek duyduğu her yerde bir örneği oluşturmanız gerekir. Uygulamanız büyüdükçe, bu işlem yönetilebilir hale gelebilir. Daha iyi performans ve iş parçacığı güvenliği için, PredictionEnginePool ObjectPool<T> PredictionEngine<TSrc,TDst> uygulamanız genelinde kullanılacak nesneleri oluşturan bağımlılık ekleme ve hizmetin bir birleşimini kullanın.
Microsoft. Extensions. ML NuGet paketini yükler:
- Çözüm Gezgini, projeye sağ tıklayın ve NuGet paketlerini yönet' i seçin.
- Paket kaynağı olarak "nuget.org" öğesini seçin.
- Tarayıcı sekmesini seçin ve Microsoft. Extensions. ml için arama yapın.
- Listeden paketi seçin ve ardından Install düğmesini seçin.
- Değişiklikleri Önizle Iletişim kutusunda Tamam düğmesini seçin
- Listelenen paketlerin lisans koşullarını kabul ediyorsanız, Lisans kabulü Iletişim kutusunda kabul ediyorum düğmesini seçin.
SentimentRazor projesindeki Startup. cs dosyasını açın.
Microsoft. Extensions. ML NuGet package ve SentimentRazorML. Model projesine başvurmak için aşağıdaki using deyimlerini ekleyin:
using System.IO; using Microsoft.Extensions.ML; using SentimentRazorML.Model;Eğitilen model dosyasının konumunu depolamak için genel bir değişken oluşturun.
private readonly string _modelPath;Model dosyası, uygulamanızın derleme dosyalarının yanı sıra derleme dizininde depolanır. Daha kolay erişim sağlamak için,
GetAbsolutePathyönteminden sonra adlı bir yardımcı yöntem oluşturunConfigurepublic static string GetAbsolutePath(string relativePath) { FileInfo _dataRoot = new FileInfo(typeof(Program).Assembly.Location); string assemblyFolderPath = _dataRoot.Directory.FullName; string fullPath = Path.Combine(assemblyFolderPath, relativePath); return fullPath; }Öğesini
GetAbsolutePathStartupayarlamak için sınıf oluşturucusunda metodunu kullanın_modelPath._modelPath = GetAbsolutePath("MLModel.zip");PredictionEnginePoolYöntemi için uygulamanızı için yapılandırınConfigureServices:services.AddPredictionEnginePool<ModelInput, ModelOutput>() .FromFile(_modelPath);
Yaklaşım Analizi işleyicisi oluşturma
Tahmine dayalı, uygulamanın ana sayfasında yapılır. Bu nedenle, Kullanıcı girişini alan ve PredictionEnginePool bir tahmin eklenmesi için kullanması gereken bir yöntem.
Pages dizininde bulunan Index. cshtml. cs dosyasını açın ve aşağıdaki using deyimlerini ekleyin:
using Microsoft.Extensions.ML; using SentimentRazorML.Model;PredictionEnginePoolStartupSınıfında yapılandırılan ' ı kullanmak için, onu kullanmak istediğiniz modelin oluşturucusuna eklemek gerekir.Sınıfının içine başvurmak için bir değişken ekleyin
PredictionEnginePoolIndexModel.private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;Sınıfında bir Oluşturucu oluşturun
IndexModelvePredictionEnginePoolhizmeti ona ekleyin.public IndexModel(PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool) { _predictionEnginePool = predictionEnginePool; }PredictionEnginePoolWeb sayfasından alınan Kullanıcı girişinden tahminleri yapmak için öğesini kullanan bir yöntem işleyicisi oluşturun.Yönteminin altında
OnGet, adlı yeni bir yöntem oluşturunOnGetAnalyzeSentimentpublic IActionResult OnGetAnalyzeSentiment([FromQuery] string text) { }Yöntemi içinde
OnGetAnalyzeSentiment, kullanıcının girişi boş veya null olduğunda nötr yaklaşım döndürün.if (String.IsNullOrEmpty(text)) return Content("Neutral");Geçerli bir giriş verildiğinde yeni bir örneğini oluşturun
ModelInput.var input = new ModelInput { SentimentText = text };Yaklaşımı
PredictionEnginePooltahmin etmek için kullanın.var prediction = _predictionEnginePool.Predict(input);Tahmin edilen
booldeğeri, aşağıdaki kodla birlikte Toxic öğesine dönüştürün.var sentiment = Convert.ToBoolean(prediction.Prediction) ? "Toxic" : "Not Toxic";Son olarak, yaklaşımı Web sayfasına geri döndürün.
return Content(sentiment);
Web sayfasını yapılandırma
Tarafından döndürülen sonuçlar, OnGetAnalyzeSentiment Web sayfasında dinamik olarak görüntülenir Index .
Pages dizinindeki Index. cshtml dosyasını açın ve içeriğini şu kodla değiştirin:
@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>Ardından, wwwroot\css dizinindeki site. css sayfasının sonuna CSS stil oluşturma kodu ekleyin:
/* 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; }Bundan sonra, Web sayfasından işleyiciye giriş göndermek için kod ekleyin
OnGetAnalyzeSentiment.Wwwroot\js dizininde bulunan site.js dosyasında,
getSentimentişleyiciye Kullanıcı girişiyle bir http isteği almak için adlı bir işlev oluşturunOnGetAnalyzeSentiment.function getSentiment(userInput) { return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`) .then((response) => { return response.text(); }) }Bunun altında, yaklaşım
updateMarkertahmin edildiğinde Web sayfasındaki işaretin konumunu dinamik olarak güncelleştirmek için adlı başka bir işlev ekleyin.function updateMarker(markerPosition, sentiment) { $("#markerPosition").attr("style", `left:${markerPosition}%`); $("#markerValue").text(sentiment); }Kullanıcıdan girişi almak için çağrılan bir olay işleyici işlevi oluşturun
updateSentiment,OnGetAnalyzeSentimentişlevi kullanarak işleve gönderingetSentimentve işaretleyiciyiupdateMarkerişlevle güncelleştirin.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"); } }); }Son olarak, olay işleyicisini kaydedin ve
textareaözniteliği ile öğesine bağlayınid=Message.$("#Message").on('change input paste', updateSentiment)
Uygulamayı çalıştırma
Uygulamanız ayarlandığına göre, tarayıcınızda başlatması gereken uygulamayı çalıştırın.
Uygulama başlatıldığında, model Oluşturucu seyrek erişimli yazın! metin alanına. Görünen tahmini yaklaşım, Toxic olmamalıdır.

Model Oluşturucu tarafından oluşturulan projelere daha sonra başka bir çözümün içinde başvurulmaları gerekiyorsa, bunları dizin içinde bulabilirsiniz C:\Users\%USERNAME%\AppData\Local\Temp\MLVSTools .
Sonraki adımlar
Bu öğreticide, şunların nasıl yapıldığını öğrendiniz:
- ASP.NET Core Razor Pages uygulaması oluşturma
- Verileri hazırlama ve anlama
- Senaryo seçin
- Verileri yükleme
- Modeli eğitme
- Modeli değerlendirme
- Tahmin için modeli kullanma
Ek Kaynaklar
Bu öğreticide bahsedilen konular hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları ziyaret edin: