As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Consultas de classificação de nós do Gremlin no Neptune ML
Para consultas de classificação de nós do Gremlin no Neptune ML:
O modelo é treinado em uma propriedade dos vértices. O conjunto de valores exclusivos dessa propriedade é chamado de conjunto de classes de nós ou, simplesmente, classes.
A classe do nó ou o valor da propriedade categórica da propriedade de um vértice pode ser inferido do modelo de classificação de nós. Isso é útil quando essa propriedade ainda não está anexada ao vértice.
Para buscar uma ou mais classes de um modelo de classificação de nós, você precisa usar a etapa
with()
com o predicadoNeptune#ml.classification
para configurar a etapaproperties()
. O formato de saída é semelhante ao esperado se essas fossem propriedades de vértice.
nota
A classificação de nós só funciona com valores de propriedades de string. Isso significa que valores de propriedades numéricas, como 0
ou 1
, não são compatíveis, embora a string seja equivalente a "0"
e "1"
. Da mesma forma, os valores de propriedade booliana true
e false
não funcionam, mas "true"
e "false"
funcionam.
Veja a seguir um exemplo de consulta de classificação de nós:
g.with( "Neptune#ml.endpoint","node-classification-movie-lens-endpoint" ) .with( "Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role" ) .with( "Neptune#ml.limit", 2 ) .with( "Neptune#ml.threshold", 0.5D ) .V( "movie_1", "movie_2", "movie_3" ) .properties("genre").with("Neptune#ml.classification")
O resultado dessa consulta seria algo semelhante ao seguinte:
==>vp[genre->Action] ==>vp[genre->Crime] ==>vp[genre->Comedy]
Na consulta acima, as etapas V()
e properties()
são usadas da seguinte forma:
A etapa V()
contém o conjunto de vértices para os quais você deseja buscar as classes do modelo de classificação de nós:
.V( "movie_1", "movie_2", "movie_3" )
A etapa properties()
contém a chave na qual o modelo foi treinado e tem .with("Neptune#ml.classification")
para indicar que se trata de uma consulta de inferência de ML de classificação de nós.
Atualmente, não são aceitas várias chaves de propriedade em uma etapa properties().with("Neptune#ml.classification")
. Por exemplo, a seguinte consulta gera uma exceção:
g.with("Neptune#ml.endpoint", "node-classification-movie-lens-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .V( "movie_1", "movie_2", "movie_3" ) .properties("genre", "other_label").with("Neptune#ml.classification")
Para ver a mensagem de erro específica, consulte a lista de exceções do Neptune ML.
Uma etapa properties().with("Neptune#ml.classification")
pode ser usada em combinação com qualquer uma das seguintes etapas:
value()
value().is()
hasValue()
has(value,"")
key()
key().is()
hasKey()
has(key,"")
path()
Outras consultas de classificação de nós
Se o endpoint de inferência e a IAM função correspondente tiverem sido salvas em seu grupo de parâmetros do cluster de banco de dados, uma consulta de classificação de nós pode ser tão simples quanto esta:
g.V("movie_1", "movie_2", "movie_3").properties("genre").with("Neptune#ml.classification")
Você pode misturar propriedades e classes de vértices em uma consulta usando a etapa union()
:
g.with("Neptune#ml.endpoint","node-classification-movie-lens-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .V( "movie_1", "movie_2", "movie_3" ) .union( properties("genre").with("Neptune#ml.classification"), properties("genre") )
Também é possível fazer uma consulta ilimitada, como esta:
g.with("Neptune#ml.endpoint","node-classification-movie-lens-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .V() .properties("genre").with("Neptune#ml.classification")
Você pode recuperar as classes de nós junto com os vértices usando a etapa select()
junto com a etapa as()
:
g.with("Neptune#ml.endpoint","node-classification-movie-lens-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .V( "movie_1", "movie_2", "movie_3" ).as("vertex") .properties("genre").with("Neptune#ml.classification").as("properties") .select("vertex","properties")
Também é possível filtrar por classes de nós, conforme ilustrado nestes exemplos:
g.with("Neptune#ml.endpoint", "node-classification-movie-lens-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .V( "movie_1", "movie_2", "movie_3" ) .properties("genre").with("Neptune#ml.classification") .has(value, "Horror") g.with("Neptune#ml.endpoint","node-classification-movie-lens-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .V( "movie_1", "movie_2", "movie_3" ) .properties("genre").with("Neptune#ml.classification") .has(value, P.eq("Action")) g.with("Neptune#ml.endpoint","node-classification-movie-lens-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .V( "movie_1", "movie_2", "movie_3" ) .properties("genre").with("Neptune#ml.classification") .has(value, P.within("Action", "Horror"))
Você pode obter uma pontuação de confiança na classificação de nós usando o predicado Neptune#ml.score
:
g.with("Neptune#ml.endpoint","node-classification-movie-lens-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .V( "movie_1", "movie_2", "movie_3" ) .properties("genre", "Neptune#ml.score").with("Neptune#ml.classification")
A resposta seria semelhante a esta:
==>vp[genre->Action] ==>vp[Neptune#ml.score->0.01234567] ==>vp[genre->Crime] ==>vp[Neptune#ml.score->0.543210] ==>vp[genre->Comedy] ==>vp[Neptune#ml.score->0.10101]
Usar inferência indutiva em uma consulta de classificação de nós
Suponha que você adicione um novo nó a um grafo existente, em um caderno Jupyter, da seguinte forma:
%%gremlin g.addV('label1').property(id,'101').as('newV') .V('1').as('oldV1') .V('2').as('oldV2') .addE('eLabel1').from('newV').to('oldV1') .addE('eLabel2').from('oldV2').to('newV')
Depois, você poderia usar uma consulta de inferência indutiva para obter um gênero e uma pontuação de confiança que refletissem o novo nó:
%%gremlin g.with("Neptune#ml.endpoint", "nc-ep") .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole") .V('101').properties("genre", "Neptune#ml.score") .with("Neptune#ml.classification") .with("Neptune#ml.inductiveInference")
No entanto, se você executou a consulta várias vezes, poderá obter resultados um pouco diferentes:
# First time ==>vp[genre->Action] ==>vp[Neptune#ml.score->0.12345678] # Second time ==>vp[genre->Action] ==>vp[Neptune#ml.score->0.21365921]
Você pode tornar a mesma consulta determinística:
%%gremlin g.with("Neptune#ml.endpoint", "nc-ep") .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole") .V('101').properties("genre", "Neptune#ml.score") .with("Neptune#ml.classification") .with("Neptune#ml.inductiveInference") .with("Neptune#ml.deterministic")
Nesse caso, os resultados seriam praticamente os mesmos todas as vezes:
# First time ==>vp[genre->Action] ==>vp[Neptune#ml.score->0.12345678] # Second time ==>vp[genre->Action] ==>vp[Neptune#ml.score->0.12345678]