PaddleHub | LDA话题分析


paddlehub介绍

paddlepaddle是百度的开源深度学习框架(源于产业实践的开源深度学习平台, 飞桨致力于让深度学习技术的创新与应用更简单。)web

如今百度在paddlehub上公开了不少模型,例如算法

  • 文本模型能够作语义分析、文本黄色审查、文本生成、句法分析、情感分析;
  • 图像模型能够作图像分类、关键点检测、文字识别、目标检测、图像生成、人脸检测、图像分割;
  • 视频模型能够作食品分类;

模型列表网址 https://www.paddlepaddle.org.cn/hublist数据库

咱们能够直接借助百度的模型对咱们的数据进行分析,在安装使用相关模型前,须要先配置好paddle微信

配置paddlehub

  1. 确保电脑使用的是Python3.5x、3.6x、3.7x版本
  2. 命令行执行下方命令(苹果电脑pip改成pip3)

pip install paddlepaddle -i https://mirror.baidu.com/pypi/simplemarkdown

  1. 命令行执行下方命令(苹果电脑pip改成pip3)

pip install paddlehubapp

安装lda_news模型

paddlehub上公开了以百度新闻数据集训练出的lda_news主题模型。框架

主题模型(Topic Model)是以无监督学习的方式对文档的隐含语义结构进行聚类的统计模型,其中LDA(Latent Dirichlet Allocation)算法是主题模型的一种。LDA根据对词的共现信息的分析,拟合出词-文档-主题的分布,从而将词、文本映射到一个语义空间中。编辑器

安装模型,好比这里安装lad_news方法,命令行执行下方命令工具

hub install lda_news学习

导入模型

import paddlehub as hub

lda_news = hub.Module(name="lda_news")
[2020-09-02 08:49:54,407] [    INFO] - Installing lda_news module
[2020-09-02 08:49:54,430] [ INFO] - Module lda_news already installed in /Users/thunderhit/.paddlehub/modules/lda_news
[2020-09-02 08:49:54,434] [ INFO] - Loading LDA config.
[2020-09-02 08:49:54,911] [ INFO] - Loading word topic.
100%|██████████| 294657/294657 [00:08<00:00, 34527.42it/s]
[2020-09-02 08:50:03,538] [ INFO] - Model Info: #num_topics=2000 #vocab_size=294657 alpha=0.100000 beta=0.010000
[2020-09-02 08:50:03,539] [ INFO] - Construct alias table for alias sampling method.
100%|██████████| 294657/294657 [00:18<00:00, 16228.32it/s]
[2020-09-02 08:50:22,427] [ INFO] - Installing lac module


Downloading lac
[==================================================] 100.00%
Uncompress /Users/thunderhit/.paddlehub/tmp/tmpultwfcax/lac
[==================================================] 100.00%


[2020-09-02 08:50:39,277] [ INFO] - Successfully installed lac-2.2.0
[2020-09-02 08:50:41,384] [ INFO] - Finish initialization.


0.003109487528061259 0.057317150510233034

调用模型

cal_doc_distance(doc_text1, doc_text2)

用于计算两个输入文档之间的距离,包括Jensen-Shannon divergence(JS散度)、Hellinger Distance(海林格距离)。

参数:

  • doc_text1(str): 输入的第一个文档。
  • doc_text2(str): 输入的第二个文档。

返回

  • jsd(float): 两个文档之间的JS散度(Jensen-Shannon divergence)。
  • hd(float): 两个文档之间的海林格距离(Hellinger Distance)。
jsd, hd = lda_news.cal_doc_distance(doc_text1="今天的天气如何,适合出去游玩吗"
                                    doc_text2="感受今天的天气不错,能够出去玩一玩了")
print(jsd, hd)
0.003109487528061259 0.057317150510233034

cal_query_doc_similarity(query, document)

用于计算短文档与长文档之间的类似度。

参数

  • query(str): 输入的短文档。
  • document(str): 输入的长文档。

返回

  • lda_sim(float): 返回短文档与长文档之间的类似度。
lda_sim = lda_news.cal_query_doc_similarity(query='百度搜索引擎'
                                            document='百度是全球最大的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,能够瞬间找到相关的搜索结果。')
# LDA similarity = 0.06826
lda_sim
0.06826390908033284

infer_doc_topic_distribution(document)

用于推理出文档的主题分布。

参数

  • document(str): 输入文档。

返回

  • results(list): 包含主题分布下各个主题ID和对应的几率分布。其中,list的基本元素为dict,dict的key为主题ID,value为各个主题ID对应的几率。
