Hopp til hovedinnhold

Datasett er hjertet i ethvert KI-prosjekt sies det. Likevel har det blitt oversett opp mot jaget på nyere og mer avanserte modeller og hyperparametertuning...

data-centric

I KI-verdenen har det tradisjonelt vært et fokus på modellene vi lager. Og ikke uten grunn. Det har blitt terpet inn i oss fra første time i vilkårlige KI-fag. Der vi bare får utdelt et datasett og blir bedt om å lage en løsning. Det speiler også akademia der det gjerne er benckmark datasett å forholde seg til. Det har jo på sin måte vært nyttig også. Bedre arkitekturer, flere parametere og smartere treningsstrategier har bidratt til å løfte ytelsen vi får ut av disse modellene betraktelig. Men er dette den beste måten å jobbe på i det virkelige liv? Og hva om vi allerede har nådd eller nærmer oss et punkt hvor det bare er marginale verdier å hente på modellsiden?

Dette er tankegangen bak datasentrisk KI. Her er hypotesen enkel: De fleste modeller i dag er allerede "gode nok", men kvaliteten på dataene de trenes på er ikke alltid like god. Ved å investere mer tid og ressurser i å forbedre datasettet kan vi oppnå bedre ytelse, mer robuste modeller og mer pålitelige prediksjoner.

Hvorfor burde du bry deg?

Gartner anslår at så mange som 85% av KI-prosjekter vil feile som direkte følge av, "bias in data, algorithms or the teams responsible for managing them." WSJ melder at det kan være så høyt som 90% for prosjekter med generativ KI. Gartner vektlegger mye av det på dårlig eller irrelevant data og flere kloke hoder som f.eks Andrew Ng skylder også på dårlig data som den største flaskehalsen for gjennomføring av vellykkede KI-prosjekter.

Du kan her fort begynne å tenke at store tech-selskaper har løst mange problemstillinger med stordata, og at problemet handler om datamengde. Og ja, mer data kan definitivt være positivt, men ikke alltid, og mer data betyr ikke nødvendigvis god data. Fra en brukerundersøkelse fra Deloitte på Big Data så er dataen ofte unøyaktig, og mer en to tredjedeler i undersøkelsen melder at mindre enn halvparten av data tredjepartsaktører har lagret om dem ikke stemmer. Med sånne tall vil ikke modeller bli "gode" uansett hvor mye data du forer dem med.

Her møter vi også en annen utfordring - i bransjer utenfor internett har vi ikke enorme databaser med millioner av brukere som en enkelt kan utnytte for datainnhenting. I stedet ser vi bransjer med tusenvis av mindre prosjekter, som spenner fra bedre etterspørselsprediksjon for en matkjede til kvalitetskontroll i produksjonsprosesser. Disse prosjektene kan være verdt titalls millioner hver, men de krever skreddersøm og har sjeldent store datasett å lene seg på. Det er også rett og slett ikke kostnadsnyttig eller bærekraftig å prøve og skrape sammen mer data for hvert av disse enkeltcasene. De har dog kanskje noe. Og noen små, men gode og målrettede datasett kan fortsatt gi veldig verdifulle KI-løsninger.

En ting til som er verdt å nevne er at gitt skaleringslovene for store språkmodeller, så vil vi bare se marginale forbedringer i nøyaktighet for eksponentielt økte krav i modellstørrelse, data og beregningskraft. Det gjør at det også der føles som stadig mer fornuftig å fokusere på å ha et mer bevisst forhold til dataen sin og hvordan den utnyttes best mulig. Dette gjelder seg også i mer komplekse systemer som bruker disse modellene, slik som Retrieval-Augmented Generation (RAG) og agentiske systemer.

Datasentrisk KI i praksis?

Så hva er egentlig løsningen? Og hva betyr det egentlig å jobbe datasentrisk? I all hovedsak er det snakk om en holdnings- og prosessendring. Der vi kanskje tidligere har fokusert på å teste hundrevis av forskjellige modeller med hundrevis forskjellige parametre sier vi nå at modellen vi har kanskje er god nok allerede. Til de fleste problemer finnes det ofte også en ferdig og løst "beste" arkitektur vi kan finne på nett. Vi kan så kjøre et kjapt hyperparametersøk og i all hovedsak si oss ferdig med modelleringsbiten. Så kommer den store endringen. Datasentrisk KI krever en systematisk tilnærming til datasettforbedring, hvor data behandles som en kontinuerlig utviklingsprosess. Dette innebærer:

  1. Datainnsamling: Identifisere og samle inn representative og varierte data fra relevante kilder. Involvere domeneeksperter i merking. Ha et så bevist forhold til hvordan dette skjer som mulig.
  2. Systematisk arbeid med data: Oppdage feil, støy. skjevheter, osv i dataene, og bruke teknikker for å korrigere eller ekskludere problematiske eksempler. Bør skje programatisk siden det er uforholdsmessig kostbart å gjøre med større dataset.
  3. Iterativ forbedring og domenespesifikk tilpasning: Teste og evaluere datasettets kvalitet basert på modellens ytelse og forbedre datasettet over tid. Samt skreddersy til spesifikke bruksområder og oppgaver.

