Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Bir web uygulamasının içindeki açıklamalardan gelen yaklaşımı gerçek zamanlı olarak analiz etmeyi öğrenin.
Bu öğreticide, web sitesi açıklamalarından gelen yaklaşımı gerçek zamanlı olarak sınıflandıran bir ASP.NET Core Razor Pages uygulamasının nasıl oluşturulacağı gösterilmektedir.
Bu eğitimde şunları öğreniyorsunuz:
- ASP.NET Core Razor Pages uygulaması oluşturma
- Verileri hazırlama ve anlama
- Senaryo seçin
- Verileri yükleme
- Modeli eğitin
- Modeli değerlendirme
- Tahminler için modeli kullanma
Bu öğreticinin kaynak kodunu dotnet/machinelearning-samples deposunda bulabilirsiniz.
Prerequisites
Önkoşulların ve yükleme yönergelerinin listesi için Model Builder yükleme kılavuzunu ziyaret edin.
Razor Pages uygulaması oluşturma
ASP.NET Core Razor Sayfaları Uygulaması oluşturun.
- Visual Studio'da Yeni proje oluştur iletişim kutusunu açın.
- "Yeni proje oluştur" iletişim kutusunda ASP.NET Core Web App proje şablonunu seçin.
- Ad metin kutusuna "SentimentRazor" yazın ve İleri'yi seçin.
- Ek bilgiler iletişim kutusunda tüm varsayılan değerleri olduğu gibi bırakın ve Oluştur'u 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, bir kullanıcının Wikipedia'da bıraktığı farklı bir incelemeyi temsil eder. İlk sütun metnin yaklaşımını temsil eder (0 toksik değildir, 1 toksiktir) ve ikinci sütun da 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:
| Sentiment | SentimentText |
|---|---|
| 1 | ==RUDE== Dostum, carl resmini geri yüklemek için kabasın, yoksa. |
| 1 | == OK! == IM WILD ONES WIKI'SINI VANDALIZE EDECEK!! |
| 0 | Umarım yardımı olur. |
Model Builder yapılandırma dosyası oluşturma
Çözüme ilk kez bir makine öğrenmesi modeli eklerken sizden bir mbconfig dosya oluşturmanız istenir. File mbconfig, Model Builder'da yaptığınız her şeyi takip eder ve oturumu yeniden açmanızı sağlar.
- Çözüm Gezgini'ndeSentimentRazor projesine sağ tıklayın veMakine Öğrenmesi ModeliEkle'yi> seçin.
- İletişim kutusunda Model Builder projesini SentimentAnalysis.mbconfig olarak adlandırın ve Ekle'yi seçin.
Senaryo seçin
Modelinizi eğitmek için Model Oluşturucusu 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.
Note
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 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 csvtsv 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 ve dosyayı seçmek için Dosya Gezgini'ni kullanın.
- Tahminde (Etiket) açılan listesinden Yaklaşı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ğitin
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 süreci sırasında Model Builder, 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 sürecinden elde edilen 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
Predictyanı sıra veModelOutputşemalarını içerirModelInput. - SentimentAnalysis.training.cs - Bu dosya Model Builder tarafından modeli eğitmek için 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.mlnet - Bu dosya bir ML.NET modeli için meta verileri ve yapılandırma ayrıntılarını içerir.
-
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 içindeki en iyi performansa hem de değerlendirme ölçümlerine göre kullanılan eğitmeni içerecektir.
Değerlendirme ölçümlerinizden memnun değilseniz, model performansını iyileştirmenin bazı kolay yolları daha fazla veri kullanmaktır.
Aksi takdirde, Model Oluşturucusu'nda Kullan adı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.
- Console application
- 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 bir örneğini oluşturmanız gerekir. Uygulamanız büyüdükçe bu işlem yönetilemez hale gelebilir. Gelişmiş performans ve iş parçacığı güvenliği için bağımlılık ekleme ve hizmet birleşimini kullanın. PredictionEnginePool Bu birleşim, uygulamanız genelinde kullanılmak üzere bir ObjectPool<T> nesne oluşturur PredictionEngine<TSrc,TDst> .
Microsoft.Extensions.ML NuGet paketini yükleyin:
- Çözüm Gezginibölümünde projeye sağ tıklayın ve NuGet Paketlerini Yönetseçin.
- Paket kaynağı olarak "nuget.org" seçeneğini belirleyin.
- Gözat sekmesini seçin ve Microsoft.Extensions.ML arayın.
- Listeden paketi seçin ve Yükle'yi 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 projesinde Program.cs dosyasını açın.
Microsoft.Extensions.ML NuGet paketine ve SentimentRazorML.Model projesine başvurmak için aşağıdaki
usingyönergeleri ekleyin:using Microsoft.Extensions.ML; using static SentimentRazor.SentimentAnalysis;PredictionEnginePool<TData,TPrediction> uygulamasını Program.cs dosyasında yapılandırın:
builder.Services.AddPredictionEnginePool<ModelInput, ModelOutput>() .FromFile("SentimentAnalysis.mlnet");
Yaklaşım analizi işleyicisi oluşturma
Tahminler uygulamanın ana sayfasında yapılacaktır. Bu nedenle, kullanıcı girişini alan ve bir tahmin döndürmek için öğesini PredictionEnginePool<TData,TPrediction> kullanan bir yöntemin eklenmesi gerekir.
Pages dizininde bulunan Index.cshtml.cs dosyasını açın ve aşağıdaki
usingyönergeleri ekleyin:using Microsoft.Extensions.ML; using static SentimentRazor.SentimentAnalysis;Program.cs dosyasında yapılandırılan kullanmak içinPredictionEnginePool<TData,TPrediction>, onu kullanmak istediğiniz modelin oluşturucusuna eklemeniz gerekir.
Pages/Index.cshtml.cs dosyasının PredictionEnginePool<TData,TPrediction> içindeki sınıfına
IndexModelbaşvurmak için bir değişken ekleyin.private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;sınıfındaki oluşturucuyu
IndexModeldeğ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 öğesini kullanan
PredictionEnginePoolbir yöntem işleyicisi oluşturun.yönteminin
OnGetaltında adlı yeni bir yöntem oluşturunOnGetAnalyzeSentimentpublic IActionResult OnGetAnalyzeSentiment([FromQuery] string text) { }yönteminin
OnGetAnalyzeSentimentiçinde, 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
ModelInputoluşturun.var input = new ModelInput { SentimentText = text };Yaklaşımı tahmin etmek için öğesini PredictionEnginePool<TData,TPrediction> kullanın.
var prediction = _predictionEnginePool.Predict(input);Aşağıdaki kodla tahmin edilen
booldeğ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 dinamik olarak görüntülenir Index .
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
OnGetAnalyzeSentimentkod ekleyin.wwwroot\js dizininde bulunan site.js dosyasında, işleyiciye kullanıcı girişiyle GET HTTP isteği yapmak için
OnGetAnalyzeSentimentadlıgetSentimentbir işlev oluşturun.function getSentiment(userInput) { return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`) .then((response) => { return response.text(); }) }Bunun altında, yaklaşım tahmin edildikçe işaretçinin web sayfasındaki konumunu dinamik olarak güncelleştirmek için adlı
updateMarkerbaşka bir işlev ekleyin.function updateMarker(markerPosition, sentiment) { $("#markerPosition").attr("style", `left:${markerPosition}%`); $("#markerValue").text(sentiment); }Kullanıcıdan girişi almak, işlevi kullanarak
getSentimentişleve göndermek ve işaretçiyi işlevleupdateMarkergüncelleştirmek içinOnGetAnalyzeSentimentadlıupdateSentimentbir 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.
Note
PredictionEnginePool<TData,TPrediction> birden çok örneği 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.
Next steps
Bu öğreticide şunların nasıl yapılacağını öğrendiniz:
- ASP.NET Core Razor Pages uygulaması oluşturma
- Verileri hazırlama ve anlama
- Senaryo seçin
- Verileri yükleme
- Modeli eğitin
- Modeli değerlendirme
- Tahminler için modeli kullanma
Additional Resources
Bu öğreticide bahsedilen konular hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları ziyaret edin: