Sa ikalimang at huling post na ito ng aming serye sa hula sa link gamit ang Neptune ML, sumisid kami sa proseso ng hinuha: pagse-set up ng endpoint ng hinuha upang magamit ang aming sinanay na modelo ng GNN para sa mga hula sa link. Upang maitatag ang endpoint, gagamitin namin ang API ng Neptune cluster at ang mga artifact ng modelo na nakaimbak sa S3. Sa live na endpoint, itatanong namin ito para sa hula ng link, gamit ang isang query sa Gremlin upang matukoy ang mga potensyal na koneksyon na may mataas na kumpiyansa sa aming graph.
Sa ngayon, na-load na namin ang data ng Twitch social networking sa cluster ng Neptune (tulad ng inilalarawan sa Part 1 ng seryeng ito), na-export ang data gamit ang ML profile (tingnan ang Part 2 para sa mga detalye), na-preprocess na ang data (tulad ng ipinaliwanag sa Part 3), sinanay ang modelo (tingnan ang Part 4), at ngayon handa na kaming gamitin ang sinanay na modelo para makabuo ng mga hula.
Basahin ang part 1 dito ; part 2 dito ; bahagi 3 dito; at part 4 dito .
Gawin natin ang inference endpoint gamit ang API ng cluster at ang mga artifact ng modelo na mayroon tayo sa S3. Gaya ng dati, kailangan namin ng IAM role na may access muna sa S3 at SageMaker. Ang tungkulin ay dapat ding magkaroon ng isang patakaran sa pagtitiwala na nagpapahintulot sa amin na idagdag ito sa kumpol ng Neptune (ang patakaran sa pagtitiwala ay matatagpuan sa Bahagi 3 ng gabay na ito). Kailangan din naming magbigay ng access sa SageMaker at CloudWatch API mula sa loob ng VPC, kaya kailangan namin ang mga endpoint ng VPC gaya ng ipinaliwanag sa Part 1 ng seryeng ito.
Gamitin natin ang API ng cluster para gumawa ng inference endpoint gamit ang curl command na ito:
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" }'
Magagamit namin ang mga parameter na ' instanceType ' at ' instanceCount ' para piliin ang uri ng instance ng EC2 na gagamitin para sa paghula ng link, at mag-deploy ng higit sa isang instance. Ang buong listahan ng mga parameter ay matatagpuan dito . Gagamitin namin ang default na ' ml.m5(d).xlarge ' na instance dahil mayroon itong sapat na CPU at RAM para sa aming maliit na graph, at ang ganitong uri ng instance ay inirerekomenda sa infer_instance_recommendation.json na nabuo pagkatapos ng pagsasanay ng modelo sa aming nakaraang yugto:
{ "disk_size": 12023356, "instance": "ml.m5d.xlarge", "mem_size": 13847612 }
Tumutugon ang API gamit ang inference endpoint ID:
{"id":"b217165b-7780-4e73-9d8a-5b6f7cfef9f6"}
Pagkatapos ay maaari nating suriin ang katayuan ng inference endpoint gamit ang command na ito:
curl https://YOUR_NEPTUNE_ENDPOINT:8182/ml/endpoints/INFERENCE_ENDPOINT_ID?neptuneIamRole='arn:aws:iam::123456789012:role/NeptuneMLNeptuneRole'
at sa sandaling tumugon ito ng ' status: InService ' tulad nito,
{ "endpoint": { "name": "YOUR_INFERENCE_ENDPOINT_NAME-endpoint", "arn": "...", "status": "InService" }, "endpointConfig": {...}, "id": "YOUR_INFERENCE_ENDPOINT_ID", "status": "InService" }
nangangahulugan ito na handa na kaming simulan ang paggamit nito sa mga query sa database.
Ang endpoint ay maaari ding tingnan at pamahalaan mula sa AWS console, sa ilalim ng SageMaker -> Inference -> Endpoints.
Gamitin natin ang endpoint para hulaan ang mga bagong link na 'follow' sa graph. Para magawa iyon, kailangan nating piliin ang source vertex ng mga posibleng bagong link.
Nakakatulong kung mayroon nang mga link ang source vertex, kaya gagamitin namin ang query na ito para makuha ang vertex na may pinakamataas na bilang ng mga umiiral nang link (outE at inE na koneksyon):
gV() .group() .by() .by(bothE().count()) .order(local) .by(values, Order.desc) .limit(local, 1) .next()
Ang resulta ay
{v[1773]: 1440}
na nangangahulugan na ang vertex na may ID = 1773 ay may 1440 na koneksyon (720 inE at 720 outE).
Upang makuha ang bilang ng mga gilid na nagsisimula sa node 1773 at ang bilang ng mga gilid na nagtatapos sa node na iyon maaari naming gamitin ang mga query na ito:
gV('1773').outE().count() gV('1773').inE().count()
Inaasahan ang parehong bilang ng mga koneksyon sa inE at outE dahil ang paunang dataset ay naglalaman ng magkaparehong pagkakaibigan, at dinagdagan namin ang data gamit ang mga reverse edge para gumana ito sa graph na nakadirekta sa Neptune.
Ngayon kunin natin ang mga hinulaang koneksyon. Upang gawin iyon, magpapatakbo kami ng isang query sa Gremlin na may mga predicate ng Neptune ML . Gagamitin namin ang inference endpoint at ang SageMaker role na idinagdag sa DB cluster para makuha ang mga user na maaaring sundin ng user 1773 nang may confidence threshold (minimum na posibilidad na magkaroon ng link ayon sa modelo) na hindi bababa sa 0.1 (10%) , habang hindi kasama ang mga user na sinusunod na ng user 1773:
%%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') )
Nagbabalik iyon ng 4 na resulta:
"Result" "v[755]" "v[6086]" "v[6382]" "v[7005]"
Ayon sa aming modelo, mayroong hindi bababa sa 10% na pagkakataon na ang user 1773 ay susundan ang bawat isa sa 4 na user na ito. Marahil ay maaari nating pagbutihin ang modelo sa pamamagitan ng pagtaas ng bilang ng mga trabaho sa pagsasanay sa hindi bababa sa 10 gaya ng inirerekomenda ng AWS, at pagkatapos ay ihambing ang pagganap ng resultang modelo at ang mga hinulaang link. Sa mga totoong application, ang pagdaragdag ng profile ng user at data ng aktibidad sa graph ay nagpapabuti din sa katumpakan ng hula.
Maaaring gamitin ang mga hinulaang koneksyon sa mga dataset ng social networking upang magbigay ng mga personalized na rekomendasyon tulad ng mga mungkahi sa kaibigan at content, pagpapahusay sa pakikipag-ugnayan ng user at paglago ng komunidad, pagbabawas ng churn, at pagbibigay ng karagdagang data para sa naka-target na advertising.
Bagama't inilapat namin ang hula ng link sa isang dataset ng social networking, isa lamang ito sa maraming posibleng aplikasyon ng teknolohiyang ito. Mula sa mga engine ng rekomendasyon hanggang sa pag-optimize ng network, ang hula ng link ay isang maraming nalalaman na tool na nagdudulot ng halaga sa pamamagitan ng pagtuklas ng mga nakatagong relasyon sa loob ng data. Habang patuloy na lumalawak ang mga application na nakabatay sa graph, ang potensyal ng hula ng link sa mga industriya ay nangangako ng mga bagong insight, kahusayan, at pinahusay na karanasan ng user.