隐性 Dirichlet 分配
重要
对机器学习工作室(经典)的支持将于 2024 年 8 月 31 日结束。 建议在该日期之前转换到 Azure 机器学习。
从 2021 年 12 月 1 日开始,你将无法创建新的机器学习工作室(经典)资源。 在 2024 年 8 月 31 日之前,可继续使用现有的机器学习工作室(经典)资源。
ML 工作室(经典)文档即将停用,将来可能不会更新。
使用 Vowpal Wabbit 库执行 VW LDA
类别:文本分析
模块概述
本文介绍如何使用机器学习 Studio (经典) 中的潜在 Dirichlet 分配模块将其他未分类的文本分组为多个类别。 潜在的 Dirichlet 分配 (LDA) 通常用于自然语言处理 (NLP) 来查找相似的文本。 另一个常见术语是“主题建模”。
此模块采用文本列,并生成以下输出:
源文本,以及每个类别的分数
功能矩阵,其中包含每个类别的已提取术语和系数
一个转换,你可以将其保存并重新应用于用作输入的新文本
由于此模块使用 Vowpal Wabbit 库,因此速度非常快。 有关 Vowpal Wabbit 的详细信息,请参阅包含教程的GitHub 存储库和算法的说明。
有关潜在 Dirichlet 分配 (LDA) 的详细信息
一般而言,LDA 不是每个 se 分类的方法,而是使用生成方法。 这意味着不需要提供已知的类标签,然后推断模式。 相反,该算法将生成用于标识主题组的概率模型。 您可以使用概率模型对现有定型事例或您作为输入提供给模型的新事例进行分类。
生成模型可以更好地使用,因为它可以避免对文本和类别之间的关系进行任何严格假设,并仅使用单词到数学模型的分布。
本白皮书中讨论了理论,如 PDF 下载: 潜在 Dirichlet 分配: Blei、Ng 和约旦
此模块中的实现基于 Vowpal Wabbit 库 , (版本 8) 用于 LDA。
有关详细信息,请参阅技术说明部分。
如何配置隐性 Dirichlet 分配
此模块需要一个包含文本列(原始的或预处理的)的数据集。
将 潜在的 Dirichlet 分配 模块添加到试验中。
请提供包含一个或多个文本列的数据集作为模块的输入。
对于 " 目标列",选择一个或多个包含要分析的文本的列。
您可以选择多个列,但它们必须是字符串数据类型。
通常,由于 LDA 会从文本创建大型特征矩阵,因此通常会分析单个文本列。
对于 " 要建模的主题数",请键入一个介于1和1000之间的整数,该整数指示要从输入文本派生的类别或主题的数量。
默认情况下,将创建 5 个主题。
对于“N 元语法”,请指定哈希处理期间生成的 N 元语法的最大长度。
默认值为 2,表示同时生成二元语法和一元语法。
选择 " 规范化 " 选项将输出值转换为概率。 因此,输出和功能数据集中的值将按如下方式转换,而不是将转换后的值表示为整数:
数据集中的值将表示为一个概率,即
P(topic|document)
。特征主题矩阵中的值将表示为一个概率,即
P(word|topic)
。
选择选项 " 显示所有选项",然后将其设置为 "TRUE",以便查看并设置其他高级参数。
这些参数特定于 LDA 的 Vowpal Wabbit 实现。 对于 Vowpal Wabbit online 中的 LDA,还有一些不错的教程,以及官方 Vowpal Wabbit Wiki。
请参阅此示例,了解版本8中的示例,以及如何在 Azure ML 中使用 VW。
Rho 参数。 为主题分布稀疏度提供一个先验概率。 对应于 VW 的
lda_rho
参数。 如果希望单词的分布是平面的,则使用值 1;也就是说,所有词都是 equiprobable。 如果认为大多数单词显示稀疏,则可以将其设置为较小的值。Alpha 参数。 为每文档主题权重的稀疏度指定一个先验概率。 对应于 VW 的
lda_alpha
参数。估计的文档数。 键入一个数字,该数字表示将处理 (行) 的文档数的最佳估计。 这样,模块就可以分配足够大小的哈希表。 对应于 Vowpal Wabbit 中的
lda_D
参数。批大小。 键入一个数字,用于指示要在发送到 Vowpal Wabbit 的每批文本中包含多少行。 对应于 Vowpal Wabbit 中的
batch_sz
参数。学习更新计划中使用的迭代的初始值。 为学习速率指定起始值。 对应于 Vowpal Wabbit 中的
initial_t
参数。在更新期间应用于迭代的幂。 指示在线更新过程中应用于迭代计数的电源级别。 对应于 Vowpal Wabbit 中的
power_t
参数。对数据执行操作的轮次。 指定算法将对数据进行循环的次数。 对应于 Vowpal Wabbit 中的
epoch_size
参数。
如果要在初始传递中创建 n 语法列表,请在对文本进行分类之前,选择选项 " 生成字典 of ngrams " 或 " ngrams 的生成字典"。
如果事先创建了初始字典,则可在以后查看该模型时使用该字典。 如果能够将结果映射到文本而不是数字索引,则通常更容易进行解释。 但是,保存字典会花费较长的时间,并会使用额外的存储。
对于 " ngram 字典的最大大小",请键入可在 n 语法字典中创建的总行数。
此选项对于控制字典的大小很有用。 但是,如果输入中的 ngrams 数超过此大小,则可能发生冲突。
运行试验。 LDA 模块使用贝氏定理来确定哪些主题可能与单个字词相关联。 字词不与任何主题或组完全关联;相反,每个 n 语法都具有与任何发现的类相关联的已了解的概率。
结果
此模块有两个输出:
转换后的数据集:包含输入文本和指定数量的发现的类别,以及每个类别的每个文本示例的分数。
功能主题矩阵:最左侧的列包含提取的文本功能,每个类别都有一列包含该类别中该功能的分数。
有关详细信息,请参阅 LDA 结果的示例。
LDA 转换
此模块还会将应用 LDA 的 转换 输出为 ITransform 接口。
可以保存此转换,并将其重新用于其他数据集。 如果你已在大型语料库上定型并想要重复使用系数或类别,这可能很有用。
优化 LDA 模型或结果
通常,您不能创建可满足所有需求的单个 LDA 模型,甚至为一个任务设计的模型也可能需要多次迭代才能提高准确性。 建议你尝试所有这些方法来改进模型:
- 更改模型参数
- 使用可视化效果来了解结果
- 获取主题专家的反馈,以确定所生成的主题是否很有用。
还可以使用定性度量值来评估结果。 若要评估主题建模结果,请考虑:
- 准确性-类似的项目真的相似?
- 多样性-在业务问题需要时,模型是否可以在类似项之间进行区分?
- 可伸缩性-它是适用于各种文本类别还是仅适用于窄目标域?
通常,可以使用自然语言处理来清理、汇总和简化文本或对文本进行分类,从而改善基于 LDA 的模型的准确性。 例如,以下技术(机器学习中的所有支持)都可以提高分类准确度:
停止词删除
大小写规范化
词元化或词干
命名实体识别
在 Studio (经典) 中,还可以使用 R 或 Python 库进行文本处理: 执行 r 脚本, 执行 Python 脚本
示例
有关文本分析的示例,请参阅 Azure AI 库中的以下试验:
- 执行 Python 脚本:在 Python 中使用自然语言处理来清理和转换文本。
有关详细信息和基于客户评审文本的示例,请参阅 了解 LDA 结果。
LDA 结果的示例
为了说明潜在的Dirichlet 分配模块的工作原理,以下示例将 LDA 与机器学习 Studio (经典) 中提供的书籍审阅数据集应用于默认设置。
源数据集
数据集包含分级列以及用户提供的完整注释文本。
此表仅显示几个典型示例。
text |
---|
本书有很好的要点。 如果有任何内容,可帮助你将所需的字词放入你的主管 ...。 |
我承认,我还没有完成本书籍。 由于我在失眠上遇到问题,朋友建议我 |
编写得很糟糕,我曾尝试阅读本书,但发现它很 turgid,但很有可能会让它不满意。 ... |
从一年的时间里,开始借用朋友的 eared 副本,我不能在这本书中获得一个短暂自恋的收藏。 |
本书的绘图非常有趣,它可能是一个不错的书籍。 遗憾的是,它不是。 我的主要问题在于 .。。 |
在处理过程中, 潜在的 Dirichlet 分配 模块会根据指定的参数来清理和分析文本。 例如,它可以自动标记文本和删除标点,并同时查找每个主题的文本功能。
LDA 转换的数据集
下表包含已 转换 的数据集(基于书籍评审示例)。 输出包含输入文本和指定数量的发现的类别,以及每个类别的分数。
电影名称 | 主题1 | 主题2 | 主题3 | 主题4 | 主题5 |
---|---|---|---|---|---|
本书有很好的要点 | 0.001652892 | 0.001652892 | 0.001652892 | 0.001652892 | 0.9933884 |
friend 建议 | 0.00198019 | 0.001980198 | 0.9920791 | 0.001980198 | 0.001980198 |
已尝试阅读此书籍 | 0.002469135 | 0.002469135 | 0.9901233 | 0.002469135 | 0.002469135 |
借用朋友 | 0.9901232 | 0.002469135 | 0.002469135 | 0.002469135 | 0.002469135 |
本书的绘图非常有趣 | 0.001652892 | 0.001652892 | 0.9933884 | 0.001652892 | 0.001652892 |
在此示例中,我们使用了默认值5作为 " 要建模的主题数"。 因此,LDA 模块创建了五个类别,我们可以假设它们大致对应于原始的五缩放评级系统。
该模块还会为表示主题的五个类别中的每个条目分配一个分数。 分数指示行应分配给特定类别的概率。
功能主题矩阵
模块的第二个输出是 功能主题矩阵。 这是一个表格数据集,其中包含 特征化文本(在列 功能中)以及每个类别的分数,在 其余列中,主题2.。。主题 N。评分表示系数。
功能 | 主题1 | 主题2 | 主题3 | 主题4 | 主题5 |
---|---|---|---|---|---|
有趣 | 0.0240282071983144 | 0.0354678954779375 | 0.363051866576914 | 0.0276637824315893 | 0.660663576149515 |
was | 0.0171478729532397 | 0.0823969031108669 | 0.00452966877950789 | 0.0408714510319233 | 0.025077322689733 |
from | 0.0148224220349217 | 0.0505086981492109 | 0.00434423322461094 | 0.0273389126293824 | 0.0171484355106826 |
plot | 0.0227415889348212 | 0.0408709456489325 | 0.182791041345191 | 0.086937090812819 | 1 0.0169680136708971 |
正在阅读 | 0.0227415889348212 | 0.0408709456489325 | 0.182791041345191 | 0.0869370908128191 | 0.0169680136708971 |
n | 0.0269724979147211 | 0.039026263551767 | 0.00443749106785087 | 0.0628829816088284 | 0.0235340728818033 |
我 | 0.0262656945140134 | 0.0366941302751921 | 0.00656837975179138 | 0.0329214576160066 | 0.0214121851106808 |
to | 0.0141026103224462 | 0.043359976919215 | 0.00388640531859447 | 0.0305925953440055 | 0.0228993750526364 |
it | 0.0264490547105951 | 0.0356674440311847 | 0.00541759897864314 | 0.0314539386250293 | 0.0140606468587681 |
friend | 0.0135971322960941 | 0.0346118171467234 | 0.00434999437350706 | 0.0666507321888536 | 0.018156863779311 |
点 | 0.0227415889348212 | 0.0396233855719081 | 0.00404663601474112 | 0.0381156510019025 | 0.0337788009496797 |
不错 | 0.651813073836783 | 0.0598646397444108 | 0.00446809691985617 | 0.0358975694646062 | 0.0138989124411206 |
.its | 0.0185385588647078 | 0.144253986783184 | 0.00408876416453866 | 0.0583049240441475 | 0.015442805566858 |
of | 0.0171416780245647 | 0.0559361180418586 | 0.0100633904544953 | 0.087093930106723 | 0.0182573833869842 |
借 | 0.0171416780245647 | 0.0559361180418586 | 0.0100633904544953 | 0.087093930106723 | 0.0182573833869842 |
具有 | 0.0171416780245647 | 0.0559361180418586 | 0.0100633904544953 | 0.087093930106723 | 0.0182573833869842 |
book | 0.0143157047920681 | 0.069145948535052 | 0.184036340170983 | 0.0548757337823903 | 0.0156837976985903 |
建议 | 0.0161486848419689 | 0.0399143326399534 | 0.00550113530229642 | 0.028637149142764 | 0.0147675139039372 |
this | 0.0161486848419689 | 0.0399143326399534 | 0.00550113530229642 | 0.028637149142764 | 0.0147675139039372 |
技术说明
本部分包含实现详情、使用技巧和常见问题解答。
实现详细信息
默认情况下,转换后的数据集和特征主题矩阵的输出分布将规范化为概率。
对于给定的文档,转换后的数据集可以主题条件概率的形式规范化。 在这种情况下,每行的总和等于 1。
对于给定的主题,特征-主题矩阵可以字词条件概率的形式规范化。 在这种情况下,每列的总和等于 1。
提示
有时,模块可能会返回一个空主题,这通常是由算法的伪随机初始化引起的。 如果发生这种情况,可以尝试更改相关参数,例如 N 元语法字典的最大大小或用于特征哈希的位数。
LDA 和主题建模
潜在 Dirichlet (LDA) 通常用于基于内容的主题 建模,这基本上意味着从未分类的文本中学习类别。 在基于内容的主题建模中,主题是基于字词的分布。
例如,假设你提供了一个包含许多产品的客户评论语料库。 随着时间的推移,许多客户提交的评审文本将包含许多术语,其中一些术语在多个主题中使用。
LDA 流程标识的主题可能表示单个产品 A 的评审,也可能表示一组产品评审。 对 LDA 来说,主题本身只是一组字词随时间推移的概率分布。
术语很少排他于任何一个产品,但可以指其他产品,或是适用于所有产品("好"、" (") )的一般术语。 其他词语可能是干扰词。 但是,必须了解,LDA 方法不会捕获所有单词,也不希望了解单词的关联方式,除了共生概率之外。 它只能对目标域中使用的单词进行分组。
计算术语索引后,使用基于距离的相似性度量值比较各个文本行,以确定两段文本是否彼此相似。 例如,你可能会发现产品有多个强相关的名称。 或者,你可能会发现强负面词语经常与某个特定产品相关。 你可以使用相似度度量值来识别相关词语以及创建建议。
预期输入
名称 | 类型 | 说明 |
---|---|---|
数据集 | 数据表 | 输入数据集 |
模块参数
名称 | 类型 | 范围 | 可选 | 默认 | 说明 |
---|---|---|---|---|---|
哈希位数 | Integer | [1;31] | 在未选中" 显示所有选项 " 复选框时 适用 | 12 | 用于特征哈希的位数 |
目标列 | 列选择 | 必须 | StringFeature | 目标列名或索引 | |
要建模的主题数 | Integer | [1;1000] | 必须 | 5 | 针对 N 个主题为文档分发建模 |
N 元语法 | Integer | [1;10] | 必须 | 2 | 哈希处理期间生成的 N 元语法顺序 |
规范化 | 布尔 | 必须 | 是 | 将输出规范化为概率。 转换后的数据集将是 P(topic|document),特征主题矩阵将是 P(word|topic)。 | |
显示所有选项 | 布尔 | 是或否 | 必须 | False | 提供特定于 Vowpal Wabbit online LDA 的其他参数 |
Rho 参数 | Float | [0.00001;1.0] | 在选中" 显示所有选项" 复选框时适用 | 0.01 | Rho 参数 |
Alpha 参数 | Float | [0.00001;1.0] | 在选中" 显示所有选项" 复选框时适用 | 0.01 | Alpha 参数 |
估计的文档数 | Integer | [1;int.MaxValue] | 在选中" 显示所有选项" 复选框时适用 | 1000 | 估计的文档数 (对应于lda_D参数) |
批大小 | Integer | [1;1024] | 在选中" 显示所有选项" 复选框时适用 | 32 | 批大小 |
学习速率更新计划中使用的迭代的初始值 | Integer | [0;int.MaxValue] | 当选中 " 显示所有选项 " 复选框时适用 | 0 | 学习速率更新计划中使用的迭代次数的初始值 (对应于 initial_t 参数) |
在更新期间应用于迭代的幂 | Float | [0.0;1.0] | 当选中 " 显示所有选项 " 复选框时适用 | 0.5 | (与 power_t 参数相对应的联机更新过程中,应用于迭代数的电源) |
训练迭代次数 | Integer | [1;1024] | 当选中 " 显示所有选项 " 复选框时适用 | 25 | 训练迭代次数 |
生成 N 元语法的字典 | 布尔 | 是或否 | 当未选中 "显示所有选项" 复选框时应用 | True | 在计算 LDA 之前生成 N 元语法的字典。 适用于模型检查和解释 |
用于特征哈希的位数 | Integer | [1;31] | 当 ngrams 的选项 生成字典 为 False 时应用 | 12 | 功能哈希期间要使用的位数 |
N 元语法字典的最大大小 | Integer | [1;int.MaxValue] | 当 ngrams 的选项 生成字典 为 True 时适用 | 20000 | N 元语法字典的最大大小。 如果输入中的令牌数超过此大小,则可能发生冲突 |
在 LDA 之前生成 N 元语法的字典 | 布尔 | 是或否 | 当选中 " 显示所有选项 " 复选框时适用 | True | 在 LDA 之前生成 N 元语法的字典。 适用于模型检查和解释 |
字典中 N 元语法的最大数目 | Integer | [1;int.MaxValue] | 当 ngrams 的选项 生成字典 为 True 并且选中了 " 显示所有选项 " 复选框时适用。 | 20000 | 字典的最大大小。 如果输入中的令牌数超过此大小,则可能发生冲突 |
Outputs
名称 | 类型 | 说明 |
---|---|---|
转换后的数据集 | 数据表 | 输出数据集 |
功能主题矩阵 | 数据表 | LDA 生成的功能主题矩阵 |
LDA 转换 | ITransform 接口 | 将 LDA 应用于数据集的转换 |
例外
异常 | 描述 |
---|---|
错误 0002 | 如果找不到数据集的一个或多个指定列,将出现异常。 |
错误 0003 | 如果一个或多个输入为 NULL 或为空,将出现异常。 |
错误 0004 | 如果参数小于或等于特定值,将出现异常。 |
错误 0017 | 如果一个或多个指定列具有当前模块不支持的类型,则会发生异常。 |
有关特定于 Studio (经典) 模块的错误列表,请参阅机器学习错误代码。
有关 API 异常的列表,请参阅机器学习 REST API 错误代码。
另请参阅
文本分析
特征哈希
命名实体识别
对 Vowpal Wabbit 7-4 模型评分
训练 Vowpal Wabbit 7-4 模型
训练 Vowpal Wabbit 8 模型