JSON 训练数据配置文件的结构 - Amazon Neptune
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

JSON 训练数据配置文件的结构

训练配置文件是指由导出过程保存在 nodes/edges/ 文件夹中的 CSV 文件。

nodes/ 下的每个文件都存储有关具有相同属性图节点标签的节点的信息。节点文件中的每一列都存储节点 ID 或节点属性。文件的第一行包含一个标题,该标题为每列指定 ~id 或属性名称。

edges/ 下的每个文件都存储有关具有相同属性图边缘标签的节点的信息。节点文件中的每列都存储源节点 ID、目标节点 ID 或边缘属性。文件的第一行包含一个标题,该标题指定每列的 ~from~to 或属性名称。

训练数据配置文件包含三个顶级元素:

{ "version" : "v2.0", "query_engine" : "gremlin", "graph" : [ ... ] }
  • version –(字符串)正在使用的配置文件的版本。

  • query_engine –(字符串)用于导出图形数据的查询语言。目前,只有“gremlin”是有效的。

  • graph –(JSON 数组)列出一个或多个配置对象,这些对象包含将要使用的每个节点和边缘的模型参数。

    图形数组中的配置对象具有下一节中描述的结构。

graph 数组中列出的配置对象的内容

graph 数组中的配置对象可以包含三个顶级节点:

{ "edges" : [ ... ], "nodes" : [ ... ], "warnings" : [ ... ], }
  • edges –(JSON 对象数组)每个 JSON 对象指定一组参数,用于定义在模型处理和训练期间如何处理图形中的边缘。这仅用于 Gremlin 引擎。

  • nodes –(JSON 对象数组)每个 JSON 对象指定一组参数,用于定义在模型处理和训练期间如何处理图形中的节点。这仅用于 Gremlin 引擎。

  • warnings –(JSON 对象数组)每个对象都包含在数据导出过程中生成的警告。

edges 数组中列出的边缘配置对象的内容

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 文件的路径,该文件存储有关具有相同属性图标签的边缘的信息。

    该文件的第一行包含列标签的标题行。

    前两个列标签为 ~from~to。第一列(~from 列)存储边缘的起始节点的 ID,第二列(~to 列)存储边缘的结束节点的 ID。

    标题行中的其余列标签为剩下的每列指定边缘属性的名称,该属性的值已导出到该列中。

  • separator - 包含分隔该 CSV 文件中各列的分隔符的字符串。

  • source – 一个 JSON 数组,其中包含两个用于指定边缘的起始节点的字符串。第一个字符串包含存储起始节点 ID 的列的标题名称。第二个字符串指定节点类型。

  • relation – 一个 JSON 数组,其中包含两个用于指定边缘关系类型的字符串。第一个字符串包含存储关系名称 (relname) 的列的标题名称。第二个字符串包含关系名称的前缀 (prefixname)。

    完整的关系类型由两个字符串组合而成,它们之间有一个连字符,如下所示:prefixname-relname

    如果第一个字符串为空,则所有边缘都具有相同的关系类型,即 prefixname 字符串。

  • dest – 一个 JSON 数组,其中包含两个用于指定边缘的结束节点的字符串。第一个字符串包含存储结束节点 ID 的列的标题名称。第二个字符串指定节点类型。

  • features – 属性值特征对象的 JSON 数组。每个属性值特征对象包含以下字段:

    • 特征 – 由三个字符串组成的 JSON 数组。第一个字符串包含一列的标题名称,该列包含属性值。第二个字符串包含特征名称。第三个字符串包含特征类型。

    • norm –(可选)指定要应用于属性值的规范化方法。

  • labels – 一个由对象组成的 JSON 数组。其中的每个对象都定义了边缘的一个目标特征,并指定了训练和验证阶段应采用的边缘比例。每个对象都包含以下字段:

    • 标签 – 由两个字符串组成的 JSON 数组。第一个字符串包含一列的标题名称,该列包含目标特征属性值。第二个字符串指定以下目标任务类型之一:

      • "classification" – 边缘分类任务。由 label 数组中第一个字符串标识的列中提供的属性值被视为分类值。对于边缘分类任务,label 数组中的第一个字符串不能为空。

      • "regression" – 边缘回归任务。由 label 数组中第一个字符串标识的列中提供的属性值被视为数值。对于边缘回归任务,label 数组中的第一个字符串不能为空。

      • "link_prediction" – 链接预测任务。不需要任何属性值。对于链接预测任务,label 数组中的第一个字符串将被忽略。

    • split_rate – 一个 JSON 数组,包含三个介于零和一之间的数字,这些数字加起来为 1,分别表示训练、验证和测试阶段将使用的节点比例的估计值。可以定义此字段或 custom_split_filenames,但不能同时定义这两者。请参阅 split_rate

    • custom_split_filenames – 一个 JSON 对象,它为定义训练、验证和测试群体的文件指定文件名。可以定义此字段或 split_rate,但不能同时定义这两者。参阅 自定义训练-验证-测试比例 了解更多信息。

nodes 数组中列出的节点配置对象的内容

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– 包含两个字符串的 JSON 数组。第一个字符串包含存储节点 ID 的列的标题名称。第二个字符串指定图形中的节点类型,该类型对应于该节点的属性图标签。

  • features – 节点特征对象的 JSON 数组。请参阅在节点或边缘的 features 数组中列出的特征对象的内容

  • labels – 节点标签对象的 JSON 数组。请参阅节点 labels 数组中列出的节点标签对象的内容

