
Ҳадафи пешгӯии пайванд пешгӯии эҳтимолияти оянда ё набудани пайвасти байни гиреҳҳо дар шабака мебошад. Он дар барномаҳои гуногун, аз қабили шабакаҳои иҷтимоӣ, системаҳои тавсиявӣ ва шабакаҳои биологӣ васеъ истифода мешавад. Мо ба пешгӯии истинод дар шабакаҳои иҷтимоӣ тамаркуз хоҳем кард ва барои ин мо ҳамон маҷмӯаи маълумотеро истифода мебарем, ки барои пешгӯии истинодҳои маҳаллӣ бо DGL дар пости қаблӣ истифода мешуд - Data network social network Twitch . Ин маҷмӯаи маълумот дорои графикест, ки гиреҳҳои он корбарони Twitch ва кунҷҳои дӯстии мутақобилан байни корбаронро ифода мекунанд. Мо онро барои пешгӯии истинодҳои нав ('пайравӣ') байни корбарон дар асоси истинодҳои мавҷуда ва хусусиятҳои корбар истифода хоҳем кард.
Тавре ки дар диаграмма нишон дода шудааст, пешгӯии пайванд қадамҳои зиёдеро дар бар мегирад, аз ҷумла воридот, содирот ва коркарди пешакии додаҳо, омӯзиши модел ва оптимизатсияи гиперпараметрҳои он ва дар ниҳоят насб ва пурсиш кардани нуқтаи ниҳоии хулоса, ки пешгӯиҳои воқеиро тавлид мекунад.
Дар ин мақола мо ба қадами аввали ин раванд тамаркуз хоҳем кард: омода кардани маълумот ва бор кардани он ба кластери Нептун.
Файлҳои ибтидоӣ дар маҷмӯи додаҳо чунинанд:
Қуллаҳо (аввалӣ):
id,days,mature,views,partner,new_id 73045350,1459,False,9528,False,2299 61573865,1629,True,3615,False,153 ...
Кунҷҳо (аввалӣ):
from,to 6194,255 6194,980 ...
Барои бор кардани он маълумот ба Нептун, аввал мо бояд маълумотро ба яке аз форматҳои дастгиришаванда табдил диҳем. Мо графики Gremlin-ро истифода мебарем, бинобар ин маълумот бояд дар файлҳои CSV бо қуллаҳо ва кунҷҳо бошад ва номҳои сутун дар файлҳои CSV бояд ба ин намуна пайравӣ кунанд.
Ин аст маълумоти табдилшуда чӣ гуна аст:
Қуллаҳо (табдил дода шудаанд):
~id,~label,days:Int(single),mature:Bool(single),partner:Bool(single),views:Int(single) 2299,"user",1459,false,false,9528 153,"user",1629,true,false,3615 ...
Кунҷҳо (табдил додашуда):
~from,~to,~label,~id 6194,255,"follows",0 255,6194,"follows",1 ...
Ва ин кодест, ки файлҳои бо маҷмӯи додаҳо додашударо ба формате, ки Neptune Loader дастгирӣ мекунад, табдил медиҳад:
import pandas as pd # === Vertices === # load vertices from the CSV file provided in the dataset vertices_df = pd.read_csv('./musae_ENGB_target.csv') # drop old ID column, we'll use the new IDs only vertices_df.drop('id', axis=1, inplace=True) # rename columns for Neptune Bulk Loader: # add ~ to the id column, # add data types and cardinality to vertex property columns vertices_df.rename( columns={ 'new_id': '~id', 'days': 'days:Int(single)', 'mature': 'mature:Bool(single)', 'views': 'views:Int(single)', 'partner': 'partner:Bool(single)', }, inplace=True, ) # add vertex label column vertices_df['~label'] = 'user' # save vertices to a file, ignore the index column vertices_df.to_csv('vertices.csv', index=False) # === Edges === # load edges from the CSV file provided in the dataset edges_df = pd.read_csv('./musae_ENGB_edges.csv') # add reverse edges (the original edges represent mutual follows) reverse_edges_df = edges_df[['to', 'from']] reverse_edges_df.rename(columns={'from': 'to', 'to': 'from'}, inplace=True) reverse_edges_df.head() edges_df = pd.concat([edges_df, reverse_edges_df], ignore_index=True) # rename columns according to Neptune Bulk Loader format: # add ~ to 'from' and 'to' column names edges_df.rename(columns={ 'from': '~from', 'to': '~to', }, inplace=True, ) edges_df.head() # add edge label column edges_df['~label'] = 'follows' # add edge IDs edges_df['~id'] = range(len(edges_df)) # save edges to a file, ignore the index column edges_df.to_csv('edges.csv', index=False)
Пас аз табдил додани файлҳо мо онҳоро ба S3 бор мекунем. Барои ин, аввал мо бояд сатил созем, ки файлҳои vertices.csv ва edges.csv-и моро дар бар гирад. Мо инчунин бояд нақши IAM эҷод кунем, ки дастрасӣ ба он сатили S3-ро (дар сиёсати замимашуда) фароҳам меорад ва сиёсати эътимод дорад, ки ба Нептун имкон медиҳад, ки онро қабул кунад (ба скриншот нигаред).
Мо нақшро ба кластери Нептуни худ илова мекунем (бо истифода аз консоли Нептун) ва он гоҳ интизор мешавем, ки он фаъол шавад (ё кластерро аз нав оғоз кунад).
Мо инчунин бояд трафики шабакаро аз Нептун ба S3 иҷозат диҳем ва барои ин ба мо нуқтаи ниҳоии Gateway VPC барои S3 дар VPC-и худ лозим аст:
Мо ҳоло омодаем, ки маълумоти худро оғоз кунем. Барои ин, мо бояд API-и кластерро аз дохили VPC ба даъват кунем ва 2 кори боркуниро эҷод кунем: яке барои vertices.csv ва дигаре барои edges.csv. Зангҳои API якхелаанд, танҳо калиди объекти S3 фарқ мекунад. Конфигуратсияи VPC ва гурӯҳҳои амниятӣ бояд трафикро аз мисоле, ки шумо curl
ба кластери Нептун иҷро мекунед, иҷозат диҳанд.
curl -XPOST \ -H 'Content-Type: application/json' \ https://your-neptune-endpoint:8182/loader -d ' { "source" : "s3://bucket-name/vertices.csv", "format" : "csv", "iamRoleArn" : "arn:aws:iam::account-id:role/role-name", "region" : "us-east-1", "failOnError" : "TRUE", "parallelism" : "HIGH", "updateSingleCardinalityProperties" : "FALSE" }'
API-и боркунак бо JSON ҷавоб медиҳад, ки дорои ID-и кор аст (' loadId '):
{ "status" : "200 OK", "payload" : { "loadId" : "your-load-id" } }
Шумо метавонед бо истифода аз ин API тафтиш кунед, ки оё боркунӣ анҷом шудааст:
curl -XGET https://your-neptune-endpoint:8182/loader/your-load-id
Он бо чунин посух медиҳад:
{ "status" : "200 OK", "payload" : { "feedCount" : [ { "LOAD_COMPLETED" : 1 } ], "overallStatus" : { "fullUri" : "s3://bucket-name/vertices.csv", "runNumber" : 1, "retryNumber" : 1, "status" : "LOAD_COMPLETED", "totalTimeSpent" : 8, "startTime" : 1, "totalRecords" : 35630, "totalDuplicates" : 0, "parsingErrors" : 0, "datatypeMismatchErrors" : 0, "insertErrors" : 0 } }
Вақте ки қуллаҳо аз vertices.csv бор карда мешаванд , мо метавонем кунҷҳоро бо истифода аз ҳамон API бор кунем . Барои ин, мо танҳо vertices.csv-ро бо edges.csv иваз мекунем ва фармони curl
ро дубора иҷро мекунем.
Вақте ки корҳои боркунӣ ба итмом мерасад, мо метавонем ба маълумоти боршуда тавассути фиристодани дархостҳои Gremlin ба кластери Нептун дастрасӣ пайдо кунем. Барои иҷро кардани ин дархостҳо, мо метавонем ё ба Нептун бо консоли Gremlin пайваст шавем ё ноутбуки Neptune / Sagemaker -ро истифода барем. Мо як дафтарчаи Sagemaker-ро истифода мебарем, ки онро якҷоя бо кластери Нептун сохтан мумкин аст ё дертар ҳангоми кор кардани кластер илова кардан мумкин аст.
Ин дархостест, ки шумораи қуллаҳоеро, ки мо сохтаем, мегирад:
%%gremlin gV().count()
Шумо инчунин метавонед вертексро аз рӯи ID ба даст оред ва тафтиш кунед, ки хосиятҳои он бо:
%%gremlin gV('some-vertex-id').elementMap()
Пас аз боркунии кунҷҳо, шумо метавонед тафтиш кунед, ки онҳо бо муваффақият бор карда шудаанд
%%gremlin gE().count()
ва
%%gremlin gE('0').elementMap()
Ин қисми боркунии маълумотро ба анҷом мерасонад. Дар мақолаи навбатӣ мо ба содироти маълумот аз Нептун дар формате, ки барои омӯзиши модели ML истифода мешавад, дида мебароем.