《学术小白的学习之路 07》自然语言处理之 LDA主题模型

本文主要是学习参考杨秀璋老师的博客,笔记总结与记忆。
原文链接

文章目录


书山有路勤为径,学海无涯苦作舟(行行代码要手敲)

《学术小白的学习之路 07》自然语言处理之 LDA主题模型


零、吃水不忘挖井人

原文链接

一、LDA主题模型

1.1简介

LDA(文档主题生成模型)通常由包含词、主题和文档三层结构组成。

LDA模型属于无监督学习,它是将一篇文档的每个词都以一定概率分布在某个主题上,并从这个主题中选择某个词语。

文档到主题的过程是服从多项分布的,主题到词的过程也是服从多项分布的。

文档主题生成模型(又称为盘子表示法(Plate Notation),下图是模型的标示图,其中双圆圈表示可测变量,单圆圈表示潜在变量,箭头表示两个变量之间的依赖关系,矩形框表示重复抽样,对应的重复次数在矩形框的右下角显示。LDA模型的具体实现步骤如下:

  • 从每篇网页D对应的多项分布θ中抽取每个单词对应的一个主题z。
  • 从主题z对应的多项分布φ中抽取一个单词w。

重复步骤(1)(2),共计Nd次,直至遍历网页中每一个单词。

《学术小白的学习之路 07》自然语言处理之 LDA主题模型

1.2安装

二、LDA主题识别

Python的LDA主题模型分布可以进行多种操作,常见的包括:

  • 输出每个数据集的高频词TOP-N
  • 输出文章中每个词对应的权重及文章所属的主题
  • 输出文章与主题的分布概率,文本一行表示一篇文章,概率表示文章属于该类主题的概率;
  • 输出特征词与主题的分布概率,这是一个K*M的矩阵,K为设置分类的个数,M为所有文章词的总数。

2.1前期操作

2.1.1生成TF-IDF文本权重矩阵

先要对文本数据进行分词和数据的清洗操作,对清洗完的数据进行生成文本的权重矩阵。

#coding=utf-8
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.feature_extraction.text import TfidfTransformer  
  
#读取语料
corpus = []  
for line in open('test.txt', 'r').readlines():  
    corpus.append(line.strip())
    
#将文本中的词语转换为词频矩阵
vectorizer = CountVectorizer()  
X = vectorizer.fit_transform(corpus)  #计算个词语出现的次数  
word = vectorizer.get_feature_names() #获取词袋中所有文本关键词

#计算TF-IDF值
transformer = TfidfTransformer()  
tfidf = transformer.fit_transform(X) #将词频矩阵X统计成TF-IDF值

#查看数据结构 输出tf-idf权重
print(tfidf.toarray())
weight = tfidf.toarray()

2.1.2 调用LDA模型

model = lda.LDA(n_topics=3, n_iter=500, random_state=1)  
model.fit(X)          
#model.fit_transform(X) 

参数n_topics表示设置3个主题,n_iter表示设置迭代次数500次,并调用fit(X)或fit_transform(X)函数填充训练数据.

上一篇:PCA和LDA原理


下一篇:LDA算法——线性判别