Tutorial: Menganalisis sentimen komentar situs web dalam aplikasi web menggunakan ML.NET Model Builder

Pelajari cara menganalisis sentimen dari komentar secara real time di dalam aplikasi web.

Tutorial ini menunjukkan kepada Anda cara membuat aplikasi ASP.NET Core Razor Pages yang mengklasifikasikan sentimen dari komentar situs web secara real time.

Dalam tutorial ini, Anda akan mempelajari cara:

  • Membuat aplikasi ASP.NET Core Razor Pages
  • Menyiapkan dan memahami data
  • Memilih skenario
  • Muat data
  • Latih model
  • Mengevaluasi model
  • Menggunakan model untuk prediksi

Anda dapat menemukan kode sumber untuk tutorial ini di repositori dotnet/machinelearning-samples .

Prasyarat

Untuk daftar prasyarat dan instruksi penginstalan, kunjungi panduan penginstalan Model Builder.

Membuat aplikasi Razor Pages

Buat Aplikasi ASP.NET Core Razor Pages.

  1. Di Visual Studio, buka dialog Buat proyek baru .
  2. Dalam dialog "Buat proyek baru", pilih templat proyek ASP.NET Core Web App .
  3. Dalam kotak teks Nama , ketik "SentimentRazor" dan pilih tombol Berikutnya .
  4. Dalam dialog Informasi tambahan, biarkan semua default apa adanya dan pilih tombol Buat .

Menyiapkan dan memahami data

Unduh himpunan data detox Wikipedia. Saat halaman web terbuka, klik kanan pada halaman, pilih Simpan Sebagai dan simpan file di mana saja di komputer Anda.

Setiap baris dalam himpunan data wikipedia-detox-250-line-data.tsv mewakili ulasan berbeda yang ditinggalkan oleh pengguna di Wikipedia. Kolom pertama mewakili sentimen teks (0 tidak beracun, 1 beracun), dan kolom kedua mewakili komentar yang ditinggalkan oleh pengguna. Kolom dipisahkan oleh tab. Data terlihat seperti berikut ini:

Sentimen SentimentText
1 ==RUDE== Dude, Anda kasar mengunggah gambar carl itu kembali, atau yang lain.
1 == OK! == AKU AKAN MERUSAK WIKI YANG LIAR!!!
0 Saya harap ini membantu.

Membuat file konfigurasi Model Builder

Ketika pertama kali menambahkan model pembelajaran mesin ke solusi, ia akan meminta Anda untuk membuat mbconfig file. File mbconfig ini melacak semua yang Anda lakukan di Model Builder untuk memungkinkan Anda membuka kembali sesi.

  1. Di Penjelajah Solusi, klik kanan proyek SentimentRazor, dan pilih Tambahkan>Model Pembelajaran Mesin....
  2. Dalam dialog, beri nama proyek Model Builder SentimentAnalysis.mbconfig, dan pilih Tambahkan.

Memilih skenario

Layar Skenario Pembuat Model

Untuk melatih model, Anda perlu memilih dari daftar skenario pembelajaran mesin yang tersedia yang disediakan oleh Model Builder.

Untuk sampel ini, tugasnya adalah klasifikasi teks. Dalam langkah Skenario ekstensi Pembuat Model, pilih skenario Klasifikasi teks.

Pilih lingkungan

Model Builder dapat melatih lingkungan yang berbeda tergantung pada skenario yang dipilih.

Pilih Lokal (GPU) sebagai lingkungan Anda dan klik tombol Langkah berikutnya .

Catatan

Skenario ini menggunakan teknik pembelajaran mendalam yang bekerja paling baik di lingkungan GPU. Jika Anda tidak memiliki GPU, pilih lingkungan Lokal (CPU), tetapi perhatikan bahwa waktu yang diharapkan untuk melatih akan jauh lebih lama. Untuk informasi selengkapnya tentang menggunakan GPU dengan Model Builder, lihat panduan dukungan GPU di Model Builder.

Muat data

Model Builder menerima data dari dua sumber, database SQL Server atau file lokal dalam csv format atau tsv .

  1. Di langkah data alat Pembuat Model, pilih File dari opsi sumber data.
  2. Pilih tombol di samping kotak teks Pilih file dan gunakan File Explorer untuk menelusuri dan memilih file wikipedia-detox-250-line-data.tsv.
  3. Pilih Sentimen dari Kolom untuk memprediksi (Label) dropdown.
  4. Pilih SentimentText dari menu dropdown Kolom Teks .
  5. Pilih tombol Langkah berikutnya untuk berpindah ke langkah berikutnya di Model Builder.

Latih model

