任务一:周杰伦粉丝团数据主题
1.下载安装Robo 3T用于连接mongodb
2.数据存放在ai_crawler中
3.使用python读取数据,并分析:
专辑数:33张 - 2空 = 31
歌曲数:370首 - 69空 = 301
有两个专辑没有评论:album_id=38721188 不爱我就拉倒 comments_num=0;album_id=18870 The Era 2010 超时代演唱会 comments_num=0。
A.数据预处理----分词,jieba分词
支持三种分词模式;支持自定义词典
seg_list = jieba.cut("你的句子",cut_all=True) #全模式
seg_list = jieba.cut("你的句子",cut_all=False) #精确模式
seg_list = jieba.cut_for_search("你的句子") # 搜索引擎模式
·全模式,把句子中所有的可以成词的词语都扫描出来, 速度非常快,但是不能解决歧义;
·精确模式,试图将句子最精确地切开,适合文本分析;
·搜索引擎模式,在精确模式的基础上,对长词再次切分,提高召回率,适合用于搜索引擎分词。 支持繁体分词。
#精确模式: 我/ 去过/ 清华大学/ 和/ 北京大学/ 。
#全模式: 我/ 去过/ 清华/ 清华大学/ 华大/ 大学/ 和/ 北京/ 北京大学/ 大学/ 。
#搜索引擎模式: 我/ 去过/ 清华/ 华大/ 大学/ 清华大学/ 和/ 北京/ 大学/ 北京大学/ 。
B.数据预处理----去除停用词
根据网上现有全部资源,对所谓“哈工大停用词词库”、“四川大学机器学习智能实验室停用词库”、百度停用词表“等等各种停用词表,整理去重在提取中文词(而不是大量英文词和中文标点符号)出了一个比较全面的词表出来,一共1598个。中文停用词表下载:chinese-stopwords。
C.抽取关键词、主题词
a)TF-IDF算法:
TF-IDF(词频-逆文档频率)算法是一种统计方法,用以评估一字词对于一个文件集或一个语料库中的其中一份文件的重要程度。字词的重要性随着它在文件中出现的次数成正比增加,但同时会随着它在语料库中出现的频率成反比下降。该算法在数据挖掘、文本处理和信息检索等领域得到了广泛的应用,如从一篇文章中找到它的关键词(找关键词)。
TFIDF的主要思想是:如果某个词或短语在一篇文章中出现的频率TF高,并且在其他文章中很少出现,则认为此词或者短语具有很好的类别区分能力,适合用来分类。TF-IDF实际上就是 TF*IDF,其中 TF(Term Frequency),表示词条在文章Document 中出现的频率;IDF(Inverse Document Frequency),其主要思想就是,如果包含某个词 Word的文档越少,则这个词的区分度就越大,也就是 IDF 越大。对于如何获取一篇文章的关键词,我们可以计算这边文章出现的所有名词的 TF-IDF,TF-IDF越大,则说明这个名词对这篇文章的区分度就越高,取 TF-IDF 值较大的几个词,就可以当做这篇文章的关键词。
jieba分词中的TFIDF算法调用:
import jieba.analyse
jieba.analyse.extract_tags(sentence, topK=20, withWeight=False, allowPOS=())
jieba.analyse.TFIDF(idf_path=None)
·sentence 为待提取的文本
·topK 为返回几个 TF/IDF 权重最大的关键词,默认值为 20
·withWeight 为是否一并返回关键词权重值,默认值为 False
·allowPOS 仅包括指定词性的词,默认值为空,即不筛选
·idf_path 为 IDF 频率文件
TFIDF算法--专辑主题词结果:
TFIDF算法--歌曲主题词结果:
b)TextRank算法:
该算法先空着!!!!!!
c)LDA算法:
LDA(Latent Dirichlet Allocation)是一种文档生成模型。它认为一篇文章是有多个主题的,而每个主题又对应着不同的词。一篇文章的构造过程,首先是以一定的概率选择某个主题,然后再在这个主题下以一定的概率选出某一个词,这样就生成了这篇文章的第一个词。不断重复这个过程,就生成了整篇文章。当然这里假定词与词之间是没顺序的。
文档生成过程:词--->主题--->文章
LDA过程:文章--->主题--->词
LDA的使用是上述文档生成的逆过程,它将根据一篇得到的文章,去寻找出这篇文章的主题,以及这些主题对应的词。LDA是无监督的机器学习模型,并且使用了词袋模型。一篇文章将会用词袋模型构造成词向量。LDA需要我们手动确定要划分的主题的个数,一般超参数对结果无很大影响。
什么是LDA? 简而言之
·它是一种无监督的贝叶斯模型。
·是一种主题模型,它可以将文档集中的每篇文档按照概率分布的形式给出。
·是一种无监督学习,在训练时不需要手工标注的训练集,需要的是文档集和指定主题的个数。
·是一种典型的词袋模型,它认为一篇文档是由一组词组成的集合,词与词之间没有顺序和先后关系。
同一主题下,某个词出现的概率,以及同一文档下,某个主题出现的概率,两个概率的乘积,可以得到某篇文档出现某个词的概率,在模型训练的时候,调整这两个分布就可以了。
由此可以定义LDA的生成过程:
·对每篇文档,在主题分布中抽取一个主题;(相当于左图)
·对抽到的主题所对应的单词分布中随机抽取一个单词;(在右图中抽)
·重复上述过程直至遍历整篇文档中的每个单词
LDA算法--歌曲主题词结果:
LDA算法--歌曲主题词结果:
参考文章:
【1】NLP中文分词工具比较
【2】python+gensim︱jieba分词、词袋doc2bow、TFIDF文本挖掘
【6】中文停用词词表
【7】题模型TopicModel:通过gensim实现LDA
任务二:模型固化
模型训练train:使用训练集语料输入不断的输入模型,从而建立好模型。
模型测试test:使用测试集语料输入已经搭建好的模型,评估这个模型的预测能力。
模型评估estimate:?????
模型预测predict:不是训练集,也不是测试集,是其他新新新的数据。
参考文章:tensorflow将训练好的模型freeze,即将权重固化到图里面,并使用该模型进行预测
通过代码改写,已经实现了【RNN-for-Joint-NLU-master】模型的固化和预测(分别对应:freeze.py和predict_model.py)。!!!!但是效果和2018-06-26写的模型预测一样,每次运行都会得到不一样的准确率,且远远差于训练过程中得到的准确率。
参考文章: