Aracılığıyla paylaş


ML.NET CLI kullanarak duygu durumu analizi yapma

otomatik olarak bir ML.NET modeli ve temel alınan C# kodu oluşturmak için ML.NET CLI kullanmayı öğrenin. Veri kümenizi ve uygulamak istediğiniz makine öğrenmesi görevini sağlarsınız ve CLI, model oluşturma ve dağıtım kaynak kodunun yanı sıra sınıflandırma modelini oluşturmak için AutoML altyapısını kullanır.

Bu öğreticide aşağıdaki adımları uygulayacaksınız:

  • Verilerinizi seçili makine öğrenmesi görevi için hazırlama
  • CLI'dan mlnet classification komutunu çalıştırma
  • Kalite ölçümü sonuçlarını gözden geçirme
  • Modeli uygulamanızda kullanmak için oluşturulan C# kodunu anlama
  • Modeli eğitmek için kullanılan oluşturulan C# kodunu keşfetme

Dikkat

Bu makale, şu anda önizleme aşamasında olan ve malzemenin değiştirilebilir olduğu ML.NET CLI aracına başvurur. Daha fazla bilgi için ML.NET sayfasını ziyaret edin.

ML.NET CLI, ML.NET bir parçasıdır ve temel hedefi, başlamak için sıfırdan kod oluşturmanız gerekmemesi için ML.NET öğrenirken .NET geliştiricileri için ML.NET "demokratikleştirmek"tir.

ML.NET CLI'yi istediğiniz komut isteminde (Windows, Mac veya Linux) çalıştırarak sağladığınız eğitim veri kümelerini temel alan kaliteli ML.NET modelleri ve kaynak kodu oluşturabilirsiniz.

Önkoşullar

Oluşturulan C# kod projelerini Visual Studio'dan veya dotnet run (.NET CLI) ile çalıştırabilirsiniz.

Verilerinizi hazırlama

İkili sınıflandırma makine öğrenmesi görevi olan 'Yaklaşım Analizi' senaryosu için kullanılan mevcut bir veri kümesini kullanacağız. Kendi veri kümenizi benzer şekilde kullanabilirsiniz ve model ve kod sizin için oluşturulur.

  1. UCI Sentiment Labeled Sentences veri kümesi zip dosyasını (aşağıdaki nottaki alıntılara bakın) indirin ve seçtiğiniz herhangi bir klasöre sıkıştırmasını açın.

    Not

    Bu öğretici, "Derin Özellikler Kullanılarak Gruptan Bireysel Etiketlere", Kotzias ve diğerleri tarafından oluşturulan bir veri kümesi kullanır. KDD 2015 ve UCI Machine Learning Deposu ' nda barındırıldı - Dua, D. ve Karra Taniskidou, E. (2017). UCI Machine Learning Deposu [http://archive.ics.uci.edu/ml]. Irvine, CA: University of California, School of Information and Computer Science.

  2. yelp_labelled.txt dosyasını daha önce oluşturduğunuz herhangi bir klasöre (/cli-testgibi) kopyalayın.

  3. Tercih ettiğiniz komut istemini açın ve veri kümesi dosyasını kopyaladığınız klasöre gidin. Mesela:

    cd /cli-test
    

    Visual Studio Code gibi herhangi bir metin düzenleyicisini kullanarak yelp_labelled.txt veri kümesi dosyasını açabilir ve inceleyebilirsiniz. Yapının şu şekilde olduğunu görebilirsiniz:

    • Dosyanın üst bilgisi yok. Sütun dizinini kullanıyor olacaksınız.

    • Yalnızca iki sütun vardır:

      Metin (Sütun indeksi 0) Etiket (Sütun indeksi 1)
      Vay... Burayı sevdim. 1
      Kabuk iyi değil. 0
      Lezzetli değil ve doku sadece kötü. 0
      ... çok daha fazla metin satırı... ... (1 veya 0)...

    Düzenleyiciden veri kümesi dosyasını kapatdığınızdan emin olun.

    Bu 'Duygu Analizi' senaryosu için artık CLI kullanmaya başlamaya hazırsınız.

    Not

    Bu öğreticiyi tamamladıktan sonra, 'İkili Sınıflandırma', 'Sınıflandırma', 'Regresyon', ve 'Öneri'ML.NET CLI Önizlemesi tarafından desteklenen ML görevlerinden herhangi biri için kullanılmaya hazır oldukları sürece kendi veri kümelerinizle de deneyebilirsiniz.