Tugas pembelajaran mesin yang digunakan untuk melatih model analisis sentimen dalam tutorial ini adalah klasifikasi teks. Selama proses pelatihan model, Model Builder melatih model klasifikasi teks untuk himpunan data Anda menggunakan arsitektur jaringan neural NAS-BERT .

  1. Pilih Mulai Pelatihan.

  2. Setelah pelatihan selesai, hasil dari proses pelatihan ditampilkan di bagian Hasil pelatihan di layar Latih . Selain memberikan hasil pelatihan, tiga file code-behind dibuat di bawah file SentimentAnalysis.mbconfig .

    • SentimentAnalysis.consumption.cs - File ini berisi ModelInput skema dan ModelOutput serta Predict fungsi yang dihasilkan untuk mengonsumsi model.
    • SentimentAnalysis.training.cs - File ini berisi alur pelatihan (transformasi data, pelatih, hyperparameter pelatih) yang dipilih oleh Model Builder untuk melatih model. Anda dapat menggunakan alur ini untuk melatih kembali model Anda.
    • *SentimentAnalysis.zip - Ini adalah file zip berseri yang mewakili model ML.NET terlatih Anda.
  3. Pilih tombol Langkah berikutnya untuk berpindah ke langkah berikutnya.

Mengevaluasi model

Hasil dari langkah pelatihan akan menjadi salah satu model yang memiliki performa terbaik. Dalam langkah evaluasi alat Model Builder, bagian output akan berisi pelatih yang digunakan oleh model berkinerja terbaik dalam serta metrik evaluasi.

Jika Anda tidak puas dengan metrik evaluasi Anda, beberapa cara mudah untuk mencoba meningkatkan performa model adalah dengan menggunakan lebih banyak data.

Jika tidak, pilih tombol Langkah berikutnya untuk berpindah ke langkah Konsumsi di Pembuat Model.

Menambahkan templat proyek konsumsi (Opsional)

Dalam langkah Konsumsi , Model Builder menyediakan templat proyek yang dapat Anda gunakan untuk menggunakan model. Langkah ini bersifat opsional dan Anda dapat memilih metode yang paling sesuai dengan kebutuhan Anda untuk menggunakan model.

  • Aplikasi konsol
  • API Web

Menambahkan kode untuk membuat prediksi

Mengonfigurasi kumpulan PredictionEngine

Untuk membuat satu prediksi, Anda harus membuat PredictionEngine<TSrc,TDst>. PredictionEngine<TSrc,TDst> tidak aman untuk utas. Selain itu, Anda harus membuat instans di mana pun diperlukan dalam aplikasi Anda. Saat aplikasi Anda berkembang, proses ini bisa menjadi tidak terkendali. Untuk meningkatkan performa dan keamanan utas, gunakan kombinasi injeksi dependensi dan layanan PredictionEnginePool, yang membuat ObjectPool<T> dari objek PredictionEngine<TSrc,TDst> untuk digunakan di seluruh aplikasi Anda.

  1. Instal paket Microsoft.Extensions.ML NuGet:

    1. Di Penjelajah Solusi, klik kanan proyek, lalu pilih Kelola Paket NuGet.
    2. Pilih "nuget.org" sebagai sumber Paket.
    3. Pilih tab Telusuri dan cari Microsoft.Extensions.ML.
    4. Pilih paket dalam daftar, dan pilih tombol Instal .
    5. Pilih tombol OK pada dialog Pratinjau Perubahan
    6. Pilih tombol Saya Terima pada dialog Penerimaan Lisensi jika Anda setuju dengan persyaratan lisensi untuk paket yang tercantum.
  2. Buka file Program.cs di proyek SentimentRazor .

  3. Tambahkan pernyataan penggunaan berikut untuk mereferensikan paket Microsoft.Extensions.ML NuGet dan proyek SentimentRazorML.Model :

    using Microsoft.Extensions.ML;
    using static SentimentRazor.SentimentAnalysis;
    
  4. Konfigurasikan PredictionEnginePool<TData,TPrediction> untuk aplikasi Anda dalam file Program.cs :

    builder.Services.AddPredictionEnginePool<ModelInput, ModelOutput>()
        .FromFile("SentimentAnalysis.zip");
    

Membuat handler analisis sentimen

