短文本主题建模方法

Python014

短文本主题建模方法,第1张

许多数据分析应用都会涉及到从短文本中提取出潜在的主题,比如微博、短信、日志文件或者评论数据。一方面,提取出潜在的主题有助于下一步的分析,比如情感评分或者文本分类模型。另一方面,短文本数据存在一定的特殊性,我们无法直接用传统的主题模型算法来处理它。短文本数据的主要难点在于:

主题提取模型通常包含多个流程,比如文本预处理、文本向量化、主题挖掘和主题表示过程。每个流程中都有多种处理方法,不同的组合方法将会产生不同的建模结果。

本文将主要从实际操作的角度来介绍不同的短文本主题建模算法的优缺点,更多理论上的探讨可以参考以下文章。

下文中我将自己创建一个数据集,并利用 Python scikit-learn 来拟合相应的主题模型。

本文主要介绍三个主题模型, LDA(Latent Dirichlet Allocation), NMF(Non-Negative Matrix Factorization)和SVD(Singular Value Decomposition)。本文主要采用 scikit-learn 来实现这三个模型。

除了这三个模型外,还有其他一些模型也可以用来发现文档的结构。其中最重要的一个模型就是 KMeans 聚类模型,本文将对比 KMeans 聚类模型和其他主题模型的拟合效果。

首先,我们需要构建文本数据集。本文将以四个自己构建的文本数据集为例来构建主题模型:

首先,我们需要考虑下如何评估一个主题模型建模效果的好坏程度。多数情况下,每个主题中的关键词有以下两个特征:

一些研究表明:关键词还需具备以下两个特征:

接下来,我们将介绍如何实现上述的四个模型——NMF, SVD, LDA 和 KMEANS。对于每个主题模型,我们将分别采用两种文本向量化的方法—— TF(Term Frequence) 和 TFIDF(Term-frequence-inverse-document-frequence)。通常情况下,如果你的数据集中有许多词语在多篇文档中都频繁出现,那么你应该选择采用 TFIDF 的向量化方法。此时这些频繁出现的词语将被视为噪声数据,这些数据会影响模型的拟合效果。然而对于短文本数据而言,TF和TFIDF方法并没有显著的区别,因为短文本数据集中很难碰到上述情况。如何将文本数据向量化是个非常热门的研究领域,比如 基于word embedding模型的方法——word2vec和doc2vec。

主题模型将选择主题词语分布中频率最高的词语作为该主题的关键词,但是对于 SVD 和 KMEANS 算法来说,模型得到的主题词语矩阵中既包含正向值也包含负向值,我们很难直接从中准确地提取出主题关键词。为了解决这个问题,我选择从中挑出绝对数值最大的几个词语作为关键词,并且根据正负值的情况加上相应的标签,即对负向词语加上 "^" 的前缀,比如"^bergers"。

sklearn 中的 truncated SVD implementation 类似于主成分分析算法,它们都试图利用正交分解的方法选择出具有最大方差的变量信息。

对于 clearcut-topic 数据集来说,我们分别利用 TF 和 TFIDF方法来向量化文本数据,并构建 SVD 模型,模型的拟合结果如下所示。正如我们之前所提到的,SVD 模型所提取的关键词中包含正负向词语。为了简单起见, 我们可以理解为该主题包含正向词语,不包含负向的词语。

比如,对于 "Topic 1: bergers | ^hate | love | ^sandwiches" 来说,该文本的主题中包含 "love bergers" 但是不包含 "hate sandwiches"。

由于模型的随机效应,所以每次运行模型得到的结果都会存在细微的差异。在 SVD 的拟合结果中我们发现发现 Topic 3: bergers | ^hate | ^love | sandwiches 成功地提取了 “food” 的主题。

当我们在解释 SVD 模拟的拟合结果时,我们需要对比多个主题的信息。比如上述的模型拟合结果可以解释成:数据集中文档的主要差异是文档中包含 “love bergers” 但不包含 “hate sandwiches”。

接下来我们将利用 SVD 来拟合 unbalanced topic 数据集,检验该模型处理非平衡数据集的效果。

