

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# neptune\$1ml 中的 features 字段
<a name="machine-learning-neptune_ml-features"></a>

属性值和 RDF 文本值有不同的格式和数据类型。为了在机器学习中获得良好的性能，务必将这些值转换为称为*特征*的数字编码。

Neptune ML 在数据导出和数据处理步骤中执行特征提取和编码，如[Neptune ML 中的特征编码](machine-learning-feature-encoding.md)中所述。

对于属性图数据集，导出过程会自动推理字符串属性和包含多个值的数值属性的 `auto` 特征。对于包含单个值的数值属性，它会推理 `numerical` 特征。对于日期属性，它会推理 `datetime` 特征。

如果要覆盖自动推断的功能规范，或者要为属性添加存储桶数字、TF-IDF 或 SBERT 规范，则可以使用功能字段控制特征编码。 FastText

**注意**  
您只能使用 `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)
+ [property](#machine-learning-neptune_ml-features-property)
+ [类型](#machine-learning-neptune_ml-feature-types)
+ [norm](#machine-learning-neptune_ml-features-norm)
+ [language](#machine-learning-neptune_ml-features-language)
+ [max\$1length](#machine-learning-neptune_ml-features-max_length)
+ [分隔符](#machine-learning-neptune_ml-features-separator)
+ [range](#machine-learning-neptune_ml-features-range)
+ [bucket\$1cnt](#machine-learning-neptune_ml-features-bucket_cnt)
+ [slide\$1window\$1size](#machine-learning-neptune_ml-features-slide_window_size)
+ [imputer](#machine-learning-neptune_ml-features-imputer)
+ [max\$1features](#machine-learning-neptune_ml-features-max_features)
+ [min\$1df](#machine-learning-neptune_ml-features-min_df)
+ [ngram\$1range](#machine-learning-neptune_ml-features-ngram_range)
+ [datetime\$1parts](#machine-learning-neptune_ml-features-datetime_parts)

## 特征中的 node 字段
<a name="machine-learning-neptune_ml-features-node"></a>

`node` 字段指定特征顶点的属性图标签。例如：

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

如果顶点有多个标签，则使用数组来包含它们。例如：

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

## 特征中的 edge 字段
<a name="machine-learning-neptune_ml-features-edge"></a>

`edge` 字段指定特征边缘的边缘类型。边缘类型由一个数组组成，该数组包含源顶点的属性图标签、边缘的属性图标签和目标顶点的属性图标签。指定边缘特征时，必须提供所有三个值。例如：

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

如果边缘类型的源顶点或目标顶点有多个标签，请使用另一个数组来包含它们。例如：

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

## 特征中的 property 字段
<a name="machine-learning-neptune_ml-features-property"></a>

使用 property 参数指定由 `node` 参数标识的顶点的属性。例如：

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

## 特征的 type 字段的可能值
<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` and/or `slide_window_size`字段。

  请参阅[Neptune ML 中的桶数值特征](machine-learning-feature-encoding.md#machine-learning-bucket_numerical-features)。
+ **`"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`。

## norm 字段。
<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)。

## language 字段
<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\$1length 字段
<a name="machine-learning-neptune_ml-features-max_length"></a>

对于 `text_fasttext` 特征，`max_length` 字段是可选的，它指定输入文本特征中要编码的最大令牌数。长度大于 `max_length` 的输入文本会被截断。例如，将 max\$1length 设置为 128，表示将忽略文本序列中第 128 个之后的任何令牌：

```
"max_length": 128
```

## separator 字段
<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)。

## range 字段
<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\$1cnt 字段
<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\$1window\$1size 字段
<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\$1features 字段
<a name="machine-learning-neptune_ml-features-max_features"></a>

`text_tfidf` 特征可以选择使用此字段来指定要编码的最大术语数：

```
"max_features": 100
```

设置为 100 会导致 TF-IDF 向量器仅对 100 个最常见的术语进行编码。如果不包括 `max_features`，则默认值为 5000。

请参阅[Neptune ML 中文本特征的 TF-IDF 编码](machine-learning-feature-encoding.md#machine-learning-tfidf-features)。

## min\$1df 字段
<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\$1range 字段
<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\$1parts 字段
<a name="machine-learning-neptune_ml-features-datetime_parts"></a>

特征 `datetime` 可以选择使用此字段来指定对日期时间值的哪些部分进行分类编码：

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

如果不包括 `datetime_parts`，则默认情况下，Neptune ML 会对日期时间值的年、月、工作日和小时部分进行编码。值 `["weekday", "hour"]` 表示只应在该特征中对日期时间值的工作日和小时进行分类编码。

如果其中一个部分在训练集中没有多个唯一值，则不会对其进行编码。

请参阅[Neptune ML 中的日期时间特征](machine-learning-feature-encoding.md#machine-learning-datetime-features)。