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

  1. ASP.NET Core bir Razor Pages uygulaması oluşturun.

    1. Visual Studio açın ve menü çubuğundan dosya > yeni > Project öğesini seçin.
    2. yeni Project iletişim kutusunda, Visual C# düğümünü ve ardından Web düğümünü seçin.
    3. ASP.NET Core Web uygulaması proje şablonunu seçin.
    4. Ad metin kutusuna "SentimentRazor" yazın.
    5. Çö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).
    6. Tamam düğmesini seçin.
    7. 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

Visual Studio 'de model Oluşturucu Sihirbazı

Modelinize eğitebilmeniz için, model Oluşturucu tarafından sağlanan kullanılabilir makine öğrenimi senaryoları listesinden seçim yapmanız gerekir.

  1. Çözüm Gezgini, SentimentRazor projesine sağ tıklayın ve > Machine Learning Model ekle... seçeneğini belirleyin.
  2. 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 .

  1. Model Oluşturucu aracının veri adımında, veri kaynağı açılır listesinden Dosya ' yı seçin.
  2. 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.
  3. Tahmin edilecek sütun (etiket) açılan listesini seçin.
  4. Giriş sütunları (Özellikler) açılır menüsü için varsayılan değerleri bırakın.
  5. 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.

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

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

    Eğitim süreci boyunca, ilerleme verileri Progress eğ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.
  3. 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

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

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

    1. Çözüm Gezgini, projeye sağ tıklayın ve NuGet paketlerini yönet' i seçin.
    2. Paket kaynağı olarak "nuget.org" öğesini seçin.
    3. Tarayıcı sekmesini seçin ve Microsoft. Extensions. ml için arama yapın.
    4. Listeden paketi seçin ve ardından Install düğmesini 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 projesindeki Startup. cs dosyasını açın.

  3. 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;
    
  4. Eğitilen model dosyasının konumunu depolamak için genel bir değişken oluşturun.

    private readonly string _modelPath;
    
  5. Model dosyası, uygulamanızın derleme dosyalarının yanı sıra derleme dizininde depolanır. Daha kolay erişim sağlamak için, GetAbsolutePath yönteminden sonra adlı bir yardımcı yöntem oluşturun Configure

    public 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;
    }
    
  6. Öğesini GetAbsolutePath Startup ayarlamak için sınıf oluşturucusunda metodunu kullanın _modelPath .

    _modelPath = GetAbsolutePath("MLModel.zip");
    
  7. PredictionEnginePoolYöntemi için uygulamanızı için yapılandırın ConfigureServices :

    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.

  1. Pages dizininde bulunan Index. cshtml. cs dosyasını açın ve aşağıdaki using deyimlerini ekleyin:

    using Microsoft.Extensions.ML;
    using SentimentRazorML.Model;
    

    PredictionEnginePool Startup Sınıfında yapılandırılan ' ı kullanmak için, onu kullanmak istediğiniz modelin oluşturucusuna eklemek gerekir.

  2. Sınıfının içine başvurmak için bir değişken ekleyin PredictionEnginePool IndexModel .

    private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
    
  3. Sınıfında bir Oluşturucu oluşturun IndexModel ve PredictionEnginePool hizmeti ona ekleyin.

    public IndexModel(PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool)
    {
        _predictionEnginePool = predictionEnginePool;
    }
    
  4. PredictionEnginePoolWeb sayfasından alınan Kullanıcı girişinden tahminleri yapmak için öğesini kullanan bir yöntem işleyicisi oluşturun.

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

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

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

      var prediction = _predictionEnginePool.Predict(input);
      
    5. Tahmin edilen bool değeri, aşağıdaki kodla birlikte Toxic öğesine dönüştürün.

      var sentiment = Convert.ToBoolean(prediction.Prediction) ? "Toxic" : "Not Toxic";
      
    6. 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 .

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

    1. Wwwroot\js dizininde bulunan site.js dosyasında, getSentiment işleyiciye Kullanıcı girişiyle bir http isteği almak için adlı bir işlev oluşturun OnGetAnalyzeSentiment .

      function getSentiment(userInput) {
          return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`)
              .then((response) => {
                  return response.text();
              })
      }
      
    2. Bunun altında, yaklaşım updateMarker tahmin 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);
      }
      
    3. Kullanıcıdan girişi almak için çağrılan bir olay işleyici işlevi oluşturun updateSentiment , OnGetAnalyzeSentiment işlevi kullanarak işleve gönderin getSentiment ve işaretleyiciyi updateMarker iş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");
                  }
              });
      }
      
    4. Son olarak, olay işleyicisini kaydedin ve textarea özniteliği ile öğesine bağlayın id=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.

Tahmin edilen yaklaşım penceresiyle pencere çalıştırma

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: