

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Neptune ML の Gremlin エッジ分類クエリ
<a name="machine-learning-gremlin-edge-classification-queries"></a>

Neptune MLにおける Gremlin エッジ分類について
+ モデルは、エッジの 1 つのプロパティで学習されます。このプロパティの一意の値のセットは、クラスのセットと呼ばれます。
+ エッジのクラスまたはカテゴリプロパティ値は、エッジ分類モデルから推測できます。これは、このプロパティがエッジにまだ添付されていない場合に便利です。
+ エッジ分類モデルから 1 つ以上のクラスを取得するには、`with()` ステップで述語 `"Neptune#ml.classification"` を使い `properties()` ステップを設定する必要があります。出力形式は、それらがエッジプロパティである場合に予想されるものと似ています。

**注記**  
エッジ分類は、文字列プロパティ値でのみ機能します。つまり、`0` や `1` などの数値プロパティ値はサポートされませんが、該当する文字列 `"0"` および `"1"` はサポートされます。同様に、ブールのプロパティ値 `true` および `false` は機能しませんが、`"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 エッジ分類クエリの構文
<a name="machine-learning-gremlin-edge-classification-syntax"></a>

`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()` ステップには、モデルがトレーニングされたキーが含まれており、これがエッジ分類 ML 推論クエリであることを示す `.with("Neptune#ml.classification")` があります。

現在、複数のプロパティキーは、`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 推論クエリの例外のリスト](machine-learning-gremlin-exceptions.md) を参照してください。

`properties().with("Neptune#ml.classification")` ステップは、以下のいずれかのステップと組み合わせて使用できます。
+ `value()`
+ `value().is()`
+ `hasValue()`
+ `has(value,"")`
+ `key()`
+ `key().is()`
+ `hasKey()`
+ `has(key,"")`
+ `path()`

## エッジ分類クエリでの帰納的推論の使用
<a name="machine-learning-gremlin-edge-class-inductive"></a>

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