paint-brush
Før AI forudsiger dit sociale liv, skal den rense sine dataved@andrei9735
188 aflæsninger Ny historie

Før AI forudsiger dit sociale liv, skal den rense sine data

ved Andrei12m2025/02/12
Read on Terminal Reader

For langt; At læse

I dette indlæg fortsætter vi med at arbejde på linkforudsigelse med Twitch-datasættet.
featured image - Før AI forudsiger dit sociale liv, skal den rense sine data
Andrei HackerNoon profile picture
0-item

I dette indlæg fortsætter vi med at arbejde på linkforudsigelse med Twitch-datasættet.


Vi har allerede grafdataene eksporteret fra Neptune ved hjælp af neptune- eksportværktøjet og 'neptune_ml'-profilen. De foregående trin er beskrevet i del 2 og 1 i denne vejledning.


Læs del 1 her og del 2 her.


Dataene er i øjeblikket gemt i S3 og ser således ud:


Vertices CSV (nodes/user.consolidated.csv):

 ~id,~label,days,mature,views,partner "6980","user",771,true,2935,false "547","user",2602,true,18099,false "2173","user",1973,false,3939,false ...

Edges CSV (edges/user-follows-user.consolidated.csv):

 ~id,~label,~from,~to,~fromLabels,~toLabels "3","follows","6194","2507","user","user" "19","follows","3","3739","user","user" "35","follows","6","2126","user","user" ...

Eksportværktøjet genererede også denne konfigurationsfil til os:

training-data-configuration.json:

 { "version" : "v2.0", "query_engine" : "gremlin", "graph" : { "nodes" : [ { "file_name" : "nodes/user.consolidated.csv", "separator" : ",", "node" : [ "~id", "user" ], "features" : [ { "feature" : [ "days", "days", "numerical" ], "norm" : "min-max", "imputer" : "median" }, { "feature" : [ "mature", "mature", "auto" ] }, { "feature" : [ "views", "views", "numerical" ], "norm" : "min-max", "imputer" : "median" }, { "feature" : [ "partner", "partner", "auto" ] } ] } ], "edges" : [ { "file_name" : "edges/%28user%29-follows-%28user%29.consolidated.csv", "separator" : ",", "source" : [ "~from", "user" ], "relation" : [ "", "follows" ], "dest" : [ "~to", "user" ], "features" : [ ] } ] }, "warnings" : [ ] }

Vores nuværende mål er at udføre databehandling, hvilket betyder at konvertere de data, vi har, til et format, som Deep Graph Library-rammeværket kan bruge til modeltræning. (For en oversigt over linkforudsigelse med kun DGL, se dette indlæg ). Det inkluderer normalisering af numeriske funktioner, kodning af kategoriske funktioner, oprettelse af lister over nodepar med eksisterende og ikke-eksisterende links for at muliggøre overvåget læring til vores linkforudsigelsesopgave og opdeling af data i trænings-, validerings- og testsæt.


Som du kan se i filen training-data-configuration.json , blev nodefunktionerne 'days' (kontoalder) og 'views' genkendt som numeriske, og min-max normalisering blev foreslået. Min-max normalisering skalerer vilkårlige værdier til et område på [0; 1] sådan her: x_normalized = (x - x_min) / (x_max - x_min). Og imputer = median betyder, at de manglende værdier vil blive udfyldt med medianværdien.


Nodefunktioner 'moden' og 'partner' er mærket som 'auto', og da disse kolonner kun indeholder booleske værdier, forventer vi, at de vil blive genkendt som kategoriske funktioner og kodet under databehandlingsfasen. Tog-validering-test-opdelingen er ikke inkluderet i denne automatisk genererede fil, og standardopdelingen for linkforudsigelsesopgaven er 0.9, 0.05, 0.05.


Du kan justere normaliserings- og kodningsindstillingerne, og du kan vælge en brugerdefineret tog-validering-test split. Hvis du vælger at gøre det, skal du blot erstatte den originale training-data-configuration.json-fil i S3 med den opdaterede version. Den fulde liste over understøttede felter i den JSON er tilgængelig her . I dette indlæg lader vi denne fil være uændret.

IAM ROLLER NØDVENDIG TIL DATABEHANDLING

Ligesom i dataindlæsningsstadiet (som er beskrevet i del 1 af denne tutorial), skal vi oprette IAM-roller, der giver adgang til de tjenester, vi skal bruge, og vi skal også tilføje disse roller til vores Neptune-klynge. Vi har brug for to roller til databehandlingsfasen. Den første er en Neptune-rolle, der giver Neptune adgang til SageMaker og S3. Den anden er en SageMaker-udførelsesrolle, der bruges af SageMaker, mens den kører databehandlingsopgaven og giver adgang til S3.


