

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

# neptune\_ml 中的功能欄位
<a name="machine-learning-neptune_ml-features"></a>

屬性值和 RDF 常值有不同的格式和資料類型。若要在機器學習中實現良好的效能，必須將這些值轉換為稱為*特徵*的數值編碼。

Neptune ML 會執行特徵擷取和編碼，做為資料匯出和資料處理步驟的一部分，如 [Neptune ML 中的特徵編碼](machine-learning-feature-encoding.md) 中所述。

對於屬性圖資料集，匯出程序會自動針對字串屬性和包含多個值的數值屬性推斷 `auto` 特徵。對於包含單一值的數值屬性，它會推斷 `numerical` 特徵。對於日期屬性，它會推斷 `datetime` 特徵。

如果您想要覆寫自動推斷的特徵規格，或為屬性新增儲存貯體數值、TF-IDF、FastText 或 SBERT 規格，您可以使用特徵欄位控制特徵編碼。

**注意**  
您只能使用 `features` 欄位來控制屬性圖資料的特徵規格，而不能控制 RDF 資料的特徵規格。

對於自由格式的文字，Neptune ML 可以使用數個不同的模型，將字串屬性值中的記號序列轉換為固定大小的實數值向量：
+ [`text_fasttext`](machine-learning-feature-encoding.md#machine-learning-fasttext-features) – 使用 [fastText](https://fasttext.cc/) 編碼。對於使用 fastText 所支援五種語言的一種且只有一種的特徵，這是建議的編碼方式。
+ [`text_sbert`](machine-learning-feature-encoding.md#machine-learning-sbert-features) – 使用[句子 BERT](https://www.sbert.net/docs/pretrained_models.html#sentence-embedding-models) (SBERT) 編碼模型。對於 `text_fasttext` 不支援的文字，這是建議的編碼方式。
+ [`text_word2vec`](machine-learning-feature-encoding.md#machine-learning-word2vec-features) – 使用 [Google](https://code.google.com/archive/p/word2vec/) 最初發佈的 [Word2VEC](https://wikipedia.org/wiki/Word2vec) 演算法來編碼文字。Word2Vec 只支援英文。
+ [`text_tfidf`](machine-learning-feature-encoding.md#machine-learning-tfidf-features) – 使用[詞頻-逆向文件頻率](https://wikipedia.org/wiki/Tf-idf) (TF-IDF) 向量化程式來編碼文字。TF-IDF 編碼支援其他編碼不支援的統計特徵。

`features` 欄位包含節點屬性特徵的 JSON 陣列。陣列中的物件可以包含下列欄位：

**Contents**
+ [節點](#machine-learning-neptune_ml-features-node)
+ [節點](#machine-learning-neptune_ml-features-edge)
+ [屬性](#machine-learning-neptune_ml-features-property)
+ [type](#machine-learning-neptune_ml-feature-types)
+ [norm](#machine-learning-neptune_ml-features-norm)
+ [語言](#machine-learning-neptune_ml-features-language)
+ [max\_length](#machine-learning-neptune_ml-features-max_length)
+ [separator](#machine-learning-neptune_ml-features-separator)
+ [range](#machine-learning-neptune_ml-features-range)
+ [bucket\_cnt](#machine-learning-neptune_ml-features-bucket_cnt)
+ [slide\_window\_size](#machine-learning-neptune_ml-features-slide_window_size)
+ [imputer](#machine-learning-neptune_ml-features-imputer)
+ [max\_features](#machine-learning-neptune_ml-features-max_features)
+ [min\_df](#machine-learning-neptune_ml-features-min_df)
+ [ngram\_range](#machine-learning-neptune_ml-features-ngram_range)
+ [datetime\_parts](#machine-learning-neptune_ml-features-datetime_parts)

## 功能中的節點欄位
<a name="machine-learning-neptune_ml-features-node"></a>

`node` 欄位指定特徵頂點的屬性圖標籤。例如：

```
  "node": "Person"
```

如果一個頂點有多個標籤，請使用陣列來包含它們。例如：

```
  "node": ["Admin", "Person"]
```

## 功能中的邊緣欄位
<a name="machine-learning-neptune_ml-features-edge"></a>

`edge` 欄位指定特徵邊緣的邊緣類型。邊緣類型由陣列組成，此陣列包含來源頂點的屬性圖標籤、邊緣的屬性圖標籤，以及目的地頂點的屬性圖標籤。指定邊緣特徵時，您必須提供全部三個值。例如：

```
  "edge": ["User", "reviewed", "Movie"]
```

如果邊緣類型的來源或目標頂點有多個標籤，請使用另一個陣列來包含它們。例如：

```
  "edge": [["Admin", "Person"]. "edited", "Post"]
```

## 功能中的屬性欄位
<a name="machine-learning-neptune_ml-features-property"></a>

使用屬性參數來指定由 `node` 參數所識別之頂點的屬性。例如：

```
  "property" : "age"
```

## 功能的類型欄位可能值
<a name="machine-learning-neptune_ml-feature-types"></a>

`type` 參數指定要定義的特徵類型。例如：

```
  "type": "bucket_numerical"
```

**`type` 參數的可能值**
+ **`"auto"`** – 指定 Neptune ML 應該自動偵測屬性類型並套用適當的特徵編碼。`auto` 特徵也可以具有一個選用 `separator` 欄位。

  請參閱 [Neptune ML 中的自動特徵編碼](machine-learning-feature-encoding.md#machine-learning-auto-encoding)。
+ **`"category"`** – 此特徵編碼將屬性值表示為數個類別的其中一個。換句話說，此特徵可以採取一個或多個離散值。`category` 特徵也可以具有一個選用 `separator` 欄位。

  請參閱 [Neptune ML 中的類別特徵](machine-learning-feature-encoding.md#machine-learning-categorical-features)。
+ **`"numerical"`** – 此特徵編碼會將數值屬性值表示為連續間隔中的數字，其中「大於」和「小於」都有意義。

   `numerical` 特徵也可以具有選用 `norm`、`imputer` 和 `separator` 欄位。

  請參閱 [Neptune ML 中的數值特徵](machine-learning-feature-encoding.md#machine-learning-numerical-features)。
+ **`"bucket_numerical"`** – 此特徵編碼會將數值屬性值分成一組*儲存貯體*或類別。

  例如，您可以將人們的年齡編碼為 4 個儲存貯體：小孩 (0-20)、年輕人 (20-40)、中年人 (40-60) 和長者 (60 歲以上)。

  `bucket_numerical` 特徵需要 `range` 和 `bucket_cnt` 欄位，也可以選擇性地包含 `imputer` 和/或 `slide_window_size` 欄位。

  請參閱 [Neptune ML 中的儲存貯體數值特徵](machine-learning-feature-encoding.md#machine-learning-bucket_numerical-features)。
+ **`"datetime"`** – 此特徵編碼會將 datetime 屬性值表示為下列類別特徵的陣列：年、月、工作日和小時。

  可以使用 `datetime_parts` 參數消除這四個類別中的一個或多個類別。

  請參閱 [Neptune ML 中的日期時間特徵](machine-learning-feature-encoding.md#machine-learning-datetime-features)。
+ **`"text_fasttext"`** – 此特徵編碼會使用 [fastText](https://fasttext.cc/) 模型，將由句子或自由格式文字組成的屬性值轉換為數值向量。它支持五種語言，即英文 (`en`)、中文 (`zh`)、北印度文 (`hi`)、西班牙文 (`es`) 和法文 (`fr`)。對於這五種語言中任何一種的文字屬性值，`text_fasttext` 是建議的編碼方式。不過，它無法處理同一句子包含多種語言單字的情況。

  對於 fastText 所支援語言以外的其他語言，請使用 `text_sbert` 編碼。

  假設，如果您的屬性值文字字串長度超過 120 個記號，請使用 `max_length` 欄位來限制 `"text_fasttext"` 編碼的每個字串中的記號數目。

  請參閱 [Neptune ML 中文字屬性值的 *fastText* 編碼](machine-learning-feature-encoding.md#machine-learning-fasttext-features)。
+ **`"text_sbert"`** – 此編碼會使用[句子 BERT](https://www.sbert.net/docs/pretrained_models.html#sentence-embedding-models) (SBERT) 模型，將文字屬性值轉換為數值向量。Neptune 支援兩種 SBERT 方法，即 `text_sbert128`，這是預設值，如果您僅指定 `text_sbert` 和 `text_sbert512` 的話。它們之間的差異在於進行編碼的文字屬性中的記號數目上限。`text_sbert128` 編碼僅會編碼前 128 個記號，而 `text_sbert512` 最多可編碼 512 個記號。因此，使用 `text_sbert512` 可能比 `text_sbert128` 需要更多的處理時間。這兩種方法都比 `text_fasttext` 慢。

  `text_sbert{{*}}` 方法支援多種語言，而且可以編碼包含多種語言的句子。

  請參閱 [Neptune ML 中文字特徵的句子 BERT (SBERT) 編碼](machine-learning-feature-encoding.md#machine-learning-sbert-features)。
+ **`"text_word2vec"`** – 此編碼會使用 [Word2VEC](https://wikipedia.org/wiki/Word2vec) 演算法，將文字屬性值轉換為數值向量。它僅支援英文。

  請參閱 [Neptune ML 中文字特徵的 Word2Vec 編碼](machine-learning-feature-encoding.md#machine-learning-word2vec-features)。
+ **`"text_tfidf"`** – 此編碼會使用[詞頻-逆向文件頻率](https://wikipedia.org/wiki/Tf-idf) (TF-IDF) 向量化程式，將文字屬性值轉換為數值向量。

  您可以使用 `ngram_range` 欄位、`min_df` 欄位和 `max_features` 欄位來定義 `text_tfidf` 特徵編碼的參數。

  請參閱 [Neptune ML 中文字特徵的 TF-IDF 編碼](machine-learning-feature-encoding.md#machine-learning-tfidf-features)。
+ **`"none"`** – 使用 `none` 類型會導致不發生任何特徵編碼。反而會剖析並儲存原始屬性值。

  僅在您計劃執行自己的自訂特徵編碼，做為自訂模型訓練的一部分時，才會使用 `none`。

## 標準欄位
<a name="machine-learning-neptune_ml-features-norm"></a>

數值特徵需要此欄位。它會指定要在數值上使用的標準化方法：

```
"norm": "min-max"
```

支援以下標準化方法：
+ **「min-max」** – 透過從中減去最小值，然後將其除以最大值與最小值之間的差值來標準化每個值。
+ **「standard」** – 將每個值除以所有值的總和來標準化這些值。
+ **「none」** – 不要在編碼期間標準化數值。

請參閱 [Neptune ML 中的數值特徵](machine-learning-feature-encoding.md#machine-learning-numerical-features)。

## 語言欄位
<a name="machine-learning-neptune_ml-features-language"></a>

語言欄位會指定文字屬性值中使用的語言。它的用法取決於文字編碼方法：
+ 對於 [`text_fasttext`](machine-learning-feature-encoding.md#machine-learning-fasttext-features) 編碼，此欄位是必要的，且必須指定下列其中一種語言：
  + `en` (英文)
  + `zh` (中文)
  + `hi` (北印度文)
  + `es` (西班牙文)
  + `fr` (法文)
+ 對於 [`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"
  ```
+ 對於 [`text_tfidf`](machine-learning-feature-encoding.md#machine-learning-tfidf-features) 編碼，不會使用此欄位。

## max\_length 欄位
<a name="machine-learning-neptune_ml-features-max_length"></a>

`max_length` 欄位是 `text_fasttext` 特徵的選用欄位，其中指定將編碼之輸入文字特徵中的記號數目上限。長度超過 `max_length` 的輸入文字會被截斷。例如，將 max\_length 設定為 128，表示將忽略文字序列中第 128 之後的任何記號：

```
"max_length": 128
```

## 分隔符號欄位
<a name="machine-learning-neptune_ml-features-separator"></a>

此欄位可選擇性地與 `category`、`numerical` 和 `auto` 特徵搭配使用。它會指定一個字元，其可以用來將屬性值分成多個類別值或數值：

```
"separator": ";"
```

僅在屬性將多個分隔值儲存在單一字串 (例如 `"Actor;Director"` 或 `"0.1;0.2"`) 中時，才會使用 `separator` 欄位。

請參閱[類別功能](machine-learning-feature-encoding.md#machine-learning-categorical-features)、[數值特徵](machine-learning-feature-encoding.md#machine-learning-numerical-features)和[自動編碼](machine-learning-feature-encoding.md#machine-learning-auto-encoding)。

## 範圍欄位
<a name="machine-learning-neptune_ml-features-range"></a>

`bucket_numerical` 特徵需要此欄位。它會指定要分成儲存貯體的數值範圍，格式為 `[{{lower-bound}}, {{upper-bound}}]`：

```
"range" : [20, 100]
```

如果屬性值小於下限，則會將其指派給第一個儲存貯體，或者如果它大於上限，則會將其指派給最後一個儲存貯體。

請參閱 [Neptune ML 中的儲存貯體數值特徵](machine-learning-feature-encoding.md#machine-learning-bucket_numerical-features)。

## bucket\_cnt 欄位
<a name="machine-learning-neptune_ml-features-bucket_cnt"></a>

`bucket_numerical` 特徵需要此欄位。它會指定由 `range` 參數定義的數值範圍應分成的儲存貯體數目：

```
"bucket_cnt": 10
```

請參閱 [Neptune ML 中的儲存貯體數值特徵](machine-learning-feature-encoding.md#machine-learning-bucket_numerical-features)。

## slide\_window\_size 欄位
<a name="machine-learning-neptune_ml-features-slide_window_size"></a>

此欄位可選擇性地搭配 `bucket_numerical` 特徵使用，以將值指派給多個儲存貯體：

```
"slide_window_size": 5
```

滑動視窗的運作方式是 Neptune ML 採取視窗大小 **`s`**，並將屬性的每個數值 **`v`** 轉換為從 ` v - s/2 ` 到 ` v + s/2 ` 的範圍。然後，此值會指定給範圍重疊的每個儲存貯體。

請參閱 [Neptune ML 中的儲存貯體數值特徵](machine-learning-feature-encoding.md#machine-learning-bucket_numerical-features)。

## imputer 欄位
<a name="machine-learning-neptune_ml-features-imputer"></a>

此欄位可選擇搭配 `numerical` 和 `bucket_numerical` 特徵使用，以提供填入缺失值的插補技術：

```
"imputer": "mean"
```

支援的插補技術如下：
+ `"mean"`
+ `"median"`
+ `"most-frequent"`

如果您未包含 imputer 參數，資料預先處理會在遇到缺失值時停止並結束。

請參閱 [Neptune ML 中的數值特徵](machine-learning-feature-encoding.md#machine-learning-numerical-features) 和 [Neptune ML 中的儲存貯體數值特徵](machine-learning-feature-encoding.md#machine-learning-bucket_numerical-features)。

## max\_features 欄位
<a name="machine-learning-neptune_ml-features-max_features"></a>

此欄位是 `text_tfidf` 特徵可選擇性地用來指定要編碼的詞數上限：

```
"max_features": 100
```

設定為 100 會導致 TF-IDF 向量化程式只編碼 100 個最常見的字詞。如果未包含 `max_features`，則預設值為 5,000。

請參閱 [Neptune ML 中文字特徵的 TF-IDF 編碼](machine-learning-feature-encoding.md#machine-learning-tfidf-features)。

## min\_df 欄位
<a name="machine-learning-neptune_ml-features-min_df"></a>

`text_tfidf` 特徵可選擇性地使用此欄位，來指定要編碼之字詞的文件頻率上限：

```
"min_df": 5
```

設定 5 表示字詞必須出現在至少 5 個不同的屬性值中，才能進行編碼。

如果您未包含 `min_df` 參數，預設值為 `2`。

請參閱 [Neptune ML 中文字特徵的 TF-IDF 編碼](machine-learning-feature-encoding.md#machine-learning-tfidf-features)。

## ngram\_range 欄位
<a name="machine-learning-neptune_ml-features-ngram_range"></a>

`text_tfidf` 特徵可選擇性地使用此欄位，指定應將單字或記號的哪些大小序列視為要編碼的潛在個別字詞：

```
"ngram_range": [2, 4]
```

值 `[2, 4]` 指定 2、3 和 4 個單字的序列應被視為潛在的個別字詞。

如果您沒有明確設定 `ngram_range`，則預設值為 `[1, 1]`，這表示只有單一單字或記號會被視為要編碼的字詞。

請參閱 [Neptune ML 中文字特徵的 TF-IDF 編碼](machine-learning-feature-encoding.md#machine-learning-tfidf-features)。

## datetime\_parts 欄位
<a name="machine-learning-neptune_ml-features-datetime_parts"></a>

`datetime` 特徵可選擇性地使用此欄位，來指定要以分類方式編碼 datetime 值的哪些部分：

```
"datetime_parts": ["weekday", "hour"]
```

如果您未包含 `datetime_parts`，Neptune ML 預設會編碼 datetime 值的年、月、工作日和小時部分。值 `["weekday", "hour"]` 表示只有 datetime 值的工作日和小時應在特徵中進行分類編碼。

如果其中一個部分在訓練集中沒有多個唯一值，則不會對其進行編碼。

請參閱[Neptune ML 中的日期時間特徵](machine-learning-feature-encoding.md#machine-learning-datetime-features)。