Aracılığıyla paylaş


ML.NET CLI kullanarak yaklaşımı çözümleme

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ırın
  • 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

Not

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

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

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

Ön koşullar

Oluşturulan C# kod projelerini Visual Studio'dan veya (.NET CLI) kullanarak dotnet run ç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 Yaklaşım Etiketli Cümleler veri kümesi zip dosyasını indirin (aşağıdaki nottaki alıntılara bakın) ve seçtiğiniz herhangi bir klasörde sıkıştırmasını açın.

    Not

    Bu öğreticideki veri kümeleri, "Derin Özellikleri Kullanarak Gruptan Tek Tek Etiketlere", Kotzias ve diğerleri veri kümelerini kullanır. KDD 2015 ve UCI Machine Learning Deposu - Dua, D. ve Karra Taniskidou, E. 'de (2017) barındırıldı. 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 Dosyayı daha önce oluşturduğunuz herhangi bir klasöre kopyalayın (örneğin/cli-test).

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

    cd /cli-test
    

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

    • Dosyanın üst bilgisi yok. Sütunun dizinini kullanacaksınız.

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

      Metin (Sütun dizini 0) Etiket (Sütun dizini 1)
      Wow... 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.

    Artık bu 'Yaklaşım Analizi' senaryosu için CLI'yı 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' olan 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 şu mlnet classification komutu çalıştırır:

    • sınıflandırma ml görevi için
    • veri kümesi dosyasını yelp_labelled.txt eğitim ve test veri kümesi olarak kullanır (dahili olarak CLI çapraz doğrulamayı kullanır veya biri eğitim, 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) dizini 1 olan sütundur (dizin sıfır tabanlı olduğundan ikinci sütundur)
    • bu veri kümesi dosyasının üst bilgisi olmadığından sütun adlarıyla bir dosya üst bilgisi kullanmaz
    • deneme için hedeflenen keşif/eğitim süresi10 saniyedir

    CLI'nin çıkışını görürsünüz, örneğin:

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

    Bu örnekte, yalnızca 10 saniye içinde ve sağlanan küçük veri kümesiyle, CLI aracı oldukça az yineleme çalıştırabildi, yani farklı iç veri dönüştürmeleri ve algoritmanın hiper parametreleriyle farklı algoritmalar/yapılandırma bileşimleri temelinde birden çok kez eğitildi.

    Son olarak, 10 saniyede bulunan "en iyi kalite" modeli, belirli bir eğitmen/algoritmayı belirli bir yapılandırmayla kullanan bir modeldir. Araştırma süresine bağlı olarak komutu farklı bir sonuç üretebilir. Seçim, Accuracygösterilen gibi 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'e (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çümlemenin yeterli olmadığı durumlar vardır.

    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 ayrıntılı bilgi için bkz. ML.NET ölçümlerini anlama.

    Not

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

    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 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, birden çok saat 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 tahminde bulunmak için).
    • Bu modeli oluşturmak için kullanılan C# eğitim kodu (Öğrenme amaçları).
    • Tüm yinelemeleri içeren bir günlük dosyası, hiper parametrelerin ve veri dönüşümlerinin birleşimiyle denenen her algoritma hakkında ayrıntılı bilgiler içerdiğini keşfetti.

    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, öğreticinin aşağıdaki adımlarında açıklanmıştır.

Tahminlerde bulunmak üzere modeli çalıştırmak için kullanılacak oluşturulan C# kodunu keşfetme

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

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

    Not

    Öğreticide Visual Studio kullanmanızı öneririz, ancak oluşturulan C# kodunu (iki proje) herhangi bir metin düzenleyicisiyle inceleyebilir ve oluşturulan konsol uygulamasını macOS, Linux veya Windows makinesinde ile dotnet CLI çalıştırabilirsiniz.

    • Oluşturulan konsol uygulaması gözden geçirmeniz gereken yürütme kodunu içerir ve 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 aracılığıyla 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ı derleme kodunu içerir.
      • Tüketim dosyası, modeli kullanmak için gereken 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 okurken kullanılır.
    • sınıfı ModelOutput , 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ı, bu örnekte tahmin için kullanılacak veri kümenizin ilk satırını temel alan tek bir örnek veri oluşturur. Kodu güncelleştirerek kendi 'sabit kodlanmış' verilerinizi de oluşturabilirsiniz:

      ModelInput sampleData = new ModelInput()
      {
          Col0 = "The ML.NET CLI is great for getting started. Very cool!"
      };
      
    • Bir sonraki kod satırı, tahminde bulunmak ve sonuçları döndürmek için belirtilen giriş verilerinde yöntemini kullanır SampleClassification.Predict() (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, uygulamayı Visual Studio'dan çalıştırır)

  1. Sabit kodlanmış örnek verileri farklı yaklaşıma sahip diğer cümlelerle değiştirmeyi deneyin ve modelin pozitif veya negatif yaklaşımı nasıl tahmindiğ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ındakiyle aynı şekilde çalıştırabilirsiniz.

Bununla birlikte, ml modelini çalıştırmak için bu kod satırlarını uygulama şekliniz iyileştirilmelidir (başka bir ifadeyle, 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 ASP.NET Core web uygulamaları ve hizmetlerinde (çok iş parçacıklı uygulamalar) ML.NET modelleri çalıştırma

Model nesnesinin oluşturulması (ITransformer modelin .zip dosyasından yüklenir) ve nesne özellikle PredictionEngine ölçeklenebilir web uygulamalarında ve dağıtılmış hizmetlerde çalışırken iyileştirilmelidir. İlk durumda, model nesnesi (ITransformer) iyileştirme basittir. ITransformer Nesne 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.

İkinci nesne için nesne PredictionEngine çok kolay değildir çünkü PredictionEngine nesne iş parçacığı açısından güvenli değildir, bu nedenle bu nesneyi bir ASP.NET Core uygulamasında tekil veya statik nesne olarak başlatamazsınız. Bu iş parçacığı güvenli ve ölçeklenebilirlik sorunu bu Blog Gönderisi'nde ayrıntılı olarak ele alınmıştı.

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

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

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 adlı SampleClassification.training.csdosyada 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:

Öğreticide seçilen algoritmayı ve işlem hattı yapılandırmasını 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ıldığı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çirin
  • Modeli çalıştırmak için oluşturulan C# kodunu anlama (Son kullanıcı uygulamanızda kullanılacak kod)
  • "En iyi kalite" modelini eğitmek için kullanılan oluşturulan C# kodunu keşfedin (kazanç amaçları)

Ayrıca bkz.