

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 previsão de links do Gremlin usando modelos de previsão de links no Neptune ML
<a name="machine-learning-gremlin-link-prediction-queries"></a>

Os modelos de previsão de links podem resolver problemas, como os seguintes:
+ **Previsão do nó principal**: considerando um tipo de vértice e borda, a quais vértices esse vértice provavelmente se vinculará?
+ **Previsão do nó final**: considerando um rótulo de vértice e borda, a quais vértices esse vértice provavelmente se vinculará?

**nota**  
A previsão de borda ainda não é aceita no Neptune ML.

Para os exemplos abaixo, considere um grafo simples com os vértices `User` e `Movie` que estão vinculados pela borda `Rated`.

Aqui está um exemplo de consulta de previsão do nó principal, usada para prever os cinco principais usuários com maior probabilidade de avaliar os filmes, `"movie_1"`, `"movie_2"` e `"movie_3"`.

```
g.with("Neptune#ml.endpoint","node-prediction-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .with("Neptune#ml.limit", 5)
 .V("movie_1", "movie_2", "movie_3")
 .in("rated").with("Neptune#ml.prediction").hasLabel("user")
```

Aqui está uma similar para previsão de nó final, usada para prever os cinco principais filmes que o usuário `"user_1"` provavelmente avaliará:

```
g.with("Neptune#ml.endpoint","node-prediction-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .V("user_1")
 .out("rated").with("Neptune#ml.prediction").hasLabel("movie")
```

Tanto o rótulo da borda quanto o rótulo do vértice previsto são obrigatórios. Se um deles for omitido, uma exceção será lançada. Por exemplo, a seguinte consulta sem um rótulo de vértice previsto gera uma exceção:

```
g.with("Neptune#ml.endpoint","node-prediction-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .V("user_1")
 .out("rated").with("Neptune#ml.prediction")
```

Da mesma forma, a seguinte consulta sem um rótulo de borda gera uma exceção:

```
g.with("Neptune#ml.endpoint","node-prediction-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .V("user_1")
 .out().with("Neptune#ml.prediction").hasLabel("movie")
```

Para ver a mensagem de erro específica, consulte a [lista de exceções do Neptune ML](machine-learning-gremlin-exceptions.md).

## Outras consultas de previsão de links
<a name="machine-learning-gremlin-other-link-prediction-queries"></a>

Você pode usar a etapa `select()` com a etapa `as(`) para gerar os vértices previstos junto com os vértices de entrada:

```
g.with("Neptune#ml.endpoint","node-prediction-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .V("movie_1").as("source")
 .in("rated").with("Neptune#ml.prediction").hasLabel("user").as("target")
 .select("source","target")

g.with("Neptune#ml.endpoint","node-prediction-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .V("user_1").as("source")
 .out("rated").with("Neptune#ml.prediction").hasLabel("movie").as("target")
 .select("source","target")
```

É possível fazer consultas ilimitadas, como estas:

```
g.with("Neptune#ml.endpoint","node-prediction-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .V("user_1")
 .out("rated").with("Neptune#ml.prediction").hasLabel("movie")

g.with("Neptune#ml.endpoint","node-prediction-movie-lens-endpoint")
 .with("Neptune#ml.iamRoleArn","arn:aws:iam::0123456789:role/sagemaker-role")
 .V("movie_1")
 .in("rated").with("Neptune#ml.prediction").hasLabel("user")
```

## Usar inferência indutiva em uma consulta de previsão de links
<a name="machine-learning-gremlin-link-predict-inductive"></a>

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('newV1')
 .addV('label2').property(id,'102').as('newV2')
 .V('1').as('oldV1')
 .V('2').as('oldV2')
 .addE('eLabel1').from('newV1').to('oldV1')
 .addE('eLabel2').from('oldV2').to('newV2')
```

Você pode então usar uma consulta de inferência indutiva para prever o nó principal, levando em consideração o novo nó:

```
%%gremlin
g.with("Neptune#ml.endpoint", "lp-ep")
 .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole")
 .V('101').out("eLabel1")
 .with("Neptune#ml.prediction")
 .with("Neptune#ml.inductiveInference")
 .hasLabel("label2")
```

Resultado:

```
==>V[2]
```

Da mesma forma, você pode usar uma consulta de inferência indutiva para prever o nó final, levando em consideração o novo nó:

```
%%gremlin
g.with("Neptune#ml.endpoint", "lp-ep")
 .with("Neptune#ml.iamRoleArn", "arn:aws:iam::123456789012:role/NeptuneMLRole")
 .V('102').in("eLabel2")
 .with("Neptune#ml.prediction")
 .with("Neptune#ml.inductiveInference")
 .hasLabel("label1")
```

Resultado:

```
==>V[1]
```