Öğretici: ML.NET Model Builder kullanarak web uygulamasındaki web sitesi açıklamalarının yaklaşımını analiz etme
Bir web uygulaması içinde açıklamalardan gelen yaklaşımı gerçek zamanlı olarak analiz etmeyi öğrenin.
Bu öğreticide, web sitesi yorumlarından gelen yaklaşımı gerçek zamanlı olarak sınıflandırır 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çme
- Verileri yükleme
- Modeli eğitme
- Modeli değerlendirme
- Tahminler için modeli kullanma
Bu öğreticinin kaynak kodunu dotnet/machinelearning-samples deposunda bulabilirsiniz.
Ön koşullar
Önkoşulların ve yükleme yönergelerinin listesi için Model Oluşturucusu yükleme kılavuzunu ziyaret edin.
Razor Pages uygulaması oluşturma
ASP.NET Core Razor Pages Uygulaması oluşturun.
- Visual Studio'da Yeni proje oluştur iletişim kutusunu açın.
- "Yeni proje oluştur" iletişim kutusunda web uygulaması proje şablonunu ASP.NET Core seçin.
- Ad metin kutusuna "SentimentRazor" yazın ve İleri düğmesini seçin.
- Ek bilgiler iletişim kutusunda tüm varsayılan değerleri olduğu gibi bırakın ve Oluştur düğmesini seçin.
Verileri hazırlama ve anlama
Wikipedia detoks veri kümesini indirin. Web sayfası açıldığında, sayfaya sağ tıklayın, Farklı Kaydet'i seçin ve dosyayı bilgisayarınızda herhangi bir yere kaydedin.
wikipedia-detox-250-line-data.tsv veri kümesindeki her satır, Wikipedia'da bir kullanıcı tarafından bırakılan farklı bir incelemeyi temsil eder. İlk sütun metnin yaklaşımını temsil eder (0 toksik değildir, 1 toksiktir), ikinci sütun ise kullanıcı tarafından bırakılan açıklamayı temsil eder. Sütunlar sekmelerle ayrılır. Veriler aşağıdaki gibi görünür:
Yaklaşım | SentimentText |
---|---|
1 | ==KABA== Ahbap, bu carl resmini kaba bir şekilde geri yükle, yoksa. |
1 | == Tamam! == IM WILD ONES WIKI'SINE ZARAR VERECEK!!! |
0 | Umarım bu yardımcı olur. |
Model Builder yapılandırma dosyası oluşturma
Çözüme ilk kez makine öğrenmesi modeli eklerken sizden bir mbconfig
dosya oluşturmanızı ister. Dosya, mbconfig
oturumu yeniden açmanızı sağlamak için Model Builder'da yaptığınız her şeyi izler.
- Çözüm Gezgini'daSentimentRazor projesine sağ tıklayın veMakine Öğrenmesi ModeliEkle>... seçeneğini belirleyin.
- İletişim kutusunda Model Oluşturucusu projesini SentimentAnalysis.mbconfig olarak adlandırın ve Ekle'yi seçin.
Senaryo seçme
Modelinizi eğitmek için Model Builder tarafından sağlanan kullanılabilir makine öğrenmesi senaryoları listesinden seçim yapmanız gerekir.
Bu örnek için görev metin sınıflandırmasıdır. Model Oluşturucu uzantısının Senaryo adımında Metin sınıflandırma senaryosunu seçin.
Ortam seçme
Model Oluşturucusu, seçilen senaryoya bağlı olarak farklı ortamlarda eğitebilir.
Ortamınız olarak Yerel (GPU) öğesini seçin ve sonraki adım düğmesine tıklayın.
Not
Bu senaryo, GPU ortamlarında en iyi şekilde çalışan derin öğrenme tekniklerini kullanır. GPU'nuz yoksa Yerel (CPU) ortamını seçin ancak eğitmek için beklenen sürenin önemli ölçüde daha uzun olacağını unutmayın. GPU'ları Model Oluşturucusu ile kullanma hakkında daha fazla bilgi için Bkz. Model Oluşturucusu'nda GPU desteği kılavuzu.
Verileri yükleme
Model Oluşturucusu iki kaynaktan, SQL Server veritabanından veya yerel bir dosyadan veya biçimdeki csv
tsv
verileri kabul eder.
- Model Oluşturucu aracının veri adımında veri kaynağı seçeneklerinden Dosya'yı seçin.
- Dosya seçin metin kutusunun yanındaki düğmeyi seçin ve wikipedia-detox-250-line-data.tsv dosyasına göz atmak için Dosya Gezgini kullanın.
- (Etiket) açılan listesini tahmin etmek için SütundanYaklaşım'ı seçin.
- Metin Sütunu açılan listesinden SentimentText'i seçin.
- Model Oluşturucusu'nda sonraki adıma geçmek için Sonraki adım düğmesini seçin.
Modeli eğitme
Bu öğreticide yaklaşım analizi modelini eğitmek için kullanılan makine öğrenmesi görevi metin sınıflandırmadır. Model eğitim işlemi sırasında Model Oluşturucusu, NAS-BERT sinir ağı mimarisini kullanarak veri kümeniz için bir metin sınıflandırma modeli eğiter.
Eğitimi Başlat'ı seçin.
Eğitim tamamlandıktan sonra eğitim işleminin sonuçları Eğit ekranının Eğitim sonuçları bölümünde görüntülenir. Eğitim sonuçları sağlamaya ek olarak SentimentAnalysis.mbconfig dosyası altında üç arka planda kod dosyası oluşturulur.
- SentimentAnalysis.consumption.cs - Bu dosya, modelin tüketilmesi için oluşturulan işlevin
Predict
yanı sıra veModelOutput
şemalarını içerirModelInput
. - SentimentAnalysis.training.cs - Bu dosya, Modeli eğitmek için Model Builder tarafından seçilen eğitim işlem hattını (veri dönüşümleri, eğitmen, eğitmen hiper parametreleri) içerir. Bu işlem hattını kullanarak modelinizi yeniden eğitebilirsiniz.
- *SentimentAnalysis.zip - Bu, eğitilen ML.NET modelinizi temsil eden serileştirilmiş bir zip dosyasıdır.
- SentimentAnalysis.consumption.cs - Bu dosya, modelin tüketilmesi için oluşturulan işlevin
Sonraki adıma geçmek için Sonraki adım düğmesini 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ğerlendirme adımında çıkış bölümü, hem de değerlendirme ölçümlerinde en iyi performans gösteren model tarafından kullanılan eğitmeni içerecektir.
Değerlendirme ölçümlerinizden memnun değilseniz, model performansını geliştirmenin bazı kolay yolları daha fazla veri kullanmaktır.
Aksi takdirde, Model Oluşturucusu'nda Kullanadımına gitmek için sonraki adım düğmesini seçin.
Tüketim projesi şablonları ekleme (İsteğe bağlı)
Kullan adımında, Model Oluşturucusu modeli kullanmak için kullanabileceğiniz proje şablonları sağlar. Bu adım isteğe bağlıdır ve modeli kullanmak için gereksinimlerinize en uygun yöntemi seçebilirsiniz.
- Konsol uygulaması
- Web API
Tahminde bulunmak için kodu ekleme
PredictionEngine havuzunu yapılandırma
Tek bir tahminde bulunmak için bir PredictionEngine<TSrc,TDst>oluşturmanız gerekir. PredictionEngine<TSrc,TDst> iş parçacığı güvenli değildir. Buna ek olarak, uygulamanızın içinde gerekli olduğu her yerde örneğini oluşturmanız gerekir. Uygulamanız büyüdükçe bu işlem yönetilemez hale gelebilir. İyileştirilmiş performans ve iş parçacığı güvenliği için bağımlılık ekleme ve PredictionEnginePool
hizmet birleşimini kullanarak uygulamanızın PredictionEngine<TSrc,TDst> tamamında kullanılmak üzere bir ObjectPool<T> nesne oluşturun.
Microsoft.Extensions.ML NuGet paketini yükleyin:
- Çözüm Gezgini'da projeye sağ tıklayın ve NuGet Paketlerini Yönet'i seçin.
- Paket kaynağı olarak "nuget.org" öğesini seçin.
- Gözat sekmesini seçin ve Microsoft.Extensions.ML arayın.
- Listeden paketi seçin ve Yükle düğmesini seçin.
- Değişiklikleri Önizle iletişim kutusundaki Tamam düğmesini seçin
- Listelenen paketlerin lisans koşullarını kabul ediyorsanız Lisans Kabulü iletişim kutusundaki Kabul Ediyorum düğmesini seçin.
SentimentRazor projesinde Program.cs dosyasını açın.
Microsoft.Extensions.ML NuGet paketine ve SentimentRazorML.Model projesine başvurmak için aşağıdaki using deyimlerini ekleyin:
using Microsoft.Extensions.ML; using static SentimentRazor.SentimentAnalysis;
PredictionEnginePool<TData,TPrediction>Program.cs dosyasında uygulamanız için öğesini yapılandırın:
builder.Services.AddPredictionEnginePool<ModelInput, ModelOutput>() .FromFile("SentimentAnalysis.zip");
Yaklaşım analizi işleyicisi oluşturma
Tahminler uygulamanın ana sayfasında yapılacaktır. Bu nedenle, kullanıcı girişini alan ve tahmin döndürmek için kullanan PredictionEnginePool<TData,TPrediction> bir yöntemin eklenmesi gerekir.
Pages dizininde bulunan Index.cshtml.cs dosyasını açın ve aşağıdaki deyimleri kullanarak ekleyin:
using Microsoft.Extensions.ML; using static SentimentRazor.SentimentAnalysis;
Program.cs dosyasında yapılandırılan öğesini kullanmak PredictionEnginePool<TData,TPrediction> için, bunu kullanmak istediğiniz modelin oluşturucusuna eklemiş olmanız gerekir.
Pages/Index.cshtml.cs dosyasının
IndexModel
içindeki sınıfına başvurmak PredictionEnginePool<TData,TPrediction> için bir değişken ekleyin.private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
sınıfındaki oluşturucuyu
IndexModel
değiştirin ve hizmeti içine ekler PredictionEnginePool<TData,TPrediction> .public IndexModel(ILogger<IndexModel> logger, PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool) { _logger = logger; _predictionEnginePool = predictionEnginePool; }
Web sayfasından alınan kullanıcı girişinden tahminler yapmak için kullanan
PredictionEnginePool
bir yöntem işleyicisi oluşturun.yönteminin
OnGet
altında adlı yeni bir yöntem oluşturunOnGetAnalyzeSentiment
public IActionResult OnGetAnalyzeSentiment([FromQuery] string text) { }
yöntemi içinde
OnGetAnalyzeSentiment
, kullanıcıdan gelen giriş boş veya null ise Nötr yaklaşım döndürür.if (String.IsNullOrEmpty(text)) return Content("Neutral");
Geçerli bir giriş verilip yeni bir örneği
ModelInput
oluşturun.var input = new ModelInput { SentimentText = text };
Yaklaşımı tahmin etmek için kullanın PredictionEnginePool<TData,TPrediction> .
var prediction = _predictionEnginePool.Predict(input);
Aşağıdaki kodla tahmin edilen
bool
değeri toksik veya toksik olmayan bir değere dönüştürün.var sentiment = Convert.ToBoolean(prediction.PredictedLabel) ? "Toxic" : "Not Toxic";
Son olarak, yaklaşımı web sayfasına geri döndür.
return Content(sentiment);
Web sayfasını yapılandırma
tarafından OnGetAnalyzeSentiment
döndürülen sonuçlar web sayfasında Index
dinamik olarak görüntülenir.
Pages dizininde Index.cshtml dosyasını açın ve içeriğini aşağıdaki 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 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
OnGetAnalyzeSentiment
kod ekleyin.wwwroot\js dizininde bulunan site.js dosyasında adlı bir işlev
getSentiment
oluşturarak işleyiciye kullanıcı girişiyleOnGetAnalyzeSentiment
GET HTTP isteği oluşturun.function getSentiment(userInput) { return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`) .then((response) => { return response.text(); }) }
Bunun altına, yaklaşım tahmin edildikçe işaretçinin web sayfasındaki konumunu dinamik olarak güncelleştirmek için adlı
updateMarker
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şlevini kullanarak
getSentiment
işleve göndermek ve işaretçiyi işleviyleupdateMarker
güncelleştirmek içinOnGetAnalyzeSentiment
adlıupdateSentiment
bir olay işleyici işlevi oluşturun.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 özniteliğiyle
id=Message
öğesine bağlayıntextarea
.$("#Message").on('change input paste', updateSentiment)
Uygulamayı çalıştırma
Uygulamanız ayarlandıysa, tarayıcınızda başlatılması gereken uygulamayı çalıştırın.
Uygulama başlatıldığında metin alanına Bu modelde yeterli veri yok! yazın. Görüntülenen tahmin edilen yaklaşım Toksik olmalıdır.
Not
PredictionEnginePool<TData,TPrediction> , öğesinin birden çok örneğini PredictionEngine<TSrc,TDst>oluşturur. Modelin boyutu nedeniyle, tahminde bulunmak için ilk kez kullandığınızda bu işlem birkaç saniye sürebilir. Sonraki tahminler anlık olmalıdır.
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çme
- Verileri yükleme
- Modeli eğitme
- Modeli değerlendirme
- Tahminler için modeli kullanma
Ek Kaynaklar
Bu öğreticide bahsedilen konular hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları ziyaret edin: