[英]What is the optimal topic-modelling workflow with MALLET?
我想知道其他主题建模师认为是从预处理到维护的最佳主题建模工作流程。 虽然这个问题包含了许多子问题(我将在下面指出),但我相信这个帖子对我自己和其他有兴趣了解端到端流程最佳实践的人有用。
我希望建议的解决方案最好依赖于R进行文本处理(但Python也可以),主题建模本身也可以在MALLET中完成(尽管如果您认为其他解决方案效果更好,请告诉我们)。 我倾向于使用R
的topicmodels
包,但是我想切换到MALLET
因为它提供了超过topicmodels
许多好处。 它可以处理大量数据,它不依赖于特定的文本预处理工具,它似乎被广泛用于此目的。 但是,下面列出的一些问题也与topicmodels
有关。 我想知道其他人如何处理主题建模以及可以改进以下哪些步骤。 任何有用的建议都是受欢迎的。
以下是它的工作方式:我将完成工作流程,在我看来工作得相当好,我将在每一步都概述问题。
这涉及删除标点符号,数字,停用词,词干和其他文本处理任务。 其中许多可以通过函数(例如来自R
的包tm
TermDocumentMatrix
作为术语 - 文档矩阵分解的一部分来完成。
问题:然而,可能需要使用诸如gsub
函数直接对文本字符串执行此操作,以便MALLET使用这些字符串。 直接执行字符串并不像重复那样有效(例如,同一个单词必须多次被删除)
在这一步中,我们构建一个术语 - 文档矩阵(TDM),然后根据频率和TF-IDF值过滤术语。 最好将你的包的功能限制在1000左右。 接下来查看条款并确定需要(1)删除 (一些停用词将通过), (2)重命名或(3)与现有条目合并 。 虽然我熟悉干完成的概念,但我发现它很少有效。
问题: (1)不幸的是MALLET
不能与TDM结构一起使用并且要使用你的TDM,你需要找到原始TDM(没有删除任何功能)和你满意的TDM之间的区别。 这种差异将成为MALLET的停止词。 (2)关于这一点,我还想指出,功能选择确实需要大量的手工工作,如果有人对如何最小化它有任何想法,请分享您的想法。
旁注:如果您决定单独使用R
,那么我可以推荐具有函数dfm
的quanteda
包,该函数接受thesaurus
作为参数之一。 这个词库允许捕获模式 (通常是正则表达式)而不是单词本身,所以例如你可以有一个模式\\\\bsign\\\\w*.?ups?
这会匹配sign-up
, signed up
等等。
这很难。 我倾向于将数据分解为测试序列集并运行交叉验证,拟合k
主题的模型并使用保持数据测试拟合。 记录对数可能性并针对不同主题分辨率进行比较。
问题:对数似然确实有助于理解拟合的好坏,但(1)它往往表明我需要更多的主题而不是实际上合理的; (2)考虑到拟合模型通常需要多长时间,它是几乎不可能找到或测试最佳值的网格,例如迭代,alpha,老化等。
旁注:在选择最佳主题数时,我通常会选择一个主题范围递增5左右,因为将范围递增1通常需要很长时间来计算。
可以轻松地将新数据分类为一组现有主题。 但是,如果您随着时间的推移运行它,您自然会期望某些主题可能不再相关,而新主题可能会出现。 此外,研究主题的生命周期可能是有意义的。 这很难解释,因为您正在处理需要无监督解决方案的问题,而且随着时间的推移需要跟踪它,您需要以受监督的方式处理它。
问题:要克服上述问题,您需要(1)将新数据拟合到一组旧主题中, (2)根据新数据构建新主题模型(3)监控日志可能性值随时间变化并设计阈值什么时候从旧换成新的; (4)以某种方式合并新旧解决方案,以便主题观察者能够发现主题的演变。
MALLET
消耗数据的字符串清理效率低下。 如果你已经读到那么远了,我想感谢你,这是一个相当长的帖子。 如果您对该建议感兴趣,请随意在您认为相关的评论中添加更多问题,或者就如何克服某些问题提出您的想法。
干杯
感谢您的全面总结!
作为topicmodels
的替代方案,尝试使用R中的包mallet
。它直接从R在JVM中运行Mallet,并允许您将结果作为R表提取。 我希望尽快发布新版本,并且与其他人要求的tm
构造的兼容性。
为了澄清, 文档最多约为1000个令牌( 不是词汇表)是一个好主意。 更多,你开始失去有用的信息。 模型的假设是给定文档中令牌的位置不会告诉您有关该令牌主题的任何信息。 对于较长的文档而言,这种情况很少发生,因此有助于将其分解。
我要补充的另一点是,太短的文档也可能是个问题。 例如,推文似乎没有提供关于单词共现的足够的上下文信息,因此该模型通常会转换为每个主题一个主题的聚类算法。 结合多个相关的短文档可以产生很大的不同。
词汇策划在实践中是主题建模工作流程中最具挑战性的部分。 在标记化之前用单个标记替换选定的多字词(例如通过交换下划线的空格)是一个非常好的主意。 词干几乎从来没用过,至少对英语来说是这样。 自动化方法可以帮助词汇策划,但这一步骤对结果产生了深远的影响(远远超过主题数量),我不愿意鼓励人们完全信任任何系统。
参数:我不相信有正确数量的主题。 我建议使用一些主题,这些主题提供适合您应用程序的粒度。 可能性通常可以检测到您的主题太少,但在阈值之后它不会提供太多有用的信息。 使用超参数优化会使模型对此设置的敏感性降低,这可能会减少搜索所需的参数数量。
主题漂移:这不是一个很好理解的问题。 更多真实世界语料库变化的例子会很有用。 寻找词汇量的变化(例如,词汇外单词的比例)是模型适合程度的快速代表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.