Noen kan tenke seg at de gjør datavask og alt dette er del av arbeidsprosessen deres allerede, men i de aller fleste tilfeller er dette bare en engangsjobb folk gjør første gang. Der de stort sett fikser noen manglende verdier og kanskje noen skjevheter. Den store forskjellen her er nettopp et systematisk og helhetlig fokus på dataen for bedring i modellytelse, og den iterative prosessen som sikrer at datasettet stadig blir bedre over tid.

Hvordan dette løses i praksis finnes det mange løsninger og verktøy for. Et jeg har blitt veldig glad i er cleanlab. Det kan finne og måle det meste av datakvalitetsproblematikk som feil labels, outliers, data drift, m.m. Alt i en liten handy rapport som man kan velge å se på manuelt eller bruke til og automatisk rydde opp i datasettet. Går igjennom et kjapt eksempel under.

Henter inn et datasett og trener en enkel modell uten å gjøre noe videre med det (accuracy 0.98),

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.datasets import load_wine
from sklearn.metrics import accuracy_score

from cleanlab import Datalab

# Load a real-world dataset
dataset = load_wine()
X = dataset.data
y = dataset.target

# Split data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.3, random_state=42
)

# Train model on data
model = LogisticRegression(random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy on regular data: {accuracy:.2f}")//0.98

Sender så inn denne modellen videre til datalab for å finne feil i datasettet og retter opp outliers. Akkurat her blir dette en form for data leakage. Den riktige måten å gjøre dette på er å sende inn en modell som er trent på out-of-sample data og ikke samme data som vi skal bruke videre.

columns = dataset.feature_names
data = pd.DataFrame(X_train, columns=columns)
data['label'] = y_train

# Use Datalab to find issues
lab = Datalab(data=data, label_name="label")
lab.find_issues(features=data[columns], pred_probs=None)
issues = lab.get_issues()

# Filter based on 'is_outlier_issue' and a score threshold
outlier_issues = issues[issues['is_outlier_issue'] & (issues['outlier_score'] < 0.1)]  # Adjust threshold as needed

# Drop flagged samples
flagged_indices = outlier_issues.index
data_cleaned = data.drop(index=flagged_indices)
labels_cleaned = data_cleaned['label']
features_cleaned = data_cleaned.drop(columns=['label'])

print(f"Flagged {len(flagged_indices)} samples as label issues.")

Trener så en ny modell med den vaskede dataen (accuracy 1.00),

# Train model on cleaned data
model_cleaned = LogisticRegression(random_state=42)
model_cleaned.fit(features_cleaned, labels_cleaned)
y_pred_cleaned = model_cleaned.predict(X_test)

accuracy_cleaned = accuracy_score(y_test, y_pred_cleaned)
print(f"Accuracy on cleaned data: {accuracy_cleaned:.2f}")//1.00

Man kan også få en ganske fin rapport over alle problemer Datalab finner ved å kjøre en lab.report. For dette datasettet så den slik ut,

Datalab Report

For dette eksempelet var dataen tabulær, men det fine med datalab er at den støtter det samme for alle modaliteter, om det så er lyd-, bilde- eller tekstdata. Om noen lurer på hva de bruker og hvordan de finner fram til problematiske datapunkter så siterer de hvilken forskning de baserer seg på her.

Oppsummering

Datasentrisk KI markerer et spennende skifte i hvordan vi kan jobbe smartere med KI, og denne tilnærmingen har potensial til å levere mer robuste og pålitelige løsninger, selv når dataene er begrensede. Målet med denne bloggposten har ikke vært å gi en fullstendig gjennomgang av alle aspektene ved datasentrisk KI, men heller å pirre interessen og inspirere til videre utforskning.

Det finnes allerede en rekke gode ressurser og verktøy tilgjengelig på nett for de som ønsker å lære mer eller komme i gang med å anvende prinsippene i praksis. Alt fra guider for datarensing til automatiseringsverktøy og rammeverk for datasettforbedring kan hjelpe deg på veien.

Veien videre er opp til deg – men jeg håper denne posten har gitt deg en god start!

Liker du innlegget?

Del gjerne med kollegaer og venner