'mlnet classification' komutunu çalıştırın

  1. Aşağıdaki ML.NET CLI komutunu çalıştırın:

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

    Bu komut komutunu çalıştırır:

    • ML görevi için sınıflandırma
    • eğitim ve test veri kümesi olarak veri kümesi dosyasını kullanır (dahili olarak CLI çapraz doğrulama kullanır veya biri eğitim için, diğeri test için) iki veri kümesine böler
    • burada tahmin etmek istediğiniz hedef/hedef sütun (genellikle 'etiket'olarak adlandırılır), dizin 1 içeren sütunudur (dizin sıfır tabanlı olduğundan ikinci sütundur)
    • , bu veri kümesi dosyasında bir üst bilgi olmadığından, sütun adları içeren bir dosya üst bilgisi kullanmaz.
    • Deneme için hedeflenen keşif/eğitim süresi 10 saniye

    CLI'nin çıkışını, benzer şekilde görürsünüz:

    ML.NET CLI sınıflandırması PowerShell 'da

    Bu özel durumda, yalnızca 10 saniye içinde ve sağlanan küçük veri kümesiyle, CLI aracı, farklı algoritmaların/yapılandırmaların bileşimleri ile farklı iç veri dönüştürmeleri ve algoritmanın hiper parametreleri temelinde birden çok kez eğitim yaparak birçok yinelemeyi çalıştırmayı başardı.

    Son olarak, 10 saniyede bulunan "en iyi kalite" modeli, herhangi bir özel yapılandırmaya sahip belirli bir eğitmen/algoritma kullanan bir modeldir. Araştırma süresine bağlı olarak, komut farklı bir sonuç üretebilir. Seçim, Accuracygibi gösterilen birden çok ölçümü temel alır.

    Modelin kalite ölçümlerini anlama

    İkili sınıflandırma modelini değerlendirmenin ilk ve en kolay ölçümü, anlaşılması kolay olan doğruluk değeridir. "Doğruluk, bir test veri kümesiyle doğru tahminlerin oranıdır." 100% (1,00) ne kadar yakınsa o kadar iyidir.

    Ancak, özellikle test veri kümesinde etiket (0 ve 1) dengesiz olduğunda yalnızca Doğruluk ölçümüyle ölçüm yapmak yeterli değildir.

    Farklı modelleri değerlendirmek için kullanılan Doğruluk, AUC, AUCPR ve F1 puanı gibi ölçümler hakkında ek ölçümler ve daha fazla ayrıntılı bilgi için bkz.ML.NET ölçümlerini anlama .

    Not

    Aynı veri kümesini deneyebilir ve --max-exploration-time için birkaç dakika (örneğin, üç dakika yani 180 saniye) ayırabilirsiniz; bu, bu veri kümesi için (oldukça küçük, 1000 satır) farklı bir eğitim işlem hattı yapılandırmasıyla sizin için daha iyi bir "en iyi model" bulacaktır.

    Daha büyük veri kümelerini hedefleyen "üretime hazır bir model" olan "en iyi/iyi kalite" modelini bulmak için, CLI ile denemeler yapmanız ve genellikle veri kümesinin boyutuna bağlı olarak çok daha fazla keşif süresi belirtmeniz gerekir. Aslında çoğu durumda, özellikle veri kümesi satır ve sütunlarda büyükse, birkaç saatlik araştırma süresi gerekebilir.

  2. Önceki komut yürütmesi aşağıdaki varlıkları oluşturdu:

    • Kullanıma hazır bir serileştirilmiş model .zip ("en iyi model").
    • Oluşturulan modeli çalıştırmak/puan almak için C# kodu (Bu modelle son kullanıcı uygulamalarınızda tahmin yapmak için).
    • Bu modeli oluşturmak için kullanılan C# eğitim kodu (Öğrenme amaçları).
    • Hiper parametrelerin ve veri dönüşümlerinin birleşimiyle denenen her algoritma hakkında ayrıntılı bilgilere sahip olup olmadığını araştıran tüm yinelemeleri içeren bir günlük dosyası.

    oluşturulan ML modeliyle tahminde bulunmak için ilk iki varlık (.ZIP dosya modeli ve bu modeli çalıştırmak için C# kodu) doğrudan son kullanıcı uygulamalarınızda (ASP.NET Core web uygulaması, hizmetler, masaüstü uygulaması vb.) kullanılabilir.

    Üçüncü varlık olan eğitim kodu, CLI tarafından oluşturulan modeli eğitmek için hangi ML.NET API kodunun kullanıldığını gösterir; böylece CLI tarafından hangi eğitmenin/algoritmanın ve hiper parametrelerin seçildiğini araştırabilirsiniz.

Bu numaralandırılmış varlıklar, eğitimin aşağıdaki adımlarında açıklanmıştır.

Tahmin yapmak için modeli çalıştırmak için kullanılacak oluşturulan C# kodunu keşfetme

  1. Visual Studio'da, özgün hedef klasörünüzdeki SampleClassification adlı klasörde oluşturulan çözümü açın (öğreticide /cli-test olarak adlandırıldı). Şuna benzer bir çözüm görmeniz gerekir:

    CLI tarafından oluşturulan VS çözümü

    Not

    Öğreticide Visual Studio'nun kullanılması önerilir, ancak oluşturulan C# kodunu (iki proje) herhangi bir metin düzenleyicisiyle keşfedebilir ve oluşturulan konsol uygulamasını macOS, Linux veya Windows makinesinde dotnet CLI çalıştırabilirsiniz.

    • Oluşturulan konsol uygulaması gözden geçirmeniz gereken yürütme kodunu içerir ve ardından bu basit kodu (yalnızca birkaç satır) tahminde bulunmak istediğiniz son kullanıcı uygulamanıza taşıyarak genellikle 'puanlama kodunu' (tahmin yapmak için ML modelini çalıştıran kod) yeniden kullanırsınız.
    • Oluşturulan mbconfig dosyası, CLI veya Model Oluşturucu aracılığıyla modelinizi yeniden eğitmek için kullanılabilecek bir yapılandırma dosyasıdır. Bu dosyayla ilişkilendirilmiş iki kod dosyası ve bir zip dosyası da bulunur.
      • eğitim dosyası, ML.NET API'sini kullanarak model işlem hattını oluşturmaya ilişkin kodu içerir.
      • tüketim dosyası modeli kullanacak kodu içerir.
      • CLI'dan oluşturulan model olan zip dosyası.
  2. mbconfig dosyasının içinde SampleClassification.consumption.cs dosyasını açın. Giriş ve çıkış sınıfları olduğunu göreceksiniz. Bunlar, verileri tutmak için kullanılan veri sınıfları veya POCO sınıflarıdır. Sınıflar, veri kümenizde onlarca, hatta yüzlerce sütun varsa yararlı olan ortak kod içerir.

    • ModelInput sınıfı, veri kümesinden veri okunurken kullanılır.
    • ModelOutput sınıfı, tahmin sonucunu (tahmin verileri) almak için kullanılır.
  3. Program.cs dosyasını açın ve kodu keşfedin. Yalnızca birkaç satırda modeli çalıştırabilir ve örnek bir tahminde bulunabilirsiniz.

    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();
    }
    
    • İlk kod satırları,tek bir örnek veri oluşturur. Bu durumda, tek örnek veriler tahmin için kullanılacak veri kümesinin ilk satırını temel alır. Ayrıca kodu güncelleştirerek kendi "sabit kodlanmış" verilerinizi oluşturabilirsiniz:

      ModelInput sampleData = new ModelInput()
      {
          Col0 = "The ML.NET CLI is great for getting started. Very cool!"
      };
      
    • Sonraki kod satırı, tahminde bulunmak ve sonuçları döndürmek için belirtilen giriş verilerinde SampleClassification.Predict() yöntemini kullanır (ModelOutput.cs şemasına göre).

    • Kodun son satırları, örnek verilerin özelliklerini (bu örnekte Açıklama) ve Yaklaşım tahminini ve pozitif yaklaşım (1) ve negatif yaklaşım için karşılık gelen Puanları (2) yazdırır.

  4. Veri kümesinin ilk satırından yüklenen özgün örnek verileri kullanarak veya kendi özel sabit kodlanmış örnek verilerinizi sağlayarak projeyi çalıştırın. Aşağıdakilerle karşılaştırılabilir bir tahmin almalısınız:

    ML.NET CLI ile uygulamayı Visual Studio'dan çalıştır

