BlazingText 算法 - Amazon SageMaker

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

BlazingText 算法

Amazon SageMaker BlazingText 算法提供了 Word2vec 和文本分类算法的高度优化的实现。Word2vec 算法对很多下游自然语言处理 (NLP) 任务很有用,例如情感分析、命名实体识别、机器翻译等。对于执行 Web 搜索、信息检索、排名和文档分类的应用程序来说,文本分类是一项重要任务。

Word2vec 算法将单词映射到高质量的分布式向量。单词的结果向量表示被称为词嵌入。语义相似的单词对应于相近的向量。这样一来,词嵌入便能捕获单词之间的语义关系。

很多自然语言处理 (NLP) 应用程序通过对大量文档集进行训练来学习词嵌入。这些预训练的向量表示提供了有关语义和单词分布的信息,这些信息通常会改善稍后在更有限数量的数据上训练的其他模型的普遍性。Word2vec 算法的大多数实施未针对多核 CPU 架构进行优化。这使得难以扩展到大型数据集。

利用 BlazingText 算法,您可以轻松扩展到大型数据集。与 Word2vec 类似,它提供了 Skip-gram 和持续单词袋 (CBOW) 训练架构。BlazingText 实现的指导式多类、多标签文本分类算法扩展了 fastText 文本分类器,以将 GPU 加速与自定义 CUDA 内核配合使用。您可以使用多核 CPU 或 GPU 在几分钟内对超过 10 亿个单词的模型进行训练。而且,您获得的性能与最先进的深度学习文本分类算法相当。

BlazingText 算法不可并行化。有关训练相关参数的更多信息,请参阅。SageMaker 内置算法的 Docker 注册表路径.

SageMaker BlazingText 算法提供以下功能:

  • 使用高度优化的 CUDA 内核在多核 CPU 或 GPU 以及 GPU 上的 Word2Vec 上加速训练 fastText 文本分类器。有关更多信息,请参阅 。BlazingText:使用多个 GPU 扩展和加快 Word2VEC.

  • 通过学习字符 n-grams 的向量表示,丰富了包含子词信息的词向量。这种方法使 BlazingText 能够通过将其向量表示为字符 n-gram(子词)向量的总和来为词汇表以外 (OOV) 的单词生成有意义的向量。

  • Word2Vec 算法的 batch_skipgram mode,它允许跨多个 CPU 节点进行更快的训练和分布式计算。batch_skipgram mode 使用负采样共享策略进行小型批处理,将级别 1 BLAS 运算转换为级别 3 BLAS 运算。这有效地利用了现代架构的乘-加指令。有关更多信息,请参阅在共享和分布式内存中并行处理 Word2Vec

总而言之,BlazingText 在不同类型的实例上支持以下模式:

Modes

Word2Vec

(自主学习)

文本分类

(指导式学习)

单 CPU 实例

cbow

Skip-gram

Batch Skip-gram

supervised

单 GPU 实例(具有一个或多个 GPU)

cbow

Skip-gram

supervised(具有一个 GPU)

多个 CPU 实例

Batch Skip-gram

有关 BlazingText 背后数学的更多信息,请参阅。BlazingText:使用多个 GPU 扩展和加快 Word2VEC.

BlazingText 算法的输入/输出接口

BlazingText 算法需要一个带有空格分隔的标记的预处理文本文件。文件中的每一行都应包含一个句子。如果您需要训练多个文本文件,请将它们连接成一个文件并在相应的通道中上传该文件。

训练和验证数据格式

Word2Vec 算法的训练和验证数据格式

对于 Word2Vec 训练,在训练 通道下上传文件。不支持任何其他通道。文件中的每一行都应包含一个训练句子。

文本分类算法的训练和验证数据格式

对于指导式模式,您可以使用文件模式或增强清单文本格式进行训练。

使用文件模式进行训练

对于 supervised 模式,训练/验证文件应包含训练句子(一行一个)以及标签。标签是以字符串 __label__ 作为前缀的单词。以下是训练/验证文件的示例:

__label__4 linux ready for prime time , intel says , despite all the linux hype , the open-source movement has yet to make a huge splash in the desktop market . that may be about to change , thanks to chipmaking giant intel corp . __label__2 bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly as the indian skippers return to international cricket was short lived .
注意

句子中标签的顺序无关紧要。

在训练通道下上传训练文件,并可以选择在验证通道下上传验证文件。

使用增强清单文本格式进行训练

指导式模式还支持增强清单格式,这使您能够在管道模式下进行训练,而无需创建 RecordIO 文件。在使用此格式时,需要生成一个包含句子及其相应标签的列表的 S3 清单文件。清单文件格式应为 JSON 行格式,其中每行代表一个样本。使用 source 标签指定句子,并且可使用 label 标签指定标签。应在 AttributeNames 参数值下面提供 sourcelabel 标签,如请求中指定。

{"source":"linux ready for prime time , intel says , despite all the linux hype", "label":1} {"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label":2}

也可以通过指定标签的 JSON 数组来支持多标签训练。

{"source":"linux ready for prime time , intel says , despite all the linux hype", "label": [1, 3]} {"source":"bowled by the slower one again , kolkata , november 14 the past caught up with sourav ganguly", "label": [2, 4, 5]}

有关增强清单文件的更多信息,请参阅通过增强清单文件,将数据集元数据提供给训练作业

