本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
Neptune ML 中的功能编码
属性值有不同的格式和数据类型。为了在机器学习中实现良好的性能,必须将这些值转换为称为数字编码功能.
作为数据导出和数据处理步骤的一部分,Neptune ML 使用此处介绍的特征编码技术执行特征提取和编码。
如果您计划在自定义模型实现中实现自己的特征编码,则可以通过选择以下方法在数据预处理阶段禁用自动特征编码:none
作为功能编码类型。然后,该节点或边缘属性上不会进行任何要素编码,而是解析原始属性值并将其保存在字典中。数据预处理仍然会根据导出的数据集创建 DGL 图形,但构造的 DGL 图没有用于训练的预处理功能。
只有在计划作为自定义模型训练的一部分执行自定义功能编码时,才应使用此选项。有关更多信息,请参阅 Neptune ML 中的自定义模型。
Neptune ML 中的分类功能
可以从固定的可能值列表中获取一个或多个不同值的属性是一种分类功能。在 Neptune ML 中,分类要素是使用一热编码
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 中的数字特征
任何值为实数的属性都可以在 Neptune ML 中编码为数字要素。数值要素使用浮点数编码。
您可以指定在编码数字要素时使用的数据规范化方法,如下所示:"norm": "
. 支持以下标准化技术:normalization technique
"
-
“无”— 在编码过程中不要对数值进行标准化。
-
“最小-最大”— 通过从每个值中减去最小值,然后除以最大值和最小值之间的差值来标准化每个值。
-
“标准”— 通过将每个值除以所有值的总和来标准化每个值。
Neptune ML 中的存储桶数值功能
您可以将数值压缩为类别,而不是使用原始数字表示数字属性。例如,您可以将人们的年龄划分为类别,例如孩子(0-20 岁)、年轻人(20-40 岁)、中年人(40-60 岁)和长者(60 岁起)。使用这些数字存储桶,您将把数字属性转换为一种类别功能。
在 Neptune ML 中,您可以将数字属性编码为存储桶数值功能,必须提供两件事:
表格中的数字范围,
"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
到该范围涵盖的每个存储桶。
最后,您还可以选择提供一种填写数字要素和存储桶数值要素缺失值的方法。你可以使用此操作
"imputer": "
,归因技术是其中之一imputation technique
""mean"
、"median"
,或者"most-frequent"
. 如果您没有指定计算机,则缺失值可能会导致处理中断。
Neptune ML 中的文本要素编码
对于自由格式文本,Neptune ML 可以使用几种不同的模型将属性值字符串中的令牌序列转换为固定大小的实值矢量:
text_fasttext— 使用fastText
编码。对于使用 fastText 支持的五种语言中的一种而且仅使用其中一种的功能,建议使用这种编码。 text_sbert— 使用句子 BERT
(SBERT)编码模型。这是对文本的推荐编码 text_fasttext
不支持。text_word2vec— 使用Word2Vec
最初发布的算法谷歌 对文本进行编码。Word2VEC 只支持英语。 text_tfidf— 使用术语频率 — 反向文档频率
用于编码文本的(TF-IDF)矢量器。TF-IDF 编码支持其他编码不支持的统计功能。
fastText在 Neptune ML 中编码文本属性值
Neptune ML 可以使用fastText
en
(英语)zh
(中文)hi
(印地语)es
(西班牙语)fr
(法语)
请注意,fastText 无法处理包含多种语言单词的句子。
这些区域有:text_fasttext
方法可以选择采取max_length
字段,该字段指定将编码的 text 属性值中的最大标记数,之后字符串将被截断。当 text 属性值包含长字符串时,这可以提高性能,因为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 中文本要素的句子 BERT (SBERT) 编码
Neptune ML 可以使用以下方法将字符串属性值中的令牌序列转换为固定大小的实值矢量句子 BERTtext_sbert128
如果您只指定,则默认设为默认设值text_sbert
, 和text_sbert512
. 两者之间的区别在于编码的 text 属性值字符串的最大长度。这些区域有:text_sbert128
编码在对 128 个令牌进行编码后截断文本字符串,而text_sbert512
在编码 512 个令牌后截断文本字符串。因此,text_sbert512
需要的处理时间长于text_sbert128
. 两种方法都比慢text_fasttext
.
SBERT 编码是多语言的,因此无需为正在编码的属性值文本指定语言。SBERT 支持多种语言,并且可以对包含多种语言的句子进行编码。如果要对包含 fastText 不支持的一种或多种语言的文本的属性值进行编码,则推荐使用 SBERT 编码方法。
以下示例指定电影标题编码为 SBERT,最多 128 个令牌:
{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_sbert128"] } ] }
Neptune ML 中文本要素的 Word2VEC 编码
Neptune ML 可以将字符串属性值编码为 Word2VEC 功能(Word2Vc 算法text_word2vec
方法使用其中一个将字符串中的标记编码为密集向量SPacy 训练模型
以下示例指定电影标题使用 Word2Vec 进行编码:
{ "file_name" : "nodes/movie.csv", "separator" : ",", "node" : ["~id", "movie"], "features" : [ { "feature": ["title", "title", "text_word2vec"], "language": "en_core_web_lg" } ] }
请注意,语言字段是可选的,因为英语en_core_web_lg
模型是 Neptune 唯一支持的模型。
Neptune ML 中的文本要素的 TF-IDF 编码
Neptune ML 可以将文本属性值编码为text_tfidf
功能。此编码将文本中的单词序列转换为数字矢量,使用术语频率 — 反向文档频率
TF-IDF
例如,如果在给定的电影标题中出现两次 “吻” 一词(比如 “亲吻砰砰”),并且 “吻” 一共出现在 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 中的日期时间功能
Neptune ML 可以转换部分datetime
通过将属性值编码为一热阵列datetime_parts
参数指定以下一个或多个要编码的部分:["year", "month", "weekday", "hour"]
. 如果你没设置datetime_parts
,默认情况下,所有四个部分都已编码。
例如,如果日期时间值的范围跨越 2010 年至 2012 年,则日期时间条目的四个部分2011-04-22 01:16:34
如下所示:
-
年–
[0, 1, 0]
.由于跨度只有 3 年(2010 年、2011 年和 2012 年),因此单热阵列有三个条目,每年一个条目。
-
月–
[0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0]
.在这里,单热阵列在一年中的每个月都有一个条目。
-
工作日–
[0, 0, 0, 0, 1, 0, 0]
.ISO 8601 标准规定,周一是一周的第一天,由于 2011 年 4 月 22 日是星期五,相应的一个热点工作日阵列处于第五位。
-
小时–
[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 AM 设置在 24 个成员的单热阵列中。
月中的第一天、分钟和秒没有完全编码。
如果总计datetime
有问题的范围只包括一年内的日期,不year
数组已编码。
你可以指定估算策略来填补缺失datetime
值,使用imputer
参数以及可用于数值要素的策略之一。
Neptune ML 中的自动功能编码
您可以设置,而不是手动指定要用于图表中的属性的要素编码方法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,即英语、中文、印地语、西班牙语和法语,然后 Neptune ML 使用
text_fasttext
对文本进行编码。否则,Neptune ML 使用text_sbert.如果属性是未归类为文本要素的字符串,那么 Neptune ML 假定它是一个分类功能,并使用类别编码。
如果每个节点对于被推断为类别要素的属性都有自己的唯一值,那么 Neptune ML 将从训练图中删除该属性,因为它可能是一个 ID,对于学习而言无法提供信息。
-
如果已知属性包含有效的 Neptune 分隔符,例如分号 (“;”),那么 Neptune ML 只能将该属性视为
MultiNumerical
要么MultiCategorical
.Neptune ML 首先尝试将这些值编码为数字要素。如果成功,Neptune ML 将使用数字编码来创建数字矢量要素。
否则,Neptune ML 将这些值编码为多类别。
如果 Neptune ML 无法推断属性值的数据类型,那么 Neptune mlDrops 将从训练图中推断出属性。