Sabit kodlanmış örnek verileri farklı yaklaşımlara sahip diğer cümlelerle değiştirmeyi deneyin ve modelin olumlu veya olumsuz yaklaşımı nasıl tahmin ettiğini görün.

ML modeli tahminleriyle son kullanıcı uygulamalarınızı kullanma

Modeli son kullanıcı uygulamanızda çalıştırmak ve tahminlerde bulunmak için benzer 'ML model puanlama kodu' kullanabilirsiniz.

Örneğin, bu kodu wpf ve winforms gibi herhangi bir Windows masaüstü uygulamasına doğrudan taşıyabilir ve modeli konsol uygulamasında yapılanla aynı şekilde çalıştırabilirsiniz.

Bununla birlikte, ml modelini çalıştırmak için bu kod satırlarını uygulama şekliniz iyileştirilmiş olmalıdır (yani, modeli önbelleğe alıp dosya .zip bir kez yüklemelisiniz) ve özellikle uygulamanızın web uygulaması veya dağıtılmış hizmet gibi ölçeklenebilir olması gerekiyorsa, her istekte oluşturmak yerine tekil nesnelere sahip olmalıdır.

Ölçeklenebilir çok iş parçacıklı ASP.NET Core web uygulamaları ve hizmetlerinde ML.NET modellerini çalıştırma

