

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

# 神经主题模型 (NTM) 算法


Amazon SageMaker AI NTM 是一种无监督学习算法，用于将文档语料库组织成包含基于统计分布的单词分组*的主题*。例如，如果文档包含诸如“自行车”、“汽车”、“火车”、“里程”和“速度”之类的频繁出现的单词，则文档可能共享关于“运输”的主题。主题建模可用于基于检测到的主题对文档进行分类或汇总，或者基于主题相似性检索信息或推荐内容。来自 NTM 学习的文档的主题被表征为*潜在表示*，因为主题是从语料库中观察到的单词分布推断出来的。主题的语义通常通过检查它们包含的最高排名词来推断。因为该方法是自主型的，所以只有主题的数量，而不是主题本身是预设的。此外，这些主题不能保证与人类自然地对文档进行分类的方式一致。

主题建模提供了一种根据所学主题可视化大型文档语料库内容的方法。与每个主题相关的文档可以根据其软主题标签进行索引或搜索。文档的潜在表示还可用于在主题空间中查找类似的文档。您还可以将主题模型学习的文档的潜在表示用于另一受监督算法 (如文档分类器) 的输入。因为预计文档的潜在表示会捕获底层文档的语义，所以部分基于这些表示的算法预计比仅基于词汇特征的算法表现更好。

尽管您可以同时使用 Amazon SageMaker AI NTM 和 LDA 算法进行主题建模，但它们是不同的算法，可以预期在相同的输入数据上产生不同的结果。

