در این پنجمین و آخرین پست از مجموعه ما در مورد پیشبینی پیوند با استفاده از Neptune ML، ما در حال غواصی در فرآیند استنتاج هستیم: تنظیم یک نقطه پایانی استنتاج برای استفاده از مدل GNN آموزشدیده ما برای پیشبینی پیوند. برای ایجاد نقطه پایانی، از API خوشه نپتون و مصنوعات مدل ذخیره شده در S3 استفاده خواهیم کرد. با استفاده از نقطه پایانی زنده، آن را برای پیشبینی پیوند، با استفاده از پرسوجوی Gremlin برای شناسایی اتصالات بالقوه با اطمینان بالا در نمودار خود، پرس و جو میکنیم.
تاکنون، دادههای شبکه اجتماعی Twitch را در خوشه نپتون بارگذاری کردهایم (همانطور که در قسمت 1 این مجموعه توضیح داده شد)، دادهها را با استفاده از نمایه ML صادر کردهایم (برای جزئیات، قسمت 2 را بررسی کنید)، دادهها را از قبل پردازش کردهایم (همانطور که در قسمت 3 توضیح داده شد)، مدل را آموزش دادهایم (بخش 4 را ببینید)، و اکنون آماده استفاده از مدل آموزشدیده برای پیشبینی هستیم.
قسمت 1 را اینجا بخوانید؛ قسمت 2 اینجا ; قسمت 3 اینجا؛ و قسمت 4 اینجا .
بیایید نقطه پایانی استنتاج را با استفاده از API خوشه و آرتیفکت های مدلی که در S3 داریم ایجاد کنیم. طبق معمول، ما به یک نقش IAM نیاز داریم که ابتدا به S3 و SageMaker دسترسی داشته باشد. نقش همچنین باید دارای یک خط مشی اعتماد باشد که به ما امکان می دهد آن را به خوشه نپتون اضافه کنیم (خط مشی اعتماد را می توان در قسمت 3 این راهنما یافت). ما همچنین باید دسترسی به SageMaker و CloudWatch API را از داخل VPC فراهم کنیم، بنابراین به نقاط پایانی VPC همانطور که در قسمت 1 این سری توضیح داده شده است نیاز داریم.
بیایید از API خوشه برای ایجاد یک نقطه پایانی استنتاج با این دستور 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" }'
میتوانیم از پارامترهای « instanceType » و « instanceCount » برای انتخاب نوع نمونه EC2 که برای پیشبینی پیوند استفاده میشود، استفاده کنیم و بیش از یک نمونه را مستقر کنیم. لیست کامل پارامترها را می توانید در اینجا بیابید. ما از نمونه پیشفرض ' ml.m5(d).xlarge ' استفاده میکنیم، زیرا دارای CPU و RAM کافی برای نمودار کوچک ما است، و این نوع نمونه در infer_instance_recommendation.json توصیه شده بود که پس از آموزش مدل در مرحله قبلی ما ایجاد شد:
{ "disk_size": 12023356, "instance": "ml.m5d.xlarge", "mem_size": 13847612 }
API با شناسه نقطه پایانی استنتاج پاسخ می دهد:
{"id":"b217165b-7780-4e73-9d8a-5b6f7cfef9f6"}
سپس می توانیم وضعیت نقطه پایانی استنتاج را با این دستور بررسی کنیم:
curl https://YOUR_NEPTUNE_ENDPOINT:8182/ml/endpoints/INFERENCE_ENDPOINT_ID?neptuneIamRole='arn:aws:iam::123456789012:role/NeptuneMLNeptuneRole'
و هنگامی که با " وضعیت: InService " به این شکل پاسخ داد،
{ "endpoint": { "name": "YOUR_INFERENCE_ENDPOINT_NAME-endpoint", "arn": "...", "status": "InService" }, "endpointConfig": {...}, "id": "YOUR_INFERENCE_ENDPOINT_ID", "status": "InService" }
این بدان معناست که ما آماده هستیم تا از آن با پرس و جوهای پایگاه داده استفاده کنیم.
نقطه پایانی را میتوان از طریق کنسول AWS در زیر SageMaker -> Inference -> Endpoints مشاهده و مدیریت کرد.
بیایید از نقطه پایانی برای پیش بینی پیوندهای جدید «دنبال کردن» در نمودار استفاده کنیم. برای انجام این کار، باید راس منبع پیوندهای جدید احتمالی را انتخاب کنیم.
اگر راس منبع قبلاً پیوندهایی داشته باشد کمک می کند، بنابراین از این پرس و جو برای به دست آوردن راس با بیشترین تعداد پیوندهای موجود (اتصالات outE و inE) استفاده می کنیم:
gV() .group() .by() .by(bothE().count()) .order(local) .by(values, Order.desc) .limit(local, 1) .next()
نتیجه این است
{v[1773]: 1440}
به این معنی که راس با ID = 1773 دارای 1440 اتصال (720 inE و 720 outE) است.
برای بدست آوردن تعداد یال هایی که از گره 1773 شروع می شوند و تعداد یال هایی که به آن گره ختم می شوند، می توانیم از این کوئری ها استفاده کنیم:
gV('1773').outE().count() gV('1773').inE().count()
انتظار میرود تعداد اتصالات inE و outE یکسان باشد زیرا مجموعه داده اولیه حاوی دوستیهای متقابل است و ما دادهها را با لبههای معکوس افزایش دادیم تا با نمودار هدایتشده نپتون کار کند.
حالا بیایید اتصالات پیش بینی شده را دریافت کنیم. برای انجام این کار، پرس و جوی Gremlin را با گزاره های Neptune ML اجرا می کنیم. ما از نقطه پایانی استنتاج و نقش SageMaker که به خوشه DB اضافه شده است استفاده خواهیم کرد تا کاربرانی را که کاربر 1773 ممکن است از آنها پیروی کند با آستانه اطمینان (حداقل احتمال وجود پیوند طبق مدل) حداقل 0.1 (10٪) بدست آوریم ، در حالی که کاربرانی را که کاربر 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') )
که 4 نتیجه برمی گرداند:
"Result" "v[755]" "v[6086]" "v[6382]" "v[7005]"
طبق مدل ما، حداقل 10 درصد احتمال دارد که کاربر 1773 هر یک از این 4 کاربر را دنبال کند. شاید بتوانیم با افزایش تعداد مشاغل آموزشی به حداقل به 10 مورد توصیه شده توسط AWS، مدل را بهبود بخشیم و سپس عملکرد مدل حاصل و پیوندهای پیش بینی شده را مقایسه کنیم. در برنامه های واقعی، افزودن مشخصات کاربر و داده های فعالیت به نمودار نیز دقت پیش بینی را بهبود می بخشد.
ارتباطات پیشبینیشده در مجموعههای داده شبکههای اجتماعی را میتوان برای ارائه توصیههای شخصیسازی شده مانند پیشنهادات دوست و محتوا، افزایش تعامل کاربر و رشد جامعه، کاهش ریزش و ارائه دادههای اضافی برای تبلیغات هدفمند استفاده کرد.
اگرچه ما پیشبینی پیوند را برای مجموعه داده شبکههای اجتماعی اعمال کردیم، اما این تنها یکی از بسیاری از کاربردهای احتمالی این فناوری است. از موتورهای توصیه گرفته تا بهینه سازی شبکه، پیش بینی لینک یک ابزار همه کاره است که با کشف روابط پنهان در داده ها ارزش به ارمغان می آورد. همانطور که برنامه های مبتنی بر نمودار همچنان در حال گسترش هستند، پتانسیل پیش بینی پیوند در صنایع نوید بینش، کارایی و تجارب پیشرفته کاربر را می دهد.