Bagikan melalui


Menganalisis sentimen menggunakan CLI ML.NET

Pelajari cara menggunakan CLI ML.NET untuk secara otomatis menghasilkan model ML.NET dan kode C# yang mendasar. Anda menyediakan himpunan data dan tugas pembelajaran mesin yang ingin Anda terapkan, dan CLI menggunakan mesin AutoML untuk membuat pembuatan model dan kode sumber penyebaran, serta model klasifikasi.

Dalam tutorial ini, Anda akan melakukan langkah-langkah berikut:

  • Menyiapkan data Anda untuk tugas pembelajaran mesin yang dipilih
  • Jalankan perintah 'klasifikasi mlnet' dari CLI
  • Meninjau hasil metrik kualitas
  • Memahami kode C# yang dihasilkan untuk menggunakan model dalam aplikasi Anda
  • Jelajahi kode C# yang dihasilkan yang digunakan untuk melatih model

Catatan

Topik ini mengacu pada alat CLI ML.NET, yang saat ini dalam Pratinjau, dan materi dapat berubah. Untuk informasi selengkapnya, kunjungi halaman ML.NET .

CLI ML.NET adalah bagian dari ML.NET dan tujuan utamanya adalah untuk "mendemokratisasikan" ML.NET bagi pengembang .NET saat mempelajari ML.NET sehingga Anda tidak perlu membuat kode dari awal untuk memulai.

Anda dapat menjalankan CLI ML.NET pada prompt perintah apa pun (Windows, Mac, atau Linux) untuk menghasilkan model ML.NET berkualitas baik dan kode sumber berdasarkan himpunan data pelatihan yang Anda berikan.

Prasyarat

Anda dapat menjalankan proyek kode C# yang dihasilkan dari Visual Studio atau dengan dotnet run (.NET CLI).

Menyiapkan data Anda

