paint-brush
AI が隠れたつながりをマッピング — そしてそれは始まったばかり@andrei9735
新しい歴史

AI が隠れたつながりをマッピング — そしてそれは始まったばかり

Andrei4m2025/02/14
Read on Terminal Reader

長すぎる; 読むには

推奨エンジンからネットワーク最適化まで、リンク予測は価値をもたらす多目的ツールです。
featured image - AI が隠れたつながりをマッピング — そしてそれは始まったばかり
Andrei HackerNoon profile picture
0-item

Neptune ML を使用したリンク予測に関するシリーズの 5 回目で最後の投稿では、推論プロセスについて詳しく説明します。つまり、リンク予測にトレーニング済みの GNN モデルを使用するための推論エンドポイントを設定します。エンドポイントを確立するには、Neptune クラスターの API と S3 に保存されているモデル アーティファクトを使用します。エンドポイントがライブになったら、Gremlin クエリを使用してリンク予測をクエリし、グラフ内の信頼性の高い潜在的な接続を特定します。


ここまでで、Twitch ソーシャル ネットワーキング データを Neptune クラスターにロードし (このシリーズのパート 1 で説明)、ML プロファイルを使用してデータをエクスポートし (詳細についてはパート 2 を参照)、データを前処理し (パート 3 で説明)、モデルをトレーニングし (パート 4 を参照)、トレーニング済みのモデルを使用して予測を生成する準備が整いました。


パート 1 はこちら、パート 2 はこちらパート 3 はこちら、パート 4 はこちらでお読みください。

エンドポイントの作成

クラスターの API と S3 にあるモデル成果物を使用して推論エンドポイントを作成しましょう。通常どおり、まず S3 と SageMaker にアクセスできる IAM ロールが必要です。また、ロールには、Neptune クラスターに追加できる信頼ポリシーも必要です (信頼ポリシーについては、このガイドのパート 3 を参照してください)。また、VPC 内から SageMaker と CloudWatch API へのアクセスを提供する必要があるため、このシリーズのパート 1 で説明した VPC エンドポイントが必要です。


次の curl コマンドを使用して、クラスターの API で推論エンドポイントを作成しましょう。

 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 インスタンスタイプを選択し、複数のインスタンスをデプロイできます。パラメータの完全なリストは、 こちら で確認できます。小さなグラフには十分な CPU と RAM を備えており、前のステージでモデルトレーニング後に生成されたinfer_instance_recommendation.jsonでこのインスタンスタイプが推奨されているため、デフォルトの ' ml.m5(d).xlarge ' インスタンスを使用します。

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

API は推論エンドポイント ID で応答します。

 {"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」->「推論」->「エンドポイント」から表示および管理することもできます。

エンドポイントのクエリ

エンドポイントを使用して、グラフ内の新しい「フォロー」リンクを予測してみましょう。そのためには、可能性のある新しいリンクのソース頂点を選択する必要があります。

ソース頂点にすでにリンクがある場合は役立つので、このクエリを使用して、既存のリンク (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()

初期データセットには相互の友情が含まれており、Neptune 有向グラフで動作するように逆エッジでデータを拡張したため、inE と outE の接続数が同じになることが予想されます。


次に、予測される接続を取得しましょう。そのためには、 Neptune ML 述語を使用して Gremlin クエリを実行します。推論エンドポイントと、DB クラスターに追加された SageMaker ロールを使用して、ユーザー 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]"


私たちのモデルによると、ユーザー 1773 がこれら 4 人のユーザーそれぞれをフォローする可能性は少なくとも 10% あります。AWSの推奨に従ってトレーニング ジョブの数を少なくとも 10 に増やしてモデルを改善し、結果のモデルと予測されたリンクのパフォーマンスを比較できる可能性があります。実際のアプリケーションでは、ユーザー プロファイルとアクティビティ データをグラフに追加することでも予測の精度が向上します。


ソーシャル ネットワーキング データセットで予測される接続は、友人やコンテンツの提案などのパーソナライズされた推奨事項を提供したり、ユーザー エンゲージメントとコミュニティの成長を促進したり、離脱を減らしたり、ターゲットを絞った広告に追加データを提供したりするために使用できます。


リンク予測をソーシャル ネットワーキング データセットに適用しましたが、これはこのテクノロジの多くの応用例の 1 つにすぎません。推奨エンジンからネットワーク最適化まで、リンク予測はデータ内の隠れた関係性を明らかにすることで価値をもたらす多目的ツールです。グラフベースのアプリケーションが拡大し続けるにつれて、業界全体でリンク予測の可能性は新たな洞察、効率、およびユーザー エクスペリエンスの向上を約束します。