

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

# BlazingText 算法
<a name="blazingtext"></a>

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

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

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

使用该 BlazingText 算法，您可以轻松扩展到大型数据集。与 Word2vec 类似，它提供 Skip-Gram 和连续 bag-of-words (CBOW) 训练架构。 BlazingText[实现了监督式多类、多标签文本分类算法，将 FastText 文本分类器扩展为在自定义 CUDA 内核中使用 GPU 加速。](https://docs.nvidia.com/cuda/index.html)您可以使用多核 CPU 或 GPU 在几分钟内对超过 10 亿个单词的模型进行训练。而且，您可以获得与 state-of-the-art深度学习文本分类算法相当的性能。

该 BlazingText 算法不可并行化。有关训练相关参数的更多信息，请参阅[ SageMaker 内置算法的 Docker 注册表路径](https://docs.aws.amazon.com/en_us/sagemaker/latest/dg/sagemaker-algo-docker-registry-paths.html)。

 A SageMaker I BlazingText 算法提供以下功能：
+ 使用高度优化的 CUDA 内核加速多核 CPUs 或 GPU 上的 FastText 文本分类器和 Word2Vec 的训练。 GPUs 有关更多信息，请参阅 [BlazingText：使用多个缩放和加速 Word2Vec](https://dl.acm.org/citation.cfm?doid=3146347.3146354)。 GPUs
+ 通过学习字符 n-grams 的向量表示，[丰富了包含子词信息的词向量](https://arxiv.org/abs/1607.04606)。这种方法允许通过 BlazingText 将单词的向量表示为字符 n-gram out-of-vocabulary（子词）向量的总和，从而为（OOV）单词生成有意义的向量。
+ Word2Vec 算法的 `batch_skipgram` `mode`，它允许跨多个 CPU 节点进行更快的训练和分布式计算。`batch_skipgram` `mode` 使用负采样共享策略进行小型批处理，将级别 1 BLAS 运算转换为级别 3 BLAS 运算。这有效地利用了现代架构的乘-加指令。有关更多信息，请参阅[在共享和分布式内存中并行处理 Word2Vec](https://arxiv.org/pdf/1604.04661.pdf)。

总而言之，不同类型的实例支持以下模式： BlazingText 


| 模式 |  Word2Vec （自主学习）  |  文本分类 （指导式学习）  | 
| --- | --- | --- | 
|  单 CPU 实例  |  `cbow` `Skip-gram` `Batch Skip-gram`  |  `supervised`  | 
|  单个 GPU 实例（有 1 个或更多 GPUs）  |  `cbow` `Skip-gram`  |  `supervised`（具有一个 GPU）  | 
|  多个 CPU 实例  | Batch Skip-gram  | 无 | 

有关背后数学的更多信息 BlazingText，请参阅 [BlazingText：使用多重缩放和加速 Word2Vec](https://dl.acm.org/citation.cfm?doid=3146347.3146354)。 GPUs

**Topics**
+ [算法的输入/输出接口 BlazingText](#bt-inputoutput)
+ [该 BlazingText 算法的 EC2 实例推荐](#blazingtext-instances)
+ [BlazingText 示例笔记本](#blazingtext-sample-notebooks)
+ [BlazingText 超参数](blazingtext_hyperparameters.md)
+ [调整 BlazingText 模型](blazingtext-tuning.md)

## 算法的输入/输出接口 BlazingText
<a name="bt-inputoutput"></a>

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

### 训练和验证数据格式
<a name="blazingtext-data-formats"></a>

#### Word2Vec 算法的训练和验证数据格式
<a name="blazingtext-data-formats-word2vec"></a>

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

#### 文本分类算法的训练和验证数据格式
<a name="blazingtext-data-formats-text-class"></a>

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

##### 使用文件模式进行训练
<a name="blazingtext-data-formats-text-class-file-mode"></a>

对于`supervised`模式， training/validation 文件应每行包含一个训练句子以及标签。标签是以字符串 *\$1\$1label\$1\$1* 作为前缀的单词。以下是一个 training/validation 文件示例：

```
__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 .
```

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

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

##### 使用增强清单文本格式进行训练
<a name="blazingtext-data-formats-text-class-augmented-manifest"></a>

适用于 CPU 实例的有监督式模式还支持增强清单格式，这使您能够在管道模式下进行训练，而无需创建 RecordIO 文件。在使用此格式时，需要生成一个包含句子及其相应标签的列表的 S3 清单文件。清单文件格式应为 [JSON 行](http://jsonlines.org/)格式，其中每行代表一个样本。使用 `source` 标签指定句子，并且可使用 `label` 标签指定标签。应在 `AttributeNames` 参数值下面提供 `source` 和 `label` 标签，如请求中指定。

```
{"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]}
```

有关增强清单文件的更多信息，请参阅[训练作业中的增强清单文件](augmented-manifest.md)。

### 模型构件和推理
<a name="blazingtext-artifacts-inference"></a>

#### Word2Vec 算法的模型构件
<a name="blazingtext--artifacts-inference-word2vec"></a>

对于 Word2Vec 训练，模型工件包括 *vectors.txt*（包含 words-to-vectors映射）和 *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`在训练期间将子词设置为，则模型能够为 out-of-vocabulary (OOV) 单词生成向量。

##### 示例 JSON 请求
<a name="word2vec-json-request"></a>

Mime 类型：` application/json`

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

#### 文本分类算法的模型构件
<a name="blazingtext-artifacts-inference-text-class"></a>

使用受监督的输出进行训练会创建一个 *model.bin* 文件，该文件可供 BlazingText 托管使用。为了进行推理， BlazingText模型接受包含句子列表的 JSON 文件，并返回相应的预测标签和概率分数列表。每个句子都应是一个字符串，其中包含空格分隔的令牌和/或单词。

##### 示例 JSON 请求
<a name="text-class-json-request"></a>

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-type`和`accept`参数必须相等。对于批量转换，它们都需要是 `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）模式，FastText BlazingText 可以交叉使用生成的二进制文件（*\$1.bin*），反之亦然。你可以使用 FastText 生成的 BlazingText 二进制文件。同样，您可以使用托管使用 FastT BlazingText ext 创建的模型二进制文件。

以下是如何使用通过 FastText 生成的模型 BlazingText 的示例：

```
#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 算法的 EC2 实例推荐
<a name="blazingtext-instances"></a>

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

对于`batch_skipgram`模式， BlazingText 支持单个或多个 CPU 实例。在多个实例上训练时，请设置传递[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateTrainingJob.html)给的[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_S3DataSource.html)对象的`S3DataDistributionType`字段值`FullyReplicated`。 BlazingText负责在计算机之间分配数据。

对于指导式文本分类模式，如果训练数据集小于 2 GB，则建议使用 C5 实例。对于较大的数据集，请使用具有单个 GPU 的实例。 BlazingText 支持 P2、P3、G4dn 和 G5 实例进行训练和推理。

## BlazingText 示例笔记本
<a name="blazingtext-sample-notebooks"></a>

有关训练和部署 SageMaker AI BlazingText 算法以生成词向量的示例笔记本，请参阅使用[学习 Word2Vec 单词](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/blazingtext_word2vec_text8/blazingtext_word2vec_text8.html)表示法。 BlazingText有关创建和访问可用于在 SageMaker AI 中运行示例的 Jupyter 笔记本实例的说明，请参阅。[Amazon SageMaker 笔记本实例](nbi.md)创建并打开笔记本实例后，选择 **SageMaker AI 示例**选项卡以查看所有 SageMaker AI 示例的列表。使用 Blazing Text 的主题建模示例笔记本位于 **Amazon 算法简介**部分中。要打开笔记本，请选择其 **Use (使用)** 选项卡，然后选择 **Create copy (创建副本)**。