Model nesnesinin oluşturulması (modelin .zip dosyasından yüklenenITransformer) ve PredictionEngine nesnesi özellikle ölçeklenebilir web uygulamalarında ve dağıtılmış hizmetlerde çalışırken iyileştirilmelidir. İlk durumda, model nesnesi (ITransformer) iyileştirme basittir. ITransformer nesnesi iş parçacığı açısından güvenli olduğundan, nesneyi tekil veya statik bir nesne olarak önbelleğe alabilir, böylece modeli bir kez yükleyebilirsiniz.

ASP.NET Core uygulamasında, PredictionEngine nesnesi iş parçacığı açısından güvenli olmadığından, ikinci nesne olan PredictionEngine nesnesini tekil veya statik bir nesne olarak oluşturamazsınız. Bu iş parçacığı güvenliği ve ölçeklenebilirlik konusu, bu Blog Gönderisi'de ayrıntılı olarak ele alınıyor.

Ancak, işler sizin için bu blog gönderisinde açıklanandan çok daha kolay hale geldi. Sizin için daha basit bir yaklaşım üzerinde çalıştık ve ASP.NET Core uygulamalarınızda ve hizmetlerinizde kolayca kullanabileceğiniz bir '.NET Tümleştirme Paketi' oluşturduk. Bunu uygulama DI hizmetlerine (Bağımlılık Ekleme hizmetleri) kaydedip doğrudan kodunuzdan kullanabilirsiniz. Bunu yapmak için aşağıdaki öğreticiyi ve örneği gözden geçirin:

"En iyi kalite" modelini eğitmek için kullanılan oluşturulan C# kodunu keşfetme

Daha gelişmiş öğrenme amaçları için, CLI aracı tarafından oluşturulan modeli eğitmek için kullanılan oluşturulan C# kodunu da keşfedebilirsiniz.

Bu eğitim modeli kodu, SampleClassification.training.csadlı dosyada oluşturulur, böylece bu eğitim kodunu araştırabilirsiniz.

Daha da önemlisi, bu senaryo (Yaklaşım Analizi modeli) için, oluşturulan eğitim kodunu aşağıdaki öğreticide açıklanan kodla karşılaştırabilirsiniz:

Seçilen algoritma ve işlem hattı yapılandırmasını öğretideki haliyle CLI aracı tarafından oluşturulan kodla karşılaştırmak ilginçtir. Daha iyi modelleri yinelemek ve aramak için ne kadar zaman harcadığınıza bağlı olarak, seçilen algoritma belirli hiper parametreleri ve işlem hattı yapılandırmasıyla birlikte farklı olabilir.

Bu öğreticide şunların nasıl yapılacağını öğrendiniz:

  • Verilerinizi seçili ML görevi için hazırlama (çözülmesi gereken sorun)
  • CLI aracında 'mlnet classification' komutunu çalıştırın
  • Kalite ölçümü sonuçlarını gözden geçirme
  • Modeli çalıştırmak için oluşturulan C# kodunu anlama (Son kullanıcı uygulamanızda kullanılacak kod)
  • "En iyi kalite" modelini, kazanma amaçlı eğitmek için kullanılan oluşturulmuş C# kodunu keşfedin.

Ayrıca bkz.