

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Requêtes d'inférence SPARQL dans Neptune ML
<a name="machine-learning-sparql-inference-queries"></a>

Neptune ML mappe le graphe RDF dans un graphe de propriétés pour modéliser la tâche ML. Actuellement, il prend en charge les cas d'utilisation suivants :
+ **Classification d'objet** : prédit la fonctionnalité catégorielle d'un objet.
+ **Régression d'objet** : prédit une propriété numérique d'un objet.
+ **Prédiction d'objet** : prédit un objet en fonction d'un sujet et d'une relation.
+ **Prédiction de sujet** : prédit un sujet en fonction d'un objet et d'une relation.

**Note**  
Neptune ML ne prend pas en charge les cas d'utilisation de régression et de classification de sujet avec SPARQL.

# Prédicats Neptune ML utilisés dans les requêtes d'inférence SPARQL
<a name="machine-learning-sparql-inference-query-predicates"></a>

Les prédicats suivants sont utilisés avec l'inférence SPARQL :

## Prédicat `neptune-ml:timeout`
<a name="machine-learning-sparql-inference-predicates-timeout"></a>

Spécifie le délai d'expiration de la connexion avec le serveur distant. À ne pas confondre avec le délai d'expiration de la demande de requête, qui est le temps maximal que le serveur peut mettre pour satisfaire une demande.

Notez que si le délai d'expiration de requête survient avant le délai d'expiration du service spécifié par le prédicat `neptune-ml:timeout`, la connexion au service est également annulée.

## Prédicat `neptune-ml:outputClass`
<a name="machine-learning-sparql-inference-predicates-outputClass"></a>

Le prédicat `neptune-ml:outputClass` est uniquement utilisé pour définir la classe de l'objet prédit pour la prédiction d'objet ou du sujet prédit pour la prédiction de sujet.

## Prédicat `neptune-ml:outputScore`
<a name="machine-learning-sparql-inference-predicates-outputScore"></a>

Le prédicat `neptune-ml:outputScore` est un nombre positif qui représente la probabilité que la sortie d'un modèle de machine learning soit correcte.

## Prédicat `neptune-ml:modelType`
<a name="machine-learning-sparql-inference-predicates-modelType"></a>

Le prédicat `neptune-ml:modelType` indique le type de modèle de machine learning en cours d'entraînement :
+ `OBJECT_CLASSIFICATION`
+ `OBJECT_REGRESSION`
+ `OBJECT_PREDICTION`
+ `SUBJECT_PREDICTION`

## Prédicat `neptune-ml:input`
<a name="machine-learning-sparql-inference-predicates-input"></a>

Le `neptune-ml:input` prédicat fait référence à la liste des entrées URIs utilisées pour Neptune ML.

## Prédicat `neptune-ml:output`
<a name="machine-learning-sparql-inference-predicates-output"></a>

Le prédicat `neptune-ml:output` fait référence à la liste des ensembles de liaisons où Neptune ML renvoie les résultats.

## Prédicat `neptune-ml:predicate`
<a name="machine-learning-sparql-inference-predicates-predicate"></a>

Le prédicat `neptune-ml:predicate` est utilisé différemment en fonction de la tâche exécutée :
+ Pour une **prédiction d'objet ou de sujet** : définit le type de prédicat (type d'arête ou de relation).
+ Pour une **classification et régression d'objet** : définit le littéral (propriété) que nous voulons prédire.

## Prédicat `neptune-ml:batchSize`
<a name="machine-learning-sparql-inference-predicates-batchSize"></a>

`neptune-ml:batchSize` spécifie la taille d'entrée pour l'appel de service à distance.

# Exemples de classification d'objet SPARQL
<a name="machine-learning-sparql-inference-object-classification"></a>

Pour une classification d'objet SPARQL dans Neptune ML, le modèle est entraîné sur l'une des valeurs de prédicat. Ceci est utile lorsque ce prédicat n'est pas déjà présent avec un sujet donné.

Seules les valeurs de prédicat catégorielles peuvent être déduites à l'aide du modèle de classification d'objet.

La requête suivante cherche à prédire la valeur de prédicat <http://www.example.org/team> pour toutes les entrées de type `foaf:Person` :

```
SELECT * WHERE { ?input a foaf:Person .
  SERVICE neptune-ml:inference {
    neptune-ml:config neptune-ml:modelType 'OBJECT_CLASSIFICATION' ;
                      neptune-ml:input ?input ;
                      neptune-ml:predicate <http://www.example.org/team> ;
                      neptune-ml:output ?output .
  }
}
```

Cette requête peut être personnalisée comme suit :

```
SELECT * WHERE { ?input a foaf:Person .
  SERVICE neptune-ml:inference {
    neptune-ml:config neptune-ml:endpoint 'node-prediction-account-balance-endpoint' ;
                      neptune-ml:iamRoleArn 'arn:aws:iam::0123456789:role/sagemaker-role' ;

                      neptune-ml:batchSize "40"^^xsd:integer ;
                      neptune-ml:timeout "1000"^^xsd:integer ;

                      neptune-ml:modelType 'OBJECT_CLASSIFICATION' ;
                      neptune-ml:input ?input ;
                      neptune-ml:predicate <http://www.example.org/team> ;
                      neptune-ml:output ?output .
  }
}
```

# Exemples de régression d'objet SPARQL
<a name="machine-learning-sparql-inference-object-regression"></a>

La régression d'objet est similaire à la classification d'objet, si ce n'est qu'une valeur de prédicat numérique est déduite du modèle de régression pour chaque nœud. Vous pouvez utiliser les mêmes requêtes SPARQL pour la régression d'objet que pour la classification d'objet, à l'exception du fait que les prédicats `the Neptune#ml.limit` et `Neptune#ml.threshold` ne sont pas applicables.