Kita akan menggunakan himpunan data yang ada yang digunakan untuk skenario 'Analisis Sentimen', yang merupakan tugas pembelajaran mesin klasifikasi biner. Anda dapat menggunakan himpunan data Anda sendiri dengan cara yang sama, dan model dan kode akan dibuat untuk Anda.

  1. Unduh file zip himpunan data Kalimat Berlabel Sentimen UCI (lihat kutipan dalam catatan berikut), dan unzip di folder apa pun yang Anda pilih.

    Catatan

    Himpunan data tutorial ini menggunakan himpunan data dari 'Dari Grup ke Label Individual menggunakan Fitur Mendalam', Kotzias et al,. KDD 2015, dan dihosting di Repositori Pembelajaran Mesin UCI - Dua, D. dan Karra Taniskidou, E. (2017). Repositori Pembelajaran Mesin UCI [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information dan Computer Science.

  2. Salin file ke yelp_labelled.txt folder apa pun yang sebelumnya Anda buat (seperti /cli-test).

  3. Buka perintah pilihan Anda dan pindah ke folder tempat Anda menyalin file himpunan data. Contohnya:

    cd /cli-test
    

    Menggunakan editor teks apa pun seperti Visual Studio Code, Anda dapat membuka, dan menjelajahi file himpunan yelp_labelled.txt data. Anda dapat melihat bahwa strukturnya adalah:

    • File tidak memiliki header. Anda akan menggunakan indeks kolom.

    • Hanya ada dua kolom:

      Teks (Indeks kolom 0) Label (Indeks kolom 1)
      Wow... Menyukai tempat ini. 1
      Kerak tidak baik. 0
      Tidak enak dan teksturnya hanya jahat. 0
      ... LEBIH BANYAK BARIS TEKS... ... (1 atau 0)...

    Pastikan Anda menutup file himpunan data dari editor.

    Sekarang, Anda siap untuk mulai menggunakan CLI untuk skenario 'Analisis Sentimen' ini.

    Catatan

    Setelah menyelesaikan tutorial ini, Anda juga dapat mencoba dengan himpunan data Anda sendiri selama siap digunakan untuk salah satu tugas ML yang saat ini didukung oleh Pratinjau CLI ML.NET yaitu 'Klasifikasi Biner', 'Klasifikasi', 'Regresi', dan 'Rekomendasi'.

Jalankan perintah 'klasifikasi mlnet'

  1. Jalankan perintah CLI ML.NET berikut:

    mlnet classification --dataset "yelp_labelled.txt" --label-col 1 --has-header false --train-time 10
    

    Perintah ini menjalankan mlnet classification perintah:

    • untuk tugas klasifikasi ML
    • menggunakan file himpunan data sebagai himpunan yelp_labelled.txt data pelatihan dan pengujian (secara internal CLI akan menggunakan validasi silang atau membaginya dalam dua himpunan data, satu untuk pelatihan dan satu untuk pengujian)
    • di mana kolom tujuan/target yang ingin Anda prediksi (umumnya disebut 'label') adalah kolom dengan indeks 1 (yang merupakan kolom kedua, karena indeks berbasis nol)
    • tidak menggunakan header file dengan nama kolom karena file himpunan data khusus ini tidak memiliki header
    • waktu eksplorasi/kereta yang ditargetkan untuk eksperimen adalah 10 detik

    Anda akan melihat output dari CLI, mirip dengan:

    ML.NET klasifikasi CLI di PowerShell

    Dalam kasus khusus ini, hanya dalam 10 detik dan dengan himpunan data kecil yang disediakan, alat CLI dapat menjalankan beberapa iterasi, yang berarti pelatihan beberapa kali berdasarkan kombinasi algoritma/konfigurasi yang berbeda dengan transformasi data internal dan parameter hiper algoritma yang berbeda.

    Akhirnya, model "kualitas terbaik" yang ditemukan dalam 10 detik adalah model yang menggunakan pelatih/algoritma tertentu dengan konfigurasi tertentu. Tergantung pada waktu eksplorasi, perintah dapat menghasilkan hasil yang berbeda. Pilihan didasarkan pada beberapa metrik yang ditampilkan, seperti Accuracy.

    Memahami metrik kualitas model

    Metrik pertama dan termampukan untuk mengevaluasi model klasifikasi biner adalah akurasi, yang mudah dipahami. "Akurasi adalah proporsi prediksi yang benar dengan himpunan data pengujian.". Semakin dekat ke 100% (1,00), semakin baik.

    Namun, ada kasus di mana hanya mengukur dengan metrik Akurasi tidak cukup, terutama ketika label (0 dan 1 dalam hal ini) tidak seimbang dalam himpunan data pengujian.

    Untuk metrik tambahan dan informasi lebih rinci tentang metrik seperti Akurasi, AUC, AUCPR, dan skor F1 yang digunakan untuk mengevaluasi berbagai model, lihat Memahami metrik ML.NET.

    Catatan

    Anda dapat mencoba himpunan data yang sangat sama ini dan menentukan beberapa menit untuk --max-exploration-time (misalnya tiga menit sehingga Anda menentukan 180 detik) yang akan menemukan "model terbaik" yang lebih baik untuk Anda dengan konfigurasi alur pelatihan yang berbeda untuk himpunan data ini (yang cukup kecil, 1000 baris).

    Untuk menemukan model "kualitas terbaik/baik" yang merupakan "model siap produksi" yang menargetkan himpunan data yang lebih besar, Anda harus membuat eksperimen dengan CLI biasanya menentukan waktu eksplorasi yang jauh lebih banyak tergantung pada ukuran himpunan data. Bahkan, dalam banyak kasus Anda mungkin memerlukan beberapa jam waktu eksplorasi terutama jika himpunan data besar pada baris dan kolom.

  2. Eksekusi perintah sebelumnya telah menghasilkan aset berikut:

    • Model berseri .zip ("model terbaik") siap digunakan.
    • Kode C# untuk menjalankan/menilai model yang dihasilkan (Untuk membuat prediksi di aplikasi pengguna akhir Anda dengan model tersebut).
    • Kode pelatihan C# yang digunakan untuk menghasilkan model tersebut (Tujuan pembelajaran).
    • File log dengan semua iterasi yang dieksplorasi memiliki informasi terperinci spesifik tentang setiap algoritma yang dicoba dengan kombinasi parameter hiper dan transformasi datanya.

    Dua aset pertama (.ZIP model file dan kode C# untuk menjalankan model tersebut) dapat langsung digunakan di aplikasi pengguna akhir Anda (aplikasi web ASP.NET Core, layanan, aplikasi desktop, dll.) untuk membuat prediksi dengan model ML yang dihasilkan.

    Aset ketiga, kode pelatihan, menunjukkan kepada Anda kode API ML.NET apa yang digunakan oleh CLI untuk melatih model yang dihasilkan, sehingga Anda dapat menyelidiki pelatih/algoritma/algoritma tertentu dan parameter hiper yang dipilih oleh CLI.

Aset yang dijumlahkan tersebut dijelaskan dalam langkah-langkah tutorial berikut.

Jelajahi kode C# yang dihasilkan untuk digunakan untuk menjalankan model guna membuat prediksi

  1. Di Visual Studio, buka solusi yang dihasilkan dalam folder bernama SampleClassification dalam folder tujuan asli Anda (dinamai /cli-test dalam tutorial). Anda akan melihat solusi yang mirip dengan:

    Solusi VS yang dihasilkan oleh CLI

    Catatan

    Dalam tutorial, sebaiknya gunakan Visual Studio, tetapi Anda juga dapat menjelajahi kode C# yang dihasilkan (dua proyek) dengan editor teks apa pun dan menjalankan aplikasi konsol yang dihasilkan dengan dotnet CLI di mesin macOS, Linux, atau Windows.

    • Aplikasi konsol yang dihasilkan berisi kode eksekusi yang harus Anda tinjau dan kemudian Anda biasanya menggunakan kembali 'kode penilaian' (kode yang menjalankan model ML untuk membuat prediksi) dengan memindahkan kode sederhana tersebut (hanya beberapa baris) ke aplikasi pengguna akhir tempat Anda ingin membuat prediksi.
    • File mbconfig yang dihasilkan adalah file konfigurasi yang dapat digunakan untuk melatih kembali model Anda, baik melalui CLI atau melalui Model Builder. Ini juga akan memiliki dua file kode yang terkait dengannya dan file zip.
      • File pelatihan berisi kode untuk membangun alur model menggunakan API ML.NET.
      • File konsumsi berisi kode untuk menggunakan model.
      • File zip yang merupakan model yang dihasilkan dari CLI.
  2. Buka file SampleClassification.consumption.cs dalam file mbconfig . Anda akan melihat bahwa ada kelas input dan output. Ini adalah kelas data, atau kelas POCO, yang digunakan untuk menyimpan data. Kelas berisi kode boilerplate yang berguna jika himpunan data Anda memiliki puluhan atau bahkan ratusan kolom.

    • Kelas ModelInput digunakan saat membaca data dari himpunan data.
    • Kelas ModelOutput digunakan untuk mendapatkan hasil prediksi (data prediksi).
  3. Buka file Program.cs dan jelajahi kode. Hanya dalam beberapa baris, Anda dapat menjalankan model dan membuat prediksi sampel.

    static void Main(string[] args)
    {
        // Create single instance of sample data from first line of dataset for model input
        ModelInput sampleData = new ModelInput()
        {
            Col0 = @"Wow... Loved this place.",
        };
    
        // Make a single prediction on the sample data and print results
        var predictionResult = SampleClassification.Predict(sampleData);
    
        Console.WriteLine("Using model to make single prediction -- Comparing actual Col1 with predicted Col1 from sample data...\n\n");
        Console.WriteLine($"Col0: {sampleData.Col0}");
        Console.WriteLine($"\n\nPredicted Col1 value {predictionResult.PredictedLabel} \nPredicted Col1 scores: [{String.Join(",", predictionResult.Score)}]\n\n");
        Console.WriteLine("=============== End of process, hit any key to finish ===============");
        Console.ReadKey();
    }
    
    • Baris pertama kode membuat satu data sampel, dalam hal ini berdasarkan baris pertama himpunan data Anda yang akan digunakan untuk prediksi. Anda juga dapat membuat data 'hard-code' Anda sendiri dengan memperbarui kode:

      ModelInput sampleData = new ModelInput()
      {
          Col0 = "The ML.NET CLI is great for getting started. Very cool!"
      };
      
    • Baris kode berikutnya menggunakan SampleClassification.Predict() metode pada data input yang ditentukan untuk membuat prediksi dan mengembalikan hasilnya (berdasarkan skema ModelOutput.cs).

    • Baris terakhir kode mencetak properti data sampel (dalam hal ini Komentar) serta prediksi Sentimen dan Skor yang sesuai untuk sentimen positif (1) dan sentimen negatif (2).

  4. Jalankan proyek, baik menggunakan data sampel asli yang dimuat dari baris pertama himpunan data atau dengan menyediakan data sampel berkode keras kustom Anda sendiri. Anda harus mendapatkan prediksi yang sebanding dengan:

ML.NET CLI menjalankan aplikasi dari Visual Studio)

  1. Coba ubah data sampel yang dikodekan secara permanen ke kalimat lain dengan sentimen yang berbeda dan lihat bagaimana model memprediksi sentimen positif atau negatif.

Masukkan aplikasi pengguna akhir Anda dengan prediksi model ML

Anda dapat menggunakan 'kode penilaian model ML' serupa untuk menjalankan model di aplikasi pengguna akhir Anda dan membuat prediksi.

Misalnya, Anda dapat langsung memindahkan kode tersebut ke aplikasi desktop Windows apa pun seperti WPF dan WinForms dan menjalankan model dengan cara yang sama daripada yang dilakukan di aplikasi konsol.

Namun, cara Anda menerapkan baris kode tersebut untuk menjalankan model ML harus dioptimalkan (yaitu, menyimpan model .zip file dan memuatnya sekali) dan memiliki objek singleton alih-alih membuatnya pada setiap permintaan, terutama jika aplikasi Anda perlu diskalakan seperti aplikasi web atau layanan terdistribusi, seperti yang dijelaskan di bagian berikut.

Menjalankan model ML.NET dalam aplikasi dan layanan web ASP.NET Core yang dapat diskalakan (aplikasi multi-utas)

Pembuatan objek model (ITransformer dimuat dari file .zip model) dan PredictionEngine objek harus dioptimalkan terutama saat berjalan pada aplikasi web yang dapat diskalakan dan layanan terdistribusi. Untuk kasus pertama, objek model (ITransformer) pengoptimalannya mudah. ITransformer Karena objek aman untuk utas, Anda dapat menyimpan objek sebagai objek singleton atau statis sehingga Anda memuat model sekali.

Untuk objek kedua, PredictionEngine objek , itu tidak begitu mudah karena PredictionEngine objek tidak aman utas, oleh karena itu Anda tidak dapat membuat instans objek ini sebagai objek singleton atau statis di aplikasi ASP.NET Core. Masalah thread-safe dan skalabilitas ini sangat dibahas dalam Posting Blog ini.

Namun, semuanya menjadi jauh lebih mudah bagi Anda daripada apa yang dijelaskan dalam posting blog itu. Kami mengerjakan pendekatan yang lebih sederhana untuk Anda dan telah membuat '.NET Core Integration Package' yang bagus yang dapat Anda gunakan dengan mudah di aplikasi dan layanan ASP.NET Core Anda dengan mendaftarkannya di layanan DI aplikasi (layanan Injeksi Dependensi) dan kemudian langsung menggunakannya dari kode Anda. Periksa tutorial dan contoh berikut untuk melakukannya:

Jelajahi kode C# yang dihasilkan yang digunakan untuk melatih model "kualitas terbaik"

Untuk tujuan pembelajaran yang lebih canggih, Anda juga dapat menjelajahi kode C# yang dihasilkan yang digunakan oleh alat CLI untuk melatih model yang dihasilkan.

Kode model pelatihan tersebut dihasilkan dalam file bernama SampleClassification.training.cs, sehingga Anda dapat menyelidiki kode pelatihan tersebut.

Lebih penting lagi, untuk skenario khusus ini (model Analisis Sentimen) Anda juga dapat membandingkan kode pelatihan yang dihasilkan dengan kode yang dijelaskan dalam tutorial berikut:

Sangat menarik untuk membandingkan algoritma dan konfigurasi alur yang dipilih dalam tutorial dengan kode yang dihasilkan oleh alat CLI. Bergantung pada berapa banyak waktu yang Anda habiskan untuk iterasi dan pencarian model yang lebih baik, algoritma yang dipilih mungkin berbeda bersama dengan parameter hiper dan konfigurasi alur tertentu.

Di tutorial ini, Anda akan mempelajari cara:

  • Siapkan data Anda untuk tugas ML yang dipilih (masalah yang harus diselesaikan)
  • Jalankan perintah 'klasifikasi mlnet' di alat CLI
  • Meninjau hasil metrik kualitas
  • Pahami kode C# yang dihasilkan untuk menjalankan model (Kode untuk digunakan di aplikasi pengguna akhir Anda)
  • Jelajahi kode C# yang dihasilkan yang digunakan untuk melatih model "kualitas terbaik" (tujuan penghasilan)

Lihat juga