topic_distributions = lda_news.infer_doc_topic_distribution('百度是全球最大的中文搜索引擎、致力于让网民更便捷地获取信息,找到所求。百度超过千亿的中文网页数据库,能够瞬间找到相关的搜索结果。')
topic_distributions
[{'topic id': 1113, 'distribution': 0.2647058823529412},
{'topic id': 547, 'distribution': 0.11764705882352941},
{'topic id': 832, 'distribution': 0.11764705882352941},
{'topic id': 1299, 'distribution': 0.1},
{'topic id': 168, 'distribution': 0.050980392156862744},
{'topic id': 1707, 'distribution': 0.045098039215686274},
{'topic id': 1698, 'distribution': 0.043137254901960784},
{'topic id': 1738, 'distribution': 0.03333333333333333},
{'topic id': 1431, 'distribution': 0.027450980392156862},
{'topic id': 1468, 'distribution': 0.01764705882352941},
{'topic id': 494, 'distribution': 0.011764705882352941},
{'topic id': 603, 'distribution': 0.00980392156862745},
{'topic id': 1223, 'distribution': 0.00980392156862745},
{'topic id': 1680, 'distribution': 0.00980392156862745},
{'topic id': 10, 'distribution': 0.00784313725490196},
{'topic id': 950, 'distribution': 0.00784313725490196},
{'topic id': 68, 'distribution': 0.0058823529411764705},
{'topic id': 362, 'distribution': 0.0058823529411764705},
{'topic id': 712, 'distribution': 0.0058823529411764705},
{'topic id': 734, 'distribution': 0.0058823529411764705},
{'topic id': 748, 'distribution': 0.0058823529411764705},
{'topic id': 1690, 'distribution': 0.0058823529411764705},
{'topic id': 1986, 'distribution': 0.0058823529411764705},
{'topic id': 47, 'distribution': 0.00392156862745098},
{'topic id': 249, 'distribution': 0.00392156862745098},
{'topic id': 317, 'distribution': 0.00392156862745098},
{'topic id': 438, 'distribution': 0.00392156862745098},
{'topic id': 482, 'distribution': 0.00392156862745098},
{'topic id': 796, 'distribution': 0.00392156862745098},
{'topic id': 1186, 'distribution': 0.00392156862745098},
{'topic id': 1380, 'distribution': 0.00392156862745098},
{'topic id': 1791, 'distribution': 0.00392156862745098},
{'topic id': 1801, 'distribution': 0.00392156862745098},
{'topic id': 14, 'distribution': 0.00196078431372549},
{'topic id': 54, 'distribution': 0.00196078431372549},
{'topic id': 136, 'distribution': 0.00196078431372549},
{'topic id': 187, 'distribution': 0.00196078431372549},
{'topic id': 245, 'distribution': 0.00196078431372549},
{'topic id': 246, 'distribution': 0.00196078431372549},
{'topic id': 267, 'distribution': 0.00196078431372549},
{'topic id': 294, 'distribution': 0.00196078431372549},
{'topic id': 324, 'distribution': 0.00196078431372549},
{'topic id': 341, 'distribution': 0.00196078431372549},
{'topic id': 410, 'distribution': 0.00196078431372549},
{'topic id': 566, 'distribution': 0.00196078431372549},
{'topic id': 713, 'distribution': 0.00196078431372549},
{'topic id': 763, 'distribution': 0.00196078431372549},
{'topic id': 766, 'distribution': 0.00196078431372549},
{'topic id': 821, 'distribution': 0.00196078431372549},
{'topic id': 1088, 'distribution': 0.00196078431372549},
{'topic id': 1164, 'distribution': 0.00196078431372549},
{'topic id': 1339, 'distribution': 0.00196078431372549},
{'topic id': 1483, 'distribution': 0.00196078431372549},
{'topic id': 1637, 'distribution': 0.00196078431372549},
{'topic id': 1712, 'distribution': 0.00196078431372549},
{'topic id': 1923, 'distribution': 0.00196078431372549}]

show_topic_keywords(topic_id, k=10)

用于展现出每一个主题下对应的关键词,可配合推理主题分布的API使用。

参数

  • topic_id(int): 主题ID。
  • k(int): 须要知道对应主题的前k个关键词。

返回

  • results(dict): 返回对应文档的前k个关键词,以及各个关键词在文档中的出现几率。

查看topic id=1113的话题关键词

topic_keywords = lda_news.show_topic_keywords(topic_id=1113, k=10)
topic_keywords
{'百度': 0.48896563697823225,
'搜索': 0.16101479497676738,
'贴吧': 0.03782747698836268,
'搜索引擎': 0.02673388226175899,
'糯米': 0.02418859758507298,
'李彦宏': 0.021650027433631664,
'搜狗': 0.019842621120443188,
'魏则西': 0.011255702550368505,
'百科': 0.010792400308484449,
'工具': 0.01004109289449752}


近期文章

   
tidytext | 耳目一新的R-style文本分析库
rpy2库 | 在jupyter中调用R语言代码
reticulate包 | 在Rmarkdown中调用Python代码
plydata库 | 数据操做管道操做符>>
plotnine: Python版的ggplot2做图库
七夕礼物 | 全网最火的钉子绕线图制做教程
读完本文你就了解什么是文本分析
文本分析在经管领域中的应用概述  
综述:文本分析在市场营销研究中的应用
plotnine: Python版的ggplot2做图库
小案例: Pandas的apply方法   
stylecloud:简洁易用的词云库  
用Python绘制近20年地方财政收入变迁史视频   
Wow~70G上市公司按期报告数据集
漂亮~pandas能够无缝衔接Bokeh  
YelpDaset: 酒店管理类数据集10+G  
后台回复关键词【20200902】获取本文R代码
    分享 ”和“ 在看 ”是更好的支持!




本文分享自微信公众号 - 大邓和他的Python(DaDengAndHisPython)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索