从下述结果中可以看出,SVD无法处理噪声数据,即无法从中提取出主题信息。

LDA 是最常用的主题提取模型之一,因为该模型能够处理多种类型的文本数据,而且模拟的拟合效果非常易于解释。

直观上来看,LDA 根据不同文档中词语的共现频率来提取文本中潜在的主题信息。另一方面,具有相同主题结构的文本之间往往非常相似,因此我们可以根据潜在的主题空间来推断词语之间的相似性和文档之间的相似性。

LDA 算法中主要有两类参数:

接下来我们将研究这些参数是如何影响 LDA 模型的计算过程,人们更多的是根据经验来选择最佳参数。

与 SVD 模型不同的是,LDA 模型所提取的主题非常好解释。以 clearcut-topics 数据集为例,LDA 模型中每个主题都有明确的关键词,它和SVD主要有以下两个区别:

此外,对 LDA 模型来说,采用不同的文本向量化方法也会得到不同的结果。

在 sklearn 中,参数 topic_word_prior 和 doc_topic_prior 分别用来控制 LDA 模型的两类参数。

其中 topic_word_prior 的默认值是(1/n_topics),这意味着主题中的每个词语服从均匀分布。

NMF 可以视为 LDA模型的特例,从理论上来说,这两个模型之间的联系非常复杂。但是在实际应用中,NMF 经常被视为参数固定且可以获得稀疏解的 LDA 模型。虽然 NMF 模型的灵活性不如 LDA 模型,但是该模型可以很好地处理短文本数据集。

另一方面,NMF 最大的缺点是拟合结果的不一致——当我们设置过大的主题个数时,NMF 拟合的结果非常糟糕。相比之下,LDA模型的拟合结果更为稳健。

首先我们来看下 NMF 模型不一致的拟合结果。对于 clearcut topics 数据集来说,当我们设置提取5个主题时,其结果和真实结果非常相似:

类似于 KMeans 模型的聚类方法能够根据文档的向量形式对其进行分组。然而这个模型无法看成是主题模型,因为我们很难解释聚类结果中的关键词信息。

但是如果结合 TF或TFIDF方法,我们可以将 KMeans 模型的聚类中心视为一堆词语的概率组合:

最后,我将简单比较下不同的主题提取模型。大多数情况下,我们倾向于根据文档的主题分布情况对其进行分组,并根据关键词的分布情况来提取主题的信息。

大多数研究者都认为词语的语义信息是由其上下文信息所决定的,比如 “love” 和 “hate”可以看成是语义相似的词语,因为这两个词都可以用在 “I _ apples” 的语境中。事实上,词向量最重要的一个研究就是如何构建词语、短语或者文档的向量形式,使得新的向量空间中仍然保留着语义信息。

找寻语义相同的词语不同于计算词语的共现频率。从下述的结果中可以看出,大多数主题提取模型只涉及到词语的共现频率,并没有考虑词语的语义信息,只有 SVD 模型简单涉及到语义信息。

需要注意的是,本文所采用的数据集是根据一定的规则随机生成的,所以下述结果更多的是用于说明不同模型之间的区别:

原文链接: http://nbviewer.jupyter.org/github/dolaameng/tutorials/blob/master/topic-finding-for-short-texts/topics_for_short_texts.ipynb

译者:Fibears

因为不知道所学的数学知识到底有什么用。对于IT公司的研发人员来说,他们在进入大数据相关岗位前,总是觉得要先学点数学,但是茫茫的数学世界,哪里才是数据技术的尽头?一谈到数据技术,很多人首先想到的是数学,大概是因为数字在数学体系中稳固的位置吧,这也是理所当然的。本文对数据技术的数学基础这个问题进行一些探讨。(推荐学习:Python视频教程)

我们知道数学的三大分支,即代数、几何与分析,每个分支随着研究的发展延伸出来很多小分支。在这个数学体系中,与大数据技术有密切关系的数学基础主要有以下几类。(关于这些数学方法在大数据技术中的应用参见《互联网大数据处理技术与应用》一书, 2017,清华大学出版社)

(1)概率论与数理统计

这部分与大数据技术开发的关系非常密切,条件概率、独立性等基本概念、随机变量及其分布、多维随机变量及其分布、方差分析及回归分析、随机过程(特别是Markov)、参数估计、Bayes理论等在大数据建模、挖掘中就很重要。大数据具有天然的高维特征,在高维空间中进行数据模型的设计分析就需要一定的多维随机变量及其分布方面的基础。Bayes定理更是分类器构建的基础之一。除了这些这些基础知识外,条件随机场CRF、隐Markov模型、n-gram等在大数据分析中可用于对词汇、文本的分析,可以用于构建预测分类模型。

当然以概率论为基础的信息论在大数据分析中也有一定作用,比如信息增益、互信息等用于特征分析的方法都是信息论里面的概念。

(2)线性代数

这部分的数学知识与数据技术开发的关系也很密切,矩阵、转置、秩 分块矩阵、向量、正交矩阵、向量空间、特征值与特征向量等在大数据建模、分析中也是常用的技术手段。

在互联网大数据中,许多应用场景的分析对象都可以抽象成为矩阵表示,大量Web页面及其关系、微博用户及其关系、文本集中文本与词汇的关系等等都可以用矩阵表示。比如对于Web页面及其关系用矩阵表示时,矩阵元素就代表了页面a与另一个页面b的关系,这种关系可以是指向关系,1表示a和b之间有超链接,0表示a,b之间没有超链接。著名的PageRank算法就是基于这种矩阵进行页面重要性的量化,并证明其收敛性。

以矩阵为基础的各种运算,如矩阵分解则是分析对象特征提取的途径,因为矩阵代表了某种变换或映射,因此分解后得到的矩阵就代表了分析对象在新空间中的一些新特征。所以,奇异值分解SVD、PCA、NMF、MF等在大数据分析中的应用是很广泛的。

(3)最优化方法

模型学习训练是很多分析挖掘模型用于求解参数的途径,基本问题是:给定一个函数f:A→R,寻找一个元素a0∈A,使得对于所有A中的a,f(a0)≤f(a)(最小化);或者f(a0)≥f(a)(最大化)。优化方法取决于函数的形式,从目前看,最优化方法通常是基于微分、导数的方法,例如梯度下降、爬山法、最小二乘法、共轭分布法等。

(4)离散数学

离散数学的重要性就不言而喻了,它是所有计算机科学分支的基础,自然也是数据技术的重要基础。这里就不展开了。

最后,需要提的是,很多人认为自己数学不好,数据技术开发应用也做不好,其实不然。要想清楚自己在大数据开发应用中充当什么角色。参考以下的大数据技术研究应用的切入点,上述数学知识主要体现在数据挖掘与模型层上,这些数学知识和方法就需要掌握了。

当然其他层次上,使用这些数学方法对于改进算法也是非常有意义的,例如在数据获取层,可以利用概率模型估计爬虫采集页面的价值,从而能做出更好的判断。在大数据计算与存储层,利用矩阵分块计算实现并行计算。

更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于Python数据分析要学什么数学的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!

ImportError:DLL

load

failed:找不到指定的模块的解决方法是把numpy、scipy、matplotlib、scikit-learn用pip

uninstall掉,再去下载最新的whl包重新安装。

具体方案是:

第一步:

在命令中输入以下指令卸载相应的包:pip

uninstall

numpy;pip

uninstall

scipy;pip

 uninstall

matplotlib;pip

scikit-learn

第二步:

在下面的网站中找到对应的包,如果是python2.7就是cp27系列的,电脑是多少位的一定下载对应版本

http://www.lfd.uci.edu/~gohlke/pythonlibs/#scipy

http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy

http://www.lfd.uci.edu/~gohlke/pythonlibs/#matplotlib

http://www.lfd.uci.edu/~gohlke/pythonlibs/#scikit-learn

第三步:

找到安装python的目录下的scipyts文件,在这个文件里安装相应的whl包

比如指令为

cd

C:/xxx/xxx/scipyts,然后在这里用指令

pip

install

D:/xxx/xxx/xxx.whl

假如有successful的显示就是完成了。