Aracılığıyla paylaş


Öğretici: ML.NET Model Oluşturucusu'nu kullanarak web uygulamasındaki web sitesi açıklamalarının yaklaşımını analiz etme

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.

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

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

Senaryo seçin

Model Oluşturucusu Senaryo Ekranı

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.

  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 ve dosyayı seçmek için Dosya Gezgini'ni kullanın.
  3. Tahminde (Etiket) açılan listesinden Yaklaşı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ğ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.

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

  2. 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 Predict yanı sıra ve ModelOutput ş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.
  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 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> .

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

    1. Çözüm Gezginibölümünde projeye sağ tıklayın ve NuGet Paketlerini Yönetseçin.
    2. Paket kaynağı olarak "nuget.org" seçeneğini belirleyin.
    3. Gözat sekmesini seçin ve Microsoft.Extensions.ML arayın.
    4. Listeden paketi seçin ve Yükle'yi seçin.
    5. Değişiklikleri Önizle iletişim kutusunda Tamam düğmesini seçin
    6. Listelenen paketlerin lisans koşullarını kabul ediyorsanız Lisans Kabulü iletişim kutusunda 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 yönergeleri ekleyin:

    using Microsoft.Extensions.ML;
    using static SentimentRazor.SentimentAnalysis;
    
  4. 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.

  1. Pages dizininde bulunan Index.cshtml.cs dosyasını açın ve aşağıdaki using yö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.

  2. Pages/Index.cshtml.cs dosyasının PredictionEnginePool<TData,TPrediction> içindeki sınıfına IndexModel başvurmak 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 öğesini 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önteminin OnGetAnalyzeSentiment iç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");
      
    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 öğesini PredictionEnginePool<TData,TPrediction> kullanın.

      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 dinamik olarak görüntülenir Index .

  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, işleyiciye kullanıcı girişiyle GET HTTP isteği yapmak için OnGetAnalyzeSentiment adlı getSentiment bir işlev oluşturun.

      function getSentiment(userInput) {
          return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`)
              .then((response) => {
                  return response.text();
              })
      }
      
    2. Bunun altında, 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şlevi kullanarak getSentiment işleve göndermek ve işaretçiyi işlevle 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

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: