

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

# Neptune からエクスポートされたグラフデータをトレーニング用に処理する
<a name="machine-learning-on-graphs-processing"></a>

データ処理ステップでは、エクスポートプロセスによって Neptune グラフデータが取得され、トレーニング中に[ディープグラフライブラリ (DGL)](https://www.dgl.ai/) が使用する情報が作成されます。これには、さまざまなデータマッピングと変換の実行が含まれます。
+ ノードとエッジを解析して、DGL で必要とされるグラフおよび ID マッピングファイルを構築する。
+ ノードとエッジプロパティを DGL で必要なノードおよびエッジ特徴に変換する。
+ データをトレーニング、検証、およびテストセットに分割します。

## Neptune ML のデータ処理ステップを管理する
<a name="machine-learning-on-graphs-processing-managing"></a>

モデルトレーニングに使用するデータを Neptune からエクスポートした後、`curl` (または `awscurl`) コマンドを使用してデータ処理ジョブを開始できます。

```
curl \
  -X POST https://(your Neptune endpoint)/ml/dataprocessing \
  -H 'Content-Type: application/json' \
  -d '{
        "inputDataS3Location" : "s3://(Amazon S3 bucket name)/(path to your input folder)",
        "id" : "(a job ID for the new job)",
        "processedDataS3Location" : "s3://(S3 bucket name)/(path to your output folder)",
        "configFileName" : "training-job-configuration.json"
      }'
```

このコマンドの使用方法の詳細については、[データ処理コマンド](machine-learning-api-dataprocessing.md) を参照してください。また、実行中のジョブのステータスの取得方法、実行中のジョブの停止方法、実行中のすべてのジョブの一覧表示方法について説明した情報もご覧ください。

## Neptune ML の更新されたグラフデータの処理
<a name="machine-learning-on-graphs-processing-updated"></a>

また、`previousDataProcessingJobId` をAPI に追加して、新しいデータ処理ジョブが前のジョブと同じ処理方法を使用するようにします。これは、新しいデータで古いモデルを再学習するか、新しいデータのモデルアーティファクトを再計算することによって、Neptune で更新されたグラフデータの予測を取得する場合に必要です。

これを行うには、次のような `curl` (または `awscurl`) コマンドを使います。

```
curl \
  -X POST https://(your Neptune endpoint)/ml/dataprocessing \
  -H 'Content-Type: application/json' \
  -d '{ "inputDataS3Location" : "s3://(Amazon S3 bucket name)/(path to your input folder)",
        "id" : "(a job ID for the new job)",
        "processedDataS3Location" : "s3://(Amazon S3 bucket name)/(path to your output folder)",
        "previousDataProcessingJobId", "(the job ID of the previous data-processing job)"}'
```

トレーニング済みモデルに対応する前のデータ処理ジョブのジョブ ID に `previousDataProcessingJobId` パラメータの値を設定します。

**注記**  
更新されたグラフでのノードの削除は、現在サポートされていません。更新されたグラフでノードが削除されている場合は、`previousDataProcessingJobId` を使用するのではなく、まったく新しいデータ処理ジョブを開始する必要があります。

# Neptune ML での特徴エンコーディング
<a name="machine-learning-feature-encoding"></a>

プロパティ値と RDF リテラルには、さまざまな形式とデータ型があります。機械学習で優れたパフォーマンスを実現するには、これらの値を*特徴*として知られる数値エンコーディングに変換することが不可欠です。

Neptune ML は、ここで説明されているように、データのエクスポートおよびデータ処理手順の一部として、特徴抽出とエンコーディングを実行します。

**注記**  
カスタムモデルの実装で独自の特徴エンコーディングを実装する場合は、データの前処理段階で `none` を特徴エンコーディングタイプとして選択することで自動特徴エンコーディングを無効にすることができます。その後、そのノードまたはエッジプロパティで特徴エンコーディングは発生せず、代わりに生プロパティ値が解析され、ディクショナリに保存されます。データの前処理では、エクスポートされたデータセットから DGL グラフが作成されますが、構築された DGL グラフにはトレーニング用の前処理特徴がありません。  
カスタムモデルトレーニングの一部として独自のカスタム特徴エンコーディングを実行する予定の場合のみこの選択肢を使用します。詳細については、「[Neptune ML のカスタムモデル](machine-learning-custom-models.md)」を参照してください。

## Neptune MLのカテゴリ別特徴
<a name="machine-learning-categorical-features"></a>

可能な値の固定リストから 1 つ以上の異なる値を取得できるプロパティは、カテゴリ別特徴です。Neptune ML では、カテゴリ別特徴は [one-hot エンコーディング](https://en.wikipedia.org/wiki/One-hot)を使用して符号化されます。次の例は、さまざまな食品のプロパティ名がそのカテゴリに従って one-hot 符号化される方法を示しています。

```
    Food        Veg.   Meat   Fruit    Encoding
   ---------    ----   ----   -----    --------
    Apple         0      0      1         001
    Chicken       0      1      0         010
    Broccoli      1      0      0         100
```

**注記**  
カテゴリ別特徴の最大数は 100 です。プロパティの値のカテゴリが 100 を超える場合、最も一般的なカテゴリの 99 のみが個別のカテゴリに配置され、残りは `OTHER` という名前の特別なカテゴリに配置されます。

## Neptune MLのカテゴリ別特徴
<a name="machine-learning-numerical-features"></a>

値が実数であるプロパティは、Neptune ML で数値特徴として符号化できます。数値特徴は、浮動小数点数を使用して符号化されます。

次のように、数値特徴を符号化するときに使用するデータ正規化方法を指定できます。`"norm": "normalization technique"`。次の正規化手法がサポートされています。
+ **"none"** — エンコーディング中に数値を正規化しないでください。
+ **"min-max"** — 最小値を減算し、最大値と最小値の差で除算して、各値を正規化します。
+ **"standard"** — すべての値の合計で割って、各値を正規化します。

## Neptune MLの Bucket-numerical 特徴
<a name="machine-learning-bucket_numerical-features"></a>

生の数値を使用して数値プロパティを表すのではなく、数値をカテゴリに集約できます。たとえば、人の年齢を、子供 (0 ～20 歳)、若年大人 (20 ～ 40 歳)、中年 (40 ～ 60 歳)、および高齢者 (60歳以上) などのカテゴリに分類できます。これらの数値バケットを使用すると、数値プロパティを一種のカテゴリ特徴に変換することになります。

Neptune ML では、数値プロパティをバケット数値特徴として符号化できます。次の 2 つを指定する必要があります。
+ 数値範囲、` "range": [a, b] ` 形式では、`a` および `b` は整数です。
+ バケットカウント、` "bucket_cnt": c ` 形式では、`c` はバケットの数であり、整数でもあります。

次に、Neptune ML は各バケットのサイズを ` ( b - a ) / c ` と計算し、各数値を格納するバケットの数として符号化します。`a` 未満の値は最初のバケットに属していると見なされ、`b` より大きい任意の値は最後のバケットに属していると見なされます。

オプションで、次のようにスライドウィンドウサイズを ` "slide_window_size": s ` のように (`s` は数字) 指定することで、数値を複数のバケットに分類することもできます。Neptune ML はプロパティの各数値 `v` を` v - s/2 ` から ` v + s/2 ` 範囲内へ変換し、範囲がカバーするすべてのバケットに値 `v` を代入します。

最後に、オプションで、数値特徴と bucket-numerical 特徴の欠損値を埋める方法を提供することもできます。これは、` "imputer": "imputation technique "` を使用して行います。ここで、帰属技法は`"mean"`、`"median"` または `"most-frequent"` のうちの 1 つです。中央値を指定しなかった場合、値が欠落していると、処理が停止する可能性があります。

## Neptune ML でのテキストフィーチャエンコーディング
<a name="machine-learning-text-features"></a>

自由形式のテキストの場合、Neptune ML はいくつかの異なるモデルを使用して、プロパティ値文字列内のトークンのシーケンスを固定サイズの実数値ベクトルに変換できます。
+ [`text_fasttext`](#machine-learning-fasttext-features) — [fastText](https://fasttext.cc/) エンコーディングを使用します。これは、fastText がサポートする 5 つの言語のうちの 1 つだけを使用するフィーチャに推奨されるエンコーディングです。
+ [`text_sbert`](#machine-learning-sbert-features) — [Sentence BERT](https://www.sbert.net/docs/pretrained_models.html#sentence-embedding-models) (SBERT) エンコーディングモデルを使用します。これは、`text_fasttext` がサポートしていないテキストについて推奨されるエンコーディングです。
+ [`text_word2vec`](#machine-learning-word2vec-features) — [Google](https://code.google.com/archive/p/word2vec/) が最初に公開した [Word2Vec](https://wikipedia.org/wiki/Word2vec) アルゴリズムを使用して、テキストをエンコードします。Word2Vec は英語のみをサポートしています。
+ [`text_tfidf`](#machine-learning-tfidf-features) — [term frequency–inverse document frequency](https://wikipedia.org/wiki/Tf-idf) (TF-IDF) ベクタライザを使用して、テキストのエンコードを行います。TF-IDF エンコーディングは、他のエンコーディングにはない統計機能をサポートします。

### Neptune ML でのテキストプロパティ値の *fastText* エンコーディング
<a name="machine-learning-fasttext-features"></a>

Neptune ML は [fastText](https://fasttext.cc/) モデルを使用して、テキストプロパティ値を固定サイズの実数値ベクトルに変換できます。これは、FastText がサポートする 5 つの言語のいずれかのテキストプロパティ値の推奨エンコーディング方法です。
+ `en`   (英語)
+ `zh`   (中国語)
+ `hi`   (ヒンディー語)
+ `es`   (スペイン語)
+ `fr`   (フランス語)

fastText は複数の言語の単語を含む文を処理できないことに注意してください。

`text_fasttext` メソッドは、エンコードされるテキストプロパティ値のトークンの最大数を指定する `max_length` フィールドをオプションで取得できます。この数を超えると、文字列は切り捨てられます。これによって、テキストプロパティ値に長い文字列が含まれる場合のパフォーマンスが向上します。`max_length` が指定されなかった場合、fastText は文字列の長さに関係なく、すべてのトークンをエンコードするためです。

次の例では、フランス語の映画タイトルが fastText を使用してエンコードされるように指定しています。

```
{
    "file_name" : "nodes/movie.csv",
    "separator" : ",",
    "node" : ["~id", "movie"],
    "features" : [
      {
        "feature": ["title", "title", "text_fasttext"],
        "language": "fr",
        "max_length": 1024
      }
    ]
  }
```

### Neptune MLにおけるテキストフィーチャの Sentence BERT (SBERT) エンコーディング
<a name="machine-learning-sbert-features"></a>

Neptune ML は、[Sententh BERT](https://www.sbert.net/docs/pretrained_models.html#sentence-embedding-models) (SBERT) モデルを使用して、文字列プロパティ値内のトークンのシーケンスを固定サイズの実数値ベクトルに変換できます。Neptune は 2 つの SBERT メソッドをサポートしています。すなわち、`text_sbert128` (`text_sbert` を指定した場合のデフォルト) と `text_sbert512` です。この 2 つの違いは、エンコードされるテキストプロパティ値文字列の最大長です。`text_sbert128` エンコーディングでは、128 トークンをエンコードするとテキスト文字列が切り捨てられますが、`text_sbert512` では、512 トークンをエンコードした後にテキスト文字列が切り捨てられます。その結果、`text_sbert512` を使用する場合は、`text_sbert128` よりも処理時間が長くなる可能性があります。どちらの方法も、`text_fasttext` より遅くなります。

SBERT エンコーディングは多言語対応なので、エンコードするプロパティ値のテキストについて言語を指定する必要はありません。SBERT は多くの言語をサポートしており、複数の言語を含む文をエンコードできます。fastText がサポートしていない言語のテキストを含むプロパティ値をエンコードする場合は、SBERT が推奨されるエンコード方法です。

次の例では、映画のタイトルを最大 128 トークンまで SBERT としてエンコードするように指定しています。

```
{
    "file_name" : "nodes/movie.csv",
    "separator" : ",",
    "node" : ["~id", "movie"],
    "features" : [
      { "feature": ["title", "title", "text_sbert128"] }
    ]
  }
```

### Neptune ML でのテキストフィーチャの Word2Vec エンコーディング
<a name="machine-learning-word2vec-features"></a>

Neptune ML は、文字列プロパティ値を Word2Vec 機能としてエンコードできます ([Word2Vec](https://wikipedia.org/wiki/Word2vec) アルゴリズムは元々 [Google](https://code.google.com/archive/p/word2vec/) によって公開されました)。`text_word2vec` メソッドは、[spaCy でトレーニング済みモデル](https://spacy.io/models)のいずれかを使用して、文字列内のトークンを密なベクトルとしてエンコードします。これは [en\$1core\$1web\$1lg](https://spacy.io/models/en#en_core_web_lg) モデルを使用する英語のみをサポートしています。

次の例では、映画のタイトルを Word2Vec を使用してエンコードするように指定しています。

```
{
    "file_name" : "nodes/movie.csv",
    "separator" : ",",
    "node" : ["~id", "movie"],
    "features" : [
      {
        "feature": ["title", "title", "text_word2vec"],
        "language": "en_core_web_lg"
      }
    ]
  }
```

Neptune がサポートしているのは英語 `en_core_web_lg` モデルだけなので、言語フィールドはオプションであることに注意してください。

### Neptune ML でのテキストフィーチャの TF-IDF エンコーディング
<a name="machine-learning-tfidf-features"></a>

Neptune ML は、テキストプロパティ値を `text_tfidf` フィーチャとしてエンコードできます。このエンコーディングは、[term frequency–inverse document frequency](https://wikipedia.org/wiki/Tf-idf) (TF-IDF) ベクタライザを使用して、テキスト内の単語のシーケンスを数値ベクトルに変換し、その後に次元削減操作を実行します。

[TF-IDF](https://en.wikipedia.org/wiki/Tf%E2%80%93idf) (項の頻度 — 逆ドキュメントの頻度) は、文書セット内の単語の重要性を測定するための数値です。これは、特定のプロパティ値に単語が表示される回数をそのプロパティ値の合計数で割って計算されます。

例えば、ある映画のタイトルに「キス」という単語が2回登場し (例えば「キス・キス・バン・バン」)、4本の映画のタイトルすべてに「キス」が登場する場合、「キス・バンバン」タイトルの「キス」の TF-IDF 値は、` 2 / 4 ` となります。

最初に作成されるベクトルは ***d*** ディメンションで、ここで ***d*** は、そのタイプのすべてのプロパティ値の一意の項の数です。次元削減オペレーションでは、ランダムなスパース投影を使用して、その数値を最大 100 に減らします。グラフのボキャブラリーは、その中の `text_tfidf` 特徴をすべて合わせて生成されます。

TF-IDF ベクタライザーは、いくつかの方法で制御できます。
+ **`max_features`** — `max_features` パラメータを使用して、最も一般的な特徴に `text_tfidf` 特徴の項数を制限できます。たとえば、`max_features` を 100 に設定した場合、最も一般的に使用される項の上位 100 のみが含まれます。`max_features` のデフォルト値を明示的に設定しなかった場合、5,000 となります。
+ **`min_df`** — `min_df` パラメータを使用して、少なくとも指定されたドキュメント頻度を持つ特徴へ `text_tfidf` 特徴の項数を制限できます。たとえば、`min_df` を 5 に設定した場合、少なくとも 5 つの異なるプロパティ値に含まれる項のみが使用されます。`min_df` のデフォルト値を明示的に設定しなかった場合、2 となります。
+ **`ngram_range`** — `ngram_range` パラメータは、項として扱われる単語の組み合わせを決定します。たとえば、`ngram_range` を `[2, 4]` に設定した場合、「キス・キス・バン・バン」のタイトルで以下の 6 項が見つかることになります。
  + *2 単語項*：「キス・キス」、「キス・バン」、「バン・バン」。
  + *3 単語項*：「キス・キス・バン」と「キス・バン・バン」。
  + *4 単語項*：「キス・キス・バン・バン」。

  `ngram_range` のデフォルトの設定は `[1, 1]` です。

## Neptune ML のDatetime 特徴
<a name="machine-learning-datetime-features"></a>

Neptune ML は `datetime` プロパティ値の一部を、[one-hot 配列](https://en.wikipedia.org/wiki/One-hot)として符号化してカテゴリ別特徴に変換できます `datetime_parts` パラメータを使用して、符号化する次のパートの `["year", "month", "weekday", "hour"]` のうち 1 つまたは複数を指定します。`datetime_parts` を設定しなければで、デフォルトで 4 つの部分すべてが符号化されます。

たとえば、datetime 値の範囲が 2010 年から 2012 年にわたる場合、datetime 入力 `2011-04-22 01:16:34` の 4 つの部分は次のとおりです。
+ **year**   –   `[0, 1, 0]`。

  スパンには 3 年 (2010、2011、2012) しかないため、one-hot 配列には各年に 1 つずつ、3 つの入力値があります。
+ **month**   –   `[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]`。

  ここでは、one-hot 配列には、その年の各月の入力値があります。
+ **weekday**   –   `[0, 0, 0, 0, 1, 0, 0]`。

  ISO 8601 規格では、月曜日が週の最初の曜日であると定められており、2011 年 4 月 22 日は金曜日であったため、対応するone-hot weekday 配列は 5 番目の位置で hot です。
+ **hour**   –   `[0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]`。

  午前 1 時の時間は 24-member one-hot 配列で設定されます。

月、分、秒の曜日はカテゴリ的に符号化されません。

総 `datetime` 対象範囲に 1 年以内の日付のみが含まれている場合、`year` 配列はどれも符号化されません。

`imputer` パラメータと、数値特徴に使用できる戦略の 1 つを使用して、欠落した`datetime`値を保管するためのインピュテーション戦略を指定できます。

## Neptune ML での自動特徴エンコーディング
<a name="machine-learning-auto-encoding"></a>

グラフのプロパティに使用する特徴エンコーディングメソッドを手動で指定する代わりに、特徴エンコーディングメソッドとして `auto` を設定できます。次に、Neptune ML は、基礎となるデータ型に基づいて、各プロパティの最適な特徴エンコーディングを推論しようとします。

Neptune ML が適切な特徴エンコーディングを選択する際に使用する発見的手法をいくつか紹介します。
+ プロパティが数値のみを持ち、数値データ型にキャストできる場合、Neptune ML は通常、それを数値として符号化します。ただし、プロパティの一意の値の数が値の合計数の 10% 未満で、それらの一意の値のカーディナリティが 100 未満の場合、Neptune ML はカテゴリ別エンコーディングを使用します。
+ プロパティ値を `datetime` 型にキャストできる場合、Neptune ML はそれらを `datetime` 特徴に符号化します。
+ プロパティ値をブール値 (1/0 または True/False) に強制できる場合、Neptune ML はカテゴリエンコーディングを使用します。
+ プロパティがその値の 10% を超える一意の文字列であり、値あたりの平均トークン数が 3 以上の場合、Neptune ML はプロパティタイプをテキストとして推論し、使用されている言語を自動的に検出します。検出された言語が [fastText](#machine-learning-fasttext-features) によってサポートされている言語、つまり、英語、中国語、ヒンディー語、スペイン語、フランス語のいずれかである場合、Neptune ML は `text_fasttext` を使用してテキストをエンコードします。それ以外の場合、Neptune ML は [`text_sbert`](#machine-learning-sbert-features) を使用します。
+ プロパティがテキスト特徴として分類されない文字列の場合、Neptune ML はカテゴリ別特徴であると仮定し、カテゴリエンコーディングを使用します。
+ 各ノードがカテゴリ特徴であると推論されるプロパティに固有の値がある場合、Neptune ML は学習に有益ではない ID であるため、トレーニンググラフからプロパティを削除します。
+ プロパティにセミコロン (「;」) などの有効な Neptune 区切り文字が含まれていることがわかっている場合、Neptune ML はプロパティを `MultiNumerical` または `MultiCategorical` とのみ扱えます。
  + Neptune ML は、まず値を数値特徴として符号化しようとします。これが成功すると、Neptune ML は数値エンコーディングを使用して数値ベクトル特徴を作成します。
  + それ以外の場合、Neptune ML は値をマルチカテゴリとして符号化します。
+ Neptune ML がプロパティの値のデータ型を推論できない場合、Neptune MLはトレーニンググラフからプロパティを削除します。

# トレーニングデータ設定ファイルの編集
<a name="machine-learning-processing-training-config-file"></a>

Neptune エクスポートプロセスは、Neptune DB クラスターから S3 バケットに Neptune ML データをエクスポートします。ノードとエッジを `nodes/` と `edges/` の別々のフォルダにエクスポーします。また、デフォルトでは `training-data-configuration.json` という名前の JSON トレーニングデータ設定ファイルも作成します。このファイルには、グラフのスキーマ、特徴の型、特徴変換と正規化操作、分類または回帰タスクのターゲット特徴に関する情報が含まれています。

設定ファイルを直接変更したい場合があります。このようなケースの 1 つは、解析する機械学習タスクの仕様を変更するたびにエクスポートを再実行しなくても、特徴の処理方法やグラフの作成方法を変更する場合です。

**トレーニングデータ設定ファイルを編集するには**

1. **ファイルをローカルマシンにダウンロードします。**

   エクスポートプロセスで渡された `additionalParams/neptune_ml` パラメータで 1 つ以上の名前付きジョブを指定していない限り、ファイルはデフォルトの名前 `training-data-configuration.json` になります。次のような AWS CLI コマンドを使用して、 ファイルをダウンロードすることができます。

   ```
   aws s3 cp \
     s3://(your Amazon S3 bucket)/(path to your export folder)/training-data-configuration.json \
     ./
   ```

1. **テキストエディタを使用してファイルを編集します。**

1. **変更したファイルをアップロードします。**次のように AWS CLI コマンドを使用して、変更したファイルを、ダウンロード元の Amazon S3 の同じ場所にアップロードします。

   ```
   aws s3 cp \
     training-data-configuration.json \
     s3://(your Amazon S3 bucket)/(path to your export folder)/training-data-configuration.json
   ```

# JSON トレーニングデータ設定ファイルの例
<a name="machine-learning-processing-training-config-file-example"></a>

ノード分類タスクのグラフを説明するトレーニングデータ設定ファイルの例を次に示します。

```
{
  "version" : "v2.0",
  "query_engine" : "gremlin",
  "graph" : [
    {
      "edges" : [
        {
          "file_name" : "edges/(movie)-included_in-(genre).csv",
          "separator" : ",",
          "source" : ["~from", "movie"],
          "relation" : ["", "included_in"],
          "dest" : [ "~to", "genre" ]
        },
        {
          "file_name" : "edges/(user)-rated-(movie).csv",
          "separator" : ",",
          "source" : ["~from", "movie"],
          "relation" : ["rating", "prefixname"], # [prefixname#value]
          "dest" : ["~to", "genre"],
          "features" : [
            {
              "feature" : ["rating", "rating", "numerical"],
              "norm" : "min-max"
            }
          ]
        }
      ],
      "nodes" : [
        {
          "file_name" : "nodes/genre.csv",
          "separator" : ",",
          "node" : ["~id", "genre"],
          "features" : [
            {
              "feature": ["name", "genre", "category"],
              "separator": ";"
            }
          ]
        },
        {
          "file_name" : "nodes/movie.csv",
          "separator" : ",",
          "node" : ["~id", "movie"],
          "features" : [
            {
              "feature": ["title", "title", "word2vec"],
              "language": ["en_core_web_lg"]
            }
          ]
        },
        {
          "file_name" : "nodes/user.csv",
          "separator" : ",",
          "node" : ["~id", "user"],
          "features" : [
            {
              "feature": ["age", "age", "numerical"],
              "norm" : "min-max",
              "imputation": "median",
            },
            {
              "feature": ["occupation", "occupation", "category"],
            }
          ],
          "labels" : [
            {
              "label": ["gender", "classification"],
              "split_rate" : [0.8, 0.2, 0.0]
            }
          ]
        }
      ]
    },
    "warnings" : [ ]
  ]
}
```

# JSON トレーニングデータ設定ファイルの構造
<a name="machine-learning-processing-training-config-file-structure"></a>

トレーニング設定ファイルは、エクスポートプロセスによって `nodes/` および `edges/` フォルダに保存された CSV ファイルを参照します。

`nodes/` の下にある各ファイルは、同じプロパティグラフノードラベルを持つノードに関する情報を格納します。ノードファイルの各列には、ノード ID またはノードプロパティが格納されます。ファイルの最初の行には、`~id` または、各列のプロパティ名を指定するヘッダーが含まれます。

`edges/` の下にある各ファイルは、同じプロパティグラフエッジラベルを持つノードに関する情報を格納します。ノードファイルの各列には、始点ノード ID、終点ノード ID、またはエッジプロパティが格納されます。ファイルの最初の行には、`~from`、`~to` または各列のプロパティ名を指定するヘッダーが含まれます。

トレーニングデータ設定ファイルには、次の 3 つの最上位要素があります。

```
{
  "version" : "v2.0",
  "query_engine" : "gremlin",
  "graph" : [ ... ]
}
```
+ `version` — (文字列) 使用されているコンフィギュレーションファイルのバージョン。
+ `query_engine` — (文字列) グラフデータのエクスポートに使用するクエリ言語。現在、有効なのは「gremlin」のみです。
+ `graph` — (JSON 配列) 使用される各ノードとエッジのモデルパラメーターを含む 1 つ以上の設定オブジェクトを一覧表示します。

  グラフ配列の構成オブジェクトは、次のセクションで説明する構造です。

## `graph` 配列に一覧表示されている構成オブジェクトの内容
<a name="machine-learning-graph-training-config-object"></a>

`graph` 配列内の構成オブジェクトには 3 つの最上位ノードを含めることができます。

```
    {
      "edges"    : [ ... ],
      "nodes"    : [ ... ],
      "warnings" : [ ... ],
    }
```
+ `edges` — (JSON オブジェクトの配列) 各 JSON オブジェクトは、モデルの処理およびトレーニング中にグラフ内のエッジがどのように処理されるかを定義するパラメータのセットを指定します。これは Gremlin エンジンでのみ使用されます。
+ `nodes` — (JSON オブジェクトの配列) 各 JSON オブジェクトは、モデルの処理およびトレーニング中にグラフ内のノードがどのように処理されるかを定義するパラメータのセットを指定します。これは Gremlin エンジンでのみ使用されます。
+ `warnings` — (JSON オブジェクトの配列) 各オブジェクトには、データのエクスポートプロセス中に生成された警告が含まれています。

## `edges` 配列に一覧表示されているエッジ構成オブジェクトの内容
<a name="machine-learning-graph-edges-config"></a>

`edges` 配列に一覧表示されているエッジ構成オブジェクトは、次の最上位のフィールドを含めることができます。

```
      {
        "file_name" : "(path to a CSV file)",
        "separator" : "(separator character)",
        "source"    : ["(column label for starting node ID)", "(starting node type)"],
        "relation"  : ["(column label for the relationship name)", "(the prefix name for the relationship name)"],
        "dest"      : ["(column label for ending node ID)", "(ending node type)"],
        "features"  : [(array of feature objects)],
        "labels"    : [(array of label objects)]
      }
```
+ **`file_name`** — 同じプロパティグラフラベルを持つエッジに関する情報を格納する CSV ファイルへのパスを指定する文字列。

  そのファイルの最初の行には、列ラベルのヘッダー行が含まれています。

  最初の 2 つの列ラベルは `~from` および `~to` です。最初の列 (`~from` 列) は、エッジの開始ノードの ID を格納し、2 番目 (`~to`列) は、エッジの終了ノードの ID を格納します。

  ヘッダー行の残りの列ラベルは、残りの列ごとに、その列に値がエクスポートされたエッジプロパティの名前を指定します。
+ **`separator`** — その CSV ファイル内の列を区切る区切り文字を含む文字列。
+ **`source`** — エッジの開始ノードを指定する 2 つの文字列を含む JSON 配列。最初の文字列には、開始ノード ID が格納されているカラムのヘッダー名が含まれます。2 番目の文字列は、ノードタイプを指定します。
+ **`relation`** — エッジのリレーションタイプを指定する 2 つの文字列を含む JSON 配列。最初の文字列には、リレーション名 (`relname`) が格納されているカラムのヘッダー名が含まれます。2 番目の文字列には、リレーション名 (`prefixname`) のプレフィックスが含まれています。

  完全なリレーションタイプは、`prefixname-relname` のように 2 つの文字列を結合し、それらの間にハイフン文字を組み合わせて構成します。

  最初の文字列が空の場合、すべてのエッジが同じリレーションタイプになります。つまり、`prefixname` 文字列です。
+ **`dest`** — エッジの終了ノードを指定する 2 つの文字列を含む JSON 配列。最初の文字列には、ノード ID が格納されているカラムのヘッダー名が含まれます。2 番目の文字列は、ノードタイプを指定します。
+ **`features`** — プロパティ値特徴オブジェクトの JSON 配列。各プロパティ値特徴オブジェクトには、次のフィールドが含まれています。
  + **feature** — 3 つの文字列の JSON 配列。最初の文字列には、プロパティ値を含むカラムのヘッダー名が含まれます。2 番目の文字列には、特徴名が含まれます。3 番目の文字列には、特徴型が含まれます。
  + **norm** — (*オプション*) プロパティ値に適用する正規化方法を指定します。

    
+ **`labels`** — オブジェクトの JSON 配列。各オブジェクトは、エッジのターゲット特徴を定義し、トレーニングおよび検証段階で取るエッジの比率を指定します。各オブジェクトには、以下のフィールドが含まれています。
  + **label** — 2 つの文字列の JSON 配列。最初の文字列には、ターゲット特徴のプロパティ値を格納する列のヘッダー名が含まれます。2 番目の文字列は、以下のいずれかのターゲットタスク型を指定します。
    + `"classification"` — エッジ分類タスク。列に表示されるプロパティ値は、`label` 配列の最初の文字列で識別され、カテゴリ別値として扱われます。エッジ分類タスクの場合、`label` 配列の最初の文字列を空にすることはできません。
    + `"regression"` — エッジ回帰タスク。列に表示されるプロパティ値は、`label` 配列の最初の文字列で識別され、数値として扱われます。エッジ回帰タスクの場合、`label` 配列の最初の文字列を空にすることはできません。
    + `"link_prediction"` — リンク予測タスク。プロパティ値は必要ありません。リンク予測タスクの場合、`label` 配列の最初の文字列は無視されます。
  + **`split_rate`** — ゼロから 1 までの、足して 1 になる 3 つの数値を含む JSON 配列。トレーニング、検証、およびテストの各ステージで使用されるノードの比率の推定値を表します。このフィールドまたは `custom_split_filenames` のいずれかを定義できますが、両方は定義できません。[split\$1rate](machine-learning-neptune_ml-targets.md#machine-learning-property-graph-neptune_ml-targets-split_rate) を参照してください。
  + **`custom_split_filenames`** — トレーニング、検証、およびテストの母集団を定義するファイルのファイル名を指定する JSON オブジェクト。このフィールドまたは `split_rate` のいずれかを定義できますが、両方は定義できません。詳細については「[カスタムのトレイン、検証、テストの比率](#machine-learning-custom-stages-splits)」を参照してください。

## `nodes` 配列に一覧表示されているノード構成オブジェクトの内容
<a name="machine-learning-graph-nodes-config"></a>

`nodes` 配列に一覧表示されているノード設定オブジェクトには、次のフィールドを含めることができます。

```
      {
        "file_name" : "(path to a CSV file)",
        "separator" : "(separator character)",
        "node"      : ["(column label for the node ID)", "(node type)"],
        "features"  : [(feature array)],
        "labels"    : [(label array)],
      }
```
+ **`file_name`** — 同じプロパティグラフラベルを持つノードに関する情報を格納する CSV ファイルへのパスを指定する文字列。

  そのファイルの最初の行には、列ラベルのヘッダー行が含まれています。

  最初の列ラベルは `~id` であり、最初の列 (`~id` 列) には、ノード ID が保存されます。

  ヘッダー行の残りの列ラベルは、残りの列ごとに、その列に値がエクスポートされたノードプロパティの名前を指定します。
+ **`separator`** — その CSV ファイル内の列を区切る区切り文字を含む文字列。
+ **`node`** — 2 つの文字列を含む JSON 配列。最初の文字列には、ノード ID が格納されているカラムのヘッダー名が含まれます。2 番目の文字列は、グラフ内のノード型を指定します。これは、ノードのプロパティグラフラベルに対応します。
+ **`features`** — ノード特徴オブジェクトの JSON 配列。「[ノードまたはエッジの `features` 配列に一覧表示されている特徴オブジェクトの内容](#machine-learning-graph-node-features-config)」を参照してください。
+ **`labels`** — ノードラベルオブジェクトの JSON 配列。「[ノード `labels` 配列に一覧表示されたノードラベルオブジェクトの内容](#machine-learning-graph-node-labels-config)」を参照してください。

## ノードまたはエッジの `features` 配列に一覧表示されている特徴オブジェクトの内容
<a name="machine-learning-graph-node-features-config"></a>

ノード `features` 配列に一覧表示されているノード特徴オブジェクトには、次の最上位フィールドを含めることができます。
+ **`feature`** — 3 つの文字列の JSON 配列。最初の文字列には、特徴のプロパティ値を格納する列のヘッダー名が含まれます。2 番目の文字列には、特徴名が含まれます。

  3 番目の文字列には、特徴型が含まれます。有効な特徴型の一覧を [特徴のタイプフィールドで使用できる値](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-feature-types) に示します。
+ **`norm`** - このフィールドは数値特徴に必須です。数値に使用する正規化方法を指定します。有効な値は、`"none"`、`"min-max"`、「標準」です。詳細については、「[norm フィールド](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-features-norm)」を参照してください。
+ **`language`** - 言語フィールドは、テキストプロパティ値に使用されている言語を指定します。その使用法は、テキストのエンコード方法によって異なります。
  + [`text_fasttext`](machine-learning-feature-encoding.md#machine-learning-fasttext-features) エンコーディングの場合、このフィールドは必須であり、以下の言語のいずれかを指定する必要があります。
    + `en`   (英語)
    + `zh`   (中国語)
    + `hi`   (ヒンディー語)
    + `es`   (スペイン語)
    + `fr`   (フランス語)

    ただし、`text_fasttext` は、一度に複数の言語を処理することはできません。
  + [`text_sbert`](machine-learning-feature-encoding.md#machine-learning-fasttext-features) エンコーディングの場合、SBERT エンコーディングは多言語対応であるため、このフィールドは使用されません。
  + [`text_word2vec`](machine-learning-feature-encoding.md#machine-learning-word2vec-features) エンコーディングの場合、`text_word2vec` は英語のみをサポートするため、このフィールドはオプションです。存在する場合は、英語言語モデルの名前を指定する必要があります。

    ```
    "language" : "en_core_web_lg"
    ```
  + [`tfidf`](machine-learning-feature-encoding.md#machine-learning-tfidf-features) エンコーディングの場合、このフィールドは使用されません。
+ **`max_length`** - このフィールドは、[`text_fasttext`](machine-learning-feature-encoding.md#machine-learning-fasttext-features) 機能についてはオプションであり、エンコードされる入力テキストフィーチャ内のトークンの最大数を指定します。`max_length` に達した後の入力テキストは無視されます。例えば、max\$1length を 128 に設定すると、テキストシーケンス内の 128 番目より後のトークンは無視されます。
+ **`separator`** - このフィールドはオプションで 、`category`、`numerical` および `auto` と使用されます。プロパティ値を複数のカテゴリ値または数値に分割するために使用できる文字を指定します。

  「[separator フィールド](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-features-separator)」を参照してください。
+ **`range`** - このフィールドは `bucket_numerical` 特徴に必須です。バケットに分割する数値の範囲を指定します。

  「[range フィールド](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-features-range)」を参照してください。
+ **`bucket_cnt`** - このフィールドは `bucket_numerical` 特徴に必須です。これは、`range` パラメータにより定義される数値範囲が分割されるバケットの数を指定します。

  「[Neptune MLの Bucket-numerical 特徴](machine-learning-feature-encoding.md#machine-learning-bucket_numerical-features)」を参照してください。
+ **`slide_window_size`** - このフィールドはオプションで `bucket_numerical` 特徴と使用して複数のバケットに値を割り当てます。

  「[slide\$1window\$1size フィールド](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-features-slide_window_size)」を参照してください。
+ **`imputer`** - このフィールドはオプションで `numerical`、`bucket_numerical` および `datetime` 特徴と使用して欠損値を埋めるためのインプテーション手法を提供します。サポートされているインプテーションテクニックは、`"mean"`、`"median"` および `"most_frequent"` です。

  「[imputer フィールド](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-features-imputer)」を参照してください。
+ **`max_features`** - このフィールドはオプションで `text_tfidf` 特徴と使用して符号化する項の最大数を指定します。

  「[max\$1features フィールド](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-features-max_features)」を参照してください。
+ **`min_df`** - このフィールドはオプションで `text_tfidf` 特徴と使用して符号化する項の最低ドキュメント頻度を指定します。

  「[min\$1df フィールド](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-features-min_df)」を参照してください。
+ **`ngram_range`** — このフィールドは、`text_tfidf` 特徴にオプションで使用され、符号化する可能性のある個々の項と見なされる単語またはトークンの数の範囲を指定します。

  「[ngram\$1range フィールド](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-features-ngram_range)」を参照してください。
+ **`datetime_parts`** - このフィールドはオプションで `datetime` 特徴と使用して datetime 値のどの部分をカテゴリ別に符号化するかを指定します。

  「[datetime\$1parts フィールド](machine-learning-neptune_ml-features.md#machine-learning-neptune_ml-features-datetime_parts)」を参照してください。

## ノード `labels` 配列に一覧表示されたノードラベルオブジェクトの内容
<a name="machine-learning-graph-node-labels-config"></a>

ノード `labels` 配列に一覧表示されたラベルオブジェクトは、ノードターゲット特徴を定義し、トレーニング、検証、およびテストの各段階で使用するノードの比率を指定します。各オブジェクトには次のフィールドの要素を含めることができます。

```
      {
        "label"      : ["(column label for the target feature property value)", "(task type)"],
        "split_rate" : [(training proportion), (validation proportion), (test proportion)],
        "custom_split_filenames" : {"train": "(training file name)", "valid": "(validation file name)", "test": "(test file name)"},
        "separator"  : "(separator character for node-classification category values)",
      }
```
+ **`label`** — 2 つの文字列を含む JSON 配列。最初の文字列には、特徴のプロパティ値を格納する列のヘッダー名が含まれます。2 番目の文字列は、ターゲットタスクの種類を指定します。次のようになります。
  + `"classification"` — ノード分類タスク。指定した列のプロパティ値は、カテゴリ特徴の作成に使用されます。
  + `"regression"` — ノード回帰タスク。指定した列のプロパティ値は、数値特徴の作成に使用されます。
+ **`split_rate`** — ゼロから 1 の間の 3 つの数値を含む JSON 配列。最大 1 を足し、トレーニング、検証、およびテストの各ステージで使用されるノードの比率の推定値を表します。「[split\$1rate](machine-learning-neptune_ml-targets.md#machine-learning-property-graph-neptune_ml-targets-split_rate)」を参照してください。
+ **`custom_split_filenames`** — トレーニング、検証、およびテストの母集団を定義するファイルのファイル名を指定する JSON オブジェクト。このフィールドまたは `split_rate` のいずれかを定義できますが、両方は定義できません。詳細については「[カスタムのトレイン、検証、テストの比率](#machine-learning-custom-stages-splits)」を参照してください。
+ **`separator`** — 分類タスクのカテゴリ別特徴値を区切る区切り文字を含む文字列。

**注記**  
エッジとノードの両方にラベルオブジェクトを指定しない場合、タスクは自動的にリンク予測と見なされ、エッジはトレーニングのために 90%、検証のために 10% にランダムに分割されます。

## カスタムのトレイン、検証、テストの比率
<a name="machine-learning-custom-stages-splits"></a>

デフォルトでは、`split_rate` パラメータは Neptune ML によって、このパラメータで定義された比率を使用してグラフをトレーニング、検証、およびテストの母集団にランダムに分割するために使用されます。これらの異なる母集団でどのエンティティを使用するかをより正確に制御するには、それらを明示的に定義するファイルを作成し、[トレーニングデータ設定ファイルを編集して](machine-learning-processing-training-config-file.md)、これらのインデックスファイルを母集団にマッピングすることができます。このマッピングは、トレーニング設定ファイルの [`custom_split_filesnames`](#custom_split_filenames) キーの JSON オブジェクトによって指定されます。このオプションを使用する場合、`train` および `validation` キーにはファイル名を指定する必要がありますが、`test` キーでは省略可能です。

これらのファイルの形式は [Gremlin データ形式](bulk-load-tutorial-format-gremlin.md#bulk-load-tutorial-format-gremlin-systemheaders)に一致する必要があります。具体的には、ノードレベルのタスクでは、各ファイルにノード ID を一覧表示する `~id` ヘッダー付きの列が含まれている必要があります。エッジレベルのタスクでは、ファイルは `~from` および `~to` を指定して、エッジのソースノードとデスティネーションノードをそれぞれ示す必要があります。これらのファイルは、データ処理に使用されるエクスポートデータと同じ Amazon S3 の場所に配置する必要があります (「[`outputS3Path`](export-parameters.md#export-parameters-outputS3Path)」を参照)。

プロパティの分類や回帰タスクでは、これらのファイルで機械学習タスクのラベルをオプションで定義できます。その場合、ファイルには、[トレーニングデータ設定ファイルで定義](#machine-learning-graph-node-labels-config)されているのと同じヘッダー名のプロパティ列が必要です。エクスポートされたノードおよびエッジファイルとカスタム分割ファイルの両方でプロパティラベルが定義されている場合、カスタム分割ファイルが優先されます。