有关 NTM 背后的数学的更多信息，请参阅[文本处理的神经变分推理](https://arxiv.org/pdf/1511.06038.pdf)。

**Topics**
+ [

## NTM 算法的输入/输出接口
](#NTM-inputoutput)
+ [

## NTM 算法的 EC2 实例建议
](#NTM-instances)
+ [

## NTM 示例笔记本
](#NTM-sample-notebooks)
+ [

# NTM 超参数
](ntm_hyperparameters.md)
+ [

# 优化 NTM 模型
](ntm-tuning.md)
+ [

# NTM 响应格式
](ntm-in-formats.md)

## NTM 算法的输入/输出接口


Amazon SageMaker AI 神经主题模型支持四个数据通道：训练、验证、测试和辅助通道。验证、测试和辅助数据通道是可选的。如果您指定这些可选通道中的任何一个，则将这些通道的 `S3DataDistributionType` 参数值设置为 `FullyReplicated`。如果您提供验证数据，则会在每个纪元记录此数据的损失，一旦检测到验证损失未改善，模型就会停止训练。如果您不提供验证数据，算法将根据训练数据提早停止，但这可能会降低效率。如果您提供测试数据，则该算法将从最终模型中报告测试损失。

NTM 的训练、验证和测试数据通道同时支持 `recordIO-wrapped-protobuf`（密集和稀疏）和 `CSV` 文件格式。如果是 `CSV` 格式，对于不存在于相应文档中的单词，必须以零计数密集地表示每行，并且每行必须具有等于 (记录数) \$1 (词汇表大小) 的维度。您可以使用文件模式或管道模式，针对格式为 `recordIO-wrapped-protobuf` 或 `CSV` 的数据训练模型。辅助通道用于提供包含词汇表的文本文件。通过提供词汇文件，用户可以看到日志中打印的每个主题的热门单词，而不是它们的整数 IDs。使用词汇表文件，还允许 NTM 计算 Word 嵌入主题一致性 (WETC) 分数，这是一个在日志中显示的新指标，可以有效地捕获每个主题中顶级单词之间的相似性。辅助通道`ContentType`的顺序与数据中 IDs 提供的整数相对应，每行包含一个单词。`text/plain`词汇表文件必须命名为 `vocab.txt`，目前仅支持 UTF-8 编码。

对于推理，支持 `text/csv`、`application/json`、`application/jsonlines` 和 `application/x-recordio-protobuf` 内容类型。也可以为 `application/json` 和 `application/x-recordio-protobuf` 传递稀疏数据。NTM 推理返回 `application/json` 或 `application/x-recordio-protobuf` *预测*，其中包括每个观察的 `topic_weights` 向量。

有关使用辅助频道和WETC分数的更多详细信息，请参阅[博客文章](https://www.amazonaws.cn/blogs/machine-learning/amazon-sagemaker-neural-topic-model-now-supports-auxiliary-vocabulary-channel-new-topic-evaluation-metrics-and-training-subsampling/)。有关如何计算 WETC 分数的更多信息，请参阅[相干感知神经主题建模](https://arxiv.org/pdf/1809.02687.pdf)。我们在亚马逊 SageMaker 人工智能神经主题模型中使用了本论文中描述的配对 WETC。

有关输入和输出文件格式的更多信息，请参阅[NTM 响应格式](ntm-in-formats.md)（对于推理）和[NTM 示例笔记本](#NTM-sample-notebooks)。

## NTM 算法的 EC2 实例建议


NTM 训练支持 GPU 和 CPU 实例类型。我们推荐 GPU 实例，但是对于某些工作负载，CPU 实例可能会使训练成本降低。CPU 实例应足以进行推理。NTM 训练支持使用 P2、P3、G4dn 和 G5 GPU 实例系列进行训练和推理。

## NTM 示例笔记本
示例笔记本

有关使用 SageMaker AI NTM 算法从已知主题分布的合成数据源中发现文档中的主题的示例笔记本，请参阅 NTM [基本功能简介](https://sagemaker-examples.readthedocs.io/en/latest/introduction_to_amazon_algorithms/ntm_synthetic/ntm_synthetic.html)。有关如何创建和访问可用于在 SageMaker AI 中运行示例的 Jupyter 笔记本实例的说明，请参阅。[Amazon SageMaker 笔记本实例](nbi.md)创建并打开笔记本实例后，选择 “**SageMaker AI 示例**” 选项卡以查看所有 SageMaker AI 示例的列表。使用 NTM 算法的主题建模示例笔记本位于 **Amazon 算法简介**部分中。要打开笔记本，请单击**使用** 选项卡，然后选择**创建副本**。

# NTM 超参数
超参数

下表列出了您可以为 Amazon A SageMaker I 神经主题模型 (NTM) 算法设置的超参数。


| 参数名称 | 说明 | 
| --- | --- | 
|  `feature_dim`  |  数据集的词汇表大小。 **必填** 有效值：正整数 (最小值：1，最大值：1,000,000)  | 
| num\$1topics |  所需的主题数。 **必填** 有效值：正整数 (最小值：2，最大值：1000)  | 
| batch\$1norm |  在训练过程中是否使用批处理标准化。 **可选** 有效值：*true* 或 *false* 默认值：*false*  | 
| clip\$1gradient |  每个梯度组件的最大幅度。 **可选** 有效值：浮点型（最小值：1e-3） 默认值：无限  | 
| encoder\$1layers |  编码器中的层数和每个层的输出大小。当设置为 *auto* 时，算法使用各自大小为 3 x `num_topics` 和 2 x `num_topics` 的两个层。 **可选** 有效值：逗号分隔的正整数列表或 *auto* 默认值：*auto*  | 
| encoder\$1layers\$1activation |  要在编码器层中使用的激活函数。 **可选** 有效值： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/sagemaker/latest/dg/ntm_hyperparameters.html) 默认值：`sigmoid`  | 
| epochs |  扫描训练数据的最大次数。 **可选** 有效值：正整数（最小值：1） 默认值：50  | 
| learning\$1rate |  优化程序的学习率。 **可选** 有效值：浮点型（最小值：1e-6，最大值：1.0） 默认值：0.001  | 
| mini\$1batch\$1size |  每个小批量中的示例数。 **可选** 有效值：正整数 (最小值：1，最大值：10000) 默认值：256  | 
| num\$1patience\$1epochs |  计算提前停止标准所依据的连续纪元数。当损失函数的变化在最近 `num_patience_epochs` 个纪元内低于指定 `tolerance` 时，将触发提前停止。要禁用提早停止，请将 `num_patience_epochs` 设置为一个大于 `epochs` 的值。 **可选** 有效值：正整数（最小值：1） 默认值：3  | 
| optimizer |  用于训练的优化程序。 **可选** 有效值： [\[See the AWS documentation website for more details\]](http://docs.amazonaws.cn/sagemaker/latest/dg/ntm_hyperparameters.html) 默认值：`adadelta`  | 
| rescale\$1gradient |  梯度的缩放因子。 **可选** 有效值：浮点型（最小值：1e-3，最大值：1.0） 默认值：1.0  | 
| sub\$1sample |  每个纪元中要采样用于训练的训练数据的一部分。 **可选** 有效值：浮点型（最小值：0.0，最大值：1.0） 默认值：1.0  | 
| tolerance |  损失函数的最大相对变化。当损失函数的变化在最近 `num_patience_epochs` 个纪元内低于此值时，将触发提前停止。 **可选** 有效值：浮点型（最小值：1e-6，最大值：0.1） 默认值：0.001  | 
| weight\$1decay |   权重衰减系数。添加 L2 正则化。 **可选** 有效值：浮点型（最小值：0.0，最大值：1.0） 默认值：0.0  | 

# 优化 NTM 模型
模型优化

*自动模型优化*（也称作超参数优化）通过运行很多在数据集上测试一系列超参数的作业来查找模型的最佳版本。您可以选择可优化超参数、每个超参数的值范围和一个目标指标。您可以从算法计算的指标中选择目标指标。自动模型优化将搜索所选超参数以找到导致优化目标指标的模型的值组合。

Amazon SageMaker AI NTM 是一种无监督学习算法，可学习大量离散数据（例如文档语料库）的潜在表示形式。潜在表示使用未直接测量的推理变量来对数据集中的观察值进行建模。NTM 上的自动模型优化可帮助您找到最小化训练或验证数据损失的模型。*训练损失* 用于衡量模型适合训练数据的程度。*验证损失* 用于衡量模型可推广到未经过训练的数据的程度。低训练损失表明模型非常适合训练数据。低验证损失表明模型没有过拟合训练数据，因此应该能够对未经训练的文档成功进行建模。通常，两个损失最好都很小。但是，将训练损失降到最低可能会导致过拟合并增加验证损失，这会降低模型的通用性。

有关模型优化的更多信息，请参阅[使用 SageMaker AI 自动调整模型](automatic-model-tuning.md)。

## NTM 算法计算的指标
指标

NTM 算法报告在训练期间计算的单个指标：`validation:total_loss`。总损失是重建损失和 Kullback-Leibler 分歧的总和。优化超参数值时，请选择此指标作为目标。


| 指标名称 | 说明 | 优化方向 | 
| --- | --- | --- | 
| validation:total\$1loss |  验证集上的总损失  |  最小化  | 

## 可优化 NTM 超参数
可优化超参数

您可以优化 NTM 算法的以下超参数。通常设置低 `mini_batch_size` 和小 `learning_rate` 值会导致较低的验证损失，尽管它可能需要更长的时间来训练。低验证损失不一定产生人类解释的更连贯的主题。其他超参数对训练和验证损失的影响可能因数据集而异。要了解哪些值是兼容的，请参阅 [NTM 超参数](ntm_hyperparameters.md)。


| 参数名称 | 参数类型 | 建议的范围 | 
| --- | --- | --- | 
| encoder\$1layers\$1activation |  CategoricalParameterRanges  |  ['sigmoid'、'tanh'、'relu']  | 
| learning\$1rate |  ContinuousParameterRange  |  MinValue: 1e-4， MaxValue: 0.1  | 
| mini\$1batch\$1size |  IntegerParameterRanges  |  MinValue: 16, MaxValue :2048  | 
| optimizer |  CategoricalParameterRanges  |  ['sgd'、'adam'、'adadelta']  | 
| rescale\$1gradient |  ContinuousParameterRange  |  MinValue: 0.1， MaxValue: 1.0  | 
| weight\$1decay |  ContinuousParameterRange  |  MinValue: 0.0， MaxValue: 1.0  | 

# NTM 响应格式
推理格式

所有 Amazon SageMaker AI 内置算法都遵循通用[数据格式-推理中描述的通用输入推理格式](https://docs.amazonaws.cn/sagemaker/latest/dg/cdf-inference.html)。本主题包含 A SageMaker I NTM 算法的可用输出格式列表。

## JSON 响应格式


```
{
    "predictions":    [
        {"topic_weights": [0.02, 0.1, 0,...]},
        {"topic_weights": [0.25, 0.067, 0,...]}
    ]
}
```

## JSONLINES 响应格式


```
{"topic_weights": [0.02, 0.1, 0,...]}
{"topic_weights": [0.25, 0.067, 0,...]}
```

## RECORDIO 响应格式


```
[
    Record = {
        features = {},
        label = {
            'topic_weights': {
                keys: [],
                values: [0.25, 0.067, 0, ...]  # float32
            }
        }
    },
    Record = {
        features = {},
        label = {
            'topic_weights': {
                keys: [],
                values: [0.25, 0.067, 0, ...]  # float32
            }
        }
    }  
]
```