文本摘要(text summarization)四: 主题模型(LDA、LSI、NMF,topic-base)

一、文本摘要(主题模型)

        百度百科这样介绍主题模型,主题模型(topic model)是以非监督学习的方式对文集的隐含语义结构(latent semantic structure)进行聚类(clustering)的统计模型。

        简而言之,就是能够获取文本的隐含语义,例如腾讯和NBA,纯粹从统计学意义上,似乎风马牛不相及,但是最近的热点事件,无疑表明它们是存在隐藏意义的,而我们假设这一隐藏语义便是主题。

        简而言之,我们把从A到B的任务,例如"词语"到"相似度",化为A-C-B问题,即"词语"-"主题"-"相似度",抽象来说。常见的主题模型算法,又简到繁,为非负监督矩阵分解(NMF)、潜在语义分析(LSI,本质是奇异值分解SVD)、概率潜在语义分析(pLSI)、隐含狄利克雷分配模型(LDA)。

       文本摘要中使用主题模型的原理在于:摘要,抽取式摘要句子,应该满足于最鲜明、最大化的主题,表示文章的中心思想,主题主旨等。所以我们可以把文本置于主题模型,抽取其中主题概率最大主题所在句子,作为摘要句。

        github项目地址:https://github.com/yongzhuo/nlg-yongzhuo/tree/master/nlg_yongzhuo/text_summarization/extractive_sum/topic_base

         下面详细介绍下各文本摘要之主题模型的实现。

二、文本摘要之非负监督矩阵分解(NMF)

        非负矩阵分解(NMF),顾名思义,就是非负数矩阵分解为两个非负数矩阵的意思(我们取非负数的两个),你可以理解为是二维的因式分解。公式可以表示为:V = W * H,超级简单的一个算法。

        为什么有用呢?这个火于1999的NMF,唯一的限制条件似乎就是矩阵的元素为非负数了。

        百度百科上这样解释NMF:非负矩阵分解由Lee和Seung于1999年在自然杂志上提出,它使分解后的所有分量均为非负值(要求纯加性的描述),并且同时实现非线性的维数约减。NMF的心理学和生理学构造依据是对整体的感知由对组成整体的部分的感知构成的(纯加性的),这也符合直观的理解:整体是由部分组成的,因此它在某种意义上抓住了智能数据描述的本质.此外,这种非负性的限制导致了相应描述在一定程度上的稀疏性,稀疏性的表述已被证明是介于完全分布式的描述和单一活跃分量的描述之间的一种有效数据描述形式。

       因为纯加性的和稀疏的描述能使对数据的解释变得方便(少量活跃的分量使数据的组成方式变得清晰)与合理(许多物理信号中不可能存在负饷成分),还因为相对稀疏性的表示方式能在一定程度上抑制由外界变化(如:部分遮挡、光照变化和物体的旋转等)给特征提取带来的不利影响,所以NMF已逐渐成为信号处理、生物医学工程、模式识别、计算机视觉和图像工程等研究领域中最受欢迎的多维数据处理工具之一。

        讲得很高深,我竟然无言以对,瞬间感觉自己白活了好久,这么简单的道理都不懂,又瞬间感受到了自然的伟大。我等俗人还是庸俗平凡得理解吧,直观上可以理解为:V被分解为权重矩阵W与系数矩阵H的乘积,那么,系数矩阵H就可以近似表示原始矩阵了,也就是我们常说的降维了。降维的好处就多多了,减小计算量加快计算速度、什么降低内存消耗、数据分析与二维可视化、符合直觉和可解释性。

        记得在大学的时候还写过一篇"基于非负矩阵分解的子空间分类算法研究"文章,至今影响深刻,写的是用NMF进行多源数据分类、半监督文本分类等。

        这么看来,用在文本摘要上就简单了。

        截取的实现代码如下,详情请到github:

from sklearn.decomposition import NMF
import numpy as np

arrary_org = np.array([[1, 3, 5, 7, 9],
                       [2, 4, 6, 8, 10],
                       [1, 4, 7, 11, 18],
                       [3, 4, 5, 10, 11],
                       [6, 1, 3, 2, 4]])

