Aracılığıyla paylaş


Öğ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.

  1. Visual Studio'da Yeni proje oluştur iletişim kutusunu açın.
  2. "Yeni proje oluştur" iletişim kutusunda web uygulaması proje şablonunu ASP.NET Core seçin.
  3. Ad metin kutusuna "SentimentRazor" yazın ve İleri düğmesini seçin.
  4. 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.

  1. Çözüm Gezgini'daSentimentRazor projesine sağ tıklayın veMakine Öğrenmesi ModeliEkle>... seçeneğini belirleyin.
  2. İletişim kutusunda Model Oluşturucusu projesini SentimentAnalysis.mbconfig olarak adlandırın ve Ekle'yi seçin.

Senaryo seçme

Model OluşturucuSu Senaryo Ekranı

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 csvtsv verileri kabul eder.

  1. Model Oluşturucu aracının veri adımında veri kaynağı seçeneklerinden Dosya'yı seçin.
  2. 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.
  3. (Etiket) açılan listesini tahmin etmek için SütundanYaklaşım'ı seçin.
  4. Metin Sütunu açılan listesinden SentimentText'i seçin.
  5. 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.

  1. Eğitimi Başlat'ı seçin.

  2. 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 ve ModelOutput ş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.
  3. 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.

  1. Microsoft.Extensions.ML NuGet paketini yükleyin:

    1. Çözüm Gezgini'da projeye sağ tıklayın ve NuGet Paketlerini Yönet'i seçin.
    2. Paket kaynağı olarak "nuget.org" öğesini seçin.
    3. Gözat sekmesini seçin ve Microsoft.Extensions.ML arayın.
    4. Listeden paketi seçin ve Yükle düğmesini seçin.
    5. Değişiklikleri Önizle iletişim kutusundaki Tamam düğmesini seçin
    6. Listelenen paketlerin lisans koşullarını kabul ediyorsanız Lisans Kabulü iletişim kutusundaki Kabul Ediyorum düğmesini seçin.
  2. SentimentRazor projesinde Program.cs dosyasını açın.

  3. 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;
    
  4. 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.

  1. 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.

  2. 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;
    
  3. 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;
    }
    
  4. Web sayfasından alınan kullanıcı girişinden tahminler yapmak için kullanan PredictionEnginePool bir yöntem işleyicisi oluşturun.

    1. yönteminin OnGet altında adlı yeni bir yöntem oluşturun OnGetAnalyzeSentiment

      public IActionResult OnGetAnalyzeSentiment([FromQuery] string text)
      {
      
      }
      
    2. 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");
      
    3. Geçerli bir giriş verilip yeni bir örneği ModelInputoluşturun.

      var input = new ModelInput { SentimentText = text };
      
    4. Yaklaşımı tahmin etmek için kullanın PredictionEnginePool<TData,TPrediction> .

      var prediction = _predictionEnginePool.Predict(input);
      
    5. 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";
      
    6. 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.

  1. 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>    
    
  2. 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;
    }
    
  3. Bundan sonra, web sayfasından işleyiciye giriş göndermek için OnGetAnalyzeSentiment kod ekleyin.

    1. wwwroot\js dizininde bulunan site.js dosyasında adlı bir işlev getSentiment oluşturarak işleyiciye kullanıcı girişiyle OnGetAnalyzeSentiment GET HTTP isteği oluşturun.

      function getSentiment(userInput) {
          return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`)
              .then((response) => {
                  return response.text();
              })
      }
      
    2. 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);
      }
      
    3. Kullanıcıdan girişi almak, işlevini kullanarak getSentiment işleve göndermek ve işaretçiyi işleviyle updateMarker güncelleştirmek için OnGetAnalyzeSentiment 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");
                  }    
              });
      }        
      
    4. 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.

Tahmin edilen yaklaşım penceresiyle çalışan pencere

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: