paint-brush
AI cartografiază conexiunile ascunse – și abia începede@andrei9735
Noua istorie

AI cartografiază conexiunile ascunse – și abia începe

de Andrei4m2025/02/14
Read on Terminal Reader

Prea lung; A citi

De la motoarele de recomandare la optimizarea rețelei, predicția link-urilor este un instrument versatil care aduce valoare.
featured image - AI cartografiază conexiunile ascunse – și abia începe
Andrei HackerNoon profile picture
0-item

În această a cincea și ultima postare a seriei noastre despre predicția legăturilor folosind Neptune ML, ne aprofundăm în procesul de inferență: configurarea unui punct final de inferență pentru a utiliza modelul nostru GNN antrenat pentru predicțiile de legătură. Pentru a stabili punctul final, vom folosi API-ul clusterului Neptune și artefactele model stocate în S3. Cu punctul final live, îl vom interoga pentru predicția legăturii, folosind o interogare Gremlin pentru a identifica potențialele conexiuni de mare încredere în graficul nostru.


Până acum, am încărcat deja datele rețelelor sociale Twitch în clusterul Neptune (așa cum este descris în partea 1 a acestei serii), am exportat datele folosind profilul ML (consultați partea 2 pentru detalii), am preprocesat datele (așa cum este explicat în partea 3), am antrenat modelul (a se vedea partea 4) și acum suntem gata să folosim modelul antrenat pentru a genera predicții.


Citiți partea 1 aici ; partea 2 aici ; partea 3 aici; și partea 4 aici .

CREAREA ENDPOINT-ULUI

Să creăm punctul final de inferență folosind API-ul clusterului și artefactele model pe care le avem în S3. Ca de obicei, avem nevoie mai întâi de un rol IAM care să aibă acces la S3 și SageMaker. Rolul trebuie să aibă, de asemenea, o politică de încredere care să ne permită să-l adăugăm la clusterul Neptune (politica de încredere poate fi găsită în partea 3 a acestui ghid). De asemenea, trebuie să oferim acces la SageMaker și CloudWatch API din interiorul VPC-ului, așa că avem nevoie de punctele finale VPC, așa cum este explicat în partea 1 a acestei serii.


Să folosim API-ul clusterului pentru a crea un punct final de inferență cu această comandă curl:

 curl -XPOST https://(YOUR_NEPTUNE_ENDPOINT):8182/ml/endpoints \ -H 'Content-Type: application/json' \ -d '{ "mlModelTrainingJobId": YOUR_MODEL_TRAINING_JOB_ID, "neptuneIamRoleArn": "arn:aws:iam::123456789012:role/NeptuneMLNeptuneRole" }'

Putem folosi parametrii „ instanceType ” și „ instanceCount ” pentru a alege tipul de instanță EC2 care va fi folosit pentru predicția legăturii și pentru a implementa mai mult de o instanță. Lista completă a parametrilor poate fi găsită aici . Vom folosi instanța implicită „ ml.m5(d).xlarge ” deoarece are suficient CPU și RAM pentru graficul nostru mic, iar acest tip de instanță a fost recomandat în infer_instance_recommendation.json care a fost generat după antrenamentul modelului în etapa noastră anterioară:

 { "disk_size": 12023356, "instance": "ml.m5d.xlarge", "mem_size": 13847612 }

API-ul răspunde cu ID-ul punctului final de inferență:

 {"id":"b217165b-7780-4e73-9d8a-5b6f7cfef9f6"}

Apoi putem verifica starea punctului final de inferență cu această comandă:

 curl https://YOUR_NEPTUNE_ENDPOINT:8182/ml/endpoints/INFERENCE_ENDPOINT_ID?neptuneIamRole='arn:aws:iam::123456789012:role/NeptuneMLNeptuneRole'

și odată ce răspunde cu „ statut: InService ” astfel,

 { "endpoint": { "name": "YOUR_INFERENCE_ENDPOINT_NAME-endpoint", "arn": "...", "status": "InService" }, "endpointConfig": {...}, "id": "YOUR_INFERENCE_ENDPOINT_ID", "status": "InService" }