nmf_tfidf = NMF(n_components=3, max_iter=320)
res_nmf_w = nmf_tfidf.fit_transform(arrary_org)  # 基矩阵 or 权重矩阵
res_nmf_h = nmf_tfidf.components_  # 系数矩阵 or 降维矩阵
print(res_nmf_w)
print(res_nmf_h)

       那么,我们得到的系数矩阵,则是主题-句子之间的关系,可用于文本摘要;题外话说一句,权重矩阵可以看成是词语-主题之间的关系,可用于关键词抽取。

        上述实验得到的结果为:

# 1.权重矩阵
[[1.99561456 0.03769528 0.92768855]
 [2.19064197 0.33915908 1.32014035]
 [3.94014929 0.01328534 0.        ]
 [2.35460586 0.44811399 1.68201657]
 [0.72884099 2.33034829 0.        ]]

# 2.系数矩阵, 其中3行代表我们假设的3个主题,5列代表5个句子(文本摘要任务)
[[0.23308465 1.02075584 1.82088679 2.77223548 4.55990793]
 [2.50838191 0.11009464 0.69211444 0.         0.29487349]
 [0.64128912 1.0623294  0.78509361 1.79404758 0.        ]]

        对于主题模型得到的结果,系数矩阵H,也被称为降维后的矩阵。那么,接下来,如何选择,我们犯了难。

        第一种方案,如上所示,我们可以选择某一个最有可能的主题(行),如上所示,主题0(第一行)

        [0.23308465 1.02075584 1.82088679 2.77223548 4.55990793],

        有3个句子的最大主题概率,所以我们就按照主题0(第一行)作为句子主题概率的标准,从大到小,取得最大的k个句子作为文本摘要。

       第二种方案,观察上图,我们分别获取每个句子的最大主题概率(列)[0.23308465,

                                                                                                                   2.50838191,

                                                                                                                   0.64128912],

        然后再依据抽取的每个句子主题概率进行排序。

        第一种方案抽取文本摘要,好处是第一条抽取的句子可能会比较准,而且抽取的k条句子可能会比较相关。而第二种方案,抽取出的句子相似度可能就没那么高了,但是可能会比较全面,比较准确,不会跑偏,不过句子可能会不很连贯,有点儿像MMR。

三、文本摘要之潜在语义分析(LSI,本质是奇异值分解SVD)

        潜在语义分析(LSI),这个诞生于1990年的算法,比NMF诞生的还要早,顾名思义,是因为能够解决词语上下文之间存在的关系,能够得到词语间的潜在语义,而得名的。要知道,传统的统计模型,如one-hot,如tf-idf、如bm25等,是没有上下文信息的,正如你不能通过tf-idf获取电脑和鼠标间的关系。

        潜在语义分析(LSI),又叫LSA,采用的是一种奇异值分解(SVD)的技术,

        公式可以表示为:X = U e V。

        其中X为m*n矩阵,U为m*m正交矩阵,e为m*n的对角矩阵,V为n*n的正交矩阵。可以发现,公式和NMF差别不大,中间多了个e。

        为了降维(除噪保存主特征等),选择对角矩阵e中的最大的k个特征值,k<<min(m,n),这这样子既保存了主特征,又降低了维度,则各个矩阵变成X≈U e V,其中X为m*n矩阵,U为m*k正交矩阵,e为k*k的对角矩阵,V为k*n的正交矩阵。

        不难发现,我们首先对矩阵X进行SVD奇异值分解,求得U, e, V等,然后在取U,e, V的最大的k维作为子矩阵存储。可以发现,k既是主题

        与NMF对应,U就相当于NMF非负矩阵分解中的权重矩阵W,对应词-主题权重等;V就相当于NMF非负矩阵分解中的系数矩阵H,对应主题-句子权重等。

四、文本摘要之隐含狄利克雷分布主题模型(LDA)

参考/感谢:

奇异值分解SVD原理:https://www.cnblogs.com/lantingg/p/7844605.html

奇异值分解SVD物理意义:https://blog.csdn.net/c2a2o2/article/details/70159320

奇异值分解SVD与降维:https://www.cnblogs.com/pinard/p/6251584.html

发布了96 篇原创文章 · 获赞 72 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/rensihui/article/details/102809782
今日推荐