亚马逊海王星机器学习 是一种机器学习 (ML) 能力 亚马逊海王星 这可以帮助您对图形数据进行准确和快速的预测。 在后台,Neptune ML 使用图神经网络 (GNN) 同时利用图结构和节点/边缘属性来解决手头的任务。 传统方法要么只使用属性而不使用图结构(例如,XGBoost、神经网络),要么只使用图结构而不使用属性(例如,node2vec、标签传播)。 为了更好地操作节点/边属性,机器学习算法要求数据是表现良好的数值数据,但数据库中的原始数据可以有其他类型,如原始文本。 为了利用这些其他类型的数据,我们需要专门的处理步骤,将它们从原生类型转换为数值数据,而机器学习结果的质量很大程度上取决于这些数据转换的质量。 原始文本(如句子)是最难转换的类型之一,但自然语言处理 (NLP) 领域的最新进展导致了可以处理来自多种语言和各种长度的文本的强大方法。
从版本 1.1.0.0 开始,Neptune ML 支持 多个文本编码器 (文本_fasttext, 文本_sbert, 文本_word2vec及 文本_tfidf),这带来了 NLP 最新进展的好处,并支持多语言文本属性以及围绕语言和文本长度的额外推理要求。 例如,在一个职位推荐用例中,不同国家的职位职位可以用不同的语言描述,职位描述的长度差异很大。 此外,Neptune ML 支持 汽车 根据数据中文本特征的特征自动选择最佳编码方法的选项。
在这篇文章中,我们说明了每种文本编码器的用法,比较了它们的优缺点,并展示了如何为工作推荐任务选择正确的文本编码器的示例。
什么是文本编码器?
文本编码的目标是将 Neptune 中基于文本的边缘/节点属性转换为固定大小的向量,以便在下游机器学习模型中用于节点分类或链接预测任务。 文本特征的长度可以变化很大。 它可以是一个单词、短语、句子、段落,甚至是一个包含多个句子的文档(在 Neptune 中单个属性的最大大小为 55 MB)。 此外,文本特征可以是不同的语言。 也可能有句子包含几种不同语言的单词,我们将其定义为 代码转换.
从 1.1.0.0 版本开始,Neptune ML 允许您从多种不同的文本编码器中进行选择。 每个编码器的工作方式略有不同,但具有相同的目标,即将 Neptune 中的文本值字段转换为固定大小的向量,我们使用该向量来使用 Neptune ML 构建 GNN 模型。 新的编码器如下:
- 文本_fasttext (新)——用途 快速文本 编码。 FastText 是一个用于高效文本表示学习的库。
text_fasttext
推荐用于使用 fastText 支持的五种语言(英语、中文、印地语、西班牙语和法语)中的一种且仅一种的功能。 这text_fasttext
方法可以选择采用max_length
字段,它指定将被编码的文本属性值中的最大标记数,之后将截断字符串。 你可以把一个记号当作一个词。 当文本属性值包含长字符串时,这可以提高性能,因为如果max_length
未指定时,fastText 对所有标记进行编码,而不管字符串长度如何。 - 文本_sbert (新)- 使用句子 BERT (斯伯特) 编码方式。 SBERT 是一种使用上下文表示学习模型 BERT-Networks 的句子嵌入方法。
text_sbert
当语言不受支持时,建议使用text_fasttext
. Neptune 支持两种 SBERT 方法:text_sbert128
,如果您只指定,这是默认值text_sbert
及text_sbert512
. 它们之间的区别是文本属性中被编码的最大标记数。 这text_sbert128
encoding 仅编码前 128 个标记,而text_sbert512
编码多达 512 个令牌。 结果,使用text_sbert512
可能需要更多的处理时间text_sbert128
. 两种方法都比text_fasttext
. - 文本_word2vec -用途 词向量 最初由 Google 发布的用于对文本进行编码的算法。 Word2Vec 仅支持英文。
- 文本_tfidf – 使用词频-逆文档频率 (特遣部队) 用于编码文本的矢量化器。 TF-IDF 编码支持其他编码不支持的统计特性。 它量化了所有其他节点中一个节点属性中单词的重要性或相关性。
需要注意的是 text_word2vec
和 text_tfidf
以前支持和新方法 text_fasttext
和 text_sbert
推荐使用旧方法。
不同文本编码器的比较
下表显示了所有支持的文本编码选项的详细比较(text_fasttext
, text_sbert
及 text_word2vec
). text_tfidf
不是基于模型的编码方法,而是基于计数的度量,用于评估标记(例如,单词)与其他节点或边缘中的文本特征的相关性,因此我们不包括 text_tfidf
进行比较。 我们建议使用 text_tfidf
当您想量化一个节点或边缘属性中的某些单词在所有其他节点或边缘属性中的重要性或相关性时。)
. | . | 文本_fasttext | 文本_sbert | 文本_word2vec |
模型能力 | 支持的语言 | 英语、中文、印地语、西班牙语和法语 | 超过50种语言 | 英语 |
可以对包含不同语言单词的文本属性进行编码 | 没有 | Yes | 没有 | |
最大长度支持 | 没有最大长度限制 | 对最大长度为 128 和 512 的文本序列进行编码 | 没有最大长度限制 | |
时间成本 | 装载 | 约 10 秒 | 约 2 秒 | 约 2 秒 |
推理 | 快速 | 放慢 | 中 |
请注意以下使用提示:
- 对于英语、中文、印地语、西班牙语和法语的文本属性值,
text_fasttext
是推荐的编码。 但是,它不能处理同一个句子包含多于一种语言的单词的情况。 对于五种以外的其他语言fastText
支持,使用text_sbert
编码。 - 如果您有许多属性值文本字符串长于(例如,120 个标记),请使用
max_length
字段来限制每个字符串中的标记数text_fasttext
编码。
总而言之,根据您的用例,我们推荐以下编码方法:
- 如果您的文本属性使用五种支持的语言之一,我们建议使用
text_fasttext
由于它的快速推断。text_fasttext
是推荐的选择,您也可以使用text_sbert
在以下两个例外中。 - 如果您的文本属性使用不同的语言,我们建议使用
text_sbert
因为它是唯一支持的方法,可以对包含多种不同语言的单词的文本属性进行编码。 - 如果您的文本属性使用的语言不是五种支持的语言之一,我们建议使用
text_sbert
因为它支持50多种语言。 - 如果文本属性的平均长度超过 128,请考虑使用
text_sbert512
ortext_fasttext
. 这两种方法都可以使用编码更长的文本序列。 - 如果您的文本属性只有英文,您可以使用
text_word2vec
,但我们建议使用text_fasttext
因为它的快速推理。
用例演示:工作推荐任务
工作推荐任务的目标是根据用户之前的申请、人口统计信息和工作历史来预测用户将申请哪些工作。 这篇文章使用 一个开放的 Kaggle 数据集. 我们将数据集构建为三节点类型图: 工作, 用户及 市.
一份工作的特点是它的头衔、描述、要求、所在城市和州。 用专业、学位类型、工作经历的数量、工作经验的总年数等属性来描述用户。 对于这个用例,职位、职位描述、职位要求和专业都是文本形式的。
在数据集中,用户具有以下属性:
- 州/领地 – 例如,CA 或广东省(中文)
- 重大的 – 例如,人力资源管理或 Lic Cytura Fisica(西班牙语)
- 学位类型 – 例如,学士、硕士、博士或无
- 工作历史计数 – 例如,0、1、16 等
- 总年经验 – 例如,0.0、10.0 或 NAN
作业具有以下属性:
- 标题 – 例如,行政助理或 Lic Cultura Física(西班牙语)。
- 产品描述 – 例如,“这个行政助理职位负责在通信领域执行各种文书和行政支持职能,……”描述中的平均字数约为 192.2。
- 岗位要求 – 例如,“工作要求: 1. 注重细节; 2.能够在快节奏的环境中工作;3.发票……”
- 州/领地: – 例如,CA、NY 等。
节点类型 市 像华盛顿特区和佛罗里达州奥兰多只有每个节点的标识符。 在下一节中,我们将分析不同文本特征的特征,并说明如何为不同的文本属性选择合适的文本编码器。
如何选择不同的文本编码器
对于我们的示例, 重大的 和 标题 属性具有多种语言并且具有短文本序列,因此 text_sbert
被推荐。 的示例代码 导出参数 如下。 为了 text_sbert
类型,没有其他参数字段。 我们在这里选择 text_sbert128
以外 text_sbert512
, 因为文本长度相对比 128 短。
产品描述 和 岗位要求 属性通常是长文本序列。 描述的平均长度约为 192 个单词,比 text_sbert
(128)。 我们可以用 text_sbert512
,但可能会导致推理速度变慢。 此外,文本使用单一语言(英语)。 因此,我们推荐 text_fasttext
与 en 语言价值,因为它的快速推理和不受输入长度限制。 的示例代码 导出参数 如下。 这 text_fasttext
可以使用自定义编码 语言 和 最长长度。 该 language
值是必需的,但 max_length
是可选的。
有关工作推荐用例的更多详细信息,请参见 海王星笔记本教程.
出于演示目的,我们选择一位用户,即用户 443931,他拥有“管理与人力资源”硕士学位。 该用户已申请了五个不同的职位,分别为“人力资源 (HR) 经理”、“HR 通才”、“人力资源经理”、“人力资源管理员”和“高级薪资专员”。 为了评估推荐任务的性能,我们删除了用户 50% 的申请职位(边缘)(这里我们删除了“Human Resources Administrator”和“Human Resources (HR) Manager)并尝试预测 top该用户最有可能申请的 10 个工作。
在对工作特征和用户特征进行编码后,我们通过训练关系图卷积网络 (RGCN) 模型来执行链接预测任务。 训练 Neptune ML 模型需要三个步骤:数据处理、模型训练和端点创建。 创建推理端点后,我们可以为用户 443931 提出建议。从预测的用户 10 的前 443931 个职位(即“HR Generalist”、“Human Resources (HR) Manager”、“Senior Payroll Specialist”、“Human Resources Administrator”、“HR Analyst”等),我们观察到这两个被删除的工作在 10 个预测中。
结论
在这篇文章中,我们展示了 Neptune ML 中新支持的文本编码器的用法。 这些文本编码器使用简单,可以支持多种需求。 总之,
- 对于使用 text_fasttext 支持的五种语言中的一种且仅一种的功能,建议使用 text_fasttext。
- 对于 text_fasttext 不支持的文本,建议使用 text_sbert。
- text_word2vec 只支持英文,在任何场景下都可以用 text_fasttext 代替。
有关解决方案的更多详细信息,请参阅 GitHub回购. 我们建议在图形数据上使用文本编码器以满足您的要求。 您可以只选择一个编码器名称并设置一些编码器属性,同时保持 GNN 模型不变。
关于作者
张佳妮 是 AWS AI Research and Education (AIRE) 的应用科学家。 她致力于使用机器学习算法解决现实世界的应用程序,尤其是自然语言和图形相关问题。