Strona korzysta z plików cookies w celu realizacji usług i zgodnie z Polityką Plików Cookies.



29.12.2022

Nowe funkcje od Oracle

W aplikacjach CX, SCM, EPM i HCM Fusion Cloud firmy Oracle pojawiło się wiele nowych...
29.12.2022

Inteligentne sygnały

Nowa usługa Vectra MDR zapewnia wsparcie ekspertów w zakresie bezpieczeństwa...
29.12.2022

Wieloetapowa analiza treści

Firma WithSecure wprowadziła nową warstwę ochrony w swojej opartej na chmurze platformie...
29.12.2022

Kontrola aplikacji

Fortinet zaprezentował nowe funkcje systemu FortiSASE: bezpieczny prywatny dostęp (Secure...
29.12.2022

Zgodnie z przepisami

Nowe rozwiązanie do zarządzania danymi firmy Commvault, oferowane w formie usługi,...
29.12.2022

Większa elastyczność w...

Schneider Electric ogłosił wprowadzenie na rynek urządzenia zasilającego APC NetShelter...
29.12.2022

Firewall nowej generacji

Fortinet zaprezentował nową rodzinę zapór sieciowych nowej generacji (NGFW) – FortiGate...
29.12.2022

Nowy przełącznik źródeł...

Vertiv przedstawił nową rodzinę przełączników źródeł zasilania Vertiv Geist RTS, które...
29.12.2022

Routery VPN Omada

TP-Link poszerza portfolio routerów VPN o dwa nowe urządzenia. ER7212PC to urządzenie 3 w...

Odpowiedzialna AI z SynapseML

Data publikacji: 29-12-2022 Autor: Marcin Szeliga

Sztuczna inteligencja podejmuje coraz więcej decyzji mających bezpośredni wpływ na nasze życie – ocenia naszą zdolność kredytową, pracę, a nawet zachowanie. Tymczasem nauczone na niezrównoważonych danych modele potrafią dyskryminować pewne grupy użytkowników, na przykład kobiety, mniejszości etniczne czy kulturowe. Dlatego tak ważna jest ocena samych danych i zwracanych przez modele predykcji. Potrzebujemy do tego odpowiednich narzędzi, takich jak te oferowane przez bibliotekę SynapseML.

 

Do niedawna środowisko Data Science koncentrowało się na algorytmach uczenia maszynowego i jakości przeszkolonych na nich modeli. Większość wystąpień na konferencjach branżowych i publikowanych badań dotyczyło różnych, często bardzo wartościowych, metod optymalizacji procesu uczenia i nowych architektur modeli. Ich jakość oceniana była wyłącznie za pomocą technicznych miar, takich jak dokładność czy błąd średniokwadratowy. Tymczasem większość projektów Data Science nie ma na celu opracowania nowych metod uczenia maszynowego, ale zastosowanie istniejących algorytmów i modeli do rozwiązywania konkretnych problemów. Dlatego coraz większą rolę przywiązuje się do stosowania technik DevOps w projektach uczenia maszynowego (MLOps) oraz do kwestii etycznych zorientowanych na tworzenie odpowiedzialnej sztucznej inteligencji. Celem artykułu jest przedstawienie nowego środowiska stworzonego z myślą o ułatwieniu odpowiedzialnego stosowania algorytmów uczenia maszynowego – SynapseML.


> SynapseML


SynapseML to otwartoźródłowa biblioteka upraszczająca tworzenie skalowalnych potoków uczenia maszynowego, która zastąpiła bibliotekę MMSpark. Jest ona dostępna w różnych środowiskach, w tym Synapse Analytics, Databricks, Apache Livy i Python. Jej instalacja w środowisku Synapse Analytics (wymaga ona wersji Scala 2.12, Spark 3.0 lub nowszego i Python 3.6 lub nowszego) sprowadza się do uruchomienia poniższej instrukcji:


%%configure -f
{
"name": "synapseml",
"conf": {
"spark.jars.packages": "com.microsoft.azure:synapseml_2.12:0.10.1",
"spark.jars.repositories": "https://mmlspark.azureedge.net/maven",
"spark.jars.excludes": "org.scala-lang:scala-reflect,org.apache.spark:spark-tags_2.12,org.scalactic:scalactic_2.12,org.scalatest:scalatest_2.12,com.fasterxml.jackson.core:jackson-databind",
"spark.yarn.user.classpath.first": "true"
}
}


Po zainstalowaniu zyskamy:

 

  • dostęp do szerokiej gamy transformacji wykorzystujących usługi poznawcze do analizy tekstu i obrazu;
  • możliwość używania w potokach uczenia maszynowego takich bibliotek jak Microsoft Cognitive Toolkit, LightGBM czy OpenCV;
  • narzędzia do oceny zrównoważenia danych;
  • narzędzia do interpretacji zwracanych przez modele predykcji.


Repozytorium zawierające kod źródłowy biblioteki, dokumentację oraz przykłady jej użycia dostępne jest pod adresem github.com/Microsoft/SynapseML.


> Transformacje


Transformacje pozwalają korzystać w definiowanych potokach uczenia maszynowego z zewnętrznych usług, takich jak usługi poznawcze. Umożliwia nam to łatwą i szybką analizę tekstów i obrazów, bez konieczności samodzielnego budowania używanych w tym celu modeli głębokiego uczenia maszynowego. Wszystko, czego potrzebujemy, to wcześniej utworzony zasób Cognitive Services, do którego wyślemy analizowane dane. Na przykład do oceny nastawienia wypowiedzi wystarczy wywołać transformację TextSentiment:


from synapse.ml.cognitive import *
from pyspark.sql.functions import col
# Create a dataframe that's tied to it's column names
df = spark.createDataFrame(
data=[
["en", "I am frustrated by this rush hour traffic!"],
["en", "There once was a dog who lived in London and thought she was a human"],
["en", "I am so happy today, its sunny"]
],
schema=["language", "text"],
)
# Call the Text Analytics service
sentiment = (
TextSentiment()
.setTextCol("text")
.setLocation(cognitive_location)
.setSubscriptionKey(cognitive_key)
.setOutputCol("sentiment")
.setErrorCol("error")
.setLanguageCol("language")
)
# Show the results of your text query
display(
sentiment.transform(df).select(
"text", col("sentiment")
)
)


W podobny sposób, używając transformacji Translate, możemy przetłumaczyć tekst na wybrany język. Wyniki dla języka polskiego wyglądają następująco: „Jestem sfrustrowany tym ruchem w godzinach szczytu!”, „Był kiedyś pies, który mieszkał w Londynie i myślał, że jest człowiekiem.”, „Jestem dziś taki szczęśliwy, jest słonecznie”. Aby przeanalizować obraz, możemy przesłać albo sam plik, albo jego adres URL. Na liście dostępnych transformacji znajdziemy m.in. zwracającą wykryte na obrazie obiekty określonego rodzaju transformację AnalyzeImage oraz generującą opis obrazu transformację DescribeImage:


analysis = (
DescribeImage()
.setLocation(cognitive_location)
.setSubscriptionKey(cognitive_key)
.setOutputCol("analysis_results")
.setImageUrlCol("image")
.setErrorCol("error")
)
# Show the results of what you wanted to pull out
# of the images.
display(analysis.transform(df).select("analysis_results.description.captions"))


> Analiza zrównoważenia danych


Tradycyjnie za niezrównoważone (niezbalansowane) dane uważa się takie, w których jeden ze stanów analizowanej zmiennej występuje znacznie częściej niż pozostałe. Sytuacja taka jest bardzo częsta – na przykład jeżeli analizujemy legalność transakcji, to prób oszustwa prawdopodobnie nie będzie więcej niż 1%. W takich sytuacjach stosuje się techniki równoważenia danych polegające na usunięciu części obserwacji należących do klasy większościowej, dodaniu wygenerowanych obserwacji należących do klasy mniejszościowej lub na połączeniu obu powyższych metod. Co jednak z rozkładem zmiennych wejściowych? Jego poznanie jest kluczowe nie tylko dla oceny jakości danych, ale również dla budowania odpowiedzialnych, tj. niedyskryminujących żadnej grupy użytkowników, modeli. Do oceny jakości danych, w tym rozkładu zmiennych i zależności pomiędzy zmiennymi, można używać różnych narzędzi. Na przykład biblioteka pandas-profiling pozwala wygenerować kompletny raport jedną instrukcją:


from pandas_profiling import ProfileReport
prof = ProfileReport(df.toPandas())
prof.to_notebook_iframe()


Jednak wraz ze wzrostem ilości danych czas generowania raportu gwałtownie rośnie. Ponadto trudno użyć tego raportu jako kroku potoku uczenia maszynowego. Biblioteka SynapseML zawiera trzy transformacje pozwalające rozwiązać oba te problemy:

 

  • DistributionBalanceMeasure pozwala porównać rozkład zmiennej z rozkładem bazowym (jednorodnym);
  • AggregateBalanceMeasure pozwala ocenić współwystępowanie różnych wartości wybranych zmiennych;
  • FeatureBalanceMeasure pozwala ocenić wpływ współwystępowania poszczególnych wartości wybranych zmiennych wejściowych na stany zmiennej wyjściowej.


Przyjrzyjmy się im na przykładzie zbioru Census. Zmienne wrażliwe to te, względem których model nie powinien być uprzedzony. Przyjmijmy, że wrażliwymi zmiennymi wejściowymi są rasa, płeć i stan cywilny i chcielibyśmy, żeby model uczciwie oceniał przedstawicieli tych kategorii.


Df = spark.read.parquet(
“wasbs://publicwasb@mmlspark.blob.core.windows.net/AdultCensusIncome.parquet”
)
cols_of_interest = [“race”, “sex”, “marital-status”]
Zacznijmy od oceny rozkładu wybranych zmiennych:
from synapse.ml.exploratory import DistributionBalanceMeasure
distribution_balance_measures = (
DistributionBalanceMeasure().setSensitiveCols(cols_of_interest).transform(df)
)


Wizualizacja otrzymanych wyników przedstawiona została na rys. 3. Rozkłady dwóch zmiennych wrażliwych zostały porównane z rozkładem jednorodnym przy użyciu kilku miar:

 

  • dywergencji Kullbacka–Leiblera mierzącej ilość informacji utraconej w wypadku zastąpienia rozkładu zmiennej rozkładem bazowym;
  • odległości Jensena–Shannona (pierwiastka kwadratowego dywergencji JS będącej symetryczną i wygładzoną wersją dywergencji KL);
  • odległości Czebyszewa (w szachach jest to odległość między polami szachownicy wyrażona w ruchach, które musi wykonać król);
  • całkowitej odległości zmienności (odpowiada ona połowie odległości Manhattan);
  • odległości Wassersteina mierzącej minimalną liczbę przekształceń wymaganych do uzgodnienia obu rozkładów.


Następnie sprawdzimy rozkład wartości wszystkich kombinacji wrażliwych zmiennych. W ten sposób będziemy mogli ocenić, czy poszczególne kombinacje występują równie często, czy w zbiorze danych znajduje się podobna liczba białych, niezamężnych kobiet, co wdowców pochodzenia azjatyckiego:


from synapse.ml.exploratory import AggregateBalanceMeasure
aggregate_balance_measures = (
AggregateBalanceMeasure().setSensitiveCols(cols_of_interest).transform(df)
)
display(aggregate_balance_measures)
atkinson_index: "0.8971052622652707"
theil_l_index: "2.2740487770539923"
theil_t_index: "1.81264571665690


Indeks Atkinsona wyznacza się jako znormalizowany stosunek równo rozłożonych wartości zmiennej do jej średniej. Wartość 0,89 można zinterpretować jako konieczność odrzucenia 89% obserwacji, jeżeli chcielibyśmy uzyskać równy rozkład kombinacji wrażliwych zmiennych. Indeks T-Theila mierzy odległość (entropię) dzielącą zaobserwowane wartości od stanu idealnego (czyli takiego, w którym nie występują różnice). Indeks L-Theila jest średnią miarą odchylenia logarytmicznego.


Wiemy już, że rozkład zmiennej „race” jest daleki od jednorodnego oraz że kombinacje wartości wrażliwych zmiennych występują z różną częstością. Sprawdźmy teraz, czy i jaki ma to wpływ na zmienną wyjściową.
Transformacja FeatureBalanceMeasure pozwala sprawdzić, czy zmienna wyjściowa równie często przyjmuje wartość pozytywną dla wszystkich kombinacji wrażliwych zmiennych:


rom synapse.ml.exploratory import FeatureBalanceMeasure
feature_balance_measures = (
FeatureBalanceMeasure()
.setSensitiveCols(cols_of_interest)
.setLabelCol(label_col)
.setVerbose(True)
.transform(df)
)
# Sort by Statistical Parity descending for all features
display(feature_balance_measures.sort(F.abs("FeatureBalanceMeasure.dp").desc()))


Dla poszczególnych wartości zmiennych wrażliwych wyliczanych jest 12 metryk, m.in.:

 

  • statystyczny parytet, czyli procent obserwacji o danej wartości zmiennej wrażliwej, który równie często występuje z pozytywną wartością zmiennej wyjściowej;
  • punktowa informacja wzajemna (miara rozbieżności wyprowadzona z teorii informacji);
  • współczynnik podobieństwa Sørensena i indeks Jaccarda (miary podobieństwa);
  • używany do oceny korelacji zmiennych porządkowych współczynnik tau Kendalla.

 

[...]

 

Pracownik naukowy Wyższej Szkoły Bankowej w Poznaniu Wydział Zamiejscowy w Chorzowie, jest autorem książek poświęconych analizie danych i posiada tytuł Microsoft Most Valuable Professional.

Pełna treść artykułu jest dostępna w papierowym wydaniu pisma.

prenumerata Numer niedostępny Spis treści

.

Transmisje online zapewnia: StreamOnline

All rights reserved © 2019 Presscom / Miesięcznik \"IT Professional\"