Consultas de clasificación de bordes de Gremlin en Neptune ML - Amazon Neptune

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Consultas de clasificación de bordes de Gremlin en Neptune ML

Para la clasificación de bordes de Gremlin en Neptune ML:

  • El modelo se entrena en una propiedad de los bordes. El conjunto de valores únicos de esta propiedad se denomina conjunto de clases.

  • El valor de clase o propiedad categórica de un borde se puede inferir del modelo de clasificación de bordes, lo que resulta útil cuando esta propiedad aún no está asociada al borde.

  • Para obtener una o varias clases de un modelo de clasificación de bordes, debe usar el paso with() con el predicado "Neptune#ml.classification" para configurar el paso properties(). El formato de salida es similar al que cabría esperar si se trataran de propiedades de bordes.

nota

La clasificación de bordes solo funciona con valores de propiedades de cadena. Esto significa que no se admiten valores de propiedades numéricas como 0 o 1, aunque sí se admiten los equivalentes de cadena "0" y "1". Del mismo modo, los valores de la propiedad Boolean true y false no funcionan, pero sí lo hacen "true" y "false".

A continuación, se muestra un ejemplo de una consulta de clasificación de bordes que solicita una puntuación de confianza mediante el predicado Neptune#ml.score:

g.with("Neptune#ml.endpoint","edge-classification-movie-lens-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .E("relationship_1","relationship_2","relationship_3") .properties("knows_by", "Neptune#ml.score").with("Neptune#ml.classification")

La respuesta sería similar a:

==>p[knows_by->"Family"]
==>p[Neptune#ml.score->0.01234567]
==>p[knows_by->"Friends"]
==>p[Neptune#ml.score->0.543210]
==>p[knows_by->"Colleagues"]
==>p[Neptune#ml.score->0.10101]

Sintaxis de una consulta de clasificación de bordes de Gremlin

En el caso de un gráfico sencillo en el que User es el nodo principal y final y Relationship es el borde que los conecta: un ejemplo de consulta de clasificación de bordes es:

g.with("Neptune#ml.endpoint","edge-classification-social-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .E("relationship_1","relationship_2","relationship_3") .properties("knows_by").with("Neptune#ml.classification")

La salida de esta consulta sería similar a la siguiente:

==>p[knows_by->"Family"]
==>p[knows_by->"Friends"]
==>p[knows_by->"Colleagues"]

En la consulta anterior, los pasos E() y properties() se utilizan de la siguiente manera:

  • El paso E() incluye el conjunto de bordes para el que desea obtener las clases del modelo de clasificación de bordes:

    .E("relationship_1","relationship_2","relationship_3")
  • El paso properties() incluye la clave en la que se entrenó el modelo, así como el valor .with("Neptune#ml.classification") para indicar que se trata de una consulta de inferencia de ML de clasificación de bordes.

Por el momento, no se admiten varias claves de propiedad en un paso properties().with("Neptune#ml.classification"). Por ejemplo, la siguiente consulta da lugar a una excepción:

g.with("Neptune#ml.endpoint","edge-classification-social-endpoint") .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role") .E("relationship_1","relationship_2","relationship_3") .properties("knows_by", "other_label").with("Neptune#ml.classification")

Para ver mensajes de error específicos, consulte Lista de excepciones para las consultas de inferencia de Gremlin en Neptune ML.

Se puede usar un paso properties().with("Neptune#ml.classification") en combinación con cualquiera de los pasos siguientes:

  • value()

  • value().is()

  • hasValue()

  • has(value,"")

  • key()

  • key().is()

  • hasKey()

  • has(key,"")

  • path()

Uso de la inferencia inductiva en una consulta de clasificación de bordes

Supongamos que tuviera que añadir un nuevo borde a un gráfico existente, en un cuaderno de Jupyter, de la siguiente manera:

%%gremlin g.V('1').as('fromV') .V('2').as('toV') .addE('eLabel1').from('fromV').to('toV').property(id, 'e101')

A continuación, podría usar una consulta de inferencia inductiva para obtener una escala que tuviera en cuenta el nuevo borde:

%%gremlin g.with("Neptune#ml.endpoint", "ec-ep") .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole") .E('e101').properties("scale", "Neptune#ml.score") .with("Neptune#ml.classification") .with("Neptune#ml.inductiveInference")

Dado que la consulta no es determinista, los resultados variarían algo si se ejecutara varias veces, en función de la vecindad aleatoria:

# First time ==>vp[scale->Like] ==>vp[Neptune#ml.score->0.12345678] # Second time ==>vp[scale->Like] ==>vp[Neptune#ml.score->0.21365921]

Si necesitara resultados más coherentes, podría hacer que la consulta fuera determinista:

%%gremlin g.with("Neptune#ml.endpoint", "ec-ep") .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole") .E('e101').properties("scale", "Neptune#ml.score") .with("Neptune#ml.classification") .with("Neptune#ml.inductiveInference") .with("Neptune#ml.deterministic")

Ahora los resultados serán más o menos los mismos cada vez que ejecute la consulta:

# First time ==>vp[scale->Like] ==>vp[Neptune#ml.score->0.12345678] # Second time ==>vp[scale->Like] ==>vp[Neptune#ml.score->0.12345678]