模型构件和推理

Word2Vec 算法的模型构件

对于 Word2Vec 训练,模型构件包含 vectors.txt(它包含单词到向量的映射)和 vectors.bin(BlazingText 用来托管和/或推理的二进制文件)。vectors.txt 以与 Gensim 和 Spacy 等其他工具兼容的格式存储向量。例如,Gensim 用户可以运行以下命令来加载 vectors.txt 文件:

from gensim.models import KeyedVectors word_vectors = KeyedVectors.load_word2vec_format('vectors.txt', binary=False) word_vectors.most_similar(positive=['woman', 'king'], negative=['man']) word_vectors.doesnt_match("breakfast cereal dinner lunch".split())

如果将评估参数设置为 True,则会创建另一个文件 eval.json。此文件包含 WS-353 数据集的相似性评估结果(使用 Spearman 的秩相关系数)。报告训练语料库中不存在的 WS-353 数据集中的单词的数量。

对于推理请求,模型接受一个包含字符串列表的 JSON 文件,并返回一个向量列表。如果在词汇表中找不到该单词,则推理返回零向量。如果在训练期间将子词设置为 True,则该模型能够为词汇表以外 (OOV) 的单词生成向量。

示例 JSON 请求

Mime 类型: application/json

{ "instances": ["word1", "word2", "word3"] }

文本分类算法的模型构件

使用指导式输出进行训练会创建一个 model.bin 文件,该文件可由 BlazingText 托管使用。对于推理,BlazingText 模型接受包含句子列表的 JSON 文件,并返回相应的预测标签和概率分数的列表。每个句子都应是一个字符串,其中包含空格分隔的标记和/或单词。

示例 JSON 请求

Mime 类型: application/json

{ "instances": ["the movie was excellent", "i did not like the plot ."] }

默认情况下,服务器仅返回一个预测,即概率最高的预测。要检索前 k 个预测,您可以在配置中设置 k,如下所示:

{ "instances": ["the movie was excellent", "i did not like the plot ."], "configuration": {"k": 2} }

对于 BlazingText, content-typeaccept 参数必须相等。对于批量转换,它们都需要是 application/jsonlines。如果它们不同,则将忽略 Accept 字段。输入的格式如下:

content-type: application/jsonlines {"source": "source_0"} {"source": "source_1"} if you need to pass the value of k for top-k, then you can do it in the following way: {"source": "source_0", "k": 2} {"source": "source_1", "k": 3}

输出的格式如下:

accept: application/jsonlines {"prob": [prob_1], "label": ["__label__1"]} {"prob": [prob_1], "label": ["__label__1"]} If you have passed the value of k to be more than 1, then response will be in this format: {"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]} {"prob": [prob_1, prob_2], "label": ["__label__1", "__label__2"]}

对于指导式(文本分类)模式和自主 (Word2Vec) 模式,BlazingText 生成的二进制文件 (*.bin) 可以由 fastText 交叉使用,反之亦然。您可以通过 fastText 使用由 BlazingText 生成的二进制文件。同样,您可以使用 BlazingText 托管使用 fastText 创建的模型二进制文件。

以下示例说明如何将 BlazingText 生成的模型与 fastText 结合使用:

#Download the model artifact from S3 aws s3 cp s3://<YOUR_S3_BUCKET>/<PREFIX>/model.tar.gz model.tar.gz #Unzip the model archive tar -xzf model.tar.gz #Use the model archive with fastText fasttext predict ./model.bin test.txt

但是,仅在 CPU 和单 GPU 上训练时支持二进制文件;在多 GPU 上训练时不会生成二进制文件。

有关数据集格式和模型托管的更多详细信息,请参阅示例笔记本使用 BlazingText 算法的文本分类FastText 模型使用 Word2Vec 算法生成子词嵌入

BlazingText 算法的 EC2 实例建议

对于 cbowskipgram 模式,BlazingText 支持单个 CPU 实例和单个 GPU 实例。这两种模式都支持学习 subwords 嵌入。为了在不影响准确性的情况下实现最高速度,我们建议您使用 ml.p3.2xlarge 实例。

对于 batch_skipgram 模式,BlazingText 支持单个或多个 CPU 实例。在多个实例上训练时,将传递给 CreateTrainingJobS3DataSource 对象的 S3DataDistributionType 字段的值设置为 FullyReplicated。BlazingText 负责跨计算机分布数据。

对于指导式文本分类模式,如果训练数据集小于 2 GB,则建议使用 C5 实例。对于较大的数据集,请使用具有单个 GPU 的实例(ml.p2.xlarge 或 ml.p3.2xlarge)。

BlazingText 示例笔记本

有关使用 SageMaker BlazingText 算法训练和部署指导式二进制文件和多类分类模型的示例笔记本,请参阅。dbpedia 数据集上的炽热文本分类. 有关创建和访问可用于在 SageMaker 中运行示例的 Jupyter 笔记本实例的说明,请参阅。使用 Amazon SageMaker 笔记本实例. 在创建并打开笔记本实例后,请选择SageMaker 示例选项卡可查看所有 SageMaker 示例的列表。使用 Blazing Text 的主题建模示例笔记本位于 Amazon 算法简介部分中。要打开笔记本,请选择其 Use (使用) 选项卡,然后选择 Create copy (创建副本)