Machine Learning w środowisku .NET

27 września, 2021 Robert Krzaczyński

Obecnie naturalnym wyborem do implementacji i wdrożenia algorytmów uczenia maszynowego są Python i R. Ale entuzjaści programowania w technologii .NET nie powiedzieli jeszcze ostatniego słowa. W ostatnich latach pojawiają się biblioteki, których możliwości wzrastają z miesiąca na miesiąc. Sprawdźmy dostępne opcje, co zawierają i czy mogą konkurować z liderami w tej dziedzinie. 

 

Na początek trochę historii 

Rozwój machine learningu w środowisku .NET trwa już od wielu lat. Accord.NET był prawdopodobnie pierwszym frameworkiem w tej tematyce. Powstał w 2009 roku, a rok później pojawiła się jego pierwsza stabilna wersja. Składał się z zestawu bibliotek, które były dostępne zarówno z poziomu menadżera pakietów NuGet, jak i poprzez pliki wykonywalne. W 2017 roku wyszła najnowsza wersja narzędzia, a rok temu repozytorium projektu na GitHubie zostało zarchiwizowane. Choć framework ten jest obecnie rzadko wykorzystywanym rozwiązaniem, to pokazuje, jak długo trwa już rozwój tej dziedziny w .NET.

 

ML.NET, czyli filar uczenia maszynowego w .NET 

Aktualnym filarem rozwoju uczenia maszynowego w technologii .NET jest framework ML.NET. Swoją premierę miał w drugiej części 2018 roku. Jest biblioteką dedykowaną dla języków programowania C# i F#. A jej silne powiązanie z Microsoftem daje wiele korzyści.

Przede wszystkim to dynamiczny rozwój biblioteki, dzięki czemu jej oferta jest coraz szersza. Daje Ci możliwość wytrenowania modelu uczenia maszynowego lub korzystania z istniejących już modeli. Później możesz uruchamiać je w dowolnym środowisku, korzystając z prostych algorytmów, jak Naiwny klasyfikator Bayesa, czy też tych bardziej zaawansowanych – np. algorytm Limited-Memory Broyden-Fletcher-Goldfarb-Shanno.

Warto również wspomnieć o możliwości przeprowadzenia klasyfikacji obrazów przy użyciu wytrenowanego modelu TensorFlow. Na przykład za pomocą metody Transfer Learning. Jeśli zależy Ci na wysokiej skuteczności, możesz również przeanalizować stworzony wcześniej model. Biblioteka zawiera między innymi rozwiązania pozwalające na sprawdzenie, jakie konkretnie cechy mają kluczowe znaczenie dla modelu.

Platforma oferuje także rozwiązania dla osób nietechnicznych w oparciu o koncept no-code, czyli sposób budowania aplikacji bez pisania kodu. Masz możliwość tworzenia i konfigurowania wszystkiego za pomocą interfejsu użytkownika. ML.NET Model Builder można określić jako mały zalążek tego rozwiązania. Przeczytasz o tym więcej na moim blogu.

Fakt, że ML.NET tworzony jest bezpośrednio przez Microsoft, daje jeszcze jedną korzyść. Pozwala zbudować wokół biblioteki społeczność, dla której organizowane są m.in. cykliczne, cotygodniowe spotkania na kanale YouTube, czy też coroczna konferencja The Virtual ML.NET Community Conference.

 

Co z sieciami neuronowymi? 

Niestety, ML.NET nie ma w swojej ofercie algorytmów opartych na sztucznych sieciach neuronowych. Jednak nie trzeba było długo czekać na odpowiedź po wielu zapytaniach społeczności o ten istotny element. W 2019 roku wyszła pierwsza wersja biblioteki TensorFlow.NET.

Nazwa brzmi dla Ciebie znajomo? Tak, jest to odpowiednik TensorFlow dla języka Python.

TF.NET zapewnia powiązanie .NET Standard ze wspomnianą biblioteką. Jej celem jest wdrożenie pełnego interfejsu API Tensorflow w języku C#, który umożliwia programistom .NET wdrażanie modeli uczenia maszynowego. W szczególności głębokich sieci neuronowych. Przykładowe implementacje możesz znaleźć tutaj.

 

Czy są jeszcze inne biblioteki? 

Tak, dostępne są również inne, mniej znane biblioteki pozwalające na wdrażanie metod uczenia maszynowego na platformie .NET. Warto tutaj wspomnieć o narzędziach z rodziny SciSharp, z której pochodzi wspomniana wyżej biblioteka TensorFlow.NET. W jej skład wchodzą również m.in. NumSharp, czyli odpowiednik NumPy z Pythona, czy też Catalyst NLP służący do przetwarzania języka naturalnego. Obecnie trwają prace nad kolejnymi bibliotekami wchodzącymi w skład ekosystemu SciSharp. Ich lista zawiera obecnie 12 pozycji.

 

 

Zaimplementuj to sam!

Ostatnią opcją na wdrożenie uczenia maszynowego w środowisku .NET jest własna implementacja algorytmu. Bez dwóch zdań jest to świetna możliwość do kompleksowego zrozumienia danej metody. Należy jednak odpowiedzieć sobie na jedno zasadnicze pytanie – czy warto odkrywać koło na nowo?

Jeśli chcesz w wolnym czasie zagłębiać się w tajniki uczenia maszynowego – próbuj!

Jednak jeśli chcesz wdrożyć inteligentny algorytm do rozwiązania komercyjnego i zależy Ci na czasie, to używaj dostępnych rozwiązań. Dzięki temu możesz lepiej zoptymalizować wybraną metodę, czy też dostosować ją do rozwiązywanego problemu.

 

Podsumowanie 

Rozwój uczenia maszynowego w technologii .NET to obszerny temat. Stworzone do tej pory narzędzia oraz perspektywa rozwoju wymienionych przeze mnie bibliotek pozwalają nieśmiało zakładać, że powoli rodzi się prawdziwa konkurencja dla dotychczasowych “championów”. A rozwiązania chmurowe Microsoft Azure jeszcze zwiększają ten potencjał. To jest już jednak temat na oddzielne rozważania.

 

Kontakt z autorem: Robert Krzaczyński

Najnowsze wpisy