La requête suivante cherche à prédire la valeur de prédicat <http://www.example.org/accountbalance> pour toutes les entrées de type `foaf:Person` :

```
SELECT * WHERE { ?input a foaf:Person .
  SERVICE neptune-ml:inference {
    neptune-ml:config neptune-ml:modelType 'OBJECT_REGRESSION' ;
                      neptune-ml:input ?input ;
                      neptune-ml:predicate <http://www.example.org/accountbalance> ;
                      neptune-ml:output ?output .
  }
}
```

Cette requête peut être personnalisée comme suit :

```
SELECT * WHERE { ?input a foaf:Person .
  SERVICE neptune-ml:inference {
    neptune-ml:config neptune-ml:endpoint 'node-prediction-account-balance-endpoint' ;
                      neptune-ml:iamRoleArn 'arn:aws:iam::0123456789:role/sagemaker-role' ;

                      neptune-ml:batchSize "40"^^xsd:integer ;
                      neptune-ml:timeout "1000"^^xsd:integer ;

                      neptune-ml:modelType 'OBJECT_REGRESSION' ;
                      neptune-ml:input ?input ;
                      neptune-ml:predicate <http://www.example.org/accountbalance> ;
                      neptune-ml:output ?output .
  }
}
```

# Exemple de prédiction d'objet SPARQL
<a name="machine-learning-sparql-inference-object-prediction"></a>

La *prédiction d'objet* prédit la valeur de l'objet pour un sujet et un prédicat donnés.

La requête de prédiction d'objet suivante cherche à prédire quel film l'entrée de type `foaf:Person` aimerait :

```
?x a foaf:Person .
?x   <http://www.example.org/likes> ?m .
?m a <http://www.example.org/movie> .

## Query
SELECT * WHERE { ?input a foaf:Person .
  SERVICE neptune-ml:inference {
    neptune-ml:config neptune-ml:modelType 'OBJECT_PREDICTION' ;
                      neptune-ml:input ?input ;
                      neptune-ml:predicate <http://www.example.org/likes> ;
                      neptune-ml:output ?output ;
                      neptune-ml:outputClass <http://www.example.org/movie> .
  }
}
```

La requête elle-même peut être personnalisée comme suit :

```
SELECT * WHERE { ?input a foaf:Person .
  SERVICE neptune-ml:inference {
    neptune-ml:config neptune-ml:endpoint 'node-prediction-user-movie-prediction-endpoint' ;
                      neptune-ml:iamRoleArn 'arn:aws:iam::0123456789:role/sagemaker-role' ;

                      neptune-ml:limit "5"^^xsd:integer ;
                      neptune-ml:batchSize "40"^^xsd:integer ;
                      neptune-ml:threshold "0.1"^^xsd:double ;
                      neptune-ml:timeout "1000"^^xsd:integer ;
                      neptune-ml:outputScore ?score ;

                      neptune-ml:modelType 'OBJECT_PREDICTION' ;
                      neptune-ml:input ?input ;
                      neptune-ml:predicate <http://www.example.org/likes> ;
                      neptune-ml:output ?output ;
                      neptune-ml:outputClass <http://www.example.org/movie> .
  }
}
```

# Exemple de prédiction de sujet SPARQL
<a name="machine-learning-sparql-inference-subject-prediction"></a>

La *prédiction de sujet* prédit le sujet pour un prédicat et un objet donnés.

Par exemple, la requête suivante prédit qui (de type `foaf:User`) regardera un film donné :

```
SELECT * WHERE { ?input (a foaf:Movie) .
    SERVICE neptune-ml:inference {
        neptune-ml:config neptune-ml:modelType 'SUBJECT_PREDICTION' ;
                          neptune-ml:input ?input ;
                          neptune-ml:predicate <http://aws.amazon.com/neptune/csv2rdf/object_Property/rated> ;
                          neptune-ml:output ?output ;
                          neptune-ml:outputClass <http://aws.amazon.com/neptune/csv2rdf/class/User> ;        }
}
```

# Liste des exceptions pour les requêtes d'inférence SPARQL de Neptune ML
<a name="machine-learning-sparql-exceptions"></a>

****
+ **`BadRequestException`**   –   *Message* : `The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference expects at least 1 value for the parameter (parameter name), found zero.`
+ **`BadRequestException`**   –   *Message* : `The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference expects at most 1 value for the parameter (parameter name), found (a number) values.`
+ **`BadRequestException`**   –   *Message* : `Invalid predicate (predicate name) provided for external service http://aws.amazon.com/neptune/vocab/v01/services/ml#inference query.`
+ **`BadRequestException`**   –   *Message* : `The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference expects the predicate (predicate name) to be defined`.
+ **`BadRequestException`**   –   *Message* : `The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference expects the value of (parameter) (parameter name) to be a variable, found: (type)"`
+ **`BadRequestException`**   –   *Message* : `The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference expects the input (parameter name) to be a constant, found: (type)`.
+ **`BadRequestException`**   –   *Message* : `The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference is expected to return only 1 value`.
+ **`BadRequestException`**   –   *Message* : `"The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference only allows StatementPatternNodes`.
+ **`BadRequestException`**   –   *Message* : `The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference does not allow the predicate (predicate name)`.
+ **`BadRequestException`**   –   *Message* : `The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference predicates cannot be variables, found: (type)`.
+ **`BadRequestException`**   –   *Message* : `The SERVICE http://aws.amazon.com/neptune/vocab/v01/services/ml#inference predicates are expected to be part of the namespace (namespace name), found: (namespace name)`.