主题模型在机器学习和自然语言处理等领域是用来在一系列文档中发现抽象主题的一种统计模型。直观来讲,如果一篇文章有一个中心思想,那么一些特定词语会更频繁的出现。比方说,如果一篇文章是在讲狗的,那「狗」和「骨头」等词出现的频率会高些。如果一篇文章是在讲猫的,那「猫」和「鱼」等词出现的频率会高些。而有些词例如「这个」、「和」大概在两篇文章中出现的频率会大致相等。但真实的情况是,一篇文章通常包含多种主题,而且每个主题所占比例各不相同。因此,如果一篇文章 10% 和猫有关,90% 和狗有关,那么和狗相关的关键字出现的次数大概会是和猫相关的关键字出现次数的 9 倍。一个主题模型试图用数学框架来体现文档的这种特点。主题模型自动分析每个文档,统计文档内的词语,根据统计的信息来断定当前文档含有哪些主题,以及每个主题所占的比例各为多少。主题模型最初是运用于自然语言处理相关方向,但目前已经延伸至生物信息学等其它领域。
[描述来源:从语言建模到隐马尔可夫模型:一文详述计算语言学|机器之心]
目前最流行的技术主要有四种:潜在语义分析(LSA)、概率潜在语义分析(pLSA)、潜在狄利克雷分布(LDA),以及最新的、基于深度学习的 lda2vec。但所有主题模型都基于相同的基本假设:
- 每个文档包含多个主题;
- 每个主题包含多个单词。
换句话说,主题模型围绕着以下观点构建:实际上,文档的语义由一些我们所忽视的隐变量或「潜」变量管理。因此,主题建模的目标就是揭示这些潜在变量——也就是主题,正是它们塑造了我们文档和语料库的含义。
潜在语义分析(LSA)是主题建模的基础技术之一。由于在其他词条中已经有对其进行详细介绍,这里不过多赘述。LSA其核心思想是把我们所拥有的文档-术语矩阵分解成相互独立的文档-主题矩阵和主题-术语矩阵。
第一步是生成文档-术语矩阵。如果在词汇表中给出 m 个文档和 n 个单词,我们可以构造一个 m×n 的矩阵 A,其中每行代表一个文档,每列代表一个单词。一旦拥有文档-术语矩阵 A,我们就可以开始思考潜在主题。问题在于:A 极有可能非常稀疏、噪声很大,并且在很多维度上非常冗余。因此,为了找出能够捕捉单词和文档关系的少数潜在主题,我们希望能降低矩阵 A 的维度。这种降维可以使用截断 SVD 来执行。SVD,即奇异值分解,是线性代数中的一种技术。
通过这些文档向量和术语向量,现在我们可以轻松应用余弦相似度等度量来评估以下指标:
- 不同文档的相似度
- 不同单词的相似度
- 术语(或「queries」)与文档的相似度(当我们想要检索与查询最相关的段落,即进行信息检索时,这一点将非常有用)
pLSA采取概率方法替代 SVD 以解决问题。其核心思想是找到一个潜在主题的概率模型,该模型可以生成我们在文档-术语矩阵中观察到的数据。特别是,我们需要一个模型 P(D,W),使得对于任何文档 d 和单词 w,P(d,w) 能对应于文档-术语矩阵中的那个条目。具体算法请查看pLSA词条。
LDA 是 pLSA 的贝叶斯版本。它使用狄利克雷先验来处理文档-主题和单词-主题分布,从而有助于更好地泛化。LDA 无疑是最受欢迎(且通常来说是最有效的)主题建模技术。
在文档层面,我们现在知道如何将文本表示为主题的混合。在单词级别上,我们通常使用诸如 word2vec 之类的东西来获取其向量表征。lda2vec 是 word2vec 和 LDA 的扩展,它共同学习单词、文档和主题向量。lda2vec 专门在 word2vec 的 skip-gram 模型基础上建模,以生成单词向量。skip-gram 和 word2vec 本质上就是一个神经网络,通过利用输入单词预测周围上下文词语的方法来学习词嵌入。
[描述来源:一文读懂如何用LSA、PSLA、LDA和lda2vec进行主题建模|机器之心]
发展历史
1998年,Christos Papadimitriou,Prabhakar Raghavan,Hisao Tamaki和 Santosh Vempala描述了一个早期的主题模型。Thomas Hofmann于1999年提出了pLSA,并在文中描述了pLSA与LSA(潜在语义分析)的区别,即LSA主要基于奇异值分解(SVD)而pLSA则依赖混合分解。他随后进行了一系列实证研究,并讨论了pLSA在自动文档索引中的应用。他的实证结果表明pLSA相对于LSA的表现有明显进步。
2000年,潜在语义分析被Jerome Bellegarda提出使用在自然语言处理中。2003年Andrew Y. Ng等人在论文中提出用于pLSA的aspect model具有严重的过度拟合问题,他们提出了隐狄利克雷分布(LDA),这可以看作是结合了贝叶斯思想的pLSA。也许是目前使用的最常见的主题模型。
2016年,针对当前主题模型可以为文档构建可解释的向量表示,而词向量在句法规则方面十分有效,Christopher E Moody提出了lda2vec,一个学习密集单词向量的模型,将上述两类模型的优点结合。他们的方法很容易融入现有的自动微分框架,并允许科学家使用无监督文档表示,同时学习单词向量和它们之间的线性关系。
2017年,腾讯 TEG 数据平台部和北京大学联合撰写的大规模主题模型系统的论文《LDA*:A Robust and Large-scale Topic Modeling System》,研究如何在工业界的环境中建立一个大规模的主题模型训练系统。在这之前,已经有很多的相关的系统工作,包括 YahooLDA,微软的 LightLDA 以及 Petuum 等,而 LDA*则解决了如何在复杂的数据环境中得到更鲁棒的采样性能以及词倾斜分布带来的网络通信这两个难题,取得了更好的性能。LDA*构建于腾讯开源的系统 Angel 之上,得益于 Angel 开放的参数服务器架构,良好的扩展性以及优秀的编程接口设计,它可以轻松处理 TB 级别的数据和十亿维度的主题模型。
主要事件
年份 | 事件 | 相关论文/Reference |
1998 | Christos Papadimitriou,Prabhakar Raghavan,Hisao Tamaki和 Santosh Vempala描述了一个早期的主题模型 | Papadimitriou, C hristos; Raghavan, Prabhakar; Tamaki, Hisao; Vempala, Santosh (1998). Latent Semantic Indexing: A probabilistic analysis. Proceedings of ACM PODS. |
1999 | Thomas Hofmann提出了pLSA | Hofmann, T. (1999). Probabilistic Latent Semantic Analysis. Uncertainity in Arti cial Intelligence. |
2000 | 潜在语义分析被提出使用在自然语言处理中 | Bellegarda, J. R. (2000). Exploiting latent semantic information in statistical language modeling. Proceedings of the IEEE, 88(8), 1279-1296. |
2001 | Thomas Hofmann讨论了pLSA在自动文档索引中的应用 | Hofmann, T. (2001). Unsupervised Learning by Probabilistic Latent Semantic Analysis. Machine Learning. 42(1-2): 177-196. |
2016 | Christopher E Moody提出了lda2vec | Moody, C. E. (2016). Mixing Dirichlet Topic Models and Word Embeddings to Make lda2vec. CoNLL. |
2017 | 腾讯 TEG 数据平台部和北京大学联合撰写的大规模主题模型系统的论文,研究如何在工业界的环境中建立一个大规模的主题模型训练系统 | Yut, L. & Zhang, C. & Shao, Y. & Cui, B. (2017). LDA*: a robust and large-scale topic modeling system. Proceedings of the VLDB Endowment. 10: 1406-1417. |
发展分析
瓶颈
在工业界的场景下训练主题模型,其难点主要有三点:第一个是训练的数据规模非常大,2T 大小的样本,3000 亿个 Token,要求在几个小时内跑出结果;第二个是面临的数据和参数复杂,在各种各样的数据和参数配置下,都必须要有较好的性能;第三点是所有的任务都是在一个集中的集群上运行,系统需要具有较高的可扩展性和鲁棒性。
未来发展方向
主题模型有广泛的应用场景,如推荐系统,广告 CTR 预估,用户兴趣分类等,突破其在工业界场景下训练的困难,才能够实现其商业价值。
Contributor: Yuanyuan Li