înseamnă că suntem gata să începem să-l folosim cu interogări de bază de date.

Punctul final poate fi vizualizat și gestionat și din consola AWS, sub SageMaker -> Inference -> Endpoints.

ÎNTREBAREA ENDPOINT-ULUI

Să folosim punctul final pentru a prezice noi legături „urmăriți” în grafic. Pentru a face acest lucru, trebuie să alegem vârful sursă al posibilelor legături noi.

Este de ajutor dacă vârful sursă are deja legături, așa că vom folosi această interogare pentru a obține vârful cu cel mai mare număr de legături existente (conexiuni outE și inE):

 gV() .group() .by() .by(bothE().count()) .order(local) .by(values, Order.desc) .limit(local, 1) .next()

Rezultatul este

 {v[1773]: 1440}

ceea ce înseamnă că vârful cu ID = 1773 are 1440 conexiuni (720 inE și 720 outE).

Pentru a obține numărul de muchii care încep la nodul 1773 și numărul de muchii care se termină la acel nod, putem folosi aceste interogări:

 gV('1773').outE().count() gV('1773').inE().count()

Este de așteptat același număr de conexiuni inE și outE, deoarece setul de date inițial conține prietenii reciproce și am mărit datele cu margini inverse pentru a le face să funcționeze cu graficul direcționat Neptun.


Acum să obținem conexiunile prezise. Pentru a face asta, vom rula o interogare Gremlin cu predicate Neptune ML . Vom folosi punctul final de inferență și rolul SageMaker care a fost adăugat la clusterul DB pentru a obține utilizatorii pe care utilizatorul 1773 i-ar putea urma cu un prag de încredere (probabilitate minimă de existență a legăturii conform modelului) de cel puțin 0,1 (10%) , excluzând în același timp utilizatorii pe care utilizatorul 1773 îi urmărește deja:

 %%gremlin g.with('Neptune#ml.endpoint', 'YOUR_INFERENCE_ENDPOINT_NAME') .with('Neptune#ml.iamRoleArn', 'arn:aws:iam::123456789012:role/NeptuneMLSagemakerRole') .with('Neptune#ml.limit', 10000) .with('Neptune#ml.threshold', 0.1D) .V('1773') .out('follows') .with('Neptune#ml.prediction') .hasLabel('user') .not( __.in('follows').hasId('1773') )


Aceasta returnează 4 rezultate:

 "Result" "v[755]" "v[6086]" "v[6382]" "v[7005]"


Conform modelului nostru, există cel puțin 10% șanse ca utilizatorul 1773 să urmărească fiecare dintre acești 4 utilizatori. Poate că putem îmbunătăți modelul prin creșterea numărului de joburi de formare la cel puțin la 10, așa cum este recomandat de AWS, și apoi să comparăm performanța modelului rezultat și a legăturilor prezise. În aplicațiile reale, adăugarea profilului utilizatorului și a datelor de activitate la grafic îmbunătățește, de asemenea, precizia predicțiilor.


Conexiunile estimate în seturile de date de rețele sociale pot fi folosite pentru a oferi recomandări personalizate, cum ar fi sugestii de prieteni și de conținut, pentru a spori implicarea utilizatorilor și creșterea comunității, pentru a reduce rata de pierdere și pentru a oferi date suplimentare pentru publicitate direcționată.


Deși am aplicat predicția link-ului la un set de date de rețele sociale, este doar una dintre numeroasele aplicații posibile ale acestei tehnologii. De la motoarele de recomandare la optimizarea rețelei, predicția legăturilor este un instrument versatil care aduce valoare prin descoperirea relațiilor ascunse în cadrul datelor. Pe măsură ce aplicațiile bazate pe grafice continuă să se extindă, potențialul de predicție a legăturilor în toate industriile promite noi perspective, eficiență și experiențe îmbunătățite pentru utilizator.