Neptune ML 中的 Gremlin 邊緣分類查詢 - Amazon Neptune

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Neptune ML 中的 Gremlin 邊緣分類查詢

對於 Neptune ML 中的 Gremlin 邊緣分類:

  • 模型根據邊緣的一個屬性進行訓練。這個屬性的唯一值集被稱為類別集。

  • 邊緣的類別屬性值可從邊緣分類模型推斷出來,這在此屬性尚未附加至邊緣時很有用。

  • 為了從邊緣分類模型中擷取一個或多個類別,您需要使用 with() 步驟搭配述詞 "Neptune#ml.classification" 來設定 properties() 步驟。如果輸出格式是邊緣邊緣屬性,則輸出格式與您所期望的格式相似。

注意

邊緣分類僅會使用字串屬性值。這表示不支援數值屬性值 (例如 01),儘管字串等同於 "0""1"。同樣地,布林屬性值 truefalse 不起作用,但 "true""false" 可以。

以下是邊緣分類查詢的範例,其會使用 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")

回應看起來像這樣:

==>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]

Gremlin 邊緣分類查詢的語法

對於簡單圖形,其中 User 是前端和尾端節點,且 Relationship 是連線它們的邊緣,範例邊緣分類查詢如下:

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")

此查詢的輸出如下所示:

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

在上述查詢中,E()properties() 步驟的使用方式如下:

  • E() 步驟包含您要從邊緣分類模型中擷取其類別的邊緣集:

    .E("relationship_1","relationship_2","relationship_3")
  • properties() 步驟包含模型訓練時根據的索引鍵,而且具有 .with("Neptune#ml.classification") 指示這是邊緣分類 ML 推論查詢。

properties().with("Neptune#ml.classification") 步驟中目前不支援多個內容索引鍵。例如,下列查詢會導致擲出例外狀況:

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")

如需特定錯誤訊息,請參閱 Neptune ML Gremlin 推論查詢的例外狀況清單

properties().with("Neptune#ml.classification") 步驟可與下列任一步驟搭配使用:

  • value()

  • value().is()

  • hasValue()

  • has(value,"")

  • key()

  • key().is()

  • hasKey()

  • has(key,"")

  • path()

在邊緣分類查詢中使用歸納推論

假設您要在 Jupyter 筆記本中將新邊緣新增至現有圖形,如下所示:

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

然後,您可以使用歸納推論查詢,來取得考慮到新邊緣的範圍:

%%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")

因為查詢不具確定性,所以如果根據隨機鄰域多次執行該查詢,結果將會有些不同:

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

如果需要更一致的結果,您可以使查詢具有確定性:

%%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")

現在,每次執行查詢時,結果都會或多或少相同:

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