Prediksi akan dibuat di dalam halaman utama aplikasi. Oleh karena itu, metode yang mengambil input pengguna dan menggunakan PredictionEnginePool<TData,TPrediction> untuk mengembalikan prediksi perlu ditambahkan.

  1. Buka file Index.cshtml.cs yang terletak di direktori Pages dan tambahkan pernyataan berikut ini:

    using Microsoft.Extensions.ML;
    using static SentimentRazor.SentimentAnalysis;
    

    Untuk menggunakan yang PredictionEnginePool<TData,TPrediction> dikonfigurasi dalam file Program.cs , Anda harus memasukkannya ke konstruktor model tempat Anda ingin menggunakannya.

  2. Tambahkan variabel untuk mereferensikan di PredictionEnginePool<TData,TPrediction>IndexModel dalam kelas di dalam file Pages/Index.cshtml.cs .

    private readonly PredictionEnginePool<ModelInput, ModelOutput> _predictionEnginePool;
    
  3. Ubah konstruktor di IndexModel kelas dan masukkan layanan ke PredictionEnginePool<TData,TPrediction> dalamnya.

    public IndexModel(ILogger<IndexModel> logger, PredictionEnginePool<ModelInput, ModelOutput> predictionEnginePool)
    {
        _logger = logger;
        _predictionEnginePool = predictionEnginePool;
    }
    
  4. Buat handler metode yang menggunakan PredictionEnginePool untuk membuat prediksi dari input pengguna yang diterima dari halaman web.

    1. OnGet Di bawah metode , buat metode baru yang disebutOnGetAnalyzeSentiment

      public IActionResult OnGetAnalyzeSentiment([FromQuery] string text)
      {
      
      }
      
    2. OnGetAnalyzeSentiment Di dalam metode , kembalikan sentimen Netral jika input dari pengguna kosong atau null.

      if (String.IsNullOrEmpty(text)) return Content("Neutral");
      
    3. Dengan input yang valid, buat instans baru .ModelInput

      var input = new ModelInput { SentimentText = text };
      
    4. PredictionEnginePool<TData,TPrediction> Gunakan untuk memprediksi sentimen.

      var prediction = _predictionEnginePool.Predict(input);
      
    5. Konversikan nilai yang diprediksi bool menjadi beracun atau tidak beracun dengan kode berikut.

      var sentiment = Convert.ToBoolean(prediction.PredictedLabel) ? "Toxic" : "Not Toxic";
      
    6. Terakhir, kembalikan sentimen ke halaman web.

      return Content(sentiment);
      

Mengonfigurasi halaman web

Hasil yang OnGetAnalyzeSentiment dikembalikan oleh akan ditampilkan secara dinamis di Index halaman web.

  1. Buka file Index.cshtml di direktori Pages dan ganti kontennya dengan kode berikut:

    @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. Selanjutnya, tambahkan kode gaya css ke akhir halaman site.css di direktori wwwroot\css :

    /* 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. Setelah itu, tambahkan kode untuk mengirim input dari halaman web ke OnGetAnalyzeSentiment handler.

    1. Dalam file site.js yang terletak di direktori wwwroot\js , buat fungsi yang disebut getSentiment untuk membuat permintaan HTTP GET dengan input pengguna ke OnGetAnalyzeSentiment handler.

      function getSentiment(userInput) {
          return fetch(`Index?handler=AnalyzeSentiment&text=${userInput}`)
              .then((response) => {
                  return response.text();
              })
      }
      
    2. Di bawahnya, tambahkan fungsi lain yang dipanggil updateMarker untuk memperbarui posisi penanda secara dinamis di halaman web saat sentimen diprediksi.

      function updateMarker(markerPosition, sentiment) {
          $("#markerPosition").attr("style", `left:${markerPosition}%`);
          $("#markerValue").text(sentiment);
      }
      
    3. Buat fungsi penanganan aktivitas yang dipanggil updateSentiment untuk mendapatkan input dari pengguna, kirimkan ke OnGetAnalyzeSentiment fungsi menggunakan getSentiment fungsi dan perbarui penanda dengan updateMarker fungsi .

      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. Terakhir, daftarkan penanganan aktivitas dan ikat ke textarea elemen dengan id=Message atribut .

      $("#Message").on('change input paste', updateSentiment)        
      

Menjalankan aplikasi

Sekarang setelah aplikasi Anda disiapkan, jalankan aplikasi, yang harus diluncurkan di browser Anda.

Saat aplikasi diluncurkan, masukkan Model ini tidak memiliki cukup data! ke area teks. Sentimen yang diprediksi yang ditampilkan harus Beracun.

Jendela berjalan dengan jendela sentimen yang diprediksi

Catatan

PredictionEnginePool<TData,TPrediction> membuat beberapa instans PredictionEngine<TSrc,TDst>. Karena ukuran model, pertama kali Anda menggunakannya untuk membuat prediksi, itu bisa memakan waktu beberapa detik. Prediksi berikutnya harus seketika.

Langkah berikutnya

Di tutorial ini, Anda akan mempelajari cara:

  • Membuat aplikasi ASP.NET Core Razor Pages
  • Menyiapkan dan memahami data
  • Memilih skenario
  • Muat data
  • Latih model
  • Mengevaluasi model
  • Menggunakan model untuk prediksi

Sumber Daya Tambahan

Untuk mempelajari selengkapnya tentang topik yang disebutkan dalam tutorial ini, kunjungi sumber daya berikut: