从文本中提取 N 元语法特征
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
创建 N 元语法字典功能,并基于它们进行功能选择
类别:文本分析
模块概述
本文介绍如何使用 机器学习 Studio (经典) 中的"从文本中提取 N 元语法特征"模块来特征化文本,并仅从长文本字符串中提取最重要的信息片段。
该模块的工作原理是,从指定为输入的一列自由文本创建 n 元语法字典。 该模块将各种信息指标应用于 n 元语法列表,以减少数据维数并识别信息值最多的 n 元语法。
如果已创建 n 元语法的词汇表,可以使用你选择的加权算法更新其统计信息,或采用新术语进行合并。
由于此模块支持 n 元语法中的功能化,因此在评分时也可使用。
如何配置从文本中提取 N 元语法特征
这些模块支持以下用于创建、更新或应用 n 元语法字典的方案:
你正在使用一列自由文本列开发一个新模型,并且想要完全基于输入数据提取文本特征。 请参阅说明。
你有一组现有的文本功能,并且想要通过处理新的文本输入来更新权重。 请参阅说明。
你正在从预测模型生成分数,需要在评分过程中生成文本输入并使用 n 元语法字典。 请参阅说明。
可以使用示例 试验进行 参考。
从文本列创建新的 n 元语法字典
将" 从文本中提取 N 元 语法特征"模块添加到试验,并连接包含要处理的文本的数据集。
对于 "文本列" ,请选择包含 要提取的文本的字符串类型的列。
默认情况下,模块选择所有字符串列。 但是,由于结果很详细,因此可能需要一次处理一列。
对于 "词汇模式", 选择 "创建"以指示要创建 n 元语法特征的新列表。
若要了解如何更新现有的 n 元语法特征集,请参阅 此部分。
对于 N 元语法大小,请键入一个数字,指示要提取和存储的 n 元语法的最大大小。
例如,如果键入
3
,将创建 unigram、bigrams 和三元组。对于 K-Skip 大小,键入识别 n 元语法变体时可能不同的最大字符数。 如果 k 的值设置为 0,则只能从唯一的连续字符序列创建 n 元语法。
例如,假定字典包含单报"computer"。 k 值为 0 意味着"computer"是唯一有效的单报。 如果将 k 的值增大为 1,可以跳过一个中间字符,这样你可找到更多类似的序列。 k 值为 1 的 skip-gram 与 0-k unigram 相差 1 个字符。 因此,skip-gram"conputer"和"compuuter"都被视为与"computer"相同的字典条目的一部分。 将 k 值 设置为 2 将匹配更不同的单词。
要详细了解如何在文本分析中使用 skip-gram,请参阅以下文章:监督式词法规范化的候选生成和特征 工程
只有在合并 或更新词汇时,才需要选项 Weighting 函数。 它指定如何对两个词汇中的术语及其分数进行加权。
对于 "最小单词长度",键入可分析的字符串的最小单词长度。
例如,假设最小单词长度设置为 3 (默认值) ,并且有一个输入包含单个单词,另一个输入包含一些短文本(如"好位置")。 将忽略这两行。
对于"最大单词长度",键入 n 元语法中任何单个单词中可以使用的最大字母数。
默认情况下,每个字或令牌最多可包含 25 个字符。 如果字词可能为任意字符序列而不是实际词法项,则删除的时间长于该长度的字词。
对于 "最小 n 元语法文档绝对频率",键入一个数字,该数字指示要包含在 n 元语法字典中的任何单个单词或标记所需的最小出现次数。
例如,如果使用默认值 5,则任何 n 元语法或跳过语法都必须在语料库中至少出现五次,以包含在 n 元语法字典中。
对于 "最大 n 元语法文档比率",键入表示此比率的一个数字:包含特定 n 元语法的行数,超过整个语料库中的行数。
例如,比率为 1,则表示即使每行中都有特定的 N 元语法,也可以将 N 元语法添加到 N 元语法字典中。 通常,将每一行中都出现的字视为干扰词,需将其删除。 若要筛选掉领域相关干扰词,请尝试降低此比率。
重要
特定字词的出现率不一致,但因文档而异。 例如,如果要分析客户对特定产品的评论,则产品名称的频率可能很高且接近干扰词,但在其他上下文中是一个很重要术语。
如果要为包含 N 元语法词汇中未包含单词的任何行生成指示器,这些行称为"词汇外",则选择"检测词汇外行", (OOV) 单词。
所有词典都是有限的;因此,几乎可以保证文本语料库包含字典或 n 元语法字典中未包含的单词。 但是,此类字词可能会对语言模型产生各种影响,包括相较于词汇内和 IV (错误率) 率。 根据你的域,这些 OOV 词可能表示重要的内容词。
通过标识包含这些字词的行,可以补偿这些字词的效果,也可以单独处理字词和相关行。
选择" 标记句子开头"选项,以添加一个特殊的字符序列,用于指示 n 元语法字典中句子的开头。 在文本分析中,为以特殊字符开头的句子添加 n 元语法前缀很常见,并且可用于分析行边界。
Azure ML Studio (经典) 插入符号
|||
。 不能指定自定义字符。如果要规范化 特征向量 ,请选择"规范化 n 元语法特征向量"选项。 这样做时,每个 n 元语法特征向量除以其 L2 规范。
默认情况下使用规范化。
如果要启用其他选项来管理文本特征向量的大小,将"使用基于筛选器的特征选择"设置为 True。
- 特征选择有助于降低 n 元语法的维数。
- 不应用筛选器选择时,将创建所有可能的 n 元语法,从而增加覆盖率,但代价是使字典更长且可能包含许多不经常的字词。
- 在小型语料库中,使用特征选择可以大大减少创建的术语数。
- 有关详细信息,请参阅基于 筛选器的特征选择。
如果使用功能选择,则必须从"功能评分方法"下拉列表中选择一种方法:
- PearsonCorrelation:基于标签列值和文本向量计算 Pearson 的相关性。
- MutualInformation:基于标签列值和文本向量计算相互信息分数。
- KendallCorrelation:基于标签列值和文本向量计算 Kendall 的相关性。
- SpearmanCorrelation:基于标签列值和文本向量计算 Spearman 相关性。
- ChiSquared:使用卡方方法计算标签列值与文本向量之间的相关性。
- 可搜索数:计算标签列值和文本向量的"小数"分数。
- 基于计数的特征选择:基于值的计数创建新特征。 此方法不需要标签列。
根据选择的方法,设置以下选项之一:
所需功能数:如果使用除基于计数的特征选择外的任何功能选择方法,则是必需的。
在特征选择过程中,所有 n 元语法都获得特征分数,n 元语法按分数排名。 此处设置的值确定输出的排名最高的特征数。 将丢弃功能分数较低的 N 元语法。
非零元素的最小数目:如果使用基于计数的特征选择,则是必需的。
键入一个表示对潜在特征的计数进行表格统计所需的最小实例数的总数。
运行试验。
有关 结果 及其格式的说明,请参阅此部分。
更新现有的 n 元语法字典或合并字典
将" 从文本中提取 N 元 语法特征"模块添加到试验,将包含要处理的文本的数据集连接到 数据集 端口。
对于 "文本列",请选择包含要进行功能化的文本的文本列。 默认情况下,该模块选择“字符串”类型的所有列。 为了获得最佳结果,请一次处理一个列。
添加包含以前生成的 n 元语法字典的已保存数据集,并连接到 输入词汇 端口。 还可以连接"从 文本中提取 N 元语法特征"模块的上游实例的结果 词汇 输出。
若要合并或更新词汇,输入词汇的架构必须与预期格式完全匹配。 请勿从 中删除任何列,也不向输入词汇表添加任何列。
对于 "词汇模式",请从下拉列表中选择以下更新选项之一:
ReadOnly:表示输入词汇中的输入语料库。 也就是说,输入词汇表的 n 元语法权重将 (输入词汇表的 n 元语法权重,而不是计算左侧输入 () 中的新文本数据集的术语频率。
提示
对文本分类器评分时使用此选项。
更新:从输入语料库创建新的 n 元语法词汇,并将其与输入词汇合并。 换句话说,可以从输入词汇将新条目添加到创建的词汇,也可以更新现有条目。
提示
使用此选项可以增量更新传入数据批的词汇。
合并:从输入语料库生成新的 n 元语法词汇。
如果要将背景词汇作为输入传递给模块,并且想要减少停止词的权重,则此选项很有用。 换句话说,在背景词汇中具有高文档频率分数的每个条目都将在创建的词汇中分配一个较低的反向文档频率分数。
提示
如果不想从输入将新条目添加到创建的词汇表,并且只想调整现有条目的分数,请使用此选项。
如果合并 或更新词汇,则选项"选择权重函数"是必需的。 权重函数指定如何对两个词汇中的 DF 和 IDF 分数进行加权:
- 二进制权重:将二进制状态值分配给提取的 N 元语法。 换句话说,如果每个 n 元语法存在于给定文档中,则其值为 1,否则为 0。
- TF 权重:为提取的 n 元语法 (TF) 词频率分数。 每个 n 元语法的值是给定文档中的出现频率。
- IDF 权重:为解压缩的 n 元语法 (IDF) 反向文档频率分数。 每个 N 元语法的值是语料库大小的对数除以其在整个语料库中的出现频率。 那是:
IDF = log of corpus_size / document_frequency
- TF-IDF 权重:为提取的 n 元语法 (TF/IDF) 词频率/反向文档频率分数。 每个 N 元语法的值是其 TF 分数乘以其 IDF 分数。
- Graph权重:根据 TextRank 图形排名将分数分配给提取的 n 元语法。 TextRank 是基于图形的排名模型,用于文本处理。 Graph排名算法实质上是一种基于全局信息确定重要性的方法。 有关详细信息,请参阅 TextRank: Bringing Order into Texts by Rada Mihalcea and Paul Tarau( TextRank:Bringing Order into Texts(TextRank:将顺序引入 文本中)(由 Rada Mihalcea 和 Paul Tarau 完成)。
有关所有其他选项,请参阅上一部分中 的属性说明。
运行试验。
有关 结果 及其格式的说明,请参阅此部分。
对使用 N 元语法的模型进行评分或发布
将“从文本中提取 N 元语法特征”模块从训练数据流中复制到评分数据流。
连接训练数据流中的结果词汇输出输出到评分数据流上的输入词汇。
在评分工作流中,修改"从文本中提取 N 元 语法特征"模块,并做出这些更改,使所有其他功能保持不变:
将 "词汇模式"参数 设置为 ReadOnly。
将"使用 基于筛选器的特征选择"选项更改为
False
。
若要发布试验,请保存 结果词汇 作为数据集。
然后,将保存的数据集连接到评分图中的"从 文本中提取 N 元 语法特征"模块。
结果
" 从文本中提取 N 元语法特征" 模块创建两种类型的输出:
结果数据集:已分析文本的摘要以及提取的 n 元语法。 未在" 文本列 "选项 中选择的列 将传递到输出。 对于分析的每个文本列,该模块将生成以下列:
- NgramsString:包含所有唯一 n 元语法的字符串。
- NumUniqueNgrams:使用指定属性提取的 n 元语法计数。
- N 元语法匹配项的稀疏矩阵:模块为在总语料库内找到的每个 n 元语法生成一列,并在每个列中添加一个分数以指示该行的 n 元语法的权重。
结果词汇:词汇包含实际的 N 元语法字典,以及在分析过程中生成的词频分数。 可以保存数据集,以与一组不同的输入一起重新使用,或用于以后的更新。 还可以更新分数,或重复使用词汇进行建模和评分。
示例结果
为了说明如何使用结果,以下简短示例使用工作室中提供的 Amazon Book Review 数据集 (经典) 。 数据集经过筛选,只显示评分为 4 或 5 的评审,以及字符串长度在 300 个字符以下的评审。
在此数据集中,选择了一个仅包含 92 个词的简短评论。 此处作者的姓名已替换为 , Xxx
书名替换为 Yyy
:
"Xxx at his best ! Yyy is one of Xxx's best yet! I highly recommend this novel."
示例评审文本的结果数据集
对于此示例,模块生成了以下列:
NumUniqueNgrams:对于这 92 个词评审,使用默认设置从示例评审中提取了 11 个 n 元语法。
当 n 元语法长度增加到 3 且 skip-gram 值设置为 1 时,发现 15 个 n 元语法。
将特征选择应用于默认值时,不会提取 n 元语法。
NgramsString:使用默认设置,返回了以下 n 元语法:["his"、"best"、"one"、"highly"、"recommend"、"this"、"this"、"his_best"、"highly_recommend"、"recommend_this"、"this_novel"、"this_novel"]
n 元语法长度为 3,跳过语法值为 1,返回了以下 n 元语法:["his"、"best"、"one"、"highly"、"recommend"、"this"、"his_best"、"highly_recommend"、"highly_recommend"、"recommend_this"、"this_novel"、"best_one"、"one_best"、"highly_this"、"highly_recommend_this"]
N 元语法匹配项的稀疏矩阵
对于此特定评审,结果包括以下列:
ReviewText。[管理] ReviewText。[and_highly] ReviewText。[高度] ReviewText。[highly_recommend] 0 0 0.301511 0.301511 提示
如果查看特定列时遇到问题,请将"选择数据集 中的 列"模块附加到输出,然后使用搜索函数按名称筛选列。
示例评审文本的结果词汇
词汇包含实际的 N 元语法字典,以及在分析过程中生成的词频分数。 可以保存数据集,以与一组不同的输入一起重新使用,或用于以后的更新。 无论其他 选项如何 ,都会生成分数 DF 和 IDF 。 组合词汇时,这些存储的值将用作你选择的权重函数的输入。
- Id:针对每个唯一 n 元语法生成的标识符。
- Ngram:n 元语法。 空格或其他断字符将替换为下划线字符。
- DF:原始语料库中 N 元语法的词频分数。
- IDF:原始语料库中 N 元语法的反转文件频率分数。
可以手动更新此数据集;但是,请小心,因为可能会引入错误。 例如:
- 如果模块发现输入词汇中包含具有相同键的重复行,则会引发错误。 请确保词汇中任意两行都不具有相同的字。
- 词汇数据集的输入架构必须完全匹配,包括列名和列类型。
- ID 列和 DF 分数列必须是整数类型。
- IDF 列必须是 FLOAT 类型 (浮点) 。
技术说明
建议对 n 元语法长度、跳过语法数和使用特征选择的不同值范围进行试验,以确定文本语料库的维数和最佳特征比率。
有关 n 元语法和 skip-gram 详细信息,请参阅以下资源:
预期输入
名称 | 类型 | 说明 |
---|---|---|
数据集 | 数据表 | 输入数据 |
输入词汇 | 数据表 | 输入词汇 |
模块参数
名称 | 类型 | 范围 | 可选 | 默认 | 说明 |
---|---|---|---|---|---|
非零元素的最小数目 | Integer | >=1 | 仅在使用下列方法时适用: 基于计数 |
1 | 指定要输出的特征数(对于 CountBased 方法) |
文本列 | 列选择 | 必须 | StringFeature | 文本列的名称或从一个索引 | |
词汇模式 | 词汇模式 | 创建 ReadOnly 更新 合并 |
必选 | 创建 | 指定如何从语料库创建 N 元语法词汇 |
N 元语法大小 | Integer | >=1 | 必选 | 1 | 指示要创建的 n 元语法的最大大小 |
K-Skip 大小 | Integer | >=0 | 必选 | 0 | 指示 k-skip 大小 |
加权函数 | 加权函数 | 二进制权重 TF 权重 IDF 权重 TF-IDF 权重 Graph权重 |
必选 | 二进制权重 | 选择要应用于每个 n 元语法值的权重函数 |
最小单词长度 | Integer | >=1 | 必选 | 3 | 指定要包括在 n 元语法中的单词的最小长度 |
最大单词长度 | Integer | >=2 | 必选 | 25 | 指定要包括在 n 元语法中的单词的最大长度 |
最小 n 元语法文档绝对频率 | Float | >=1.0 | 必选 | 5.0 | 最小 n 元语法文档绝对频率 |
最大 n 元语法文档比率 | Float | >=0.0001 | 必选 | 1.0 | 最大 n 元语法文档比率 |
检测词汇外行 | 布尔值 | 必须 | 是 | 检测 OOV 表中没有 N 元语法词汇 (的) | |
标记句子的开头 | 布尔值 | 必须 | false | 指示是否应该将开始句子标记添加到 n 元语法 | |
规范化 n 语法特征向量 | 布尔值 | 必须 | 规范化 n 语法特征向量。 如果为 true,则 n 语法特征矢量除以其 L2 标准。 | ||
使用基于筛选器的功能选择 | True False 类型 | True False |
必选 | True | 使用基于筛选器的特征选择来减少维数 |
特征评分方法 | 计分方法 | 皮尔逊相关 互信息 肯德尔相关 斯皮尔曼相关 卡方 费舍尔评分 基于计数 |
仅适用于选项 " 使用基于筛选器的功能选择 " 时的情况 | 费舍尔评分 | 选择用于评分的方法 |
目标列 | 列选择 | 使用以下方法之一时适用: 皮尔逊相关 互信息 肯德尔相关 斯皮尔曼相关 卡方 费舍尔评分 |
指定目标列 | ||
所需的特征数 | Integer | >=1 | 使用以下方法之一时适用: 皮尔逊相关 互信息 肯德尔相关 斯皮尔曼相关 卡方 费舍尔评分 |
1 | 指定要在结果中输出的特征数 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
结果数据集 | 数据表 | 提取的功能 |
结果词汇 | 数据表 | 结果词汇 |