在节点或边缘的 features 数组中列出的特征对象的内容

节点 features 数组中列出的节点特征对象可以包含以下顶级字段:

  • feature – 由三个字符串组成的 JSON 数组。第一个字符串包含一列的标题名称,该列包含特征的属性值。第二个字符串包含特征名称。

    第三个字符串包含特征类型。特征的 type 字段的可能值中列出了有效的特征类型。

  • norm – 此字段是数字特征的必需字段。它指定了一种用于数值的规范化方法。有效值为 "none""min-max" 和“standard”。有关详细信息,请参阅norm 字段

  • language – 语言字段指定文本属性值中使用的语言。它的用法取决于文本编码方法:

    • 对于 text_fasttext 编码,此字段为必需字段,并且必须指定以下语言之一:

      • en(英语)

      • zh(中文)

      • hi(印地语)

      • es(西班牙语)

      • fr(法语)

      但是,text_fasttext 无法同时处理多种语言。

    • 对于 text_sbert 编码,不使用此字段,因为 SBERT 编码是多语言的。

    • 对于 text_word2vec 编码,此字段是可选的,因为 text_word2vec 仅支持英语。如果存在,则它必须指定“英语”语言模型的名称:

      "language" : "en_core_web_lg"
    • 对于 tfidf 编码,不使用此字段。

  • max_length – 对于 text_fasttext 特征,此字段是可选字段,它指定输入文本特征中将要编码的最大令牌数。达到 max_length 后的输入文本将被忽略。例如,将 max_length 设置为 128 表示将忽略文本序列中第 128 个之后的任何令牌。

  • separator – 此字段可选择性地与 categorynumericalauto 特征一起使用。它指定一个字符,该字符可用于将一个属性值拆分为多个类别值或数值。

    请参阅separator 字段

  • range – 此字段是 bucket_numerical 特征的必需字段。它指定了要分成桶的数值范围。

    请参阅range 字段

  • bucket_cnt – 此字段是 bucket_numerical 特征的必需字段。它指定由 range 参数定义的数值范围应划分为的桶数。

    请参阅Neptune ML 中的桶数值特征

  • slide_window_size – 此字段可以选择与 bucket_numerical 特征一起使用,以便为多个桶分配值。

    请参阅slide_window_size 字段

  • imputer – 此字段可选择与 numericalbucket_numericaldatetime 特征一起使用,以提供一种用于填充缺失值的插补技术。支持的插补技术有 "mean""median""most_frequent"

    请参阅imputer 字段

  • max_featurestext_tfidf 特征可以选择使用此字段来指定要编码的最大术语数。

    请参阅max_features 字段

  • min_dftext_tfidf 特征可以选择使用此字段来指定要编码的术语的最小文档频率

    请参阅min_df 字段

  • ngram_rangetext_tfidf 特征可以选择使用此字段来指定一系列字词或令牌,这些字词或令牌被视为要编码的潜在单个术语

    请参阅ngram_range 字段

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

    请参阅datetime_parts 字段

节点 labels 数组中列出的节点标签对象的内容

节点 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 – 包含两个字符串的 JSON 数组。第一个字符串包含一列的标题名称,该列存储特征的属性值。第二个字符串指定目标任务类型,可以是:

    • "classification" – 节点分类任务。指定列中的属性值用于创建分类特征。

    • "regression" – 节点回归任务。指定列中的属性值用于创建数值特征。

  • split_rate – 一个 JSON 数组,包含三个介于零和一之间的数字,这些数字加起来为 1,分别表示训练、验证和测试阶段将使用的节点比例的估计值。请参阅split_rate

  • custom_split_filenames – 一个 JSON 对象,它为定义训练、验证和测试群体的文件指定文件名。可以定义此字段或 split_rate,但不能同时定义这两者。参阅 自定义训练-验证-测试比例 了解更多信息。

  • separator – 包含分隔符的字符串,分隔符用于分隔分类任务的分类特征值。

注意

如果没有为边缘和节点提供标签对象,则会自动假定该任务是链接预测,并且边缘会随机拆分成 90% 用于训练,10% 用于验证。

自定义训练-验证-测试比例

默认情况下,Neptune ML 使用 split_rate 参数,通过在此参数中定义的比例,将图形随机拆分为训练、验证和测试群体。为了更精确地控制在这些不同的群体中使用哪些实体,可以创建显式定义它们的文件,然后可以编辑训练数据配置文件以将这些索引文件映射到各个群体。此映射由训练配置文件中 custom_split_filesnames 键的 JSON 对象指定。如果使用此选项,则必须为 trainvalidation 键提供文件名,而对于 test 键是可选的。

这些文件的格式应与 Gremlin 数据格式相匹配。具体而言,对于节点级任务,每个文件都应包含一列,其 ~id 标题中列出了节点 ID;对于边缘级任务,文件应分别指定 ~from~to 以指明边缘的源节点和目标节点。这些文件需要放在与用于数据处理的导出数据相同的 Amazon S3 位置(请参阅:outputS3Path)。

对于属性分类或回归任务,这些文件可以选择为机器学习任务定义标签。在这种情况下,文件需要有一个属性列,其标题名称与在训练数据配置文件中定义的名称相同。如果在导出的节点和边缘文件以及自定义拆分文件中都定义了属性标签,则优先考虑自定义拆分文件。