“特征哈希”组件引用

本文介绍 Azure 机器学习设计器中包含的一个组件。

使用“特征哈希”组件将英语文本流转换为一组整数特征。 然后,可将此哈希处理的特征集传递给机器学习算法,以训练文本分析模型。

此组件中提供的特征哈希功能基于 nimbusml 框架。 有关详细信息,请参阅 NgramHash 类

什么是特征哈希处理?

特征哈希处理的工作原理是将唯一的标记转换为整数。 此功能针对作为输入提供的确切字符串运行,但不会执行任何语言分析或预处理。

例如,采用下面所示的一组简单句子,后接一个情绪评分。 假设你要使用此文本来生成模型。

用户文本 情绪
I loved this book 3
I hated this book 1
This book was great 3
I love books 2

“特征哈希”组件会在内部创建 n 元语法字典。 例如,此数据集的双元语法列表如下所示:

字词(双元语法) 频率
This book 3
I loved 1
I hated 1
I love 1

可以使用 N 元语法属性来控制 n 元语法的大小。 如果选择双元语法,则也会计算单元语法。 字典还包含如下所示的单个字词:

字词(单元语法) 频率
book 3
I 3
books 1
was 1

生成字典后,“特征哈希”组件会将字典术语转换为哈希值。 然后,它会计算某个特征是否已在每个案例中使用。 对于每个文本数据行,组件会输出一组列,每个哈希特征各输出一列。

例如,在哈希处理后,特征列可能如下所示:

Rating 哈希特征 1 哈希特征 2 哈希特征 3
4 1 1 0
5 0 0 0
  • 如果列中的值为 0,则行不包含哈希处理的特征。
  • 如果值为 1,则行包含该特征。

使用特征哈希处理可以将可变长度的文本文档表示为长度相等的数字特征向量,以化简维度。 如果已尝试按原样使用文本列进行训练,该列将被视为包含许多相异值的分类特征列。

通过数字输出还可以使用常用的机器学习方法,包括分类、聚类和信息检索。 由于查找操作可以使用整数哈希而不是字符串比较,因此获取特征权重也快得多。

配置“特征哈希”组件

  1. 在设计器中将“特征哈希”组件添加到管道。

  2. 连接包含要分析的文本的数据集。

    提示

    由于特征哈希处理不会执行词法操作(例如词干分析或截断),因此,在应用特征哈希处理之前预处理文本有时可以获得更好的结果。

  3. 将“目标列”设置为要转换成已哈希处理的特征的文本列。 请记住:

    • 列必须是字符串数据类型。

    • 选择多个文本列可能会对特征维度产生重大影响。 例如,10 位哈希的列数将从 1,024 个(单个列)变为 2,048 个(两个列)。

  4. 使用“哈希位大小”来指定创建哈希表时要使用的位数。

    默认的位大小为 10。 对于许多问题而言,此值已足够。 可能需要提供更多的空间来避免冲突,具体取决于训练文本中 n 元语法词汇的大小。

  5. 对于“N 元语法”,请输入一个数字,用于定义要添加到训练字典的 n 元语法的最大长度。 n 元语法是 n 个单词的序列,被视为唯一的单位。

    例如,如果输入 3,则将创建一元语法、双元语法和三元语法。

  6. 提交管道。

结果

处理完成后,组件将输出转换后的数据集,其中原始文本列已转换为多个列。 每个列代表文本中的一个特征。 根据字典的重要性,生成的数据集可能很大:

列名 1 列类型 2
USERTEXT 原始数据列
SENTIMENT 原始数据列
USERTEXT - 哈希特征 1 已哈希处理的特征列
USERTEXT - 哈希特征 2 已哈希处理的特征列
USERTEXT - 哈希特征 n 已哈希处理的特征列
USERTEXT - 哈希特征 1024 已哈希处理的特征列

创建已转换的数据集后,可以将其用作“训练模型”组件的输入。

最佳做法

以下最佳实践有助于充分利用“特征哈希”组件:

  • 请先添加“预处理文本”组件,再使用“特征哈希”预处理输入文本。

  • 在“特征哈希”组件之后添加“选择列”组件,以便从输出数据集中删除文本列。 生成哈希特征后,不需要文本列。

  • 考虑使用以下文本预处理选项来简化结果和提高准确度:

    • 断字
    • 删除干扰词
    • 大小写规范化
    • 删除标点符号和特殊字符
    • 词干

要在任意解决方案中应用的最佳预处理方法集取决于领域、词汇和业务需求。 请使用数据创建管道,以确定哪些文本处理方法最有效。

后续步骤

请参阅 Azure 机器学习可用的组件集