Disse roller skal have tillidspolitikker, der gør det muligt for Neptune og SageMaker-tjenesterne at påtage sig dem:

 { "Version": "2012-10-17", "Statement": [ { "Sid": "", "Effect": "Allow", "Principal": { "Service": "sagemaker.amazonaws.com" }, "Action": "sts:AssumeRole" }, { "Sid": "", "Effect": "Allow", "Principal": { "Service": "rds.amazonaws.com" }, "Action": "sts:AssumeRole" } ] }

Efter at have oprettet rollerne og opdateret deres tillidspolitikker, føjer vi dem til Neptune-klyngen (Neptune -> Databaser -> YOUR_NEPTUNE_CLUSTER_ID -> Forbindelse og sikkerhed -> IAM-roller -> Tilføj rolle).

DATABEHANDLING MED NEPTUNE ML HTTP API

Nu hvor vi har opdateret filen training-data-configuration.json og tilføjet IAM-rollerne til Neptune-klyngen, er vi klar til at starte databehandlingsjobbet. For at gøre det skal vi sende en anmodning til Neptune-klyngens HTTP API inde fra den VPC, hvor klyngen er placeret. Vi bruger en EC2-instans til at gøre det.

Vi bruger curl til at starte databehandlingsjobbet:

 curl -XPOST https://(YOUR_NEPTUNE_ENDPOINT):8182/ml/dataprocessing \ -H 'Content-Type: application/json' \ -d '{ "inputDataS3Location" : "s3://SOURCE_BUCKET/neptune-export/...", "processedDataS3Location" : "s3://OUTPUT_BUCKET/neptune-export-processed/...", "neptuneIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLDataProcessingNeptuneRole", "sagemakerIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLDataProcessingSagemakerRole" }'

Bare disse 4 parametre er nødvendige: inputdata S3-placering, behandlede data S3-placering, Neptun-rolle, Sagemaker-rolle. Der er mange valgfrie parametre: for eksempel kan vi manuelt vælge den EC2-instanstype, der vil blive oprettet til vores databehandlingsopgave med processingInstanceType og indstille dens lagervolumenstørrelse med processingInstanceVolumeSizeInGB . Den fulde liste over parametre kan findes her .

Klyngen svarer med en JSON, der indeholder ID'et for det databehandlingsjob, som vi lige har oprettet:

 {"id":"d584f5bc-d90e-4957-be01-523e07a7562e"}

Vi kan bruge det til at få status for jobbet med denne kommando (brug den samme neptuneIamRoleArn som i den forrige anmodning):

 curl https://YOUR_NEPTUNE_CLUSTER_ENDPOINT:8182/ml/dataprocessing/YOUR_JOB_ID?neptuneIamRoleArn='arn:aws:iam::123456789012:role/NeptuneMLDataProcessingNeptuneRole'

Når den først reagerer med noget som dette,

 { "processingJob": {...}, "id":"d584f5bc-d90e-4957-be01-523e07a7562e", "status":"Completed" }

vi kan kontrollere outputtet. Disse filer blev oprettet i destinations S3-bøtten:


graph.*-filerne indeholder de behandlede grafdata.

Features.json-filen indeholder listerne over node- og kantfunktioner:

 { "nodeProperties": { "user": [ "days", "mature", "views", "partner" ] }, "edgeProperties": {} }

Detaljerne om, hvordan dataene blev behandlet, og hvordan funktionerne blev kodet, kan findes i filen updated_training_config.json :

 { "graph": { "nodes": [ { "file_name": "nodes/user.consolidated.csv", "separator": ",", "node": [ "~id", "user" ], "features": [ { "feature": [ "days", "days", "numerical" ], "norm": "min-max", "imputer": "median" }, { "feature": [ "mature", "mature", "category" ] }, { "feature": [ "views", "views", "numerical" ], "norm": "min-max", "imputer": "median" }, { "feature": [ "partner", "partner", "category" ] } ] } ], "edges": [ { "file_name": "edges/%28user%29-follows-%28user%29.consolidated.csv", "separator": ",", "source": [ "~from", "user" ], "relation": [ "", "follows" ], "dest": [ "~to", "user" ] } ] } }

Vi kan se, at kolonnerne 'moden' og 'partner' med booleske værdier, oprindeligt mærket som 'auto' i filen training-data-configuration.json, blev kodet som kategorifunktioner.


Filen 'train_instance_recommendation.json' indeholder SageMaker-instanstypen og lagerstørrelsen, der anbefales til modeltræning:

 { "instance": "ml.g4dn.2xlarge", "cpu_instance": "ml.m5.2xlarge", "disk_size": 14126462, "mem_size": 4349122131.111111 }

Filen model-hpo-configuration.json indeholder modellens type, de målinger, der bruges til dens evaluering, hyppigheden af evalueringen og hyperparametrene.


Dette afslutter databehandlingsfasen af processen, da vi nu er klar til at begynde at træne ML-modellen. Det vil blive diskuteret i næste del af denne vejledning.